diff --git a/assets/images/icons/clock.png b/assets/images/icons/clock.png index 1a1e0ec2..730bb206 100644 Binary files a/assets/images/icons/clock.png and b/assets/images/icons/clock.png differ diff --git a/assets/javascripts/app/templates/repos/show/tabs.hbs b/assets/javascripts/app/templates/repos/show/tabs.hbs index 92f93562..23a8243d 100644 --- a/assets/javascripts/app/templates/repos/show/tabs.hbs +++ b/assets/javascripts/app/templates/repos/show/tabs.hbs @@ -30,14 +30,14 @@
  • - {{t repositories.tabs.build}} #{{view.build.number}} + {{t repositories.tabs.build}} {{view.build.number}}
  • - {{t repositories.tabs.job}} #{{view.job.number}} + {{t repositories.tabs.job}} {{view.job.number}}
  • diff --git a/assets/stylesheets/layout.sass b/assets/stylesheets/layout.sass index 6be4e3e5..664a6c79 100644 --- a/assets/stylesheets/layout.sass +++ b/assets/stylesheets/layout.sass @@ -1,6 +1,6 @@ @import "_mixins/all" -$left-width: 300px +$left-width: 250px body background: inline-image('ui/background-left.png') repeat-y ($left-width - 790px) top @@ -22,7 +22,7 @@ body > div #main position: relative overflow: hidden - min-width: 650px + min-width: 630px margin: 20px 275px 40px ($left-width + 40px) &.maximized padding: 60px 100px 30px 440px @@ -39,19 +39,28 @@ body > div border-bottom: 1px solid $color-border-light // @include transition(width .1s ease-out) -@for $i from 1 through 20 - @media screen and (min-width: (1340 + $i * 10px)) +$step: 12px +@for $i from 1 through 10 + @media screen and (min-width: (1180px + $i * $step * 2)) body - background-position-x: ($left-width + $i * 5px - 790px) + background-position-x: ($left-width + $i * $step - 790px) #left - width: ($left-width + $i * 5px) + width: ($left-width + $i * $step) #main - margin-left: ($left-width + $i * 5px + 40px) + margin-left: ($left-width + $i * $step + 40px) + +@media screen and (max-width: 1400px) + #left .duration_label + display: inline-block + width: 11px + height: 14px + margin-right: 1px + text-indent: -200px + overflow: hidden + background: inline-image('icons/clock.png') no-repeat 0px 3px + +@media screen and (max-width: 1280px) + #left .finished_at_label + display: none -@media screen and (min-width: 1400px) - #left #repositories li .duration_label - width: auto - height: auto - text-indent: 0 - background: none diff --git a/assets/stylesheets/left/list.sass b/assets/stylesheets/left/list.sass index 59bf18db..712e146b 100644 --- a/assets/stylesheets/left/list.sass +++ b/assets/stylesheets/left/list.sass @@ -38,24 +38,13 @@ .summary width: 100% - margin: 5px -5px 0 17px + margin: 5px 0 0 17px white-space: nowrap overflow: hidden text-overflow: ellipsis color: $color-text-light font-size: $font-size-small - .duration_label - display: inline-block - width: 12px - height: 11px - text-indent: -200px - overflow: hidden - background: inline-image('icons/clock.png') no-repeat 1px 2px - - // .finished_at_label - // display: none - .info overflow: hidden margin: 12px -20px -15px -45px diff --git a/public/images/icons/clock.png b/public/images/icons/clock.png index 1a1e0ec2..730bb206 100644 Binary files a/public/images/icons/clock.png and b/public/images/icons/clock.png differ diff --git a/public/javascripts/application.js b/public/javascripts/application.js index d6f25997..a30b5979 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -1 +1 @@ -minispade.register('templates', "(function() {Ember.TEMPLATES['builds/list']=Ember.Handlebars.compile(\"{{#if builds.isLoaded}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n {{#each build in builds}}\\n {{#view Travis.BuildsItemView contextBinding=\\\"build\\\"}}\\n \\n \\n \\n \\n \\n \\n \\n {{/view}}\\n {{/each}}\\n \\n
    {{t builds.name}}{{t builds.commit}}{{t builds.message}}{{t builds.duration}}{{t builds.finished_at}}
    \\n \\n \\n {{number}}\\n \\n \\n \\n {{formatCommit commit}}\\n \\n \\n {{{formatMessage commit.message short=\\\"true\\\"}}}\\n \\n {{formatDuration duration}}\\n \\n {{formatTime finishedAt}}\\n
    \\n\\n

    \\n \\n

    \\n{{else}}\\n
    Loading
    \\n{{/if}}\\n\");Ember.TEMPLATES['builds/show']=Ember.Handlebars.compile(\"{{#with view}}\\n {{#if build.isLoaded}}\\n
    \\n
    \\n
    \\n
    {{t builds.name}}
    \\n
    \\n \\n \\n {{build.number}}\\n \\n
    \\n
    {{t builds.finished_at}}
    \\n
    {{formatTime build.finishedAt}}
    \\n
    {{t builds.duration}}
    \\n
    {{formatDuration build.duration}}
    \\n
    \\n\\n
    \\n
    {{t builds.commit}}
    \\n
    {{formatCommit build.commit}}
    \\n {{#if commit.compareUrl}}\\n
    {{t builds.compare}}
    \\n
    {{pathFrom build.commit.compareUrl}}
    \\n {{/if}}\\n {{#if commit.authorName}}\\n
    {{t builds.author}}
    \\n
    {{build.commit.authorName}}
    \\n {{/if}}\\n {{#if commit.committerName}}\\n
    {{t builds.committer}}
    \\n
    {{build.commit.committerName}}
    \\n {{/if}}\\n
    \\n\\n
    {{t builds.message}}
    \\n
    {{{formatMessage build.commit.message}}}
    \\n\\n {{#unless isMatrix}}\\n
    {{t builds.config}}
    \\n
    {{formatConfig build.config}}
    \\n {{/unless}}\\n
    \\n
    \\n\\n {{#if build.isMatrix}}\\n {{view Travis.JobsView jobsBinding=\\\"build.requiredJobs\\\" required=\\\"true\\\"}}\\n {{view Travis.JobsView jobsBinding=\\\"build.allowedFailureJobs\\\"}}\\n {{else}}\\n {{view Travis.LogView contextBinding=\\\"build.jobs.firstObject\\\"}}\\n {{/if}}\\n {{else}}\\n
    \\n Loading\\n
    \\n {{/if}}\\n{{/with}}\\n\");Ember.TEMPLATES['jobs/list']=Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n {{#if view.required}}\\n \\n \\n {{else}}\\n
    \\n {{t jobs.build_matrix}}\\n
    \\n \\n {{/if}}\\n \\n \\n {{#each key in view.build.configKeys}}\\n \\n {{/each}}\\n \\n \\n \\n {{#each job in view.jobs}}\\n {{#view Travis.JobsItemView contextBinding=\\\"job\\\"}}\\n \\n \\n \\n {{#each value in configValues}}\\n \\n {{/each}}\\n {{/view}}\\n {{/each}}\\n \\n
    \\n {{t jobs.allowed_failures}}\\n \\n
    {{key}}
    \\n \\n \\n {{number}}\\n \\n \\n {{formatDuration duration}}\\n \\n {{formatTime finishedAt}}\\n {{value}}
    \\n\\n {{#unless view.required}}\\n
    \\n

    {{t \\\"jobs.allowed_failures\\\"}}

    \\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.\\n

    \\n

    \\n You can define allowed failures in the build matrix as follows:\\n

    \\n
    matrix:\\n  allow_failures:\\n    - rvm: ruby-head
    \\n

    \\n This lets you add in experimental and preparatory builds to test against versions or\\n configurations that you are not ready to officially support.\\n

    \\n
    \\n {{/unless}}\\n{{/if}}\\n\");Ember.TEMPLATES['jobs/log']=Ember.Handlebars.compile(\"{{view.logSubscriber}}\\n\\n{{#if log.isLoaded}}\\n
    \\n    \\n    \\n  {{{formatLog log.body}}}
    \\n\\n {{#if sponsor.name}}\\n

    \\n {{t builds.messages.sponsored_by}}\\n {{sponsor.name}}\\n

    \\n {{/if}}\\n{{else}}\\n
    \\n Loading\\n
    \\n{{/if}}\\n\");Ember.TEMPLATES['jobs/show']=Ember.Handlebars.compile(\"{{#with view}}\\n {{#if job.isLoaded}}\\n
    \\n
    \\n
    \\n
    Job
    \\n
    {{job.number}}
    \\n
    {{t jobs.finished_at}}
    \\n
    {{formatTime job.finishedAt}}
    \\n
    {{t jobs.duration}}
    \\n
    {{formatDuration job.duration}}
    \\n
    \\n\\n
    \\n
    {{t jobs.commit}}
    \\n
    {{formatCommit commit}}
    \\n {{#if commit.compareUrl}}\\n
    {{t jobs.compare}}
    \\n
    {{pathFrom commit.compareUrl}}
    \\n {{/if}}\\n {{#if commit.authorName}}\\n
    {{t jobs.author}}
    \\n
    {{commit.authorName}}
    \\n {{/if}}\\n {{#if commit.committerName}}\\n
    {{t jobs.committer}}
    \\n
    {{commit.committerName}}
    \\n {{/if}}\\n
    \\n\\n
    {{t jobs.message}}
    \\n
    {{formatMessage commit.message}}
    \\n
    {{t jobs.config}}
    \\n
    {{formatConfig job.config}}
    \\n
    \\n\\n {{view Travis.LogView contextBinding=\\\"job\\\"}}}\\n
    \\n {{else}}\\n
    \\n Loading\\n
    \\n {{/if}}\\n{{/with}}\\n\");Ember.TEMPLATES['layouts/home']=Ember.Handlebars.compile(\"
    \\n {{outlet top}}\\n
    \\n\\n
    \\n {{outlet left}}\\n
    \\n\\n
    \\n {{outlet main}}\\n
    \\n\\n
    \\n {{outlet right}}\\n
    \\n\");Ember.TEMPLATES['layouts/profile']=Ember.Handlebars.compile(\"
    \\n {{outlet top}}\\n
    \\n\\n
    \\n {{outlet left}}\\n
    \\n\\n
    \\n {{outlet main}}\\n
    \\n\\n
    \\n
    \\n
     \\n
    \\n\\n
    \\n

    Getting started?

    \\n

    \\n Please read our guide.\\n It will only take a few minutes :)\\n

    \\n

    \\n You can find detailled docs on our about site.\\n

    \\n

    \\n If you need help please don't hesitate to join\\n #travis on irc.freenode.net\\n or our mailinglist.\\n

    \\n
    \\n
    \\n\");Ember.TEMPLATES['layouts/sidebar']=Ember.Handlebars.compile(\"\\n {{t layouts.application.fork_me}}\\n\\n\\n
    \\n
     \\n
    \\n\\n{{outlet decks}}\\n{{outlet workers}}\\n{{outlet queues}}\\n{{outlet links}}\\n\\n
    \\n

    {{t layouts.about.join}}

    \\n \\n
    \\n\");Ember.TEMPLATES['layouts/simple']=Ember.Handlebars.compile(\"
    \\n {{outlet top}}\\n
    \\n\\n
    \\n {{outlet main}}\\n
    \\n\\n\");Ember.TEMPLATES['layouts/top']=Ember.Handlebars.compile(\"\\n

    Travis

    \\n
    \\n\\n\\n\");Ember.TEMPLATES['profile/accounts']=Ember.Handlebars.compile(\"
    \\n
    \\n\\n\\n\\n
    \\n {{#collection Travis.AccountsListView contentBinding=\\\"controller\\\"}}\\n {{view.name}}\\n

    \\n Repositories:\\n {{view.content.reposCount}}\\n

    \\n {{/collection}}\\n
    \\n\");Ember.TEMPLATES['profile/show']=Ember.Handlebars.compile(\"

    {{account.name}}

    \\n\\n{{view Travis.ProfileTabsView}}\\n\\n
    \\n {{outlet pane}}\\n
    \\n\\n\\n\");Ember.TEMPLATES['profile/tabs']=Ember.Handlebars.compile(\"\\n\");Ember.TEMPLATES['profile/tabs/hooks']=Ember.Handlebars.compile(\"

    \\n {{{t profiles.show.message.your_repos}}}\\n

    \\n\\n{{#if hooks.isLoaded}}\\n {{#if user.isSyncing}}\\n

    \\n Please wait while we sync from GitHub\\n

    \\n {{else}}\\n

    \\n Last synchronized from GitHub: {{formatTime user.syncedAt}}\\n \\n

    \\n\\n \\n {{/if}}\\n{{else}}\\n

    \\n Loading\\n

    \\n{{/if}}\\n\\n\\n\");Ember.TEMPLATES['profile/tabs/user']=Ember.Handlebars.compile(\"\\n\\n
    \\n
    \\n {{t profiles.show.github}}:\\n
    \\n
    \\n {{user.login}}\\n
    \\n
    \\n {{t profiles.show.email}}:\\n
    \\n
    \\n {{user.email}}\\n
    \\n
    \\n {{t profiles.show.token}}:\\n
    \\n
    \\n {{user.token}}\\n
    \\n
    \\n\\n
    \\n {{view Ember.Select\\n contentBinding=\\\"view.locales\\\"\\n selectionBinding=\\\"user.locale\\\"\\n optionLabelPath=\\\"content.name\\\"\\n optionValuePath=\\\"content.key\\\"}}\\n\\n \\n
    \\n\\n\\n\");Ember.TEMPLATES['queues/list']=Ember.Handlebars.compile(\"\\n\");Ember.TEMPLATES['repos/list']=Ember.Handlebars.compile(\"
    \\n {{view Ember.TextField valueBinding=\\\"controller.search\\\"}}\\n
    \\n\\n{{view Travis.ReposListTabsView}}\\n\\n\\n\\n
    \\n {{#collection Travis.RepositoriesListView contentBinding=\\\"controller\\\"}}\\n {{#with view.repository}}\\n
    \\n \\n {{slug}}\\n
    \\n {{lastBuildNumber}}\\n\\n

    \\n {{t repositories.duration}}:\\n {{formatDuration lastBuildDuration}},\\n {{t repositories.finished_at}}:\\n {{formatTime lastBuildFinishedAt}}\\n

    \\n\\n \\n\\n {{#if description}}\\n
    \\n

    {{description}}

    \\n
    \\n {{/if}}\\n {{/with}}\\n {{/collection}}\\n
    \\n\");Ember.TEMPLATES['repos/list/tabs']=Ember.Handlebars.compile(\"\\n\\n\");Ember.TEMPLATES['repos/show']=Ember.Handlebars.compile(\"
    \\n {{#if view.repository.isLoaded}}\\n {{#with view.repository}}\\n

    \\n {{slug}}\\n

    \\n\\n

    {{description}}

    \\n\\n \\n\\n {{view Travis.RepoShowTabsView}}\\n {{view Travis.RepoShowToolsView}}\\n {{/with}}\\n\\n {{else}}\\n Loading\\n {{/if}}\\n\\n
    \\n {{outlet pane}}\\n
    \\n
    \\n\\n\");Ember.TEMPLATES['repos/show/tabs']=Ember.Handlebars.compile(\"\\n\");Ember.TEMPLATES['repos/show/tools']=Ember.Handlebars.compile(\"
    \\n \\n
    \\n

    \\n \\n {{#if view.branches.isLoaded}}\\n {{view Ember.Select contentBinding=\\\"view.branches\\\" selectionBinding=\\\"view.branch\\\" optionLabelPath=\\\"content.commit.branch\\\" optionValuePath=\\\"content.commit.branch\\\"}}\\n {{else}}\\n \\n {{/if}}\\n

    \\n

    \\n \\n \\n

    \\n

    \\n \\n \\n

    \\n

    \\n \\n \\n

    \\n

    \\n \\n \\n

    \\n
    \\n
    \\n\");Ember.TEMPLATES['sponsors/decks']=Ember.Handlebars.compile(\"

    {{t layouts.application.sponsers}}

    \\n\\n\\n\\n

    \\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n

    \\n\");Ember.TEMPLATES['sponsors/links']=Ember.Handlebars.compile(\"
    \\n

    {{t layouts.application.sponsers}}

    \\n\\n \\n\\n

    \\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n

    \\n
    \\n\\n\");Ember.TEMPLATES['stats/show']=Ember.Handlebars.compile(\"
    \\n
    \\n\");Ember.TEMPLATES['workers/list']=Ember.Handlebars.compile(\"{{#view Travis.WorkersView}}\\n

    \\n {{t workers}}\\n \\n

    \\n \\n{{/view}}\\n\");\n})();\n//@ sourceURL=templates");minispade.register('app', "(function() {(function() {\nminispade.require('travis');\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n Travis.reopen({\n App: Em.Application.extend({\n currentUserBinding: 'auth.user',\n accessTokenBinding: 'auth.user.accessToken',\n authStateBinding: 'auth.state',\n init: function() {\n this._super();\n this.connect();\n this.store = Travis.Store.create();\n this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n this.set('auth', Travis.Auth.create({\n store: this.store,\n endpoint: Travis.config.api_endpoint\n }));\n this.routes = new Travis.Routes();\n this.pusher = new Travis.Pusher();\n return this.tailing = new Travis.Tailing();\n },\n signIn: function() {\n return this.get('auth').signIn();\n },\n signOut: function() {\n this.get('auth').signOut();\n return this.routes.route('');\n },\n render: function(name, action, params) {\n var layout;\n layout = this.connectLayout(name);\n layout.activate(action, params || {});\n return $('body').attr('id', name);\n },\n receive: function() {\n return this.store.receive.apply(this.store, arguments);\n },\n connectLayout: function(name) {\n var viewClass;\n if (this.get('layout.name') !== name) {\n name = $.camelize(name);\n viewClass = Travis[\"\" + name + \"Layout\"];\n this.layout = Travis[\"\" + name + \"Controller\"].create({\n parent: this.controller\n });\n this.controller.connectOutlet({\n outletName: 'layout',\n controller: this.layout,\n viewClass: viewClass\n });\n }\n return this.layout;\n },\n connect: function() {\n var view;\n this.controller = Em.Controller.create();\n view = Em.View.create({\n template: Em.Handlebars.compile('{{outlet layout}}'),\n controller: this.controller\n });\n return view.appendTo(this.get('rootElement') || 'body');\n },\n toggleSidebar: function() {\n var element;\n $('body').toggleClass('maximized');\n element = $('');\n $('#top .profile').append(element);\n Em.run.later((function() {\n return element.remove();\n }), 10);\n element = $('');\n $('#repository').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n this.Travis.Auth = Ember.Object.extend({\n iframe: $('