refactor towards layouts
This commit is contained in:
parent
50ff39d5c0
commit
248e3ce16e
|
@ -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'
|
||||
|
|
26
assets/javascripts/app/layouts.coffee
Normal file
26
assets/javascripts/app/layouts.coffee
Normal 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'
|
||||
|
81
assets/javascripts/app/layouts/default.coffee
Normal file
81
assets/javascripts/app/layouts/default.coffee
Normal 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)
|
||||
|
||||
|
3
assets/javascripts/app/layouts/profile.coffee
Normal file
3
assets/javascripts/app/layouts/profile.coffee
Normal file
|
@ -0,0 +1,3 @@
|
|||
Travis.Layout.Profile = Travis.Layout.extend
|
||||
init: ->
|
||||
|
|
@ -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)
|
||||
|
|
1
assets/javascripts/vendor/ember.js
vendored
1
assets/javascripts/vendor/ember.js
vendored
|
@ -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
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user