diff --git a/assets/javascripts/app/app.coffee b/assets/javascripts/app/app.coffee index 97bd29d6..690055a1 100644 --- a/assets/javascripts/app/app.coffee +++ b/assets/javascripts/app/app.coffee @@ -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 diff --git a/assets/javascripts/app/controllers.coffee b/assets/javascripts/app/controllers.coffee index 264e5ba7..7cb75315 100644 --- a/assets/javascripts/app/controllers.coffee +++ b/assets/javascripts/app/controllers.coffee @@ -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' diff --git a/assets/javascripts/app/controllers/sponsors.coffee b/assets/javascripts/app/controllers/sponsors.coffee index 72c7bd2d..56047468 100644 --- a/assets/javascripts/app/controllers/sponsors.coffee +++ b/assets/javascripts/app/controllers/sponsors.coffee @@ -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: (-> diff --git a/assets/javascripts/app/layout.coffee b/assets/javascripts/app/layout.coffee index c648a623..d0e10167 100644 --- a/assets/javascripts/app/layout.coffee +++ b/assets/javascripts/app/layout.coffee @@ -2,7 +2,5 @@ Travis.Layout = Em.Namespace.create() require 'layout/home' require 'layout/left' -require 'layout/sidebar' require 'layout/profile' require 'layout/stats' - diff --git a/assets/javascripts/app/layout/home.coffee b/assets/javascripts/app/layout/home.coffee index 14ce12eb..90abd9ac 100644 --- a/assets/javascripts/app/layout/home.coffee +++ b/assets/javascripts/app/layout/home.coffee @@ -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) diff --git a/assets/javascripts/app/layout/sidebar.coffee b/assets/javascripts/app/layout/sidebar.coffee deleted file mode 100644 index 2eb788e8..00000000 --- a/assets/javascripts/app/layout/sidebar.coffee +++ /dev/null @@ -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) - diff --git a/assets/javascripts/app/models/repository.coffee b/assets/javascripts/app/models/repository.coffee index 3555a516..6ac132dc 100644 --- a/assets/javascripts/app/models/repository.coffee +++ b/assets/javascripts/app/models/repository.coffee @@ -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) diff --git a/assets/javascripts/app/templates/builds/list.hbs b/assets/javascripts/app/templates/builds/list.hbs index f5bb24bb..414d22c8 100644 --- a/assets/javascripts/app/templates/builds/list.hbs +++ b/assets/javascripts/app/templates/builds/list.hbs @@ -1,33 +1,39 @@ -{{#with view}} -
{{t builds.name}} | -{{t builds.commit}} | -{{t builds.message}} | -{{t builds.duration}} | -{{t builds.finished_at}} | -
---|
{{t builds.name}} | +{{t builds.commit}} | +{{t builds.message}} | +{{t builds.duration}} | +{{t builds.finished_at}} | +
---|---|---|---|---|
{{number}} | -{{formatCommit commit}} | - -{{formatDuration duration}} | -{{formatTime finished_at}} | -
- -
-{{/with}} ++ +
+ {{/with}} +{{else}} +{{t builds.name}} | \\n{{t builds.commit}} | \\n{{t builds.message}} | \\n{{t builds.duration}} | \\n{{t builds.finished_at}} | \\n
---|---|---|---|---|
{{number}} | \\n{{formatCommit commit}} | \\n \\n{{formatDuration duration}} | \\n{{formatTime finished_at}} | \\n
\\n \\n
\\n{{/with}}\\n\");Ember.TEMPLATES['builds/show']=Ember.Handlebars.compile(\"{{#with view}}\\n {{#unless build.isLoaded}}\\n{{this}} | \\n {{/each}}\\n|||
---|---|---|---|
{{number}} | \\n{{formatDuration duration}} | \\n{{formatTime finished_at}} | \\n {{#each configValues}}\\n{{this}} | \\n {{/each}}\\n
\\n Allowed Failures are items in your build matrix that are allowed to\\n fail without causing the entire build to be shown as failed. This lets you add\\n in experimental and preparatory builds to test against versions or\\n configurations that you are not ready to officially support.\\n
\\n\\n You can define allowed failures in the build matrix as follows:\\n
\\nmatrix:\\n allow_failures:\\n - rvm: ruby-head\\n
{{{formatLog log.body}}}\\n\\n{{#if sponsor.name}}\\n
\\n {{t builds.messages.sponsored_by}}\\n {{sponsor.name}}\\n
\\n{{/if}}\\n\");Ember.TEMPLATES['jobs/show']=Ember.Handlebars.compile(\"{{#with view}}\\n {{#if job.isLoaded}}\\n{{{t layouts.about.messages.alpha}}}
\\n{{description}}
\\n\\n \\nPlease wait while we sync with GitHub
\\n{{/if}}\\n\\n\");Ember.TEMPLATES['profile/show']=Ember.Handlebars.compile(\"\\n {{{t profiles.show.messages.notice}}}\\n
\\n\\n\\n {{{t profiles.show.message.your_repos}}}\\n \\n {{{t profiles.show.message.config}}}\\n \\n
\\n\\n{{outlet hooks}}\\n\");Ember.TEMPLATES['queues/list']=Ember.Handlebars.compile(\"{{#each queue in queues}}\\n\\n {{t repositories.duration}}:\\n {{formatDuration lastBuildDuration}},\\n {{t repositories.finished_at}}:\\n {{formatTime lastBuildFinishedAt}}\\n
\\n {{#if description}}\\n{{description}}
\\n {{/if}}\\n \\n{{description}}
\\n\\n\\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n
\\n\");Ember.TEMPLATES['sponsors/links']=Ember.Handlebars.compile(\"%@%@
\\n'.fmt(path, path, number, number, line);\n });\n return result.trim();\n },\n deansi: function(log) {\n var ansi, text;\n log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/g, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, '');\n ansi = ansiparse(log);\n text = '';\n ansi.forEach(function(part) {\n var classes;\n classes = [];\n part.foreground && classes.push(part.foreground);\n part.background && classes.push('bg-' + part.background);\n part.bold && classes.push('bold');\n part.italic && classes.push('italic');\n return text += (classes.length ? '' + part.text + '' : part.text);\n });\n return text.replace(/\\033/g, '');\n },\n fold: function(log) {\n log = this.unfold(log);\n $.each(Travis.Log.FOLDS, function(name, pattern) {\n return log = log.replace(pattern, function() {\n return '{{t builds.name}} | \\n{{t builds.commit}} | \\n{{t builds.message}} | \\n{{t builds.duration}} | \\n{{t builds.finished_at}} | \\n
---|---|---|---|---|
{{number}} | \\n{{formatCommit commit}} | \\n \\n{{formatDuration duration}} | \\n{{formatTime finished_at}} | \\n
\\n \\n
\\n {{/with}}\\n{{else}}\\n{{this}} | \\n {{/each}}\\n|||
---|---|---|---|
{{number}} | \\n{{formatDuration duration}} | \\n{{formatTime finished_at}} | \\n {{#each configValues}}\\n{{this}} | \\n {{/each}}\\n
\\n Allowed Failures are items in your build matrix that are allowed to\\n fail without causing the entire build to be shown as failed. This lets you add\\n in experimental and preparatory builds to test against versions or\\n configurations that you are not ready to officially support.\\n
\\n\\n You can define allowed failures in the build matrix as follows:\\n
\\nmatrix:\\n allow_failures:\\n - rvm: ruby-head\\n
{{{formatLog log.body}}}\\n\\n{{#if sponsor.name}}\\n
\\n {{t builds.messages.sponsored_by}}\\n {{sponsor.name}}\\n
\\n{{/if}}\\n\");Ember.TEMPLATES['jobs/show']=Ember.Handlebars.compile(\"{{#with view}}\\n {{#if job.isLoaded}}\\n{{{t layouts.about.messages.alpha}}}
\\n{{description}}
\\n\\n \\nPlease wait while we sync with GitHub
\\n{{/if}}\\n\\n\");Ember.TEMPLATES['profile/show']=Ember.Handlebars.compile(\"\\n {{{t profiles.show.messages.notice}}}\\n
\\n\\n\\n {{{t profiles.show.message.your_repos}}}\\n \\n {{{t profiles.show.message.config}}}\\n \\n
\\n\\n{{outlet hooks}}\\n\");Ember.TEMPLATES['queues/list']=Ember.Handlebars.compile(\"{{#each queue in controller}}\\n\\n {{t repositories.duration}}:\\n {{formatDuration lastBuildDuration}},\\n {{t repositories.finished_at}}:\\n {{formatTime lastBuildFinishedAt}}\\n
\\n {{#if description}}\\n{{description}}
\\n {{/if}}\\n \\n{{description}}
\\n\\n\\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n
\\n\");Ember.TEMPLATES['sponsors/links']=Ember.Handlebars.compile(\"%@%@
\\n'.fmt(path, path, number, number, line);\n });\n return result.trim();\n },\n deansi: function(log) {\n var ansi, text;\n log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/g, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, '');\n ansi = ansiparse(log);\n text = '';\n ansi.forEach(function(part) {\n var classes;\n classes = [];\n part.foreground && classes.push(part.foreground);\n part.background && classes.push('bg-' + part.background);\n part.bold && classes.push('bold');\n part.italic && classes.push('italic');\n return text += (classes.length ? '' + part.text + '' : part.text);\n });\n return text.replace(/\\033/g, '');\n },\n fold: function(log) {\n log = this.unfold(log);\n $.each(Travis.Log.FOLDS, function(name, pattern) {\n return log = log.replace(pattern, function() {\n return '