diff --git a/.localeapp/log.yml b/.localeapp/log.yml index 84b966f2..fce063a3 100644 --- a/.localeapp/log.yml +++ b/.localeapp/log.yml @@ -1,3 +1,3 @@ --- -:polled_at: 1354548824 -:updated_at: 1354548824 +:polled_at: 1355238733 +:updated_at: 1355238733 diff --git a/.travis.yml b/.travis.yml index de6b82f6..f0b1cddc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,16 @@ rvm: - 1.9.3 before_script: - bundle exec rakep -script: "bundle exec rspec spec" +env: + - "TEST_SUITE=spec" + - "TEST_SUITE=ember" +script: "script/ci" + +matrix: + allow_failures: + - env: "TEST_SUITE=ember" + rvm: "1.9.3" + notifications: irc: "irc.freenode.org#travis" campfire: diff --git a/Gemfile b/Gemfile index 36a38603..80eb440f 100644 --- a/Gemfile +++ b/Gemfile @@ -4,6 +4,7 @@ source :rubygems gem 'puma' gem 'rack-ssl', '~> 1.3' +gem 'rack-protection', '~> 1.3' gem 'rack-cache' gem 'rack-mobile-detect' gem 'sinatra' diff --git a/Gemfile.lock b/Gemfile.lock index a1571259..d81e476e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -71,9 +71,7 @@ GEM rack (1.4.1) rack-cache (1.2) rack (>= 0.4) - rack-mobile-detect (0.4.0) - rack - rack-protection (1.3.2) + rack-protection (1.2.0) rack rack-ssl (1.3.2) rack @@ -130,7 +128,6 @@ DEPENDENCIES localeapp-handlebars_i18n puma rack-cache - rack-mobile-detect rack-ssl (~> 1.3) rake (~> 0.9.2) rake-pipeline! diff --git a/assets/scripts/app/auth.coffee b/assets/scripts/app/auth.coffee index 61e0b868..3fc495ba 100644 --- a/assets/scripts/app/auth.coffee +++ b/assets/scripts/app/auth.coffee @@ -9,23 +9,23 @@ window.addEventListener('message', (e) => @receiveMessage(e)) accessToken: (-> - sessionStorage.getItem('travis.token') + Travis.sessionStorage.getItem('travis.token') ).property() # if the user is in the session storage, we're using it. if we have a flag # for auto signin then we're trying to sign in. autoSignIn: (path) -> console.log 'autoSignIn' - global = localStorage.getItem('travis.user') - session = sessionStorage.getItem('travis.user') + global = Travis.storage.getItem('travis.user') + session = Travis.sessionStorage.getItem('travis.user') user = session || global if user - localStorage.setItem('travis.user', user) unless global + Travis.storage.setItem('travis.user', user) unless global data = JSON.parse(user) data = { user: data } unless data.user? @setData(data) - else if localStorage.getItem('travis.auto_signin') - console.log 'travis.auto_signin', localStorage.getItem('travis.auto_signin') + else if Travis.storage.getItem('travis.auto_signin') + console.log 'travis.auto_signin', Travis.storage.getItem('travis.auto_signin') @signIn() # try signing in, but check later in case we have a timeout @@ -36,11 +36,12 @@ Ember.run.later(this, @checkSignIn.bind(this), @timeout) signOut: -> - localStorage.removeItem('travis.auto_signin') - localStorage.removeItem('travis.locale') - localStorage.removeItem('travis.user') - localStorage.removeItem('travis.token') - sessionStorage.clear() + Travis.storage.removeItem('travis.auto_signin') + Travis.storage.removeItem('travis.locale') + Travis.storage.removeItem('travis.user') + Travis.storage.removeItem('travis.token') + Travis.sessionStorage.clear() + Travis.setLocale Travis.default_locale @setData() trySignIn: -> @@ -52,7 +53,7 @@ forceSignIn: -> console.log 'forceSignIn' - localStorage.setItem('travis.auto_signin', 'true') + Travis.storage.setItem('travis.auto_signin', 'true') window.location = "#{@endpoint}/auth/handshake?redirect_uri=#{location}" # TODO should have clearData() to clean this up @@ -65,30 +66,31 @@ @afterSignIn(data.user) if data?.user afterSignIn: (user) -> + Travis.setLocale user.locale || Travis.default_locale Travis.trigger('user:signed_in', user) @get('app.router').send('afterSignIn', @readAfterSignInPath()) storeToken: (token) -> - token = token || localStorage.getItem('travis.token') + token = token || Travis.storage.getItem('travis.token') if token - localStorage.setItem('travis.token', token) - sessionStorage.setItem('travis.token', token) + Travis.storage.setItem('travis.token', token) + Travis.sessionStorage.setItem('travis.token', token) @notifyPropertyChange('accessToken') storeUser: (user) -> - localStorage.setItem('travis.auto_signin', 'true') - sessionStorage.setItem('travis.user', JSON.stringify(user)) + Travis.storage.setItem('travis.auto_signin', 'true') + Travis.sessionStorage.setItem('travis.user', JSON.stringify(user)) @app.store.load(Travis.User, user) user = @app.store.find(Travis.User, user.id) user.get('permissions') user storeAfterSignInPath: (path) -> - sessionStorage.setItem('travis.after_signin_path', path) + Travis.sessionStorage.setItem('travis.after_signin_path', path) readAfterSignInPath: -> - path = sessionStorage.getItem('travis.after_signin_path') - sessionStorage.removeItem('travis.after_signin_path') + path = Travis.sessionStorage.getItem('travis.after_signin_path') + Travis.sessionStorage.removeItem('travis.after_signin_path') path receiveMessage: (event) -> diff --git a/assets/scripts/app/controllers/repos.coffee b/assets/scripts/app/controllers/repos.coffee index a5b70701..fc9fe39c 100644 --- a/assets/scripts/app/controllers/repos.coffee +++ b/assets/scripts/app/controllers/repos.coffee @@ -2,7 +2,6 @@ require 'travis/limited_array' Travis.ReposController = Ember.ArrayController.extend defaultTab: 'recent' - sortProperties: ['sortOrder'] isLoadedBinding: 'content.isLoaded' init: -> @@ -21,7 +20,10 @@ Travis.ReposController = Ember.ArrayController.extend viewRecent: -> content = Travis.LimitedArray.create - content: Travis.Repo.find() + content: Em.ArrayProxy.extend(Em.SortableMixin).create( + sortProperties: ['sortOrder'] + content: Travis.Repo.find() + ) limit: 30 @set('content', content) # @set('content', Travis.Repo.find()) diff --git a/assets/scripts/app/helpers.coffee b/assets/scripts/app/helpers.coffee index bcbd98c1..ac77424a 100644 --- a/assets/scripts/app/helpers.coffee +++ b/assets/scripts/app/helpers.coffee @@ -1,3 +1,4 @@ require 'helpers/handlebars' require 'helpers/helpers' require 'helpers/urls' +require 'helpers/i18n_handlebars' diff --git a/assets/scripts/app/helpers/handlebars.coffee b/assets/scripts/app/helpers/handlebars.coffee index ac09eb8d..d86aa80d 100644 --- a/assets/scripts/app/helpers/handlebars.coffee +++ b/assets/scripts/app/helpers/handlebars.coffee @@ -6,11 +6,11 @@ safe = (string) -> Handlebars.registerHelper 'tipsy', (text, tip) -> safe '<span class="tool-tip" original-title="' + tip + '">' + text + '</span>' -Handlebars.registerHelper 't', (key) -> - safe I18n.t(key) - Ember.registerBoundHelper 'capitalize', (value, options) -> - safe $.capitalize(value) + if value? + safe $.capitalize(value) + else + '' Ember.registerBoundHelper 'formatTime', (value, options) -> safe Travis.Helpers.timeAgoInWords(value) || '-' diff --git a/assets/scripts/app/helpers/i18n_handlebars.coffee b/assets/scripts/app/helpers/i18n_handlebars.coffee new file mode 100644 index 00000000..38e6bfbc --- /dev/null +++ b/assets/scripts/app/helpers/i18n_handlebars.coffee @@ -0,0 +1,34 @@ +I18nBoundView = Ember.View.extend Ember._Metamorph, { + + key: null, + + valueDidChange: -> + return if this.morph.isRemoved() + this.morph.html(this.valueForRender()) + + valueForRender: -> + new Handlebars.SafeString I18n.t(this.key) + + init: -> + this._super() + Travis.addObserver('locale', this, 'valueDidChange') + + didInsertElement: -> + this.valueDidChange() + + destroy: -> + Travis.removeObserver('locale', this, 'valueDidChange') + this._super() + + render: (buffer) -> + buffer.push(this.valueForRender()) +} + +Ember.Handlebars.registerHelper 't', (key, options) -> + view = options.data.view + bindView = view.createChildView(I18nBoundView, { key: key }) + view.appendChild(bindView) + # dont write any content from this helper, let the child view + # take care of itself. + false + diff --git a/assets/scripts/app/helpers/urls.coffee b/assets/scripts/app/helpers/urls.coffee index 18777375..337da674 100644 --- a/assets/scripts/app/helpers/urls.coffee +++ b/assets/scripts/app/helpers/urls.coffee @@ -30,10 +30,10 @@ "http://github.com/#{slug}/network" githubAdmin: (slug) -> - "http://github.com/#{slug}/admin/hooks#travis_minibucket" + "http://github.com/#{slug}/settings/hooks#travis_minibucket" statusImage: (slug, branch) -> - "https://secure.travis-ci.org/#{slug}.png" + if branch then "?branch=#{branch}" else '' + "#{location.protocol}//#{location.host}/#{slug}.png" + if branch then "?branch=#{branch}" else '' email: (email) -> "mailto:#{email}" diff --git a/assets/scripts/app/models/broadcast.coffee b/assets/scripts/app/models/broadcast.coffee index df61f901..dab4fe4d 100644 --- a/assets/scripts/app/models/broadcast.coffee +++ b/assets/scripts/app/models/broadcast.coffee @@ -12,11 +12,15 @@ require 'travis/model' setSeen: -> Travis.Broadcast.seen.pushObject(@get('id')) - localStorage.setItem('travis.seen_broadcasts', JSON.stringify(Travis.Broadcast.seen)) + Travis.storage.setItem('travis.seen_broadcasts', JSON.stringify(Travis.Broadcast.seen)) @notifyPropertyChange('isSeen') @Travis.Broadcast.reopenClass - seen: Ember.A(JSON.parse(localStorage.getItem('travis.seen_broadcasts')) || []) + seen: (-> + seenBroadcasts = Travis.storage.getItem('travis.seen_broadcasts') + seenBroadcasts = JSON.parse(seenBroadcasts) if seenBroadcasts? + Ember.A(seenBroadcasts || []) + )() # TODO fix or monkey-patch the adapter's url and key lookup/generation crap # url: 'users/broadcasts' diff --git a/assets/scripts/app/models/hook.coffee b/assets/scripts/app/models/hook.coffee index 61b285b4..0e6cdc8e 100644 --- a/assets/scripts/app/models/hook.coffee +++ b/assets/scripts/app/models/hook.coffee @@ -19,7 +19,7 @@ require 'travis/model' ).property() urlGithubAdmin: (-> - "http://github.com/#{@get('slug')}/admin/hooks#travis_minibucket" + "http://github.com/#{@get('slug')}/settings/hooks#travis_minibucket" ).property() toggle: -> diff --git a/assets/scripts/app/models/repo.coffee b/assets/scripts/app/models/repo.coffee index 6b22908e..2e662a50 100644 --- a/assets/scripts/app/models/repo.coffee +++ b/assets/scripts/app/models/repo.coffee @@ -12,6 +12,14 @@ require 'travis/model' lastBuild: DS.belongsTo('Travis.Build') + lastBuildHash: (-> + { + id: @get('lastBuildId') + number: @get('lastBuildNumber') + repo: this + } + ).property('lastBuildId', 'lastBuildNumber') + allBuilds: (-> allBuilds = DS.RecordArray.create type: Travis.Build diff --git a/assets/scripts/app/models/user.coffee b/assets/scripts/app/models/user.coffee index 58bb3710..f9bb05d4 100644 --- a/assets/scripts/app/models/user.coffee +++ b/assets/scripts/app/models/user.coffee @@ -19,7 +19,7 @@ require 'travis/model' Ember.run.next this, -> transaction = @get('store').transaction() transaction.add this - + urlGithub: (-> "https://github.com/#{@get('login')}" ).property() @@ -32,8 +32,7 @@ require 'travis/model' ).property() updateLocale: (locale) -> - @setWithSession('locale', locale) - + transaction = @get('transaction') transaction.commit() @@ -45,6 +44,7 @@ require 'travis/model' transaction.add self @addObserver 'isSaving', observer + Travis.setLocale(locale) type: (-> 'user' @@ -71,6 +71,6 @@ require 'travis/model' setWithSession: (name, value) -> @set(name, value) - user = JSON.parse(sessionStorage?.getItem('travis.user')) + user = JSON.parse(Travis.sessionStorage.getItem('travis.user')) user[$.underscore(name)] = @get(name) - sessionStorage?.setItem('travis.user', JSON.stringify(user)) + Travis.sessionStorage.setItem('travis.user', JSON.stringify(user)) diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index b5e852de..9939e0bf 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -115,6 +115,7 @@ Travis.Router = Ember.Router.extend router.get('accountsController').set('content', Travis.Account.find()) router.get('applicationController').connectOutlet 'top', 'top' router.get('applicationController').connectOutlet 'left', 'accounts' + router.get('applicationController').connectOutlet 'flash', 'flash' index: Ember.Route.extend route: '/' diff --git a/assets/scripts/app/slider.coffee b/assets/scripts/app/slider.coffee index f983fccc..470f42c1 100644 --- a/assets/scripts/app/slider.coffee +++ b/assets/scripts/app/slider.coffee @@ -1,10 +1,10 @@ @Travis.Slider = -> - @minimize() if localStorage?.getItem('travis.maximized') == 'true' + @minimize() if Travis.storage.getItem('travis.maximized') == 'true' this $.extend Travis.Slider.prototype, persist: -> - localStorage?.setItem('travis.maximized', @isMinimized()) + Travis.storage.setItem('travis.maximized', @isMinimized()) isMinimized: -> return $('body').hasClass('maximized'); diff --git a/assets/scripts/app/templates/profile/tabs/user.hbs b/assets/scripts/app/templates/profile/tabs/user.hbs index 94a8a006..59c6b131 100644 --- a/assets/scripts/app/templates/profile/tabs/user.hbs +++ b/assets/scripts/app/templates/profile/tabs/user.hbs @@ -25,18 +25,16 @@ {{user.token}} </dd> </div> + <div> + <dt> + {{t profiles.show.locale}}: + </dt> + <dd> + {{view Ember.Select id="locale" + contentBinding="view.locales" + valueBinding="Travis.app.currentUser.locale" + optionLabelPath="content.name" + optionValuePath="content.key"}} + </dd> + </div> </dl> - -<form> - {{view Ember.Select id="locale" - contentBinding="view.locales" - valueBinding="Travis.app.currentUser.locale" - optionLabelPath="content.name" - optionValuePath="content.key"}} - - <button name="commit" {{action saveLocale target="view"}}> - {{t profiles.show.update_locale}} - </button> -</form> - - diff --git a/assets/scripts/app/templates/repos/list.hbs b/assets/scripts/app/templates/repos/list.hbs index 1cebc6f5..1a1eca71 100644 --- a/assets/scripts/app/templates/repos/list.hbs +++ b/assets/scripts/app/templates/repos/list.hbs @@ -13,9 +13,11 @@ <a {{action showRepo this href=true}} class="slug">{{slug}}</a> {{/if}} </div> - {{#if lastBuildId}} - <a {{action showBuild this lastBuildId href=true}} class="last_build">{{lastBuildNumber}}</a> - {{/if}} + {{#with lastBuildHash}} + {{#if id}} + <a {{action showBuild repo id href=true}} class="last_build">{{number}}</a> + {{/if}} + {{/with}} <p class="summary"> <span class="duration_label">{{t repositories.duration}}:</span> diff --git a/assets/scripts/app/templates/repos/show/tabs.hbs b/assets/scripts/app/templates/repos/show/tabs.hbs index a0649cda..f906d3d9 100644 --- a/assets/scripts/app/templates/repos/show/tabs.hbs +++ b/assets/scripts/app/templates/repos/show/tabs.hbs @@ -37,20 +37,24 @@ </li> <li id="tab_build" {{bindAttr class="view.classBuild"}}> <h5> - {{#if view.build.id}} - <a {{action showBuild view.repo view.build href=true}}> - {{t repositories.tabs.build}} #{{view.build.number}} - </a> - {{/if}} + {{#with view.build}} + {{#if id}} + <a {{action showBuild repo this href=true}}> + {{t repositories.tabs.build}} #{{number}} + </a> + {{/if}} + {{/with}} </h5> </li> <li id="tab_job" {{bindAttr class="view.classJob"}}> <h5> - {{#if view.job.id}} - <a {{action showJob view.repo view.job href=true}}> - {{t repositories.tabs.job}} #{{view.job.number}} - </a> - {{/if}} + {{#with view.job}} + {{#if id}} + <a {{action showJob repo this href=true}}> + {{t repositories.tabs.job}} #{{number}} + </a> + {{/if}} + {{/with}} </h5> </li> </ul> diff --git a/assets/scripts/app/views/application.coffee b/assets/scripts/app/views/application.coffee index 48403270..f738ccb4 100644 --- a/assets/scripts/app/views/application.coffee +++ b/assets/scripts/app/views/application.coffee @@ -12,13 +12,6 @@ # popup: (event) -> # console.log event - localeDidChange: (-> - if locale = Travis.app.get('auth.user.locale') - if Travis.needsLocaleChange(locale) - Travis.setLocale(locale) - Travis.app.get('router').reload() - ).observes('Travis.app.auth.user.locale') - click: (event) -> # TODO: this solves the case of closing menus and popups, # but I would like to rewrite it later, not sure how diff --git a/assets/scripts/app/views/profile.coffee b/assets/scripts/app/views/profile.coffee index 1926f149..d476203f 100644 --- a/assets/scripts/app/views/profile.coffee +++ b/assets/scripts/app/views/profile.coffee @@ -44,26 +44,25 @@ "#{location.protocol}//www.gravatar.com/avatar/#{@get('user.gravatarId')}?s=48&d=mm" ).property('user.gravatarId') - # locale: (-> - # @get('user.locale') - # ).property('user.locale') + locale: (-> + @get('user.locale') + ).property('user.locale') locales: (-> [ { key: null, name: '' } { key: 'en', name: 'English' } - { key: 'ca', name: 'Catalan' } - { key: 'cs', name: 'Čeština' } { key: 'es', name: 'Español' } { key: 'fr', name: 'Français' } { key: 'ja', name: '日本語' } { key: 'nl', name: 'Nederlands' } { key: 'nb', name: 'Norsk Bokmål' } { key: 'pl', name: 'Polski' } - { key: 'pt-BR': name: 'Português brasileiro' } + { key: 'pt-BR', name: 'Português brasileiro' } { key: 'ru', name: 'Русский' } ] ).property() - - saveLocale: (event) -> + + change: (event) -> + return unless $('#locale').val() @get('user').updateLocale($('#locale').val()) diff --git a/assets/scripts/app/views/sidebar.coffee b/assets/scripts/app/views/sidebar.coffee index 677e3189..3b34fdf0 100644 --- a/assets/scripts/app/views/sidebar.coffee +++ b/assets/scripts/app/views/sidebar.coffee @@ -45,7 +45,6 @@ didInsertElement: -> queues = for queue in Travis.QUEUES Travis.LimitedArray.create - debug: true content: Travis.Job.queued(queue.name), limit: 20 id: "queue_#{queue.name}" name: queue.display diff --git a/assets/scripts/config/locales.js b/assets/scripts/config/locales.js index ae2a7eb8..57e2ab73 100644 --- a/assets/scripts/config/locales.js +++ b/assets/scripts/config/locales.js @@ -1 +1 @@ -I18n.translations = {"en":{"build":{"duration":"Duration","finished_at":"Finished","job":"Job"},"builds":{"allowed_failures":"Allowed Failures","author":"Author","branch":"Branch","build_matrix":"Build Matrix","commit":"Commit","committer":"Committer","compare":"Compare","config":"Config","duration":"Duration","finished_at":"Finished","message":"Message","messages":{"sponsored_by":"This test series was run on a worker box sponsored by"},"name":"Build","started_at":"Started"},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} hour","other":"%{count} hours"},"minutes_exact":{"one":"%{count} minute","other":"%{count} minutes"},"seconds_exact":{"one":"%{count} second","other":"%{count} seconds"}}},"errors":{"messages":{"already_confirmed":"was already confirmed","not_found":"not found","not_locked":"was not locked"}},"home":{"name":"home"},"jobs":{"allowed_failures":"Allowed Failures","author":"Author","branch":"Branch","build_matrix":"Build Matrix","commit":"Commit","committer":"Committer","compare":"Compare","config":"Config","duration":"Duration","finished_at":"Finished","message":"Message","messages":{"sponsored_by":"This test series was run on a worker box sponsored by"},"sponsored_by":null,"started_at":"Started"},"layouts":{"about":{"alpha":"This stuff is alpha.","join":"Join us and help!","mailing_list":"Mailing List","messages":{"alpha":"Please do <strong>not</strong> consider this a stable service. We're still far from that! More info <a href='https://github.com/travis-ci'>here.</a>"},"repository":"Repository","twitter":"Twitter"},"application":{"fork_me":"Fork me on Github","my_repositories":"My Repositories","recent":"Recent","search":"Search","sponsers":"Sponsors","sponsors_link":"See all of our amazing sponsors →"},"mobile":{"author":"Author","build":"Build","build_matrix":"Build Matrix","commit":"Commit","committer":"Committer","compare":"Compare","config":"Config","duration":"Duration","finished_at":"Finished at","job":"Job","log":"Log"},"top":{"admin":"Admin","blog":"Blog","docs":"Docs","github_login":"Sign in with Github","home":"Home","profile":"Profile","sign_out":"Sign Out","stats":"Stats"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"There are no jobs","profiles":{"show":{"email":"Email","github":"Github","message":{"config":"how to configure custom build options","your_repos":" Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.<br />\n To test against multiple rubies, see"},"messages":{"notice":"To get started, please read our <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Getting Started guide</a>.\n <small>It will only take a couple of minutes.</small>"},"token":"Token","update":"Update","update_locale":"Update","your_locale":"Your Locale","your_repos":"Your Repositories"}},"queue":"Queue","repositories":{"branch":"Branch","commit":"Commit","duration":"Duration","finished_at":"Finished","image_url":"Image URL","markdown":"Markdown","message":"Message","rdoc":"RDOC","started_at":"Started","tabs":{"branches":"Branch Summary","build":"Build","build_history":"Build History","current":"Current","job":"Job","pull_requests":"Pull Requests"},"test":null,"textile":"Textile","asciidoc":"AsciiDoc"},"repository":{"duration":"Duration"},"statistics":{"index":{"build_count":"Build Count","count":"Count","last_month":"last month","repo_growth":"Repository Growth","total_builds":"Total Builds","total_projects":"Total Projects/Repositories"}},"user":{"failure":null,"signed_out":null},"workers":"Workers"},"es":{"build":{"duration":"Duración","finished_at":"Finalizado","job":"Trabajo"},"builds":{"allowed_failures":"Fallos Permitidos","author":"Autor","branch":"Rama","build_matrix":"Matriz de Builds","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Configuración","duration":"Duración","finished_at":"Finalizado","message":"Mensaje","messages":{"sponsored_by":"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por"},"name":"Build","started_at":"Iniciado"},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} hora","other":"%{count} horas"},"minutes_exact":{"one":"%{count} minuto","other":"%{count} minutos"},"seconds_exact":{"one":"%{count} segundo","other":"%{count} segundos"}}},"errors":{"messages":{"already_confirmed":"ya ha sido confirmado","not_found":"no encontrado","not_locked":"no estaba bloqueado"}},"home":{"name":"Inicio"},"jobs":{"allowed_failures":"Fallos Permitidos","author":"Autor","branch":"Rama","build_matrix":"Matriz de Builds","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Configuración","duration":"Duración","finished_at":"Finalizado","message":"Mensaje","messages":{"sponsored_by":"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por"},"sponsored_by":"Patrocinado por","started_at":"Iniciado"},"layouts":{"about":{"alpha":"Esto es alpha.","join":"Únetenos y ayudanos!","mailing_list":"Lista de Correos","messages":{"alpha":"Por favor <strong>no</strong> considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información <a href='https://github.com/travis-ci'>aquí.</a>"},"repository":"Repositorio","twitter":"Twitter"},"application":{"fork_me":"Hazme un Fork en Github","my_repositories":"Mis Repositorios","recent":"Reciente","search":"Buscar","sponsers":"Patrocinadores","sponsors_link":"Ver todos nuestros patrocinadores →"},"mobile":{"author":"Autor","build":"Build","build_matrix":"Matriz de Builds","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Config","duration":"Duración","finished_at":"Finalizado el","job":"Trabajo","log":"Registro"},"top":{"admin":"Admin","blog":"Blog","docs":"Documentación","github_login":"Iniciar sesión con Github","home":"Inicio","profile":"Perfil","sign_out":"Desconectar","stats":"Estadísticas"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"No hay trabajos","profiles":{"show":{"email":"email","github":"Github","message":{"config":"como configurar tus propias opciones para el Build","your_repos":" Activa los interruptores para inicial el Travis service hook para tus proyectos, y haz un Push en GitHub.<br />\n Para probar varias versiones de ruby, mira"},"messages":{"notice":"Para comenzar, por favor lee nuestra <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Guía de Inicio </a>.\n <small>Solo tomará unos pocos minutos.</small>"},"token":"Token","update":"Actualizar","update_locale":"Actualizar","your_locale":"Tu Idioma","your_repos":"Tus repositorios"}},"queue":"Cola","repositories":{"branch":"Rama","commit":"Commit","duration":"Duración","finished_at":"Finalizado","image_url":"Imagen URL","markdown":"Markdown","message":"Mensaje","rdoc":"RDOC","started_at":"Iniciado","tabs":{"branches":"Ramas","build":"Builds","build_history":"Histórico","current":"Actual","job":"Trabajo","pull_requests":null},"test":null,"textile":"Textile","asciidoc":"AsciiDoc"},"repository":{"duration":"Duración"},"statistics":{"index":{"build_count":"Número de Builds","count":"Número","last_month":"mes anterior","repo_growth":"Crecimiento de Repositorios","total_builds":"Total de Builds","total_projects":"Total de Proyectos/Repositorios"}},"user":{"failure":null,"signed_out":null},"workers":"Procesos"},"fr":{"build":{"duration":"Durée","finished_at":"Terminé","job":"Tâche"},"builds":{"allowed_failures":"Échecs autorisés","author":"Auteur","branch":"Branche","build_matrix":"Table des versions","commit":"Commit","committer":"Committeur","compare":"Comparer","config":"Config","duration":"Durée","finished_at":"Terminé","message":"Message","messages":{"sponsored_by":"Cette série de tests a été exécutée sur une machine sponsorisée par"},"name":"Version","started_at":"Commencé"},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} heure","other":"%{count} heures"},"minutes_exact":{"one":"%{count} minute","other":"%{count} minutes"},"seconds_exact":{"one":"%{count} seconde","other":"%{count} secondes"}}},"errors":{"messages":{"already_confirmed":"étais déja confirmé","not_found":"n'a pas été trouvé","not_locked":"n'étais pas bloqué"}},"home":{"name":"accueil"},"jobs":{"allowed_failures":"Échecs autorisés","author":"Auteur","branch":"Branche","build_matrix":"Table des versions","commit":"Commit","committer":"Committeur","compare":"Comparer","config":"Config","duration":"Durée","finished_at":"Terminé","message":"Message","messages":{"sponsored_by":"Cette série de tests a été exécutée sur une machine sponsorisée par"},"sponsored_by":"Cette série de tests a été exécutée sur une machine sponsorisée par","started_at":"Commencé"},"layouts":{"about":{"alpha":"Ceci est en alpha.","join":"Joignez-vous à nous et aidez-nous!","mailing_list":"Liste de distribution","messages":{"alpha":"S'il vous plaît ne considérez <strong>pas</strong> ce service comme étant stable. Nous sommes loin de ça! Plus d'infos <a href='https://github.com/travis-ci'>ici.</a>"},"repository":"Dépôt","twitter":"Twitter"},"application":{"fork_me":"Faites un Fork sur Github","my_repositories":"Mes dépôts","recent":"Récent","search":"Chercher","sponsers":"Sponsors","sponsors_link":"Voir tous nos extraordinaire sponsors →"},"mobile":{"author":"Auteur","build":"Version","build_matrix":"Table des versions","commit":"Commit","committer":"Committeur","compare":"Comparer","config":"Config","duration":"Durée","finished_at":"Terminé à","job":"Tâche","log":"Journal"},"top":{"admin":"Admin","blog":"Blog","docs":"Documentation","github_login":"Connexion Github","home":"Accueil","profile":"Profil","sign_out":"Déconnexion","stats":"Statistiques"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Pas de tâches","profiles":{"show":{"email":"Courriel","github":"Github","message":{"config":"comment configurer des options de version personnalisées","your_repos":"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.<br />\nPour tester sur plus de versions de ruby, voir"},"messages":{"notice":"Pour commencer, veuillez lire notre <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">guide de démarrage</a>.\n <small>Cela ne vous prendra que quelques minutes.</small>"},"token":"Jeton","update":"Modifier","update_locale":"Modifier","your_locale":"Votre langue","your_repos":"Vos dépôts"}},"queue":"File","repositories":{"branch":"Branche","commit":"Commit","duration":"Durée","finished_at":"Terminé","image_url":"Image","markdown":"Markdown","message":"Message","rdoc":"RDOC","started_at":"Commencé","tabs":{"branches":"Résumé des branches","build":"Build","build_history":"Historique des tâches","current":"Actuel","job":"Tâche","pull_requests":null},"test":null,"textile":"Textile","asciidoc":"AsciiDoc"},"repository":{"duration":"Durée"},"statistics":{"index":{"build_count":"Décompte des versions","count":"Décompte","last_month":"mois dernier","repo_growth":"Croissance de dépôt","total_builds":"Total des versions","total_projects":"Total des projets/dépôts"}},"user":{"failure":null,"signed_out":null},"workers":"Processus"},"ja":{"build":{"duration":"処理時間","finished_at":"終了時刻","job":"ジョブ"},"builds":{"allowed_failures":"失敗許容範囲内","author":"制作者","branch":"ブランチ","build_matrix":"失敗許容範囲外","commit":"コミット","committer":"コミット者","compare":"比較","config":"設定","duration":"処理時間","finished_at":"終了時刻","message":"メッセージ","messages":{"sponsored_by":"このテストは以下のスポンサーの協力で行いました。"},"name":"ビルド","started_at":"開始時刻"},"datetime":{"distance_in_words":{"hours_exact":null,"minutes_exact":null,"seconds_exact":null}},"errors":{"messages":{"already_confirmed":null,"not_found":null,"not_locked":null}},"home":{"name":null},"jobs":{"allowed_failures":"失敗許容範囲内","author":"制作者","branch":"ブランチ","build_matrix":"ビルドマトリクス","commit":"コミット","committer":"コミット者","compare":"比較","config":"設定","duration":"処理時間","finished_at":"終了時刻","message":"メッセージ","messages":{"sponsored_by":"このテストは以下のスポンサーの協力で行いました。"},"sponsored_by":null,"started_at":"開始時刻"},"layouts":{"about":{"alpha":"まだアルファですよ!","join":"参加してみよう!","mailing_list":"メールリスト","messages":{"alpha":"Travis-ciは安定したサービスまで後一歩!詳しくは<a href='https://github.com/travis-ci'>こちら</a>"},"repository":"リポジトリ","twitter":"ツイッター"},"application":{"fork_me":"Githubでフォークしよう","my_repositories":"マイリポジトリ","recent":"最近","search":"検索","sponsers":"スポンサー","sponsors_link":"スポンサーをもっと見る →"},"mobile":{"author":"制作者","build":"ビルド","build_matrix":"ビルドマトリクス","commit":"コミット","committer":"コミット者","compare":"比較","config":"設定","duration":"処理時間","finished_at":"終了時刻","job":"ジョブ","log":"ログ"},"top":{"admin":"管理","blog":"ブログ","docs":"Travisとは?","github_login":"Githubでログイン","home":"ホーム","profile":"プロフィール","sign_out":"ログアウト","stats":"統計"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"ジョブはありません","profiles":{"show":{"email":"メール","github":"Github","message":{"config":"詳細設定","your_repos":"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:"},"messages":{"notice":"まずは<a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Travisのはじめ方</a>を参照してください。"},"token":"トークン","update":"更新","update_locale":"更新","your_locale":"言語設定","your_repos":"リポジトリ"}},"queue":"キュー","repositories":{"branch":"ブランチ","commit":"コミット","duration":"処理時間","finished_at":"終了時刻","image_url":"画像URL","markdown":".md","message":"メッセージ","rdoc":".rdoc","started_at":"開始時刻","tabs":{"branches":"ブランチまとめ","build":"ビルド","build_history":"ビルド履歴","current":"最新","job":"ジョブ","pull_requests":"プルリクエスト"},"test":null,"textile":".textile","asciidoc":".asciidoc"},"repository":{"duration":"時間"},"statistics":{"index":{"build_count":"ビルド数","count":"数","last_month":"先月","repo_growth":"リポジトリ","total_builds":"合計ビルド数","total_projects":"合計リポジトリ"}},"user":{"failure":null,"signed_out":null},"workers":"ワーカー"},"nb":{"build":{"duration":"Varighet","finished_at":"Fullført","job":"Jobb"},"builds":{"allowed_failures":"Tillatte feil","author":"Forfatter","branch":"Gren","build_matrix":"Jobbmatrise","commit":"Innsending","committer":"Innsender","compare":"Sammenlign","config":"Oppsett","duration":"Varighet","finished_at":"Fullført","message":"Beskrivelse","messages":{"sponsored_by":"Denne testen ble kjørt på en maskin sponset av"},"name":"Jobb","started_at":"Startet"},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} time","other":"%{count} timer"},"minutes_exact":{"one":"%{count} minutt","other":"%{count} minutter"},"seconds_exact":{"one":"%{count} sekund","other":"%{count} sekunder"}}},"errors":{"messages":{"already_confirmed":"har allerede blitt bekreftet","not_found":"ikke funnnet","not_locked":"var ikke låst"}},"home":{"name":"hjem"},"jobs":{"allowed_failures":"Tillatte feil","author":"Forfatter","branch":"Gren","build_matrix":"Jobbmatrise","commit":"Innsending","committer":"Innsender","compare":"Sammenlign","config":"Oppsett","duration":"Varighet","finished_at":"Fullført","message":"Beskrivelse","messages":{"sponsored_by":"Denne testserien ble kjørt på en maskin sponset av"},"sponsored_by":null,"started_at":"Startet"},"layouts":{"about":{"alpha":"Dette er alfa-greier.","join":"Bli med og hjelp oss!","mailing_list":"E-postliste","messages":{"alpha":"Dette er <strong>ikke</strong> en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du <a href=\"https://github.com/travis-ci\">her</a>."},"repository":"Kodelager","twitter":"Twitter."},"application":{"fork_me":"Se koden på Github","my_repositories":"Mine kodelagre","recent":"Nylig","search":"Søk","sponsers":"Sponsorer","sponsors_link":"Se alle de flotte sponsorene våre →"},"mobile":{"author":"Forfatter","build":"Jobb","build_matrix":"Jobbmatrise","commit":"Innsending","committer":"Innsender","compare":"Sammenlign","config":"Oppsett","duration":"Varighet","finished_at":"Fullført","job":"Jobb","log":"Logg"},"top":{"admin":"Administrator","blog":"Blogg","docs":"Dokumentasjon","github_login":"Logg inn med Github","home":"Hjem","profile":"Profil","sign_out":"Logg ut","stats":"Statistikk"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Ingen jobber finnnes","profiles":{"show":{"email":"E-post","github":"Github","message":{"config":"hvordan sette opp egne jobbinnstillinger","your_repos":"Slå\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.<br />\nFor å teste mot flere versjoner av ruby, se "},"messages":{"notice":"For å komme i gang, vennligst les <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">kom-i-gang-veivisereren</a> vår. <small>Det tar bare et par minutter.</small>"},"token":"Kode","update":"Oppdater","update_locale":"Oppdater","your_locale":"Ditt språk","your_repos":"Dine kodelagre"}},"queue":"Kø","repositories":{"branch":"Gren","commit":"Innsender","duration":"Varighet","finished_at":"Fullført","image_url":"Bilde-URL","markdown":"Markdown","message":"Beskrivelse","rdoc":"RDOC","started_at":"Startet","tabs":{"branches":"Grensammendrag","build":"Jobb","build_history":"Jobblogg","current":"Siste","job":"Jobb","pull_requests":null},"test":null,"textile":"Textile","asciidoc":"AsciiDoc"},"repository":{"duration":"Varighet"},"statistics":{"index":{"build_count":"Antall jobber","count":"Antall","last_month":"siste måned","repo_growth":"Vekst i kodelager","total_builds":"Totale jobber","total_projects":"Antall prosjekter/kodelagre"}},"user":{"failure":null,"signed_out":null},"workers":"Arbeidere"},"nl":{"build":{"duration":"Duur","finished_at":"Voltooid","job":"Taak"},"builds":{"allowed_failures":"Toegestane mislukkingen","author":"Auteur","branch":"Tak","build_matrix":"Bouw Matrix","commit":"Commit","committer":"Committer","compare":"Vergelijk","config":"Configuratie","duration":"Duur","finished_at":"Voltooid","message":"Bericht","messages":{"sponsored_by":"Deze tests zijn gedraaid op een machine gesponsord door"},"name":"Bouw","started_at":"Gestart"},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} uur","other":"%{count} uren"},"minutes_exact":{"one":"%{count} minuut","other":"%{count} minuten"},"seconds_exact":{"one":"%{count} seconde","other":"%{count} seconden"}}},"errors":{"messages":{"already_confirmed":"was al bevestigd","not_found":"niet gevonden","not_locked":"was niet vergrendeld"}},"home":{"name":"Hoofdpagina"},"jobs":{"allowed_failures":"Toegestane mislukkingen","author":"Auteur","branch":"Tak","build_matrix":"Bouw matrix","commit":"Commit","committer":"Committer","compare":"Vergelijk","config":"Configuratie","duration":"Duur","finished_at":"Voltooid","message":"Bericht","messages":{"sponsored_by":"Deze testen zijn uitgevoerd op een machine gesponsord door"},"sponsored_by":null,"started_at":"Gestart"},"layouts":{"about":{"alpha":"Dit is in alfa-stadium.","join":"Doe met ons mee en help!","mailing_list":"Mailing lijst","messages":{"alpha":"Gelieve deze service <strong>niet</strong> te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info <a href='https://github.com/travis-ci'>hier.</a>"},"repository":"Repository","twitter":"Twitter"},"application":{"fork_me":"Maak een fork op Github","my_repositories":"Mijn repositories","recent":"Recent","search":"Zoeken","sponsers":"Sponsors","sponsors_link":"Bekijk al onze geweldige sponsors →"},"mobile":{"author":"Auteur","build":"Bouw","build_matrix":"Bouw matrix","commit":"Commit","committer":"Committer","compare":"Vergelijk","config":"Configuratie","duration":"Duur","finished_at":"Voltooid op","job":"Taak","log":"Logboek"},"top":{"admin":"Administratie","blog":"Blog","docs":"Documentatie","github_login":"Inloggen met Github","home":"Home","profile":"Profiel","sign_out":"Uitloggen","stats":"Statistieken"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Er zijn geen taken","profiles":{"show":{"email":"Email adres","github":"Github","message":{"config":"hoe eigen bouw-opties in te stellen","your_repos":"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github<br />\nOm te testen tegen meerdere rubies, zie"},"messages":{"notice":"Om te beginnen kunt u onze <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">startersgids</a> lezen.\\n <small>Het zal maar enkele minuten van uw tijd vergen.</small>"},"token":"Token","update":"Bijwerken","update_locale":"Bijwerken","your_locale":"Uw taal","your_repos":"Uw repositories"}},"queue":"Wachtrij","repositories":{"branch":"Tak","commit":"Commit","duration":"Duur","finished_at":"Voltooid","image_url":"Afbeeldings URL","markdown":"Markdown","message":"Bericht","rdoc":"RDOC","started_at":"Gestart","tabs":{"branches":"Tak samenvatting","build":"Bouw","build_history":"Bouw geschiedenis","current":"Huidig","job":"Taak","pull_requests":null},"test":null,"textile":"Textile","asciidoc":"AsciiDoc"},"repository":{"duration":"Duur"},"statistics":{"index":{"build_count":"Bouw aantal","count":"Aantal","last_month":"voorbije maand","repo_growth":"Repository groei","total_builds":"Bouw totaal","total_projects":"Projecten/Repository totaal"}},"user":{"failure":null,"signed_out":null},"workers":"Machines"},"pl":{"build":{"duration":"Czas trwania","finished_at":"Zakończono","job":"Zadanie"},"builds":{"allowed_failures":"Dopuszczalne Niepowodzenia","author":"Autor","branch":"Gałąź","build_matrix":"Macierz Buildów","commit":"Commit","committer":"Komitujący","compare":"Porównanie","config":"Konfiguracja","duration":"Czas trwania","finished_at":"Zakończono","message":"Opis","messages":{"sponsored_by":"Te testy zostały uruchomione na maszynie sponsorowanej przez"},"name":"Build","started_at":"Rozpoczęto"},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} godzina","other":"%{count} godziny"},"minutes_exact":{"one":"%{count} minuta","other":"%{count} minuty"},"seconds_exact":{"one":"%{count} sekunda","other":"%{count} sekundy"}}},"errors":{"messages":{"already_confirmed":null,"not_found":null,"not_locked":null}},"home":{"name":null},"jobs":{"allowed_failures":"Dopuszczalne Niepowodzenia","author":"Autor","branch":"Gałąź","build_matrix":"Macierz Buildów","commit":"Commit","committer":"Committer","compare":"Porównanie","config":"Konfiguracja","duration":"Czas trwania","finished_at":"Zakończono","message":"Opis","messages":{"sponsored_by":"Te testy zostały uruchomione na maszynie sponsorowanej przez"},"sponsored_by":"Te testy zostały uruchomione na maszynie sponsorowanej przez","started_at":"Rozpoczęto"},"layouts":{"about":{"alpha":"To wciąż jest wersja alpha.","join":"Pomóż i dołącz do nas!","mailing_list":"Lista mailingowa","messages":{"alpha":"Proszę <strong>nie</strong> traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz <a href='https://github.com/travis-ci'>tutaj.</a>"},"repository":"Repozytorium","twitter":"Twitter"},"application":{"fork_me":"Fork me on Github","my_repositories":"Moje repozytoria","recent":"Ostatnie","search":"Wyniki","sponsers":"Sponsorzy","sponsors_link":"Zobacz naszych wszystkich wspaniałych sponsorów →"},"mobile":{"author":"Autor","build":"Build","build_matrix":"Macierz Buildów","commit":"Commit","committer":"Komitujący","compare":"Porównianie","config":"Konfiguracja","duration":"Czas trwania","finished_at":"Zakończono","job":"Zadanie","log":"Log"},"top":{"admin":null,"blog":"Blog","docs":"Dokumentacja","github_login":"Zaloguj się przy pomocy Githuba","home":"Start","profile":"Profil","sign_out":"Wyloguj się","stats":"Statystki"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Brak zadań","profiles":{"show":{"email":"Email","github":"Github","message":{"config":"jak skonfigurować niestandardowe opcje builda","your_repos":" Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.<br />\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz"},"messages":{"notice":"Aby zacząć, przeczytaj nasz <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Przewodnik </a>.\n <small>Zajmie ci to tylko kilka minut.</small>"},"token":"Token","update":null,"update_locale":null,"your_locale":null,"your_repos":"Twoje repozytoria"}},"queue":"Kolejka","repositories":{"branch":"Gałąź","commit":"Commit","duration":"Czas trwania","finished_at":"Zakończono","image_url":"URL obrazka","markdown":"Markdown","message":"Opis","rdoc":"RDOC","started_at":"Rozpoczęto","tabs":{"branches":"Wszystkie Gałęzie","build":"Build","build_history":"Historia Buildów","current":"Aktualny","job":"Zadanie","pull_requests":null},"test":null,"textile":"Textile","asciidoc":"AsciiDoc"},"repository":{"duration":null},"statistics":{"index":{"build_count":"Liczba buildów","count":"Ilość","last_month":"ostatni miesiąc","repo_growth":"Przyrost repozytoriów","total_builds":"Łącznie Buildów","total_projects":"Łącznie projektów/repozytoriów"}},"user":{"failure":null,"signed_out":null},"workers":"Workers"},"pt-BR":{"build":{"duration":"Duração","finished_at":"Concluído em","job":"Trabalho"},"builds":{"allowed_failures":"Falhas Permitidas","author":"Autor","branch":"Branch","build_matrix":"Matriz de Build","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Config","duration":"Duração","finished_at":"Concluído em","message":"Mensagem","messages":{"sponsored_by":"Esta série de testes foi executada em uma caixa de processos patrocinada por"},"name":"Build","started_at":"Iniciou em"},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} hora","other":"%{count} horas"},"minutes_exact":{"one":"%{count} minuto","other":"%{count} minutos"},"seconds_exact":{"one":"%{count} segundo","other":"%{count} segundos"}}},"errors":{"messages":{"already_confirmed":"já foi confirmado","not_found":"não encontrado","not_locked":"não estava trancado"}},"home":{"name":"home"},"jobs":{"allowed_failures":"Falhas Permitidas","author":"Autor","branch":"Branch","build_matrix":"Matriz de Build","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Config","duration":"Duração","finished_at":"Concluído em","message":"Mensagem","messages":{"sponsored_by":"Esta série de testes foi executada em uma caixa de processos patrocinada por"},"sponsored_by":null,"started_at":"Iniciou em"},"layouts":{"about":{"alpha":"Isto é um alpha.","join":"Junte-se à nós e ajude!","mailing_list":"Lista de email","messages":{"alpha":"Por favor, <strong>não</strong> considere isto um serviço estável. Estamos muito longe disso! Mais informações <a href='https://github.com/travis-ci'>aqui.</a>"},"repository":"Repositório","twitter":"Twitter"},"application":{"fork_me":"Faça fork no Github","my_repositories":"Meus Repositórios","recent":"Recentes","search":"Buscar","sponsers":"Patrocinadores","sponsors_link":"Conheça todos os nossos patrocinadores →"},"mobile":{"author":"Autor","build":"Build","build_matrix":"Matriz de Build","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Config","duration":"Duração","finished_at":"Concluído em","job":"Trabalho","log":"Log"},"top":{"admin":"Admin","blog":"Blog","docs":"Documentação","github_login":"Logue com o Github","home":"Home","profile":"Perfil","sign_out":"Sair","stats":"Estatísticas"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Não há trabalhos","profiles":{"show":{"email":"Email","github":"Github","message":{"config":"como configurar opções de build","your_repos":"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.<br />Para testar com múltiplas versões do Ruby, leia"},"messages":{"notice":"Para começar, leia nosso <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Guia de início</a>. <small>Só leva alguns minutinhos.</small>"},"token":"Token","update":"Atualizar","update_locale":"Atualizar","your_locale":"Sua língua","your_repos":"Seus Repositórios"}},"queue":"Fila","repositories":{"branch":"Branch","commit":"Commit","duration":"Duração","finished_at":"Concluído em","image_url":"URL da imagem","markdown":"Markdown","message":"Mensagem","rdoc":"RDOC","started_at":"Iniciou em","tabs":{"branches":"Sumário do Branch","build":"Build","build_history":"Histórico de Build","current":"Atual","job":"Trabalho","pull_requests":null},"test":null,"textile":"Textile","asciidoc":"AsciiDoc"},"repository":{"duration":"Duração"},"statistics":{"index":{"build_count":"Número de Builds","count":"Número","last_month":"último mês","repo_growth":"Crescimento de Repositório","total_builds":"Total de Builds","total_projects":"Total de Projetos/Repositórios"}},"user":{"failure":null,"signed_out":null},"workers":"Processos"},"ru":{"build":{"duration":"Длительность","finished_at":"Завершен","job":"Задача"},"builds":{"allowed_failures":"Допустимые неудачи","author":"Автор","branch":"Ветка","build_matrix":"Матрица","commit":"Коммит","committer":"Коммитер","compare":"Дифф","config":"Конфигурация","duration":"Длительность","finished_at":"Завершен","message":"Комментарий","messages":{"sponsored_by":"Эта серия тестов была запущена на машине, спонсируемой"},"name":"Билд","started_at":"Начало"},"datetime":{"distance_in_words":{"hours_exact":{"few":"%{count} часа","many":"%{count} часов","one":"%{count} час","other":"%{count} часа"},"minutes_exact":{"few":"%{count} минуты","many":"%{count} минут","one":"%{count} минута","other":"%{count} минуты"},"seconds_exact":{"few":"%{count} секунды","many":"%{count} секунд","one":"%{count} секунда","other":"%{count} секунды"}}},"errors":{"messages":{"already_confirmed":"уже подтвержден","not_found":"не найден","not_locked":"не заблокирован"}},"home":{"name":"Главная"},"jobs":{"allowed_failures":"Допустимые неудачи","author":"Автор","branch":"Ветка","build_matrix":"Матрица","commit":"Коммит","committer":"Коммитер","compare":"Сравнение","config":"Конфигурация","duration":"Длительность","finished_at":"Завершен","message":"Комментарий","messages":{"sponsored_by":"Эта серия тестов была запущена на машине спонсируемой"},"sponsored_by":null,"started_at":"Начало"},"layouts":{"about":{"alpha":"Это альфа-версия","join":"Присоединяйтесь к нам и помогайте!","mailing_list":"Лист рассылки","messages":{"alpha":"Пожалуйста, <strong>не</strong> считайте данный сервис стабильным. Мы еще очень далеки от стабильности! <a href='https://github.com/travis-ci'>Подробности</a>"},"repository":"Репозиторий","twitter":"Twitter"},"application":{"fork_me":"Fork me on Github","my_repositories":"Мои репозитории","recent":"Недавние","search":"Поиск","sponsers":"Спонсоры","sponsors_link":"Список всех наших замечательных спонсоров →"},"mobile":{"author":"Автор","build":"Сборка","build_matrix":"Матрица сборок","commit":"Коммит","committer":"Коммитер","compare":"Сравнение","config":"Конфигурация","duration":"Длительность","finished_at":"Завершен","job":"Задача","log":"Журнал"},"top":{"admin":"Управление","blog":"Блог","docs":"Документация","github_login":"Войти через Github","home":"Главная","profile":"Профиль","sign_out":"Выход","stats":"Статистика"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Очередь пуста","profiles":{"show":{"email":"Электронная почта","github":"Github","message":{"config":"как настроить специальные опции билда","your_repos":"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.<br />\nДля тестирования на нескольких версиях Ruby смотрите"},"messages":{"notice":"Перед началом, пожалуйста, прочтите <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Руководство для быстрого старта</a>. <small>Это займет всего несколько минут.</small>"},"token":"Токен","update":"Обновить","update_locale":"Обновить","your_locale":"Ваш язык","your_repos":"Ваши репозитории"}},"queue":"Очередь","repositories":{"branch":"Ветка","commit":"Коммит","duration":"Длительность","finished_at":"Завершен","image_url":"URL изображения","markdown":"Markdown","message":"Комментарий","rdoc":"RDOC","started_at":"Начало","tabs":{"branches":"Статус веток","build":"Билд","build_history":"История","current":"Текущий","job":"Задача","pull_requests":"Запросы на Pull"},"test":null,"textile":"Textile","asciidoc":"AsciiDoc"},"repository":{"duration":"Длительность"},"statistics":{"index":{"build_count":"Количество билдов","count":"Количество","last_month":"прошлый месяц","repo_growth":"Рост числа репозиториев","total_builds":"Всего билдов","total_projects":"Всего проектов/репозиториев"}},"user":{"failure":null,"signed_out":null},"workers":"Машины"}}; \ No newline at end of file +I18n.translations = {"en":{"build":{"duration":"Duration","finished_at":"Finished","job":"Job"},"builds":{"allowed_failures":"Allowed Failures","author":"Author","branch":"Branch","build_matrix":"Build Matrix","commit":"Commit","committer":"Committer","compare":"Compare","config":"Config","duration":"Duration","finished_at":"Finished","message":"Message","messages":{"sponsored_by":"This test series was run on a worker box sponsored by"},"name":"Build","started_at":"Started","state":"state"},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} hour","other":"%{count} hours"},"minutes_exact":{"one":"%{count} minute","other":"%{count} minutes"},"seconds_exact":{"one":"%{count} second","other":"%{count} seconds"}}},"errors":{"messages":{"already_confirmed":"was already confirmed","not_found":"not found","not_locked":"was not locked"}},"home":{"name":"home"},"jobs":{"allowed_failures":"Allowed Failures","author":"Author","branch":"Branch","build_matrix":"Build Matrix","commit":"Commit","committer":"Committer","compare":"Compare","config":"Config","duration":"Duration","finished_at":"Finished","message":"Message","messages":{"sponsored_by":"This test series was run on a worker box sponsored by"},"sponsored_by":null,"started_at":"Started","state":"state"},"layouts":{"about":{"alpha":"This stuff is alpha.","join":"Join us and help!","mailing_list":"Mailing List","messages":{"alpha":"Please do <strong>not</strong> consider this a stable service. We're still far from that! More info <a href='https://github.com/travis-ci'>here.</a>"},"repository":"Repository","twitter":"Twitter"},"application":{"fork_me":"Fork me on Github","my_repositories":"My Repositories","recent":"Recent","search":"Search","sponsers":"Sponsors","sponsors_link":"See all of our amazing sponsors →"},"mobile":{"author":"Author","build":"Build","build_matrix":"Build Matrix","commit":"Commit","committer":"Committer","compare":"Compare","config":"Config","duration":"Duration","finished_at":"Finished at","job":"Job","log":"Log"},"top":{"accounts":"accounts","admin":"Admin","blog":"Blog","docs":"Docs","github_login":"Sign in with Github","home":"Home","profile":"Profile","sign_out":"Sign Out","signing_in":"signing_in","stats":"Stats"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"There are no jobs","profiles":{"show":{"email":"Email","github":"Github","locale":"locale","message":{"config":"how to configure custom build options","your_repos":" Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.<br />\n To test against multiple rubies, see"},"messages":{"notice":"To get started, please read our <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Getting Started guide</a>.\n <small>It will only take a couple of minutes.</small>"},"token":"Token","update":"Update","update_locale":"Update","your_locale":"Your Locale","your_repos":"Your Repositories"}},"queue":"Queue","repositories":{"asciidoc":"AsciiDoc","branch":"Branch","commit":"Commit","duration":"Duration","finished_at":"Finished","image_url":"Image URL","markdown":"Markdown","message":"Message","rdoc":"RDOC","started_at":"Started","tabs":{"branches":"Branch Summary","build":"Build","build_history":"Build History","current":"Current","job":"Job","pull_requests":"Pull Requests"},"test":null,"textile":"Textile"},"repository":{"duration":"Duration"},"statistics":{"index":{"build_count":"Build Count","count":"Count","last_month":"last month","repo_growth":"Repository Growth","total_builds":"Total Builds","total_projects":"Total Projects/Repositories"}},"user":{"failure":null,"signed_out":null},"workers":"Workers"},"es":{"build":{"duration":"Duración","finished_at":"Finalizado","job":"Trabajo"},"builds":{"allowed_failures":"Fallos Permitidos","author":"Autor","branch":"Rama","build_matrix":"Matriz de Builds","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Configuración","duration":"Duración","finished_at":"Finalizado","message":"Mensaje","messages":{"sponsored_by":"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por"},"name":"Build","started_at":"Iniciado","state":null},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} hora","other":"%{count} horas"},"minutes_exact":{"one":"%{count} minuto","other":"%{count} minutos"},"seconds_exact":{"one":"%{count} segundo","other":"%{count} segundos"}}},"errors":{"messages":{"already_confirmed":"ya ha sido confirmado","not_found":"no encontrado","not_locked":"no estaba bloqueado"}},"home":{"name":"Inicio"},"jobs":{"allowed_failures":"Fallos Permitidos","author":"Autor","branch":"Rama","build_matrix":"Matriz de Builds","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Configuración","duration":"Duración","finished_at":"Finalizado","message":"Mensaje","messages":{"sponsored_by":"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por"},"sponsored_by":"Patrocinado por","started_at":"Iniciado","state":null},"layouts":{"about":{"alpha":"Esto es alpha.","join":"Únetenos y ayudanos!","mailing_list":"Lista de Correos","messages":{"alpha":"Por favor <strong>no</strong> considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información <a href='https://github.com/travis-ci'>aquí.</a>"},"repository":"Repositorio","twitter":"Twitter"},"application":{"fork_me":"Hazme un Fork en Github","my_repositories":"Mis Repositorios","recent":"Reciente","search":"Buscar","sponsers":"Patrocinadores","sponsors_link":"Ver todos nuestros patrocinadores →"},"mobile":{"author":"Autor","build":"Build","build_matrix":"Matriz de Builds","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Config","duration":"Duración","finished_at":"Finalizado el","job":"Trabajo","log":"Registro"},"top":{"accounts":null,"admin":"Admin","blog":"Blog","docs":"Documentación","github_login":"Iniciar sesión con Github","home":"Inicio","profile":"Perfil","sign_out":"Desconectar","signing_in":null,"stats":"Estadísticas"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"No hay trabajos","profiles":{"show":{"email":"email","github":"Github","locale":null,"message":{"config":"como configurar tus propias opciones para el Build","your_repos":" Activa los interruptores para inicial el Travis service hook para tus proyectos, y haz un Push en GitHub.<br />\n Para probar varias versiones de ruby, mira"},"messages":{"notice":"Para comenzar, por favor lee nuestra <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Guía de Inicio </a>.\n <small>Solo tomará unos pocos minutos.</small>"},"token":"Token","update":"Actualizar","update_locale":"Actualizar","your_locale":"Tu Idioma","your_repos":"Tus repositorios"}},"queue":"Cola","repositories":{"asciidoc":null,"branch":"Rama","commit":"Commit","duration":"Duración","finished_at":"Finalizado","image_url":"Imagen URL","markdown":"Markdown","message":"Mensaje","rdoc":"RDOC","started_at":"Iniciado","tabs":{"branches":"Ramas","build":"Builds","build_history":"Histórico","current":"Actual","job":"Trabajo","pull_requests":null},"test":null,"textile":"Textile"},"repository":{"duration":"Duración"},"statistics":{"index":{"build_count":"Número de Builds","count":"Número","last_month":"mes anterior","repo_growth":"Crecimiento de Repositorios","total_builds":"Total de Builds","total_projects":"Total de Proyectos/Repositorios"}},"user":{"failure":null,"signed_out":null},"workers":"Procesos"},"fr":{"build":{"duration":"Durée","finished_at":"Terminé","job":"Tâche"},"builds":{"allowed_failures":"Échecs autorisés","author":"Auteur","branch":"Branche","build_matrix":"Table des versions","commit":"Commit","committer":"Committeur","compare":"Comparer","config":"Config","duration":"Durée","finished_at":"Terminé","message":"Message","messages":{"sponsored_by":"Cette série de tests a été exécutée sur une machine sponsorisée par"},"name":"Version","started_at":"Commencé","state":null},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} heure","other":"%{count} heures"},"minutes_exact":{"one":"%{count} minute","other":"%{count} minutes"},"seconds_exact":{"one":"%{count} seconde","other":"%{count} secondes"}}},"errors":{"messages":{"already_confirmed":"étais déja confirmé","not_found":"n'a pas été trouvé","not_locked":"n'étais pas bloqué"}},"home":{"name":"accueil"},"jobs":{"allowed_failures":"Échecs autorisés","author":"Auteur","branch":"Branche","build_matrix":"Table des versions","commit":"Commit","committer":"Committeur","compare":"Comparer","config":"Config","duration":"Durée","finished_at":"Terminé","message":"Message","messages":{"sponsored_by":"Cette série de tests a été exécutée sur une machine sponsorisée par"},"sponsored_by":"Cette série de tests a été exécutée sur une machine sponsorisée par","started_at":"Commencé","state":null},"layouts":{"about":{"alpha":"Ceci est en alpha.","join":"Joignez-vous à nous et aidez-nous!","mailing_list":"Liste de distribution","messages":{"alpha":"S'il vous plaît ne considérez <strong>pas</strong> ce service comme étant stable. Nous sommes loin de ça! Plus d'infos <a href='https://github.com/travis-ci'>ici.</a>"},"repository":"Dépôt","twitter":"Twitter"},"application":{"fork_me":"Faites un Fork sur Github","my_repositories":"Mes dépôts","recent":"Récent","search":"Chercher","sponsers":"Sponsors","sponsors_link":"Voir tous nos extraordinaire sponsors →"},"mobile":{"author":"Auteur","build":"Version","build_matrix":"Table des versions","commit":"Commit","committer":"Committeur","compare":"Comparer","config":"Config","duration":"Durée","finished_at":"Terminé à","job":"Tâche","log":"Journal"},"top":{"accounts":null,"admin":"Admin","blog":"Blog","docs":"Documentation","github_login":"Connexion Github","home":"Accueil","profile":"Profil","sign_out":"Déconnexion","signing_in":null,"stats":"Statistiques"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Pas de tâches","profiles":{"show":{"email":"Courriel","github":"Github","locale":null,"message":{"config":"comment configurer des options de version personnalisées","your_repos":"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.<br />\nPour tester sur plus de versions de ruby, voir"},"messages":{"notice":"Pour commencer, veuillez lire notre <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">guide de démarrage</a>.\n <small>Cela ne vous prendra que quelques minutes.</small>"},"token":"Jeton","update":"Modifier","update_locale":"Modifier","your_locale":"Votre langue","your_repos":"Vos dépôts"}},"queue":"File","repositories":{"asciidoc":null,"branch":"Branche","commit":"Commit","duration":"Durée","finished_at":"Terminé","image_url":"Image","markdown":"Markdown","message":"Message","rdoc":"RDOC","started_at":"Commencé","tabs":{"branches":"Résumé des branches","build":"Build","build_history":"Historique des tâches","current":"Actuel","job":"Tâche","pull_requests":null},"test":null,"textile":"Textile"},"repository":{"duration":"Durée"},"statistics":{"index":{"build_count":"Décompte des versions","count":"Décompte","last_month":"mois dernier","repo_growth":"Croissance de dépôt","total_builds":"Total des versions","total_projects":"Total des projets/dépôts"}},"user":{"failure":null,"signed_out":null},"workers":"Processus"},"ja":{"build":{"duration":"処理時間","finished_at":"終了時刻","job":"ジョブ"},"builds":{"allowed_failures":"失敗許容範囲内","author":"制作者","branch":"ブランチ","build_matrix":"失敗許容範囲外","commit":"コミット","committer":"コミット者","compare":"比較","config":"設定","duration":"処理時間","finished_at":"終了時刻","message":"メッセージ","messages":{"sponsored_by":"このテストは以下のスポンサーの協力で行いました。"},"name":"ビルド","started_at":"開始時刻","state":null},"datetime":{"distance_in_words":{"hours_exact":null,"minutes_exact":null,"seconds_exact":null}},"errors":{"messages":{"already_confirmed":null,"not_found":null,"not_locked":null}},"home":{"name":null},"jobs":{"allowed_failures":"失敗許容範囲内","author":"制作者","branch":"ブランチ","build_matrix":"ビルドマトリクス","commit":"コミット","committer":"コミット者","compare":"比較","config":"設定","duration":"処理時間","finished_at":"終了時刻","message":"メッセージ","messages":{"sponsored_by":"このテストは以下のスポンサーの協力で行いました。"},"sponsored_by":null,"started_at":"開始時刻","state":null},"layouts":{"about":{"alpha":"まだアルファですよ!","join":"参加してみよう!","mailing_list":"メールリスト","messages":{"alpha":"Travis-ciは安定したサービスまで後一歩!詳しくは<a href='https://github.com/travis-ci'>こちら</a>"},"repository":"リポジトリ","twitter":"ツイッター"},"application":{"fork_me":"Githubでフォークしよう","my_repositories":"マイリポジトリ","recent":"最近","search":"検索","sponsers":"スポンサー","sponsors_link":"スポンサーをもっと見る →"},"mobile":{"author":"制作者","build":"ビルド","build_matrix":"ビルドマトリクス","commit":"コミット","committer":"コミット者","compare":"比較","config":"設定","duration":"処理時間","finished_at":"終了時刻","job":"ジョブ","log":"ログ"},"top":{"accounts":null,"admin":"管理","blog":"ブログ","docs":"Travisとは?","github_login":"Githubでログイン","home":"ホーム","profile":"プロフィール","sign_out":"ログアウト","signing_in":null,"stats":"統計"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"ジョブはありません","profiles":{"show":{"email":"メール","github":"Github","locale":"言語","message":{"config":"詳細設定","your_repos":"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:"},"messages":{"notice":"まずは<a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Travisのはじめ方</a>を参照してください。"},"token":"トークン","update":"更新","update_locale":"更新","your_locale":"言語設定","your_repos":"リポジトリ"}},"queue":"キュー","repositories":{"asciidoc":null,"branch":"ブランチ","commit":"コミット","duration":"処理時間","finished_at":"終了時刻","image_url":"画像URL","markdown":".md","message":"メッセージ","rdoc":".rdoc","started_at":"開始時刻","tabs":{"branches":"ブランチまとめ","build":"ビルド","build_history":"ビルド履歴","current":"最新","job":"ジョブ","pull_requests":"プルリクエスト"},"test":null,"textile":".textile"},"repository":{"duration":"時間"},"statistics":{"index":{"build_count":"ビルド数","count":"数","last_month":"先月","repo_growth":"リポジトリ","total_builds":"合計ビルド数","total_projects":"合計リポジトリ"}},"user":{"failure":null,"signed_out":null},"workers":"ワーカー"},"nb":{"build":{"duration":"Varighet","finished_at":"Fullført","job":"Jobb"},"builds":{"allowed_failures":"Tillatte feil","author":"Forfatter","branch":"Gren","build_matrix":"Jobbmatrise","commit":"Innsending","committer":"Innsender","compare":"Sammenlign","config":"Oppsett","duration":"Varighet","finished_at":"Fullført","message":"Beskrivelse","messages":{"sponsored_by":"Denne testen ble kjørt på en maskin sponset av"},"name":"Jobb","started_at":"Startet","state":null},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} time","other":"%{count} timer"},"minutes_exact":{"one":"%{count} minutt","other":"%{count} minutter"},"seconds_exact":{"one":"%{count} sekund","other":"%{count} sekunder"}}},"errors":{"messages":{"already_confirmed":"har allerede blitt bekreftet","not_found":"ikke funnnet","not_locked":"var ikke låst"}},"home":{"name":"hjem"},"jobs":{"allowed_failures":"Tillatte feil","author":"Forfatter","branch":"Gren","build_matrix":"Jobbmatrise","commit":"Innsending","committer":"Innsender","compare":"Sammenlign","config":"Oppsett","duration":"Varighet","finished_at":"Fullført","message":"Beskrivelse","messages":{"sponsored_by":"Denne testserien ble kjørt på en maskin sponset av"},"sponsored_by":null,"started_at":"Startet","state":null},"layouts":{"about":{"alpha":"Dette er alfa-greier.","join":"Bli med og hjelp oss!","mailing_list":"E-postliste","messages":{"alpha":"Dette er <strong>ikke</strong> en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du <a href=\"https://github.com/travis-ci\">her</a>."},"repository":"Kodelager","twitter":"Twitter."},"application":{"fork_me":"Se koden på Github","my_repositories":"Mine kodelagre","recent":"Nylig","search":"Søk","sponsers":"Sponsorer","sponsors_link":"Se alle de flotte sponsorene våre →"},"mobile":{"author":"Forfatter","build":"Jobb","build_matrix":"Jobbmatrise","commit":"Innsending","committer":"Innsender","compare":"Sammenlign","config":"Oppsett","duration":"Varighet","finished_at":"Fullført","job":"Jobb","log":"Logg"},"top":{"accounts":null,"admin":"Administrator","blog":"Blogg","docs":"Dokumentasjon","github_login":"Logg inn med Github","home":"Hjem","profile":"Profil","sign_out":"Logg ut","signing_in":null,"stats":"Statistikk"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Ingen jobber finnnes","profiles":{"show":{"email":"E-post","github":"Github","locale":null,"message":{"config":"hvordan sette opp egne jobbinnstillinger","your_repos":"Slå\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.<br />\nFor å teste mot flere versjoner av ruby, se "},"messages":{"notice":"For å komme i gang, vennligst les <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">kom-i-gang-veivisereren</a> vår. <small>Det tar bare et par minutter.</small>"},"token":"Kode","update":"Oppdater","update_locale":"Oppdater","your_locale":"Ditt språk","your_repos":"Dine kodelagre"}},"queue":"Kø","repositories":{"asciidoc":null,"branch":"Gren","commit":"Innsender","duration":"Varighet","finished_at":"Fullført","image_url":"Bilde-URL","markdown":"Markdown","message":"Beskrivelse","rdoc":"RDOC","started_at":"Startet","tabs":{"branches":"Grensammendrag","build":"Jobb","build_history":"Jobblogg","current":"Siste","job":"Jobb","pull_requests":null},"test":null,"textile":"Textile"},"repository":{"duration":"Varighet"},"statistics":{"index":{"build_count":"Antall jobber","count":"Antall","last_month":"siste måned","repo_growth":"Vekst i kodelager","total_builds":"Totale jobber","total_projects":"Antall prosjekter/kodelagre"}},"user":{"failure":null,"signed_out":null},"workers":"Arbeidere"},"nl":{"build":{"duration":"Duur","finished_at":"Voltooid","job":"Taak"},"builds":{"allowed_failures":"Toegestane mislukkingen","author":"Auteur","branch":"Tak","build_matrix":"Bouw Matrix","commit":"Commit","committer":"Committer","compare":"Vergelijk","config":"Configuratie","duration":"Duur","finished_at":"Voltooid","message":"Bericht","messages":{"sponsored_by":"Deze tests zijn gedraaid op een machine gesponsord door"},"name":"Bouw","started_at":"Gestart","state":null},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} uur","other":"%{count} uren"},"minutes_exact":{"one":"%{count} minuut","other":"%{count} minuten"},"seconds_exact":{"one":"%{count} seconde","other":"%{count} seconden"}}},"errors":{"messages":{"already_confirmed":"was al bevestigd","not_found":"niet gevonden","not_locked":"was niet vergrendeld"}},"home":{"name":"Hoofdpagina"},"jobs":{"allowed_failures":"Toegestane mislukkingen","author":"Auteur","branch":"Tak","build_matrix":"Bouw matrix","commit":"Commit","committer":"Committer","compare":"Vergelijk","config":"Configuratie","duration":"Duur","finished_at":"Voltooid","message":"Bericht","messages":{"sponsored_by":"Deze testen zijn uitgevoerd op een machine gesponsord door"},"sponsored_by":null,"started_at":"Gestart","state":null},"layouts":{"about":{"alpha":"Dit is in alfa-stadium.","join":"Doe met ons mee en help!","mailing_list":"Mailing lijst","messages":{"alpha":"Gelieve deze service <strong>niet</strong> te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info <a href='https://github.com/travis-ci'>hier.</a>"},"repository":"Repository","twitter":"Twitter"},"application":{"fork_me":"Maak een fork op Github","my_repositories":"Mijn repositories","recent":"Recent","search":"Zoeken","sponsers":"Sponsors","sponsors_link":"Bekijk al onze geweldige sponsors →"},"mobile":{"author":"Auteur","build":"Bouw","build_matrix":"Bouw matrix","commit":"Commit","committer":"Committer","compare":"Vergelijk","config":"Configuratie","duration":"Duur","finished_at":"Voltooid op","job":"Taak","log":"Logboek"},"top":{"accounts":null,"admin":"Administratie","blog":"Blog","docs":"Documentatie","github_login":"Inloggen met Github","home":"Home","profile":"Profiel","sign_out":"Uitloggen","signing_in":null,"stats":"Statistieken"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Er zijn geen taken","profiles":{"show":{"email":"Email adres","github":"Github","locale":null,"message":{"config":"hoe eigen bouw-opties in te stellen","your_repos":"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github<br />\nOm te testen tegen meerdere rubies, zie"},"messages":{"notice":"Om te beginnen kunt u onze <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">startersgids</a> lezen.\\n <small>Het zal maar enkele minuten van uw tijd vergen.</small>"},"token":"Token","update":"Bijwerken","update_locale":"Bijwerken","your_locale":"Uw taal","your_repos":"Uw repositories"}},"queue":"Wachtrij","repositories":{"asciidoc":null,"branch":"Tak","commit":"Commit","duration":"Duur","finished_at":"Voltooid","image_url":"Afbeeldings URL","markdown":"Markdown","message":"Bericht","rdoc":"RDOC","started_at":"Gestart","tabs":{"branches":"Tak samenvatting","build":"Bouw","build_history":"Bouw geschiedenis","current":"Huidig","job":"Taak","pull_requests":null},"test":null,"textile":"Textile"},"repository":{"duration":"Duur"},"statistics":{"index":{"build_count":"Bouw aantal","count":"Aantal","last_month":"voorbije maand","repo_growth":"Repository groei","total_builds":"Bouw totaal","total_projects":"Projecten/Repository totaal"}},"user":{"failure":null,"signed_out":null},"workers":"Machines"},"pl":{"build":{"duration":"Czas trwania","finished_at":"Zakończono","job":"Zadanie"},"builds":{"allowed_failures":"Dopuszczalne Niepowodzenia","author":"Autor","branch":"Gałąź","build_matrix":"Macierz Buildów","commit":"Commit","committer":"Komitujący","compare":"Porównanie","config":"Konfiguracja","duration":"Czas trwania","finished_at":"Zakończono","message":"Opis","messages":{"sponsored_by":"Te testy zostały uruchomione na maszynie sponsorowanej przez"},"name":"Build","started_at":"Rozpoczęto","state":null},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} godzina","other":"%{count} godziny"},"minutes_exact":{"one":"%{count} minuta","other":"%{count} minuty"},"seconds_exact":{"one":"%{count} sekunda","other":"%{count} sekundy"}}},"errors":{"messages":{"already_confirmed":null,"not_found":null,"not_locked":null}},"home":{"name":null},"jobs":{"allowed_failures":"Dopuszczalne Niepowodzenia","author":"Autor","branch":"Gałąź","build_matrix":"Macierz Buildów","commit":"Commit","committer":"Committer","compare":"Porównanie","config":"Konfiguracja","duration":"Czas trwania","finished_at":"Zakończono","message":"Opis","messages":{"sponsored_by":"Te testy zostały uruchomione na maszynie sponsorowanej przez"},"sponsored_by":"Te testy zostały uruchomione na maszynie sponsorowanej przez","started_at":"Rozpoczęto","state":null},"layouts":{"about":{"alpha":"To wciąż jest wersja alpha.","join":"Pomóż i dołącz do nas!","mailing_list":"Lista mailingowa","messages":{"alpha":"Proszę <strong>nie</strong> traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz <a href='https://github.com/travis-ci'>tutaj.</a>"},"repository":"Repozytorium","twitter":"Twitter"},"application":{"fork_me":"Fork me on Github","my_repositories":"Moje repozytoria","recent":"Ostatnie","search":"Wyniki","sponsers":"Sponsorzy","sponsors_link":"Zobacz naszych wszystkich wspaniałych sponsorów →"},"mobile":{"author":"Autor","build":"Build","build_matrix":"Macierz Buildów","commit":"Commit","committer":"Komitujący","compare":"Porównianie","config":"Konfiguracja","duration":"Czas trwania","finished_at":"Zakończono","job":"Zadanie","log":"Log"},"top":{"accounts":null,"admin":null,"blog":"Blog","docs":"Dokumentacja","github_login":"Zaloguj się przy pomocy Githuba","home":"Start","profile":"Profil","sign_out":"Wyloguj się","signing_in":null,"stats":"Statystki"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Brak zadań","profiles":{"show":{"email":"Email","github":"Github","locale":null,"message":{"config":"jak skonfigurować niestandardowe opcje builda","your_repos":" Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.<br />\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz"},"messages":{"notice":"Aby zacząć, przeczytaj nasz <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Przewodnik </a>.\n <small>Zajmie ci to tylko kilka minut.</small>"},"token":"Token","update":null,"update_locale":null,"your_locale":null,"your_repos":"Twoje repozytoria"}},"queue":"Kolejka","repositories":{"asciidoc":null,"branch":"Gałąź","commit":"Commit","duration":"Czas trwania","finished_at":"Zakończono","image_url":"URL obrazka","markdown":"Markdown","message":"Opis","rdoc":"RDOC","started_at":"Rozpoczęto","tabs":{"branches":"Wszystkie Gałęzie","build":"Build","build_history":"Historia Buildów","current":"Aktualny","job":"Zadanie","pull_requests":null},"test":null,"textile":"Textile"},"repository":{"duration":null},"statistics":{"index":{"build_count":"Liczba buildów","count":"Ilość","last_month":"ostatni miesiąc","repo_growth":"Przyrost repozytoriów","total_builds":"Łącznie Buildów","total_projects":"Łącznie projektów/repozytoriów"}},"user":{"failure":null,"signed_out":null},"workers":"Workers"},"pt-BR":{"build":{"duration":"Duração","finished_at":"Concluído em","job":"Trabalho"},"builds":{"allowed_failures":"Falhas Permitidas","author":"Autor","branch":"Branch","build_matrix":"Matriz de Build","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Config","duration":"Duração","finished_at":"Concluído em","message":"Mensagem","messages":{"sponsored_by":"Esta série de testes foi executada em uma caixa de processos patrocinada por"},"name":"Build","started_at":"Iniciou em","state":null},"datetime":{"distance_in_words":{"hours_exact":{"one":"%{count} hora","other":"%{count} horas"},"minutes_exact":{"one":"%{count} minuto","other":"%{count} minutos"},"seconds_exact":{"one":"%{count} segundo","other":"%{count} segundos"}}},"errors":{"messages":{"already_confirmed":"já foi confirmado","not_found":"não encontrado","not_locked":"não estava trancado"}},"home":{"name":"home"},"jobs":{"allowed_failures":"Falhas Permitidas","author":"Autor","branch":"Branch","build_matrix":"Matriz de Build","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Config","duration":"Duração","finished_at":"Concluído em","message":"Mensagem","messages":{"sponsored_by":"Esta série de testes foi executada em uma caixa de processos patrocinada por"},"sponsored_by":null,"started_at":"Iniciou em","state":null},"layouts":{"about":{"alpha":"Isto é um alpha.","join":"Junte-se à nós e ajude!","mailing_list":"Lista de email","messages":{"alpha":"Por favor, <strong>não</strong> considere isto um serviço estável. Estamos muito longe disso! Mais informações <a href='https://github.com/travis-ci'>aqui.</a>"},"repository":"Repositório","twitter":"Twitter"},"application":{"fork_me":"Faça fork no Github","my_repositories":"Meus Repositórios","recent":"Recentes","search":"Buscar","sponsers":"Patrocinadores","sponsors_link":"Conheça todos os nossos patrocinadores →"},"mobile":{"author":"Autor","build":"Build","build_matrix":"Matriz de Build","commit":"Commit","committer":"Committer","compare":"Comparar","config":"Config","duration":"Duração","finished_at":"Concluído em","job":"Trabalho","log":"Log"},"top":{"accounts":null,"admin":"Admin","blog":"Blog","docs":"Documentação","github_login":"Logue com o Github","home":"Home","profile":"Perfil","sign_out":"Sair","signing_in":null,"stats":"Estatísticas"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Não há trabalhos","profiles":{"show":{"email":"Email","github":"Github","locale":null,"message":{"config":"como configurar opções de build","your_repos":"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.<br />Para testar com múltiplas versões do Ruby, leia"},"messages":{"notice":"Para começar, leia nosso <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Guia de início</a>. <small>Só leva alguns minutinhos.</small>"},"token":"Token","update":"Atualizar","update_locale":"Atualizar","your_locale":"Sua língua","your_repos":"Seus Repositórios"}},"queue":"Fila","repositories":{"asciidoc":null,"branch":"Branch","commit":"Commit","duration":"Duração","finished_at":"Concluído em","image_url":"URL da imagem","markdown":"Markdown","message":"Mensagem","rdoc":"RDOC","started_at":"Iniciou em","tabs":{"branches":"Sumário do Branch","build":"Build","build_history":"Histórico de Build","current":"Atual","job":"Trabalho","pull_requests":null},"test":null,"textile":"Textile"},"repository":{"duration":"Duração"},"statistics":{"index":{"build_count":"Número de Builds","count":"Número","last_month":"último mês","repo_growth":"Crescimento de Repositório","total_builds":"Total de Builds","total_projects":"Total de Projetos/Repositórios"}},"user":{"failure":null,"signed_out":null},"workers":"Processos"},"ru":{"build":{"duration":"Длительность","finished_at":"Завершен","job":"Задача"},"builds":{"allowed_failures":"Допустимые неудачи","author":"Автор","branch":"Ветка","build_matrix":"Матрица","commit":"Коммит","committer":"Коммитер","compare":"Дифф","config":"Конфигурация","duration":"Длительность","finished_at":"Завершен","message":"Комментарий","messages":{"sponsored_by":"Эта серия тестов была запущена на машине, спонсируемой"},"name":"Билд","started_at":"Начало","state":null},"datetime":{"distance_in_words":{"hours_exact":{"few":"%{count} часа","many":"%{count} часов","one":"%{count} час","other":"%{count} часа"},"minutes_exact":{"few":"%{count} минуты","many":"%{count} минут","one":"%{count} минута","other":"%{count} минуты"},"seconds_exact":{"few":"%{count} секунды","many":"%{count} секунд","one":"%{count} секунда","other":"%{count} секунды"}}},"errors":{"messages":{"already_confirmed":"уже подтвержден","not_found":"не найден","not_locked":"не заблокирован"}},"home":{"name":"Главная"},"jobs":{"allowed_failures":"Допустимые неудачи","author":"Автор","branch":"Ветка","build_matrix":"Матрица","commit":"Коммит","committer":"Коммитер","compare":"Сравнение","config":"Конфигурация","duration":"Длительность","finished_at":"Завершен","message":"Комментарий","messages":{"sponsored_by":"Эта серия тестов была запущена на машине спонсируемой"},"sponsored_by":null,"started_at":"Начало","state":null},"layouts":{"about":{"alpha":"Это альфа-версия","join":"Присоединяйтесь к нам и помогайте!","mailing_list":"Лист рассылки","messages":{"alpha":"Пожалуйста, <strong>не</strong> считайте данный сервис стабильным. Мы еще очень далеки от стабильности! <a href='https://github.com/travis-ci'>Подробности</a>"},"repository":"Репозиторий","twitter":"Twitter"},"application":{"fork_me":"Fork me on Github","my_repositories":"Мои репозитории","recent":"Недавние","search":"Поиск","sponsers":"Спонсоры","sponsors_link":"Список всех наших замечательных спонсоров →"},"mobile":{"author":"Автор","build":"Сборка","build_matrix":"Матрица сборок","commit":"Коммит","committer":"Коммитер","compare":"Сравнение","config":"Конфигурация","duration":"Длительность","finished_at":"Завершен","job":"Задача","log":"Журнал"},"top":{"accounts":null,"admin":"Управление","blog":"Блог","docs":"Документация","github_login":"Войти через Github","home":"Главная","profile":"Профиль","sign_out":"Выход","signing_in":null,"stats":"Статистика"}},"locales":{"ca":null,"en":"English","es":"Español","fr":"Français","ja":"日本語","nb":"Norsk Bokmål","nl":"Nederlands","pl":"Polski","pt-BR":"português brasileiro","ru":"Русский"},"no_job":"Очередь пуста","profiles":{"show":{"email":"Электронная почта","github":"Github","locale":null,"message":{"config":"как настроить специальные опции билда","your_repos":"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.<br />\nДля тестирования на нескольких версиях Ruby смотрите"},"messages":{"notice":"Перед началом, пожалуйста, прочтите <a href=\"http://about.travis-ci.org/docs/user/getting-started/\">Руководство для быстрого старта</a>. <small>Это займет всего несколько минут.</small>"},"token":"Токен","update":"Обновить","update_locale":"Обновить","your_locale":"Ваш язык","your_repos":"Ваши репозитории"}},"queue":"Очередь","repositories":{"asciidoc":null,"branch":"Ветка","commit":"Коммит","duration":"Длительность","finished_at":"Завершен","image_url":"URL изображения","markdown":"Markdown","message":"Комментарий","rdoc":"RDOC","started_at":"Начало","tabs":{"branches":"Статус веток","build":"Билд","build_history":"История","current":"Текущий","job":"Задача","pull_requests":"Запросы на Pull"},"test":null,"textile":"Textile"},"repository":{"duration":"Длительность"},"statistics":{"index":{"build_count":"Количество билдов","count":"Количество","last_month":"прошлый месяц","repo_growth":"Рост числа репозиториев","total_builds":"Всего билдов","total_projects":"Всего проектов/репозиториев"}},"user":{"failure":null,"signed_out":null},"workers":"Машины"}}; \ No newline at end of file diff --git a/assets/scripts/lib/travis/ajax.coffee b/assets/scripts/lib/travis/ajax.coffee index 07630660..d8ff2deb 100644 --- a/assets/scripts/lib/travis/ajax.coffee +++ b/assets/scripts/lib/travis/ajax.coffee @@ -15,7 +15,7 @@ jQuery.support.cors = true endpoint = Travis.config.api_endpoint || '' options = options || {} - if token = sessionStorage.getItem('travis.token') + if token = Travis.sessionStorage.getItem('travis.token') options.headers ||= {} options.headers['Authorization'] ||= "token #{token}" diff --git a/assets/scripts/lib/travis/limited_array.coffee b/assets/scripts/lib/travis/limited_array.coffee index b4f88a4a..b9f1a6d8 100644 --- a/assets/scripts/lib/travis/limited_array.coffee +++ b/assets/scripts/lib/travis/limited_array.coffee @@ -7,11 +7,11 @@ Travis.LimitedArray = Em.ArrayProxy.extend arrangedContent: (-> content = @get('content') - if @get('disable') + if @get('disabled') content else if content content.slice(0, @get('limit')) - ).property('content', 'limit', 'disable') + ).property('content', 'limit', 'disabled') totalLength: (-> @get('content.length') @@ -20,40 +20,49 @@ Travis.LimitedArray = Em.ArrayProxy.extend leftLength: (-> totalLength = @get('totalLength') limit = @get('limit') - if totalLength > limit - totalLength - limit - else + + if @get('disabled') || totalLength <= limit 0 - ).property('totalLength', 'limit') + else + totalLength - limit + ).property('totalLength', 'limit', 'disabled') isMore: (-> - @get('leftLength') > 0 + !@get('disabled') && @get('leftLength') > 0 ).property('leftLength') showAll: -> - @set 'limit', 1000000000 - @set 'disable', true + @set 'disabled', true + + contentArrayWillChange: (array, index, removedCount, addedCount) -> + @_super.apply this, arguments + + return if @get('disabled') + + if removedCount + arrangedContent = @get 'arrangedContent' + removedObjects = array.slice(index, index + removedCount); + arrangedContent.removeObjects(removedObjects) contentArrayDidChange: (array, index, removedCount, addedCount) -> @_super.apply this, arguments - return if @get('disable') + return if @get('disabled') + limit = @get('limit') + + if addedCount + if index < limit + addedObjects = array.slice(index, index + addedCount) + @replaceContent(index, 0, addedObjects) + + @balanceArray() + + balanceArray: -> limit = @get 'limit' - arrangedContent = @get('arrangedContent') + arrangedContent = @get 'arrangedContent' length = arrangedContent.get 'length' - - if addedCount > 0 - addedObjects = array.slice(index, index + addedCount) - for object in addedObjects - arrangedContent.unshiftObject(object) - - if removedCount - removedObjects = array.slice(index, index + removedCount); - arrangedContent.removeObjects(removedObjects) - - length = arrangedContent.get 'length' - content = @get('content') + content = @get 'content' if length > limit arrangedContent.replace(limit, length - limit) @@ -61,5 +70,5 @@ Travis.LimitedArray = Em.ArrayProxy.extend count = limit - length while count > 0 if next = content.find( (object) -> !arrangedContent.contains(object) ) - arrangedContent.unshiftObject(next) + arrangedContent.pushObject(next) count -= 1 diff --git a/assets/scripts/spec/unit/limited_array_spec.coffee b/assets/scripts/spec/unit/limited_array_spec.coffee new file mode 100644 index 00000000..f4db7ef4 --- /dev/null +++ b/assets/scripts/spec/unit/limited_array_spec.coffee @@ -0,0 +1,46 @@ +describe 'Travis.LimitedArray', -> + it 'limits given content', -> + content = [1, 2, 3] + array = Travis.LimitedArray.create content: content, limit: 2 + expect( array.get('length') ).toEqual 2 + expect( array.toArray() ).toEqual [1, 2] + + it 'inserts content at the right place when unshifting', -> + content = [1, 2, 3] + array = Travis.LimitedArray.create content: content, limit: 2 + content.unshiftObject 0 + expect( array.get('length') ).toEqual 2 + expect( array.toArray() ).toEqual [0, 1] + + it 'does not insert content when it\'s inserted not in the limited range', -> + content = [1, 2, 3] + array = Travis.LimitedArray.create content: content, limit: 2 + content.pushObject 0 + expect( array.get('length') ).toEqual 2 + expect( array.toArray() ).toEqual [1, 2] + + it 'properly removes items', -> + content = [1, 2, 3] + array = Travis.LimitedArray.create content: content, limit: 2 + content.shiftObject() + + expect( array.get('length') ).toEqual 2 + expect( array.toArray() ).toEqual [2, 3] + + content.shiftObject() + + expect( array.get('length') ).toEqual 1 + expect( array.toArray() ).toEqual [3] + + content.shiftObject() + + expect( array.get('length') ).toEqual 0 + + it 'allows to expand array to show all items', -> + content = [1, 2, 3] + array = Travis.LimitedArray.create content: content, limit: 2 + + array.showAll() + + expect( array.get('length') ).toEqual 3 + expect( array.toArray() ).toEqual [1, 2, 3] diff --git a/assets/scripts/travis.coffee b/assets/scripts/travis.coffee index 09f2a9c7..16ffbe55 100644 --- a/assets/scripts/travis.coffee +++ b/assets/scripts/travis.coffee @@ -13,6 +13,22 @@ if window.history.state == undefined window.history.state = state oldReplaceState.apply this, arguments +# TODO: how can I put it in Travis namespace and use immediately? +Storage = Em.Object.extend + init: -> + @set('storage', {}) + key: (key) -> + "__#{key.replace('.', '__')}" + getItem: (k) -> + return @get("storage.#{@key(k)}") + setItem: (k,v) -> + @set("storage.#{@key(k)}", v) + removeItem: (k) -> + @setItem(k, null) + clear: -> + @set('storage', {}) + + @Travis = Em.Namespace.create Ember.Evented, config: api_endpoint: $('meta[rel="travis.api_endpoint"]').attr('href') @@ -48,16 +64,36 @@ if window.history.state == undefined setLocale: (locale) -> return unless locale I18n.locale = locale - localStorage.setItem('travis.locale', locale) + Travis.set('locale', locale) - needsLocaleChange: (locale) -> - I18n.locale != locale + storage: (-> + storage = null + try + storage = window.localStorage || throw('no storage') + catch err + storage = Storage.create() + + storage + )() + default_locale: 'en' + sessionStorage: (-> + storage = null + try + # firefox will not throw error on access for sessionStorage var, + # you need to actually get something from session + sessionStorage.getItem('foo') + storage = sessionStorage + catch err + storage = Storage.create() + + storage + )() run: (attrs) -> location.href = location.href.replace('#!/', '') if location.hash.slice(0, 2) == '#!' I18n.fallbacks = true - @setLocale localStorage.getItem('travis.locale') || 'en' + Travis.setLocale 'locale', @defualt_locale Ember.run.next this, -> app = Travis.App.create(attrs || {}) diff --git a/lib/travis/web/app.rb b/lib/travis/web/app.rb index 2146d8b7..285d8ef9 100644 --- a/lib/travis/web/app.rb +++ b/lib/travis/web/app.rb @@ -1,6 +1,7 @@ require 'rack' require 'rack/ssl' require 'rack/cache' +require 'rack/protection' require 'delegate' require 'time' @@ -130,6 +131,9 @@ class Travis::Web::App end builder.use Rack::Deflater builder.use Rack::Head + builder.use Rack::Protection::XSSHeader + builder.use Rack::Protection::FrameOptions + builder.use Rack::Protection::PathTraversal builder.use Rack::ConditionalGet builder.use MobileRedirect builder.run router diff --git a/locales/en.yml b/locales/en.yml index b4f42c47..a6c1218f 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -19,6 +19,7 @@ en: sponsored_by: This test series was run on a worker box sponsored by name: Build started_at: Started + state: state datetime: distance_in_words: hours_exact: @@ -53,6 +54,7 @@ en: sponsored_by: This test series was run on a worker box sponsored by sponsored_by: started_at: Started + state: state layouts: about: alpha: This stuff is alpha. @@ -82,6 +84,7 @@ en: job: Job log: Log top: + accounts: accounts admin: Admin blog: Blog docs: Docs @@ -89,6 +92,7 @@ en: home: Home profile: Profile sign_out: Sign Out + signing_in: signing_in stats: Stats locales: ca: @@ -106,6 +110,7 @@ en: show: email: Email github: Github + locale: locale message: config: how to configure custom build options your_repos: ! " Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.<br />\n To test against multiple rubies, see" @@ -118,6 +123,7 @@ en: your_repos: Your Repositories queue: Queue repositories: + asciidoc: AsciiDoc branch: Branch commit: Commit duration: Duration @@ -136,7 +142,6 @@ en: pull_requests: Pull Requests test: textile: Textile - asciidoc: AsciiDoc repository: duration: Duration statistics: diff --git a/locales/es.yml b/locales/es.yml index 526454e5..a6577dae 100644 --- a/locales/es.yml +++ b/locales/es.yml @@ -19,6 +19,7 @@ es: sponsored_by: Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por name: Build started_at: Iniciado + state: datetime: distance_in_words: hours_exact: @@ -53,6 +54,7 @@ es: sponsored_by: Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por sponsored_by: Patrocinado por started_at: Iniciado + state: layouts: about: alpha: Esto es alpha. @@ -82,6 +84,7 @@ es: job: Trabajo log: Registro top: + accounts: admin: Admin blog: Blog docs: Documentación @@ -89,6 +92,7 @@ es: home: Inicio profile: Perfil sign_out: Desconectar + signing_in: stats: Estadísticas locales: ca: @@ -106,6 +110,7 @@ es: show: email: email github: Github + locale: message: config: como configurar tus propias opciones para el Build your_repos: ! " Activa los interruptores para inicial el Travis service hook para tus proyectos, y haz un Push en GitHub.<br />\n Para probar varias versiones de ruby, mira" @@ -118,6 +123,7 @@ es: your_repos: Tus repositorios queue: Cola repositories: + asciidoc: branch: Rama commit: Commit duration: Duración @@ -136,7 +142,6 @@ es: pull_requests: test: textile: Textile - asciidoc: AsciiDoc repository: duration: Duración statistics: diff --git a/locales/fr.yml b/locales/fr.yml index bae26a5f..8b367d73 100644 --- a/locales/fr.yml +++ b/locales/fr.yml @@ -19,6 +19,7 @@ fr: sponsored_by: Cette série de tests a été exécutée sur une machine sponsorisée par name: Version started_at: Commencé + state: datetime: distance_in_words: hours_exact: @@ -53,6 +54,7 @@ fr: sponsored_by: Cette série de tests a été exécutée sur une machine sponsorisée par sponsored_by: Cette série de tests a été exécutée sur une machine sponsorisée par started_at: Commencé + state: layouts: about: alpha: Ceci est en alpha. @@ -82,6 +84,7 @@ fr: job: Tâche log: Journal top: + accounts: admin: Admin blog: Blog docs: Documentation @@ -89,6 +92,7 @@ fr: home: Accueil profile: Profil sign_out: Déconnexion + signing_in: stats: Statistiques locales: ca: @@ -106,6 +110,7 @@ fr: show: email: Courriel github: Github + locale: message: config: comment configurer des options de version personnalisées your_repos: ! 'Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.<br /> @@ -120,6 +125,7 @@ fr: your_repos: Vos dépôts queue: File repositories: + asciidoc: branch: Branche commit: Commit duration: Durée @@ -138,7 +144,6 @@ fr: pull_requests: test: textile: Textile - asciidoc: AsciiDoc repository: duration: Durée statistics: diff --git a/locales/ja.yml b/locales/ja.yml index 7ce292a8..20b84975 100644 --- a/locales/ja.yml +++ b/locales/ja.yml @@ -19,6 +19,7 @@ ja: sponsored_by: このテストは以下のスポンサーの協力で行いました。 name: ビルド started_at: 開始時刻 + state: datetime: distance_in_words: hours_exact: @@ -47,6 +48,7 @@ ja: sponsored_by: このテストは以下のスポンサーの協力で行いました。 sponsored_by: started_at: 開始時刻 + state: layouts: about: alpha: まだアルファですよ! @@ -76,6 +78,7 @@ ja: job: ジョブ log: ログ top: + accounts: admin: 管理 blog: ブログ docs: Travisとは? @@ -83,6 +86,7 @@ ja: home: ホーム profile: プロフィール sign_out: ログアウト + signing_in: stats: 統計 locales: ca: @@ -100,6 +104,7 @@ ja: show: email: メール github: Github + locale: 言語 message: config: 詳細設定 your_repos: 以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ: @@ -112,6 +117,7 @@ ja: your_repos: リポジトリ queue: キュー repositories: + asciidoc: branch: ブランチ commit: コミット duration: 処理時間 @@ -130,7 +136,6 @@ ja: pull_requests: プルリクエスト test: textile: .textile - asciidoc: .asciidoc repository: duration: 時間 statistics: diff --git a/locales/nb.yml b/locales/nb.yml index a1d663a0..ce8fb0fb 100644 --- a/locales/nb.yml +++ b/locales/nb.yml @@ -19,6 +19,7 @@ nb: sponsored_by: Denne testen ble kjørt på en maskin sponset av name: Jobb started_at: Startet + state: datetime: distance_in_words: hours_exact: @@ -53,6 +54,7 @@ nb: sponsored_by: Denne testserien ble kjørt på en maskin sponset av sponsored_by: started_at: Startet + state: layouts: about: alpha: Dette er alfa-greier. @@ -82,6 +84,7 @@ nb: job: Jobb log: Logg top: + accounts: admin: Administrator blog: Blogg docs: Dokumentasjon @@ -89,6 +92,7 @@ nb: home: Hjem profile: Profil sign_out: Logg ut + signing_in: stats: Statistikk locales: ca: @@ -106,6 +110,7 @@ nb: show: email: E-post github: Github + locale: message: config: hvordan sette opp egne jobbinnstillinger your_repos: ! "Slå\x10 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.<br />\nFor å teste mot flere versjoner av ruby, se " @@ -118,6 +123,7 @@ nb: your_repos: Dine kodelagre queue: Kø repositories: + asciidoc: branch: Gren commit: Innsender duration: Varighet @@ -136,7 +142,6 @@ nb: pull_requests: test: textile: Textile - asciidoc: AsciiDoc repository: duration: Varighet statistics: diff --git a/locales/nl.yml b/locales/nl.yml index 8e1da620..6580ef3e 100644 --- a/locales/nl.yml +++ b/locales/nl.yml @@ -19,6 +19,7 @@ nl: sponsored_by: Deze tests zijn gedraaid op een machine gesponsord door name: Bouw started_at: Gestart + state: datetime: distance_in_words: hours_exact: @@ -53,6 +54,7 @@ nl: sponsored_by: Deze testen zijn uitgevoerd op een machine gesponsord door sponsored_by: started_at: Gestart + state: layouts: about: alpha: Dit is in alfa-stadium. @@ -82,6 +84,7 @@ nl: job: Taak log: Logboek top: + accounts: admin: Administratie blog: Blog docs: Documentatie @@ -89,6 +92,7 @@ nl: home: Home profile: Profiel sign_out: Uitloggen + signing_in: stats: Statistieken locales: ca: @@ -106,6 +110,7 @@ nl: show: email: Email adres github: Github + locale: message: config: hoe eigen bouw-opties in te stellen your_repos: ! 'Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github<br /> @@ -120,6 +125,7 @@ nl: your_repos: Uw repositories queue: Wachtrij repositories: + asciidoc: branch: Tak commit: Commit duration: Duur @@ -138,7 +144,6 @@ nl: pull_requests: test: textile: Textile - asciidoc: AsciiDoc repository: duration: Duur statistics: diff --git a/locales/pl.yml b/locales/pl.yml index 506eb870..88257ded 100644 --- a/locales/pl.yml +++ b/locales/pl.yml @@ -19,6 +19,7 @@ pl: sponsored_by: Te testy zostały uruchomione na maszynie sponsorowanej przez name: Build started_at: Rozpoczęto + state: datetime: distance_in_words: hours_exact: @@ -53,6 +54,7 @@ pl: sponsored_by: Te testy zostały uruchomione na maszynie sponsorowanej przez sponsored_by: Te testy zostały uruchomione na maszynie sponsorowanej przez started_at: Rozpoczęto + state: layouts: about: alpha: To wciąż jest wersja alpha. @@ -82,6 +84,7 @@ pl: job: Zadanie log: Log top: + accounts: admin: blog: Blog docs: Dokumentacja @@ -89,6 +92,7 @@ pl: home: Start profile: Profil sign_out: Wyloguj się + signing_in: stats: Statystki locales: ca: @@ -106,6 +110,7 @@ pl: show: email: Email github: Github + locale: message: config: jak skonfigurować niestandardowe opcje builda your_repos: ! " Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.<br />\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz" @@ -118,6 +123,7 @@ pl: your_repos: Twoje repozytoria queue: Kolejka repositories: + asciidoc: branch: Gałąź commit: Commit duration: Czas trwania @@ -136,7 +142,6 @@ pl: pull_requests: test: textile: Textile - asciidoc: AsciiDoc repository: duration: statistics: diff --git a/locales/pt-BR.yml b/locales/pt-BR.yml index e76bf746..ab1ac844 100644 --- a/locales/pt-BR.yml +++ b/locales/pt-BR.yml @@ -19,6 +19,7 @@ pt-BR: sponsored_by: Esta série de testes foi executada em uma caixa de processos patrocinada por name: Build started_at: Iniciou em + state: datetime: distance_in_words: hours_exact: @@ -53,6 +54,7 @@ pt-BR: sponsored_by: Esta série de testes foi executada em uma caixa de processos patrocinada por sponsored_by: started_at: Iniciou em + state: layouts: about: alpha: Isto é um alpha. @@ -82,6 +84,7 @@ pt-BR: job: Trabalho log: Log top: + accounts: admin: Admin blog: Blog docs: Documentação @@ -89,6 +92,7 @@ pt-BR: home: Home profile: Perfil sign_out: Sair + signing_in: stats: Estatísticas locales: ca: @@ -106,6 +110,7 @@ pt-BR: show: email: Email github: Github + locale: message: config: como configurar opções de build your_repos: Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.<br />Para testar com múltiplas versões do Ruby, leia @@ -118,6 +123,7 @@ pt-BR: your_repos: Seus Repositórios queue: Fila repositories: + asciidoc: branch: Branch commit: Commit duration: Duração @@ -136,7 +142,6 @@ pt-BR: pull_requests: test: textile: Textile - asciidoc: AsciiDoc repository: duration: Duração statistics: diff --git a/locales/ru.yml b/locales/ru.yml index 2dcc8da1..9ff2759a 100644 --- a/locales/ru.yml +++ b/locales/ru.yml @@ -19,6 +19,7 @@ ru: sponsored_by: Эта серия тестов была запущена на машине, спонсируемой name: Билд started_at: Начало + state: datetime: distance_in_words: hours_exact: @@ -59,6 +60,7 @@ ru: sponsored_by: Эта серия тестов была запущена на машине спонсируемой sponsored_by: started_at: Начало + state: layouts: about: alpha: Это альфа-версия @@ -88,6 +90,7 @@ ru: job: Задача log: Журнал top: + accounts: admin: Управление blog: Блог docs: Документация @@ -95,6 +98,7 @@ ru: home: Главная profile: Профиль sign_out: Выход + signing_in: stats: Статистика locales: ca: @@ -112,6 +116,7 @@ ru: show: email: Электронная почта github: Github + locale: message: config: как настроить специальные опции билда your_repos: ! 'Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.<br /> @@ -126,6 +131,7 @@ ru: your_repos: Ваши репозитории queue: Очередь repositories: + asciidoc: branch: Ветка commit: Коммит duration: Длительность @@ -144,7 +150,6 @@ ru: pull_requests: Запросы на Pull test: textile: Textile - asciidoc: AsciiDoc repository: duration: Длительность statistics: diff --git a/script/ci b/script/ci new file mode 100755 index 00000000..866b79cf --- /dev/null +++ b/script/ci @@ -0,0 +1,9 @@ +#!/bin/bash + +if [ "$TEST_SUITE" == "spec" ]; then + bundle exec rspec spec +elif [ "$TEST_SUITE" == "ember" ]; then + bundle exec rackup -s puma -p 5000 -D + sleep 3 + ./run_jasmine.coffee http://localhost:5000/spec.html +fi