diff --git a/app/components/flash-display.coffee b/app/components/flash-display.coffee index dcf379a0..bb21f6a0 100644 --- a/app/components/flash-display.coffee +++ b/app/components/flash-display.coffee @@ -1,58 +1,15 @@ `import Ember from 'ember'` -`import LimitedArray from 'travis/utils/limited-array'` FlashDisplayComponent = Ember.Component.extend - auth: Ember.inject.service() - store: Ember.inject.service() - currentUserBinding: 'auth.currentUser' + flashes: Ember.inject.service() classNames: ['flash'] tagName: 'ul' - init: -> - @_super.apply this, arguments - @set('flashes', LimitedArray.create(limit: 1, content: [])) - - messages: (-> - broadcasts = @get('unseenBroadcasts') - flashes = @get('flashes') - model = [] - model.pushObjects(broadcasts) if broadcasts - model.pushObjects(flashes.toArray().reverse()) if flashes - model.uniq() - ).property('unseenBroadcasts.[]', 'flashes.[]', 'unseenBroadcasts.length', 'flashes.length') - - unseenBroadcasts: (-> - @get('broadcasts').filter (broadcast) -> - !broadcast.get('isSeen') - ).property('broadcasts.[]', 'broadcasts.length') - - broadcasts: (-> - broadcasts = Ember.ArrayProxy.create(content: []) - - if @get('currentUser.id') - @get('store').find('broadcast').then (result) -> - broadcasts.pushObjects(result.toArray()) - - broadcasts - ).property('currentUser.id') - - loadFlashes: (msgs) -> - for msg in msgs - type = Object.keys(msg)[0] - msg = { type: type, message: msg[type] } - @get('flashes').unshiftObject(msg) - Ember.run.later(this, (-> @get('flashes.content').removeObject(msg)), 15000) - - close: (msg) -> - if msg.constructor.modelName == "broadcast" - msg.setSeen() - @notifyPropertyChange('unseenBroadcasts') - else - @get('flashes').removeObject(msg) + messagesBinding: 'flashes.messages' actions: closeMessage: (msg) -> - @close(msg) + @get('flashes').close(msg) `export default FlashDisplayComponent` diff --git a/app/controllers/flash.js b/app/controllers/flash.js new file mode 100644 index 00000000..0b56c699 --- /dev/null +++ b/app/controllers/flash.js @@ -0,0 +1,9 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + flashes: Ember.inject.service(), + + loadFlashes() { + return this.get('flashes').loadFlashes(...arguments); + } +}); diff --git a/app/initializers/auth.coffee b/app/initializers/auth.coffee index d3706644..5f18a20f 100644 --- a/app/initializers/auth.coffee +++ b/app/initializers/auth.coffee @@ -8,6 +8,7 @@ initialize = (container, app) -> app.inject('controller', 'auth', 'auth:main') app.inject('application', 'auth', 'auth:main') app.inject('component', 'auth', 'auth:main') + app.inject('service:flashes', 'auth', 'auth:main') app.inject('auth', 'store', 'service:store') diff --git a/app/services/flashes.coffee b/app/services/flashes.coffee new file mode 100644 index 00000000..db3ad895 --- /dev/null +++ b/app/services/flashes.coffee @@ -0,0 +1,51 @@ +`import Ember from 'ember'` +`import LimitedArray from 'travis/utils/limited-array'` + +FlashesService = Ember.Service.extend + store: Ember.inject.service() + + currentUserBinding: 'auth.currentUser' + + init: -> + @_super.apply this, arguments + @set('flashes', LimitedArray.create(limit: 1, content: [])) + + messages: (-> + broadcasts = @get('unseenBroadcasts') + flashes = @get('flashes') + model = [] + model.pushObjects(broadcasts) if broadcasts + model.pushObjects(flashes.toArray().reverse()) if flashes + model.uniq() + ).property('unseenBroadcasts.[]', 'flashes.[]', 'unseenBroadcasts.length', 'flashes.length') + + unseenBroadcasts: (-> + @get('broadcasts').filter (broadcast) -> + !broadcast.get('isSeen') + ).property('broadcasts.[]', 'broadcasts.length') + + broadcasts: (-> + broadcasts = Ember.ArrayProxy.create(content: []) + + if @get('currentUser.id') + @get('store').find('broadcast').then (result) -> + broadcasts.pushObjects(result.toArray()) + + broadcasts + ).property('currentUser.id') + + loadFlashes: (msgs) -> + for msg in msgs + type = Object.keys(msg)[0] + msg = { type: type, message: msg[type] } + @get('flashes').unshiftObject(msg) + Ember.run.later(this, (-> @get('flashes.content').removeObject(msg)), 15000) + + close: (msg) -> + if msg.constructor.modelName == "broadcast" + msg.setSeen() + @notifyPropertyChange('unseenBroadcasts') + else + @get('flashes').removeObject(msg) + +`export default FlashesService` diff --git a/app/templates/layouts/flash.hbs b/app/templates/layouts/flash.hbs deleted file mode 100644 index 8b137891..00000000 --- a/app/templates/layouts/flash.hbs +++ /dev/null @@ -1 +0,0 @@ -