diff --git a/Gemfile.lock b/Gemfile.lock index 5d87fdef..23b646af 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -43,7 +43,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-api.git - revision: 5d9c867142162b20d8471530f7447bd4af93c0e4 + revision: 18bffa246014e0ae380734277eb180021f1eb2b4 specs: travis-api (0.0.1) backports (~> 2.5) @@ -61,7 +61,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-core.git - revision: adaa3d48f48a2a002827a2f15078323e53be1d10 + revision: 45cb3ef8222af247c862e4b8a31c7033927d7048 branch: sf-travis-api specs: travis-core (0.0.1) diff --git a/assets/scripts/app/helpers/helpers.coffee b/assets/scripts/app/helpers/helpers.coffee index 34ccf064..eb6ad5cf 100644 --- a/assets/scripts/app/helpers/helpers.coffee +++ b/assets/scripts/app/helpers/helpers.coffee @@ -1,5 +1,5 @@ require 'travis/log' -require 'emoij' +require 'config/emoij' @Travis.Helpers = compact: (object) -> diff --git a/assets/scripts/app/templates/layouts/flash.hbs b/assets/scripts/app/templates/layouts/flash.hbs index 03394c57..81b02190 100644 --- a/assets/scripts/app/templates/layouts/flash.hbs +++ b/assets/scripts/app/templates/layouts/flash.hbs @@ -1,2 +1,6 @@ -

{{view.message}}

- +{{#each flash in controller}} + {{#view Travis.FlashItemView flashBinding="flash"}} +

{{view.message}}

+ + {{/view}} +{{/each}} diff --git a/assets/scripts/app/views/flash.coffee b/assets/scripts/app/views/flash.coffee index 14b52287..5774e862 100644 --- a/assets/scripts/app/views/flash.coffee +++ b/assets/scripts/app/views/flash.coffee @@ -1,11 +1,25 @@ @Travis.reopen FlashView: Travis.View.extend elementId: 'flash' + tagName: 'ul' templateName: 'layouts/flash' + countBinding: 'controller.length' - flashBinding: 'controller.firstObject' - classNameBindings: ['flash.type'] - messageBinding: 'flash.message' + display: (-> + @set('classNames', if @get('count') == 0 then [] else ['display']) + ).observes('count') + + FlashItemView: Travis.View.extend + tagName: 'li' + classNameBindings: ['type'] + + type: (-> + @get('flash') && Ember.keys(@get('flash'))[0] + ).property('flash') + + message: (-> + @get('flash') && @get('flash')[@get('type')] + ).property('flash') close: (event) -> - @get('controller').shiftObject() + @get('controller').removeObject(@get('flash')) diff --git a/assets/scripts/lib/emoij.coffee b/assets/scripts/config/emoij.coffee similarity index 100% rename from assets/scripts/lib/emoij.coffee rename to assets/scripts/config/emoij.coffee diff --git a/assets/scripts/lib/travis/ajax.coffee b/assets/scripts/lib/travis/ajax.coffee index ed294044..8aca5657 100644 --- a/assets/scripts/lib/travis/ajax.coffee +++ b/assets/scripts/lib/travis/ajax.coffee @@ -28,14 +28,11 @@ jQuery.support.cors = true if options.data && method != 'GET' && method != 'get' options.data = JSON.stringify(options.data) - if options.success - success = options.success - options.success = (data) => - if Travis.app?.router && data.flash - console.log(data.flash) - Travis.app.router.flashController.pushObject(data.flash) - delete data.flash - success.call(this, data) + success = options.success || (->) + options.success = (data) => + Travis.app.router.flashController.pushObjects(data.flash) if Travis.app?.router && data.flash + delete data.flash + success.call(this, data) options.error = (data) => Travis.app.router.flashController.pushObject(data.flash) if data.flash diff --git a/assets/scripts/travis.coffee b/assets/scripts/travis.coffee index 7793507d..2fa4b5f3 100644 --- a/assets/scripts/travis.coffee +++ b/assets/scripts/travis.coffee @@ -49,12 +49,13 @@ require 'ext/ember/namespace' $ => app.initialize() + app.router.flashController.pushObject({ error: 'error!' }) loadConfig: (callback) -> @ajax.get '/config', (data) => $.extend @config, data.config - console.log "Connecting to #{data.config.api_endpoint}" callback(data.config) require 'travis/ajax' require 'app' + diff --git a/assets/styles/app/flash.sass b/assets/styles/app/flash.sass index 6be37843..50b7a12b 100644 --- a/assets/styles/app/flash.sass +++ b/assets/styles/app/flash.sass @@ -3,22 +3,22 @@ #flash display: none margin: -20px -40px 20px -30px - padding: 15px 40px 15px 30px color: gray font-weight: bold border-bottom: 1px solid $color-border-light @include box-shadow(transparent 0 0 0 0, $color-border-normal 0 1px 6px 0, transparent 0 0 0 0, transparent 0 0 0 0) - &.success, &.notice, &.error - display: block + li + position: relative + padding: 15px 40px 15px 30px - &.success + .success background-color: #ebfcc2 - &.notice + .notice background-color: lightGoldenrodYellow - &.error + .error background-color: #f5d7d3 p diff --git a/public/scripts/app.js b/public/scripts/app.js index fd1bcd26..25ed591c 100644 --- a/public/scripts/app.js +++ b/public/scripts/app.js @@ -29619,4 +29619,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);\n return this.tailing = new Travis.Tailing();\n },\n signIn: function() {\n return this.get('auth').signIn();\n },\n signOut: function() {\n this.get('auth').signOut();\n return this.get('router').send('showRoot');\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: $('