diff --git a/assets/javascripts/app/app.coffee b/assets/javascripts/app/app.coffee index 690055a1..11546616 100644 --- a/assets/javascripts/app/app.coffee +++ b/assets/javascripts/app/app.coffee @@ -45,15 +45,14 @@ Ember.ENV.RAISE_ON_DEPRECATION = true controller: @controller view.appendTo(@get('rootElement') || 'body') - layout: (name) -> - if @_layout && @_layout.name == name - @_layout - else - @_layout = Travis.Layout[$.camelize(name)].create(parent: @controller) + connectLayout: (name) -> + layout = Travis["#{$.camelize(name)}Controller"].create(parent: @controller) + layout.connect(@controller) + layout + require 'controllers' require 'helpers' -require 'layout' require 'models' require 'router' require 'store' diff --git a/assets/javascripts/app/controllers.coffee b/assets/javascripts/app/controllers.coffee index 7cb75315..ca08e526 100644 --- a/assets/javascripts/app/controllers.coffee +++ b/assets/javascripts/app/controllers.coffee @@ -1,7 +1,7 @@ require 'helpers' require 'travis/ticker' -Travis.Controllers = Em.Namespace.create +Travis.reopen RepositoriesController: Ember.ArrayController.extend # sortProperties: ['sortOrder'] # sortAscending: false @@ -27,7 +27,11 @@ Travis.Controllers = Em.Namespace.create # TopController: Em.Controller.extend # userBinding: 'Travis.app.currentUser' +require 'controllers/base' +require 'controllers/home' +require 'controllers/profile' require 'controllers/repository' require 'controllers/sidebar' require 'controllers/sponsors' +require 'controllers/stats' require 'controllers/workers' diff --git a/assets/javascripts/app/controllers/base.coffee b/assets/javascripts/app/controllers/base.coffee new file mode 100644 index 00000000..b0368f71 --- /dev/null +++ b/assets/javascripts/app/controllers/base.coffee @@ -0,0 +1,20 @@ +Travis.Controller = Em.Controller.extend + init: -> + for name in Array.prototype.slice.apply(arguments) + name = "#{$.camelize(name, false)}Controller" + klass = Travis[$.camelize(name)] || Em.Controller + this[name] = klass.create(namespace: Travis, controllers: this) + + connect: (parent) -> + parent.connectOutlet + outletName: 'layout' + controller: this + viewClass: Travis["#{$.camelize(@get('name'))}Layout"] + + connectTop: -> + @connectOutlet + outletName: 'top' + controller: @topController + viewClass: Travis.TopView + @topController.set('tab', @get('name')) + diff --git a/assets/javascripts/app/controllers/home.coffee b/assets/javascripts/app/controllers/home.coffee new file mode 100644 index 00000000..74557505 --- /dev/null +++ b/assets/javascripts/app/controllers/home.coffee @@ -0,0 +1,19 @@ +require 'controllers/base' + +Travis.HomeController = Travis.Controller.extend + name: 'home' + bindings: [] + + init: -> + @_super('top', 'repositories', 'repository', 'sidebar') + + @connectOutlet outletName: 'left', controller: @repositoriesController, viewClass: Travis.RepositoriesView + @connectOutlet outletName: 'main', controller: @repositoryController, viewClass: Travis.RepositoryView + @connectOutlet outletName: 'right', controller: @sidebarController, viewClass: Travis.SidebarView + + connect: (parent) -> + @_super(parent) + @connectTop() + + activate: (action, params) -> + @repositoryController.activate(action, params) diff --git a/assets/javascripts/app/layout/profile.coffee b/assets/javascripts/app/controllers/profile.coffee similarity index 73% rename from assets/javascripts/app/layout/profile.coffee rename to assets/javascripts/app/controllers/profile.coffee index d5261789..ba513cd2 100644 --- a/assets/javascripts/app/layout/profile.coffee +++ b/assets/javascripts/app/controllers/profile.coffee @@ -1,11 +1,15 @@ -require 'layout/base' +require 'controllers/base' -Travis.Layout.Profile = Travis.Layout.Base.extend +Travis.ProfileController = Travis.Controller.extend name: 'profile' init: -> @_super('top', 'user', 'hooks') + connect: (parent) -> + @_super(parent) + @connectTop() + viewShow: (params) -> @connectUser(@currentUser) @connectHooks(Travis.Hook.find()) diff --git a/assets/javascripts/app/controllers/repository.coffee b/assets/javascripts/app/controllers/repository.coffee new file mode 100644 index 00000000..a615e58c --- /dev/null +++ b/assets/javascripts/app/controllers/repository.coffee @@ -0,0 +1,61 @@ +Travis.RepositoryController = Travis.Controller.extend + bindings: [] + + init: -> + @_super('builds', 'build', 'job') + + activate: (action, params) -> + @_unbind() + @set('params', params) + this["view#{$.camelize(action)}"]() + + viewIndex: -> + @_bind('repository', 'controllers.repositoriesController.firstObject') + @_bind('build', 'repository.lastBuild') + @connectTab('current') + + viewCurrent: -> + @_bind('repository', 'repositoriesByParams.firstObject') + @_bind('build', 'repository.lastBuild') + @connectTab('current') + + viewBuilds: -> + @_bind('repository', 'repositoriesByParams.firstObject') + @_bind('builds', 'repository.builds') + @connectTab('builds') + + viewBuild: -> + @_bind('repository', 'repositoriesByParams.firstObject') + @_bind('build', 'buildById') + @connectTab('build') + + viewJob: -> + @_bind('repository', 'repositoriesByParams.firstObject') + @_bind('build', 'job.build') + @_bind('job', 'jobById') + @connectTab('job') + + repositoriesByParams: (-> + Travis.Repository.bySlug("#{params.owner}/#{params.name}") if params = @get('params') + ).property('params') + + buildById: (-> + Travis.Build.find(id) if id = @getPath('params.id') + ).property('params.id') + + jobById: (-> + Travis.Job.find(id) if id = @getPath('params.id') + ).property('params.id') + + connectTab: (tab) -> + @set('tab', tab) + name = if tab == 'current' then 'build' else tab + @connectOutlet(outletName: 'pane', name: name) + + _bind: (to, from) -> + @bindings.push Ember.oneWay(this, to, from) + + _unbind: -> + binding.disconnect(this) for binding in @bindings + @bindings.length = 0 + diff --git a/assets/javascripts/app/controllers/sidebar.coffee b/assets/javascripts/app/controllers/sidebar.coffee new file mode 100644 index 00000000..bdef9087 --- /dev/null +++ b/assets/javascripts/app/controllers/sidebar.coffee @@ -0,0 +1,35 @@ +Travis.SidebarController = Em.ArrayController.extend + init: -> + @tickables = [] + Travis.Ticker.create(target: this, interval: Travis.INTERVALS.sponsors) + + @connectWorkers(Travis.Worker.find()) + @connectQueues(Travis.QUEUES) + + @connectSponsors('decks', Travis.Sponsor.decks(), 1) + @connectSponsors('links', Travis.Sponsor.links(), 6) + + connectSponsors: (name, sponsors, perPage) -> + controller = Travis.SponsorsController.create(perPage: perPage, content: sponsors) + viewClass = Em.View.extend(templateName: "sponsors/#{name}") + @connectOutlet(outletName: name, controller: controller, viewClass: viewClass) + @tickables.push(controller) + + connectWorkers: (workers) -> + controller = Travis.WorkersController.create(content: workers) + viewClass = Em.View.extend(templateName: 'workers/list') + @connectOutlet(outletName: 'workers', controller: controller, viewClass: viewClass) + + connectQueues: (queues) -> + queues = for queue in queues + Em.ArrayController.create + content: Travis.Job.queued(queue.name) + name: queue.display + controller = Travis.QueuesController.create(content: queues) + viewClass = Em.View.extend(templateName: 'queues/list') + @connectOutlet(outletName: 'queues', controller: controller, viewClass: viewClass) + + tick: -> + tickable.tick() for tickable in @tickables + + diff --git a/assets/javascripts/app/controllers/sponsors.coffee b/assets/javascripts/app/controllers/sponsors.coffee index 56047468..a427086b 100644 --- a/assets/javascripts/app/controllers/sponsors.coffee +++ b/assets/javascripts/app/controllers/sponsors.coffee @@ -1,4 +1,4 @@ -Travis.Controllers.SponsorsController = Em.ArrayController.extend +Travis.SponsorsController = Em.ArrayController.extend page: 0 arrangedContent: (-> diff --git a/assets/javascripts/app/layout/stats.coffee b/assets/javascripts/app/controllers/stats.coffee similarity index 74% rename from assets/javascripts/app/layout/stats.coffee rename to assets/javascripts/app/controllers/stats.coffee index b36aa7c0..3017b8a8 100644 --- a/assets/javascripts/app/layout/stats.coffee +++ b/assets/javascripts/app/controllers/stats.coffee @@ -1,6 +1,6 @@ -require 'layout/base' +require 'controllers/base' -Travis.Layout.Stats = Travis.Layout.Base.extend +Travis.StatsController = Travis.Controller.extend name: 'stats' init: -> diff --git a/assets/javascripts/app/controllers/workers.coffee b/assets/javascripts/app/controllers/workers.coffee index 5c6dc616..3870e519 100644 --- a/assets/javascripts/app/controllers/workers.coffee +++ b/assets/javascripts/app/controllers/workers.coffee @@ -1,4 +1,4 @@ -Travis.Controllers.WorkersController = Em.ArrayController.extend +Travis.WorkersController = Em.ArrayController.extend groups: (-> groups = {} for worker in @get('content').toArray() diff --git a/assets/javascripts/app/layout.coffee b/assets/javascripts/app/layout.coffee deleted file mode 100644 index d0e10167..00000000 --- a/assets/javascripts/app/layout.coffee +++ /dev/null @@ -1,6 +0,0 @@ -Travis.Layout = Em.Namespace.create() - -require 'layout/home' -require 'layout/left' -require 'layout/profile' -require 'layout/stats' diff --git a/assets/javascripts/app/layout/base.coffee b/assets/javascripts/app/layout/base.coffee deleted file mode 100644 index e8124ede..00000000 --- a/assets/javascripts/app/layout/base.coffee +++ /dev/null @@ -1,36 +0,0 @@ -Travis.Layout.Base = Em.Object.extend - init: -> - @parent = @get('parent') - - @setup(Array.prototype.slice.apply(arguments).concat([@get('name'), 'top'])) - @connect() - - setup: (controllers) -> - $.extend this, Travis.Controllers - $.extend this, Travis.Views - - # ember wants this kind of setup for its connectOutlets magic - for name in controllers - key = "#{$.camelize(name, false)}Controller" - name = $.camelize(key) - klass = Travis.Controllers[name] || Em.Controller - this[key] = klass.create(layout: this, namespace: this, controllers: this) - - @controller = this["#{$.camelize(@get('name'), false)}Controller"] - @viewClass = Travis.Views["#{$.camelize(@get('name'))}Layout"] - - connect: -> - @parent.connectOutlet - outletName: 'layout' - controller: @controller - viewClass: @viewClass - @connectTop() - - connectTop: -> - @controller.connectOutlet(outletName: 'top', name: 'top') - @topController.set('tab', @get('name')) - - activate: (action, params) -> - this["view#{$.camelize(action)}"]() - @set('params', params) - diff --git a/assets/javascripts/app/layout/home.coffee b/assets/javascripts/app/layout/home.coffee deleted file mode 100644 index 90abd9ac..00000000 --- a/assets/javascripts/app/layout/home.coffee +++ /dev/null @@ -1,15 +0,0 @@ -require 'layout/base' - -Travis.Layout.Home = Travis.Layout.Base.extend - name: 'home' - bindings: [] - - init: -> - @_super('repositories', 'repository', 'sidebar') - - @controller.connectOutlet(outletName: 'left', name: 'repositories') - @controller.connectOutlet(outletName: 'main', name: 'repository') - @controller.connectOutlet(outletName: 'right', name: 'sidebar') - - activate: (action, params) -> - @repositoryController.activate(action, params) diff --git a/assets/javascripts/app/layout/left.coffee b/assets/javascripts/app/layout/left.coffee deleted file mode 100644 index 1400f3d1..00000000 --- a/assets/javascripts/app/layout/left.coffee +++ /dev/null @@ -1,16 +0,0 @@ -require 'layout/base' - -Travis.Layout.Left = Travis.Layout.Base.extend - name: 'sidebar' - - init: -> - @_super('repositories') - @parent = @get('parent') - @connectLeft(Travis.Repository.find()) - - connect: -> - @parent.connectOutlet(outletName: 'right', name: 'sidebar') - - connectLeft: (repositories) -> - @parent.set('repositories', repositories) - @parent.connectOutlet(outletName: 'left', name: 'repositories', context: repositories) diff --git a/assets/javascripts/app/router.coffee b/assets/javascripts/app/router.coffee index 1788e878..98feb270 100644 --- a/assets/javascripts/app/router.coffee +++ b/assets/javascripts/app/router.coffee @@ -22,6 +22,6 @@ Travis.Router = Em.Object.extend action: (name, action, params) -> # this needs to be a global reference because Em.routes is global - layout = Travis.app.layout(name) + layout = Travis.app.connectLayout(name) layout.activate(action, params) $('body').attr('id', name) diff --git a/assets/javascripts/app/templates/builds/list.hbs b/assets/javascripts/app/templates/builds/list.hbs index 414d22c8..01cd354c 100644 --- a/assets/javascripts/app/templates/builds/list.hbs +++ b/assets/javascripts/app/templates/builds/list.hbs @@ -13,7 +13,7 @@ {{#each build in builds}} - {{#view Travis.Views.BuildsItemView contextBinding="build"}} + {{#view Travis.BuildsItemView contextBinding="build"}} {{number}} {{formatCommit commit}} diff --git a/assets/javascripts/app/templates/builds/show.hbs b/assets/javascripts/app/templates/builds/show.hbs index 8f0d4bd7..412ee8b2 100644 --- a/assets/javascripts/app/templates/builds/show.hbs +++ b/assets/javascripts/app/templates/builds/show.hbs @@ -38,10 +38,10 @@ {{#if build.isMatrix}} - {{view Travis.Views.JobsView jobsBinding="requiredJobs" required="true"}} - {{view Travis.Views.JobsView jobsBinding="allowedFailureJobs"}} + {{view Travis.JobsView jobsBinding="requiredJobs" required="true"}} + {{view Travis.JobsView jobsBinding="allowedFailureJobs"}} {{else}} - {{view Travis.Views.LogView contextBinding="build.jobs.firstObject"}} + {{view Travis.LogView contextBinding="build.jobs.firstObject"}} {{/if}} {{else}} diff --git a/assets/javascripts/app/templates/jobs/list.hbs b/assets/javascripts/app/templates/jobs/list.hbs index 41d42fd3..9f026f74 100644 --- a/assets/javascripts/app/templates/jobs/list.hbs +++ b/assets/javascripts/app/templates/jobs/list.hbs @@ -21,7 +21,7 @@ {{#each job in jobs}} - {{#view Travis.Views.JobsItemView contextBinding="job"}} + {{#view Travis.JobsItemView contextBinding="job"}} {{number}} {{formatDuration duration}} diff --git a/assets/javascripts/app/templates/jobs/show.hbs b/assets/javascripts/app/templates/jobs/show.hbs index c3bf2d6a..f5d16509 100644 --- a/assets/javascripts/app/templates/jobs/show.hbs +++ b/assets/javascripts/app/templates/jobs/show.hbs @@ -34,7 +34,7 @@
{{formatConfig job.config}}
- {{view Travis.Views.LogView contextBinding="job"}}} + {{view Travis.LogView contextBinding="job"}}} {{/if}} {{/with}} diff --git a/assets/javascripts/app/templates/repositories/_tabs.hbs b/assets/javascripts/app/templates/repositories/_tabs.hbs new file mode 100644 index 00000000..9cafa613 --- /dev/null +++ b/assets/javascripts/app/templates/repositories/_tabs.hbs @@ -0,0 +1,31 @@ + + +
+ +
+

+

+

+

+

+
+
diff --git a/assets/javascripts/app/templates/repositories/list.hbs b/assets/javascripts/app/templates/repositories/list.hbs index c833916b..76a89890 100644 --- a/assets/javascripts/app/templates/repositories/list.hbs +++ b/assets/javascripts/app/templates/repositories/list.hbs @@ -1,6 +1,6 @@