move stuff from the home layout to controllers

This commit is contained in:
Sven Fuchs 2012-07-06 17:42:27 +02:00
parent a43eb1916c
commit ee1ecf32f7
26 changed files with 146 additions and 280 deletions

View File

@ -3,6 +3,7 @@ require 'ext/jquery'
# $.mockjaxSettings.log = false
# Ember.LOG_BINDINGS = true
Ember.ENV.RAISE_ON_DEPRECATION = true
@Travis = Em.Namespace.create
CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala']
@ -37,8 +38,6 @@ require 'ext/jquery'
@routes = Travis.Router.create()
@routes.start()
@initialize(Em.Object.create()) # TODO sheesh.
connect: ->
@controller = Em.Controller.create()
view = Em.View.create

View File

@ -3,22 +3,14 @@ require 'travis/ticker'
Travis.Controllers = Em.Namespace.create
RepositoriesController: Ember.ArrayController.extend
contentBinding: 'layout.repositories'
# sortProperties: ['sortOrder']
# sortAscending: false
RepositoryController: Em.Controller.extend
repositoryBinding: 'layout.repository'
TabsController: Em.Controller.extend
repositoryBinding: 'layout.repository'
buildBinding: 'layout.build'
jobBinding: 'layout.job'
tabBinding: 'layout.tab'
init: ->
@set('content', Travis.Repository.find())
BuildsController: Em.ArrayController.extend
repositoryBinding: 'layout.repository'
contentBinding: 'layout.builds'
repositoryBinding: 'parent.repository'
contentBinding: 'parent.builds'
BuildController: Em.Controller.extend
repositoryBinding: 'layout.repository'
@ -35,5 +27,7 @@ Travis.Controllers = Em.Namespace.create
# TopController: Em.Controller.extend
# userBinding: 'Travis.app.currentUser'
require 'controllers/repository'
require 'controllers/sidebar'
require 'controllers/sponsors'
require 'controllers/workers'

View File

@ -9,7 +9,7 @@ Travis.Controllers.SponsorsController = Em.ArrayController.extend
if content = @get('content') then $.shuffle(content) else []
).property('content.length')
next: ->
tick: ->
@set('page', if @isLast() then 0 else @get('page') + 1)
pages: (->

View File

@ -2,7 +2,5 @@ Travis.Layout = Em.Namespace.create()
require 'layout/home'
require 'layout/left'
require 'layout/sidebar'
require 'layout/profile'
require 'layout/stats'

View File

@ -5,65 +5,11 @@ Travis.Layout.Home = Travis.Layout.Base.extend
bindings: []
init: ->
@_super('repositories', 'repository', 'tabs', 'builds', 'build', 'job')
# Travis.Layout.Sidebar.create(parent: @controller)
@_super('repositories', 'repository', 'sidebar')
@controller.connectOutlet(outletName: 'left', name: 'repositories')
@controller.connectOutlet(outletName: 'main', name: 'repository')
@controller.connectOutlet(outletName: 'tabs', name: 'tabs')
@set('repositories', Travis.Repository.find())
@controller.connectOutlet(outletName: 'right', name: 'sidebar')
activate: (action, params) ->
@_unbind()
@set('tab', if action == 'index' then 'current' else action)
@_super(action, params)
viewIndex: ->
@_bind('repository', 'repositories.firstObject')
@_bind('build', 'repository.lastBuild')
@connectTab('build')
viewCurrent: ->
@_bind('repository', 'repositoriesByParams.firstObject')
@_bind('build', 'repository.lastBuild')
@connectTab('build')
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')
_bind: (to, from) ->
@bindings.push Ember.oneWay(this, to, from)
_unbind: ->
binding.disconnect(this) for binding in @bindings
@bindings.length = 0
connectTab: (tab) ->
@controller.connectOutlet(outletName: 'tab', name: tab)
@repositoryController.activate(action, params)

View File

@ -1,40 +0,0 @@
require 'layout/base'
Travis.Layout.Sidebar = Travis.Layout.Base.extend
name: 'sidebar'
init: ->
@_super('sponsors', 'workers', 'queues')
@parent = @get('parent')
@connectSponsors(Travis.Sponsor.decks(), Travis.Sponsor.links())
@connectWorkers(Travis.Worker.find())
@connectQueues(Travis.QUEUES)
Travis.Ticker.create(target: this, interval: Travis.INTERVALS.sponsors)
connect: ->
@parent.connectOutlet(outletName: 'right', name: 'sidebar')
connectSponsors: (decks, links) ->
@sponsorsController = Em.Controller.create
decks: Travis.Controllers.SponsorsController.create(perPage: 1, content: decks)
links: Travis.Controllers.SponsorsController.create(perPage: 6, content: links)
@parent.set 'sponsors', @sponsorsController
tick: ->
@sponsorsController.get('decks').next()
@sponsorsController.get('links').next()
connectWorkers: (workers) ->
@workersController.set('content', workers)
@parent.set('workers', @workersController)
connectQueues: (queues) ->
queues = for queue in queues
Em.ArrayController.create
content: Travis.Job.queued(queue.name)
name: queue.display
@queuesController.set('content', queues)
@parent.set('queues', @queuesController)

View File

@ -56,6 +56,7 @@ require 'travis/model'
@find(search: query, orderBy: 'name')
bySlug: (slug) ->
# TODO use filter?
repo = $.detect(@find().toArray(), (repo) -> repo.get('slug') == slug)
if repo then Ember.ArrayProxy.create(content: [repo]) else @find(slug: slug)

View File

@ -1,33 +1,39 @@
{{#with view}}
<table id="builds" class="list">
<thead>
<tr>
<th>{{t builds.name}}</th>
<th>{{t builds.commit}}</th>
<th>{{t builds.message}}</th>
<th>{{t builds.duration}}</th>
<th>{{t builds.finished_at}}</th>
</tr>
</thead>
{{#if builds.isLoaded}}
{{#with view}}
<table id="builds" class="list">
<thead>
<tr>
<th>{{t builds.name}}</th>
<th>{{t builds.commit}}</th>
<th>{{t builds.message}}</th>
<th>{{t builds.duration}}</th>
<th>{{t builds.finished_at}}</th>
</tr>
</thead>
<tbody>
{{#each build in builds}}
{{#view Travis.Views.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>
<td class="message">{{{formatMessage commit.message short="true"}}}</td>
<td class="duration" {{bindAttr title="started_at"}}>{{formatDuration duration}}</td>
<td class="finished_at timeago" {{bindAttr title="finished_at"}}>{{formatTime finished_at}}</td>
</tr>
{{/view}}
{{/each}}
</tbody>
</table>
<tbody>
{{#each build in builds}}
{{#view Travis.Views.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>
<td class="message">{{{formatMessage commit.message short="true"}}}</td>
<td class="duration" {{bindAttr title="started_at"}}>{{formatDuration duration}}</td>
<td class="finished_at timeago" {{bindAttr title="finished_at"}}>{{formatTime finished_at}}</td>
</tr>
{{/view}}
{{/each}}
</tbody>
</table>
<p>
<button {{action showMore on="click" target="builds" isVisibleBinding="hasMore"}}>
{{t builds.show_more}}
</button>
</p>
{{/with}}
<p>
<button {{action showMore on="click" target="builds" isVisibleBinding="hasMore"}}>
{{t builds.show_more}}
</button>
</p>
{{/with}}
{{else}}
<div id="builds" class="loading">
<span>Loading</span>
</div>
{{/if}}

View File

@ -1,9 +1,5 @@
{{#with view}}
{{#unless build.isLoaded}}
<div id="build" class="loading">
<span>Loading</span>
</div>
{{else}}
{{#if build.isLoaded}}
<div id="build" {{bindAttr class="color"}}>
<dl id="summary">
<div class="left">
@ -48,5 +44,9 @@
{{view Travis.Views.LogView contextBinding="build.jobs.firstObject"}}
{{/if}}
</div>
{{/unless}}
{{else}}
<div id="build" class="loading">
<span>Loading</span>
</div>
{{/if}}
{{/with}}

View File

@ -29,12 +29,6 @@
<div id="main">
{{outlet main}}
{{outlet tabs}}
<div class="tab">
{{outlet tab}}
</div>
<div id="right">
{{outlet right}}
</div>

View File

@ -6,10 +6,10 @@
<div class='icon'></div>&nbsp;
</div>
{{view templateName="sponsors/decks"}}
{{view templateName="workers/list" id="workers"}}
{{view templateName="queues/list" id="queues"}}
{{view templateName="sponsors/links"}}
{{outlet decks}}
{{outlet workers}}
{{outlet queues}}
{{outlet links}}
<div id="alpha_warning" class="box">
<h4>{{t layouts.about.alpha}}</h4>

View File

@ -1,4 +1,4 @@
{{#each queue in queues}}
{{#each queue in controller}}
<h4>{{t queue}}: {{queue.name}}</h4>
<ul>
{{#each queue}}

View File

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

View File

@ -12,6 +12,12 @@
<li><a class="watchers" title="Watches" {{bindAttr href="view.urlGithubWatchers"}}>{{stats.watchers}}</a></li>
<li><a class="forks" title="Forks" {{bindAttr href="view.urlGithubNetwork"}}>{{stats.forks}}</a></li>
</ul>
{{view templateName="repositories/_tabs" contextBinding="view"}}
</div>
<div class="tab">
{{outlet pane}}
</div>
{{/with}}
{{else}}

View File

@ -1,39 +0,0 @@
<ul class="tabs">
<li id="tab_current" {{bindAttr class="view.classCurrent"}}>
<h5><a {{bindAttr href="view.urlRepository"}}>{{t repositories.tabs.current}}</a></h5>
</li>
<li id="tab_builds" {{bindAttr class="view.classBuilds"}}>
<h5><a {{bindAttr href="view.urlBuilds"}}>{{t repositories.tabs.build_history}}</a></h5>
</li>
<li id="tab_pull_requests" {{bindAttr class="view.classPullRequests"}}>
<h5><a {{bindAttr href="view.urlPullRequests"}}>{{t repositories.tabs.pull_requests}}</a></h5>
</li>
<li id="tab_branches" {{bindAttr class="view.classBranches"}}>
<h5><a {{bindAttr href="view.urlBranches"}}>{{t repositories.tabs.branches}}</a></h5>
</li>
{{#if view.isBuildTab}}
{{#with view.build}}
<li id="tab_build" {{bindAttr class="view.classBuild"}}>
<h5><a {{bindAttr href="view.urlBuild"}}>{{t repositories.tabs.build}} #{{number}}</a></h5>
</li>
{{/with}}
{{/if}}
{{#if view.isJobTab}}
{{#with view.job}}
<li id="tab_job" {{bindAttr class="view.classJob"}}>
<h5><a {{bindAttr href="view.urlJob"}}>{{t repositories.tabs.job}} #{{number}}</a></h5>
</li>
{{/with}}
{{/if}}
</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,7 +1,7 @@
<h4>{{t layouts.application.sponsers}}</h4>
<ul class="sponsors top">
{{#each deck in sponsors.decks}}
{{#each deck in controller}}
{{#each deck}}
<li {{bindAttr class="type"}}>
<a {{bindAttr href="url"}}>

View File

@ -2,7 +2,7 @@
<h4>{{t layouts.application.sponsers}}</h4>
<ul class="sponsors bottom">
{{#each sponsors.links}}
{{#each controller}}
<li>
{{{link}}}
</li>

View File

@ -1,6 +1,6 @@
<h4>{{t workers}}</h4>
<ul>
{{#each group in workers.groups}}
{{#each group in controller.groups}}
<li class="group">
<h5>{{group.firstObject.host}}</h5>
<ul>

View File

@ -20,6 +20,5 @@ require 'views/build'
require 'views/job'
require 'views/repo'
require 'views/profile'
require 'views/tabs'
require 'views/top'

View File

@ -27,7 +27,51 @@
RepositoryView: Em.View.extend
templateName: 'repositories/show'
repositoryBinding: 'controller.repository'
buildBinding: 'controller.build'
jobBinding: 'controller.job'
tabBinding: 'controller.tab'
toggleTools: ->
$('#tools .pane').toggle()
# hrm. how to parametrize bindAttr?
classCurrent: (->
'active' if @get('tab') == 'current'
).property('tab')
classBuilds: (->
'active' if @get('tab') == 'builds'
).property('tab')
classBuild: (->
tab = @get('tab')
classes = []
classes.push('active') if tab == 'build'
classes.push('display') if tab == 'build' || tab == 'job'
classes.join(' ')
).property('tab')
classJob: (->
'active display' if @get('tab') == 'job'
).property('tab')
urlRepository: (->
Travis.Urls.repository(@getPath('repository.slug'))
).property('repository.slug')
urlBuilds: (->
Travis.Urls.builds(@getPath('repository.slug'))
).property('repository.slug')
urlBuild: (->
Travis.Urls.build(@getPath('repository.slug'), @getPath('build.id'))
).property('repository.slug', 'build.id')
urlJob: (->
Travis.Urls.job(@getPath('repository.slug'), @getPath('job.id'))
).property('repository.slug', 'job.id')
urlGithub: (->
Travis.Urls.githubRepository(@getPath('repository.slug'))
@ -40,3 +84,4 @@
urlGithubNetwork: (->
Travis.Urls.githubNetwork(@getPath('repository.slug'))
).property('repository.slug'),

View File

@ -1,55 +0,0 @@
@Travis.Views.reopen
TabsView: Em.View.extend
templateName: 'repositories/tabs'
repositoryBinding: 'controller.repository'
buildBinding: 'controller.build'
jobBinding: 'controller.job'
tabBinding: 'controller.tab'
toggleTools: ->
$('#tools .pane').toggle()
isBuildTab: (->
tab = @getPath('tab')
(tab == 'build' || tab == 'job') && @getPath('build.isLoaded')
).property('tab', 'build.isLoaded')
isJobTab: (->
@getPath('tab') == 'job' && @getPath('job.isLoaded')
).property('tab', 'job.isLoaded')
# hrm. how to parametrize bindAttr?
classCurrent: (->
'active' if @getPath('tab') == 'current'
).property('tab')
classBuilds: (->
'active' if @getPath('tab') == 'builds'
).property('tab')
classBuild: (->
'active' if @getPath('tab') == 'build'
).property('tab')
classJob: (->
'active' if @getPath('tab') == 'job'
).property('tab')
urlRepository: (->
Travis.Urls.repository(@getPath('repository.slug'))
).property('repository.slug')
urlBuilds: (->
Travis.Urls.builds(@getPath('repository.slug'))
).property('repository.slug')
urlBuild: (->
Travis.Urls.build(@getPath('repository.slug'), @getPath('build.id'))
).property('repository.slug', 'build.id')
urlJob: (->
Travis.Urls.job(@getPath('repository.slug'), @getPath('job.id'))
).property('repository.slug', 'job.id')

View File

@ -1,6 +1,6 @@
require 'ext/jquery'
responseTime = 10000
responseTime = 0
repositories = [
{ id: 1, owner: 'travis-ci', name: 'travis-core', slug: 'travis-ci/travis-core', build_ids: [1, 2], last_build_id: 1, last_build_number: 1, last_build_result: 0, last_build_finished_at: '2012-07-02T00:00:00Z', description: 'Description of travis-core' },

View File

@ -69,9 +69,6 @@ pre::-webkit-scrollbar-thumb:horizontal
font-size: 25px
color: #FFFFFF
.display
display: block !important
.loading
padding: 15px 25px 0 0
span

View File

@ -48,3 +48,13 @@
background-image: inline-image('icons/github-watchers.png')
&.forks
background-image: inline-image('icons/github-forks.png')
.tabs
#tab_build,
#tab_job
display: none
.tabs
#tab_build.display,
#tab_job.display
display: inline-block

File diff suppressed because one or more lines are too long

View File

@ -96,15 +96,10 @@ pre::-webkit-scrollbar-thumb:horizontal {
}
/* line 72, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
.display {
display: block !important;
}
/* line 75, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
.loading {
padding: 15px 25px 0 0;
}
/* line 77, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
/* line 74, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
.loading span {
padding-right: 25px;
font-size: 13px;
@ -112,14 +107,14 @@ pre::-webkit-scrollbar-thumb:horizontal {
background: url('data:image/gif;base64,R0lGODlhEAAIAPMHAP///+vr66CgoN7e3rW1tYuLi/X19Wtra3t7e87OzsbGxqGhodfX142NjZaWlqurqyH/C05FVFNDQVBFMi4wAwEAAAAh/hoiQ3JlYXRlZCB3aXRoIENoaW1wbHkuY29tIgAh+QQACgD/ACwAAAAAEAAIAAADKXiq0P7glHmglRSMPUDgBlZUQ/B5ZhBOo2Z2qSqSL2qumaEbwK7PFkgCACH5BAAKAP8ALAAAAAAQAAgAAAQwsKCJwLkH6F2Er0dRZJvWfZaYBUNrnAKoAkEdvF6cjrSNoyGe7QaT8QxIpISyI5UiACH5BAAKAP8ALAAAAAAQAAgAAAQvcIkpALoInL0F+Y41ZUdhHh4oCqRZoB8RIqPmwirN2mcqr61ebFYrnSQUC4b3igAAIfkEAAoA/wAsAAAAABAACAAABDAQyCmqACijQpYnQEMQDWZxSgqKpFmhajiWyEmkyjq7ApzLrdqr8wHSThOKBaMpRAAAIfkEAAoA/wAsAAAAABAACAAABDMQyEmBuGKxxBl4y/IADmEKzKAmwMItpEmg6sC6CVye6dq+MV7tBtzNNp1PaGQUVJ6YTAQAIfkEAAoA/wAsAAAAABAACAAABC8QyEmrBSknQJYnxiAGgCIqnKKCQUuaA0qoCuuWZ7oa7pvPO4PQgNFwPAvCZQmIAAAh+QQACgD/ACwAAAAAEAAIAAAEKRDISau1LGlmhg+A5wGJyAUoOKADaRqpyrremYZzWRs8D/QGQGZzKQIiACH5BAAKAP8ALAAAAAAQAAgAAAMhCLrc/iyMGcCcQNLAueVD1o3eAIpk90koZ7wvABvyDEEJADs=') no-repeat right 4px;
}
/* line 83, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
/* line 80, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
.emoji {
vertical-align: middle;
width: 20px;
height: 20px;
}
/* line 88, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
/* line 85, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
.help {
display: inline-block;
height: 19px;
@ -130,7 +125,7 @@ pre::-webkit-scrollbar-thumb:horizontal {
cursor: pointer;
}
/* line 97, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
/* line 94, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
.context_help_caption {
text-align: left;
font-size: 16px;
@ -139,27 +134,27 @@ pre::-webkit-scrollbar-thumb:horizontal {
border-bottom: 1px solid #cccccc;
}
/* line 104, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
/* line 101, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
.context_help {
display: none;
}
/* line 107, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
/* line 104, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
.context_help_body {
font-size: 1em;
line-height: 1.429;
margin: 1.429em 0;
}
/* line 113, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
/* line 110, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
#facebox .content {
display: block !important;
}
/* line 115, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
/* line 112, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
#facebox .close {
display: none;
}
/* line 117, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
/* line 114, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/application.sass */
#facebox pre::-webkit-scrollbar {
height: 0;
width: 0;
@ -541,6 +536,16 @@ table.list td:last-child {
#repository .github-stats a.forks {
background-image: url('data:image/png;base64,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');
}
/* line 53, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */
#repository .tabs #tab_build,
#repository .tabs #tab_job {
display: none;
}
/* line 58, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/repository.sass */
#repository .tabs #tab_build.display,
#repository .tabs #tab_job.display {
display: inline-block;
}
/* line 3, /Volumes/Users/sven/Development/projects/travis/travis-ember/assets/stylesheets/main/summary.sass */
#summary {
margin: 0 0 0 12px;