diff --git a/assets/scripts/app/controllers/accounts.coffee b/assets/scripts/app/controllers/accounts.coffee index 3d8f59e8..7bc7dff0 100644 --- a/assets/scripts/app/controllers/accounts.coffee +++ b/assets/scripts/app/controllers/accounts.coffee @@ -4,9 +4,5 @@ Travis.AccountsController = Ember.ArrayController.extend init: -> @_super() - # content: (-> - # Travis.Account.find() - # ).property() - findByLogin: (login) -> - @find (account) -> account.get('login') == 'login' + @find (account) -> account.get('login') == login diff --git a/assets/scripts/app/controllers/repos.coffee b/assets/scripts/app/controllers/repos.coffee index 5c198680..992a2f58 100644 --- a/assets/scripts/app/controllers/repos.coffee +++ b/assets/scripts/app/controllers/repos.coffee @@ -33,8 +33,15 @@ Travis.ReposController = Ember.ArrayController.extend searchObserver: (-> search = @get('search') - tab = if search then 'search' else 'recent' - @activate(tab, search: search) + if search + @searchFor search + else + @activate 'recent' + 'recent' ).observes('search') - + searchFor: (phrase) -> + Ember.run.cancel(@searchLater) if @searchLater + @searchLater = Ember.run.later(this, (-> + @activate 'search', search: phrase + ), 500) diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index 48cccfd5..44c2518f 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -92,7 +92,6 @@ resolvePath = (manager, path) -> return b.get('route.length') - a.get('route.length') match = null - console.log(childStates.map( (s) -> s.get('route'))) state = childStates.find (state) -> matcher = state.get('routeMatcher') if match = matcher.match(path) @@ -128,6 +127,11 @@ Travis.Router = Ember.Router.extend showAccount: Ember.Route.transitionTo('root.profile.account') showUserProfile: Ember.Route.transitionTo('root.profile.account.profile') + reload: -> + url = @get('location').getURL() + @transitionTo 'loading' + @route(url) + signedIn: -> !!Travis.app.get('auth.user') @@ -161,6 +165,7 @@ Travis.Router = Ember.Router.extend router.route('/') root: Ember.Route.extend + route: '/' authenticate: (->) loading: Ember.State.extend() @@ -209,7 +214,25 @@ Travis.Router = Ember.Router.extend router.send 'showProfile' deserialize: (router, params) -> - router.get('accountsController').findByLogin(params.login) + controller = router.get('accountsController') + + unless controller.get 'content' + controller.set('content', Travis.Account.find()) + + account = controller.findByLogin(params.login) + + if account + account + else + deferred = $.Deferred() + + observer = -> + if account = controller.findByLogin(params.login) + controller.removeObserver 'content.length', observer + deferred.resolve account + controller.addObserver 'content.length', observer + + deferred.promise() serialize: (router, account) -> if account @@ -271,7 +294,10 @@ Travis.Router = Ember.Router.extend repos.removeObserver 'isLoaded', observer deferred.resolve repos.objectAt(0) - repos.addObserver 'isLoaded', observer + if repos.length + deferred.resolve repos[0] + else + repos.addObserver 'isLoaded', observer deferred.promise() diff --git a/assets/scripts/app/views.coffee b/assets/scripts/app/views.coffee index c1684ac1..6627c557 100644 --- a/assets/scripts/app/views.coffee +++ b/assets/scripts/app/views.coffee @@ -16,7 +16,21 @@ require 'ext/ember/namespace' AuthLayoutView: Travis.View.extend(templateName: 'layouts/simple') ProfileLayoutView: Travis.View.extend(templateName: 'layouts/profile') StatsLayoutView: Travis.View.extend(templateName: 'layouts/simple') - ApplicationView: Travis.View.extend(templateName: 'application') + ApplicationView: Travis.View.extend + templateName: 'application' + localeDidChange: (-> + if locale = Travis.app.get('auth.user.locale') + Travis.setLocale(locale) + Travis.app.get('router').reload() + ).observes('Travis.app.auth.user.locale') + click: (event) -> + # TODO: this solves the case of closing menus and popups, + # but I would like to rewrite it later, not sure how + # yet, but this does not seem optimal + if ! $(event.target).parents().andSelf().hasClass('popup') + @popupCloseAll() + if ! $(event.target).parents().andSelf().hasClass('menu') + $('.menu').removeClass('display') require 'views/accounts' require 'views/build' diff --git a/assets/scripts/app/views/repo/show.coffee b/assets/scripts/app/views/repo/show.coffee index 78322cf8..a5a72352 100644 --- a/assets/scripts/app/views/repo/show.coffee +++ b/assets/scripts/app/views/repo/show.coffee @@ -68,9 +68,10 @@ closeMenu: -> $('.menu').removeClass('display') - menu: -> + menu: (event) -> @popupCloseAll() element = $('#tools .menu').toggleClass('display') + event.stopPropagation() requeue: -> @closeMenu() @@ -80,6 +81,7 @@ @set('active', true) @closeMenu() @popup(event) + event.stopPropagation() canPush: (-> @get('isBuildTab') && @get('build.isFinished') && @get('hasPushPermissions') diff --git a/assets/scripts/travis.coffee b/assets/scripts/travis.coffee index 4af3bf47..1ce801a8 100644 --- a/assets/scripts/travis.coffee +++ b/assets/scripts/travis.coffee @@ -34,9 +34,17 @@ require 'ext/ember/namespace' INTERVALS: { sponsors: -1, times: -1, updateTimes: 1000 } + setLocale: (locale) -> + return unless locale + + I18n.locale = locale + localStorage.setItem('travis.config.locale', locale) + run: (attrs) -> location.href = location.href.replace('#!/', '') if location.hash.slice(0, 2) == '#!' + @setLocale localStorage.getItem('travis.config.locale') + Ember.run.next this, -> app = Travis.App.create(attrs || {}) # TODO: router expects the classes for controllers on main namespace, so diff --git a/public/scripts/app.js b/public/scripts/app.js index caeb6365..46e1ceab 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: $('