get rid of Layout and Travis.Controller and Travis.View namespaces

This commit is contained in:
Sven Fuchs 2012-07-07 00:46:31 +02:00
parent ee1ecf32f7
commit b2874c4516
28 changed files with 201 additions and 101 deletions

View File

@ -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'

View File

@ -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'

View File

@ -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'))

View File

@ -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)

View File

@ -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())

View File

@ -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

View File

@ -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

View File

@ -1,4 +1,4 @@
Travis.Controllers.SponsorsController = Em.ArrayController.extend
Travis.SponsorsController = Em.ArrayController.extend
page: 0
arrangedContent: (->

View File

@ -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: ->

View File

@ -1,4 +1,4 @@
Travis.Controllers.WorkersController = Em.ArrayController.extend
Travis.WorkersController = Em.ArrayController.extend
groups: (->
groups = {}
for worker in @get('content').toArray()

View File

@ -1,6 +0,0 @@
Travis.Layout = Em.Namespace.create()
require 'layout/home'
require 'layout/left'
require 'layout/profile'
require 'layout/stats'

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -13,7 +13,7 @@
<tbody>
{{#each build in builds}}
{{#view Travis.Views.BuildsItemView contextBinding="build"}}
{{#view Travis.BuildsItemView contextBinding="build"}}
<tr {{bindAttr class="view.color"}}>
<td class="number"><a {{bindAttr href="view.urlBuild"}}>{{number}}</a></td>
<td class="commit"><a {{bindAttr href="view.urlGithubCommit"}}>{{formatCommit commit}}</a></td>

View File

@ -38,10 +38,10 @@
</dl>
{{#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}}
</div>
{{else}}

View File

@ -21,7 +21,7 @@
</thead>
<tbody>
{{#each job in jobs}}
{{#view Travis.Views.JobsItemView contextBinding="job"}}
{{#view Travis.JobsItemView contextBinding="job"}}
<tr {{bindAttr class="view.color"}}>
<td class="number"><a {{bindAttr href="view.urlJob"}}>{{number}}</a></td>
<td class="duration" {{bindAttr title="started_at"}}>{{formatDuration duration}}</td>

View File

@ -34,7 +34,7 @@
<dd class="config">{{formatConfig job.config}}</dd>
</dl>
{{view Travis.Views.LogView contextBinding="job"}}}
{{view Travis.LogView contextBinding="job"}}}
</div>
{{/if}}
{{/with}}

View File

@ -0,0 +1,31 @@
<ul class="tabs">
<li id="tab_current" {{bindAttr class="classCurrent"}}>
<h5><a {{bindAttr href="urlRepository"}}>{{t repositories.tabs.current}}</a></h5>
</li>
<li id="tab_builds" {{bindAttr class="classBuilds"}}>
<h5><a {{bindAttr href="urlBuilds"}}>{{t repositories.tabs.build_history}}</a></h5>
</li>
<li id="tab_pull_requests" {{bindAttr class="classPullRequests"}}>
<h5><a {{bindAttr href="urlPullRequests"}}>{{t repositories.tabs.pull_requests}}</a></h5>
</li>
<li id="tab_branches" {{bindAttr class="classBranches"}}>
<h5><a {{bindAttr href="urlBranches"}}>{{t repositories.tabs.branches}}</a></h5>
</li>
<li id="tab_build" {{bindAttr class="classBuild"}}>
<h5><a {{bindAttr href="urlBuild"}}>{{t repositories.tabs.build}} #{{build.number}}</a></h5>
</li>
<li id="tab_job" {{bindAttr class="classJob"}}>
<h5><a {{bindAttr href="urlJob"}}>{{t repositories.tabs.job}} #{{job.number}}</a></h5>
</li>
</ul>
<div id="tools">
<a href="#" {{action toggleTools}}></a>
<div class="pane">
<p><label>{{t repositories.branch}}:</label><select></select></p>
<p><label>{{t repositories.image_url}}:</label><input type="text" class="url"></input></p>
<p><label>{{t repositories.markdown}}:</label><input type="text" class="markdown"></input></p>
<p><label>{{t repositories.textile}}:</label><input type="text" class="textile"></input></p>
<p><label>{{t repositories.rdoc}}:</label><input type="text" class="rdoc"></input></p>
</div>
</div>

View File

@ -1,6 +1,6 @@
<ul id="repositories">
{{#each repository in controller.arrangedContent}}
{{#view Travis.Views.RepositoriesItemView contextBinding="repository"}}
{{#view Travis.RepositoriesItemView contextBinding="repository"}}
<li {{bindAttr class="view.classes"}}>
<a {{bindAttr href="view.urlRepository"}} class="current">{{slug}}</a>
<a {{bindAttr href="view.urlLastBuild"}} class="last_build">#{{lastBuildNumber}}</a>

View File

@ -1,6 +1,6 @@
require 'ext/ember/namespace'
@Travis.Views = Em.Namespace.create
@Travis.reopen
HomeLayout: Em.View.extend(templateName: 'layouts/home')
ProfileLayout: Em.View.extend(templateName: 'layouts/simple')
StatsLayout: Em.View.extend(templateName: 'layouts/simple')

View File

@ -1,4 +1,4 @@
@Travis.Views.reopen
@Travis.reopen
BuildsView: Em.View.extend
templateName: 'builds/list'
buildsBinding: 'controller'

View File

@ -1,4 +1,4 @@
@Travis.Views.reopen
@Travis.reopen
JobsView: Em.View.extend
templateName: 'jobs/list'
buildBinding: 'controller.build'

View File

@ -1,4 +1,4 @@
@Travis.Views.reopen
@Travis.reopen
UserView: Em.View.extend
templateName: 'profile/show'

View File

@ -1,4 +1,4 @@
@Travis.Views.reopen
@Travis.reopen
RepositoriesView: Em.View.extend
templateName: 'repositories/list'

View File

@ -1,4 +1,4 @@
@Travis.Views.reopen
@Travis.reopen
TopView: Em.View.extend
templateName: 'layouts/top'

File diff suppressed because one or more lines are too long