refactor towards layouts

This commit is contained in:
Sven Fuchs 2012-06-29 21:58:45 +02:00
parent 50ff39d5c0
commit 248e3ce16e
8 changed files with 132 additions and 101 deletions

View File

@ -1,6 +1,7 @@
require 'hax0rs'
# $.mockjaxSettings.log = false
# Ember.LOG_BINDINGS = true
@Travis = Em.Namespace.create
run: ->
@ -9,51 +10,15 @@ require 'hax0rs'
App: Em.Application.extend
initialize: (router) ->
# ember wants this dependencies setup for connectOutlet
$.extend this, Travis.Controllers
$.extend this, Travis.Views
for name, controller of Travis.Controllers
name = name.charAt(0).toLowerCase() + name.substr(1)
this[name] = controller.create(namespace: this, controllers: this)
@store = Travis.Store.create()
@routes = Travis.Router.create(app: this)
@_super(Em.Object.create())
@routes.start()
connectLayout: ->
view = Travis.Views.ApplicationView.create()
view.set('controller', @applicationController)
view.appendTo(@get('rootElement') || 'body')
connectLeft: (repositories) ->
@set('repositories', repositories)
@get('applicationController').connectOutlet(outletName: 'left', name: 'repositories', context: repositories)
connectRepository: (repository) ->
@set('repository', repository)
@get('applicationController').connectOutlet(outletName: 'main', name: 'repository', context: repository)
connectTabs: (build, job) ->
@setPath('tabsController.repository', @get('repository'))
@setPath('tabsController.build', build)
@setPath('tabsController.job', job)
@get('repositoryController').connectOutlet(outletName: 'tabs', name: 'tabs')
connectBuilds: (builds) ->
@get('repositoryController').connectOutlet(outletName: 'tab', name: 'history', context: builds)
connectBuild: (build) ->
@get('repositoryController').connectOutlet(outletName: 'tab', name: 'build', context: build)
connectJob: (job) ->
@get('repositoryController').connectOutlet(outletName: 'tab', name: 'job', context: job)
require 'ext/jquery'
require 'controllers'
require 'helpers'
require 'layouts'
require 'models'
require 'router'
require 'store'

View File

@ -0,0 +1,26 @@
Travis.Layout = Em.Object.extend
init: ->
@setupControllers()
@setupViews()
@connectLeft(Travis.Repository.find())
setupControllers: ->
$.extend this, Travis.Controllers
for name, controller of Travis.Controllers
name = name.charAt(0).toLowerCase() + name.substr(1)
this[name] = controller.create(namespace: this, controllers: this)
setupViews: ->
$.extend this, Travis.Views
view = Travis.Views.ApplicationView.create()
view.set('controller', @applicationController)
view.appendTo(@get('rootElement') || 'body')
Travis.Layout.instance = (name) ->
if @layout && @layout.name == name
@layout
else
@layout = Travis.Layout[name].create(name: name)
require 'layouts/default'

View File

@ -0,0 +1,81 @@
Travis.Layout.Default = Travis.Layout.extend
init: ->
@_super()
@connectLeft(Travis.Repository.find())
viewIndex: (params) ->
repositories = @get('repositories')
onceLoaded repositories, =>
repository = repositories.get('firstObject')
@connectRepository(repository)
@connectTabs()
@connectBuild(repository.get('lastBuild'))
viewCurrent: (params) ->
@viewRepository params, (repository) =>
@connectTabs()
@connectBuild(repository.get('lastBuild'))
viewBuilds: (params) ->
@viewRepository params, (repository) =>
@connectTabs()
@connectBuilds(repository.get('builds'))
viewBuild: (params) ->
@viewRepository params
@buildBy params.id, (build) =>
@connectTabs(build)
@connectBuild(build)
viewJob: (params) ->
@viewRepository params
@jobBy params.id, (job) =>
@connectTabs(job.get('build'), job)
@connectJob(job)
viewRepository: (params, callback) ->
@repositoryBy params, (repository) =>
@connectRepository(repository)
callback(repository) if callback
repositoryBy: (params, callback) ->
repositories = Travis.Repository.bySlug("#{params.owner}/#{params.name}")
onceLoaded repositories, =>
callback(repositories.get('firstObject'))
buildBy: (id, callback) =>
build = Travis.Build.find(id)
onceLoaded build, =>
callback(build)
jobBy: (id, callback) ->
job = Travis.Job.find(id)
onceLoaded job, =>
callback(job)
connectLeft: (repositories) ->
@set('repositories', repositories)
@get('applicationController').connectOutlet(outletName: 'left', name: 'repositories', context: repositories)
connectRepository: (repository) ->
@set('repository', repository)
@get('applicationController').connectOutlet(outletName: 'main', name: 'repository', context: repository)
connectTabs: (build, job) ->
@setPath('tabsController.repository', @get('repository'))
@setPath('tabsController.build', build)
@setPath('tabsController.job', job)
@get('repositoryController').connectOutlet(outletName: 'tabs', name: 'tabs')
connectBuilds: (builds) ->
@get('repositoryController').connectOutlet(outletName: 'tab', name: 'history', context: builds)
connectBuild: (build) ->
@get('repositoryController').connectOutlet(outletName: 'tab', name: 'build', context: build)
connectJob: (job) ->
@get('repositoryController').connectOutlet(outletName: 'tab', name: 'job', context: job)

View File

@ -0,0 +1,3 @@
Travis.Layout.Profile = Travis.Layout.extend
init: ->

View File

@ -1,71 +1,25 @@
Travis.Router = Em.Object.extend
ROUTES:
'!/:owner/:name/jobs/:id/:line': 'job'
'!/:owner/:name/jobs/:id': 'job'
'!/:owner/:name/builds/:id': 'build'
'!/:owner/:name/builds': 'builds'
'!/:owner/:name/pull_requests': 'pullRequests'
'!/:owner/:name/branch_summary': 'branches'
'!/:owner/:name': 'current'
'': 'index'
'!/profile': ['Profile', 'show']
'!/:owner/:name/jobs/:id/:line': ['Default', 'job']
'!/:owner/:name/jobs/:id': ['Default', 'job']
'!/:owner/:name/builds/:id': ['Default', 'build']
'!/:owner/:name/builds': ['Default', 'builds']
'!/:owner/:name/pull_requests': ['Default', 'pullRequests']
'!/:owner/:name/branch_summary': ['Default', 'branches']
'!/:owner/:name': ['Default', 'current']
'': ['Default', 'index']
init: () ->
init: ->
@app = @get('app')
start: ->
@app.connectLayout()
@app.connectLeft(Travis.Repository.find())
@route(route, action) for route, action of @ROUTES
@route(route, target[0], target[1]) for route, target of @ROUTES
route: (route, tab) ->
Em.routes.add(route, (params) => this[tab](params))
route: (route, layout, action) ->
Em.routes.add route, (params) =>
@action(layout, action, params)
index: (params) ->
repositories = @app.get('repositories')
onceLoaded repositories, =>
repository = repositories.get('firstObject')
@app.connectRepository(repository)
@app.connectTabs()
@app.connectBuild(repository.get('lastBuild'))
current: (params) ->
@repository params, (repository) =>
@app.connectTabs()
@app.connectBuild(repository.get('lastBuild'))
builds: (params) ->
@repository params, (repository) =>
@app.connectTabs()
@app.connectBuilds(repository.get('builds'))
build: (params) ->
@repository params
@buildBy params.id, (build) =>
@app.connectTabs(build)
@app.connectBuild(build)
job: (params) ->
@repository params
@jobBy params.id, (job) =>
@app.connectTabs(job.get('build'), job)
@app.connectJob(job)
repository: (params, callback) ->
@repositoryBy params, (repository) =>
@app.connectRepository(repository)
callback(repository) if callback
repositoryBy: (params, callback) ->
repositories = Travis.Repository.bySlug("#{params.owner}/#{params.name}")
onceLoaded repositories, =>
callback(repositories.get('firstObject'))
buildBy: (id, callback) =>
build = Travis.Build.find(id)
onceLoaded build, =>
callback(build)
jobBy: (id, callback) ->
job = Travis.Job.find(id)
onceLoaded job, =>
callback(job)
action: (layout, action, params) ->
layout = Travis.Layout.instance(layout)
layout["view#{$.camelize(action)}"](params)

View File

@ -11524,6 +11524,7 @@ Ember.ControllerMixin.reopen({
if (controller && context) { controller.set('content', context); }
view = viewClass.create();
if (controller) { set(view, 'controller', controller); }
set(this, outletName, view);
return view;

File diff suppressed because one or more lines are too long

View File

@ -13478,6 +13478,7 @@ Ember.ControllerMixin.reopen({
if (controller && context) { controller.set('content', context); }
view = viewClass.create();
if (controller) { set(view, 'controller', controller); }
set(this, outletName, view);
return view;