From a806dd7ff86691e9f078bb1bc18b3393f3d2bbbe Mon Sep 17 00:00:00 2001 From: Sven Fuchs Date: Fri, 19 Oct 2012 04:27:07 +0200 Subject: [PATCH] refactor broadcasts --- assets/scripts/app/auth.coffee | 3 +- assets/scripts/app/controllers/flash.coffee | 39 +- assets/scripts/app/models/broadcast.coffee | 12 + assets/scripts/app/views/flash.coffee | 6 +- assets/scripts/travis.coffee | 4 +- public/scripts/app.js | 2 +- public/scripts/min/app.js | 2 +- public/styles/app.css | 3213 ++++++++++--------- public/version | 2 +- 9 files changed, 1648 insertions(+), 1635 deletions(-) diff --git a/assets/scripts/app/auth.coffee b/assets/scripts/app/auth.coffee index 0cac0687..6076b4a8 100644 --- a/assets/scripts/app/auth.coffee +++ b/assets/scripts/app/auth.coffee @@ -31,7 +31,8 @@ @signIn() if localStorage.getItem('travis.auto_signin') signOut: -> - localStorage.clear() + localStorage.removeItem('travis.auto_signin') + localStorage.removeItem('travis.locale') sessionStorage.clear() @setData() diff --git a/assets/scripts/app/controllers/flash.coffee b/assets/scripts/app/controllers/flash.coffee index 48b336e3..20e5b8a5 100644 --- a/assets/scripts/app/controllers/flash.coffee +++ b/assets/scripts/app/controllers/flash.coffee @@ -2,37 +2,32 @@ Travis.FlashController = Ember.ArrayController.extend broadcastBinding: 'Travis.app.currentUser.broadcasts' init: -> + @set('flashes', Ember.A()) @_super.apply this, arguments - @set('content', Ember.A()) + + content: (-> + @get('unseenBroadcasts').concat(@get('flashes')) + ).property('unseenBroadcasts.length', 'flashes.length') + + unseenBroadcasts: (-> + @get('broadcasts').filterProperty('isSeen', false) + ).property('broadcasts.isLoaded', 'broadcasts.length') broadcasts: (-> - Travis.Broadcast.find() if Travis.app.get('currentUser') + if Travis.app.get('currentUser') then Travis.Broadcast.find() else Ember.A() ).property('Travis.app.currentUser') - broadcastsObserver: (-> - if broadcasts = @get('broadcasts') - broadcasts.forEach (msg) => @pushObject(msg.toObject()) unless @isSeenBroadcast(msg) - ).observes('broadcasts.length') - loadFlashes: (msgs) -> for msg in msgs type = Ember.keys(msg)[0] msg = { type: type, message: msg[type] } - @pushObject(msg) - Ember.run.later(this, (-> @removeObject(msg)), 15000) + @get('flashes').pushObject(msg) + Ember.run.later(this, (-> @get('flashes').removeObject(msg)), 15000) close: (msg) -> - @storeSeenBroadcast(msg) if msg.type == 'broadcast' - @removeObject(msg) + if msg instanceof Travis.Broadcast + msg.setSeen() + @notifyPropertyChange('unseenBroadcasts') + else + @get('flashes').removeObject(msg) - isSeenBroadcast: (msg) -> - msg.get('id') in @seenBroadcasts() - - seenBroadcasts: -> - seen = localStorage.getItem('travis.seen_broadcasts') - if seen then JSON.parse(seen) else [] - - storeSeenBroadcast: (msg) -> - seen = @seenBroadcasts() - seen.push(msg.id) - localStorage.setItem('travis.seen_broadcasts', JSON.stringify(seen)) diff --git a/assets/scripts/app/models/broadcast.coffee b/assets/scripts/app/models/broadcast.coffee index e00b659b..df61f901 100644 --- a/assets/scripts/app/models/broadcast.coffee +++ b/assets/scripts/app/models/broadcast.coffee @@ -6,6 +6,18 @@ require 'travis/model' toObject: -> { type: 'broadcast', id: @get('id'), message: @get('message') } + isSeen: (-> + @get('id') in Travis.Broadcast.seen + ).property() + + setSeen: -> + Travis.Broadcast.seen.pushObject(@get('id')) + localStorage.setItem('travis.seen_broadcasts', JSON.stringify(Travis.Broadcast.seen)) + @notifyPropertyChange('isSeen') + @Travis.Broadcast.reopenClass + seen: Ember.A(JSON.parse(localStorage.getItem('travis.seen_broadcasts')) || []) + # TODO fix or monkey-patch the adapter's url and key lookup/generation crap # url: 'users/broadcasts' + diff --git a/assets/scripts/app/views/flash.coffee b/assets/scripts/app/views/flash.coffee index 2800abe0..8ae1b516 100644 --- a/assets/scripts/app/views/flash.coffee +++ b/assets/scripts/app/views/flash.coffee @@ -6,7 +6,11 @@ FlashItemView: Travis.View.extend tagName: 'li' - classNameBindings: ['flash.type'] + classNameBindings: ['type'] + + type: (-> + @get('flash.type') || 'broadcast' + ).property('flash.type') close: (event) -> @get('controller').close(@get('flash')) diff --git a/assets/scripts/travis.coffee b/assets/scripts/travis.coffee index 1ce801a8..9489ad32 100644 --- a/assets/scripts/travis.coffee +++ b/assets/scripts/travis.coffee @@ -38,12 +38,12 @@ require 'ext/ember/namespace' return unless locale I18n.locale = locale - localStorage.setItem('travis.config.locale', locale) + localStorage.setItem('travis.locale', locale) run: (attrs) -> location.href = location.href.replace('#!/', '') if location.hash.slice(0, 2) == '#!' - @setLocale localStorage.getItem('travis.config.locale') + @setLocale localStorage.getItem('travis.locale') Ember.run.next this, -> app = Travis.App.create(attrs || {}) diff --git a/public/scripts/app.js b/public/scripts/app.js index e1a46281..28792c5e 100644 --- a/public/scripts/app.js +++ b/public/scripts/app.js @@ -30140,4 +30140,4 @@ var _require=function(){function c(a,c){document.addEventListener?a.addEventList ++g&&setTimeout(c,0)})}}(); (function(){!window.WebSocket&&window.MozWebSocket&&(window.WebSocket=window.MozWebSocket);if(window.WebSocket)Pusher.Transport=window.WebSocket,Pusher.TransportType="native";var c=(document.location.protocol=="http:"?Pusher.cdn_http:Pusher.cdn_https)+Pusher.VERSION,a=[];window.JSON||a.push(c+"/json2"+Pusher.dependency_suffix+".js");if(!window.WebSocket)window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION=!0,a.push(c+"/flashfallback"+Pusher.dependency_suffix+".js");var b=function(){return window.WebSocket?function(){Pusher.ready()}: function(){window.WebSocket?(Pusher.Transport=window.WebSocket,Pusher.TransportType="flash",window.WEB_SOCKET_SWF_LOCATION=c+"/WebSocketMain.swf",WebSocket.__addTask(function(){Pusher.ready()}),WebSocket.__initialize()):(Pusher.Transport=null,Pusher.TransportType="none",Pusher.ready())}}(),e=function(a){var b=function(){document.body?a():setTimeout(b,0)};b()},g=function(){e(b)};a.length>0?_require(a,g):g()})(); -;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n Travis.reopen({\n App: Em.Application.extend({\n autoinit: false,\n currentUserBinding: 'auth.user',\n authStateBinding: 'auth.state',\n init: function() {\n this._super.apply(this, arguments);\n this.store = Travis.Store.create();\n this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n this.set('auth', Travis.Auth.create({\n app: this,\n endpoint: Travis.config.api_endpoint\n }));\n this.slider = new Travis.Slider();\n this.pusher = new Travis.Pusher(Travis.config.pusher_key);\n return this.tailing = new Travis.Tailing();\n },\n signIn: function() {\n return this.get('auth').signIn();\n },\n autoSignIn: function() {\n return this.get('auth').autoSignIn();\n },\n signOut: function() {\n this.get('auth').signOut();\n return this.get('router').send('afterSignOut');\n },\n receive: function() {\n return this.store.receive.apply(this.store, arguments);\n },\n toggleSidebar: function() {\n var element;\n $('body').toggleClass('maximized');\n element = $('');\n $('#top .profile').append(element);\n Em.run.later((function() {\n return element.remove();\n }), 10);\n element = $('');\n $('#repo').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n this.Travis.Auth = Ember.Object.extend({\n iframe: $('