diff --git a/assets/scripts/app/templates/jobs/log.hbs b/assets/scripts/app/templates/jobs/log.hbs index 80652414..fb563dc6 100644 --- a/assets/scripts/app/templates/jobs/log.hbs +++ b/assets/scripts/app/templates/jobs/log.hbs @@ -1,6 +1,6 @@ {{view.logSubscriber}} -{{#if log.isLoaded}} +{{#if view.job.log.isLoaded}}
diff --git a/public/scripts/app.js b/public/scripts/app.js index 8c2a98b3..95571f2f 100644 --- a/public/scripts/app.js +++ b/public/scripts/app.js @@ -30501,4 +30501,4 @@ var _require=function(){function c(a,c){document.addEventListener?a.addEventList ++g&&setTimeout(c,0)})}}(); (function(){!window.WebSocket&&window.MozWebSocket&&(window.WebSocket=window.MozWebSocket);if(window.WebSocket)Pusher.Transport=window.WebSocket,Pusher.TransportType="native";var c=(document.location.protocol=="http:"?Pusher.cdn_http:Pusher.cdn_https)+Pusher.VERSION,a=[];window.JSON||a.push(c+"/json2"+Pusher.dependency_suffix+".js");if(!window.WebSocket)window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION=!0,a.push(c+"/flashfallback"+Pusher.dependency_suffix+".js");var b=function(){return window.WebSocket?function(){Pusher.ready()}: function(){window.WebSocket?(Pusher.Transport=window.WebSocket,Pusher.TransportType="flash",window.WEB_SOCKET_SWF_LOCATION=c+"/WebSocketMain.swf",WebSocket.__addTask(function(){Pusher.ready()}),WebSocket.__initialize()):(Pusher.Transport=null,Pusher.TransportType="none",Pusher.ready())}}(),e=function(a){var b=function(){document.body?a():setTimeout(b,0)};b()},g=function(){e(b)};a.length>0?_require(a,g):g()})(); -;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n Travis.reopen({\n App: Em.Application.extend({\n autoinit: false,\n currentUserBinding: 'auth.user',\n authStateBinding: 'auth.state',\n init: function() {\n this._super.apply(this, arguments);\n this.store = Travis.Store.create();\n this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n this.slider = new Travis.Slider();\n this.pusher = new Travis.Pusher(Travis.config.pusher_key);\n this.tailing = new Travis.Tailing();\n return this.set('auth', Travis.Auth.create({\n app: this,\n endpoint: Travis.config.api_endpoint\n }));\n },\n storeAfterSignInPath: function(path) {\n return this.get('auth').storeAfterSignInPath(path);\n },\n autoSignIn: function(path) {\n return this.get('auth').autoSignIn(path);\n },\n signIn: function() {\n return this.get('auth').signIn();\n },\n signOut: function() {\n this.get('auth').signOut();\n return this.get('router').send('afterSignOut');\n },\n receive: function() {\n return this.store.receive.apply(this.store, arguments);\n },\n toggleSidebar: function() {\n var element;\n $('body').toggleClass('maximized');\n element = $('');\n $('#top .profile').append(element);\n Em.run.later((function() {\n return element.remove();\n }), 10);\n element = $('');\n $('#repo').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n this.Travis.Auth = Ember.Object.extend({\n iframe: $('').hide(),\n timeout: 5000,\n state: 'signed-out',\n receivingEnd: \"\" + location.protocol + \"//\" + location.host,\n init: function() {\n var _this = this;\n this.iframe.appendTo('body');\n return window.addEventListener('message', function(e) {\n return _this.receiveMessage(e);\n });\n },\n accessToken: (function() {\n return sessionStorage.getItem('travis.token');\n }).property(),\n autoSignIn: function(path) {\n var user;\n if (user = sessionStorage.getItem('travis.user')) {\n return this.setData({\n user: JSON.parse(user)\n });\n } else if (localStorage.getItem('travis.auto_signin')) {\n return this.signIn();\n }\n },\n signIn: function() {\n this.set('state', 'signing-in');\n this.trySignIn();\n return Ember.run.later(this, this.checkSignIn.bind(this), this.timeout);\n },\n signOut: function() {\n localStorage.removeItem('travis.auto_signin');\n localStorage.removeItem('travis.locale');\n sessionStorage.clear();\n return this.setData();\n },\n trySignIn: function() {\n return this.iframe.attr('src', \"\" + this.endpoint + \"/auth/post_message?origin=\" + this.receivingEnd);\n },\n checkSignIn: function() {\n if (this.get('state') === 'signing-in') {\n return this.forceSignIn();\n }\n },\n forceSignIn: function() {\n localStorage.setItem('travis.auto_signin', 'true');\n return window.location = \"\" + this.endpoint + \"/auth/handshake?redirect_uri=\" + location;\n },\n setData: function(data) {\n var user;\n if (typeof data === 'string') {\n data = JSON.parse(data);\n }\n if (data != null ? data.token : void 0) {\n this.storeToken(data.token);\n }\n if (data != null ? data.user : void 0) {\n user = this.storeUser(data.user);\n }\n this.set('state', user ? 'signed-in' : 'signed-out');\n this.set('user', user ? user : void 0);\n return this.afterSignIn();\n },\n afterSignIn: function() {\n return this.get('app.router').send('afterSignIn', this.readAfterSignInPath());\n },\n storeToken: function(token) {\n sessionStorage.setItem('travis.token', token);\n return this.notifyPropertyChange('accessToken');\n },\n storeUser: function(user) {\n localStorage.setItem('travis.auto_signin', 'true');\n sessionStorage.setItem('travis.user', JSON.stringify(user));\n this.app.store.load(Travis.User, user);\n user = this.app.store.find(Travis.User, user.id);\n user.get('permissions');\n return user;\n },\n storeAfterSignInPath: function(path) {\n return sessionStorage.setItem('travis.after_signin_path', path);\n },\n readAfterSignInPath: function() {\n var path;\n path = sessionStorage.getItem('travis.after_signin_path');\n sessionStorage.removeItem('travis.after_signin_path');\n return path;\n },\n receiveMessage: function(event) {\n if (event.origin === this.expectedOrigin()) {\n if (event.data.token) {\n event.data.user.token = event.data.token;\n }\n this.setData(event.data);\n return console.log(\"signed in as \" + event.data.user.login);\n } else {\n return console.log(\"unexpected message \" + event.origin + \": \" + event.data);\n }\n },\n expectedOrigin: function() {\n if (this.endpoint[0] === '/') {\n return this.receivingEnd;\n } else {\n return this.endpoint;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=auth");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\nminispade.require('travis/ticker');\n\n Travis.reopen({\n Controller: Em.Controller.extend({\n connectOutlet: function() {\n var view, _connectedOutletViews;\n view = this._super.apply(this, arguments);\n if (view) {\n _connectedOutletViews = Travis.app.get('_connectedOutletViews');\n if (!_connectedOutletViews) {\n _connectedOutletViews = [];\n }\n _connectedOutletViews.pushObject(view);\n Travis.app.set('_connectedOutletViews', _connectedOutletViews);\n }\n return view;\n }\n }),\n TopController: Em.Controller.extend({\n userBinding: 'Travis.app.currentUser'\n }),\n ApplicationController: Em.Controller.extend(),\n MainController: Em.Controller.extend(),\n StatsLayoutController: Em.Controller.extend(),\n ProfileLayoutController: Em.Controller.extend(),\n AuthLayoutController: Em.Controller.extend()\n });\nminispade.require('controllers/accounts');\nminispade.require('controllers/builds');\nminispade.require('controllers/flash');\nminispade.require('controllers/home');\nminispade.require('controllers/profile');\nminispade.require('controllers/repos');\nminispade.require('controllers/repo');\nminispade.require('controllers/sidebar');\nminispade.require('controllers/stats');\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('controllers/accounts', "(function() {(function() {\n\n Travis.AccountsController = Ember.ArrayController.extend({\n tab: 'accounts',\n init: function() {\n return this._super();\n },\n findByLogin: function(login) {\n return this.find(function(account) {\n return account.get('login') === login;\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/accounts");minispade.register('controllers/builds', "(function() {(function() {\n\n Travis.BuildsController = Em.ArrayController.extend({\n repo: 'parent.repo',\n contentBinding: 'parent.builds'\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/builds");minispade.register('controllers/flash', "(function() {(function() {\n\n Travis.FlashController = Ember.ArrayController.extend({\n broadcastBinding: 'Travis.app.currentUser.broadcasts',\n init: function() {\n this.set('flashes', Ember.A());\n return this._super.apply(this, arguments);\n },\n content: (function() {\n return this.get('unseenBroadcasts').concat(this.get('flashes'));\n }).property('unseenBroadcasts.length', 'flashes.length'),\n unseenBroadcasts: (function() {\n return this.get('broadcasts').filterProperty('isSeen', false);\n }).property('broadcasts.isLoaded', 'broadcasts.length'),\n broadcasts: (function() {\n if (Travis.app.get('currentUser')) {\n return Travis.Broadcast.find();\n } else {\n return Ember.A();\n }\n }).property('Travis.app.currentUser'),\n loadFlashes: function(msgs) {\n var msg, type, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = msgs.length; _i < _len; _i++) {\n msg = msgs[_i];\n type = Ember.keys(msg)[0];\n msg = {\n type: type,\n message: msg[type]\n };\n this.get('flashes').pushObject(msg);\n _results.push(Ember.run.later(this, (function() {\n return this.get('flashes').removeObject(msg);\n }), 15000));\n }\n return _results;\n },\n close: function(msg) {\n if (msg instanceof Travis.Broadcast) {\n msg.setSeen();\n return this.notifyPropertyChange('unseenBroadcasts');\n } else {\n return this.get('flashes').removeObject(msg);\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/flash");minispade.register('controllers/home', "(function() {(function() {\n\n Travis.HomeLayoutController = Travis.Controller.extend();\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/home");minispade.register('controllers/profile', "(function() {(function() {\n\n Travis.ProfileController = Travis.Controller.extend({\n name: 'profile',\n userBinding: 'Travis.app.currentUser',\n accountsBinding: 'Travis.app.router.accountsController',\n account: (function() {\n var account, login;\n login = this.get('params.login') || Travis.app.get('currentUser.login');\n account = this.get('accounts').filter(function(account) {\n if (account.get('login') === login) {\n return account;\n }\n })[0];\n if (account) {\n account.select();\n }\n return account;\n }).property('accounts.length', 'params.login'),\n activate: function(action, params) {\n this.setParams(params || this.get('params'));\n return this[\"view\" + ($.camelize(action))]();\n },\n viewHooks: function() {\n this.connectTab('hooks');\n return this.set('hooks', Travis.Hook.find({\n owner_name: this.get('params.login') || Travis.app.get('currentUser.login')\n }));\n },\n viewUser: function() {\n return this.connectTab('user');\n },\n connectTab: function(tab) {\n var viewClass;\n viewClass = Travis[\"\" + ($.camelize(tab)) + \"View\"];\n this.set('tab', tab);\n return this.connectOutlet({\n outletName: 'pane',\n controller: this,\n viewClass: viewClass\n });\n },\n setParams: function(params) {\n var key, value, _results;\n this.set('params', {});\n _results = [];\n for (key in params) {\n value = params[key];\n _results.push(this.set(\"params.\" + key, params[key]));\n }\n return _results;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/profile");minispade.register('controllers/repo', "(function() {(function() {\n\n Travis.RepoController = Travis.Controller.extend({\n bindings: [],\n init: function() {\n this._super.apply(this, arguments);\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n updateTimes: function() {\n var build, builds, jobs;\n if (builds = this.get('builds')) {\n builds.forEach(function(b) {\n return b.updateTimes();\n });\n }\n if (build = this.get('build')) {\n build.updateTimes();\n }\n if (build && (jobs = build.get('jobs'))) {\n jobs.forEach(function(j) {\n return j.updateTimes();\n });\n }\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n activate: function(action) {\n this._unbind();\n return this[\"view\" + ($.camelize(action))]();\n },\n viewIndex: function() {\n this._bind('repo', 'controllers.reposController.firstObject');\n this._bind('build', 'repo.lastBuild');\n return this.connectTab('current');\n },\n viewCurrent: function() {\n this.connectTab('current');\n return this._bind('build', 'repo.lastBuild');\n },\n viewBuilds: function() {\n this.connectTab('builds');\n return this._bind('builds', 'repo.builds');\n },\n viewPullRequests: function() {\n this.connectTab('pull_requests');\n return this._bind('builds', 'repo.pullRequests');\n },\n viewBranches: function() {\n this.connectTab('branches');\n return this._bind('builds', 'repo.branches');\n },\n viewEvents: function() {\n this.connectTab('events');\n return this._bind('events', 'repo.events');\n },\n viewBuild: function() {\n return this.connectTab('build');\n },\n viewJob: function() {\n this._bind('build', 'job.build');\n return this.connectTab('job');\n },\n repoObserver: (function() {\n var repo;\n repo = this.get('repo');\n if (repo) {\n return repo.select();\n }\n }).observes('repo.id'),\n connectTab: function(tab) {\n var name, viewClass;\n name = tab === 'current' ? 'build' : tab;\n viewClass = name === 'builds' || name === 'branches' || name === 'pull_requests' ? Travis.BuildsView : Travis[\"\" + ($.camelize(name)) + \"View\"];\n this.set('tab', tab);\n return this.connectOutlet({\n outletName: 'pane',\n controller: this,\n viewClass: viewClass\n });\n },\n _bind: function(to, from) {\n return this.bindings.push(Ember.oneWay(this, to, from));\n },\n _unbind: function() {\n var binding, _i, _len, _ref;\n _ref = this.bindings;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n binding = _ref[_i];\n binding.disconnect(this);\n }\n return this.bindings.length = 0;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repo");minispade.register('controllers/repos', "(function() {(function() {\nminispade.require('travis/limited_array');\n\n Travis.ReposController = Ember.ArrayController.extend({\n defaultTab: 'recent',\n sortProperties: ['sortOrder'],\n init: function() {\n this.activate(this.defaultTab);\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n updateTimes: function() {\n var content;\n if (content = this.get('content')) {\n content.forEach(function(r) {\n return r.updateTimes();\n });\n }\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n activate: function(tab, params) {\n this.set('tab', tab);\n return this[\"view\" + ($.camelize(tab))](params);\n },\n viewRecent: function() {\n var content;\n content = Travis.LimitedArray.create({\n content: Travis.Repo.find(),\n limit: 30\n });\n return this.set('content', content);\n },\n viewOwned: function() {\n return this.set('content', Travis.Repo.accessibleBy(Travis.app.get('currentUser.login')));\n },\n viewSearch: function(params) {\n return this.set('content', Travis.Repo.search(params.search));\n },\n searchObserver: (function() {\n var search;\n search = this.get('search');\n if (search) {\n return this.searchFor(search);\n } else {\n this.activate('recent');\n return 'recent';\n }\n }).observes('search'),\n searchFor: function(phrase) {\n if (this.searchLater) {\n Ember.run.cancel(this.searchLater);\n }\n return this.searchLater = Ember.run.later(this, (function() {\n return this.activate('search', {\n search: phrase\n });\n }), 500);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repos");minispade.register('controllers/sidebar', "(function() {(function() {\n\n Travis.reopen({\n SidebarController: Em.ArrayController.extend({\n init: function() {\n this.tickables = [];\n return Travis.Ticker.create({\n target: this,\n interval: Travis.INTERVALS.sponsors\n });\n },\n tick: function() {\n var tickable, _i, _len, _ref, _results;\n _ref = this.tickables;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n tickable = _ref[_i];\n _results.push(tickable.tick());\n }\n return _results;\n }\n }),\n QueuesController: Em.ArrayController.extend(),\n WorkersController: Em.ArrayController.extend({\n groups: (function() {\n var content, groups, host, worker, _i, _len, _ref;\n if (content = this.get('arrangedContent')) {\n groups = {};\n _ref = content.toArray();\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n worker = _ref[_i];\n host = worker.get('host');\n if (!groups[host]) {\n groups[host] = Em.ArrayProxy.create(Em.SortableMixin, {\n content: [],\n sortProperties: ['nameForSort']\n });\n }\n groups[host].addObject(worker);\n }\n return $.values(groups);\n }\n }).property('length')\n }),\n SponsorsController: Em.ArrayController.extend({\n page: 0,\n arrangedContent: (function() {\n return this.get('shuffled').slice(this.start(), this.end());\n }).property('shuffled.length', 'page'),\n shuffled: (function() {\n var content;\n if (content = this.get('content')) {\n return $.shuffle(content);\n } else {\n return [];\n }\n }).property('content.length'),\n tick: function() {\n return this.set('page', this.isLast() ? 0 : this.get('page') + 1);\n },\n pages: (function() {\n var length;\n length = this.get('content.length');\n if (length) {\n return parseInt(length / this.get('perPage') + 1);\n } else {\n return 1;\n }\n }).property('length'),\n isLast: function() {\n return this.get('page') === this.get('pages') - 1;\n },\n start: function() {\n return this.get('page') * this.get('perPage');\n },\n end: function() {\n return this.start() + this.get('perPage');\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/sidebar");minispade.register('controllers/stats', "(function() {(function() {\n\n Travis.StatsController = Travis.Controller.extend({\n name: 'stats',\n init: function() {\n return this._super('top');\n },\n activate: function(action, params) {}\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/stats");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n var safe;\nminispade.require('ext/ember/bound_helper');\n\n safe = function(string) {\n return new Handlebars.SafeString(string);\n };\n\n Handlebars.registerHelper('tipsy', function(text, tip) {\n return safe('' + text + '');\n });\n\n Handlebars.registerHelper('t', function(key) {\n return safe(I18n.t(key));\n });\n\n Ember.registerBoundHelper('formatTime', function(value, options) {\n return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n });\n\n Ember.registerBoundHelper('formatDuration', function(duration, options) {\n return safe(Travis.Helpers.timeInWords(duration));\n });\n\n Ember.registerBoundHelper('formatCommit', function(commit, options) {\n if (commit) {\n return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n }\n });\n\n Ember.registerBoundHelper('formatSha', function(sha, options) {\n return safe(Travis.Helpers.formatSha(sha));\n });\n\n Ember.registerBoundHelper('pathFrom', function(url, options) {\n return safe(Travis.Helpers.pathFrom(url));\n });\n\n Ember.registerBoundHelper('formatMessage', function(message, options) {\n return safe(Travis.Helpers.formatMessage(message, options));\n });\n\n Ember.registerBoundHelper('formatConfig', function(config, options) {\n return safe(Travis.Helpers.formatConfig(config));\n });\n\n Ember.registerBoundHelper('formatLog', function(log, options) {\n var item, parentView, repo;\n parentView = this.get('parentView');\n repo = parentView.get(options.repo);\n item = parentView.get(options.item);\n return Travis.Helpers.formatLog(log, repo, item) || '';\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\nminispade.require('config/emoij');\n\n this.Travis.Helpers = {\n compact: function(object) {\n var key, result, value, _ref;\n result = {};\n _ref = object || {};\n for (key in _ref) {\n value = _ref[key];\n if (!$.isEmpty(value)) {\n result[key] = value;\n }\n }\n return result;\n },\n safe: function(string) {\n return new Handlebars.SafeString(string);\n },\n colorForResult: function(result) {\n if (result === 0) {\n return 'green';\n } else {\n if (result === 1) {\n return 'red';\n } else {\n return null;\n }\n }\n },\n formatCommit: function(sha, branch) {\n return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n },\n formatSha: function(sha) {\n return (sha || '').substr(0, 7);\n },\n formatConfig: function(config) {\n var values;\n config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n values = $.map(config, function(value, key) {\n value = (value && value.join ? value.join(', ') : value) || '';\n return '%@: %@'.fmt($.camelize(key), value);\n });\n if (values.length === 0) {\n return '-';\n } else {\n return values.join(', ');\n }\n },\n formatMessage: function(message, options) {\n message = message || '';\n if (options.short) {\n message = message.split(/\\n/)[0];\n }\n return this._emojize(this._escape(message)).replace(/\\n/g, '
');\n },\n formatLog: function(log, repo, item) {\n var event, url;\n event = item.constructor === Travis.Build ? 'showBuild' : 'showJob';\n url = Travis.app.get('router').urlForEvent(event, repo, item);\n return Travis.Log.filter(log, url);\n },\n pathFrom: function(url) {\n return (url || '').split('/').pop();\n },\n timeAgoInWords: function(date) {\n return $.timeago.distanceInWords(date);\n },\n durationFrom: function(started, finished) {\n started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n if (started && finished) {\n return Math.round((finished - started) / 1000);\n } else {\n return 0;\n }\n },\n timeInWords: function(duration) {\n var days, hours, minutes, result, seconds;\n days = Math.floor(duration / 86400);\n hours = Math.floor(duration % 86400 / 3600);\n minutes = Math.floor(duration % 3600 / 60);\n seconds = duration % 60;\n if (days > 0) {\n return 'more than 24 hrs';\n } else {\n result = [];\n if (hours === 1) {\n result.push(hours + ' hr');\n }\n if (hours > 1) {\n result.push(hours + ' hrs');\n }\n if (minutes > 0) {\n result.push(minutes + ' min');\n }\n if (seconds > 0) {\n result.push(seconds + ' sec');\n }\n if (result.length > 0) {\n return result.join(' ');\n } else {\n return '-';\n }\n }\n },\n _normalizeDateString: function(string) {\n if (window.JHW) {\n string = string.replace('T', ' ').replace(/-/g, '/');\n string = string.replace('Z', '').replace(/\\..*$/, '');\n }\n return string;\n },\n _nowUtc: function() {\n return this._toUtc(new Date());\n },\n _toUtc: function(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n },\n _emojize: function(text) {\n var emojis;\n emojis = text.match(/:\\S+?:/g);\n if (emojis !== null) {\n $.each(emojis.uniq(), function(ix, emoji) {\n var image, strippedEmoji;\n strippedEmoji = emoji.substring(1, emoji.length - 1);\n if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n image = '';\n return text = text.replace(new RegExp(emoji, 'g'), image);\n }\n });\n }\n return text;\n },\n _escape: function(text) {\n return text.replace(/&/g, '&').replace(//g, '>');\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n this.Travis.Urls = {\n repo: function(slug) {\n return \"/\" + slug;\n },\n builds: function(slug) {\n return \"/\" + slug + \"/builds\";\n },\n pullRequests: function(slug) {\n return \"/\" + slug + \"/pull_requests\";\n },\n branches: function(slug) {\n return \"/\" + slug + \"/branches\";\n },\n build: function(slug, id) {\n return \"/\" + slug + \"/builds/\" + id;\n },\n job: function(slug, id) {\n return \"/\" + slug + \"/jobs/\" + id;\n },\n githubCommit: function(slug, sha) {\n return \"http://github.com/\" + slug + \"/commit/\" + sha;\n },\n githubRepo: function(slug) {\n return \"http://github.com/\" + slug;\n },\n githubWatchers: function(slug) {\n return \"http://github.com/\" + slug + \"/watchers\";\n },\n githubNetwork: function(slug) {\n return \"http://github.com/\" + slug + \"/network\";\n },\n githubAdmin: function(slug) {\n return \"http://github.com/\" + slug + \"/admin/hooks#travis_minibucket\";\n },\n statusImage: function(slug, branch) {\n return (\"https://secure.travis-ci.org/\" + slug + \".png\") + (branch ? \"?branch=\" + branch : '');\n },\n email: function(email) {\n return \"mailto:\" + email;\n },\n account: function(login) {\n return \"/profile/\" + login;\n },\n user: function(login) {\n return \"/profile/\" + login + \"/me\";\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('models', "(function() {(function() {\nminispade.require('models/extensions');\nminispade.require('models/account');\nminispade.require('models/artifact');\nminispade.require('models/broadcast');\nminispade.require('models/branch');\nminispade.require('models/build');\nminispade.require('models/commit');\nminispade.require('models/event');\nminispade.require('models/hook');\nminispade.require('models/job');\nminispade.require('models/repo');\nminispade.require('models/sponsor');\nminispade.require('models/user');\nminispade.require('models/worker');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/account', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Account = Travis.Model.extend({\n primaryKey: 'login',\n login: DS.attr('string'),\n name: DS.attr('string'),\n type: DS.attr('string'),\n reposCount: DS.attr('number'),\n urlGithub: (function() {\n return \"http://github.com/\" + (this.get('login'));\n }).property()\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/account");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Artifact = Travis.Model.extend({\n body: DS.attr('string'),\n init: function() {\n this._super.apply(this, arguments);\n this.set('queue', Ember.A([]));\n this.addObserver('body', this.fetchWorker);\n return this.fetchWorker();\n },\n append: function(body) {\n if (this.get('isLoaded')) {\n return this.set('body', this.get('body') + body);\n } else {\n return this.get('queue').pushObject(body);\n }\n },\n recordDidLoad: (function() {\n var queue;\n if (this.get('isLoaded')) {\n queue = this.get('queue');\n if (queue.get('length') > 0) {\n return this.append(queue.toArray().join(''));\n }\n }\n }).observes('isLoaded'),\n fetchWorker: function() {\n var body, line, match, worker;\n if (body = this.get('body')) {\n line = body.split(\"\\n\")[0];\n if (line && (match = line.match(/Using worker: (.*)/))) {\n if (worker = match[1]) {\n worker = worker.trim().split(':')[0];\n this.set('workerName', worker);\n return this.removeObserver('body', this.fetchWorker);\n }\n }\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n commitId: DS.attr('number'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n duration: DS.attr('number'),\n startedAt: DS.attr('string'),\n finishedAt: DS.attr('string'),\n commit: DS.belongsTo('Travis.Commit'),\n repo: (function() {\n if (this.get('repoId')) {\n return Travis.Repo.find(this.get('repoId'));\n }\n }).property('repoId'),\n updateTimes: function() {\n this.notifyPropertyChange('started_at');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n this.Travis.Branch.reopenClass({\n byRepoId: function(id) {\n return this.find({\n repository_id: id\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/broadcast', "(function() {(function() {\n var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('travis/model');\n\n this.Travis.Broadcast = Travis.Model.extend({\n message: DS.attr('string'),\n toObject: function() {\n return {\n type: 'broadcast',\n id: this.get('id'),\n message: this.get('message')\n };\n },\n isSeen: (function() {\n var _ref;\n return _ref = this.get('id'), __indexOf.call(Travis.Broadcast.seen, _ref) >= 0;\n }).property(),\n setSeen: function() {\n Travis.Broadcast.seen.pushObject(this.get('id'));\n localStorage.setItem('travis.seen_broadcasts', JSON.stringify(Travis.Broadcast.seen));\n return this.notifyPropertyChange('isSeen');\n }\n });\n\n this.Travis.Broadcast.reopenClass({\n seen: Ember.A(JSON.parse(localStorage.getItem('travis.seen_broadcasts')) || [])\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/broadcast");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Build = Travis.Model.extend(Travis.DurationCalculations, {\n eventType: DS.attr('string'),\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n commitId: DS.attr('number'),\n state: DS.attr('string'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n _duration: DS.attr('number', {\n key: 'duration'\n }),\n startedAt: DS.attr('string', {\n key: 'started_at'\n }),\n finishedAt: DS.attr('string', {\n key: 'finished_at'\n }),\n repo: DS.belongsTo('Travis.Repo', {\n key: 'repository_id'\n }),\n commit: DS.belongsTo('Travis.Commit'),\n jobs: DS.hasMany('Travis.Job', {\n key: 'job_ids'\n }),\n config: (function() {\n return Travis.Helpers.compact(this.get('data.config'));\n }).property('data.config'),\n isMatrix: (function() {\n return this.get('data.job_ids.length') > 1;\n }).property('data.job_ids.length'),\n isFinished: (function() {\n return this.get('state') === 'finished';\n }).property('state'),\n requiredJobs: (function() {\n return this.get('jobs').filter(function(data) {\n return !data.get('allowFailure');\n });\n }).property('jobs.@each.allowFailure'),\n allowedFailureJobs: (function() {\n return this.get('jobs').filter(function(data) {\n return data.get('allowFailure');\n });\n }).property('jobs.@each.allowFailure'),\n configKeys: (function() {\n var config, headers, key, keys;\n if (!(config = this.get('config'))) {\n return [];\n }\n keys = $.intersect($.keys(config), Travis.CONFIG_KEYS);\n headers = (function() {\n var _i, _len, _ref, _results;\n _ref = ['build.job', 'build.duration', 'build.finished_at'];\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n key = _ref[_i];\n _results.push(I18n.t(key));\n }\n return _results;\n })();\n return $.map(headers.concat(keys), function(key) {\n return $.camelize(key);\n });\n }).property('config'),\n requeue: (function() {\n return Travis.ajax.post('/requests', {\n build_id: this.get('id')\n });\n })\n });\n\n this.Travis.Build.reopenClass({\n byRepoId: function(id, parameters) {\n return this.find($.extend(parameters || {}, {\n repository_id: id\n }));\n },\n olderThanNumber: function(id, build_number) {\n return this.find({\n url: \"/builds\",\n repository_id: id,\n after_number: build_number\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Commit = Travis.Model.extend({\n buildId: DS.attr('number'),\n sha: DS.attr('string'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n compareUrl: DS.attr('string'),\n authorName: DS.attr('string'),\n authorEmail: DS.attr('string'),\n committerName: DS.attr('string'),\n committerEmail: DS.attr('string'),\n build: DS.belongsTo('Travis.Build', {\n key: 'buildId'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/event', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Event = Travis.Model.extend({\n event: DS.attr('string'),\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n sourceId: DS.attr('number', {\n key: 'source_id'\n }),\n sourceType: DS.attr('string', {\n key: 'source_type'\n }),\n createdAt: DS.attr('string', {\n key: 'created_at'\n }),\n event_: (function() {\n return this.get('event');\n }).property('event'),\n result: (function() {\n return this.get('data.data.result');\n }).property('data.data.result'),\n message: (function() {\n return this.get('data.data.message');\n }).property('data.data.message'),\n source: (function() {\n var type;\n if (type = this.get('sourceType')) {\n return Travis[type].find(this.get('sourceId'));\n }\n }).property('sourceType', 'sourceId')\n });\n\n this.Travis.Event.reopenClass({\n byRepoId: function(id) {\n return this.find({\n repository_id: id\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/event");minispade.register('models/extensions', "(function() {(function() {\n\n Travis.DurationCalculations = Ember.Mixin.create({\n duration: (function() {\n var duration;\n if (duration = this.get('_duration')) {\n return duration;\n } else {\n return Travis.Helpers.durationFrom(this.get('startedAt'), this.get('finishedAt'));\n }\n }).property('_duration', 'finishedAt', 'startedAt'),\n updateTimes: function() {\n this.notifyPropertyChange('_duration');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/extensions");minispade.register('models/hook', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Hook = Travis.Model.extend({\n name: DS.attr('string'),\n ownerName: DS.attr('string'),\n description: DS.attr('string'),\n active: DS.attr('boolean'),\n account: (function() {\n return this.get('slug').split('/')[0];\n }).property('slug'),\n slug: (function() {\n return \"\" + (this.get('ownerName')) + \"/\" + (this.get('name'));\n }).property('ownerName', 'name'),\n urlGithub: (function() {\n return \"http://github.com/\" + (this.get('slug'));\n }).property(),\n urlGithubAdmin: (function() {\n return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n }).property(),\n toggle: function() {\n var transaction;\n transaction = this.get('store').transaction();\n transaction.add(this);\n this.set('active', !this.get('active'));\n return transaction.commit();\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/hook");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Job = Travis.Model.extend(Travis.DurationCalculations, {\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n buildId: DS.attr('number'),\n commitId: DS.attr('number'),\n logId: DS.attr('number'),\n queue: DS.attr('string'),\n state: DS.attr('string'),\n number: DS.attr('string'),\n result: DS.attr('number'),\n _duration: DS.attr('number', {\n key: 'duration'\n }),\n startedAt: DS.attr('string'),\n finishedAt: DS.attr('string'),\n allowFailure: DS.attr('boolean', {\n key: 'allow_failure'\n }),\n repo: DS.belongsTo('Travis.Repo', {\n key: 'repository_id'\n }),\n build: DS.belongsTo('Travis.Build', {\n key: 'build_id'\n }),\n commit: DS.belongsTo('Travis.Commit', {\n key: 'commit_id'\n }),\n log: DS.belongsTo('Travis.Artifact', {\n key: 'log_id'\n }),\n config: (function() {\n return Travis.Helpers.compact(this.get('data.config'));\n }).property('data.config'),\n sponsor: (function() {\n var worker;\n worker = this.get('log.workerName');\n if (worker && worker.length) {\n return Travis.WORKERS[worker] || {\n name: \"Travis Pro\",\n url: \"http://travis-ci.com\"\n };\n }\n }).property('log.workerName'),\n configValues: (function() {\n var buildConfig, config, keys;\n config = this.get('config');\n buildConfig = this.get('build.config');\n if (config && buildConfig) {\n keys = $.intersect($.keys(buildConfig), Travis.CONFIG_KEYS);\n return keys.map(function(key) {\n return config[key];\n });\n } else {\n return [];\n }\n }).property('config'),\n appendLog: function(text) {\n var log;\n if (log = this.get('log')) {\n return log.append(text);\n }\n },\n subscribe: function() {\n var id;\n if (id = this.get('id')) {\n return Travis.app.pusher.subscribe(\"job-\" + id);\n }\n },\n onStateChange: (function() {\n if (this.get('state') === 'finished') {\n return Travis.app.pusher.unsubscribe(\"job-\" + (this.get('id')));\n }\n }).observes('state')\n });\n\n this.Travis.Job.reopenClass({\n queued: function(queue) {\n this.find();\n return Travis.app.store.filter(this, function(job) {\n var queued;\n queued = ['created', 'queued'].indexOf(job.get('state')) !== -1;\n return queued && (!queue || job.get('queue') === (\"builds.\" + queue));\n });\n },\n findMany: function(ids) {\n return Travis.app.store.findMany(this, ids);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repo', "(function() {(function() {\nminispade.require('travis/expandable_record_array');\nminispade.require('travis/model');\n\n this.Travis.Repo = Travis.Model.extend({\n slug: DS.attr('string'),\n description: DS.attr('string'),\n lastBuildId: DS.attr('number'),\n lastBuildNumber: DS.attr('string'),\n lastBuildResult: DS.attr('number'),\n lastBuildStartedAt: DS.attr('string'),\n lastBuildFinishedAt: DS.attr('string'),\n lastBuild: DS.belongsTo('Travis.Build'),\n builds: (function() {\n var array, builds, id;\n id = this.get('id');\n builds = Travis.Build.byRepoId(id, {\n event_type: 'push'\n });\n array = Travis.ExpandableRecordArray.create({\n type: Travis.Build,\n content: Ember.A([]),\n store: this.get('store')\n });\n array.load(builds);\n return array;\n }).property(),\n pullRequests: (function() {\n var array, builds, id;\n id = this.get('id');\n builds = Travis.Build.byRepoId(id, {\n event_type: 'pull_request'\n });\n array = Travis.ExpandableRecordArray.create({\n type: Travis.Build,\n content: Ember.A([]),\n store: this.get('store')\n });\n array.load(builds);\n return array;\n }).property(),\n branches: (function() {\n return Travis.Branch.byRepoId(this.get('id'));\n }).property(),\n events: (function() {\n return Travis.Event.byRepoId(this.get('id'));\n }).property(),\n owner: (function() {\n return (this.get('slug') || '').split('/')[0];\n }).property('slug'),\n name: (function() {\n return (this.get('slug') || '').split('/')[1];\n }).property('slug'),\n lastBuildDuration: (function() {\n var duration;\n duration = this.get('data.last_build_duration');\n if (!duration) {\n duration = Travis.Helpers.durationFrom(this.get('lastBuildStartedAt'), this.get('lastBuildFinishedAt'));\n }\n return duration;\n }).property('data.last_build_duration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n sortOrder: (function() {\n var lastBuildFinishedAt;\n if (lastBuildFinishedAt = this.get('lastBuildFinishedAt')) {\n return -new Date(lastBuildFinishedAt).getTime();\n } else {\n return -new Date('9999').getTime() - parseInt(this.get('lastBuildId'));\n }\n }).property('lastBuildFinishedAt', 'lastBuildId'),\n stats: (function() {\n var _this = this;\n return this.get('_stats') || $.get(\"https://api.github.com/repos/\" + (this.get('slug')), function(data) {\n _this.set('_stats', data);\n return _this.notifyPropertyChange('stats');\n }) && {};\n }).property(),\n updateTimes: function() {\n return this.notifyPropertyChange('lastBuildDuration');\n }\n });\n\n this.Travis.Repo.reopenClass({\n recent: function() {\n return this.find();\n },\n ownedBy: function(login) {\n return this.find({\n owner_name: login,\n orderBy: 'name'\n });\n },\n accessibleBy: function(login) {\n return this.find({\n member: login,\n orderBy: 'name'\n });\n },\n search: function(query) {\n return this.find({\n search: query,\n orderBy: 'name'\n });\n },\n bySlug: function(slug) {\n var repo;\n repo = $.select(this.find().toArray(), function(repo) {\n return repo.get('slug') === slug;\n });\n if (repo.length > 0) {\n return repo;\n } else {\n return this.find({\n slug: slug\n });\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repo");minispade.register('models/sponsor', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Sponsor = Travis.Model.extend({\n type: DS.attr('string'),\n url: DS.attr('string'),\n link: DS.attr('string'),\n image: (function() {\n return \"/images/sponsors/\" + (this.get('data.image'));\n }).property('data.image')\n });\n\n Travis.Sponsor.reopenClass({\n decks: function() {\n return this.platinum().concat(this.gold());\n },\n platinum: function() {\n var platinum, sponsor, _i, _len, _results;\n platinum = this.byType('platinum').toArray();\n _results = [];\n for (_i = 0, _len = platinum.length; _i < _len; _i++) {\n sponsor = platinum[_i];\n _results.push([sponsor]);\n }\n return _results;\n },\n gold: function() {\n var gold, _results;\n gold = this.byType('gold').toArray();\n _results = [];\n while (gold.length > 0) {\n _results.push(gold.splice(0, 2));\n }\n return _results;\n },\n links: function() {\n return this.byType('silver');\n },\n byType: function() {\n var types;\n types = Array.prototype.slice.apply(arguments);\n return Travis.Sponsor.filter(function(sponsor) {\n return types.indexOf(sponsor.get('type')) !== -1;\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/sponsor");minispade.register('models/user', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('travis/model');\n\n this.Travis.User = Travis.Model.extend({\n name: DS.attr('string'),\n email: DS.attr('string'),\n login: DS.attr('string'),\n token: DS.attr('string'),\n locale: DS.attr('string'),\n gravatarId: DS.attr('string'),\n isSyncing: DS.attr('boolean'),\n syncedAt: DS.attr('string'),\n repoCount: DS.attr('number'),\n init: function() {\n if (this.get('isSyncing')) {\n this.poll();\n }\n this._super();\n return Ember.run.next(this, function() {\n var transaction;\n transaction = this.get('store').transaction();\n return transaction.add(this);\n });\n },\n urlGithub: (function() {\n return \"https://github.com/\" + (this.get('login'));\n }).property(),\n permissions: (function() {\n var _this = this;\n if (!this.permissions) {\n this.permissions = Ember.ArrayProxy.create({\n content: []\n });\n Travis.ajax.get('/users/permissions', function(data) {\n return _this.permissions.set('content', data.permissions);\n });\n }\n return this.permissions;\n }).property(),\n updateLocale: function(locale) {\n var observer, self, transaction;\n this.setWithSession('locale', locale);\n transaction = this.get('transaction');\n transaction.commit();\n self = this;\n observer = function() {\n if (!self.get('isSaving')) {\n self.removeObserver('isSaving', observer);\n transaction = self.get('store').transaction();\n return transaction.add(self);\n }\n };\n return this.addObserver('isSaving', observer);\n },\n type: (function() {\n return 'user';\n }).property(),\n sync: function() {\n Travis.ajax.post('/users/sync');\n this.setWithSession('isSyncing', true);\n return this.poll();\n },\n poll: function() {\n var _this = this;\n return Travis.ajax.get('/users', function(data) {\n if (data.user.is_syncing) {\n return Ember.run.later(_this, _this.poll.bind(_this), 3000);\n } else {\n _this.set('isSyncing', false);\n return _this.setWithSession('syncedAt', data.user.synced_at);\n }\n });\n },\n setWithSession: function(name, value) {\n var user;\n this.set(name, value);\n user = JSON.parse(typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0);\n user[$.underscore(name)] = this.get(name);\n return typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.setItem('travis.user', JSON.stringify(user)) : void 0;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/user");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Worker = Travis.Model.extend({\n state: DS.attr('string'),\n name: DS.attr('string'),\n host: DS.attr('string'),\n lastSeenAt: DS.attr('string'),\n payload: (function() {\n return this.get('data.payload');\n }).property('data.payload'),\n number: (function() {\n return this.get('name').match(/\\d+$/)[0];\n }).property('name'),\n isWorking: (function() {\n return this.get('state') === 'working';\n }).property('state'),\n repo: (function() {\n return Travis.Repo.find(this.get('payload.repository.id') || this.get('payload.repo.id'));\n }).property('payload.repository.id', 'payload.repo.id'),\n job_id: (function() {\n return this.get('payload.job.id');\n }).property('payload.job.id'),\n job: (function() {\n return Travis.Job.find(this.get('job_id'));\n }).property('job_id'),\n nameForSort: (function() {\n var id, match, name;\n if (name = this.get('name')) {\n match = name.match(/(.*?)-(\\d+)/);\n if (match) {\n name = match[1];\n id = match[2].toString();\n if (id.length < 2) {\n id = \"00\" + id;\n } else if (id.length < 3) {\n id = \"0\" + id;\n }\n return \"\" + name + \"-\" + id;\n }\n }\n }).property('name')\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('pusher', "(function() {(function() {\n\n Travis.Pusher = function(key) {\n if (key) {\n this.init(key);\n }\n return this;\n };\n\n $.extend(Travis.Pusher, {\n CHANNELS: ['common'],\n CHANNEL_PREFIX: ''\n });\n\n $.extend(Travis.Pusher.prototype, {\n active_channels: [],\n init: function(key) {\n var channel, _i, _len, _ref, _results;\n Pusher.warn = this.warn.bind(this);\n this.pusher = new Pusher(key);\n _ref = Travis.Pusher.CHANNELS;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n channel = _ref[_i];\n _results.push(this.subscribe(channel));\n }\n return _results;\n },\n subscribe: function(channel) {\n var _this = this;\n if (this.pusher && this.active_channels.indexOf(channel) === -1) {\n this.active_channels.push(channel);\n return this.pusher.subscribe(this.prefix(channel)).bind_all(function(event, data) {\n return _this.receive(event, data);\n });\n }\n },\n unsubscribe: function(channel) {\n var ix;\n ix = this.active_channels.indexOf(channel);\n if (this.pusher && ix === -1) {\n this.active_channels.splice(ix, 1);\n return this.pusher.unsubscribe(this.prefix(channel));\n }\n },\n prefix: function(channel) {\n return \"\" + Travis.Pusher.CHANNEL_PREFIX + channel;\n },\n receive: function(event, data) {\n if (event.substr(0, 6) === 'pusher') {\n return;\n }\n if (data.id) {\n data = this.normalize(event, data);\n }\n return Ember.run.next(function() {\n return Travis.app.store.receive(event, data);\n });\n },\n normalize: function(event, data) {\n switch (event) {\n case 'build:started':\n case 'build:finished':\n return data;\n case 'job:created':\n case 'job:started':\n case 'job:finished':\n case 'job:log':\n if (data.queue) {\n data.queue = data.queue.replace('builds.', '');\n }\n return {\n job: data\n };\n case 'worker:added':\n case 'worker:updated':\n case 'worker:removed':\n return {\n worker: data\n };\n }\n },\n warn: function(type, warning) {\n if (!this.ignoreWarning(warning)) {\n return console.warn(warning);\n }\n },\n ignoreWarning: function(warning) {\n var message, _ref;\n if (message = (_ref = warning.data) != null ? _ref.message : void 0) {\n return message.indexOf('Existing subscription') === 0 || message.indexOf('No current subscription') === 0;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=pusher");minispade.register('routes', "(function() {(function() {\n var defaultRoute, lineNumberRoute;\nminispade.require('travis/location');\n\n defaultRoute = Ember.Route.extend({\n route: '/',\n index: 1000\n });\n\n lineNumberRoute = Ember.Route.extend({\n route: '#L:number',\n index: 1,\n connectOutlets: function(router) {\n return router.saveLineNumberHash();\n },\n dynamicSegmentPattern: \"([0-9]+)\"\n });\n\n Travis.Router = Ember.Router.extend({\n location: 'travis',\n enableLogging: true,\n initialState: 'loading',\n showRoot: Ember.Route.transitionTo('root.home.show'),\n showStats: Ember.Route.transitionTo('root.stats'),\n showRepo: Ember.Route.transitionTo('root.home.repo.show'),\n showBuilds: Ember.Route.transitionTo('root.home.repo.builds.index'),\n showBuild: Ember.Route.transitionTo('root.home.repo.builds.show'),\n showPullRequests: Ember.Route.transitionTo('root.home.repo.pullRequests'),\n showBranches: Ember.Route.transitionTo('root.home.repo.branches'),\n showEvents: Ember.Route.transitionTo('root.home.repo.events'),\n showJob: Ember.Route.transitionTo('root.home.repo.job'),\n showProfile: Ember.Route.transitionTo('root.profile'),\n showAccount: Ember.Route.transitionTo('root.profile.account'),\n showUserProfile: Ember.Route.transitionTo('root.profile.account.profile'),\n saveLineNumberHash: function(path) {\n return Ember.run.next(this, function() {\n var match;\n path = path || this.get('location').getURL();\n if (match = path.match(/#L\\d+$/)) {\n return this.set('repoController.lineNumberHash', match[0]);\n }\n });\n },\n reload: function() {\n var url;\n url = this.get('location').getURL();\n this.transitionTo('loading');\n return this.route(url);\n },\n signedIn: function() {\n return !!Travis.app.get('auth.user');\n },\n needsAuth: function(path) {\n return path.indexOf('/profile') === 0;\n },\n afterSignOut: function() {\n return this.authorize('/');\n },\n loading: Ember.Route.extend({\n routePath: function(router, path) {\n router.saveLineNumberHash(path);\n router.authorize(path);\n if (!router.signedIn()) {\n return Travis.app.autoSignIn();\n }\n }\n }),\n authorize: function(path) {\n if (!this.signedIn() && this.needsAuth(path)) {\n Travis.app.storeAfterSignInPath(path);\n return this.transitionTo('root.auth');\n } else {\n this.transitionTo('root');\n return this.route(path);\n }\n },\n root: Ember.Route.extend({\n route: '/',\n loading: Ember.State.extend(),\n afterSignIn: (function() {}),\n auth: Ember.Route.extend({\n route: '/auth',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('authLayout');\n $('body').attr('id', 'auth');\n router.get('authLayoutController').connectOutlet('top', 'top');\n return router.get('authLayoutController').connectOutlet('main', 'signin');\n },\n afterSignIn: function(router, path) {\n return router.route(path || '/');\n }\n }),\n stats: Ember.Route.extend({\n route: '/stats',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('statsLayout');\n $('body').attr('id', 'stats');\n router.get('statsLayoutController').connectOutlet('top', 'top');\n return router.get('statsLayoutController').connectOutlet('main', 'stats');\n }\n }),\n profile: Ember.Route.extend({\n initialState: 'index',\n route: '/profile',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('profileLayout');\n $('body').attr('id', 'profile');\n router.get('accountsController').set('content', Travis.Account.find());\n router.get('profileLayoutController').connectOutlet('top', 'top');\n return router.get('profileLayoutController').connectOutlet('left', 'accounts');\n },\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n router.get('profileLayoutController').connectOutlet('main', 'profile');\n return router.get('profileController').activate('hooks');\n }\n }),\n account: Ember.Route.extend({\n initialState: 'index',\n route: '/:login',\n connectOutlets: function(router, account) {\n var params;\n if (account) {\n params = {\n login: account.get('login')\n };\n return router.get('profileController').setParams(params);\n } else {\n return router.send('showProfile');\n }\n },\n deserialize: function(router, params) {\n var account, controller, deferred, observer;\n controller = router.get('accountsController');\n if (!controller.get('content')) {\n controller.set('content', Travis.Account.find());\n }\n account = controller.findByLogin(params.login);\n if (account) {\n return account;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (account = controller.findByLogin(params.login)) {\n controller.removeObserver('content.length', observer);\n return deferred.resolve(account);\n }\n };\n controller.addObserver('content.length', observer);\n return deferred.promise();\n }\n },\n serialize: function(router, account) {\n if (account) {\n return {\n login: account.get('login')\n };\n } else {\n return {};\n }\n },\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('profileController').activate('hooks');\n }\n }),\n profile: Ember.Route.extend({\n route: '/profile',\n connectOutlets: function(router) {\n return router.get('profileController').activate('user');\n }\n })\n })\n }),\n home: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('homeLayout');\n $('body').attr('id', 'home');\n router.get('homeLayoutController').connectOutlet('left', 'repos');\n router.get('homeLayoutController').connectOutlet('right', 'sidebar');\n router.get('homeLayoutController').connectOutlet('top', 'top');\n router.get('homeLayoutController').connectOutlet('main', 'repo');\n router.get('homeLayoutController').connectOutlet('flash', 'flash');\n return router.get('repoController').set('repos', router.get('reposController'));\n },\n show: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('repoController').activate('index');\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n }),\n showWithLineNumber: Ember.Route.extend({\n route: '/#/L:number',\n connectOutlets: function(router) {\n return router.get('repoController').activate('index');\n }\n }),\n repo: Ember.Route.extend({\n route: '/:owner/:name',\n dynamicSegmentPattern: \"([^/#]+)\",\n connectOutlets: function(router, repo) {\n return router.get('repoController').set('repo', repo);\n },\n deserialize: function(router, params) {\n var deferred, observer, repos, slug;\n slug = \"\" + params.owner + \"/\" + params.name;\n repos = Travis.Repo.bySlug(slug);\n deferred = $.Deferred();\n observer = function() {\n if (repos.get('isLoaded')) {\n repos.removeObserver('isLoaded', observer);\n return deferred.resolve(repos.objectAt(0));\n }\n };\n if (repos.length) {\n deferred.resolve(repos[0]);\n } else {\n repos.addObserver('isLoaded', observer);\n }\n return deferred.promise();\n },\n serialize: function(router, repo) {\n if (repo) {\n return {\n owner: repo.get('owner'),\n name: repo.get('name')\n };\n } else {\n return {};\n }\n },\n show: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('repoController').activate('current');\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n }),\n builds: Ember.Route.extend({\n route: '/builds',\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('builds');\n }\n }),\n show: Ember.Route.extend({\n route: '/:build_id',\n connectOutlets: function(router, build) {\n if (!build.get) {\n build = Travis.Build.find(build);\n }\n router.get('repoController').set('build', build);\n return router.get('repoController').activate('build');\n },\n serialize: function(router, build) {\n if (build.get) {\n return {\n build_id: build.get('id')\n };\n } else {\n return {\n build_id: build\n };\n }\n },\n deserialize: function(router, params) {\n var build, deferred, observer;\n build = Travis.Build.find(params.build_id);\n if (build.get('id')) {\n return build;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (build.get('id')) {\n build.removeObserver('id', observer);\n return deferred.resolve(build);\n }\n };\n build.addObserver('id', observer);\n return deferred.promise();\n }\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute,\n dynamicSegmentPattern: \"([^/#]+)\"\n })\n }),\n pullRequests: Ember.Route.extend({\n route: '/pull_requests',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('pull_requests');\n }\n }),\n branches: Ember.Route.extend({\n route: '/branches',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('branches');\n }\n }),\n events: Ember.Route.extend({\n route: '/events',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('events');\n }\n }),\n job: Ember.Route.extend({\n route: '/jobs/:job_id',\n dynamicSegmentPattern: \"([^/#]+)\",\n connectOutlets: function(router, job) {\n if (!job.get) {\n job = Travis.Job.find(job);\n }\n router.get('repoController').set('job', job);\n return router.get('repoController').activate('job');\n },\n serialize: function(router, job) {\n if (job.get) {\n return {\n job_id: job.get('id')\n };\n } else {\n return {\n job_id: job\n };\n }\n },\n deserialize: function(router, params) {\n var deferred, job, observer;\n job = Travis.Job.find(params.job_id);\n if (job.get('id')) {\n return job;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (job.get('id')) {\n job.removeObserver('id', observer);\n return deferred.resolve(job);\n }\n };\n job.addObserver('id', observer);\n return deferred.promise();\n }\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n })\n })\n })\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=routes");minispade.register('slider', "(function() {(function() {\n\n this.Travis.Slider = function() {\n if ((typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.maximized') : void 0) === 'true') {\n this.minimize();\n }\n return this;\n };\n\n $.extend(Travis.Slider.prototype, {\n persist: function() {\n return typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.setItem('travis.maximized', this.isMinimized()) : void 0;\n },\n isMinimized: function() {\n return $('body').hasClass('maximized');\n },\n minimize: function() {\n return $('body').addClass('maximized');\n },\n toggle: function() {\n var element;\n $('body').toggleClass('maximized');\n this.persist();\n element = $('');\n $('#top .profile').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=slider");minispade.register('store', "(function() {(function() {\n var DATA_PROXY,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('store/rest_adapter');\n\n DATA_PROXY = {\n get: function(name) {\n return this.savedData[name];\n }\n };\n\n Travis.Store = DS.Store.extend({\n revision: 4,\n adapter: Travis.RestAdapter.create(),\n load: function(type, id, hash) {\n var record, result;\n result = this._super.apply(this, arguments);\n if (result && result.clientId) {\n record = this.findByClientId(type, result.clientId);\n record.set('incomplete', false);\n record.set('complete', true);\n }\n return result;\n },\n merge: function(type, id, hash) {\n var clientId, data, dataCache, primaryKey, record, recordCache, typeMap;\n if (hash === void 0) {\n hash = id;\n primaryKey = type.proto().primaryKey;\n Ember.assert(\"A data hash was loaded for a record of type \" + type.toString() + \" but no primary key '\" + primaryKey + \"' was provided.\", hash[primaryKey]);\n id = hash[primaryKey];\n }\n typeMap = this.typeMapFor(type);\n dataCache = typeMap.cidToHash;\n clientId = typeMap.idToCid[id];\n recordCache = this.get('recordCache');\n if (clientId !== void 0) {\n if (data = dataCache[clientId]) {\n $.extend(data, hash);\n } else {\n dataCache[clientId] = hash;\n }\n if (record = recordCache[clientId]) {\n record.send('didChangeData');\n }\n } else {\n clientId = this.pushHash(hash, id, type);\n }\n if (clientId) {\n DATA_PROXY.savedData = hash;\n this.updateRecordArrays(type, clientId, DATA_PROXY);\n return {\n id: id,\n clientId: clientId\n };\n }\n },\n receive: function(event, data) {\n var job, mappings, name, type, _ref;\n _ref = event.split(':'), name = _ref[0], type = _ref[1];\n mappings = this.adapter.get('mappings');\n type = mappings[name];\n if (event === 'job:log') {\n if (job = this.find(Travis.Job, data['job']['id'])) {\n return job.appendLog(data['job']['_log']);\n }\n } else if (data[type.singularName()]) {\n return this._loadOne(this, type, data);\n } else if (data[type.pluralName()]) {\n return this._loadMany(this, type, data);\n } else {\n if (!type) {\n throw \"can't load data for \" + name;\n }\n }\n },\n _loadOne: function(store, type, json) {\n var result, root;\n root = type.singularName();\n if (type === Travis.Build && json.repository) {\n result = this.loadIncomplete(Travis.Repo, json.repository);\n }\n return this.loadIncomplete(type, json[root]);\n },\n loadIncomplete: function(type, hash) {\n var record, result;\n result = this.merge(type, hash);\n if (result && result.clientId) {\n record = this.findByClientId(type, result.clientId);\n if (!record.get('complete')) {\n record.set('incomplete', true);\n record.loadedAttributes = Object.keys(hash);\n }\n this._updateAssociations(type, type.singularName(), hash);\n return record;\n }\n },\n _loadMany: function(store, type, json) {\n var root;\n root = type.pluralName();\n this.adapter.sideload(store, type, json, root);\n return this.loadMany(type, json[root]);\n },\n _updateAssociations: function(type, name, data) {\n var _this = this;\n return Em.get(type, 'associationsByName').forEach(function(key, meta) {\n var clientId, dataProxy, id, ids, parent, _ref;\n if (meta.kind === 'belongsTo') {\n id = data[\"\" + key + \"_id\"];\n if (clientId = _this.typeMapFor(meta.type).idToCid[id]) {\n if (parent = _this.findByClientId(meta.type, clientId, id)) {\n dataProxy = parent.get('data');\n if (ids = dataProxy.get(\"\" + name + \"_ids\")) {\n if (_ref = data.id, __indexOf.call(ids, _ref) < 0) {\n ids.pushObject(data.id);\n }\n return parent.send('didChangeData');\n }\n }\n }\n }\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n this.Travis.FixtureAdapter = DS.Adapter.extend({\n find: function(store, type, id) {\n var fixtures;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n if (fixtures.hasLoaded) {\n return;\n }\n return setTimeout((function() {\n store.loadMany(type, fixtures);\n return fixtures.hasLoaded = true;\n }), 300);\n },\n findMany: function() {\n return this.find.apply(this, arguments);\n },\n findAll: function(store, type) {\n var fixtures, ids;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n ids = fixtures.map(function(item, index, self) {\n return item.id;\n });\n return store.loadMany(type, ids, fixtures);\n },\n findQuery: function(store, type, params, array) {\n var fixture, fixtures, hashes, key, matches, value;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n hashes = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n fixture = fixtures[_i];\n matches = (function() {\n var _results1;\n _results1 = [];\n for (key in params) {\n value = params[key];\n _results1.push(key === 'orderBy' || fixture[key] === value);\n }\n return _results1;\n })();\n if (matches.reduce(function(a, b) {\n return a && b;\n })) {\n _results.push(fixture);\n } else {\n _results.push(null);\n }\n }\n return _results;\n })();\n return array.load(hashes.compact());\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('models');\n\n this.Travis.RestAdapter = DS.RESTAdapter.extend({\n mappings: {\n broadcasts: Travis.Broadcast,\n repositories: Travis.Repo,\n repository: Travis.Repo,\n repos: Travis.Repo,\n repo: Travis.Repo,\n builds: Travis.Build,\n build: Travis.Build,\n commits: Travis.Commit,\n commit: Travis.Commit,\n jobs: Travis.Job,\n job: Travis.Job,\n account: Travis.Account,\n accounts: Travis.Account,\n worker: Travis.Worker,\n workers: Travis.Worker\n },\n plurals: {\n repositories: 'repositories',\n repository: 'repositories',\n repo: 'repos',\n repos: 'repos',\n build: 'builds',\n branch: 'branches',\n job: 'jobs',\n worker: 'workers',\n profile: 'profile'\n },\n ajax: function() {\n return Travis.ajax.ajax.apply(this, arguments);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('tailing', "(function() {(function() {\n\n this.Travis.Tailing = function() {\n this.position = $(window).scrollTop();\n $(window).scroll(this.onScroll.bind(this));\n return this;\n };\n\n $.extend(Travis.Tailing.prototype, {\n options: {\n timeout: 200\n },\n run: function() {\n this.autoScroll();\n this.positionButton();\n if (this.active()) {\n return Ember.run.later(this.run.bind(this), this.options.timeout);\n }\n },\n toggle: function(event) {\n if (this.active()) {\n return this.stop();\n } else {\n return this.start();\n }\n },\n active: function() {\n return $('#tail').hasClass('active');\n },\n start: function() {\n $('#tail').addClass('active');\n return this.run();\n },\n stop: function() {\n return $('#tail').removeClass('active');\n },\n autoScroll: function() {\n var log, logBottom, win, winBottom;\n if (!this.active()) {\n return;\n }\n win = $(window);\n log = $('#log');\n logBottom = log.offset().top + log.outerHeight() + 40;\n winBottom = win.scrollTop() + win.height();\n if (logBottom - winBottom > 0) {\n return win.scrollTop(logBottom - win.height());\n }\n },\n onScroll: function() {\n var position;\n this.positionButton();\n position = $(window).scrollTop();\n if (position < this.position) {\n this.stop();\n }\n return this.position = position;\n },\n positionButton: function() {\n var max, offset, tail;\n tail = $('#tail');\n if (tail.length === 0) {\n return;\n }\n offset = $(window).scrollTop() - $('#log').offset().top;\n max = $('#log').height() - $('#tail').height() + 5;\n if (offset > max) {\n offset = max;\n }\n if (offset > 0) {\n return tail.css({\n top: offset - 2\n });\n } else {\n return tail.css({\n top: 0\n });\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=tailing");minispade.register('views', "(function() {(function() {\nminispade.require('ext/ember/namespace');\n\n this.Travis.reopen({\n View: Em.View.extend({\n popup: function(event) {\n this.popupCloseAll();\n return $(\"#\" + event.target.name).toggleClass('display');\n },\n popupClose: function(event) {\n return $(event.target).closest('.popup').removeClass('display');\n },\n popupCloseAll: function() {\n return $('.popup').removeClass('display');\n }\n })\n });\n\n this.Travis.reopen({\n HomeLayoutView: Travis.View.extend({\n templateName: 'layouts/home'\n }),\n AuthLayoutView: Travis.View.extend({\n templateName: 'layouts/simple'\n }),\n ProfileLayoutView: Travis.View.extend({\n templateName: 'layouts/profile'\n }),\n StatsLayoutView: Travis.View.extend({\n templateName: 'layouts/simple'\n })\n });\nminispade.require('views/accounts');\nminispade.require('views/application');\nminispade.require('views/build');\nminispade.require('views/events');\nminispade.require('views/flash');\nminispade.require('views/job');\nminispade.require('views/repo');\nminispade.require('views/profile');\nminispade.require('views/sidebar');\nminispade.require('views/stats');\nminispade.require('views/signin');\nminispade.require('views/top');\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('views/accounts', "(function() {(function() {\n\n this.Travis.reopen({\n AccountsView: Travis.View.extend({\n tabBinding: 'controller.tab',\n templateName: 'profile/accounts',\n classAccounts: (function() {\n if (this.get('tab') === 'accounts') {\n return 'active';\n }\n }).property('tab')\n }),\n AccountsListView: Em.CollectionView.extend({\n elementId: 'accounts',\n accountBinding: 'content',\n tagName: 'ul',\n emptyView: Ember.View.extend({\n template: Ember.Handlebars.compile('
Loading')\n }),\n itemViewClass: Travis.View.extend({\n accountBinding: 'content',\n typeBinding: 'content.type',\n selectedBinding: 'account.selected',\n classNames: ['account'],\n classNameBindings: ['type', 'selected'],\n name: (function() {\n return this.get('content.name') || this.get('content.login');\n }).property('content.login', 'content.name'),\n urlAccount: (function() {\n return Travis.Urls.account(this.get('account.login'));\n }).property('account.login')\n })\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/accounts");minispade.register('views/application', "(function() {(function() {\n\n this.Travis.reopen({\n ApplicationView: Travis.View.extend({\n templateName: 'application',\n classNames: ['application'],\n localeDidChange: (function() {\n var locale;\n if (locale = Travis.app.get('auth.user.locale')) {\n Travis.setLocale(locale);\n return Travis.app.get('router').reload();\n }\n }).observes('Travis.app.auth.user.locale'),\n click: function(event) {\n var targetAndParents;\n targetAndParents = $(event.target).parents().andSelf();\n if (!(targetAndParents.hasClass('open-popup') || targetAndParents.hasClass('popup'))) {\n this.popupCloseAll();\n }\n if (!targetAndParents.hasClass('menu')) {\n return $('.menu').removeClass('display');\n }\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/application");minispade.register('views/build', "(function() {(function() {\n\n this.Travis.reopen({\n BuildsView: Travis.View.extend({\n templateName: 'builds/list',\n buildsBinding: 'controller.builds',\n showMore: function() {\n var id, number;\n id = this.get('controller.repo.id');\n number = this.get('builds.lastObject.number');\n return this.get('builds').load(Travis.Build.olderThanNumber(id, number));\n },\n ShowMoreButton: Em.View.extend({\n tagName: 'button',\n classNameBindings: ['isLoading'],\n attributeBindings: ['disabled'],\n isLoadingBinding: 'controller.builds.isLoading',\n template: Em.Handlebars.compile('{{view.label}}'),\n disabledBinding: 'isLoading',\n label: (function() {\n if (this.get('isLoading')) {\n return 'Loading';\n } else {\n return 'Show more';\n }\n }).property('isLoading'),\n click: function() {\n return this.get('parentView').showMore();\n }\n })\n }),\n BuildsItemView: Travis.View.extend({\n tagName: 'tr',\n classNameBindings: ['color'],\n repoBinding: 'controller.repo',\n buildBinding: 'context',\n commitBinding: 'build.commit',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('build.result'));\n }).property('build.result'),\n urlBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n }).property('repo.slug', 'build.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha')\n }),\n BuildView: Travis.View.extend({\n templateName: 'builds/show',\n elementId: 'build',\n classNameBindings: ['color', 'loading'],\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n commitBinding: 'build.commit',\n currentItemBinding: 'build',\n loading: (function() {\n return !this.get('build.isComplete');\n }).property('build.isComplete'),\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('build.result'));\n }).property('build.result'),\n urlBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n }).property('repo.slug', 'build.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha'),\n urlAuthor: (function() {\n return Travis.Urls.email(this.get('commit.authorEmail'));\n }).property('commit.authorEmail'),\n urlCommitter: (function() {\n return Travis.Urls.email(this.get('commit.committerEmail'));\n }).property('commit.committerEmail')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/build");minispade.register('views/events', "(function() {(function() {\n\n this.Travis.reopen({\n EventsView: Travis.View.extend({\n templateName: 'events/list',\n eventsBinding: 'controller.events'\n }),\n EventsItemView: Travis.View.extend({\n tagName: 'tr'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/events");minispade.register('views/flash', "(function() {(function() {\n\n this.Travis.reopen({\n FlashView: Travis.View.extend({\n elementId: 'flash',\n tagName: 'ul',\n templateName: 'layouts/flash'\n }),\n FlashItemView: Travis.View.extend({\n tagName: 'li',\n classNameBindings: ['type'],\n type: (function() {\n return this.get('flash.type') || 'broadcast';\n }).property('flash.type'),\n close: function(event) {\n return this.get('controller').close(this.get('flash'));\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/flash");minispade.register('views/job', "(function() {(function() {\n\n this.Travis.reopen({\n JobsView: Travis.View.extend({\n templateName: 'jobs/list',\n buildBinding: 'controller.build'\n }),\n JobsItemView: Travis.View.extend({\n tagName: 'tr',\n classNameBindings: ['color'],\n repoBinding: 'context.repo',\n jobBinding: 'context',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('job.result'));\n }).property('job.result'),\n urlJob: (function() {\n return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n }).property('repo.slug', 'job.id')\n }),\n JobView: Travis.View.extend({\n templateName: 'jobs/show',\n repoBinding: 'controller.repo',\n jobBinding: 'controller.job',\n commitBinding: 'job.commit',\n currentItemBinding: 'job',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('job.result'));\n }).property('job.result'),\n urlJob: (function() {\n return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n }).property('repo.slug', 'job.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha'),\n urlAuthor: (function() {\n return Travis.Urls.email(this.get('commit.authorEmail'));\n }).property('commit.authorEmail'),\n urlCommitter: (function() {\n return Travis.Urls.email(this.get('commit.committerEmail'));\n }).property('commit.committerEmail')\n }),\n LogView: Travis.View.extend({\n templateName: 'jobs/log',\n logBinding: 'job.log',\n scrollTo: function(hash) {\n var currentScroll;\n $('#main').scrollTop(0);\n currentScroll = $('.application > div').scrollTop();\n $('.application > div').scrollTop($(hash).offset().top + currentScroll - 40);\n return this.set('controller.lineNumberHash', null);\n },\n lineNumberHashDidChange: (function() {\n return this.tryScrollingToHashLineNumber();\n }).observes('controller.lineNumberHash'),\n tryScrollingToHashLineNumber: function() {\n var checker, hash, self;\n if (hash = this.get('controller.lineNumberHash')) {\n self = this;\n checker = function() {\n if (self.get('isDestroyed')) {\n return;\n }\n if ($(hash).length) {\n return self.scrollTo(hash);\n } else {\n return setTimeout(checker, 100);\n }\n };\n return checker();\n }\n },\n didInsertElement: function() {\n this._super.apply(this, arguments);\n return this.tryScrollingToHashLineNumber();\n },\n click: function(event) {\n var path, target;\n target = $(event.target);\n target.closest('.fold').toggleClass('open');\n if (target.is('.log-line-number')) {\n path = target.attr('href');\n Travis.app.get('router').route(path);\n event.stopPropagation();\n return false;\n }\n },\n toTop: function() {\n return $(window).scrollTop(0);\n },\n jobBinding: 'context',\n toggleTailing: function(event) {\n Travis.app.tailing.toggle();\n return event.preventDefault();\n },\n logSubscriber: (function() {\n var job, state;\n job = this.get('job');\n state = this.get('job.state');\n if (job && state !== 'finished') {\n job.subscribe();\n }\n return null;\n }).property('job', 'job.state')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/job");minispade.register('views/left', "(function() {(function() {\n\n this.Travis.reopen({\n ReposView: Travis.View.extend({\n templateName: 'repos/list',\n tabBinding: 'controller.tab',\n classRecent: (function() {\n if (this.get('tab') === 'recent') {\n return 'active';\n }\n }).property('tab'),\n classOwned: (function() {\n var classes;\n classes = [];\n if (this.get('tab') === 'owned') {\n classes.push('active');\n }\n if (Travis.app.get('currentUser')) {\n classes.push('display');\n }\n return classes.join(' ');\n }).property('tab', 'Travis.currentUser'),\n classSearch: (function() {\n if (this.get('tab') === 'search') {\n return 'active';\n }\n }).property('tab')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/left");minispade.register('views/profile', "(function() {(function() {\n\n this.Travis.reopen({\n ProfileView: Travis.View.extend({\n templateName: 'profile/show',\n accountBinding: 'controller.account',\n name: (function() {\n return this.get('account.name') || this.get('account.login');\n }).property('account.name', 'account.login')\n }),\n ProfileTabsView: Travis.View.extend({\n templateName: 'profile/tabs',\n tabBinding: 'controller.tab',\n activate: function(event) {\n return this.get('controller').activate(event.target.name);\n },\n classHooks: (function() {\n if (this.get('tab') === 'hooks') {\n return 'active';\n }\n }).property('tab'),\n classUser: (function() {\n if (this.get('tab') === 'user') {\n return 'active';\n }\n }).property('tab'),\n accountBinding: 'controller.account',\n displayUser: (function() {\n return this.get('controller.account.login') === this.get('controller.user.login');\n }).property('controller.account.login', 'controller.user.login')\n }),\n HooksView: Travis.View.extend({\n templateName: 'profile/tabs/hooks',\n userBinding: 'controller.user',\n urlGithubAdmin: (function() {\n return Travis.Urls.githubAdmin(this.get('hook.slug'));\n }).property('hook.slug')\n }),\n UserView: Travis.View.extend({\n templateName: 'profile/tabs/user',\n userBinding: 'controller.user',\n gravatarUrl: (function() {\n return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=48&d=mm\";\n }).property('user.gravatarId'),\n locales: (function() {\n return [\n {\n key: null,\n name: ''\n }, {\n key: 'en',\n name: 'English'\n }, {\n key: 'ca',\n name: 'Catalan'\n }, {\n key: 'cs',\n name: 'Čeština'\n }, {\n key: 'es',\n name: 'Español'\n }, {\n key: 'fr',\n name: 'Français'\n }, {\n key: 'ja',\n name: '日本語'\n }, {\n key: 'nl',\n name: 'Nederlands'\n }, {\n key: 'nb',\n name: 'Norsk Bokmål'\n }, {\n key: 'pl',\n name: 'Polski'\n }, {\n key: {\n 'pt-BR': {\n name: 'Português brasileiro'\n }\n }\n }, {\n key: 'ru',\n name: 'Русский'\n }\n ];\n }).property(),\n saveLocale: function(event) {\n return this.get('user').updateLocale($('#locale').val());\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/profile");minispade.register('views/repo', "(function() {(function() {\nminispade.require('views/repo/list');\nminispade.require('views/repo/show');\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo");minispade.register('views/repo/list', "(function() {(function() {\n\n this.Travis.reopen({\n ReposView: Travis.View.extend({\n templateName: 'repos/list',\n toggleInfo: function(event) {\n return $('#repos').toggleClass('open');\n }\n }),\n ReposListView: Em.CollectionView.extend({\n elementId: 'repos',\n tagName: 'ul',\n emptyView: Ember.View.extend({\n template: Ember.Handlebars.compile('Loading')\n }),\n itemViewClass: Travis.View.extend({\n repoBinding: 'content',\n classNames: ['repo'],\n classNameBindings: ['color', 'selected'],\n selectedBinding: 'repo.selected',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('repo.lastBuildResult'));\n }).property('repo.lastBuildResult'),\n urlRepo: (function() {\n return Travis.Urls.repo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlLastBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('repo.lastBuildId'));\n }).property('repo.slug', 'repo.lastBuildId')\n })\n }),\n ReposListTabsView: Travis.View.extend({\n templateName: 'repos/list/tabs',\n tabBinding: 'controller.tab',\n activate: function(event) {\n return this.get('controller').activate(event.target.name);\n },\n classRecent: (function() {\n if (this.get('tab') === 'recent') {\n return 'active';\n }\n }).property('tab'),\n classOwned: (function() {\n var classes;\n classes = [];\n if (this.get('tab') === 'owned') {\n classes.push('active');\n }\n if (Travis.app.get('currentUser')) {\n classes.push('display-inline');\n }\n return classes.join(' ');\n }).property('tab', 'Travis.app.currentUser'),\n classSearch: (function() {\n if (this.get('tab') === 'search') {\n return 'active';\n }\n }).property('tab')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/list");minispade.register('views/repo/show', "(function() {(function() {\n\n this.Travis.reopen({\n RepoView: Travis.View.extend({\n templateName: 'repos/show',\n reposBinding: 'controller.repos',\n repoBinding: 'controller.repo',\n \"class\": (function() {\n if (!this.get('repo.isComplete') && !this.get('isEmpty')) {\n return 'loading';\n }\n }).property('repo.isComplete'),\n isEmpty: (function() {\n return this.get('repos.isLoaded') && this.get('repos.length') === 0;\n }).property('repos.length'),\n urlGithub: (function() {\n return Travis.Urls.githubRepo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlGithubWatchers: (function() {\n return Travis.Urls.githubWatchers(this.get('repo.slug'));\n }).property('repo.slug'),\n urlGithubNetwork: (function() {\n return Travis.Urls.githubNetwork(this.get('repo.slug'));\n }).property('repo.slug')\n }),\n ReposEmptyView: Travis.View.extend({\n template: ''\n }),\n RepoShowTabsView: Travis.View.extend({\n templateName: 'repos/show/tabs',\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n jobBinding: 'controller.job',\n tabBinding: 'controller.tab',\n classCurrent: (function() {\n if (this.get('tab') === 'current') {\n return 'active';\n }\n }).property('tab'),\n classBuilds: (function() {\n if (this.get('tab') === 'builds') {\n return 'active';\n }\n }).property('tab'),\n classPullRequests: (function() {\n if (this.get('tab') === 'pull_requests') {\n return 'active';\n }\n }).property('tab'),\n classBranches: (function() {\n if (this.get('tab') === 'branches') {\n return 'active';\n }\n }).property('tab'),\n classEvents: (function() {\n if (this.get('tab') === 'events') {\n return 'active';\n }\n }).property('tab'),\n classBuild: (function() {\n var classes, tab;\n tab = this.get('tab');\n classes = [];\n if (tab === 'build') {\n classes.push('active');\n }\n if (tab === 'build' || tab === 'job') {\n classes.push('display-inline');\n }\n return classes.join(' ');\n }).property('tab'),\n classJob: (function() {\n if (this.get('tab') === 'job') {\n return 'active display-inline';\n }\n }).property('tab')\n }),\n RepoShowToolsView: Travis.View.extend({\n templateName: 'repos/show/tools',\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n jobBinding: 'controller.job',\n tabBinding: 'controller.tab',\n closeMenu: function() {\n return $('.menu').removeClass('display');\n },\n menu: function(event) {\n var element;\n this.popupCloseAll();\n element = $('#tools .menu').toggleClass('display');\n return event.stopPropagation();\n },\n requeue: function() {\n this.closeMenu();\n return this.get('build').requeue();\n },\n statusImages: function(event) {\n this.set('active', true);\n this.closeMenu();\n this.popup(event);\n return event.stopPropagation();\n },\n canPush: (function() {\n return this.get('isBuildTab') && this.get('build.isFinished') && this.get('hasPushPermissions');\n }).property('build.isFinished', 'hasPushPermissions', 'isBuildTab'),\n isBuildTab: (function() {\n return ['current', 'build', 'job'].indexOf(this.get('tab')) > -1;\n }).property('tab'),\n hasPushPermissions: (function() {\n var permissions;\n if (permissions = Travis.app.get('currentUser.permissions')) {\n return permissions.indexOf(this.get('repo.id')) > -1;\n }\n }).property('Travis.app.currentUser.permissions.length', 'repo.id'),\n branches: (function() {\n if (this.get('active')) {\n return this.get('repo.branches');\n }\n }).property('active', 'repo.branches'),\n urlRepo: (function() {\n return 'https://' + location.host + Travis.Urls.repo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlStatusImage: (function() {\n return Travis.Urls.statusImage(this.get('repo.slug'), this.get('branch.commit.branch'));\n }).property('repo.slug', 'branch'),\n markdownStatusImage: (function() {\n return \"[) + \")](\" + (this.get('urlRepo')) + \")\";\n }).property('urlStatusImage'),\n textileStatusImage: (function() {\n return \"!\" + (this.get('urlStatusImage')) + \"!:\" + (this.get('urlRepo'));\n }).property('urlStatusImage'),\n rdocStatusImage: (function() {\n return \"{}[\" + (this.get('urlRepo')) + \"]\";\n }).property('urlStatusImage')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/show");minispade.register('views/sidebar', "(function() {(function() {\n\n this.Travis.reopen({\n SidebarView: Travis.View.extend({\n templateName: 'layouts/sidebar',\n DecksView: Em.View.extend({\n templateName: \"sponsors/decks\",\n controller: Travis.SponsorsController.create({\n perPage: 1\n }),\n didInsertElement: function() {\n var controller;\n controller = this.get('controller');\n if (!controller.get('content')) {\n Travis.app.get('router.sidebarController').tickables.push(controller);\n controller.set('content', Travis.Sponsor.decks());\n }\n return this._super.apply(this, arguments);\n }\n }),\n LinksView: Em.View.extend({\n templateName: \"sponsors/links\",\n controller: Travis.SponsorsController.create({\n perPage: 6\n }),\n didInsertElement: function() {\n var controller;\n controller = this.get('controller');\n if (!controller.get('content')) {\n controller.set('content', Travis.Sponsor.links());\n Travis.app.get('router.sidebarController').tickables.push(controller);\n }\n return this._super.apply(this, arguments);\n }\n }),\n WorkersView: Em.View.extend({\n templateName: 'workers/list',\n controller: Travis.WorkersController.create(),\n didInsertElement: function() {\n this.set('controller.content', Travis.Worker.find());\n return this._super.apply(this, arguments);\n }\n }),\n QueuesView: Em.View.extend({\n templateName: 'queues/list',\n controller: Em.ArrayController.create(),\n didInsertElement: function() {\n var queue, queues;\n queues = (function() {\n var _i, _len, _ref, _results;\n _ref = Travis.QUEUES;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n queue = _ref[_i];\n _results.push(Em.ArrayController.create({\n content: Travis.Job.queued(queue.name),\n id: \"queue_\" + queue.name,\n name: queue.display\n }));\n }\n return _results;\n })();\n this.set('controller.content', queues);\n return this._super.apply(this, arguments);\n }\n })\n }),\n WorkersView: Travis.View.extend({\n toggleWorkers: function(event) {\n var handle;\n handle = $(event.target).toggleClass('open');\n if (handle.hasClass('open')) {\n return $('#workers li').addClass('open');\n } else {\n return $('#workers li').removeClass('open');\n }\n }\n }),\n WorkersListView: Travis.View.extend({\n toggle: function(event) {\n return $(event.target).closest('li').toggleClass('open');\n }\n }),\n WorkersItemView: Travis.View.extend({\n display: (function() {\n var name, number, payload, repo, state;\n name = (this.get('worker.name') || '').replace('travis-', '');\n state = this.get('worker.state');\n payload = this.get('worker.payload');\n if (state === 'working' && (payload != null ? payload.repository : void 0) && (payload != null ? payload.build : void 0)) {\n repo = payload.repository.slug;\n number = ' #' + payload.build.number;\n return (\"\" + name + \": \" + repo + \" \" + number).htmlSafe();\n } else {\n return \"\" + name + \": \" + state;\n }\n }).property('worker.state')\n }),\n QueueItemView: Travis.View.extend({\n tagName: 'li'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/sidebar");minispade.register('views/signin', "(function() {(function() {\n\n this.Travis.reopen({\n SigninView: Travis.View.extend({\n templateName: 'auth/signin',\n signingIn: (function() {\n return Travis.app.get('authState') === 'signing-in';\n }).property('Travis.app.authState')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/signin");minispade.register('views/stats', "(function() {(function() {\n\n this.Travis.reopen({\n StatsView: Travis.View.extend({\n templateName: 'stats/show',\n didInsertElement: function() {},\n renderChart: function(config) {\n var chart;\n chart = new Highcharts.Chart(config);\n return this.fetch(config.source, function(data) {\n var stats;\n stats = (function() {\n var _i, _len, _ref, _results;\n _ref = data.stats;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n stats = _ref[_i];\n _results.push(config.map(stats));\n }\n return _results;\n })();\n return chart.series[0].setData(stats);\n });\n },\n fetch: function(url, callback) {\n return $.ajax({\n type: 'GET',\n url: url,\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n },\n success: callback\n });\n },\n CHARTS: {\n repos: {\n source: '/api/stats/repos',\n total: 0,\n map: function(data) {\n return [Date.parse(data.date), this.total += parseInt(data.count)];\n },\n chart: {\n renderTo: \"repos_stats\"\n },\n title: {\n text: \"Total Projects/Repositories\"\n },\n xAxis: {\n type: \"datetime\",\n dateTimeLabelFormats: {\n month: \"%e. %b\",\n year: \"%b\"\n }\n },\n yAxis: {\n title: {\n text: \"Count\"\n },\n min: 0\n },\n tooltip: {\n formatter: function() {\n return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" repos\";\n }\n },\n series: [\n {\n name: \"Repository Growth\",\n data: []\n }\n ]\n },\n builds: {\n source: '/api/stats/tests',\n map: function(data) {\n return [Date.parse(data.date), parseInt(data.count)];\n },\n chart: {\n renderTo: \"tests_stats\",\n type: \"column\"\n },\n title: {\n text: \"Build Count\"\n },\n subtitle: {\n text: \"last month\"\n },\n xAxis: {\n type: \"datetime\",\n dateTimeLabelFormats: {\n month: \"%e. %b\",\n year: \"%b\"\n }\n },\n yAxis: {\n title: {\n text: \"Count\"\n },\n min: 0\n },\n tooltip: {\n formatter: function() {\n return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" builds\";\n }\n },\n series: [\n {\n name: \"Total Builds\",\n data: []\n }\n ]\n }\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/stats");minispade.register('views/top', "(function() {(function() {\n\n this.Travis.reopen({\n TopView: Travis.View.extend({\n templateName: 'layouts/top',\n tabBinding: 'controller.tab',\n userBinding: 'controller.user',\n gravatarUrl: (function() {\n return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=24&d=mm\";\n }).property('user.gravatarId'),\n classHome: (function() {\n if (this.get('tab') === 'home') {\n return 'active';\n }\n }).property('tab'),\n classStats: (function() {\n if (this.get('tab') === 'stats') {\n return 'active';\n }\n }).property('tab'),\n classProfile: (function() {\n var classes;\n classes = ['profile'];\n if (this.get('tab') === 'profile') {\n classes.push('active');\n }\n classes.push(Travis.app.get('authState'));\n return classes.join(' ');\n }).property('tab', 'Travis.app.authState'),\n showProfile: function() {\n return $('#top .profile ul').show();\n },\n hideProfile: function() {\n return $('#top .profile ul').hide();\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/top");minispade.register('config/emoij', "(function() {(function() {\n\n this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=config/emoij");minispade.register('data/sponsors', "(function() {(function() {\n\n this.Travis.SPONSORS = [\n {\n type: 'platinum',\n url: \"http://www.wooga.com\",\n image: \"wooga-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://bendyworks.com\",\n image: \"bendyworks-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://cloudcontrol.com\",\n image: \"cloudcontrol-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://xing.de\",\n image: \"xing-205x130.png\"\n }, {\n type: 'gold',\n url: \"http://heroku.com\",\n image: \"heroku-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://soundcloud.com\",\n image: \"soundcloud-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://nedap.com\",\n image: \"nedap-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://mongohq.com\",\n image: \"mongohq-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://zweitag.de\",\n image: \"zweitag-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://kanbanery.com\",\n image: \"kanbanery-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://ticketevolution.com\",\n image: \"ticketevolution-205x60.jpg\"\n }, {\n type: 'gold',\n url: \"http://plan.io/travis\",\n image: \"planio-205x60.png\"\n }, {\n type: 'silver',\n link: \"Cobot: The one tool to run your coworking space\"\n }, {\n type: 'silver',\n link: \"JumpstartLab: We build developers\"\n }, {\n type: 'silver',\n link: \"Evil Martians: Agile Ruby on Rails development\"\n }, {\n type: 'silver',\n link: \"Zendesk: Love your helpdesk\"\n }, {\n type: 'silver',\n link: \"Stripe: Payments for developers\"\n }, {\n type: 'silver',\n link: \"Basho: We make Riak!\"\n }, {\n type: 'silver',\n link: \"Relevance: We deliver software solutions\"\n }, {\n type: 'silver',\n link: \"Mindmatters: Software für Menschen\"\n }, {\n type: 'silver',\n link: \"Amen: The best and worst of everything\"\n }, {\n type: 'silver',\n link: \"Site5: Premium Web Hosting Solutions\"\n }, {\n type: 'silver',\n link: \"Crowd Interactive: Leading Rails consultancy in Mexico\"\n }, {\n type: 'silver',\n link: \"Atomic Object: Work with really smart people\"\n }, {\n type: 'silver',\n link: \"Codeminer: smart services for your startup\"\n }, {\n type: 'silver',\n link: \"Cloudant: grow into your data layer, not out of it\"\n }, {\n type: 'silver',\n link: \"Gidsy: Explore, organize & book unique things to do!\"\n }, {\n type: 'silver',\n link: \"5apps: Package & deploy HTML5 apps automatically\"\n }, {\n type: 'silver',\n link: \"Meltmedia: We are Interactive Superheroes\"\n }, {\n type: 'silver',\n link: \"Fingertips offers design and development services\"\n }, {\n type: 'silver',\n link: \"Engine Yard: Build epic apps, let us handle the rest\"\n }, {\n type: 'silver',\n link: \"Malwarebytes: Defeat Malware once and for all.\"\n }, {\n type: 'silver',\n link: \"Readmill: The best reading app on the iPad.\"\n }, {\n type: 'silver',\n link: \"Medidata: clinical tech improving quality of life\"\n }, {\n type: 'silver',\n link: \"ESM: Japan's best agile Ruby/Rails consultancy\"\n }, {\n type: 'silver',\n link: \"Twitter: instantly connects people everywhere\"\n }, {\n type: 'silver',\n link: \"AGiLE ANiMAL: we <3 Travis CI.\"\n }, {\n type: 'silver',\n link: \"Tupalo: Discover, review & share local businesses.\"\n }\n ];\n\n this.Travis.WORKERS = {\n \"jvm-otp1.worker.travis-ci.org\": {\n name: \"Travis Pro\",\n url: \"http://travis-ci.com\"\n },\n \"jvm-otp2.worker.travis-ci.org\": {\n name: \"Transloadit\",\n url: \"http://transloadit.com\"\n },\n \"ppp1.worker.travis-ci.org\": {\n name: \"Travis Pro\",\n url: \"http://beta.travis-ci.com\"\n },\n \"ppp2.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ppp3.worker.travis-ci.org\": {\n name: \"Alchemy CMS\",\n url: \"http://alchemy-cms.com/\"\n },\n \"rails1.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ruby1.worker.travis-ci.org\": {\n name: \"Engine Yard\",\n url: \"http://www.engineyard.com\"\n },\n \"ruby2.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ruby3.worker.travis-ci.org\": {\n name: \"Railslove\",\n url: \"http://railslove.de\"\n },\n \"ruby4.worker.travis-ci.org\": {\n name: \"Engine Yard\",\n url: \"http://www.engineyard.com\"\n },\n \"spree.worker.travis-ci.org\": {\n name: \"Spree\",\n url: \"http://spreecommerce.com\"\n },\n \"staging.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=data/sponsors");minispade.register('ext/jquery', "(function() {(function() {\n\n $.fn.extend({\n outerHtml: function() {\n return $(this).wrap('').parent().html();\n },\n outerElement: function() {\n return $($(this).outerHtml()).empty();\n },\n flash: function() {\n return Utils.flash(this);\n },\n unflash: function() {\n return Utils.unflash(this);\n },\n filterLog: function() {\n this.deansi();\n return this.foldLog();\n },\n deansi: function() {\n return this.html(Utils.deansi(this.html()));\n },\n foldLog: function() {\n return this.html(Utils.foldLog(this.html()));\n },\n unfoldLog: function() {\n return this.html(Utils.unfoldLog(this.html()));\n },\n updateTimes: function() {\n return Utils.updateTimes(this);\n },\n activateTab: function(tab) {\n return Utils.activateTab(this, tab);\n },\n timeInWords: function() {\n return $(this).each(function() {\n return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n });\n },\n updateGithubStats: function(repo) {\n return Utils.updateGithubStats(repo, $(this));\n }\n });\n\n $.extend({\n isEmpty: function(obj) {\n if ($.isArray(obj)) {\n return !obj.length;\n } else if ($.isObject(obj)) {\n return !$.keys(obj).length;\n } else {\n return !obj;\n }\n },\n isObject: function(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n },\n keys: function(obj) {\n var keys;\n keys = [];\n $.each(obj, function(key) {\n return keys.push(key);\n });\n return keys;\n },\n values: function(obj) {\n var values;\n values = [];\n $.each(obj, function(key, value) {\n return values.push(value);\n });\n return values;\n },\n underscore: function(string) {\n return string[0].toLowerCase() + string.substring(1).replace(/([A-Z])?/g, function(match, chr) {\n if (chr) {\n return \"_\" + (chr.toUpperCase());\n } else {\n return '';\n }\n });\n },\n camelize: function(string, uppercase) {\n string = uppercase === false ? $.underscore(string) : $.capitalize(string);\n return string.replace(/_(.)?/g, function(match, chr) {\n if (chr) {\n return chr.toUpperCase();\n } else {\n return '';\n }\n });\n },\n capitalize: function(string) {\n return string[0].toUpperCase() + string.substring(1);\n },\n compact: function(object) {\n return $.grep(object, function(value) {\n return !!value;\n });\n },\n all: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return false;\n }\n i++;\n }\n return true;\n },\n detect: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return array[i];\n }\n i++;\n }\n },\n select: function(array, callback) {\n var args, i, result;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n result = [];\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n result.push(array[i]);\n }\n i++;\n }\n return result;\n },\n slice: function(object, key) {\n var keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) > -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n only: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) !== -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n except: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) === -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n intersect: function(array, other) {\n return array.filter(function(element) {\n return other.indexOf(element) !== -1;\n });\n },\n map: function(elems, callback, arg) {\n var i, isArray, key, length, ret, value;\n value = void 0;\n key = void 0;\n ret = [];\n i = 0;\n length = elems.length;\n isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n if (isArray) {\n while (i < length) {\n value = callback(elems[i], i, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n i++;\n }\n } else {\n for (key in elems) {\n value = callback(elems[key], key, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n }\n }\n return ret.concat.apply([], ret);\n },\n shuffle: function(array) {\n var current, tmp, top;\n array = array.slice();\n top = array.length;\n while (top && --top) {\n current = Math.floor(Math.random() * (top + 1));\n tmp = array[current];\n array[current] = array[top];\n array[top] = tmp;\n }\n return array;\n },\n truncate: function(string, length) {\n if (string.length > length) {\n return string.trim().substring(0, length) + '...';\n } else {\n return string;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('travis/ajax', "(function() {(function() {\n\n jQuery.support.cors = true;\n\n this.Travis.ajax = Em.Object.create({\n DEFAULT_OPTIONS: {\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n },\n get: function(url, callback) {\n return this.ajax(url, 'get', {\n success: callback\n });\n },\n post: function(url, data, callback) {\n return this.ajax(url, 'post', {\n data: data,\n success: callback\n });\n },\n ajax: function(url, method, options) {\n var endpoint, success, token, _base,\n _this = this;\n endpoint = Travis.config.api_endpoint || '';\n options = options || {};\n if (token = sessionStorage.getItem('travis.token')) {\n options.headers || (options.headers = {});\n (_base = options.headers)['Authorization'] || (_base['Authorization'] = \"token \" + token);\n }\n options.url = \"\" + endpoint + url;\n options.type = method;\n options.dataType = 'json';\n options.contentType = 'application/json; charset=utf-8';\n options.context = this;\n if (options.data && method !== 'GET' && method !== 'get') {\n options.data = JSON.stringify(options.data);\n }\n success = options.success || (function() {});\n options.success = function(data) {\n var _ref;\n if (((_ref = Travis.app) != null ? _ref.router : void 0) && data.flash) {\n Travis.app.router.flashController.loadFlashes(data.flash);\n }\n delete data.flash;\n return success.call(_this, data);\n };\n options.error = function(data) {\n if (data.flash) {\n return Travis.app.router.flashController.pushObject(data.flash);\n }\n };\n return $.ajax($.extend(options, Travis.ajax.DEFAULT_OPTIONS));\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ajax");minispade.register('travis/expandable_record_array', "(function() {(function() {\n\n Travis.ExpandableRecordArray = DS.RecordArray.extend({\n isLoaded: false,\n isLoading: false,\n load: function(array) {\n var observer, self;\n this.set('isLoading', true);\n self = this;\n observer = function() {\n var content;\n if (this.get('isLoaded')) {\n content = self.get('content');\n array.removeObserver('isLoaded', observer);\n array.forEach(function(record) {\n return self.pushObject(record);\n });\n self.set('isLoading', false);\n return self.set('isLoaded', true);\n }\n };\n return array.addObserver('isLoaded', observer);\n },\n pushObject: function(record) {\n var clientId, id, ids;\n ids = this.get('content');\n id = record.get('id');\n clientId = record.get('clientId');\n if (ids.contains(clientId)) {\n return;\n }\n return ids.pushObject(clientId);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/expandable_record_array");minispade.register('travis/limited_array', "(function() {(function() {\n\n Travis.LimitedArray = Em.ArrayProxy.extend({\n limit: 10,\n init: function() {\n return this._super.apply(this, arguments);\n },\n arrangedContent: (function() {\n var content;\n if (content = this.get('content')) {\n return content.slice(0, this.get('limit'));\n }\n }).property('content'),\n contentArrayDidChange: function(array, index, removedCount, addedCount) {\n var addedObjects, arrangedContent, length, limit, object, _i, _len;\n this._super.apply(this, arguments);\n if (addedCount > 0) {\n addedObjects = array.slice(index, index + addedCount);\n arrangedContent = this.get('arrangedContent');\n for (_i = 0, _len = addedObjects.length; _i < _len; _i++) {\n object = addedObjects[_i];\n arrangedContent.unshiftObject(object);\n }\n limit = this.get('limit');\n length = arrangedContent.get('length');\n if (length > limit) {\n return arrangedContent.replace(limit, length - limit);\n }\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/limited_array");minispade.register('travis/location', "(function() {(function() {\n\n Travis.Location = Ember.HistoryLocation.extend({\n onUpdateURL: function(callback) {\n var guid;\n guid = Ember.guidFor(this);\n return Ember.$(window).bind('popstate.ember-location-' + guid, function(e) {\n return callback(location.pathname + location.hash);\n });\n },\n getURL: function() {\n var location;\n location = this.get('location');\n return location.pathname + location.hash;\n }\n });\n\n Ember.Location.implementations['travis'] = Travis.Location;\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/location");minispade.register('travis/log', "(function() {(function() {\n\n this.Travis.Log = {\n FOLDS: {\n schema: /(
\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*? -- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n .*<\\/p>)/g,\n migrate: /( \\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n bundle: /( \\$ bundle install.*<\\/p>\\n( (Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n| <\\/p>\\n)*)/g,\n exec: /( [\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n },\n filter: function(log, path) {\n log = this.escape(log);\n log = this.deansi(log);\n log = log.replace(/\\r/g, '');\n log = this.number(log, path);\n log = this.fold(log);\n log = log.replace(/\\n/g, '');\n return log;\n },\n stripPaths: function(log) {\n return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n },\n escape: function(log) {\n return Handlebars.Utils.escapeExpression(log);\n },\n escapeRuby: function(log) {\n return log.replace(/#<(\\w+.*?)>/, '#<$1>');\n },\n number: function(log, path) {\n var result;\n path = \"\" + path + \"/\";\n result = '';\n $.each(log.trim().split('\\n'), function(ix, line) {\n var number, pathWithNumber;\n number = ix + 1;\n pathWithNumber = \"\" + path + \"#L\" + number;\n return result += ' %@%@
\\n'.fmt(pathWithNumber, number, number, number, line);\n });\n return result.trim();\n },\n deansi: function(log) {\n var ansi, text;\n log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/gm, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, \"\");\n ansi = ansiparse(log);\n text = '';\n ansi.forEach(function(part) {\n var classes;\n classes = [];\n part.foreground && classes.push(part.foreground);\n part.background && classes.push('bg-' + part.background);\n part.bold && classes.push('bold');\n part.italic && classes.push('italic');\n return text += (classes.length ? '' + part.text + '' : part.text);\n });\n return text.replace(/\\033/g, '');\n },\n fold: function(log) {\n log = this.unfold(log);\n $.each(Travis.Log.FOLDS, function(name, pattern) {\n return log = log.replace(pattern, function() {\n return '' + arguments[1].trim() + '';\n });\n });\n return log;\n },\n unfold: function(log) {\n return log.replace(/([\\s\\S]*?)<\\/div>/g, '$1\\n');\n },\n location: function() {\n return window.location.hash;\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n this.Travis.Model = DS.Model.extend({\n primaryKey: 'id',\n id: DS.attr('number'),\n init: function() {\n this.loadedAttributes = [];\n return this._super.apply(this, arguments);\n },\n get: function(name) {\n if (this.constructor.isAttribute(name) && this.get('incomplete') && !this.isAttributeLoaded(name)) {\n this.loadTheRest();\n }\n return this._super.apply(this, arguments);\n },\n refresh: function() {\n var id, store;\n if (id = this.get('id')) {\n store = this.get('store');\n return store.adapter.find(store, this.constructor, id);\n }\n },\n update: function(attrs) {\n var _this = this;\n $.each(attrs, function(key, value) {\n if (key !== 'id') {\n return _this.set(key, value);\n }\n });\n return this;\n },\n isAttributeLoaded: function(name) {\n return this.loadedAttributes.contains(name);\n },\n isComplete: (function() {\n if (this.get('incomplete')) {\n this.loadTheRest();\n return false;\n } else {\n this.set('isCompleting', false);\n return this.get('isLoaded');\n }\n }).property('incomplete', 'isLoaded'),\n loadTheRest: function() {\n if (this.get('isCompleting')) {\n return;\n }\n this.set('isCompleting', true);\n return this.refresh();\n },\n select: function() {\n return this.constructor.select(this.get('id'));\n }\n });\n\n this.Travis.Model.reopenClass({\n find: function() {\n if (arguments.length === 0) {\n return Travis.app.store.findAll(this);\n } else {\n return this._super.apply(this, arguments);\n }\n },\n filter: function(callback) {\n return Travis.app.store.filter(this, callback);\n },\n load: function(attrs) {\n return Travis.app.store.load(this, attrs);\n },\n select: function(id) {\n return this.find().forEach(function(record) {\n return record.set('selected', record.get('id') === id);\n });\n },\n buildURL: function(suffix) {\n var base, url;\n base = this.url || this.pluralName();\n Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n url = [base];\n if (suffix !== void 0) {\n url.push(suffix);\n }\n return url.join('/');\n },\n singularName: function() {\n var name, parts;\n parts = this.toString().split('.');\n name = parts[parts.length - 1];\n return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n },\n pluralName: function() {\n return Travis.app.store.adapter.pluralize(this.singularName());\n },\n isAttribute: function(name) {\n if (!this.attributesSaved) {\n this._saveAttributes();\n }\n return this.cachedAttributes.contains(name);\n },\n _saveAttributes: function() {\n var cachedAttributes;\n this.attributesSaved = true;\n cachedAttributes = [];\n this.eachComputedProperty(function(name, meta) {\n if (meta.isAttribute) {\n return cachedAttributes.pushObject(name);\n }\n });\n return this.cachedAttributes = cachedAttributes;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n this.Travis.Ticker = Ember.Object.extend({\n init: function() {\n if (this.get('interval') !== -1) {\n return this.schedule();\n }\n },\n tick: function() {\n var context, target, targets, _i, _len;\n context = this.get('context');\n targets = this.get('targets') || [this.get('target')];\n for (_i = 0, _len = targets.length; _i < _len; _i++) {\n target = targets[_i];\n if (context) {\n target = context.get(target);\n }\n if (target) {\n target.tick();\n }\n }\n return this.schedule();\n },\n schedule: function() {\n var _this = this;\n return Ember.run.later((function() {\n return _this.tick();\n }), this.get('interval') || Travis.app.TICK_INTERVAL);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('travis', "(function() {(function() {\nminispade.require('ext/jquery');\nminispade.require('ext/ember/namespace');\n\n this.Travis = Em.Namespace.create({\n config: {\n api_endpoint: $('meta[rel=\"travis.api_endpoint\"]').attr('href'),\n pusher_key: $('meta[name=\"travis.pusher_key\"]').attr('value')\n },\n CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'jdk', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'],\n ROUTES: {\n 'profile/:login/me': ['profile', 'user'],\n 'profile/:login': ['profile', 'hooks'],\n 'profile': ['profile', 'hooks'],\n 'stats': ['stats', 'show'],\n ':owner/:name/jobs/:id/:line': ['home', 'job'],\n ':owner/:name/jobs/:id': ['home', 'job'],\n ':owner/:name/builds/:id': ['home', 'build'],\n ':owner/:name/builds': ['home', 'builds'],\n ':owner/:name/pull_requests': ['home', 'pullRequests'],\n ':owner/:name/branches': ['home', 'branches'],\n ':owner/:name': ['home', 'current'],\n '': ['home', 'index'],\n '#': ['home', 'index']\n },\n QUEUES: [\n {\n name: 'common',\n display: 'Common'\n }, {\n name: 'php',\n display: 'PHP, Perl and Python'\n }, {\n name: 'node_js',\n display: 'Node.js'\n }, {\n name: 'jvmotp',\n display: 'JVM and Erlang'\n }, {\n name: 'rails',\n display: 'Rails'\n }, {\n name: 'spree',\n display: 'Spree'\n }\n ],\n INTERVALS: {\n sponsors: -1,\n times: -1,\n updateTimes: 1000\n },\n setLocale: function(locale) {\n if (!locale) {\n return;\n }\n I18n.locale = locale;\n return localStorage.setItem('travis.locale', locale);\n },\n run: function(attrs) {\n if (location.hash.slice(0, 2) === '#!') {\n location.href = location.href.replace('#!/', '');\n }\n this.setLocale(localStorage.getItem('travis.locale'));\n return Ember.run.next(this, function() {\n var app,\n _this = this;\n app = Travis.App.create(attrs || {});\n $.each(Travis, function(key, value) {\n if (value && value.isClass && key !== 'constructor') {\n return app[key] = value;\n }\n });\n this.app = app;\n this.store = app.store;\n return $(function() {\n return app.initialize();\n });\n });\n }\n });\nminispade.require('travis/ajax');\nminispade.require('app');\n\n}).call(this);\n\n})();\n//@ sourceURL=travis");minispade.register('templates', "(function() {\nEmber.TEMPLATES['application'] = Ember.Handlebars.compile(\"{{outlet}}\\n\");\n\nEmber.TEMPLATES['auth/signin'] = Ember.Handlebars.compile(\"{{#if view.signingIn}}\\nSigning in ...
\\n\\n Trying to authenticate with GitHub.\\n
\\n{{else}}\\nSign in
\\n\\n Please sign in with GitHub.\\n
\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/list'] = Ember.Handlebars.compile(\"{{#if builds.isLoaded}}\\n\\n \\n
\\n\\n \\n \\n\\n \\n {{#each build in builds}}\\n {{#view Travis.BuildsItemView contextBinding=\\\"build\\\"}}\\n{{t builds.name}} \\n{{t builds.commit}} \\n{{t builds.message}} \\n{{t builds.duration}} \\n{{t builds.finished_at}} \\n\\n \\n {{#if id}}\\n \\n {{number}}\\n \\n {{/if}}\\n \\n\\n \\n {{formatCommit commit}}\\n \\n \\n \\n\\n {{formatDuration duration}}\\n \\n\\n {{formatTime finishedAt}}\\n \\n {{/view}}\\n {{/each}}\\n \\n\\n {{view view.ShowMoreButton}}\\n
\\n{{else}}\\nLoading\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n {{#if loading}}\\n Loading\\n {{else}}\\n\\n
\\n\\n {{#if build.isMatrix}}\\n {{view Travis.JobsView jobsBinding=\\\"build.requiredJobs\\\" required=\\\"true\\\"}}\\n {{view Travis.JobsView jobsBinding=\\\"build.allowedFailureJobs\\\"}}\\n {{else}}\\n {{view Travis.LogView contextBinding=\\\"build.jobs.firstObject\\\"}}\\n {{/if}}\\n {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['events/list'] = Ember.Handlebars.compile(\"{{#if view.events.isLoaded}}\\n\\n\\n\\n- {{t builds.name}}
\\n- \\n \\n {{#if build.id}}\\n {{build.number}}\\n {{/if}}\\n
\\n- {{t builds.finished_at}}
\\n- {{formatTime build.finishedAt}}
\\n- {{t builds.duration}}
\\n- {{formatDuration build.duration}}
\\n\\n\\n\\n- {{t builds.commit}}
\\n- {{formatCommit build.commit}}
\\n {{#if commit.compareUrl}}\\n- {{t builds.compare}}
\\n- {{pathFrom build.commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n- {{t builds.author}}
\\n \\n {{/if}}\\n {{#if commit.committerName}}\\n- {{t builds.committer}}
\\n- {{build.commit.committerName}}
\\n {{/if}}\\n- {{t builds.message}}
\\n \\n\\n {{#unless isMatrix}}\\n- {{t builds.config}}
\\n- {{formatConfig build.config}}
\\n {{/unless}}\\n\\n \\n
\\n{{else}}\\n\\n \\n \\n\\n \\n {{#each event in view.events}}\\n {{#view Travis.EventsItemView contextBinding=\\\"event\\\"}}\\nTime \\nEvent \\nResult \\nMessage \\n\\n {{formatTime createdAt}}\\n \\n\\n {{event.event_}}\\n \\n\\n {{event.result}}\\n \\n \\n {{/view}}\\n {{/each}}\\n \\nLoading\\n{{/if}}\\n\\n\");\n\nEmber.TEMPLATES['jobs/list'] = Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n {{#if view.required}}\\n\\n
\\n {{t jobs.build_matrix}}\\n \\n {{else}}\\n\\n
\\n\\n {{#unless view.required}}\\n\\n {{t jobs.allowed_failures}}\\n \\n \\n {{/if}}\\n \\n\\n {{#each key in view.build.configKeys}}\\n \\n \\n \\n {{#each job in view.jobs}}\\n {{#view Travis.JobsItemView contextBinding=\\\"job\\\"}}\\n{{key}} \\n {{/each}}\\n\\n \\n {{#if job.id}}\\n {{number}}\\n {{/if}}\\n \\n\\n {{formatDuration duration}}\\n \\n\\n {{formatTime finishedAt}}\\n \\n {{#each value in configValues}}\\n{{value}} \\n {{/each}}\\n {{/view}}\\n {{/each}}\\n \\n\\n \\n\\n {{/unless}}\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/log'] = Ember.Handlebars.compile(\"{{view.logSubscriber}}\\n\\n{{#if log.isLoaded}}\\n{{t \\\"jobs.allowed_failures\\\"}}
\\n\\n Allowed Failures are items in your build matrix that are allowed to\\n fail without causing the entire build to be shown as failed.\\n
\\n\\n You can define allowed failures in the build matrix as follows:\\n
\\nmatrix:\\n allow_failures:\\n - rvm: ruby-head\\n\\n This lets you add in experimental and preparatory builds to test against versions or\\n configurations that you are not ready to officially support.\\n
\\n\\n \\n \\n {{{formatLog log.body repo=\\\"repository\\\" item=\\\"parentView.currentItem\\\"}}}\\n\\n {{#if sponsor.name}}\\n\\n {{t builds.messages.sponsored_by}}\\n {{sponsor.name}}\\n
\\n {{/if}}\\n\\n To top\\n{{else}}\\n\\n Loading\\n\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n {{#if job.isComplete}}\\n\\n\\n {{else}}\\n\\n
\\n\\n {{view Travis.LogView contextBinding=\\\"job\\\"}}}\\n\\n\\n\\n- Job
\\n- \\n \\n {{#if job.id}}\\n {{job.number}}\\n {{/if}}\\n
\\n- {{t jobs.finished_at}}
\\n- {{formatTime job.finishedAt}}
\\n- {{t jobs.duration}}
\\n- {{formatDuration job.duration}}
\\n\\n\\n\\n- {{t jobs.commit}}
\\n- {{formatCommit commit}}
\\n {{#if commit.compareUrl}}\\n- {{t jobs.compare}}
\\n- {{pathFrom commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n- {{t jobs.author}}
\\n \\n {{/if}}\\n {{#if commit.committerName}}\\n- {{t jobs.committer}}
\\n- {{commit.committerName}}
\\n {{/if}}\\n- {{t jobs.message}}
\\n \\n- {{t jobs.config}}
\\n- {{formatConfig job.config}}
\\n\\n Loading\\n\\n {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['layouts/flash'] = Ember.Handlebars.compile(\"{{#each flash in controller}}\\n {{#view Travis.FlashItemView flashBinding=\\\"flash\\\"}}\\n{{{flash.message}}}
\\n \\n {{/view}}\\n{{/each}}\\n\");\n\nEmber.TEMPLATES['layouts/home'] = Ember.Handlebars.compile(\"\\n {{outlet top}}\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/profile'] = Ember.Handlebars.compile(\"\\n {{outlet left}}\\n\\n\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\n\\n\\n {{outlet right}}\\n\\n\\n {{outlet top}}\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/sidebar'] = Ember.Handlebars.compile(\"\\n\\n\\n {{outlet left}}\\n\\n\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\n\\n\\n \\n\\n\\n\\n \\n\\n\\n\\n\\nGetting started?
\\n\\n Please read our guide.\\n It will only take a few minutes :)\\n
\\n\\n You can find detailled docs on our about site.\\n
\\n\\n If you need help please don’t hesitate to join\\n #travis on irc.freenode.net\\n or our mailinglist.\\n
\\n\\n \\n\\n\\n{{view view.DecksView}}\\n{{view view.WorkersView}}\\n{{view view.QueuesView}}\\n{{view view.LinksView}}\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/simple'] = Ember.Handlebars.compile(\"{{t layouts.about.join}}
\\n\\n
\\n- {{t layouts.about.repository}}: Github
\\n- {{t layouts.about.twitter}}: @travisci
\\n- {{t layouts.about.mailing_list}}: travis-ci
\\n- irc.freenode.net#travis
\\n\\n {{outlet top}}\\n\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/top'] = Ember.Handlebars.compile(\"\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\nTravis
\\n\\n\\n \\n\");\n\nEmber.TEMPLATES['profile/accounts'] = Ember.Handlebars.compile(\"\\n\\n\\n\\n
\\n\\n- \\n
\\nAccounts
\\n\\n {{#collection Travis.AccountsListView contentBinding=\\\"controller\\\"}}\\n {{view.name}}\\n\\n\");\n\nEmber.TEMPLATES['profile/show'] = Ember.Handlebars.compile(\"\\n Repositories:\\n {{view.account.reposCount}}\\n
\\n\\n {{/collection}}\\n{{view.name}}
\\n\\n{{view Travis.ProfileTabsView}}\\n\\n\\n {{outlet pane}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs'] = Ember.Handlebars.compile(\"\\n
\\n\");\n\nEmber.TEMPLATES['profile/tabs/hooks'] = Ember.Handlebars.compile(\"- \\n
\\n {{#if view.displayUser}}\\n\\n Repositories\\n
\\n- \\n
\\n {{/if}}\\n\\n Profile\\n
\\n\\n {{{t profiles.show.message.your_repos}}}\\n
\\n\\n{{#if hooks.isLoaded}}\\n {{#if user.isSyncing}}\\n \\n {{else}}\\n \\n\\n\\n {{#each hook in hooks}}\\n
\\n {{/if}}\\n{{else}}\\n \\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs/user'] = Ember.Handlebars.compile(\"- \\n {{hook.slug}}\\n
\\n {{else}}\\n{{hook.description}}
\\n\\n \\n- \\n You do not seem to have any repositories that we could sync.\\n
\\n {{/each}}\\n\\n\\n
\\n
\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['queues/list'] = Ember.Handlebars.compile(\"- \\n {{t profiles.show.github}}:\\n
\\n- \\n {{user.login}}\\n
\\n- \\n {{t profiles.show.email}}:\\n
\\n- \\n {{user.email}}\\n
\\n- \\n {{t profiles.show.token}}:\\n
\\n- \\n {{user.token}}\\n
\\n\\n{{#each queue in controller}}\\n
\\n\");\n\nEmber.TEMPLATES['repos/list'] = Ember.Handlebars.compile(\"- \\n
\\n{{/each}}\\n{{t queue}}: {{queue.name}}
\\n\\n {{#each job in queue}}\\n {{#view Travis.QueueItemView jobBinding=\\\"job\\\"}}\\n \\n \\n {{job.repo.slug}}\\n \\n #{{job.number}}\\n \\n {{/view}}\\n {{else}}\\n {{t no_job}}\\n {{/each}}\\n
\\n\\n {{view Ember.TextField valueBinding=\\\"controller.search\\\"}}\\n\\n\\n{{view Travis.ReposListTabsView}}\\n\\n\\n\\n\\n {{#collection Travis.ReposListView contentBinding=\\\"controller\\\"}}\\n {{#with view.repo}}\\n\\n\");\n\nEmber.TEMPLATES['repos/list/tabs'] = Ember.Handlebars.compile(\"\\n \\n {{#if slug}}\\n {{slug}}\\n {{/if}}\\n\\n {{#if lastBuildId}}\\n {{lastBuildNumber}}\\n {{/if}}\\n\\n\\n {{t repositories.duration}}:\\n {{formatDuration lastBuildDuration}},\\n {{t repositories.finished_at}}:\\n {{formatTime lastBuildFinishedAt}}\\n
\\n\\n\\n\\n {{#if description}}\\n\\n\\n {{/if}}\\n {{/with}}\\n {{else}}\\n \\n {{/collection}}\\n{{description}}
\\n\\n
\\n\\n\");\n\nEmber.TEMPLATES['repos/show'] = Ember.Handlebars.compile(\"- \\n
\\n{{t layouts.application.recent}}
\\n- \\n
\\n{{t layouts.application.my_repositories}}
\\n- \\n
\\n{{t layouts.application.search}}
\\n\\n {{#if view.isEmpty}}\\n {{view Travis.ReposEmptyView}}\\n {{else}}\\n {{#if view.repo.isComplete}}\\n {{#with view.repo}}\\n\\n\\n\");\n\nEmber.TEMPLATES['repos/show/tabs'] = Ember.Handlebars.compile(\"\\n {{slug}}\\n
\\n\\n{{description}}
\\n\\n\\n
\\n\\n {{view Travis.RepoShowTabsView}}\\n {{view Travis.RepoShowToolsView}}\\n {{/with}}\\n\\n {{else}}\\n Loading\\n {{/if}}\\n\\n- \\n {{lastBuildLanguage}}\\n
\\n- \\n \\n {{stats.watchers}}\\n \\n
\\n- \\n \\n {{stats.forks}}\\n \\n
\\n\\n {{outlet pane}}\\n\\n {{/if}}\\n\\n
\\n\");\n\nEmber.TEMPLATES['repos/show/tools'] = Ember.Handlebars.compile(\"\\n\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.current}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.build_history}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.pull_requests}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.branches}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n Events\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.build.id}}\\n \\n {{t repositories.tabs.build}} #{{view.build.number}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.job.id}}\\n \\n {{t repositories.tabs.job}} #{{view.job.number}}\\n \\n {{/if}}\\n
\\n\\n \\n\\n\");\n\nEmber.TEMPLATES['sponsors/decks'] = Ember.Handlebars.compile(\"\\n \\n {{#if view.branches.isLoaded}}\\n {{view Ember.Select contentBinding=\\\"view.branches\\\" selectionBinding=\\\"view.branch\\\" optionLabelPath=\\\"content.commit.branch\\\" optionValuePath=\\\"content.commit.branch\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n{{t layouts.application.sponsers}}
\\n\\n\\n {{#each deck in controller}}\\n {{#each deck}}\\n
\\n\\n- \\n \\n
\\n {{/each}}\\n {{/each}}\\n\\n \\n
\\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n
\\n\");\n\nEmber.TEMPLATES['sponsors/links'] = Ember.Handlebars.compile(\"\\n\\n\\n\");\n\nEmber.TEMPLATES['stats/show'] = Ember.Handlebars.compile(\"{{t layouts.application.sponsers}}
\\n\\n\\n {{#each controller}}\\n
\\n\\n \\n- \\n {{{link}}}\\n
\\n {{/each}}\\nSorry
\\nStatistics are disabled for now.
\\nWe're looking into a solution. If you want to help, please ping us!
\\n\");\n\nEmber.TEMPLATES['workers/list'] = Ember.Handlebars.compile(\"{{#view Travis.WorkersView}}\\n\\n {{t workers}}\\n \\n
\\n\\n {{#each group in controller.groups}}\\n {{#view Travis.WorkersListView}}\\n
\\n{{/view}}\\n\");\n\n})();\n//@ sourceURL=templates");minispade.register('config/locales', "(function() {window.I18n = window.I18n || {}\nwindow.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"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\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors →\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do not consider this a stable service. We're still far from that! More info here.\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"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\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our Getting Started guide.\\n It will only take a couple of minutes.\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"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\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores →\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor no considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información aquí.\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Activa los interruptores para inicial el Travis service hook para tus proyectos, y haz un Push en GitHub.- \\n
\\n {{/view}}\\n {{else}}\\n No workers\\n {{/each}}\\n\\n {{group.firstObject.host}}\\n
\\n\\n {{#each worker in group}}\\n {{#view Travis.WorkersItemView workerBinding=\\\"worker\\\"}}\\n
\\n- \\n \\n {{#if worker.isWorking}}\\n {{#if worker.job_id}}\\n \\n {{view.display}}\\n \\n {{/if}}\\n {{else}}\\n {{view.display}}\\n {{/if}}\\n
\\n {{/view}}\\n {{/each}}\\n
\\n Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra Guía de Inicio .\\n Solo tomará unos pocos minutos.\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"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\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors →\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez pas ce service comme étant stable. Nous sommes loin de ça! Plus d'infos ici.\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.
\\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre guide de démarrage.\\n Cela ne vous prendra que quelques minutes.\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくはこちら\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る →\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずはTravisのはじめ方を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"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\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er ikke en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du her.\"},\"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\"}},\"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.
\\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les kom-i-gang-veivisereren vår. Det tar bare et par minutter.\"},\"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\"},\"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\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"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\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service niet te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info hier.\"},\"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\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"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
\\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze startersgids lezen.\\\\n Het zal maar enkele minuten van uw tijd vergen.\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"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\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"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\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów →\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę nie traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz tutaj.\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"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\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.
\\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz Przewodnik .\\n Zajmie ci to tylko kilka minut.\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"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\"},\"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, não considere isto um serviço estável. Estamos muito longe disso! Mais informações aqui.\"},\"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\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"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.
Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso Guia de início. Só leva alguns minutinhos.\"},\"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\"},\"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\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"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\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"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\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, не считайте данный сервис стабильным. Мы еще очень далеки от стабильности! Подробности\"},\"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\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.
\\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите Руководство для быстрого старта. Это займет всего несколько минут.\"},\"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\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n context: null,\n options: null,\n property: null,\n // paths of the property that are also observed\n propertyPaths: [],\n\n value: Ember.K,\n\n valueForRender: function() {\n var value = this.value(Ember.get(this.context, this.property), this.options);\n if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n return value;\n },\n\n render: function(buffer) {\n buffer.push(this.valueForRender());\n },\n\n valueDidChange: function() {\n if (this.morph.isRemoved()) { return; }\n this.morph.html(this.valueForRender());\n },\n\n didInsertElement: function() {\n this.valueDidChange();\n },\n\n init: function() {\n this._super();\n Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n },\n\n destroy: function() {\n Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n this._super();\n }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n var propertyPaths = Array.prototype.slice.call(arguments, 2);\n Ember.Handlebars.registerHelper(name, function(property, options) {\n var data = options.data,\n view = data.view,\n ctx = this;\n\n var bindView = view.createChildView(BoundHelperView, {\n property: property,\n propertyPaths: propertyPaths,\n context: ctx,\n options: options.hash,\n value: func\n });\n\n view.appendChild(bindView);\n });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper");minispade.register('ext/ember/namespace', "(function() {Em.Namespace.reopen = Em.Namespace.reopenClass\n\n\n\n})();\n//@ sourceURL=ext/ember/namespace"); \ No newline at end of file +;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n Travis.reopen({\n App: Em.Application.extend({\n autoinit: false,\n currentUserBinding: 'auth.user',\n authStateBinding: 'auth.state',\n init: function() {\n this._super.apply(this, arguments);\n this.store = Travis.Store.create();\n this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n this.slider = new Travis.Slider();\n this.pusher = new Travis.Pusher(Travis.config.pusher_key);\n this.tailing = new Travis.Tailing();\n return this.set('auth', Travis.Auth.create({\n app: this,\n endpoint: Travis.config.api_endpoint\n }));\n },\n storeAfterSignInPath: function(path) {\n return this.get('auth').storeAfterSignInPath(path);\n },\n autoSignIn: function(path) {\n return this.get('auth').autoSignIn(path);\n },\n signIn: function() {\n return this.get('auth').signIn();\n },\n signOut: function() {\n this.get('auth').signOut();\n return this.get('router').send('afterSignOut');\n },\n receive: function() {\n return this.store.receive.apply(this.store, arguments);\n },\n toggleSidebar: function() {\n var element;\n $('body').toggleClass('maximized');\n element = $('');\n $('#top .profile').append(element);\n Em.run.later((function() {\n return element.remove();\n }), 10);\n element = $('');\n $('#repo').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n this.Travis.Auth = Ember.Object.extend({\n iframe: $('').hide(),\n timeout: 5000,\n state: 'signed-out',\n receivingEnd: \"\" + location.protocol + \"//\" + location.host,\n init: function() {\n var _this = this;\n this.iframe.appendTo('body');\n return window.addEventListener('message', function(e) {\n return _this.receiveMessage(e);\n });\n },\n accessToken: (function() {\n return sessionStorage.getItem('travis.token');\n }).property(),\n autoSignIn: function(path) {\n var user;\n if (user = sessionStorage.getItem('travis.user')) {\n return this.setData({\n user: JSON.parse(user)\n });\n } else if (localStorage.getItem('travis.auto_signin')) {\n return this.signIn();\n }\n },\n signIn: function() {\n this.set('state', 'signing-in');\n this.trySignIn();\n return Ember.run.later(this, this.checkSignIn.bind(this), this.timeout);\n },\n signOut: function() {\n localStorage.removeItem('travis.auto_signin');\n localStorage.removeItem('travis.locale');\n sessionStorage.clear();\n return this.setData();\n },\n trySignIn: function() {\n return this.iframe.attr('src', \"\" + this.endpoint + \"/auth/post_message?origin=\" + this.receivingEnd);\n },\n checkSignIn: function() {\n if (this.get('state') === 'signing-in') {\n return this.forceSignIn();\n }\n },\n forceSignIn: function() {\n localStorage.setItem('travis.auto_signin', 'true');\n return window.location = \"\" + this.endpoint + \"/auth/handshake?redirect_uri=\" + location;\n },\n setData: function(data) {\n var user;\n if (typeof data === 'string') {\n data = JSON.parse(data);\n }\n if (data != null ? data.token : void 0) {\n this.storeToken(data.token);\n }\n if (data != null ? data.user : void 0) {\n user = this.storeUser(data.user);\n }\n this.set('state', user ? 'signed-in' : 'signed-out');\n this.set('user', user ? user : void 0);\n return this.afterSignIn();\n },\n afterSignIn: function() {\n return this.get('app.router').send('afterSignIn', this.readAfterSignInPath());\n },\n storeToken: function(token) {\n sessionStorage.setItem('travis.token', token);\n return this.notifyPropertyChange('accessToken');\n },\n storeUser: function(user) {\n localStorage.setItem('travis.auto_signin', 'true');\n sessionStorage.setItem('travis.user', JSON.stringify(user));\n this.app.store.load(Travis.User, user);\n user = this.app.store.find(Travis.User, user.id);\n user.get('permissions');\n return user;\n },\n storeAfterSignInPath: function(path) {\n return sessionStorage.setItem('travis.after_signin_path', path);\n },\n readAfterSignInPath: function() {\n var path;\n path = sessionStorage.getItem('travis.after_signin_path');\n sessionStorage.removeItem('travis.after_signin_path');\n return path;\n },\n receiveMessage: function(event) {\n if (event.origin === this.expectedOrigin()) {\n if (event.data.token) {\n event.data.user.token = event.data.token;\n }\n this.setData(event.data);\n return console.log(\"signed in as \" + event.data.user.login);\n } else {\n return console.log(\"unexpected message \" + event.origin + \": \" + event.data);\n }\n },\n expectedOrigin: function() {\n if (this.endpoint[0] === '/') {\n return this.receivingEnd;\n } else {\n return this.endpoint;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=auth");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\nminispade.require('travis/ticker');\n\n Travis.reopen({\n Controller: Em.Controller.extend({\n connectOutlet: function() {\n var view, _connectedOutletViews;\n view = this._super.apply(this, arguments);\n if (view) {\n _connectedOutletViews = Travis.app.get('_connectedOutletViews');\n if (!_connectedOutletViews) {\n _connectedOutletViews = [];\n }\n _connectedOutletViews.pushObject(view);\n Travis.app.set('_connectedOutletViews', _connectedOutletViews);\n }\n return view;\n }\n }),\n TopController: Em.Controller.extend({\n userBinding: 'Travis.app.currentUser'\n }),\n ApplicationController: Em.Controller.extend(),\n MainController: Em.Controller.extend(),\n StatsLayoutController: Em.Controller.extend(),\n ProfileLayoutController: Em.Controller.extend(),\n AuthLayoutController: Em.Controller.extend()\n });\nminispade.require('controllers/accounts');\nminispade.require('controllers/builds');\nminispade.require('controllers/flash');\nminispade.require('controllers/home');\nminispade.require('controllers/profile');\nminispade.require('controllers/repos');\nminispade.require('controllers/repo');\nminispade.require('controllers/sidebar');\nminispade.require('controllers/stats');\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('controllers/accounts', "(function() {(function() {\n\n Travis.AccountsController = Ember.ArrayController.extend({\n tab: 'accounts',\n init: function() {\n return this._super();\n },\n findByLogin: function(login) {\n return this.find(function(account) {\n return account.get('login') === login;\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/accounts");minispade.register('controllers/builds', "(function() {(function() {\n\n Travis.BuildsController = Em.ArrayController.extend({\n repo: 'parent.repo',\n contentBinding: 'parent.builds'\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/builds");minispade.register('controllers/flash', "(function() {(function() {\n\n Travis.FlashController = Ember.ArrayController.extend({\n broadcastBinding: 'Travis.app.currentUser.broadcasts',\n init: function() {\n this.set('flashes', Ember.A());\n return this._super.apply(this, arguments);\n },\n content: (function() {\n return this.get('unseenBroadcasts').concat(this.get('flashes'));\n }).property('unseenBroadcasts.length', 'flashes.length'),\n unseenBroadcasts: (function() {\n return this.get('broadcasts').filterProperty('isSeen', false);\n }).property('broadcasts.isLoaded', 'broadcasts.length'),\n broadcasts: (function() {\n if (Travis.app.get('currentUser')) {\n return Travis.Broadcast.find();\n } else {\n return Ember.A();\n }\n }).property('Travis.app.currentUser'),\n loadFlashes: function(msgs) {\n var msg, type, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = msgs.length; _i < _len; _i++) {\n msg = msgs[_i];\n type = Ember.keys(msg)[0];\n msg = {\n type: type,\n message: msg[type]\n };\n this.get('flashes').pushObject(msg);\n _results.push(Ember.run.later(this, (function() {\n return this.get('flashes').removeObject(msg);\n }), 15000));\n }\n return _results;\n },\n close: function(msg) {\n if (msg instanceof Travis.Broadcast) {\n msg.setSeen();\n return this.notifyPropertyChange('unseenBroadcasts');\n } else {\n return this.get('flashes').removeObject(msg);\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/flash");minispade.register('controllers/home', "(function() {(function() {\n\n Travis.HomeLayoutController = Travis.Controller.extend();\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/home");minispade.register('controllers/profile', "(function() {(function() {\n\n Travis.ProfileController = Travis.Controller.extend({\n name: 'profile',\n userBinding: 'Travis.app.currentUser',\n accountsBinding: 'Travis.app.router.accountsController',\n account: (function() {\n var account, login;\n login = this.get('params.login') || Travis.app.get('currentUser.login');\n account = this.get('accounts').filter(function(account) {\n if (account.get('login') === login) {\n return account;\n }\n })[0];\n if (account) {\n account.select();\n }\n return account;\n }).property('accounts.length', 'params.login'),\n activate: function(action, params) {\n this.setParams(params || this.get('params'));\n return this[\"view\" + ($.camelize(action))]();\n },\n viewHooks: function() {\n this.connectTab('hooks');\n return this.set('hooks', Travis.Hook.find({\n owner_name: this.get('params.login') || Travis.app.get('currentUser.login')\n }));\n },\n viewUser: function() {\n return this.connectTab('user');\n },\n connectTab: function(tab) {\n var viewClass;\n viewClass = Travis[\"\" + ($.camelize(tab)) + \"View\"];\n this.set('tab', tab);\n return this.connectOutlet({\n outletName: 'pane',\n controller: this,\n viewClass: viewClass\n });\n },\n setParams: function(params) {\n var key, value, _results;\n this.set('params', {});\n _results = [];\n for (key in params) {\n value = params[key];\n _results.push(this.set(\"params.\" + key, params[key]));\n }\n return _results;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/profile");minispade.register('controllers/repo', "(function() {(function() {\n\n Travis.RepoController = Travis.Controller.extend({\n bindings: [],\n init: function() {\n this._super.apply(this, arguments);\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n updateTimes: function() {\n var build, builds, jobs;\n if (builds = this.get('builds')) {\n builds.forEach(function(b) {\n return b.updateTimes();\n });\n }\n if (build = this.get('build')) {\n build.updateTimes();\n }\n if (build && (jobs = build.get('jobs'))) {\n jobs.forEach(function(j) {\n return j.updateTimes();\n });\n }\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n activate: function(action) {\n this._unbind();\n return this[\"view\" + ($.camelize(action))]();\n },\n viewIndex: function() {\n this._bind('repo', 'controllers.reposController.firstObject');\n this._bind('build', 'repo.lastBuild');\n return this.connectTab('current');\n },\n viewCurrent: function() {\n this.connectTab('current');\n return this._bind('build', 'repo.lastBuild');\n },\n viewBuilds: function() {\n this.connectTab('builds');\n return this._bind('builds', 'repo.builds');\n },\n viewPullRequests: function() {\n this.connectTab('pull_requests');\n return this._bind('builds', 'repo.pullRequests');\n },\n viewBranches: function() {\n this.connectTab('branches');\n return this._bind('builds', 'repo.branches');\n },\n viewEvents: function() {\n this.connectTab('events');\n return this._bind('events', 'repo.events');\n },\n viewBuild: function() {\n return this.connectTab('build');\n },\n viewJob: function() {\n this._bind('build', 'job.build');\n return this.connectTab('job');\n },\n repoObserver: (function() {\n var repo;\n repo = this.get('repo');\n if (repo) {\n return repo.select();\n }\n }).observes('repo.id'),\n connectTab: function(tab) {\n var name, viewClass;\n name = tab === 'current' ? 'build' : tab;\n viewClass = name === 'builds' || name === 'branches' || name === 'pull_requests' ? Travis.BuildsView : Travis[\"\" + ($.camelize(name)) + \"View\"];\n this.set('tab', tab);\n return this.connectOutlet({\n outletName: 'pane',\n controller: this,\n viewClass: viewClass\n });\n },\n _bind: function(to, from) {\n return this.bindings.push(Ember.oneWay(this, to, from));\n },\n _unbind: function() {\n var binding, _i, _len, _ref;\n _ref = this.bindings;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n binding = _ref[_i];\n binding.disconnect(this);\n }\n return this.bindings.length = 0;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repo");minispade.register('controllers/repos', "(function() {(function() {\nminispade.require('travis/limited_array');\n\n Travis.ReposController = Ember.ArrayController.extend({\n defaultTab: 'recent',\n sortProperties: ['sortOrder'],\n init: function() {\n this.activate(this.defaultTab);\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n updateTimes: function() {\n var content;\n if (content = this.get('content')) {\n content.forEach(function(r) {\n return r.updateTimes();\n });\n }\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n activate: function(tab, params) {\n this.set('tab', tab);\n return this[\"view\" + ($.camelize(tab))](params);\n },\n viewRecent: function() {\n var content;\n content = Travis.LimitedArray.create({\n content: Travis.Repo.find(),\n limit: 30\n });\n return this.set('content', content);\n },\n viewOwned: function() {\n return this.set('content', Travis.Repo.accessibleBy(Travis.app.get('currentUser.login')));\n },\n viewSearch: function(params) {\n return this.set('content', Travis.Repo.search(params.search));\n },\n searchObserver: (function() {\n var search;\n search = this.get('search');\n if (search) {\n return this.searchFor(search);\n } else {\n this.activate('recent');\n return 'recent';\n }\n }).observes('search'),\n searchFor: function(phrase) {\n if (this.searchLater) {\n Ember.run.cancel(this.searchLater);\n }\n return this.searchLater = Ember.run.later(this, (function() {\n return this.activate('search', {\n search: phrase\n });\n }), 500);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repos");minispade.register('controllers/sidebar', "(function() {(function() {\n\n Travis.reopen({\n SidebarController: Em.ArrayController.extend({\n init: function() {\n this.tickables = [];\n return Travis.Ticker.create({\n target: this,\n interval: Travis.INTERVALS.sponsors\n });\n },\n tick: function() {\n var tickable, _i, _len, _ref, _results;\n _ref = this.tickables;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n tickable = _ref[_i];\n _results.push(tickable.tick());\n }\n return _results;\n }\n }),\n QueuesController: Em.ArrayController.extend(),\n WorkersController: Em.ArrayController.extend({\n groups: (function() {\n var content, groups, host, worker, _i, _len, _ref;\n if (content = this.get('arrangedContent')) {\n groups = {};\n _ref = content.toArray();\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n worker = _ref[_i];\n host = worker.get('host');\n if (!groups[host]) {\n groups[host] = Em.ArrayProxy.create(Em.SortableMixin, {\n content: [],\n sortProperties: ['nameForSort']\n });\n }\n groups[host].addObject(worker);\n }\n return $.values(groups);\n }\n }).property('length')\n }),\n SponsorsController: Em.ArrayController.extend({\n page: 0,\n arrangedContent: (function() {\n return this.get('shuffled').slice(this.start(), this.end());\n }).property('shuffled.length', 'page'),\n shuffled: (function() {\n var content;\n if (content = this.get('content')) {\n return $.shuffle(content);\n } else {\n return [];\n }\n }).property('content.length'),\n tick: function() {\n return this.set('page', this.isLast() ? 0 : this.get('page') + 1);\n },\n pages: (function() {\n var length;\n length = this.get('content.length');\n if (length) {\n return parseInt(length / this.get('perPage') + 1);\n } else {\n return 1;\n }\n }).property('length'),\n isLast: function() {\n return this.get('page') === this.get('pages') - 1;\n },\n start: function() {\n return this.get('page') * this.get('perPage');\n },\n end: function() {\n return this.start() + this.get('perPage');\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/sidebar");minispade.register('controllers/stats', "(function() {(function() {\n\n Travis.StatsController = Travis.Controller.extend({\n name: 'stats',\n init: function() {\n return this._super('top');\n },\n activate: function(action, params) {}\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/stats");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n var safe;\nminispade.require('ext/ember/bound_helper');\n\n safe = function(string) {\n return new Handlebars.SafeString(string);\n };\n\n Handlebars.registerHelper('tipsy', function(text, tip) {\n return safe('' + text + '');\n });\n\n Handlebars.registerHelper('t', function(key) {\n return safe(I18n.t(key));\n });\n\n Ember.registerBoundHelper('formatTime', function(value, options) {\n return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n });\n\n Ember.registerBoundHelper('formatDuration', function(duration, options) {\n return safe(Travis.Helpers.timeInWords(duration));\n });\n\n Ember.registerBoundHelper('formatCommit', function(commit, options) {\n if (commit) {\n return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n }\n });\n\n Ember.registerBoundHelper('formatSha', function(sha, options) {\n return safe(Travis.Helpers.formatSha(sha));\n });\n\n Ember.registerBoundHelper('pathFrom', function(url, options) {\n return safe(Travis.Helpers.pathFrom(url));\n });\n\n Ember.registerBoundHelper('formatMessage', function(message, options) {\n return safe(Travis.Helpers.formatMessage(message, options));\n });\n\n Ember.registerBoundHelper('formatConfig', function(config, options) {\n return safe(Travis.Helpers.formatConfig(config));\n });\n\n Ember.registerBoundHelper('formatLog', function(log, options) {\n var item, parentView, repo;\n parentView = this.get('parentView');\n repo = parentView.get(options.repo);\n item = parentView.get(options.item);\n return Travis.Helpers.formatLog(log, repo, item) || '';\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\nminispade.require('config/emoij');\n\n this.Travis.Helpers = {\n compact: function(object) {\n var key, result, value, _ref;\n result = {};\n _ref = object || {};\n for (key in _ref) {\n value = _ref[key];\n if (!$.isEmpty(value)) {\n result[key] = value;\n }\n }\n return result;\n },\n safe: function(string) {\n return new Handlebars.SafeString(string);\n },\n colorForResult: function(result) {\n if (result === 0) {\n return 'green';\n } else {\n if (result === 1) {\n return 'red';\n } else {\n return null;\n }\n }\n },\n formatCommit: function(sha, branch) {\n return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n },\n formatSha: function(sha) {\n return (sha || '').substr(0, 7);\n },\n formatConfig: function(config) {\n var values;\n config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n values = $.map(config, function(value, key) {\n value = (value && value.join ? value.join(', ') : value) || '';\n return '%@: %@'.fmt($.camelize(key), value);\n });\n if (values.length === 0) {\n return '-';\n } else {\n return values.join(', ');\n }\n },\n formatMessage: function(message, options) {\n message = message || '';\n if (options.short) {\n message = message.split(/\\n/)[0];\n }\n return this._emojize(this._escape(message)).replace(/\\n/g, '
');\n },\n formatLog: function(log, repo, item) {\n var event, url;\n event = item.constructor === Travis.Build ? 'showBuild' : 'showJob';\n url = Travis.app.get('router').urlForEvent(event, repo, item);\n return Travis.Log.filter(log, url);\n },\n pathFrom: function(url) {\n return (url || '').split('/').pop();\n },\n timeAgoInWords: function(date) {\n return $.timeago.distanceInWords(date);\n },\n durationFrom: function(started, finished) {\n started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n if (started && finished) {\n return Math.round((finished - started) / 1000);\n } else {\n return 0;\n }\n },\n timeInWords: function(duration) {\n var days, hours, minutes, result, seconds;\n days = Math.floor(duration / 86400);\n hours = Math.floor(duration % 86400 / 3600);\n minutes = Math.floor(duration % 3600 / 60);\n seconds = duration % 60;\n if (days > 0) {\n return 'more than 24 hrs';\n } else {\n result = [];\n if (hours === 1) {\n result.push(hours + ' hr');\n }\n if (hours > 1) {\n result.push(hours + ' hrs');\n }\n if (minutes > 0) {\n result.push(minutes + ' min');\n }\n if (seconds > 0) {\n result.push(seconds + ' sec');\n }\n if (result.length > 0) {\n return result.join(' ');\n } else {\n return '-';\n }\n }\n },\n _normalizeDateString: function(string) {\n if (window.JHW) {\n string = string.replace('T', ' ').replace(/-/g, '/');\n string = string.replace('Z', '').replace(/\\..*$/, '');\n }\n return string;\n },\n _nowUtc: function() {\n return this._toUtc(new Date());\n },\n _toUtc: function(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n },\n _emojize: function(text) {\n var emojis;\n emojis = text.match(/:\\S+?:/g);\n if (emojis !== null) {\n $.each(emojis.uniq(), function(ix, emoji) {\n var image, strippedEmoji;\n strippedEmoji = emoji.substring(1, emoji.length - 1);\n if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n image = '';\n return text = text.replace(new RegExp(emoji, 'g'), image);\n }\n });\n }\n return text;\n },\n _escape: function(text) {\n return text.replace(/&/g, '&').replace(//g, '>');\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n this.Travis.Urls = {\n repo: function(slug) {\n return \"/\" + slug;\n },\n builds: function(slug) {\n return \"/\" + slug + \"/builds\";\n },\n pullRequests: function(slug) {\n return \"/\" + slug + \"/pull_requests\";\n },\n branches: function(slug) {\n return \"/\" + slug + \"/branches\";\n },\n build: function(slug, id) {\n return \"/\" + slug + \"/builds/\" + id;\n },\n job: function(slug, id) {\n return \"/\" + slug + \"/jobs/\" + id;\n },\n githubCommit: function(slug, sha) {\n return \"http://github.com/\" + slug + \"/commit/\" + sha;\n },\n githubRepo: function(slug) {\n return \"http://github.com/\" + slug;\n },\n githubWatchers: function(slug) {\n return \"http://github.com/\" + slug + \"/watchers\";\n },\n githubNetwork: function(slug) {\n return \"http://github.com/\" + slug + \"/network\";\n },\n githubAdmin: function(slug) {\n return \"http://github.com/\" + slug + \"/admin/hooks#travis_minibucket\";\n },\n statusImage: function(slug, branch) {\n return (\"https://secure.travis-ci.org/\" + slug + \".png\") + (branch ? \"?branch=\" + branch : '');\n },\n email: function(email) {\n return \"mailto:\" + email;\n },\n account: function(login) {\n return \"/profile/\" + login;\n },\n user: function(login) {\n return \"/profile/\" + login + \"/me\";\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('models', "(function() {(function() {\nminispade.require('models/extensions');\nminispade.require('models/account');\nminispade.require('models/artifact');\nminispade.require('models/broadcast');\nminispade.require('models/branch');\nminispade.require('models/build');\nminispade.require('models/commit');\nminispade.require('models/event');\nminispade.require('models/hook');\nminispade.require('models/job');\nminispade.require('models/repo');\nminispade.require('models/sponsor');\nminispade.require('models/user');\nminispade.require('models/worker');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/account', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Account = Travis.Model.extend({\n primaryKey: 'login',\n login: DS.attr('string'),\n name: DS.attr('string'),\n type: DS.attr('string'),\n reposCount: DS.attr('number'),\n urlGithub: (function() {\n return \"http://github.com/\" + (this.get('login'));\n }).property()\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/account");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Artifact = Travis.Model.extend({\n body: DS.attr('string'),\n init: function() {\n this._super.apply(this, arguments);\n this.set('queue', Ember.A([]));\n this.addObserver('body', this.fetchWorker);\n return this.fetchWorker();\n },\n append: function(body) {\n if (this.get('isLoaded')) {\n return this.set('body', this.get('body') + body);\n } else {\n return this.get('queue').pushObject(body);\n }\n },\n recordDidLoad: (function() {\n var queue;\n if (this.get('isLoaded')) {\n queue = this.get('queue');\n if (queue.get('length') > 0) {\n return this.append(queue.toArray().join(''));\n }\n }\n }).observes('isLoaded'),\n fetchWorker: function() {\n var body, line, match, worker;\n if (body = this.get('body')) {\n line = body.split(\"\\n\")[0];\n if (line && (match = line.match(/Using worker: (.*)/))) {\n if (worker = match[1]) {\n worker = worker.trim().split(':')[0];\n this.set('workerName', worker);\n return this.removeObserver('body', this.fetchWorker);\n }\n }\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n commitId: DS.attr('number'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n duration: DS.attr('number'),\n startedAt: DS.attr('string'),\n finishedAt: DS.attr('string'),\n commit: DS.belongsTo('Travis.Commit'),\n repo: (function() {\n if (this.get('repoId')) {\n return Travis.Repo.find(this.get('repoId'));\n }\n }).property('repoId'),\n updateTimes: function() {\n this.notifyPropertyChange('started_at');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n this.Travis.Branch.reopenClass({\n byRepoId: function(id) {\n return this.find({\n repository_id: id\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/broadcast', "(function() {(function() {\n var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('travis/model');\n\n this.Travis.Broadcast = Travis.Model.extend({\n message: DS.attr('string'),\n toObject: function() {\n return {\n type: 'broadcast',\n id: this.get('id'),\n message: this.get('message')\n };\n },\n isSeen: (function() {\n var _ref;\n return _ref = this.get('id'), __indexOf.call(Travis.Broadcast.seen, _ref) >= 0;\n }).property(),\n setSeen: function() {\n Travis.Broadcast.seen.pushObject(this.get('id'));\n localStorage.setItem('travis.seen_broadcasts', JSON.stringify(Travis.Broadcast.seen));\n return this.notifyPropertyChange('isSeen');\n }\n });\n\n this.Travis.Broadcast.reopenClass({\n seen: Ember.A(JSON.parse(localStorage.getItem('travis.seen_broadcasts')) || [])\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/broadcast");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Build = Travis.Model.extend(Travis.DurationCalculations, {\n eventType: DS.attr('string'),\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n commitId: DS.attr('number'),\n state: DS.attr('string'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n _duration: DS.attr('number', {\n key: 'duration'\n }),\n startedAt: DS.attr('string', {\n key: 'started_at'\n }),\n finishedAt: DS.attr('string', {\n key: 'finished_at'\n }),\n repo: DS.belongsTo('Travis.Repo', {\n key: 'repository_id'\n }),\n commit: DS.belongsTo('Travis.Commit'),\n jobs: DS.hasMany('Travis.Job', {\n key: 'job_ids'\n }),\n config: (function() {\n return Travis.Helpers.compact(this.get('data.config'));\n }).property('data.config'),\n isMatrix: (function() {\n return this.get('data.job_ids.length') > 1;\n }).property('data.job_ids.length'),\n isFinished: (function() {\n return this.get('state') === 'finished';\n }).property('state'),\n requiredJobs: (function() {\n return this.get('jobs').filter(function(data) {\n return !data.get('allowFailure');\n });\n }).property('jobs.@each.allowFailure'),\n allowedFailureJobs: (function() {\n return this.get('jobs').filter(function(data) {\n return data.get('allowFailure');\n });\n }).property('jobs.@each.allowFailure'),\n configKeys: (function() {\n var config, headers, key, keys;\n if (!(config = this.get('config'))) {\n return [];\n }\n keys = $.intersect($.keys(config), Travis.CONFIG_KEYS);\n headers = (function() {\n var _i, _len, _ref, _results;\n _ref = ['build.job', 'build.duration', 'build.finished_at'];\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n key = _ref[_i];\n _results.push(I18n.t(key));\n }\n return _results;\n })();\n return $.map(headers.concat(keys), function(key) {\n return $.camelize(key);\n });\n }).property('config'),\n requeue: (function() {\n return Travis.ajax.post('/requests', {\n build_id: this.get('id')\n });\n })\n });\n\n this.Travis.Build.reopenClass({\n byRepoId: function(id, parameters) {\n return this.find($.extend(parameters || {}, {\n repository_id: id\n }));\n },\n olderThanNumber: function(id, build_number) {\n return this.find({\n url: \"/builds\",\n repository_id: id,\n after_number: build_number\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Commit = Travis.Model.extend({\n buildId: DS.attr('number'),\n sha: DS.attr('string'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n compareUrl: DS.attr('string'),\n authorName: DS.attr('string'),\n authorEmail: DS.attr('string'),\n committerName: DS.attr('string'),\n committerEmail: DS.attr('string'),\n build: DS.belongsTo('Travis.Build', {\n key: 'buildId'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/event', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Event = Travis.Model.extend({\n event: DS.attr('string'),\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n sourceId: DS.attr('number', {\n key: 'source_id'\n }),\n sourceType: DS.attr('string', {\n key: 'source_type'\n }),\n createdAt: DS.attr('string', {\n key: 'created_at'\n }),\n event_: (function() {\n return this.get('event');\n }).property('event'),\n result: (function() {\n return this.get('data.data.result');\n }).property('data.data.result'),\n message: (function() {\n return this.get('data.data.message');\n }).property('data.data.message'),\n source: (function() {\n var type;\n if (type = this.get('sourceType')) {\n return Travis[type].find(this.get('sourceId'));\n }\n }).property('sourceType', 'sourceId')\n });\n\n this.Travis.Event.reopenClass({\n byRepoId: function(id) {\n return this.find({\n repository_id: id\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/event");minispade.register('models/extensions', "(function() {(function() {\n\n Travis.DurationCalculations = Ember.Mixin.create({\n duration: (function() {\n var duration;\n if (duration = this.get('_duration')) {\n return duration;\n } else {\n return Travis.Helpers.durationFrom(this.get('startedAt'), this.get('finishedAt'));\n }\n }).property('_duration', 'finishedAt', 'startedAt'),\n updateTimes: function() {\n this.notifyPropertyChange('_duration');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/extensions");minispade.register('models/hook', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Hook = Travis.Model.extend({\n name: DS.attr('string'),\n ownerName: DS.attr('string'),\n description: DS.attr('string'),\n active: DS.attr('boolean'),\n account: (function() {\n return this.get('slug').split('/')[0];\n }).property('slug'),\n slug: (function() {\n return \"\" + (this.get('ownerName')) + \"/\" + (this.get('name'));\n }).property('ownerName', 'name'),\n urlGithub: (function() {\n return \"http://github.com/\" + (this.get('slug'));\n }).property(),\n urlGithubAdmin: (function() {\n return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n }).property(),\n toggle: function() {\n var transaction;\n transaction = this.get('store').transaction();\n transaction.add(this);\n this.set('active', !this.get('active'));\n return transaction.commit();\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/hook");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Job = Travis.Model.extend(Travis.DurationCalculations, {\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n buildId: DS.attr('number'),\n commitId: DS.attr('number'),\n logId: DS.attr('number'),\n queue: DS.attr('string'),\n state: DS.attr('string'),\n number: DS.attr('string'),\n result: DS.attr('number'),\n _duration: DS.attr('number', {\n key: 'duration'\n }),\n startedAt: DS.attr('string'),\n finishedAt: DS.attr('string'),\n allowFailure: DS.attr('boolean', {\n key: 'allow_failure'\n }),\n repo: DS.belongsTo('Travis.Repo', {\n key: 'repository_id'\n }),\n build: DS.belongsTo('Travis.Build', {\n key: 'build_id'\n }),\n commit: DS.belongsTo('Travis.Commit', {\n key: 'commit_id'\n }),\n log: DS.belongsTo('Travis.Artifact', {\n key: 'log_id'\n }),\n config: (function() {\n return Travis.Helpers.compact(this.get('data.config'));\n }).property('data.config'),\n sponsor: (function() {\n var worker;\n worker = this.get('log.workerName');\n if (worker && worker.length) {\n return Travis.WORKERS[worker] || {\n name: \"Travis Pro\",\n url: \"http://travis-ci.com\"\n };\n }\n }).property('log.workerName'),\n configValues: (function() {\n var buildConfig, config, keys;\n config = this.get('config');\n buildConfig = this.get('build.config');\n if (config && buildConfig) {\n keys = $.intersect($.keys(buildConfig), Travis.CONFIG_KEYS);\n return keys.map(function(key) {\n return config[key];\n });\n } else {\n return [];\n }\n }).property('config'),\n appendLog: function(text) {\n var log;\n if (log = this.get('log')) {\n return log.append(text);\n }\n },\n subscribe: function() {\n var id;\n if (id = this.get('id')) {\n return Travis.app.pusher.subscribe(\"job-\" + id);\n }\n },\n onStateChange: (function() {\n if (this.get('state') === 'finished') {\n return Travis.app.pusher.unsubscribe(\"job-\" + (this.get('id')));\n }\n }).observes('state')\n });\n\n this.Travis.Job.reopenClass({\n queued: function(queue) {\n this.find();\n return Travis.app.store.filter(this, function(job) {\n var queued;\n queued = ['created', 'queued'].indexOf(job.get('state')) !== -1;\n return queued && (!queue || job.get('queue') === (\"builds.\" + queue));\n });\n },\n findMany: function(ids) {\n return Travis.app.store.findMany(this, ids);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repo', "(function() {(function() {\nminispade.require('travis/expandable_record_array');\nminispade.require('travis/model');\n\n this.Travis.Repo = Travis.Model.extend({\n slug: DS.attr('string'),\n description: DS.attr('string'),\n lastBuildId: DS.attr('number'),\n lastBuildNumber: DS.attr('string'),\n lastBuildResult: DS.attr('number'),\n lastBuildStartedAt: DS.attr('string'),\n lastBuildFinishedAt: DS.attr('string'),\n lastBuild: DS.belongsTo('Travis.Build'),\n builds: (function() {\n var array, builds, id;\n id = this.get('id');\n builds = Travis.Build.byRepoId(id, {\n event_type: 'push'\n });\n array = Travis.ExpandableRecordArray.create({\n type: Travis.Build,\n content: Ember.A([]),\n store: this.get('store')\n });\n array.load(builds);\n return array;\n }).property(),\n pullRequests: (function() {\n var array, builds, id;\n id = this.get('id');\n builds = Travis.Build.byRepoId(id, {\n event_type: 'pull_request'\n });\n array = Travis.ExpandableRecordArray.create({\n type: Travis.Build,\n content: Ember.A([]),\n store: this.get('store')\n });\n array.load(builds);\n return array;\n }).property(),\n branches: (function() {\n return Travis.Branch.byRepoId(this.get('id'));\n }).property(),\n events: (function() {\n return Travis.Event.byRepoId(this.get('id'));\n }).property(),\n owner: (function() {\n return (this.get('slug') || '').split('/')[0];\n }).property('slug'),\n name: (function() {\n return (this.get('slug') || '').split('/')[1];\n }).property('slug'),\n lastBuildDuration: (function() {\n var duration;\n duration = this.get('data.last_build_duration');\n if (!duration) {\n duration = Travis.Helpers.durationFrom(this.get('lastBuildStartedAt'), this.get('lastBuildFinishedAt'));\n }\n return duration;\n }).property('data.last_build_duration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n sortOrder: (function() {\n var lastBuildFinishedAt;\n if (lastBuildFinishedAt = this.get('lastBuildFinishedAt')) {\n return -new Date(lastBuildFinishedAt).getTime();\n } else {\n return -new Date('9999').getTime() - parseInt(this.get('lastBuildId'));\n }\n }).property('lastBuildFinishedAt', 'lastBuildId'),\n stats: (function() {\n var _this = this;\n return this.get('_stats') || $.get(\"https://api.github.com/repos/\" + (this.get('slug')), function(data) {\n _this.set('_stats', data);\n return _this.notifyPropertyChange('stats');\n }) && {};\n }).property(),\n updateTimes: function() {\n return this.notifyPropertyChange('lastBuildDuration');\n }\n });\n\n this.Travis.Repo.reopenClass({\n recent: function() {\n return this.find();\n },\n ownedBy: function(login) {\n return this.find({\n owner_name: login,\n orderBy: 'name'\n });\n },\n accessibleBy: function(login) {\n return this.find({\n member: login,\n orderBy: 'name'\n });\n },\n search: function(query) {\n return this.find({\n search: query,\n orderBy: 'name'\n });\n },\n bySlug: function(slug) {\n var repo;\n repo = $.select(this.find().toArray(), function(repo) {\n return repo.get('slug') === slug;\n });\n if (repo.length > 0) {\n return repo;\n } else {\n return this.find({\n slug: slug\n });\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repo");minispade.register('models/sponsor', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Sponsor = Travis.Model.extend({\n type: DS.attr('string'),\n url: DS.attr('string'),\n link: DS.attr('string'),\n image: (function() {\n return \"/images/sponsors/\" + (this.get('data.image'));\n }).property('data.image')\n });\n\n Travis.Sponsor.reopenClass({\n decks: function() {\n return this.platinum().concat(this.gold());\n },\n platinum: function() {\n var platinum, sponsor, _i, _len, _results;\n platinum = this.byType('platinum').toArray();\n _results = [];\n for (_i = 0, _len = platinum.length; _i < _len; _i++) {\n sponsor = platinum[_i];\n _results.push([sponsor]);\n }\n return _results;\n },\n gold: function() {\n var gold, _results;\n gold = this.byType('gold').toArray();\n _results = [];\n while (gold.length > 0) {\n _results.push(gold.splice(0, 2));\n }\n return _results;\n },\n links: function() {\n return this.byType('silver');\n },\n byType: function() {\n var types;\n types = Array.prototype.slice.apply(arguments);\n return Travis.Sponsor.filter(function(sponsor) {\n return types.indexOf(sponsor.get('type')) !== -1;\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/sponsor");minispade.register('models/user', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('travis/model');\n\n this.Travis.User = Travis.Model.extend({\n name: DS.attr('string'),\n email: DS.attr('string'),\n login: DS.attr('string'),\n token: DS.attr('string'),\n locale: DS.attr('string'),\n gravatarId: DS.attr('string'),\n isSyncing: DS.attr('boolean'),\n syncedAt: DS.attr('string'),\n repoCount: DS.attr('number'),\n init: function() {\n if (this.get('isSyncing')) {\n this.poll();\n }\n this._super();\n return Ember.run.next(this, function() {\n var transaction;\n transaction = this.get('store').transaction();\n return transaction.add(this);\n });\n },\n urlGithub: (function() {\n return \"https://github.com/\" + (this.get('login'));\n }).property(),\n permissions: (function() {\n var _this = this;\n if (!this.permissions) {\n this.permissions = Ember.ArrayProxy.create({\n content: []\n });\n Travis.ajax.get('/users/permissions', function(data) {\n return _this.permissions.set('content', data.permissions);\n });\n }\n return this.permissions;\n }).property(),\n updateLocale: function(locale) {\n var observer, self, transaction;\n this.setWithSession('locale', locale);\n transaction = this.get('transaction');\n transaction.commit();\n self = this;\n observer = function() {\n if (!self.get('isSaving')) {\n self.removeObserver('isSaving', observer);\n transaction = self.get('store').transaction();\n return transaction.add(self);\n }\n };\n return this.addObserver('isSaving', observer);\n },\n type: (function() {\n return 'user';\n }).property(),\n sync: function() {\n Travis.ajax.post('/users/sync');\n this.setWithSession('isSyncing', true);\n return this.poll();\n },\n poll: function() {\n var _this = this;\n return Travis.ajax.get('/users', function(data) {\n if (data.user.is_syncing) {\n return Ember.run.later(_this, _this.poll.bind(_this), 3000);\n } else {\n _this.set('isSyncing', false);\n return _this.setWithSession('syncedAt', data.user.synced_at);\n }\n });\n },\n setWithSession: function(name, value) {\n var user;\n this.set(name, value);\n user = JSON.parse(typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0);\n user[$.underscore(name)] = this.get(name);\n return typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.setItem('travis.user', JSON.stringify(user)) : void 0;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/user");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Worker = Travis.Model.extend({\n state: DS.attr('string'),\n name: DS.attr('string'),\n host: DS.attr('string'),\n lastSeenAt: DS.attr('string'),\n payload: (function() {\n return this.get('data.payload');\n }).property('data.payload'),\n number: (function() {\n return this.get('name').match(/\\d+$/)[0];\n }).property('name'),\n isWorking: (function() {\n return this.get('state') === 'working';\n }).property('state'),\n repo: (function() {\n return Travis.Repo.find(this.get('payload.repository.id') || this.get('payload.repo.id'));\n }).property('payload.repository.id', 'payload.repo.id'),\n job_id: (function() {\n return this.get('payload.job.id');\n }).property('payload.job.id'),\n job: (function() {\n return Travis.Job.find(this.get('job_id'));\n }).property('job_id'),\n nameForSort: (function() {\n var id, match, name;\n if (name = this.get('name')) {\n match = name.match(/(.*?)-(\\d+)/);\n if (match) {\n name = match[1];\n id = match[2].toString();\n if (id.length < 2) {\n id = \"00\" + id;\n } else if (id.length < 3) {\n id = \"0\" + id;\n }\n return \"\" + name + \"-\" + id;\n }\n }\n }).property('name')\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('pusher', "(function() {(function() {\n\n Travis.Pusher = function(key) {\n if (key) {\n this.init(key);\n }\n return this;\n };\n\n $.extend(Travis.Pusher, {\n CHANNELS: ['common'],\n CHANNEL_PREFIX: ''\n });\n\n $.extend(Travis.Pusher.prototype, {\n active_channels: [],\n init: function(key) {\n var channel, _i, _len, _ref, _results;\n Pusher.warn = this.warn.bind(this);\n this.pusher = new Pusher(key);\n _ref = Travis.Pusher.CHANNELS;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n channel = _ref[_i];\n _results.push(this.subscribe(channel));\n }\n return _results;\n },\n subscribe: function(channel) {\n var _this = this;\n if (this.pusher && this.active_channels.indexOf(channel) === -1) {\n this.active_channels.push(channel);\n return this.pusher.subscribe(this.prefix(channel)).bind_all(function(event, data) {\n return _this.receive(event, data);\n });\n }\n },\n unsubscribe: function(channel) {\n var ix;\n ix = this.active_channels.indexOf(channel);\n if (this.pusher && ix === -1) {\n this.active_channels.splice(ix, 1);\n return this.pusher.unsubscribe(this.prefix(channel));\n }\n },\n prefix: function(channel) {\n return \"\" + Travis.Pusher.CHANNEL_PREFIX + channel;\n },\n receive: function(event, data) {\n if (event.substr(0, 6) === 'pusher') {\n return;\n }\n if (data.id) {\n data = this.normalize(event, data);\n }\n return Ember.run.next(function() {\n return Travis.app.store.receive(event, data);\n });\n },\n normalize: function(event, data) {\n switch (event) {\n case 'build:started':\n case 'build:finished':\n return data;\n case 'job:created':\n case 'job:started':\n case 'job:finished':\n case 'job:log':\n if (data.queue) {\n data.queue = data.queue.replace('builds.', '');\n }\n return {\n job: data\n };\n case 'worker:added':\n case 'worker:updated':\n case 'worker:removed':\n return {\n worker: data\n };\n }\n },\n warn: function(type, warning) {\n if (!this.ignoreWarning(warning)) {\n return console.warn(warning);\n }\n },\n ignoreWarning: function(warning) {\n var message, _ref;\n if (message = (_ref = warning.data) != null ? _ref.message : void 0) {\n return message.indexOf('Existing subscription') === 0 || message.indexOf('No current subscription') === 0;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=pusher");minispade.register('routes', "(function() {(function() {\n var defaultRoute, lineNumberRoute;\nminispade.require('travis/location');\n\n defaultRoute = Ember.Route.extend({\n route: '/',\n index: 1000\n });\n\n lineNumberRoute = Ember.Route.extend({\n route: '#L:number',\n index: 1,\n connectOutlets: function(router) {\n return router.saveLineNumberHash();\n },\n dynamicSegmentPattern: \"([0-9]+)\"\n });\n\n Travis.Router = Ember.Router.extend({\n location: 'travis',\n enableLogging: true,\n initialState: 'loading',\n showRoot: Ember.Route.transitionTo('root.home.show'),\n showStats: Ember.Route.transitionTo('root.stats'),\n showRepo: Ember.Route.transitionTo('root.home.repo.show'),\n showBuilds: Ember.Route.transitionTo('root.home.repo.builds.index'),\n showBuild: Ember.Route.transitionTo('root.home.repo.builds.show'),\n showPullRequests: Ember.Route.transitionTo('root.home.repo.pullRequests'),\n showBranches: Ember.Route.transitionTo('root.home.repo.branches'),\n showEvents: Ember.Route.transitionTo('root.home.repo.events'),\n showJob: Ember.Route.transitionTo('root.home.repo.job'),\n showProfile: Ember.Route.transitionTo('root.profile'),\n showAccount: Ember.Route.transitionTo('root.profile.account'),\n showUserProfile: Ember.Route.transitionTo('root.profile.account.profile'),\n saveLineNumberHash: function(path) {\n return Ember.run.next(this, function() {\n var match;\n path = path || this.get('location').getURL();\n if (match = path.match(/#L\\d+$/)) {\n return this.set('repoController.lineNumberHash', match[0]);\n }\n });\n },\n reload: function() {\n var url;\n url = this.get('location').getURL();\n this.transitionTo('loading');\n return this.route(url);\n },\n signedIn: function() {\n return !!Travis.app.get('auth.user');\n },\n needsAuth: function(path) {\n return path.indexOf('/profile') === 0;\n },\n afterSignOut: function() {\n return this.authorize('/');\n },\n loading: Ember.Route.extend({\n routePath: function(router, path) {\n router.saveLineNumberHash(path);\n router.authorize(path);\n if (!router.signedIn()) {\n return Travis.app.autoSignIn();\n }\n }\n }),\n authorize: function(path) {\n if (!this.signedIn() && this.needsAuth(path)) {\n Travis.app.storeAfterSignInPath(path);\n return this.transitionTo('root.auth');\n } else {\n this.transitionTo('root');\n return this.route(path);\n }\n },\n root: Ember.Route.extend({\n route: '/',\n loading: Ember.State.extend(),\n afterSignIn: (function() {}),\n auth: Ember.Route.extend({\n route: '/auth',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('authLayout');\n $('body').attr('id', 'auth');\n router.get('authLayoutController').connectOutlet('top', 'top');\n return router.get('authLayoutController').connectOutlet('main', 'signin');\n },\n afterSignIn: function(router, path) {\n return router.route(path || '/');\n }\n }),\n stats: Ember.Route.extend({\n route: '/stats',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('statsLayout');\n $('body').attr('id', 'stats');\n router.get('statsLayoutController').connectOutlet('top', 'top');\n return router.get('statsLayoutController').connectOutlet('main', 'stats');\n }\n }),\n profile: Ember.Route.extend({\n initialState: 'index',\n route: '/profile',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('profileLayout');\n $('body').attr('id', 'profile');\n router.get('accountsController').set('content', Travis.Account.find());\n router.get('profileLayoutController').connectOutlet('top', 'top');\n return router.get('profileLayoutController').connectOutlet('left', 'accounts');\n },\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n router.get('profileLayoutController').connectOutlet('main', 'profile');\n return router.get('profileController').activate('hooks');\n }\n }),\n account: Ember.Route.extend({\n initialState: 'index',\n route: '/:login',\n connectOutlets: function(router, account) {\n var params;\n if (account) {\n params = {\n login: account.get('login')\n };\n return router.get('profileController').setParams(params);\n } else {\n return router.send('showProfile');\n }\n },\n deserialize: function(router, params) {\n var account, controller, deferred, observer;\n controller = router.get('accountsController');\n if (!controller.get('content')) {\n controller.set('content', Travis.Account.find());\n }\n account = controller.findByLogin(params.login);\n if (account) {\n return account;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (account = controller.findByLogin(params.login)) {\n controller.removeObserver('content.length', observer);\n return deferred.resolve(account);\n }\n };\n controller.addObserver('content.length', observer);\n return deferred.promise();\n }\n },\n serialize: function(router, account) {\n if (account) {\n return {\n login: account.get('login')\n };\n } else {\n return {};\n }\n },\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('profileController').activate('hooks');\n }\n }),\n profile: Ember.Route.extend({\n route: '/profile',\n connectOutlets: function(router) {\n return router.get('profileController').activate('user');\n }\n })\n })\n }),\n home: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('homeLayout');\n $('body').attr('id', 'home');\n router.get('homeLayoutController').connectOutlet('left', 'repos');\n router.get('homeLayoutController').connectOutlet('right', 'sidebar');\n router.get('homeLayoutController').connectOutlet('top', 'top');\n router.get('homeLayoutController').connectOutlet('main', 'repo');\n router.get('homeLayoutController').connectOutlet('flash', 'flash');\n return router.get('repoController').set('repos', router.get('reposController'));\n },\n show: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('repoController').activate('index');\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n }),\n showWithLineNumber: Ember.Route.extend({\n route: '/#/L:number',\n connectOutlets: function(router) {\n return router.get('repoController').activate('index');\n }\n }),\n repo: Ember.Route.extend({\n route: '/:owner/:name',\n dynamicSegmentPattern: \"([^/#]+)\",\n connectOutlets: function(router, repo) {\n return router.get('repoController').set('repo', repo);\n },\n deserialize: function(router, params) {\n var deferred, observer, repos, slug;\n slug = \"\" + params.owner + \"/\" + params.name;\n repos = Travis.Repo.bySlug(slug);\n deferred = $.Deferred();\n observer = function() {\n if (repos.get('isLoaded')) {\n repos.removeObserver('isLoaded', observer);\n return deferred.resolve(repos.objectAt(0));\n }\n };\n if (repos.length) {\n deferred.resolve(repos[0]);\n } else {\n repos.addObserver('isLoaded', observer);\n }\n return deferred.promise();\n },\n serialize: function(router, repo) {\n if (repo) {\n return {\n owner: repo.get('owner'),\n name: repo.get('name')\n };\n } else {\n return {};\n }\n },\n show: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('repoController').activate('current');\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n }),\n builds: Ember.Route.extend({\n route: '/builds',\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('builds');\n }\n }),\n show: Ember.Route.extend({\n route: '/:build_id',\n connectOutlets: function(router, build) {\n if (!build.get) {\n build = Travis.Build.find(build);\n }\n router.get('repoController').set('build', build);\n return router.get('repoController').activate('build');\n },\n serialize: function(router, build) {\n if (build.get) {\n return {\n build_id: build.get('id')\n };\n } else {\n return {\n build_id: build\n };\n }\n },\n deserialize: function(router, params) {\n var build, deferred, observer;\n build = Travis.Build.find(params.build_id);\n if (build.get('id')) {\n return build;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (build.get('id')) {\n build.removeObserver('id', observer);\n return deferred.resolve(build);\n }\n };\n build.addObserver('id', observer);\n return deferred.promise();\n }\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute,\n dynamicSegmentPattern: \"([^/#]+)\"\n })\n }),\n pullRequests: Ember.Route.extend({\n route: '/pull_requests',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('pull_requests');\n }\n }),\n branches: Ember.Route.extend({\n route: '/branches',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('branches');\n }\n }),\n events: Ember.Route.extend({\n route: '/events',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('events');\n }\n }),\n job: Ember.Route.extend({\n route: '/jobs/:job_id',\n dynamicSegmentPattern: \"([^/#]+)\",\n connectOutlets: function(router, job) {\n if (!job.get) {\n job = Travis.Job.find(job);\n }\n router.get('repoController').set('job', job);\n return router.get('repoController').activate('job');\n },\n serialize: function(router, job) {\n if (job.get) {\n return {\n job_id: job.get('id')\n };\n } else {\n return {\n job_id: job\n };\n }\n },\n deserialize: function(router, params) {\n var deferred, job, observer;\n job = Travis.Job.find(params.job_id);\n if (job.get('id')) {\n return job;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (job.get('id')) {\n job.removeObserver('id', observer);\n return deferred.resolve(job);\n }\n };\n job.addObserver('id', observer);\n return deferred.promise();\n }\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n })\n })\n })\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=routes");minispade.register('slider', "(function() {(function() {\n\n this.Travis.Slider = function() {\n if ((typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.maximized') : void 0) === 'true') {\n this.minimize();\n }\n return this;\n };\n\n $.extend(Travis.Slider.prototype, {\n persist: function() {\n return typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.setItem('travis.maximized', this.isMinimized()) : void 0;\n },\n isMinimized: function() {\n return $('body').hasClass('maximized');\n },\n minimize: function() {\n return $('body').addClass('maximized');\n },\n toggle: function() {\n var element;\n $('body').toggleClass('maximized');\n this.persist();\n element = $('');\n $('#top .profile').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=slider");minispade.register('store', "(function() {(function() {\n var DATA_PROXY,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('store/rest_adapter');\n\n DATA_PROXY = {\n get: function(name) {\n return this.savedData[name];\n }\n };\n\n Travis.Store = DS.Store.extend({\n revision: 4,\n adapter: Travis.RestAdapter.create(),\n load: function(type, id, hash) {\n var record, result;\n result = this._super.apply(this, arguments);\n if (result && result.clientId) {\n record = this.findByClientId(type, result.clientId);\n record.set('incomplete', false);\n record.set('complete', true);\n }\n return result;\n },\n merge: function(type, id, hash) {\n var clientId, data, dataCache, primaryKey, record, recordCache, typeMap;\n if (hash === void 0) {\n hash = id;\n primaryKey = type.proto().primaryKey;\n Ember.assert(\"A data hash was loaded for a record of type \" + type.toString() + \" but no primary key '\" + primaryKey + \"' was provided.\", hash[primaryKey]);\n id = hash[primaryKey];\n }\n typeMap = this.typeMapFor(type);\n dataCache = typeMap.cidToHash;\n clientId = typeMap.idToCid[id];\n recordCache = this.get('recordCache');\n if (clientId !== void 0) {\n if (data = dataCache[clientId]) {\n $.extend(data, hash);\n } else {\n dataCache[clientId] = hash;\n }\n if (record = recordCache[clientId]) {\n record.send('didChangeData');\n }\n } else {\n clientId = this.pushHash(hash, id, type);\n }\n if (clientId) {\n DATA_PROXY.savedData = hash;\n this.updateRecordArrays(type, clientId, DATA_PROXY);\n return {\n id: id,\n clientId: clientId\n };\n }\n },\n receive: function(event, data) {\n var job, mappings, name, type, _ref;\n _ref = event.split(':'), name = _ref[0], type = _ref[1];\n mappings = this.adapter.get('mappings');\n type = mappings[name];\n if (event === 'job:log') {\n if (job = this.find(Travis.Job, data['job']['id'])) {\n return job.appendLog(data['job']['_log']);\n }\n } else if (data[type.singularName()]) {\n return this._loadOne(this, type, data);\n } else if (data[type.pluralName()]) {\n return this._loadMany(this, type, data);\n } else {\n if (!type) {\n throw \"can't load data for \" + name;\n }\n }\n },\n _loadOne: function(store, type, json) {\n var result, root;\n root = type.singularName();\n if (type === Travis.Build && json.repository) {\n result = this.loadIncomplete(Travis.Repo, json.repository);\n }\n return this.loadIncomplete(type, json[root]);\n },\n loadIncomplete: function(type, hash) {\n var record, result;\n result = this.merge(type, hash);\n if (result && result.clientId) {\n record = this.findByClientId(type, result.clientId);\n if (!record.get('complete')) {\n record.set('incomplete', true);\n record.loadedAttributes = Object.keys(hash);\n }\n this._updateAssociations(type, type.singularName(), hash);\n return record;\n }\n },\n _loadMany: function(store, type, json) {\n var root;\n root = type.pluralName();\n this.adapter.sideload(store, type, json, root);\n return this.loadMany(type, json[root]);\n },\n _updateAssociations: function(type, name, data) {\n var _this = this;\n return Em.get(type, 'associationsByName').forEach(function(key, meta) {\n var clientId, dataProxy, id, ids, parent, _ref;\n if (meta.kind === 'belongsTo') {\n id = data[\"\" + key + \"_id\"];\n if (clientId = _this.typeMapFor(meta.type).idToCid[id]) {\n if (parent = _this.findByClientId(meta.type, clientId, id)) {\n dataProxy = parent.get('data');\n if (ids = dataProxy.get(\"\" + name + \"_ids\")) {\n if (_ref = data.id, __indexOf.call(ids, _ref) < 0) {\n ids.pushObject(data.id);\n }\n return parent.send('didChangeData');\n }\n }\n }\n }\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n this.Travis.FixtureAdapter = DS.Adapter.extend({\n find: function(store, type, id) {\n var fixtures;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n if (fixtures.hasLoaded) {\n return;\n }\n return setTimeout((function() {\n store.loadMany(type, fixtures);\n return fixtures.hasLoaded = true;\n }), 300);\n },\n findMany: function() {\n return this.find.apply(this, arguments);\n },\n findAll: function(store, type) {\n var fixtures, ids;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n ids = fixtures.map(function(item, index, self) {\n return item.id;\n });\n return store.loadMany(type, ids, fixtures);\n },\n findQuery: function(store, type, params, array) {\n var fixture, fixtures, hashes, key, matches, value;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n hashes = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n fixture = fixtures[_i];\n matches = (function() {\n var _results1;\n _results1 = [];\n for (key in params) {\n value = params[key];\n _results1.push(key === 'orderBy' || fixture[key] === value);\n }\n return _results1;\n })();\n if (matches.reduce(function(a, b) {\n return a && b;\n })) {\n _results.push(fixture);\n } else {\n _results.push(null);\n }\n }\n return _results;\n })();\n return array.load(hashes.compact());\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('models');\n\n this.Travis.RestAdapter = DS.RESTAdapter.extend({\n mappings: {\n broadcasts: Travis.Broadcast,\n repositories: Travis.Repo,\n repository: Travis.Repo,\n repos: Travis.Repo,\n repo: Travis.Repo,\n builds: Travis.Build,\n build: Travis.Build,\n commits: Travis.Commit,\n commit: Travis.Commit,\n jobs: Travis.Job,\n job: Travis.Job,\n account: Travis.Account,\n accounts: Travis.Account,\n worker: Travis.Worker,\n workers: Travis.Worker\n },\n plurals: {\n repositories: 'repositories',\n repository: 'repositories',\n repo: 'repos',\n repos: 'repos',\n build: 'builds',\n branch: 'branches',\n job: 'jobs',\n worker: 'workers',\n profile: 'profile'\n },\n ajax: function() {\n return Travis.ajax.ajax.apply(this, arguments);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('tailing', "(function() {(function() {\n\n this.Travis.Tailing = function() {\n this.position = $(window).scrollTop();\n $(window).scroll(this.onScroll.bind(this));\n return this;\n };\n\n $.extend(Travis.Tailing.prototype, {\n options: {\n timeout: 200\n },\n run: function() {\n this.autoScroll();\n this.positionButton();\n if (this.active()) {\n return Ember.run.later(this.run.bind(this), this.options.timeout);\n }\n },\n toggle: function(event) {\n if (this.active()) {\n return this.stop();\n } else {\n return this.start();\n }\n },\n active: function() {\n return $('#tail').hasClass('active');\n },\n start: function() {\n $('#tail').addClass('active');\n return this.run();\n },\n stop: function() {\n return $('#tail').removeClass('active');\n },\n autoScroll: function() {\n var log, logBottom, win, winBottom;\n if (!this.active()) {\n return;\n }\n win = $(window);\n log = $('#log');\n logBottom = log.offset().top + log.outerHeight() + 40;\n winBottom = win.scrollTop() + win.height();\n if (logBottom - winBottom > 0) {\n return win.scrollTop(logBottom - win.height());\n }\n },\n onScroll: function() {\n var position;\n this.positionButton();\n position = $(window).scrollTop();\n if (position < this.position) {\n this.stop();\n }\n return this.position = position;\n },\n positionButton: function() {\n var max, offset, tail;\n tail = $('#tail');\n if (tail.length === 0) {\n return;\n }\n offset = $(window).scrollTop() - $('#log').offset().top;\n max = $('#log').height() - $('#tail').height() + 5;\n if (offset > max) {\n offset = max;\n }\n if (offset > 0) {\n return tail.css({\n top: offset - 2\n });\n } else {\n return tail.css({\n top: 0\n });\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=tailing");minispade.register('views', "(function() {(function() {\nminispade.require('ext/ember/namespace');\n\n this.Travis.reopen({\n View: Em.View.extend({\n popup: function(event) {\n this.popupCloseAll();\n return $(\"#\" + event.target.name).toggleClass('display');\n },\n popupClose: function(event) {\n return $(event.target).closest('.popup').removeClass('display');\n },\n popupCloseAll: function() {\n return $('.popup').removeClass('display');\n }\n })\n });\n\n this.Travis.reopen({\n HomeLayoutView: Travis.View.extend({\n templateName: 'layouts/home'\n }),\n AuthLayoutView: Travis.View.extend({\n templateName: 'layouts/simple'\n }),\n ProfileLayoutView: Travis.View.extend({\n templateName: 'layouts/profile'\n }),\n StatsLayoutView: Travis.View.extend({\n templateName: 'layouts/simple'\n })\n });\nminispade.require('views/accounts');\nminispade.require('views/application');\nminispade.require('views/build');\nminispade.require('views/events');\nminispade.require('views/flash');\nminispade.require('views/job');\nminispade.require('views/repo');\nminispade.require('views/profile');\nminispade.require('views/sidebar');\nminispade.require('views/stats');\nminispade.require('views/signin');\nminispade.require('views/top');\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('views/accounts', "(function() {(function() {\n\n this.Travis.reopen({\n AccountsView: Travis.View.extend({\n tabBinding: 'controller.tab',\n templateName: 'profile/accounts',\n classAccounts: (function() {\n if (this.get('tab') === 'accounts') {\n return 'active';\n }\n }).property('tab')\n }),\n AccountsListView: Em.CollectionView.extend({\n elementId: 'accounts',\n accountBinding: 'content',\n tagName: 'ul',\n emptyView: Ember.View.extend({\n template: Ember.Handlebars.compile('
Loading')\n }),\n itemViewClass: Travis.View.extend({\n accountBinding: 'content',\n typeBinding: 'content.type',\n selectedBinding: 'account.selected',\n classNames: ['account'],\n classNameBindings: ['type', 'selected'],\n name: (function() {\n return this.get('content.name') || this.get('content.login');\n }).property('content.login', 'content.name'),\n urlAccount: (function() {\n return Travis.Urls.account(this.get('account.login'));\n }).property('account.login')\n })\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/accounts");minispade.register('views/application', "(function() {(function() {\n\n this.Travis.reopen({\n ApplicationView: Travis.View.extend({\n templateName: 'application',\n classNames: ['application'],\n localeDidChange: (function() {\n var locale;\n if (locale = Travis.app.get('auth.user.locale')) {\n Travis.setLocale(locale);\n return Travis.app.get('router').reload();\n }\n }).observes('Travis.app.auth.user.locale'),\n click: function(event) {\n var targetAndParents;\n targetAndParents = $(event.target).parents().andSelf();\n if (!(targetAndParents.hasClass('open-popup') || targetAndParents.hasClass('popup'))) {\n this.popupCloseAll();\n }\n if (!targetAndParents.hasClass('menu')) {\n return $('.menu').removeClass('display');\n }\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/application");minispade.register('views/build', "(function() {(function() {\n\n this.Travis.reopen({\n BuildsView: Travis.View.extend({\n templateName: 'builds/list',\n buildsBinding: 'controller.builds',\n showMore: function() {\n var id, number;\n id = this.get('controller.repo.id');\n number = this.get('builds.lastObject.number');\n return this.get('builds').load(Travis.Build.olderThanNumber(id, number));\n },\n ShowMoreButton: Em.View.extend({\n tagName: 'button',\n classNameBindings: ['isLoading'],\n attributeBindings: ['disabled'],\n isLoadingBinding: 'controller.builds.isLoading',\n template: Em.Handlebars.compile('{{view.label}}'),\n disabledBinding: 'isLoading',\n label: (function() {\n if (this.get('isLoading')) {\n return 'Loading';\n } else {\n return 'Show more';\n }\n }).property('isLoading'),\n click: function() {\n return this.get('parentView').showMore();\n }\n })\n }),\n BuildsItemView: Travis.View.extend({\n tagName: 'tr',\n classNameBindings: ['color'],\n repoBinding: 'controller.repo',\n buildBinding: 'context',\n commitBinding: 'build.commit',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('build.result'));\n }).property('build.result'),\n urlBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n }).property('repo.slug', 'build.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha')\n }),\n BuildView: Travis.View.extend({\n templateName: 'builds/show',\n elementId: 'build',\n classNameBindings: ['color', 'loading'],\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n commitBinding: 'build.commit',\n currentItemBinding: 'build',\n loading: (function() {\n return !this.get('build.isComplete');\n }).property('build.isComplete'),\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('build.result'));\n }).property('build.result'),\n urlBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n }).property('repo.slug', 'build.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha'),\n urlAuthor: (function() {\n return Travis.Urls.email(this.get('commit.authorEmail'));\n }).property('commit.authorEmail'),\n urlCommitter: (function() {\n return Travis.Urls.email(this.get('commit.committerEmail'));\n }).property('commit.committerEmail')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/build");minispade.register('views/events', "(function() {(function() {\n\n this.Travis.reopen({\n EventsView: Travis.View.extend({\n templateName: 'events/list',\n eventsBinding: 'controller.events'\n }),\n EventsItemView: Travis.View.extend({\n tagName: 'tr'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/events");minispade.register('views/flash', "(function() {(function() {\n\n this.Travis.reopen({\n FlashView: Travis.View.extend({\n elementId: 'flash',\n tagName: 'ul',\n templateName: 'layouts/flash'\n }),\n FlashItemView: Travis.View.extend({\n tagName: 'li',\n classNameBindings: ['type'],\n type: (function() {\n return this.get('flash.type') || 'broadcast';\n }).property('flash.type'),\n close: function(event) {\n return this.get('controller').close(this.get('flash'));\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/flash");minispade.register('views/job', "(function() {(function() {\n\n this.Travis.reopen({\n JobsView: Travis.View.extend({\n templateName: 'jobs/list',\n buildBinding: 'controller.build'\n }),\n JobsItemView: Travis.View.extend({\n tagName: 'tr',\n classNameBindings: ['color'],\n repoBinding: 'context.repo',\n jobBinding: 'context',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('job.result'));\n }).property('job.result'),\n urlJob: (function() {\n return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n }).property('repo.slug', 'job.id')\n }),\n JobView: Travis.View.extend({\n templateName: 'jobs/show',\n repoBinding: 'controller.repo',\n jobBinding: 'controller.job',\n commitBinding: 'job.commit',\n currentItemBinding: 'job',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('job.result'));\n }).property('job.result'),\n urlJob: (function() {\n return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n }).property('repo.slug', 'job.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha'),\n urlAuthor: (function() {\n return Travis.Urls.email(this.get('commit.authorEmail'));\n }).property('commit.authorEmail'),\n urlCommitter: (function() {\n return Travis.Urls.email(this.get('commit.committerEmail'));\n }).property('commit.committerEmail')\n }),\n LogView: Travis.View.extend({\n templateName: 'jobs/log',\n logBinding: 'job.log',\n scrollTo: function(hash) {\n var currentScroll;\n $('#main').scrollTop(0);\n currentScroll = $('.application > div').scrollTop();\n $('.application > div').scrollTop($(hash).offset().top + currentScroll - 40);\n return this.set('controller.lineNumberHash', null);\n },\n lineNumberHashDidChange: (function() {\n return this.tryScrollingToHashLineNumber();\n }).observes('controller.lineNumberHash'),\n tryScrollingToHashLineNumber: function() {\n var checker, hash, self;\n if (hash = this.get('controller.lineNumberHash')) {\n self = this;\n checker = function() {\n if (self.get('isDestroyed')) {\n return;\n }\n if ($(hash).length) {\n return self.scrollTo(hash);\n } else {\n return setTimeout(checker, 100);\n }\n };\n return checker();\n }\n },\n didInsertElement: function() {\n this._super.apply(this, arguments);\n return this.tryScrollingToHashLineNumber();\n },\n click: function(event) {\n var path, target;\n target = $(event.target);\n target.closest('.fold').toggleClass('open');\n if (target.is('.log-line-number')) {\n path = target.attr('href');\n Travis.app.get('router').route(path);\n event.stopPropagation();\n return false;\n }\n },\n toTop: function() {\n return $(window).scrollTop(0);\n },\n jobBinding: 'context',\n toggleTailing: function(event) {\n Travis.app.tailing.toggle();\n return event.preventDefault();\n },\n logSubscriber: (function() {\n var job, state;\n job = this.get('job');\n state = this.get('job.state');\n if (job && state !== 'finished') {\n job.subscribe();\n }\n return null;\n }).property('job', 'job.state')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/job");minispade.register('views/left', "(function() {(function() {\n\n this.Travis.reopen({\n ReposView: Travis.View.extend({\n templateName: 'repos/list',\n tabBinding: 'controller.tab',\n classRecent: (function() {\n if (this.get('tab') === 'recent') {\n return 'active';\n }\n }).property('tab'),\n classOwned: (function() {\n var classes;\n classes = [];\n if (this.get('tab') === 'owned') {\n classes.push('active');\n }\n if (Travis.app.get('currentUser')) {\n classes.push('display');\n }\n return classes.join(' ');\n }).property('tab', 'Travis.currentUser'),\n classSearch: (function() {\n if (this.get('tab') === 'search') {\n return 'active';\n }\n }).property('tab')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/left");minispade.register('views/profile', "(function() {(function() {\n\n this.Travis.reopen({\n ProfileView: Travis.View.extend({\n templateName: 'profile/show',\n accountBinding: 'controller.account',\n name: (function() {\n return this.get('account.name') || this.get('account.login');\n }).property('account.name', 'account.login')\n }),\n ProfileTabsView: Travis.View.extend({\n templateName: 'profile/tabs',\n tabBinding: 'controller.tab',\n activate: function(event) {\n return this.get('controller').activate(event.target.name);\n },\n classHooks: (function() {\n if (this.get('tab') === 'hooks') {\n return 'active';\n }\n }).property('tab'),\n classUser: (function() {\n if (this.get('tab') === 'user') {\n return 'active';\n }\n }).property('tab'),\n accountBinding: 'controller.account',\n displayUser: (function() {\n return this.get('controller.account.login') === this.get('controller.user.login');\n }).property('controller.account.login', 'controller.user.login')\n }),\n HooksView: Travis.View.extend({\n templateName: 'profile/tabs/hooks',\n userBinding: 'controller.user',\n urlGithubAdmin: (function() {\n return Travis.Urls.githubAdmin(this.get('hook.slug'));\n }).property('hook.slug')\n }),\n UserView: Travis.View.extend({\n templateName: 'profile/tabs/user',\n userBinding: 'controller.user',\n gravatarUrl: (function() {\n return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=48&d=mm\";\n }).property('user.gravatarId'),\n locales: (function() {\n return [\n {\n key: null,\n name: ''\n }, {\n key: 'en',\n name: 'English'\n }, {\n key: 'ca',\n name: 'Catalan'\n }, {\n key: 'cs',\n name: 'Čeština'\n }, {\n key: 'es',\n name: 'Español'\n }, {\n key: 'fr',\n name: 'Français'\n }, {\n key: 'ja',\n name: '日本語'\n }, {\n key: 'nl',\n name: 'Nederlands'\n }, {\n key: 'nb',\n name: 'Norsk Bokmål'\n }, {\n key: 'pl',\n name: 'Polski'\n }, {\n key: {\n 'pt-BR': {\n name: 'Português brasileiro'\n }\n }\n }, {\n key: 'ru',\n name: 'Русский'\n }\n ];\n }).property(),\n saveLocale: function(event) {\n return this.get('user').updateLocale($('#locale').val());\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/profile");minispade.register('views/repo', "(function() {(function() {\nminispade.require('views/repo/list');\nminispade.require('views/repo/show');\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo");minispade.register('views/repo/list', "(function() {(function() {\n\n this.Travis.reopen({\n ReposView: Travis.View.extend({\n templateName: 'repos/list',\n toggleInfo: function(event) {\n return $('#repos').toggleClass('open');\n }\n }),\n ReposListView: Em.CollectionView.extend({\n elementId: 'repos',\n tagName: 'ul',\n emptyView: Ember.View.extend({\n template: Ember.Handlebars.compile('Loading')\n }),\n itemViewClass: Travis.View.extend({\n repoBinding: 'content',\n classNames: ['repo'],\n classNameBindings: ['color', 'selected'],\n selectedBinding: 'repo.selected',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('repo.lastBuildResult'));\n }).property('repo.lastBuildResult'),\n urlRepo: (function() {\n return Travis.Urls.repo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlLastBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('repo.lastBuildId'));\n }).property('repo.slug', 'repo.lastBuildId')\n })\n }),\n ReposListTabsView: Travis.View.extend({\n templateName: 'repos/list/tabs',\n tabBinding: 'controller.tab',\n activate: function(event) {\n return this.get('controller').activate(event.target.name);\n },\n classRecent: (function() {\n if (this.get('tab') === 'recent') {\n return 'active';\n }\n }).property('tab'),\n classOwned: (function() {\n var classes;\n classes = [];\n if (this.get('tab') === 'owned') {\n classes.push('active');\n }\n if (Travis.app.get('currentUser')) {\n classes.push('display-inline');\n }\n return classes.join(' ');\n }).property('tab', 'Travis.app.currentUser'),\n classSearch: (function() {\n if (this.get('tab') === 'search') {\n return 'active';\n }\n }).property('tab')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/list");minispade.register('views/repo/show', "(function() {(function() {\n\n this.Travis.reopen({\n RepoView: Travis.View.extend({\n templateName: 'repos/show',\n reposBinding: 'controller.repos',\n repoBinding: 'controller.repo',\n \"class\": (function() {\n if (!this.get('repo.isComplete') && !this.get('isEmpty')) {\n return 'loading';\n }\n }).property('repo.isComplete'),\n isEmpty: (function() {\n return this.get('repos.isLoaded') && this.get('repos.length') === 0;\n }).property('repos.length'),\n urlGithub: (function() {\n return Travis.Urls.githubRepo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlGithubWatchers: (function() {\n return Travis.Urls.githubWatchers(this.get('repo.slug'));\n }).property('repo.slug'),\n urlGithubNetwork: (function() {\n return Travis.Urls.githubNetwork(this.get('repo.slug'));\n }).property('repo.slug')\n }),\n ReposEmptyView: Travis.View.extend({\n template: ''\n }),\n RepoShowTabsView: Travis.View.extend({\n templateName: 'repos/show/tabs',\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n jobBinding: 'controller.job',\n tabBinding: 'controller.tab',\n classCurrent: (function() {\n if (this.get('tab') === 'current') {\n return 'active';\n }\n }).property('tab'),\n classBuilds: (function() {\n if (this.get('tab') === 'builds') {\n return 'active';\n }\n }).property('tab'),\n classPullRequests: (function() {\n if (this.get('tab') === 'pull_requests') {\n return 'active';\n }\n }).property('tab'),\n classBranches: (function() {\n if (this.get('tab') === 'branches') {\n return 'active';\n }\n }).property('tab'),\n classEvents: (function() {\n if (this.get('tab') === 'events') {\n return 'active';\n }\n }).property('tab'),\n classBuild: (function() {\n var classes, tab;\n tab = this.get('tab');\n classes = [];\n if (tab === 'build') {\n classes.push('active');\n }\n if (tab === 'build' || tab === 'job') {\n classes.push('display-inline');\n }\n return classes.join(' ');\n }).property('tab'),\n classJob: (function() {\n if (this.get('tab') === 'job') {\n return 'active display-inline';\n }\n }).property('tab')\n }),\n RepoShowToolsView: Travis.View.extend({\n templateName: 'repos/show/tools',\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n jobBinding: 'controller.job',\n tabBinding: 'controller.tab',\n closeMenu: function() {\n return $('.menu').removeClass('display');\n },\n menu: function(event) {\n var element;\n this.popupCloseAll();\n element = $('#tools .menu').toggleClass('display');\n return event.stopPropagation();\n },\n requeue: function() {\n this.closeMenu();\n return this.get('build').requeue();\n },\n statusImages: function(event) {\n this.set('active', true);\n this.closeMenu();\n this.popup(event);\n return event.stopPropagation();\n },\n canPush: (function() {\n return this.get('isBuildTab') && this.get('build.isFinished') && this.get('hasPushPermissions');\n }).property('build.isFinished', 'hasPushPermissions', 'isBuildTab'),\n isBuildTab: (function() {\n return ['current', 'build', 'job'].indexOf(this.get('tab')) > -1;\n }).property('tab'),\n hasPushPermissions: (function() {\n var permissions;\n if (permissions = Travis.app.get('currentUser.permissions')) {\n return permissions.indexOf(this.get('repo.id')) > -1;\n }\n }).property('Travis.app.currentUser.permissions.length', 'repo.id'),\n branches: (function() {\n if (this.get('active')) {\n return this.get('repo.branches');\n }\n }).property('active', 'repo.branches'),\n urlRepo: (function() {\n return 'https://' + location.host + Travis.Urls.repo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlStatusImage: (function() {\n return Travis.Urls.statusImage(this.get('repo.slug'), this.get('branch.commit.branch'));\n }).property('repo.slug', 'branch'),\n markdownStatusImage: (function() {\n return \"[) + \")](\" + (this.get('urlRepo')) + \")\";\n }).property('urlStatusImage'),\n textileStatusImage: (function() {\n return \"!\" + (this.get('urlStatusImage')) + \"!:\" + (this.get('urlRepo'));\n }).property('urlStatusImage'),\n rdocStatusImage: (function() {\n return \"{}[\" + (this.get('urlRepo')) + \"]\";\n }).property('urlStatusImage')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/show");minispade.register('views/sidebar', "(function() {(function() {\n\n this.Travis.reopen({\n SidebarView: Travis.View.extend({\n templateName: 'layouts/sidebar',\n DecksView: Em.View.extend({\n templateName: \"sponsors/decks\",\n controller: Travis.SponsorsController.create({\n perPage: 1\n }),\n didInsertElement: function() {\n var controller;\n controller = this.get('controller');\n if (!controller.get('content')) {\n Travis.app.get('router.sidebarController').tickables.push(controller);\n controller.set('content', Travis.Sponsor.decks());\n }\n return this._super.apply(this, arguments);\n }\n }),\n LinksView: Em.View.extend({\n templateName: \"sponsors/links\",\n controller: Travis.SponsorsController.create({\n perPage: 6\n }),\n didInsertElement: function() {\n var controller;\n controller = this.get('controller');\n if (!controller.get('content')) {\n controller.set('content', Travis.Sponsor.links());\n Travis.app.get('router.sidebarController').tickables.push(controller);\n }\n return this._super.apply(this, arguments);\n }\n }),\n WorkersView: Em.View.extend({\n templateName: 'workers/list',\n controller: Travis.WorkersController.create(),\n didInsertElement: function() {\n this.set('controller.content', Travis.Worker.find());\n return this._super.apply(this, arguments);\n }\n }),\n QueuesView: Em.View.extend({\n templateName: 'queues/list',\n controller: Em.ArrayController.create(),\n didInsertElement: function() {\n var queue, queues;\n queues = (function() {\n var _i, _len, _ref, _results;\n _ref = Travis.QUEUES;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n queue = _ref[_i];\n _results.push(Em.ArrayController.create({\n content: Travis.Job.queued(queue.name),\n id: \"queue_\" + queue.name,\n name: queue.display\n }));\n }\n return _results;\n })();\n this.set('controller.content', queues);\n return this._super.apply(this, arguments);\n }\n })\n }),\n WorkersView: Travis.View.extend({\n toggleWorkers: function(event) {\n var handle;\n handle = $(event.target).toggleClass('open');\n if (handle.hasClass('open')) {\n return $('#workers li').addClass('open');\n } else {\n return $('#workers li').removeClass('open');\n }\n }\n }),\n WorkersListView: Travis.View.extend({\n toggle: function(event) {\n return $(event.target).closest('li').toggleClass('open');\n }\n }),\n WorkersItemView: Travis.View.extend({\n display: (function() {\n var name, number, payload, repo, state;\n name = (this.get('worker.name') || '').replace('travis-', '');\n state = this.get('worker.state');\n payload = this.get('worker.payload');\n if (state === 'working' && (payload != null ? payload.repository : void 0) && (payload != null ? payload.build : void 0)) {\n repo = payload.repository.slug;\n number = ' #' + payload.build.number;\n return (\"\" + name + \": \" + repo + \" \" + number).htmlSafe();\n } else {\n return \"\" + name + \": \" + state;\n }\n }).property('worker.state')\n }),\n QueueItemView: Travis.View.extend({\n tagName: 'li'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/sidebar");minispade.register('views/signin', "(function() {(function() {\n\n this.Travis.reopen({\n SigninView: Travis.View.extend({\n templateName: 'auth/signin',\n signingIn: (function() {\n return Travis.app.get('authState') === 'signing-in';\n }).property('Travis.app.authState')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/signin");minispade.register('views/stats', "(function() {(function() {\n\n this.Travis.reopen({\n StatsView: Travis.View.extend({\n templateName: 'stats/show',\n didInsertElement: function() {},\n renderChart: function(config) {\n var chart;\n chart = new Highcharts.Chart(config);\n return this.fetch(config.source, function(data) {\n var stats;\n stats = (function() {\n var _i, _len, _ref, _results;\n _ref = data.stats;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n stats = _ref[_i];\n _results.push(config.map(stats));\n }\n return _results;\n })();\n return chart.series[0].setData(stats);\n });\n },\n fetch: function(url, callback) {\n return $.ajax({\n type: 'GET',\n url: url,\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n },\n success: callback\n });\n },\n CHARTS: {\n repos: {\n source: '/api/stats/repos',\n total: 0,\n map: function(data) {\n return [Date.parse(data.date), this.total += parseInt(data.count)];\n },\n chart: {\n renderTo: \"repos_stats\"\n },\n title: {\n text: \"Total Projects/Repositories\"\n },\n xAxis: {\n type: \"datetime\",\n dateTimeLabelFormats: {\n month: \"%e. %b\",\n year: \"%b\"\n }\n },\n yAxis: {\n title: {\n text: \"Count\"\n },\n min: 0\n },\n tooltip: {\n formatter: function() {\n return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" repos\";\n }\n },\n series: [\n {\n name: \"Repository Growth\",\n data: []\n }\n ]\n },\n builds: {\n source: '/api/stats/tests',\n map: function(data) {\n return [Date.parse(data.date), parseInt(data.count)];\n },\n chart: {\n renderTo: \"tests_stats\",\n type: \"column\"\n },\n title: {\n text: \"Build Count\"\n },\n subtitle: {\n text: \"last month\"\n },\n xAxis: {\n type: \"datetime\",\n dateTimeLabelFormats: {\n month: \"%e. %b\",\n year: \"%b\"\n }\n },\n yAxis: {\n title: {\n text: \"Count\"\n },\n min: 0\n },\n tooltip: {\n formatter: function() {\n return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" builds\";\n }\n },\n series: [\n {\n name: \"Total Builds\",\n data: []\n }\n ]\n }\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/stats");minispade.register('views/top', "(function() {(function() {\n\n this.Travis.reopen({\n TopView: Travis.View.extend({\n templateName: 'layouts/top',\n tabBinding: 'controller.tab',\n userBinding: 'controller.user',\n gravatarUrl: (function() {\n return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=24&d=mm\";\n }).property('user.gravatarId'),\n classHome: (function() {\n if (this.get('tab') === 'home') {\n return 'active';\n }\n }).property('tab'),\n classStats: (function() {\n if (this.get('tab') === 'stats') {\n return 'active';\n }\n }).property('tab'),\n classProfile: (function() {\n var classes;\n classes = ['profile'];\n if (this.get('tab') === 'profile') {\n classes.push('active');\n }\n classes.push(Travis.app.get('authState'));\n return classes.join(' ');\n }).property('tab', 'Travis.app.authState'),\n showProfile: function() {\n return $('#top .profile ul').show();\n },\n hideProfile: function() {\n return $('#top .profile ul').hide();\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/top");minispade.register('config/emoij', "(function() {(function() {\n\n this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=config/emoij");minispade.register('data/sponsors', "(function() {(function() {\n\n this.Travis.SPONSORS = [\n {\n type: 'platinum',\n url: \"http://www.wooga.com\",\n image: \"wooga-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://bendyworks.com\",\n image: \"bendyworks-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://cloudcontrol.com\",\n image: \"cloudcontrol-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://xing.de\",\n image: \"xing-205x130.png\"\n }, {\n type: 'gold',\n url: \"http://heroku.com\",\n image: \"heroku-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://soundcloud.com\",\n image: \"soundcloud-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://nedap.com\",\n image: \"nedap-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://mongohq.com\",\n image: \"mongohq-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://zweitag.de\",\n image: \"zweitag-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://kanbanery.com\",\n image: \"kanbanery-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://ticketevolution.com\",\n image: \"ticketevolution-205x60.jpg\"\n }, {\n type: 'gold',\n url: \"http://plan.io/travis\",\n image: \"planio-205x60.png\"\n }, {\n type: 'silver',\n link: \"Cobot: The one tool to run your coworking space\"\n }, {\n type: 'silver',\n link: \"JumpstartLab: We build developers\"\n }, {\n type: 'silver',\n link: \"Evil Martians: Agile Ruby on Rails development\"\n }, {\n type: 'silver',\n link: \"Zendesk: Love your helpdesk\"\n }, {\n type: 'silver',\n link: \"Stripe: Payments for developers\"\n }, {\n type: 'silver',\n link: \"Basho: We make Riak!\"\n }, {\n type: 'silver',\n link: \"Relevance: We deliver software solutions\"\n }, {\n type: 'silver',\n link: \"Mindmatters: Software für Menschen\"\n }, {\n type: 'silver',\n link: \"Amen: The best and worst of everything\"\n }, {\n type: 'silver',\n link: \"Site5: Premium Web Hosting Solutions\"\n }, {\n type: 'silver',\n link: \"Crowd Interactive: Leading Rails consultancy in Mexico\"\n }, {\n type: 'silver',\n link: \"Atomic Object: Work with really smart people\"\n }, {\n type: 'silver',\n link: \"Codeminer: smart services for your startup\"\n }, {\n type: 'silver',\n link: \"Cloudant: grow into your data layer, not out of it\"\n }, {\n type: 'silver',\n link: \"Gidsy: Explore, organize & book unique things to do!\"\n }, {\n type: 'silver',\n link: \"5apps: Package & deploy HTML5 apps automatically\"\n }, {\n type: 'silver',\n link: \"Meltmedia: We are Interactive Superheroes\"\n }, {\n type: 'silver',\n link: \"Fingertips offers design and development services\"\n }, {\n type: 'silver',\n link: \"Engine Yard: Build epic apps, let us handle the rest\"\n }, {\n type: 'silver',\n link: \"Malwarebytes: Defeat Malware once and for all.\"\n }, {\n type: 'silver',\n link: \"Readmill: The best reading app on the iPad.\"\n }, {\n type: 'silver',\n link: \"Medidata: clinical tech improving quality of life\"\n }, {\n type: 'silver',\n link: \"ESM: Japan's best agile Ruby/Rails consultancy\"\n }, {\n type: 'silver',\n link: \"Twitter: instantly connects people everywhere\"\n }, {\n type: 'silver',\n link: \"AGiLE ANiMAL: we <3 Travis CI.\"\n }, {\n type: 'silver',\n link: \"Tupalo: Discover, review & share local businesses.\"\n }\n ];\n\n this.Travis.WORKERS = {\n \"jvm-otp1.worker.travis-ci.org\": {\n name: \"Travis Pro\",\n url: \"http://travis-ci.com\"\n },\n \"jvm-otp2.worker.travis-ci.org\": {\n name: \"Transloadit\",\n url: \"http://transloadit.com\"\n },\n \"ppp1.worker.travis-ci.org\": {\n name: \"Travis Pro\",\n url: \"http://beta.travis-ci.com\"\n },\n \"ppp2.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ppp3.worker.travis-ci.org\": {\n name: \"Alchemy CMS\",\n url: \"http://alchemy-cms.com/\"\n },\n \"rails1.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ruby1.worker.travis-ci.org\": {\n name: \"Engine Yard\",\n url: \"http://www.engineyard.com\"\n },\n \"ruby2.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ruby3.worker.travis-ci.org\": {\n name: \"Railslove\",\n url: \"http://railslove.de\"\n },\n \"ruby4.worker.travis-ci.org\": {\n name: \"Engine Yard\",\n url: \"http://www.engineyard.com\"\n },\n \"spree.worker.travis-ci.org\": {\n name: \"Spree\",\n url: \"http://spreecommerce.com\"\n },\n \"staging.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=data/sponsors");minispade.register('ext/jquery', "(function() {(function() {\n\n $.fn.extend({\n outerHtml: function() {\n return $(this).wrap('').parent().html();\n },\n outerElement: function() {\n return $($(this).outerHtml()).empty();\n },\n flash: function() {\n return Utils.flash(this);\n },\n unflash: function() {\n return Utils.unflash(this);\n },\n filterLog: function() {\n this.deansi();\n return this.foldLog();\n },\n deansi: function() {\n return this.html(Utils.deansi(this.html()));\n },\n foldLog: function() {\n return this.html(Utils.foldLog(this.html()));\n },\n unfoldLog: function() {\n return this.html(Utils.unfoldLog(this.html()));\n },\n updateTimes: function() {\n return Utils.updateTimes(this);\n },\n activateTab: function(tab) {\n return Utils.activateTab(this, tab);\n },\n timeInWords: function() {\n return $(this).each(function() {\n return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n });\n },\n updateGithubStats: function(repo) {\n return Utils.updateGithubStats(repo, $(this));\n }\n });\n\n $.extend({\n isEmpty: function(obj) {\n if ($.isArray(obj)) {\n return !obj.length;\n } else if ($.isObject(obj)) {\n return !$.keys(obj).length;\n } else {\n return !obj;\n }\n },\n isObject: function(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n },\n keys: function(obj) {\n var keys;\n keys = [];\n $.each(obj, function(key) {\n return keys.push(key);\n });\n return keys;\n },\n values: function(obj) {\n var values;\n values = [];\n $.each(obj, function(key, value) {\n return values.push(value);\n });\n return values;\n },\n underscore: function(string) {\n return string[0].toLowerCase() + string.substring(1).replace(/([A-Z])?/g, function(match, chr) {\n if (chr) {\n return \"_\" + (chr.toUpperCase());\n } else {\n return '';\n }\n });\n },\n camelize: function(string, uppercase) {\n string = uppercase === false ? $.underscore(string) : $.capitalize(string);\n return string.replace(/_(.)?/g, function(match, chr) {\n if (chr) {\n return chr.toUpperCase();\n } else {\n return '';\n }\n });\n },\n capitalize: function(string) {\n return string[0].toUpperCase() + string.substring(1);\n },\n compact: function(object) {\n return $.grep(object, function(value) {\n return !!value;\n });\n },\n all: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return false;\n }\n i++;\n }\n return true;\n },\n detect: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return array[i];\n }\n i++;\n }\n },\n select: function(array, callback) {\n var args, i, result;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n result = [];\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n result.push(array[i]);\n }\n i++;\n }\n return result;\n },\n slice: function(object, key) {\n var keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) > -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n only: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) !== -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n except: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) === -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n intersect: function(array, other) {\n return array.filter(function(element) {\n return other.indexOf(element) !== -1;\n });\n },\n map: function(elems, callback, arg) {\n var i, isArray, key, length, ret, value;\n value = void 0;\n key = void 0;\n ret = [];\n i = 0;\n length = elems.length;\n isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n if (isArray) {\n while (i < length) {\n value = callback(elems[i], i, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n i++;\n }\n } else {\n for (key in elems) {\n value = callback(elems[key], key, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n }\n }\n return ret.concat.apply([], ret);\n },\n shuffle: function(array) {\n var current, tmp, top;\n array = array.slice();\n top = array.length;\n while (top && --top) {\n current = Math.floor(Math.random() * (top + 1));\n tmp = array[current];\n array[current] = array[top];\n array[top] = tmp;\n }\n return array;\n },\n truncate: function(string, length) {\n if (string.length > length) {\n return string.trim().substring(0, length) + '...';\n } else {\n return string;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('travis/ajax', "(function() {(function() {\n\n jQuery.support.cors = true;\n\n this.Travis.ajax = Em.Object.create({\n DEFAULT_OPTIONS: {\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n },\n get: function(url, callback) {\n return this.ajax(url, 'get', {\n success: callback\n });\n },\n post: function(url, data, callback) {\n return this.ajax(url, 'post', {\n data: data,\n success: callback\n });\n },\n ajax: function(url, method, options) {\n var endpoint, success, token, _base,\n _this = this;\n endpoint = Travis.config.api_endpoint || '';\n options = options || {};\n if (token = sessionStorage.getItem('travis.token')) {\n options.headers || (options.headers = {});\n (_base = options.headers)['Authorization'] || (_base['Authorization'] = \"token \" + token);\n }\n options.url = \"\" + endpoint + url;\n options.type = method;\n options.dataType = 'json';\n options.contentType = 'application/json; charset=utf-8';\n options.context = this;\n if (options.data && method !== 'GET' && method !== 'get') {\n options.data = JSON.stringify(options.data);\n }\n success = options.success || (function() {});\n options.success = function(data) {\n var _ref;\n if (((_ref = Travis.app) != null ? _ref.router : void 0) && data.flash) {\n Travis.app.router.flashController.loadFlashes(data.flash);\n }\n delete data.flash;\n return success.call(_this, data);\n };\n options.error = function(data) {\n if (data.flash) {\n return Travis.app.router.flashController.pushObject(data.flash);\n }\n };\n return $.ajax($.extend(options, Travis.ajax.DEFAULT_OPTIONS));\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ajax");minispade.register('travis/expandable_record_array', "(function() {(function() {\n\n Travis.ExpandableRecordArray = DS.RecordArray.extend({\n isLoaded: false,\n isLoading: false,\n load: function(array) {\n var observer, self;\n this.set('isLoading', true);\n self = this;\n observer = function() {\n var content;\n if (this.get('isLoaded')) {\n content = self.get('content');\n array.removeObserver('isLoaded', observer);\n array.forEach(function(record) {\n return self.pushObject(record);\n });\n self.set('isLoading', false);\n return self.set('isLoaded', true);\n }\n };\n return array.addObserver('isLoaded', observer);\n },\n pushObject: function(record) {\n var clientId, id, ids;\n ids = this.get('content');\n id = record.get('id');\n clientId = record.get('clientId');\n if (ids.contains(clientId)) {\n return;\n }\n return ids.pushObject(clientId);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/expandable_record_array");minispade.register('travis/limited_array', "(function() {(function() {\n\n Travis.LimitedArray = Em.ArrayProxy.extend({\n limit: 10,\n init: function() {\n return this._super.apply(this, arguments);\n },\n arrangedContent: (function() {\n var content;\n if (content = this.get('content')) {\n return content.slice(0, this.get('limit'));\n }\n }).property('content'),\n contentArrayDidChange: function(array, index, removedCount, addedCount) {\n var addedObjects, arrangedContent, length, limit, object, _i, _len;\n this._super.apply(this, arguments);\n if (addedCount > 0) {\n addedObjects = array.slice(index, index + addedCount);\n arrangedContent = this.get('arrangedContent');\n for (_i = 0, _len = addedObjects.length; _i < _len; _i++) {\n object = addedObjects[_i];\n arrangedContent.unshiftObject(object);\n }\n limit = this.get('limit');\n length = arrangedContent.get('length');\n if (length > limit) {\n return arrangedContent.replace(limit, length - limit);\n }\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/limited_array");minispade.register('travis/location', "(function() {(function() {\n\n Travis.Location = Ember.HistoryLocation.extend({\n onUpdateURL: function(callback) {\n var guid;\n guid = Ember.guidFor(this);\n return Ember.$(window).bind('popstate.ember-location-' + guid, function(e) {\n return callback(location.pathname + location.hash);\n });\n },\n getURL: function() {\n var location;\n location = this.get('location');\n return location.pathname + location.hash;\n }\n });\n\n Ember.Location.implementations['travis'] = Travis.Location;\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/location");minispade.register('travis/log', "(function() {(function() {\n\n this.Travis.Log = {\n FOLDS: {\n schema: /(
\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*? -- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n .*<\\/p>)/g,\n migrate: /( \\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n bundle: /( \\$ bundle install.*<\\/p>\\n( (Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n| <\\/p>\\n)*)/g,\n exec: /( [\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n },\n filter: function(log, path) {\n log = this.escape(log);\n log = this.deansi(log);\n log = log.replace(/\\r/g, '');\n log = this.number(log, path);\n log = this.fold(log);\n log = log.replace(/\\n/g, '');\n return log;\n },\n stripPaths: function(log) {\n return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n },\n escape: function(log) {\n return Handlebars.Utils.escapeExpression(log);\n },\n escapeRuby: function(log) {\n return log.replace(/#<(\\w+.*?)>/, '#<$1>');\n },\n number: function(log, path) {\n var result;\n path = \"\" + path + \"/\";\n result = '';\n $.each(log.trim().split('\\n'), function(ix, line) {\n var number, pathWithNumber;\n number = ix + 1;\n pathWithNumber = \"\" + path + \"#L\" + number;\n return result += ' %@%@
\\n'.fmt(pathWithNumber, number, number, number, line);\n });\n return result.trim();\n },\n deansi: function(log) {\n var ansi, text;\n log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/gm, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, \"\");\n ansi = ansiparse(log);\n text = '';\n ansi.forEach(function(part) {\n var classes;\n classes = [];\n part.foreground && classes.push(part.foreground);\n part.background && classes.push('bg-' + part.background);\n part.bold && classes.push('bold');\n part.italic && classes.push('italic');\n return text += (classes.length ? '' + part.text + '' : part.text);\n });\n return text.replace(/\\033/g, '');\n },\n fold: function(log) {\n log = this.unfold(log);\n $.each(Travis.Log.FOLDS, function(name, pattern) {\n return log = log.replace(pattern, function() {\n return '' + arguments[1].trim() + '';\n });\n });\n return log;\n },\n unfold: function(log) {\n return log.replace(/([\\s\\S]*?)<\\/div>/g, '$1\\n');\n },\n location: function() {\n return window.location.hash;\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n this.Travis.Model = DS.Model.extend({\n primaryKey: 'id',\n id: DS.attr('number'),\n init: function() {\n this.loadedAttributes = [];\n return this._super.apply(this, arguments);\n },\n get: function(name) {\n if (this.constructor.isAttribute(name) && this.get('incomplete') && !this.isAttributeLoaded(name)) {\n this.loadTheRest();\n }\n return this._super.apply(this, arguments);\n },\n refresh: function() {\n var id, store;\n if (id = this.get('id')) {\n store = this.get('store');\n return store.adapter.find(store, this.constructor, id);\n }\n },\n update: function(attrs) {\n var _this = this;\n $.each(attrs, function(key, value) {\n if (key !== 'id') {\n return _this.set(key, value);\n }\n });\n return this;\n },\n isAttributeLoaded: function(name) {\n return this.loadedAttributes.contains(name);\n },\n isComplete: (function() {\n if (this.get('incomplete')) {\n this.loadTheRest();\n return false;\n } else {\n this.set('isCompleting', false);\n return this.get('isLoaded');\n }\n }).property('incomplete', 'isLoaded'),\n loadTheRest: function() {\n if (this.get('isCompleting')) {\n return;\n }\n this.set('isCompleting', true);\n return this.refresh();\n },\n select: function() {\n return this.constructor.select(this.get('id'));\n }\n });\n\n this.Travis.Model.reopenClass({\n find: function() {\n if (arguments.length === 0) {\n return Travis.app.store.findAll(this);\n } else {\n return this._super.apply(this, arguments);\n }\n },\n filter: function(callback) {\n return Travis.app.store.filter(this, callback);\n },\n load: function(attrs) {\n return Travis.app.store.load(this, attrs);\n },\n select: function(id) {\n return this.find().forEach(function(record) {\n return record.set('selected', record.get('id') === id);\n });\n },\n buildURL: function(suffix) {\n var base, url;\n base = this.url || this.pluralName();\n Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n url = [base];\n if (suffix !== void 0) {\n url.push(suffix);\n }\n return url.join('/');\n },\n singularName: function() {\n var name, parts;\n parts = this.toString().split('.');\n name = parts[parts.length - 1];\n return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n },\n pluralName: function() {\n return Travis.app.store.adapter.pluralize(this.singularName());\n },\n isAttribute: function(name) {\n if (!this.attributesSaved) {\n this._saveAttributes();\n }\n return this.cachedAttributes.contains(name);\n },\n _saveAttributes: function() {\n var cachedAttributes;\n this.attributesSaved = true;\n cachedAttributes = [];\n this.eachComputedProperty(function(name, meta) {\n if (meta.isAttribute) {\n return cachedAttributes.pushObject(name);\n }\n });\n return this.cachedAttributes = cachedAttributes;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n this.Travis.Ticker = Ember.Object.extend({\n init: function() {\n if (this.get('interval') !== -1) {\n return this.schedule();\n }\n },\n tick: function() {\n var context, target, targets, _i, _len;\n context = this.get('context');\n targets = this.get('targets') || [this.get('target')];\n for (_i = 0, _len = targets.length; _i < _len; _i++) {\n target = targets[_i];\n if (context) {\n target = context.get(target);\n }\n if (target) {\n target.tick();\n }\n }\n return this.schedule();\n },\n schedule: function() {\n var _this = this;\n return Ember.run.later((function() {\n return _this.tick();\n }), this.get('interval') || Travis.app.TICK_INTERVAL);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('travis', "(function() {(function() {\nminispade.require('ext/jquery');\nminispade.require('ext/ember/namespace');\n\n this.Travis = Em.Namespace.create({\n config: {\n api_endpoint: $('meta[rel=\"travis.api_endpoint\"]').attr('href'),\n pusher_key: $('meta[name=\"travis.pusher_key\"]').attr('value')\n },\n CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'jdk', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'],\n ROUTES: {\n 'profile/:login/me': ['profile', 'user'],\n 'profile/:login': ['profile', 'hooks'],\n 'profile': ['profile', 'hooks'],\n 'stats': ['stats', 'show'],\n ':owner/:name/jobs/:id/:line': ['home', 'job'],\n ':owner/:name/jobs/:id': ['home', 'job'],\n ':owner/:name/builds/:id': ['home', 'build'],\n ':owner/:name/builds': ['home', 'builds'],\n ':owner/:name/pull_requests': ['home', 'pullRequests'],\n ':owner/:name/branches': ['home', 'branches'],\n ':owner/:name': ['home', 'current'],\n '': ['home', 'index'],\n '#': ['home', 'index']\n },\n QUEUES: [\n {\n name: 'common',\n display: 'Common'\n }, {\n name: 'php',\n display: 'PHP, Perl and Python'\n }, {\n name: 'node_js',\n display: 'Node.js'\n }, {\n name: 'jvmotp',\n display: 'JVM and Erlang'\n }, {\n name: 'rails',\n display: 'Rails'\n }, {\n name: 'spree',\n display: 'Spree'\n }\n ],\n INTERVALS: {\n sponsors: -1,\n times: -1,\n updateTimes: 1000\n },\n setLocale: function(locale) {\n if (!locale) {\n return;\n }\n I18n.locale = locale;\n return localStorage.setItem('travis.locale', locale);\n },\n run: function(attrs) {\n if (location.hash.slice(0, 2) === '#!') {\n location.href = location.href.replace('#!/', '');\n }\n this.setLocale(localStorage.getItem('travis.locale'));\n return Ember.run.next(this, function() {\n var app,\n _this = this;\n app = Travis.App.create(attrs || {});\n $.each(Travis, function(key, value) {\n if (value && value.isClass && key !== 'constructor') {\n return app[key] = value;\n }\n });\n this.app = app;\n this.store = app.store;\n return $(function() {\n return app.initialize();\n });\n });\n }\n });\nminispade.require('travis/ajax');\nminispade.require('app');\n\n}).call(this);\n\n})();\n//@ sourceURL=travis");minispade.register('templates', "(function() {\nEmber.TEMPLATES['application'] = Ember.Handlebars.compile(\"{{outlet}}\\n\");\n\nEmber.TEMPLATES['auth/signin'] = Ember.Handlebars.compile(\"{{#if view.signingIn}}\\nSigning in ...
\\n\\n Trying to authenticate with GitHub.\\n
\\n{{else}}\\nSign in
\\n\\n Please sign in with GitHub.\\n
\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/list'] = Ember.Handlebars.compile(\"{{#if builds.isLoaded}}\\n\\n \\n
\\n\\n \\n \\n\\n \\n {{#each build in builds}}\\n {{#view Travis.BuildsItemView contextBinding=\\\"build\\\"}}\\n{{t builds.name}} \\n{{t builds.commit}} \\n{{t builds.message}} \\n{{t builds.duration}} \\n{{t builds.finished_at}} \\n\\n \\n {{#if id}}\\n \\n {{number}}\\n \\n {{/if}}\\n \\n\\n \\n {{formatCommit commit}}\\n \\n \\n \\n\\n {{formatDuration duration}}\\n \\n\\n {{formatTime finishedAt}}\\n \\n {{/view}}\\n {{/each}}\\n \\n\\n {{view view.ShowMoreButton}}\\n
\\n{{else}}\\nLoading\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n {{#if loading}}\\n Loading\\n {{else}}\\n\\n
\\n\\n {{#if build.isMatrix}}\\n {{view Travis.JobsView jobsBinding=\\\"build.requiredJobs\\\" required=\\\"true\\\"}}\\n {{view Travis.JobsView jobsBinding=\\\"build.allowedFailureJobs\\\"}}\\n {{else}}\\n {{view Travis.LogView contextBinding=\\\"build.jobs.firstObject\\\"}}\\n {{/if}}\\n {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['events/list'] = Ember.Handlebars.compile(\"{{#if view.events.isLoaded}}\\n\\n\\n\\n- {{t builds.name}}
\\n- \\n \\n {{#if build.id}}\\n {{build.number}}\\n {{/if}}\\n
\\n- {{t builds.finished_at}}
\\n- {{formatTime build.finishedAt}}
\\n- {{t builds.duration}}
\\n- {{formatDuration build.duration}}
\\n\\n\\n\\n- {{t builds.commit}}
\\n- {{formatCommit build.commit}}
\\n {{#if commit.compareUrl}}\\n- {{t builds.compare}}
\\n- {{pathFrom build.commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n- {{t builds.author}}
\\n \\n {{/if}}\\n {{#if commit.committerName}}\\n- {{t builds.committer}}
\\n- {{build.commit.committerName}}
\\n {{/if}}\\n- {{t builds.message}}
\\n \\n\\n {{#unless isMatrix}}\\n- {{t builds.config}}
\\n- {{formatConfig build.config}}
\\n {{/unless}}\\n\\n \\n
\\n{{else}}\\n\\n \\n \\n\\n \\n {{#each event in view.events}}\\n {{#view Travis.EventsItemView contextBinding=\\\"event\\\"}}\\nTime \\nEvent \\nResult \\nMessage \\n\\n {{formatTime createdAt}}\\n \\n\\n {{event.event_}}\\n \\n\\n {{event.result}}\\n \\n \\n {{/view}}\\n {{/each}}\\n \\nLoading\\n{{/if}}\\n\\n\");\n\nEmber.TEMPLATES['jobs/list'] = Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n {{#if view.required}}\\n\\n
\\n {{t jobs.build_matrix}}\\n \\n {{else}}\\n\\n
\\n\\n {{#unless view.required}}\\n\\n {{t jobs.allowed_failures}}\\n \\n \\n {{/if}}\\n \\n\\n {{#each key in view.build.configKeys}}\\n \\n \\n \\n {{#each job in view.jobs}}\\n {{#view Travis.JobsItemView contextBinding=\\\"job\\\"}}\\n{{key}} \\n {{/each}}\\n\\n \\n {{#if job.id}}\\n {{number}}\\n {{/if}}\\n \\n\\n {{formatDuration duration}}\\n \\n\\n {{formatTime finishedAt}}\\n \\n {{#each value in configValues}}\\n{{value}} \\n {{/each}}\\n {{/view}}\\n {{/each}}\\n \\n\\n \\n\\n {{/unless}}\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/log'] = Ember.Handlebars.compile(\"{{view.logSubscriber}}\\n\\n{{#if view.job.log.isLoaded}}\\n{{t \\\"jobs.allowed_failures\\\"}}
\\n\\n Allowed Failures are items in your build matrix that are allowed to\\n fail without causing the entire build to be shown as failed.\\n
\\n\\n You can define allowed failures in the build matrix as follows:\\n
\\nmatrix:\\n allow_failures:\\n - rvm: ruby-head\\n\\n This lets you add in experimental and preparatory builds to test against versions or\\n configurations that you are not ready to officially support.\\n
\\n\\n \\n \\n {{{formatLog log.body repo=\\\"repository\\\" item=\\\"parentView.currentItem\\\"}}}\\n\\n {{#if sponsor.name}}\\n\\n {{t builds.messages.sponsored_by}}\\n {{sponsor.name}}\\n
\\n {{/if}}\\n\\n To top\\n{{else}}\\n\\n Loading\\n\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n {{#if job.isComplete}}\\n\\n\\n {{else}}\\n\\n
\\n\\n {{view Travis.LogView contextBinding=\\\"job\\\"}}}\\n\\n\\n\\n- Job
\\n- \\n \\n {{#if job.id}}\\n {{job.number}}\\n {{/if}}\\n
\\n- {{t jobs.finished_at}}
\\n- {{formatTime job.finishedAt}}
\\n- {{t jobs.duration}}
\\n- {{formatDuration job.duration}}
\\n\\n\\n\\n- {{t jobs.commit}}
\\n- {{formatCommit commit}}
\\n {{#if commit.compareUrl}}\\n- {{t jobs.compare}}
\\n- {{pathFrom commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n- {{t jobs.author}}
\\n \\n {{/if}}\\n {{#if commit.committerName}}\\n- {{t jobs.committer}}
\\n- {{commit.committerName}}
\\n {{/if}}\\n- {{t jobs.message}}
\\n \\n- {{t jobs.config}}
\\n- {{formatConfig job.config}}
\\n\\n Loading\\n\\n {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['layouts/flash'] = Ember.Handlebars.compile(\"{{#each flash in controller}}\\n {{#view Travis.FlashItemView flashBinding=\\\"flash\\\"}}\\n{{{flash.message}}}
\\n \\n {{/view}}\\n{{/each}}\\n\");\n\nEmber.TEMPLATES['layouts/home'] = Ember.Handlebars.compile(\"\\n {{outlet top}}\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/profile'] = Ember.Handlebars.compile(\"\\n {{outlet left}}\\n\\n\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\n\\n\\n {{outlet right}}\\n\\n\\n {{outlet top}}\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/sidebar'] = Ember.Handlebars.compile(\"\\n\\n\\n {{outlet left}}\\n\\n\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\n\\n\\n \\n\\n\\n\\n \\n\\n\\n\\n\\nGetting started?
\\n\\n Please read our guide.\\n It will only take a few minutes :)\\n
\\n\\n You can find detailled docs on our about site.\\n
\\n\\n If you need help please don’t hesitate to join\\n #travis on irc.freenode.net\\n or our mailinglist.\\n
\\n\\n \\n\\n\\n{{view view.DecksView}}\\n{{view view.WorkersView}}\\n{{view view.QueuesView}}\\n{{view view.LinksView}}\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/simple'] = Ember.Handlebars.compile(\"{{t layouts.about.join}}
\\n\\n
\\n- {{t layouts.about.repository}}: Github
\\n- {{t layouts.about.twitter}}: @travisci
\\n- {{t layouts.about.mailing_list}}: travis-ci
\\n- irc.freenode.net#travis
\\n\\n {{outlet top}}\\n\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/top'] = Ember.Handlebars.compile(\"\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\nTravis
\\n\\n\\n \\n\");\n\nEmber.TEMPLATES['profile/accounts'] = Ember.Handlebars.compile(\"\\n\\n\\n\\n
\\n\\n- \\n
\\nAccounts
\\n\\n {{#collection Travis.AccountsListView contentBinding=\\\"controller\\\"}}\\n {{view.name}}\\n\\n\");\n\nEmber.TEMPLATES['profile/show'] = Ember.Handlebars.compile(\"\\n Repositories:\\n {{view.account.reposCount}}\\n
\\n\\n {{/collection}}\\n{{view.name}}
\\n\\n{{view Travis.ProfileTabsView}}\\n\\n\\n {{outlet pane}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs'] = Ember.Handlebars.compile(\"\\n
\\n\");\n\nEmber.TEMPLATES['profile/tabs/hooks'] = Ember.Handlebars.compile(\"- \\n
\\n {{#if view.displayUser}}\\n\\n Repositories\\n
\\n- \\n
\\n {{/if}}\\n\\n Profile\\n
\\n\\n {{{t profiles.show.message.your_repos}}}\\n
\\n\\n{{#if hooks.isLoaded}}\\n {{#if user.isSyncing}}\\n \\n {{else}}\\n \\n\\n\\n {{#each hook in hooks}}\\n
\\n {{/if}}\\n{{else}}\\n \\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs/user'] = Ember.Handlebars.compile(\"- \\n {{hook.slug}}\\n
\\n {{else}}\\n{{hook.description}}
\\n\\n \\n- \\n You do not seem to have any repositories that we could sync.\\n
\\n {{/each}}\\n\\n\\n
\\n
\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['queues/list'] = Ember.Handlebars.compile(\"- \\n {{t profiles.show.github}}:\\n
\\n- \\n {{user.login}}\\n
\\n- \\n {{t profiles.show.email}}:\\n
\\n- \\n {{user.email}}\\n
\\n- \\n {{t profiles.show.token}}:\\n
\\n- \\n {{user.token}}\\n
\\n\\n{{#each queue in controller}}\\n
\\n\");\n\nEmber.TEMPLATES['repos/list'] = Ember.Handlebars.compile(\"- \\n
\\n{{/each}}\\n{{t queue}}: {{queue.name}}
\\n\\n {{#each job in queue}}\\n {{#view Travis.QueueItemView jobBinding=\\\"job\\\"}}\\n \\n \\n {{job.repo.slug}}\\n \\n #{{job.number}}\\n \\n {{/view}}\\n {{else}}\\n {{t no_job}}\\n {{/each}}\\n
\\n\\n {{view Ember.TextField valueBinding=\\\"controller.search\\\"}}\\n\\n\\n{{view Travis.ReposListTabsView}}\\n\\n\\n\\n\\n {{#collection Travis.ReposListView contentBinding=\\\"controller\\\"}}\\n {{#with view.repo}}\\n\\n\");\n\nEmber.TEMPLATES['repos/list/tabs'] = Ember.Handlebars.compile(\"\\n \\n {{#if slug}}\\n {{slug}}\\n {{/if}}\\n\\n {{#if lastBuildId}}\\n {{lastBuildNumber}}\\n {{/if}}\\n\\n\\n {{t repositories.duration}}:\\n {{formatDuration lastBuildDuration}},\\n {{t repositories.finished_at}}:\\n {{formatTime lastBuildFinishedAt}}\\n
\\n\\n\\n\\n {{#if description}}\\n\\n\\n {{/if}}\\n {{/with}}\\n {{else}}\\n \\n {{/collection}}\\n{{description}}
\\n\\n
\\n\\n\");\n\nEmber.TEMPLATES['repos/show'] = Ember.Handlebars.compile(\"- \\n
\\n{{t layouts.application.recent}}
\\n- \\n
\\n{{t layouts.application.my_repositories}}
\\n- \\n
\\n{{t layouts.application.search}}
\\n\\n {{#if view.isEmpty}}\\n {{view Travis.ReposEmptyView}}\\n {{else}}\\n {{#if view.repo.isComplete}}\\n {{#with view.repo}}\\n\\n\\n\");\n\nEmber.TEMPLATES['repos/show/tabs'] = Ember.Handlebars.compile(\"\\n {{slug}}\\n
\\n\\n{{description}}
\\n\\n\\n
\\n\\n {{view Travis.RepoShowTabsView}}\\n {{view Travis.RepoShowToolsView}}\\n {{/with}}\\n\\n {{else}}\\n Loading\\n {{/if}}\\n\\n- \\n {{lastBuildLanguage}}\\n
\\n- \\n \\n {{stats.watchers}}\\n \\n
\\n- \\n \\n {{stats.forks}}\\n \\n
\\n\\n {{outlet pane}}\\n\\n {{/if}}\\n\\n
\\n\");\n\nEmber.TEMPLATES['repos/show/tools'] = Ember.Handlebars.compile(\"\\n\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.current}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.build_history}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.pull_requests}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.branches}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n Events\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.build.id}}\\n \\n {{t repositories.tabs.build}} #{{view.build.number}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.job.id}}\\n \\n {{t repositories.tabs.job}} #{{view.job.number}}\\n \\n {{/if}}\\n
\\n\\n \\n\\n\");\n\nEmber.TEMPLATES['sponsors/decks'] = Ember.Handlebars.compile(\"\\n \\n {{#if view.branches.isLoaded}}\\n {{view Ember.Select contentBinding=\\\"view.branches\\\" selectionBinding=\\\"view.branch\\\" optionLabelPath=\\\"content.commit.branch\\\" optionValuePath=\\\"content.commit.branch\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n{{t layouts.application.sponsers}}
\\n\\n\\n {{#each deck in controller}}\\n {{#each deck}}\\n
\\n\\n- \\n \\n
\\n {{/each}}\\n {{/each}}\\n\\n \\n
\\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n
\\n\");\n\nEmber.TEMPLATES['sponsors/links'] = Ember.Handlebars.compile(\"\\n\\n\\n\");\n\nEmber.TEMPLATES['stats/show'] = Ember.Handlebars.compile(\"{{t layouts.application.sponsers}}
\\n\\n\\n {{#each controller}}\\n
\\n\\n \\n- \\n {{{link}}}\\n
\\n {{/each}}\\nSorry
\\nStatistics are disabled for now.
\\nWe're looking into a solution. If you want to help, please ping us!
\\n\");\n\nEmber.TEMPLATES['workers/list'] = Ember.Handlebars.compile(\"{{#view Travis.WorkersView}}\\n\\n {{t workers}}\\n \\n
\\n\\n {{#each group in controller.groups}}\\n {{#view Travis.WorkersListView}}\\n
\\n{{/view}}\\n\");\n\n})();\n//@ sourceURL=templates");minispade.register('config/locales', "(function() {window.I18n = window.I18n || {}\nwindow.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"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\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors →\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do not consider this a stable service. We're still far from that! More info here.\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"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\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our Getting Started guide.\\n It will only take a couple of minutes.\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"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\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores →\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor no considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información aquí.\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Activa los interruptores para inicial el Travis service hook para tus proyectos, y haz un Push en GitHub.- \\n
\\n {{/view}}\\n {{else}}\\n No workers\\n {{/each}}\\n\\n {{group.firstObject.host}}\\n
\\n\\n {{#each worker in group}}\\n {{#view Travis.WorkersItemView workerBinding=\\\"worker\\\"}}\\n
\\n- \\n \\n {{#if worker.isWorking}}\\n {{#if worker.job_id}}\\n \\n {{view.display}}\\n \\n {{/if}}\\n {{else}}\\n {{view.display}}\\n {{/if}}\\n
\\n {{/view}}\\n {{/each}}\\n
\\n Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra Guía de Inicio .\\n Solo tomará unos pocos minutos.\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"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\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors →\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez pas ce service comme étant stable. Nous sommes loin de ça! Plus d'infos ici.\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.
\\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre guide de démarrage.\\n Cela ne vous prendra que quelques minutes.\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくはこちら\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る →\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずはTravisのはじめ方を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"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\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er ikke en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du her.\"},\"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\"}},\"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.
\\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les kom-i-gang-veivisereren vår. Det tar bare et par minutter.\"},\"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\"},\"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\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"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\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service niet te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info hier.\"},\"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\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"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
\\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze startersgids lezen.\\\\n Het zal maar enkele minuten van uw tijd vergen.\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"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\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"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\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów →\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę nie traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz tutaj.\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"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\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.
\\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz Przewodnik .\\n Zajmie ci to tylko kilka minut.\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"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\"},\"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, não considere isto um serviço estável. Estamos muito longe disso! Mais informações aqui.\"},\"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\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"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.
Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso Guia de início. Só leva alguns minutinhos.\"},\"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\"},\"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\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"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\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"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\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, не считайте данный сервис стабильным. Мы еще очень далеки от стабильности! Подробности\"},\"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\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.
\\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите Руководство для быстрого старта. Это займет всего несколько минут.\"},\"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\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n context: null,\n options: null,\n property: null,\n // paths of the property that are also observed\n propertyPaths: [],\n\n value: Ember.K,\n\n valueForRender: function() {\n var value = this.value(Ember.get(this.context, this.property), this.options);\n if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n return value;\n },\n\n render: function(buffer) {\n buffer.push(this.valueForRender());\n },\n\n valueDidChange: function() {\n if (this.morph.isRemoved()) { return; }\n this.morph.html(this.valueForRender());\n },\n\n didInsertElement: function() {\n this.valueDidChange();\n },\n\n init: function() {\n this._super();\n Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n },\n\n destroy: function() {\n Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n this._super();\n }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n var propertyPaths = Array.prototype.slice.call(arguments, 2);\n Ember.Handlebars.registerHelper(name, function(property, options) {\n var data = options.data,\n view = data.view,\n ctx = this;\n\n var bindView = view.createChildView(BoundHelperView, {\n property: property,\n propertyPaths: propertyPaths,\n context: ctx,\n options: options.hash,\n value: func\n });\n\n view.appendChild(bindView);\n });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper");minispade.register('ext/ember/namespace', "(function() {Em.Namespace.reopen = Em.Namespace.reopenClass\n\n\n\n})();\n//@ sourceURL=ext/ember/namespace"); \ No newline at end of file diff --git a/public/scripts/min/app.js b/public/scripts/min/app.js index 8c2a98b3..95571f2f 100644 --- a/public/scripts/min/app.js +++ b/public/scripts/min/app.js @@ -30501,4 +30501,4 @@ var _require=function(){function c(a,c){document.addEventListener?a.addEventList ++g&&setTimeout(c,0)})}}(); (function(){!window.WebSocket&&window.MozWebSocket&&(window.WebSocket=window.MozWebSocket);if(window.WebSocket)Pusher.Transport=window.WebSocket,Pusher.TransportType="native";var c=(document.location.protocol=="http:"?Pusher.cdn_http:Pusher.cdn_https)+Pusher.VERSION,a=[];window.JSON||a.push(c+"/json2"+Pusher.dependency_suffix+".js");if(!window.WebSocket)window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION=!0,a.push(c+"/flashfallback"+Pusher.dependency_suffix+".js");var b=function(){return window.WebSocket?function(){Pusher.ready()}: function(){window.WebSocket?(Pusher.Transport=window.WebSocket,Pusher.TransportType="flash",window.WEB_SOCKET_SWF_LOCATION=c+"/WebSocketMain.swf",WebSocket.__addTask(function(){Pusher.ready()}),WebSocket.__initialize()):(Pusher.Transport=null,Pusher.TransportType="none",Pusher.ready())}}(),e=function(a){var b=function(){document.body?a():setTimeout(b,0)};b()},g=function(){e(b)};a.length>0?_require(a,g):g()})(); -;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n Travis.reopen({\n App: Em.Application.extend({\n autoinit: false,\n currentUserBinding: 'auth.user',\n authStateBinding: 'auth.state',\n init: function() {\n this._super.apply(this, arguments);\n this.store = Travis.Store.create();\n this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n this.slider = new Travis.Slider();\n this.pusher = new Travis.Pusher(Travis.config.pusher_key);\n this.tailing = new Travis.Tailing();\n return this.set('auth', Travis.Auth.create({\n app: this,\n endpoint: Travis.config.api_endpoint\n }));\n },\n storeAfterSignInPath: function(path) {\n return this.get('auth').storeAfterSignInPath(path);\n },\n autoSignIn: function(path) {\n return this.get('auth').autoSignIn(path);\n },\n signIn: function() {\n return this.get('auth').signIn();\n },\n signOut: function() {\n this.get('auth').signOut();\n return this.get('router').send('afterSignOut');\n },\n receive: function() {\n return this.store.receive.apply(this.store, arguments);\n },\n toggleSidebar: function() {\n var element;\n $('body').toggleClass('maximized');\n element = $('');\n $('#top .profile').append(element);\n Em.run.later((function() {\n return element.remove();\n }), 10);\n element = $('');\n $('#repo').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n this.Travis.Auth = Ember.Object.extend({\n iframe: $('').hide(),\n timeout: 5000,\n state: 'signed-out',\n receivingEnd: \"\" + location.protocol + \"//\" + location.host,\n init: function() {\n var _this = this;\n this.iframe.appendTo('body');\n return window.addEventListener('message', function(e) {\n return _this.receiveMessage(e);\n });\n },\n accessToken: (function() {\n return sessionStorage.getItem('travis.token');\n }).property(),\n autoSignIn: function(path) {\n var user;\n if (user = sessionStorage.getItem('travis.user')) {\n return this.setData({\n user: JSON.parse(user)\n });\n } else if (localStorage.getItem('travis.auto_signin')) {\n return this.signIn();\n }\n },\n signIn: function() {\n this.set('state', 'signing-in');\n this.trySignIn();\n return Ember.run.later(this, this.checkSignIn.bind(this), this.timeout);\n },\n signOut: function() {\n localStorage.removeItem('travis.auto_signin');\n localStorage.removeItem('travis.locale');\n sessionStorage.clear();\n return this.setData();\n },\n trySignIn: function() {\n return this.iframe.attr('src', \"\" + this.endpoint + \"/auth/post_message?origin=\" + this.receivingEnd);\n },\n checkSignIn: function() {\n if (this.get('state') === 'signing-in') {\n return this.forceSignIn();\n }\n },\n forceSignIn: function() {\n localStorage.setItem('travis.auto_signin', 'true');\n return window.location = \"\" + this.endpoint + \"/auth/handshake?redirect_uri=\" + location;\n },\n setData: function(data) {\n var user;\n if (typeof data === 'string') {\n data = JSON.parse(data);\n }\n if (data != null ? data.token : void 0) {\n this.storeToken(data.token);\n }\n if (data != null ? data.user : void 0) {\n user = this.storeUser(data.user);\n }\n this.set('state', user ? 'signed-in' : 'signed-out');\n this.set('user', user ? user : void 0);\n return this.afterSignIn();\n },\n afterSignIn: function() {\n return this.get('app.router').send('afterSignIn', this.readAfterSignInPath());\n },\n storeToken: function(token) {\n sessionStorage.setItem('travis.token', token);\n return this.notifyPropertyChange('accessToken');\n },\n storeUser: function(user) {\n localStorage.setItem('travis.auto_signin', 'true');\n sessionStorage.setItem('travis.user', JSON.stringify(user));\n this.app.store.load(Travis.User, user);\n user = this.app.store.find(Travis.User, user.id);\n user.get('permissions');\n return user;\n },\n storeAfterSignInPath: function(path) {\n return sessionStorage.setItem('travis.after_signin_path', path);\n },\n readAfterSignInPath: function() {\n var path;\n path = sessionStorage.getItem('travis.after_signin_path');\n sessionStorage.removeItem('travis.after_signin_path');\n return path;\n },\n receiveMessage: function(event) {\n if (event.origin === this.expectedOrigin()) {\n if (event.data.token) {\n event.data.user.token = event.data.token;\n }\n this.setData(event.data);\n return console.log(\"signed in as \" + event.data.user.login);\n } else {\n return console.log(\"unexpected message \" + event.origin + \": \" + event.data);\n }\n },\n expectedOrigin: function() {\n if (this.endpoint[0] === '/') {\n return this.receivingEnd;\n } else {\n return this.endpoint;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=auth");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\nminispade.require('travis/ticker');\n\n Travis.reopen({\n Controller: Em.Controller.extend({\n connectOutlet: function() {\n var view, _connectedOutletViews;\n view = this._super.apply(this, arguments);\n if (view) {\n _connectedOutletViews = Travis.app.get('_connectedOutletViews');\n if (!_connectedOutletViews) {\n _connectedOutletViews = [];\n }\n _connectedOutletViews.pushObject(view);\n Travis.app.set('_connectedOutletViews', _connectedOutletViews);\n }\n return view;\n }\n }),\n TopController: Em.Controller.extend({\n userBinding: 'Travis.app.currentUser'\n }),\n ApplicationController: Em.Controller.extend(),\n MainController: Em.Controller.extend(),\n StatsLayoutController: Em.Controller.extend(),\n ProfileLayoutController: Em.Controller.extend(),\n AuthLayoutController: Em.Controller.extend()\n });\nminispade.require('controllers/accounts');\nminispade.require('controllers/builds');\nminispade.require('controllers/flash');\nminispade.require('controllers/home');\nminispade.require('controllers/profile');\nminispade.require('controllers/repos');\nminispade.require('controllers/repo');\nminispade.require('controllers/sidebar');\nminispade.require('controllers/stats');\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('controllers/accounts', "(function() {(function() {\n\n Travis.AccountsController = Ember.ArrayController.extend({\n tab: 'accounts',\n init: function() {\n return this._super();\n },\n findByLogin: function(login) {\n return this.find(function(account) {\n return account.get('login') === login;\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/accounts");minispade.register('controllers/builds', "(function() {(function() {\n\n Travis.BuildsController = Em.ArrayController.extend({\n repo: 'parent.repo',\n contentBinding: 'parent.builds'\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/builds");minispade.register('controllers/flash', "(function() {(function() {\n\n Travis.FlashController = Ember.ArrayController.extend({\n broadcastBinding: 'Travis.app.currentUser.broadcasts',\n init: function() {\n this.set('flashes', Ember.A());\n return this._super.apply(this, arguments);\n },\n content: (function() {\n return this.get('unseenBroadcasts').concat(this.get('flashes'));\n }).property('unseenBroadcasts.length', 'flashes.length'),\n unseenBroadcasts: (function() {\n return this.get('broadcasts').filterProperty('isSeen', false);\n }).property('broadcasts.isLoaded', 'broadcasts.length'),\n broadcasts: (function() {\n if (Travis.app.get('currentUser')) {\n return Travis.Broadcast.find();\n } else {\n return Ember.A();\n }\n }).property('Travis.app.currentUser'),\n loadFlashes: function(msgs) {\n var msg, type, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = msgs.length; _i < _len; _i++) {\n msg = msgs[_i];\n type = Ember.keys(msg)[0];\n msg = {\n type: type,\n message: msg[type]\n };\n this.get('flashes').pushObject(msg);\n _results.push(Ember.run.later(this, (function() {\n return this.get('flashes').removeObject(msg);\n }), 15000));\n }\n return _results;\n },\n close: function(msg) {\n if (msg instanceof Travis.Broadcast) {\n msg.setSeen();\n return this.notifyPropertyChange('unseenBroadcasts');\n } else {\n return this.get('flashes').removeObject(msg);\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/flash");minispade.register('controllers/home', "(function() {(function() {\n\n Travis.HomeLayoutController = Travis.Controller.extend();\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/home");minispade.register('controllers/profile', "(function() {(function() {\n\n Travis.ProfileController = Travis.Controller.extend({\n name: 'profile',\n userBinding: 'Travis.app.currentUser',\n accountsBinding: 'Travis.app.router.accountsController',\n account: (function() {\n var account, login;\n login = this.get('params.login') || Travis.app.get('currentUser.login');\n account = this.get('accounts').filter(function(account) {\n if (account.get('login') === login) {\n return account;\n }\n })[0];\n if (account) {\n account.select();\n }\n return account;\n }).property('accounts.length', 'params.login'),\n activate: function(action, params) {\n this.setParams(params || this.get('params'));\n return this[\"view\" + ($.camelize(action))]();\n },\n viewHooks: function() {\n this.connectTab('hooks');\n return this.set('hooks', Travis.Hook.find({\n owner_name: this.get('params.login') || Travis.app.get('currentUser.login')\n }));\n },\n viewUser: function() {\n return this.connectTab('user');\n },\n connectTab: function(tab) {\n var viewClass;\n viewClass = Travis[\"\" + ($.camelize(tab)) + \"View\"];\n this.set('tab', tab);\n return this.connectOutlet({\n outletName: 'pane',\n controller: this,\n viewClass: viewClass\n });\n },\n setParams: function(params) {\n var key, value, _results;\n this.set('params', {});\n _results = [];\n for (key in params) {\n value = params[key];\n _results.push(this.set(\"params.\" + key, params[key]));\n }\n return _results;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/profile");minispade.register('controllers/repo', "(function() {(function() {\n\n Travis.RepoController = Travis.Controller.extend({\n bindings: [],\n init: function() {\n this._super.apply(this, arguments);\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n updateTimes: function() {\n var build, builds, jobs;\n if (builds = this.get('builds')) {\n builds.forEach(function(b) {\n return b.updateTimes();\n });\n }\n if (build = this.get('build')) {\n build.updateTimes();\n }\n if (build && (jobs = build.get('jobs'))) {\n jobs.forEach(function(j) {\n return j.updateTimes();\n });\n }\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n activate: function(action) {\n this._unbind();\n return this[\"view\" + ($.camelize(action))]();\n },\n viewIndex: function() {\n this._bind('repo', 'controllers.reposController.firstObject');\n this._bind('build', 'repo.lastBuild');\n return this.connectTab('current');\n },\n viewCurrent: function() {\n this.connectTab('current');\n return this._bind('build', 'repo.lastBuild');\n },\n viewBuilds: function() {\n this.connectTab('builds');\n return this._bind('builds', 'repo.builds');\n },\n viewPullRequests: function() {\n this.connectTab('pull_requests');\n return this._bind('builds', 'repo.pullRequests');\n },\n viewBranches: function() {\n this.connectTab('branches');\n return this._bind('builds', 'repo.branches');\n },\n viewEvents: function() {\n this.connectTab('events');\n return this._bind('events', 'repo.events');\n },\n viewBuild: function() {\n return this.connectTab('build');\n },\n viewJob: function() {\n this._bind('build', 'job.build');\n return this.connectTab('job');\n },\n repoObserver: (function() {\n var repo;\n repo = this.get('repo');\n if (repo) {\n return repo.select();\n }\n }).observes('repo.id'),\n connectTab: function(tab) {\n var name, viewClass;\n name = tab === 'current' ? 'build' : tab;\n viewClass = name === 'builds' || name === 'branches' || name === 'pull_requests' ? Travis.BuildsView : Travis[\"\" + ($.camelize(name)) + \"View\"];\n this.set('tab', tab);\n return this.connectOutlet({\n outletName: 'pane',\n controller: this,\n viewClass: viewClass\n });\n },\n _bind: function(to, from) {\n return this.bindings.push(Ember.oneWay(this, to, from));\n },\n _unbind: function() {\n var binding, _i, _len, _ref;\n _ref = this.bindings;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n binding = _ref[_i];\n binding.disconnect(this);\n }\n return this.bindings.length = 0;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repo");minispade.register('controllers/repos', "(function() {(function() {\nminispade.require('travis/limited_array');\n\n Travis.ReposController = Ember.ArrayController.extend({\n defaultTab: 'recent',\n sortProperties: ['sortOrder'],\n init: function() {\n this.activate(this.defaultTab);\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n updateTimes: function() {\n var content;\n if (content = this.get('content')) {\n content.forEach(function(r) {\n return r.updateTimes();\n });\n }\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n activate: function(tab, params) {\n this.set('tab', tab);\n return this[\"view\" + ($.camelize(tab))](params);\n },\n viewRecent: function() {\n var content;\n content = Travis.LimitedArray.create({\n content: Travis.Repo.find(),\n limit: 30\n });\n return this.set('content', content);\n },\n viewOwned: function() {\n return this.set('content', Travis.Repo.accessibleBy(Travis.app.get('currentUser.login')));\n },\n viewSearch: function(params) {\n return this.set('content', Travis.Repo.search(params.search));\n },\n searchObserver: (function() {\n var search;\n search = this.get('search');\n if (search) {\n return this.searchFor(search);\n } else {\n this.activate('recent');\n return 'recent';\n }\n }).observes('search'),\n searchFor: function(phrase) {\n if (this.searchLater) {\n Ember.run.cancel(this.searchLater);\n }\n return this.searchLater = Ember.run.later(this, (function() {\n return this.activate('search', {\n search: phrase\n });\n }), 500);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repos");minispade.register('controllers/sidebar', "(function() {(function() {\n\n Travis.reopen({\n SidebarController: Em.ArrayController.extend({\n init: function() {\n this.tickables = [];\n return Travis.Ticker.create({\n target: this,\n interval: Travis.INTERVALS.sponsors\n });\n },\n tick: function() {\n var tickable, _i, _len, _ref, _results;\n _ref = this.tickables;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n tickable = _ref[_i];\n _results.push(tickable.tick());\n }\n return _results;\n }\n }),\n QueuesController: Em.ArrayController.extend(),\n WorkersController: Em.ArrayController.extend({\n groups: (function() {\n var content, groups, host, worker, _i, _len, _ref;\n if (content = this.get('arrangedContent')) {\n groups = {};\n _ref = content.toArray();\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n worker = _ref[_i];\n host = worker.get('host');\n if (!groups[host]) {\n groups[host] = Em.ArrayProxy.create(Em.SortableMixin, {\n content: [],\n sortProperties: ['nameForSort']\n });\n }\n groups[host].addObject(worker);\n }\n return $.values(groups);\n }\n }).property('length')\n }),\n SponsorsController: Em.ArrayController.extend({\n page: 0,\n arrangedContent: (function() {\n return this.get('shuffled').slice(this.start(), this.end());\n }).property('shuffled.length', 'page'),\n shuffled: (function() {\n var content;\n if (content = this.get('content')) {\n return $.shuffle(content);\n } else {\n return [];\n }\n }).property('content.length'),\n tick: function() {\n return this.set('page', this.isLast() ? 0 : this.get('page') + 1);\n },\n pages: (function() {\n var length;\n length = this.get('content.length');\n if (length) {\n return parseInt(length / this.get('perPage') + 1);\n } else {\n return 1;\n }\n }).property('length'),\n isLast: function() {\n return this.get('page') === this.get('pages') - 1;\n },\n start: function() {\n return this.get('page') * this.get('perPage');\n },\n end: function() {\n return this.start() + this.get('perPage');\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/sidebar");minispade.register('controllers/stats', "(function() {(function() {\n\n Travis.StatsController = Travis.Controller.extend({\n name: 'stats',\n init: function() {\n return this._super('top');\n },\n activate: function(action, params) {}\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/stats");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n var safe;\nminispade.require('ext/ember/bound_helper');\n\n safe = function(string) {\n return new Handlebars.SafeString(string);\n };\n\n Handlebars.registerHelper('tipsy', function(text, tip) {\n return safe('' + text + '');\n });\n\n Handlebars.registerHelper('t', function(key) {\n return safe(I18n.t(key));\n });\n\n Ember.registerBoundHelper('formatTime', function(value, options) {\n return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n });\n\n Ember.registerBoundHelper('formatDuration', function(duration, options) {\n return safe(Travis.Helpers.timeInWords(duration));\n });\n\n Ember.registerBoundHelper('formatCommit', function(commit, options) {\n if (commit) {\n return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n }\n });\n\n Ember.registerBoundHelper('formatSha', function(sha, options) {\n return safe(Travis.Helpers.formatSha(sha));\n });\n\n Ember.registerBoundHelper('pathFrom', function(url, options) {\n return safe(Travis.Helpers.pathFrom(url));\n });\n\n Ember.registerBoundHelper('formatMessage', function(message, options) {\n return safe(Travis.Helpers.formatMessage(message, options));\n });\n\n Ember.registerBoundHelper('formatConfig', function(config, options) {\n return safe(Travis.Helpers.formatConfig(config));\n });\n\n Ember.registerBoundHelper('formatLog', function(log, options) {\n var item, parentView, repo;\n parentView = this.get('parentView');\n repo = parentView.get(options.repo);\n item = parentView.get(options.item);\n return Travis.Helpers.formatLog(log, repo, item) || '';\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\nminispade.require('config/emoij');\n\n this.Travis.Helpers = {\n compact: function(object) {\n var key, result, value, _ref;\n result = {};\n _ref = object || {};\n for (key in _ref) {\n value = _ref[key];\n if (!$.isEmpty(value)) {\n result[key] = value;\n }\n }\n return result;\n },\n safe: function(string) {\n return new Handlebars.SafeString(string);\n },\n colorForResult: function(result) {\n if (result === 0) {\n return 'green';\n } else {\n if (result === 1) {\n return 'red';\n } else {\n return null;\n }\n }\n },\n formatCommit: function(sha, branch) {\n return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n },\n formatSha: function(sha) {\n return (sha || '').substr(0, 7);\n },\n formatConfig: function(config) {\n var values;\n config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n values = $.map(config, function(value, key) {\n value = (value && value.join ? value.join(', ') : value) || '';\n return '%@: %@'.fmt($.camelize(key), value);\n });\n if (values.length === 0) {\n return '-';\n } else {\n return values.join(', ');\n }\n },\n formatMessage: function(message, options) {\n message = message || '';\n if (options.short) {\n message = message.split(/\\n/)[0];\n }\n return this._emojize(this._escape(message)).replace(/\\n/g, '
');\n },\n formatLog: function(log, repo, item) {\n var event, url;\n event = item.constructor === Travis.Build ? 'showBuild' : 'showJob';\n url = Travis.app.get('router').urlForEvent(event, repo, item);\n return Travis.Log.filter(log, url);\n },\n pathFrom: function(url) {\n return (url || '').split('/').pop();\n },\n timeAgoInWords: function(date) {\n return $.timeago.distanceInWords(date);\n },\n durationFrom: function(started, finished) {\n started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n if (started && finished) {\n return Math.round((finished - started) / 1000);\n } else {\n return 0;\n }\n },\n timeInWords: function(duration) {\n var days, hours, minutes, result, seconds;\n days = Math.floor(duration / 86400);\n hours = Math.floor(duration % 86400 / 3600);\n minutes = Math.floor(duration % 3600 / 60);\n seconds = duration % 60;\n if (days > 0) {\n return 'more than 24 hrs';\n } else {\n result = [];\n if (hours === 1) {\n result.push(hours + ' hr');\n }\n if (hours > 1) {\n result.push(hours + ' hrs');\n }\n if (minutes > 0) {\n result.push(minutes + ' min');\n }\n if (seconds > 0) {\n result.push(seconds + ' sec');\n }\n if (result.length > 0) {\n return result.join(' ');\n } else {\n return '-';\n }\n }\n },\n _normalizeDateString: function(string) {\n if (window.JHW) {\n string = string.replace('T', ' ').replace(/-/g, '/');\n string = string.replace('Z', '').replace(/\\..*$/, '');\n }\n return string;\n },\n _nowUtc: function() {\n return this._toUtc(new Date());\n },\n _toUtc: function(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n },\n _emojize: function(text) {\n var emojis;\n emojis = text.match(/:\\S+?:/g);\n if (emojis !== null) {\n $.each(emojis.uniq(), function(ix, emoji) {\n var image, strippedEmoji;\n strippedEmoji = emoji.substring(1, emoji.length - 1);\n if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n image = '';\n return text = text.replace(new RegExp(emoji, 'g'), image);\n }\n });\n }\n return text;\n },\n _escape: function(text) {\n return text.replace(/&/g, '&').replace(//g, '>');\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n this.Travis.Urls = {\n repo: function(slug) {\n return \"/\" + slug;\n },\n builds: function(slug) {\n return \"/\" + slug + \"/builds\";\n },\n pullRequests: function(slug) {\n return \"/\" + slug + \"/pull_requests\";\n },\n branches: function(slug) {\n return \"/\" + slug + \"/branches\";\n },\n build: function(slug, id) {\n return \"/\" + slug + \"/builds/\" + id;\n },\n job: function(slug, id) {\n return \"/\" + slug + \"/jobs/\" + id;\n },\n githubCommit: function(slug, sha) {\n return \"http://github.com/\" + slug + \"/commit/\" + sha;\n },\n githubRepo: function(slug) {\n return \"http://github.com/\" + slug;\n },\n githubWatchers: function(slug) {\n return \"http://github.com/\" + slug + \"/watchers\";\n },\n githubNetwork: function(slug) {\n return \"http://github.com/\" + slug + \"/network\";\n },\n githubAdmin: function(slug) {\n return \"http://github.com/\" + slug + \"/admin/hooks#travis_minibucket\";\n },\n statusImage: function(slug, branch) {\n return (\"https://secure.travis-ci.org/\" + slug + \".png\") + (branch ? \"?branch=\" + branch : '');\n },\n email: function(email) {\n return \"mailto:\" + email;\n },\n account: function(login) {\n return \"/profile/\" + login;\n },\n user: function(login) {\n return \"/profile/\" + login + \"/me\";\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('models', "(function() {(function() {\nminispade.require('models/extensions');\nminispade.require('models/account');\nminispade.require('models/artifact');\nminispade.require('models/broadcast');\nminispade.require('models/branch');\nminispade.require('models/build');\nminispade.require('models/commit');\nminispade.require('models/event');\nminispade.require('models/hook');\nminispade.require('models/job');\nminispade.require('models/repo');\nminispade.require('models/sponsor');\nminispade.require('models/user');\nminispade.require('models/worker');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/account', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Account = Travis.Model.extend({\n primaryKey: 'login',\n login: DS.attr('string'),\n name: DS.attr('string'),\n type: DS.attr('string'),\n reposCount: DS.attr('number'),\n urlGithub: (function() {\n return \"http://github.com/\" + (this.get('login'));\n }).property()\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/account");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Artifact = Travis.Model.extend({\n body: DS.attr('string'),\n init: function() {\n this._super.apply(this, arguments);\n this.set('queue', Ember.A([]));\n this.addObserver('body', this.fetchWorker);\n return this.fetchWorker();\n },\n append: function(body) {\n if (this.get('isLoaded')) {\n return this.set('body', this.get('body') + body);\n } else {\n return this.get('queue').pushObject(body);\n }\n },\n recordDidLoad: (function() {\n var queue;\n if (this.get('isLoaded')) {\n queue = this.get('queue');\n if (queue.get('length') > 0) {\n return this.append(queue.toArray().join(''));\n }\n }\n }).observes('isLoaded'),\n fetchWorker: function() {\n var body, line, match, worker;\n if (body = this.get('body')) {\n line = body.split(\"\\n\")[0];\n if (line && (match = line.match(/Using worker: (.*)/))) {\n if (worker = match[1]) {\n worker = worker.trim().split(':')[0];\n this.set('workerName', worker);\n return this.removeObserver('body', this.fetchWorker);\n }\n }\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n commitId: DS.attr('number'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n duration: DS.attr('number'),\n startedAt: DS.attr('string'),\n finishedAt: DS.attr('string'),\n commit: DS.belongsTo('Travis.Commit'),\n repo: (function() {\n if (this.get('repoId')) {\n return Travis.Repo.find(this.get('repoId'));\n }\n }).property('repoId'),\n updateTimes: function() {\n this.notifyPropertyChange('started_at');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n this.Travis.Branch.reopenClass({\n byRepoId: function(id) {\n return this.find({\n repository_id: id\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/broadcast', "(function() {(function() {\n var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('travis/model');\n\n this.Travis.Broadcast = Travis.Model.extend({\n message: DS.attr('string'),\n toObject: function() {\n return {\n type: 'broadcast',\n id: this.get('id'),\n message: this.get('message')\n };\n },\n isSeen: (function() {\n var _ref;\n return _ref = this.get('id'), __indexOf.call(Travis.Broadcast.seen, _ref) >= 0;\n }).property(),\n setSeen: function() {\n Travis.Broadcast.seen.pushObject(this.get('id'));\n localStorage.setItem('travis.seen_broadcasts', JSON.stringify(Travis.Broadcast.seen));\n return this.notifyPropertyChange('isSeen');\n }\n });\n\n this.Travis.Broadcast.reopenClass({\n seen: Ember.A(JSON.parse(localStorage.getItem('travis.seen_broadcasts')) || [])\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/broadcast");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Build = Travis.Model.extend(Travis.DurationCalculations, {\n eventType: DS.attr('string'),\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n commitId: DS.attr('number'),\n state: DS.attr('string'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n _duration: DS.attr('number', {\n key: 'duration'\n }),\n startedAt: DS.attr('string', {\n key: 'started_at'\n }),\n finishedAt: DS.attr('string', {\n key: 'finished_at'\n }),\n repo: DS.belongsTo('Travis.Repo', {\n key: 'repository_id'\n }),\n commit: DS.belongsTo('Travis.Commit'),\n jobs: DS.hasMany('Travis.Job', {\n key: 'job_ids'\n }),\n config: (function() {\n return Travis.Helpers.compact(this.get('data.config'));\n }).property('data.config'),\n isMatrix: (function() {\n return this.get('data.job_ids.length') > 1;\n }).property('data.job_ids.length'),\n isFinished: (function() {\n return this.get('state') === 'finished';\n }).property('state'),\n requiredJobs: (function() {\n return this.get('jobs').filter(function(data) {\n return !data.get('allowFailure');\n });\n }).property('jobs.@each.allowFailure'),\n allowedFailureJobs: (function() {\n return this.get('jobs').filter(function(data) {\n return data.get('allowFailure');\n });\n }).property('jobs.@each.allowFailure'),\n configKeys: (function() {\n var config, headers, key, keys;\n if (!(config = this.get('config'))) {\n return [];\n }\n keys = $.intersect($.keys(config), Travis.CONFIG_KEYS);\n headers = (function() {\n var _i, _len, _ref, _results;\n _ref = ['build.job', 'build.duration', 'build.finished_at'];\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n key = _ref[_i];\n _results.push(I18n.t(key));\n }\n return _results;\n })();\n return $.map(headers.concat(keys), function(key) {\n return $.camelize(key);\n });\n }).property('config'),\n requeue: (function() {\n return Travis.ajax.post('/requests', {\n build_id: this.get('id')\n });\n })\n });\n\n this.Travis.Build.reopenClass({\n byRepoId: function(id, parameters) {\n return this.find($.extend(parameters || {}, {\n repository_id: id\n }));\n },\n olderThanNumber: function(id, build_number) {\n return this.find({\n url: \"/builds\",\n repository_id: id,\n after_number: build_number\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Commit = Travis.Model.extend({\n buildId: DS.attr('number'),\n sha: DS.attr('string'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n compareUrl: DS.attr('string'),\n authorName: DS.attr('string'),\n authorEmail: DS.attr('string'),\n committerName: DS.attr('string'),\n committerEmail: DS.attr('string'),\n build: DS.belongsTo('Travis.Build', {\n key: 'buildId'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/event', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Event = Travis.Model.extend({\n event: DS.attr('string'),\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n sourceId: DS.attr('number', {\n key: 'source_id'\n }),\n sourceType: DS.attr('string', {\n key: 'source_type'\n }),\n createdAt: DS.attr('string', {\n key: 'created_at'\n }),\n event_: (function() {\n return this.get('event');\n }).property('event'),\n result: (function() {\n return this.get('data.data.result');\n }).property('data.data.result'),\n message: (function() {\n return this.get('data.data.message');\n }).property('data.data.message'),\n source: (function() {\n var type;\n if (type = this.get('sourceType')) {\n return Travis[type].find(this.get('sourceId'));\n }\n }).property('sourceType', 'sourceId')\n });\n\n this.Travis.Event.reopenClass({\n byRepoId: function(id) {\n return this.find({\n repository_id: id\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/event");minispade.register('models/extensions', "(function() {(function() {\n\n Travis.DurationCalculations = Ember.Mixin.create({\n duration: (function() {\n var duration;\n if (duration = this.get('_duration')) {\n return duration;\n } else {\n return Travis.Helpers.durationFrom(this.get('startedAt'), this.get('finishedAt'));\n }\n }).property('_duration', 'finishedAt', 'startedAt'),\n updateTimes: function() {\n this.notifyPropertyChange('_duration');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/extensions");minispade.register('models/hook', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Hook = Travis.Model.extend({\n name: DS.attr('string'),\n ownerName: DS.attr('string'),\n description: DS.attr('string'),\n active: DS.attr('boolean'),\n account: (function() {\n return this.get('slug').split('/')[0];\n }).property('slug'),\n slug: (function() {\n return \"\" + (this.get('ownerName')) + \"/\" + (this.get('name'));\n }).property('ownerName', 'name'),\n urlGithub: (function() {\n return \"http://github.com/\" + (this.get('slug'));\n }).property(),\n urlGithubAdmin: (function() {\n return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n }).property(),\n toggle: function() {\n var transaction;\n transaction = this.get('store').transaction();\n transaction.add(this);\n this.set('active', !this.get('active'));\n return transaction.commit();\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/hook");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Job = Travis.Model.extend(Travis.DurationCalculations, {\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n buildId: DS.attr('number'),\n commitId: DS.attr('number'),\n logId: DS.attr('number'),\n queue: DS.attr('string'),\n state: DS.attr('string'),\n number: DS.attr('string'),\n result: DS.attr('number'),\n _duration: DS.attr('number', {\n key: 'duration'\n }),\n startedAt: DS.attr('string'),\n finishedAt: DS.attr('string'),\n allowFailure: DS.attr('boolean', {\n key: 'allow_failure'\n }),\n repo: DS.belongsTo('Travis.Repo', {\n key: 'repository_id'\n }),\n build: DS.belongsTo('Travis.Build', {\n key: 'build_id'\n }),\n commit: DS.belongsTo('Travis.Commit', {\n key: 'commit_id'\n }),\n log: DS.belongsTo('Travis.Artifact', {\n key: 'log_id'\n }),\n config: (function() {\n return Travis.Helpers.compact(this.get('data.config'));\n }).property('data.config'),\n sponsor: (function() {\n var worker;\n worker = this.get('log.workerName');\n if (worker && worker.length) {\n return Travis.WORKERS[worker] || {\n name: \"Travis Pro\",\n url: \"http://travis-ci.com\"\n };\n }\n }).property('log.workerName'),\n configValues: (function() {\n var buildConfig, config, keys;\n config = this.get('config');\n buildConfig = this.get('build.config');\n if (config && buildConfig) {\n keys = $.intersect($.keys(buildConfig), Travis.CONFIG_KEYS);\n return keys.map(function(key) {\n return config[key];\n });\n } else {\n return [];\n }\n }).property('config'),\n appendLog: function(text) {\n var log;\n if (log = this.get('log')) {\n return log.append(text);\n }\n },\n subscribe: function() {\n var id;\n if (id = this.get('id')) {\n return Travis.app.pusher.subscribe(\"job-\" + id);\n }\n },\n onStateChange: (function() {\n if (this.get('state') === 'finished') {\n return Travis.app.pusher.unsubscribe(\"job-\" + (this.get('id')));\n }\n }).observes('state')\n });\n\n this.Travis.Job.reopenClass({\n queued: function(queue) {\n this.find();\n return Travis.app.store.filter(this, function(job) {\n var queued;\n queued = ['created', 'queued'].indexOf(job.get('state')) !== -1;\n return queued && (!queue || job.get('queue') === (\"builds.\" + queue));\n });\n },\n findMany: function(ids) {\n return Travis.app.store.findMany(this, ids);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repo', "(function() {(function() {\nminispade.require('travis/expandable_record_array');\nminispade.require('travis/model');\n\n this.Travis.Repo = Travis.Model.extend({\n slug: DS.attr('string'),\n description: DS.attr('string'),\n lastBuildId: DS.attr('number'),\n lastBuildNumber: DS.attr('string'),\n lastBuildResult: DS.attr('number'),\n lastBuildStartedAt: DS.attr('string'),\n lastBuildFinishedAt: DS.attr('string'),\n lastBuild: DS.belongsTo('Travis.Build'),\n builds: (function() {\n var array, builds, id;\n id = this.get('id');\n builds = Travis.Build.byRepoId(id, {\n event_type: 'push'\n });\n array = Travis.ExpandableRecordArray.create({\n type: Travis.Build,\n content: Ember.A([]),\n store: this.get('store')\n });\n array.load(builds);\n return array;\n }).property(),\n pullRequests: (function() {\n var array, builds, id;\n id = this.get('id');\n builds = Travis.Build.byRepoId(id, {\n event_type: 'pull_request'\n });\n array = Travis.ExpandableRecordArray.create({\n type: Travis.Build,\n content: Ember.A([]),\n store: this.get('store')\n });\n array.load(builds);\n return array;\n }).property(),\n branches: (function() {\n return Travis.Branch.byRepoId(this.get('id'));\n }).property(),\n events: (function() {\n return Travis.Event.byRepoId(this.get('id'));\n }).property(),\n owner: (function() {\n return (this.get('slug') || '').split('/')[0];\n }).property('slug'),\n name: (function() {\n return (this.get('slug') || '').split('/')[1];\n }).property('slug'),\n lastBuildDuration: (function() {\n var duration;\n duration = this.get('data.last_build_duration');\n if (!duration) {\n duration = Travis.Helpers.durationFrom(this.get('lastBuildStartedAt'), this.get('lastBuildFinishedAt'));\n }\n return duration;\n }).property('data.last_build_duration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n sortOrder: (function() {\n var lastBuildFinishedAt;\n if (lastBuildFinishedAt = this.get('lastBuildFinishedAt')) {\n return -new Date(lastBuildFinishedAt).getTime();\n } else {\n return -new Date('9999').getTime() - parseInt(this.get('lastBuildId'));\n }\n }).property('lastBuildFinishedAt', 'lastBuildId'),\n stats: (function() {\n var _this = this;\n return this.get('_stats') || $.get(\"https://api.github.com/repos/\" + (this.get('slug')), function(data) {\n _this.set('_stats', data);\n return _this.notifyPropertyChange('stats');\n }) && {};\n }).property(),\n updateTimes: function() {\n return this.notifyPropertyChange('lastBuildDuration');\n }\n });\n\n this.Travis.Repo.reopenClass({\n recent: function() {\n return this.find();\n },\n ownedBy: function(login) {\n return this.find({\n owner_name: login,\n orderBy: 'name'\n });\n },\n accessibleBy: function(login) {\n return this.find({\n member: login,\n orderBy: 'name'\n });\n },\n search: function(query) {\n return this.find({\n search: query,\n orderBy: 'name'\n });\n },\n bySlug: function(slug) {\n var repo;\n repo = $.select(this.find().toArray(), function(repo) {\n return repo.get('slug') === slug;\n });\n if (repo.length > 0) {\n return repo;\n } else {\n return this.find({\n slug: slug\n });\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repo");minispade.register('models/sponsor', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Sponsor = Travis.Model.extend({\n type: DS.attr('string'),\n url: DS.attr('string'),\n link: DS.attr('string'),\n image: (function() {\n return \"/images/sponsors/\" + (this.get('data.image'));\n }).property('data.image')\n });\n\n Travis.Sponsor.reopenClass({\n decks: function() {\n return this.platinum().concat(this.gold());\n },\n platinum: function() {\n var platinum, sponsor, _i, _len, _results;\n platinum = this.byType('platinum').toArray();\n _results = [];\n for (_i = 0, _len = platinum.length; _i < _len; _i++) {\n sponsor = platinum[_i];\n _results.push([sponsor]);\n }\n return _results;\n },\n gold: function() {\n var gold, _results;\n gold = this.byType('gold').toArray();\n _results = [];\n while (gold.length > 0) {\n _results.push(gold.splice(0, 2));\n }\n return _results;\n },\n links: function() {\n return this.byType('silver');\n },\n byType: function() {\n var types;\n types = Array.prototype.slice.apply(arguments);\n return Travis.Sponsor.filter(function(sponsor) {\n return types.indexOf(sponsor.get('type')) !== -1;\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/sponsor");minispade.register('models/user', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('travis/model');\n\n this.Travis.User = Travis.Model.extend({\n name: DS.attr('string'),\n email: DS.attr('string'),\n login: DS.attr('string'),\n token: DS.attr('string'),\n locale: DS.attr('string'),\n gravatarId: DS.attr('string'),\n isSyncing: DS.attr('boolean'),\n syncedAt: DS.attr('string'),\n repoCount: DS.attr('number'),\n init: function() {\n if (this.get('isSyncing')) {\n this.poll();\n }\n this._super();\n return Ember.run.next(this, function() {\n var transaction;\n transaction = this.get('store').transaction();\n return transaction.add(this);\n });\n },\n urlGithub: (function() {\n return \"https://github.com/\" + (this.get('login'));\n }).property(),\n permissions: (function() {\n var _this = this;\n if (!this.permissions) {\n this.permissions = Ember.ArrayProxy.create({\n content: []\n });\n Travis.ajax.get('/users/permissions', function(data) {\n return _this.permissions.set('content', data.permissions);\n });\n }\n return this.permissions;\n }).property(),\n updateLocale: function(locale) {\n var observer, self, transaction;\n this.setWithSession('locale', locale);\n transaction = this.get('transaction');\n transaction.commit();\n self = this;\n observer = function() {\n if (!self.get('isSaving')) {\n self.removeObserver('isSaving', observer);\n transaction = self.get('store').transaction();\n return transaction.add(self);\n }\n };\n return this.addObserver('isSaving', observer);\n },\n type: (function() {\n return 'user';\n }).property(),\n sync: function() {\n Travis.ajax.post('/users/sync');\n this.setWithSession('isSyncing', true);\n return this.poll();\n },\n poll: function() {\n var _this = this;\n return Travis.ajax.get('/users', function(data) {\n if (data.user.is_syncing) {\n return Ember.run.later(_this, _this.poll.bind(_this), 3000);\n } else {\n _this.set('isSyncing', false);\n return _this.setWithSession('syncedAt', data.user.synced_at);\n }\n });\n },\n setWithSession: function(name, value) {\n var user;\n this.set(name, value);\n user = JSON.parse(typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0);\n user[$.underscore(name)] = this.get(name);\n return typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.setItem('travis.user', JSON.stringify(user)) : void 0;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/user");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Worker = Travis.Model.extend({\n state: DS.attr('string'),\n name: DS.attr('string'),\n host: DS.attr('string'),\n lastSeenAt: DS.attr('string'),\n payload: (function() {\n return this.get('data.payload');\n }).property('data.payload'),\n number: (function() {\n return this.get('name').match(/\\d+$/)[0];\n }).property('name'),\n isWorking: (function() {\n return this.get('state') === 'working';\n }).property('state'),\n repo: (function() {\n return Travis.Repo.find(this.get('payload.repository.id') || this.get('payload.repo.id'));\n }).property('payload.repository.id', 'payload.repo.id'),\n job_id: (function() {\n return this.get('payload.job.id');\n }).property('payload.job.id'),\n job: (function() {\n return Travis.Job.find(this.get('job_id'));\n }).property('job_id'),\n nameForSort: (function() {\n var id, match, name;\n if (name = this.get('name')) {\n match = name.match(/(.*?)-(\\d+)/);\n if (match) {\n name = match[1];\n id = match[2].toString();\n if (id.length < 2) {\n id = \"00\" + id;\n } else if (id.length < 3) {\n id = \"0\" + id;\n }\n return \"\" + name + \"-\" + id;\n }\n }\n }).property('name')\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('pusher', "(function() {(function() {\n\n Travis.Pusher = function(key) {\n if (key) {\n this.init(key);\n }\n return this;\n };\n\n $.extend(Travis.Pusher, {\n CHANNELS: ['common'],\n CHANNEL_PREFIX: ''\n });\n\n $.extend(Travis.Pusher.prototype, {\n active_channels: [],\n init: function(key) {\n var channel, _i, _len, _ref, _results;\n Pusher.warn = this.warn.bind(this);\n this.pusher = new Pusher(key);\n _ref = Travis.Pusher.CHANNELS;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n channel = _ref[_i];\n _results.push(this.subscribe(channel));\n }\n return _results;\n },\n subscribe: function(channel) {\n var _this = this;\n if (this.pusher && this.active_channels.indexOf(channel) === -1) {\n this.active_channels.push(channel);\n return this.pusher.subscribe(this.prefix(channel)).bind_all(function(event, data) {\n return _this.receive(event, data);\n });\n }\n },\n unsubscribe: function(channel) {\n var ix;\n ix = this.active_channels.indexOf(channel);\n if (this.pusher && ix === -1) {\n this.active_channels.splice(ix, 1);\n return this.pusher.unsubscribe(this.prefix(channel));\n }\n },\n prefix: function(channel) {\n return \"\" + Travis.Pusher.CHANNEL_PREFIX + channel;\n },\n receive: function(event, data) {\n if (event.substr(0, 6) === 'pusher') {\n return;\n }\n if (data.id) {\n data = this.normalize(event, data);\n }\n return Ember.run.next(function() {\n return Travis.app.store.receive(event, data);\n });\n },\n normalize: function(event, data) {\n switch (event) {\n case 'build:started':\n case 'build:finished':\n return data;\n case 'job:created':\n case 'job:started':\n case 'job:finished':\n case 'job:log':\n if (data.queue) {\n data.queue = data.queue.replace('builds.', '');\n }\n return {\n job: data\n };\n case 'worker:added':\n case 'worker:updated':\n case 'worker:removed':\n return {\n worker: data\n };\n }\n },\n warn: function(type, warning) {\n if (!this.ignoreWarning(warning)) {\n return console.warn(warning);\n }\n },\n ignoreWarning: function(warning) {\n var message, _ref;\n if (message = (_ref = warning.data) != null ? _ref.message : void 0) {\n return message.indexOf('Existing subscription') === 0 || message.indexOf('No current subscription') === 0;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=pusher");minispade.register('routes', "(function() {(function() {\n var defaultRoute, lineNumberRoute;\nminispade.require('travis/location');\n\n defaultRoute = Ember.Route.extend({\n route: '/',\n index: 1000\n });\n\n lineNumberRoute = Ember.Route.extend({\n route: '#L:number',\n index: 1,\n connectOutlets: function(router) {\n return router.saveLineNumberHash();\n },\n dynamicSegmentPattern: \"([0-9]+)\"\n });\n\n Travis.Router = Ember.Router.extend({\n location: 'travis',\n enableLogging: true,\n initialState: 'loading',\n showRoot: Ember.Route.transitionTo('root.home.show'),\n showStats: Ember.Route.transitionTo('root.stats'),\n showRepo: Ember.Route.transitionTo('root.home.repo.show'),\n showBuilds: Ember.Route.transitionTo('root.home.repo.builds.index'),\n showBuild: Ember.Route.transitionTo('root.home.repo.builds.show'),\n showPullRequests: Ember.Route.transitionTo('root.home.repo.pullRequests'),\n showBranches: Ember.Route.transitionTo('root.home.repo.branches'),\n showEvents: Ember.Route.transitionTo('root.home.repo.events'),\n showJob: Ember.Route.transitionTo('root.home.repo.job'),\n showProfile: Ember.Route.transitionTo('root.profile'),\n showAccount: Ember.Route.transitionTo('root.profile.account'),\n showUserProfile: Ember.Route.transitionTo('root.profile.account.profile'),\n saveLineNumberHash: function(path) {\n return Ember.run.next(this, function() {\n var match;\n path = path || this.get('location').getURL();\n if (match = path.match(/#L\\d+$/)) {\n return this.set('repoController.lineNumberHash', match[0]);\n }\n });\n },\n reload: function() {\n var url;\n url = this.get('location').getURL();\n this.transitionTo('loading');\n return this.route(url);\n },\n signedIn: function() {\n return !!Travis.app.get('auth.user');\n },\n needsAuth: function(path) {\n return path.indexOf('/profile') === 0;\n },\n afterSignOut: function() {\n return this.authorize('/');\n },\n loading: Ember.Route.extend({\n routePath: function(router, path) {\n router.saveLineNumberHash(path);\n router.authorize(path);\n if (!router.signedIn()) {\n return Travis.app.autoSignIn();\n }\n }\n }),\n authorize: function(path) {\n if (!this.signedIn() && this.needsAuth(path)) {\n Travis.app.storeAfterSignInPath(path);\n return this.transitionTo('root.auth');\n } else {\n this.transitionTo('root');\n return this.route(path);\n }\n },\n root: Ember.Route.extend({\n route: '/',\n loading: Ember.State.extend(),\n afterSignIn: (function() {}),\n auth: Ember.Route.extend({\n route: '/auth',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('authLayout');\n $('body').attr('id', 'auth');\n router.get('authLayoutController').connectOutlet('top', 'top');\n return router.get('authLayoutController').connectOutlet('main', 'signin');\n },\n afterSignIn: function(router, path) {\n return router.route(path || '/');\n }\n }),\n stats: Ember.Route.extend({\n route: '/stats',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('statsLayout');\n $('body').attr('id', 'stats');\n router.get('statsLayoutController').connectOutlet('top', 'top');\n return router.get('statsLayoutController').connectOutlet('main', 'stats');\n }\n }),\n profile: Ember.Route.extend({\n initialState: 'index',\n route: '/profile',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('profileLayout');\n $('body').attr('id', 'profile');\n router.get('accountsController').set('content', Travis.Account.find());\n router.get('profileLayoutController').connectOutlet('top', 'top');\n return router.get('profileLayoutController').connectOutlet('left', 'accounts');\n },\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n router.get('profileLayoutController').connectOutlet('main', 'profile');\n return router.get('profileController').activate('hooks');\n }\n }),\n account: Ember.Route.extend({\n initialState: 'index',\n route: '/:login',\n connectOutlets: function(router, account) {\n var params;\n if (account) {\n params = {\n login: account.get('login')\n };\n return router.get('profileController').setParams(params);\n } else {\n return router.send('showProfile');\n }\n },\n deserialize: function(router, params) {\n var account, controller, deferred, observer;\n controller = router.get('accountsController');\n if (!controller.get('content')) {\n controller.set('content', Travis.Account.find());\n }\n account = controller.findByLogin(params.login);\n if (account) {\n return account;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (account = controller.findByLogin(params.login)) {\n controller.removeObserver('content.length', observer);\n return deferred.resolve(account);\n }\n };\n controller.addObserver('content.length', observer);\n return deferred.promise();\n }\n },\n serialize: function(router, account) {\n if (account) {\n return {\n login: account.get('login')\n };\n } else {\n return {};\n }\n },\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('profileController').activate('hooks');\n }\n }),\n profile: Ember.Route.extend({\n route: '/profile',\n connectOutlets: function(router) {\n return router.get('profileController').activate('user');\n }\n })\n })\n }),\n home: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('homeLayout');\n $('body').attr('id', 'home');\n router.get('homeLayoutController').connectOutlet('left', 'repos');\n router.get('homeLayoutController').connectOutlet('right', 'sidebar');\n router.get('homeLayoutController').connectOutlet('top', 'top');\n router.get('homeLayoutController').connectOutlet('main', 'repo');\n router.get('homeLayoutController').connectOutlet('flash', 'flash');\n return router.get('repoController').set('repos', router.get('reposController'));\n },\n show: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('repoController').activate('index');\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n }),\n showWithLineNumber: Ember.Route.extend({\n route: '/#/L:number',\n connectOutlets: function(router) {\n return router.get('repoController').activate('index');\n }\n }),\n repo: Ember.Route.extend({\n route: '/:owner/:name',\n dynamicSegmentPattern: \"([^/#]+)\",\n connectOutlets: function(router, repo) {\n return router.get('repoController').set('repo', repo);\n },\n deserialize: function(router, params) {\n var deferred, observer, repos, slug;\n slug = \"\" + params.owner + \"/\" + params.name;\n repos = Travis.Repo.bySlug(slug);\n deferred = $.Deferred();\n observer = function() {\n if (repos.get('isLoaded')) {\n repos.removeObserver('isLoaded', observer);\n return deferred.resolve(repos.objectAt(0));\n }\n };\n if (repos.length) {\n deferred.resolve(repos[0]);\n } else {\n repos.addObserver('isLoaded', observer);\n }\n return deferred.promise();\n },\n serialize: function(router, repo) {\n if (repo) {\n return {\n owner: repo.get('owner'),\n name: repo.get('name')\n };\n } else {\n return {};\n }\n },\n show: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('repoController').activate('current');\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n }),\n builds: Ember.Route.extend({\n route: '/builds',\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('builds');\n }\n }),\n show: Ember.Route.extend({\n route: '/:build_id',\n connectOutlets: function(router, build) {\n if (!build.get) {\n build = Travis.Build.find(build);\n }\n router.get('repoController').set('build', build);\n return router.get('repoController').activate('build');\n },\n serialize: function(router, build) {\n if (build.get) {\n return {\n build_id: build.get('id')\n };\n } else {\n return {\n build_id: build\n };\n }\n },\n deserialize: function(router, params) {\n var build, deferred, observer;\n build = Travis.Build.find(params.build_id);\n if (build.get('id')) {\n return build;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (build.get('id')) {\n build.removeObserver('id', observer);\n return deferred.resolve(build);\n }\n };\n build.addObserver('id', observer);\n return deferred.promise();\n }\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute,\n dynamicSegmentPattern: \"([^/#]+)\"\n })\n }),\n pullRequests: Ember.Route.extend({\n route: '/pull_requests',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('pull_requests');\n }\n }),\n branches: Ember.Route.extend({\n route: '/branches',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('branches');\n }\n }),\n events: Ember.Route.extend({\n route: '/events',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('events');\n }\n }),\n job: Ember.Route.extend({\n route: '/jobs/:job_id',\n dynamicSegmentPattern: \"([^/#]+)\",\n connectOutlets: function(router, job) {\n if (!job.get) {\n job = Travis.Job.find(job);\n }\n router.get('repoController').set('job', job);\n return router.get('repoController').activate('job');\n },\n serialize: function(router, job) {\n if (job.get) {\n return {\n job_id: job.get('id')\n };\n } else {\n return {\n job_id: job\n };\n }\n },\n deserialize: function(router, params) {\n var deferred, job, observer;\n job = Travis.Job.find(params.job_id);\n if (job.get('id')) {\n return job;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (job.get('id')) {\n job.removeObserver('id', observer);\n return deferred.resolve(job);\n }\n };\n job.addObserver('id', observer);\n return deferred.promise();\n }\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n })\n })\n })\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=routes");minispade.register('slider', "(function() {(function() {\n\n this.Travis.Slider = function() {\n if ((typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.maximized') : void 0) === 'true') {\n this.minimize();\n }\n return this;\n };\n\n $.extend(Travis.Slider.prototype, {\n persist: function() {\n return typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.setItem('travis.maximized', this.isMinimized()) : void 0;\n },\n isMinimized: function() {\n return $('body').hasClass('maximized');\n },\n minimize: function() {\n return $('body').addClass('maximized');\n },\n toggle: function() {\n var element;\n $('body').toggleClass('maximized');\n this.persist();\n element = $('');\n $('#top .profile').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=slider");minispade.register('store', "(function() {(function() {\n var DATA_PROXY,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('store/rest_adapter');\n\n DATA_PROXY = {\n get: function(name) {\n return this.savedData[name];\n }\n };\n\n Travis.Store = DS.Store.extend({\n revision: 4,\n adapter: Travis.RestAdapter.create(),\n load: function(type, id, hash) {\n var record, result;\n result = this._super.apply(this, arguments);\n if (result && result.clientId) {\n record = this.findByClientId(type, result.clientId);\n record.set('incomplete', false);\n record.set('complete', true);\n }\n return result;\n },\n merge: function(type, id, hash) {\n var clientId, data, dataCache, primaryKey, record, recordCache, typeMap;\n if (hash === void 0) {\n hash = id;\n primaryKey = type.proto().primaryKey;\n Ember.assert(\"A data hash was loaded for a record of type \" + type.toString() + \" but no primary key '\" + primaryKey + \"' was provided.\", hash[primaryKey]);\n id = hash[primaryKey];\n }\n typeMap = this.typeMapFor(type);\n dataCache = typeMap.cidToHash;\n clientId = typeMap.idToCid[id];\n recordCache = this.get('recordCache');\n if (clientId !== void 0) {\n if (data = dataCache[clientId]) {\n $.extend(data, hash);\n } else {\n dataCache[clientId] = hash;\n }\n if (record = recordCache[clientId]) {\n record.send('didChangeData');\n }\n } else {\n clientId = this.pushHash(hash, id, type);\n }\n if (clientId) {\n DATA_PROXY.savedData = hash;\n this.updateRecordArrays(type, clientId, DATA_PROXY);\n return {\n id: id,\n clientId: clientId\n };\n }\n },\n receive: function(event, data) {\n var job, mappings, name, type, _ref;\n _ref = event.split(':'), name = _ref[0], type = _ref[1];\n mappings = this.adapter.get('mappings');\n type = mappings[name];\n if (event === 'job:log') {\n if (job = this.find(Travis.Job, data['job']['id'])) {\n return job.appendLog(data['job']['_log']);\n }\n } else if (data[type.singularName()]) {\n return this._loadOne(this, type, data);\n } else if (data[type.pluralName()]) {\n return this._loadMany(this, type, data);\n } else {\n if (!type) {\n throw \"can't load data for \" + name;\n }\n }\n },\n _loadOne: function(store, type, json) {\n var result, root;\n root = type.singularName();\n if (type === Travis.Build && json.repository) {\n result = this.loadIncomplete(Travis.Repo, json.repository);\n }\n return this.loadIncomplete(type, json[root]);\n },\n loadIncomplete: function(type, hash) {\n var record, result;\n result = this.merge(type, hash);\n if (result && result.clientId) {\n record = this.findByClientId(type, result.clientId);\n if (!record.get('complete')) {\n record.set('incomplete', true);\n record.loadedAttributes = Object.keys(hash);\n }\n this._updateAssociations(type, type.singularName(), hash);\n return record;\n }\n },\n _loadMany: function(store, type, json) {\n var root;\n root = type.pluralName();\n this.adapter.sideload(store, type, json, root);\n return this.loadMany(type, json[root]);\n },\n _updateAssociations: function(type, name, data) {\n var _this = this;\n return Em.get(type, 'associationsByName').forEach(function(key, meta) {\n var clientId, dataProxy, id, ids, parent, _ref;\n if (meta.kind === 'belongsTo') {\n id = data[\"\" + key + \"_id\"];\n if (clientId = _this.typeMapFor(meta.type).idToCid[id]) {\n if (parent = _this.findByClientId(meta.type, clientId, id)) {\n dataProxy = parent.get('data');\n if (ids = dataProxy.get(\"\" + name + \"_ids\")) {\n if (_ref = data.id, __indexOf.call(ids, _ref) < 0) {\n ids.pushObject(data.id);\n }\n return parent.send('didChangeData');\n }\n }\n }\n }\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n this.Travis.FixtureAdapter = DS.Adapter.extend({\n find: function(store, type, id) {\n var fixtures;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n if (fixtures.hasLoaded) {\n return;\n }\n return setTimeout((function() {\n store.loadMany(type, fixtures);\n return fixtures.hasLoaded = true;\n }), 300);\n },\n findMany: function() {\n return this.find.apply(this, arguments);\n },\n findAll: function(store, type) {\n var fixtures, ids;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n ids = fixtures.map(function(item, index, self) {\n return item.id;\n });\n return store.loadMany(type, ids, fixtures);\n },\n findQuery: function(store, type, params, array) {\n var fixture, fixtures, hashes, key, matches, value;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n hashes = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n fixture = fixtures[_i];\n matches = (function() {\n var _results1;\n _results1 = [];\n for (key in params) {\n value = params[key];\n _results1.push(key === 'orderBy' || fixture[key] === value);\n }\n return _results1;\n })();\n if (matches.reduce(function(a, b) {\n return a && b;\n })) {\n _results.push(fixture);\n } else {\n _results.push(null);\n }\n }\n return _results;\n })();\n return array.load(hashes.compact());\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('models');\n\n this.Travis.RestAdapter = DS.RESTAdapter.extend({\n mappings: {\n broadcasts: Travis.Broadcast,\n repositories: Travis.Repo,\n repository: Travis.Repo,\n repos: Travis.Repo,\n repo: Travis.Repo,\n builds: Travis.Build,\n build: Travis.Build,\n commits: Travis.Commit,\n commit: Travis.Commit,\n jobs: Travis.Job,\n job: Travis.Job,\n account: Travis.Account,\n accounts: Travis.Account,\n worker: Travis.Worker,\n workers: Travis.Worker\n },\n plurals: {\n repositories: 'repositories',\n repository: 'repositories',\n repo: 'repos',\n repos: 'repos',\n build: 'builds',\n branch: 'branches',\n job: 'jobs',\n worker: 'workers',\n profile: 'profile'\n },\n ajax: function() {\n return Travis.ajax.ajax.apply(this, arguments);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('tailing', "(function() {(function() {\n\n this.Travis.Tailing = function() {\n this.position = $(window).scrollTop();\n $(window).scroll(this.onScroll.bind(this));\n return this;\n };\n\n $.extend(Travis.Tailing.prototype, {\n options: {\n timeout: 200\n },\n run: function() {\n this.autoScroll();\n this.positionButton();\n if (this.active()) {\n return Ember.run.later(this.run.bind(this), this.options.timeout);\n }\n },\n toggle: function(event) {\n if (this.active()) {\n return this.stop();\n } else {\n return this.start();\n }\n },\n active: function() {\n return $('#tail').hasClass('active');\n },\n start: function() {\n $('#tail').addClass('active');\n return this.run();\n },\n stop: function() {\n return $('#tail').removeClass('active');\n },\n autoScroll: function() {\n var log, logBottom, win, winBottom;\n if (!this.active()) {\n return;\n }\n win = $(window);\n log = $('#log');\n logBottom = log.offset().top + log.outerHeight() + 40;\n winBottom = win.scrollTop() + win.height();\n if (logBottom - winBottom > 0) {\n return win.scrollTop(logBottom - win.height());\n }\n },\n onScroll: function() {\n var position;\n this.positionButton();\n position = $(window).scrollTop();\n if (position < this.position) {\n this.stop();\n }\n return this.position = position;\n },\n positionButton: function() {\n var max, offset, tail;\n tail = $('#tail');\n if (tail.length === 0) {\n return;\n }\n offset = $(window).scrollTop() - $('#log').offset().top;\n max = $('#log').height() - $('#tail').height() + 5;\n if (offset > max) {\n offset = max;\n }\n if (offset > 0) {\n return tail.css({\n top: offset - 2\n });\n } else {\n return tail.css({\n top: 0\n });\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=tailing");minispade.register('views', "(function() {(function() {\nminispade.require('ext/ember/namespace');\n\n this.Travis.reopen({\n View: Em.View.extend({\n popup: function(event) {\n this.popupCloseAll();\n return $(\"#\" + event.target.name).toggleClass('display');\n },\n popupClose: function(event) {\n return $(event.target).closest('.popup').removeClass('display');\n },\n popupCloseAll: function() {\n return $('.popup').removeClass('display');\n }\n })\n });\n\n this.Travis.reopen({\n HomeLayoutView: Travis.View.extend({\n templateName: 'layouts/home'\n }),\n AuthLayoutView: Travis.View.extend({\n templateName: 'layouts/simple'\n }),\n ProfileLayoutView: Travis.View.extend({\n templateName: 'layouts/profile'\n }),\n StatsLayoutView: Travis.View.extend({\n templateName: 'layouts/simple'\n })\n });\nminispade.require('views/accounts');\nminispade.require('views/application');\nminispade.require('views/build');\nminispade.require('views/events');\nminispade.require('views/flash');\nminispade.require('views/job');\nminispade.require('views/repo');\nminispade.require('views/profile');\nminispade.require('views/sidebar');\nminispade.require('views/stats');\nminispade.require('views/signin');\nminispade.require('views/top');\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('views/accounts', "(function() {(function() {\n\n this.Travis.reopen({\n AccountsView: Travis.View.extend({\n tabBinding: 'controller.tab',\n templateName: 'profile/accounts',\n classAccounts: (function() {\n if (this.get('tab') === 'accounts') {\n return 'active';\n }\n }).property('tab')\n }),\n AccountsListView: Em.CollectionView.extend({\n elementId: 'accounts',\n accountBinding: 'content',\n tagName: 'ul',\n emptyView: Ember.View.extend({\n template: Ember.Handlebars.compile('
Loading')\n }),\n itemViewClass: Travis.View.extend({\n accountBinding: 'content',\n typeBinding: 'content.type',\n selectedBinding: 'account.selected',\n classNames: ['account'],\n classNameBindings: ['type', 'selected'],\n name: (function() {\n return this.get('content.name') || this.get('content.login');\n }).property('content.login', 'content.name'),\n urlAccount: (function() {\n return Travis.Urls.account(this.get('account.login'));\n }).property('account.login')\n })\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/accounts");minispade.register('views/application', "(function() {(function() {\n\n this.Travis.reopen({\n ApplicationView: Travis.View.extend({\n templateName: 'application',\n classNames: ['application'],\n localeDidChange: (function() {\n var locale;\n if (locale = Travis.app.get('auth.user.locale')) {\n Travis.setLocale(locale);\n return Travis.app.get('router').reload();\n }\n }).observes('Travis.app.auth.user.locale'),\n click: function(event) {\n var targetAndParents;\n targetAndParents = $(event.target).parents().andSelf();\n if (!(targetAndParents.hasClass('open-popup') || targetAndParents.hasClass('popup'))) {\n this.popupCloseAll();\n }\n if (!targetAndParents.hasClass('menu')) {\n return $('.menu').removeClass('display');\n }\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/application");minispade.register('views/build', "(function() {(function() {\n\n this.Travis.reopen({\n BuildsView: Travis.View.extend({\n templateName: 'builds/list',\n buildsBinding: 'controller.builds',\n showMore: function() {\n var id, number;\n id = this.get('controller.repo.id');\n number = this.get('builds.lastObject.number');\n return this.get('builds').load(Travis.Build.olderThanNumber(id, number));\n },\n ShowMoreButton: Em.View.extend({\n tagName: 'button',\n classNameBindings: ['isLoading'],\n attributeBindings: ['disabled'],\n isLoadingBinding: 'controller.builds.isLoading',\n template: Em.Handlebars.compile('{{view.label}}'),\n disabledBinding: 'isLoading',\n label: (function() {\n if (this.get('isLoading')) {\n return 'Loading';\n } else {\n return 'Show more';\n }\n }).property('isLoading'),\n click: function() {\n return this.get('parentView').showMore();\n }\n })\n }),\n BuildsItemView: Travis.View.extend({\n tagName: 'tr',\n classNameBindings: ['color'],\n repoBinding: 'controller.repo',\n buildBinding: 'context',\n commitBinding: 'build.commit',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('build.result'));\n }).property('build.result'),\n urlBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n }).property('repo.slug', 'build.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha')\n }),\n BuildView: Travis.View.extend({\n templateName: 'builds/show',\n elementId: 'build',\n classNameBindings: ['color', 'loading'],\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n commitBinding: 'build.commit',\n currentItemBinding: 'build',\n loading: (function() {\n return !this.get('build.isComplete');\n }).property('build.isComplete'),\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('build.result'));\n }).property('build.result'),\n urlBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n }).property('repo.slug', 'build.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha'),\n urlAuthor: (function() {\n return Travis.Urls.email(this.get('commit.authorEmail'));\n }).property('commit.authorEmail'),\n urlCommitter: (function() {\n return Travis.Urls.email(this.get('commit.committerEmail'));\n }).property('commit.committerEmail')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/build");minispade.register('views/events', "(function() {(function() {\n\n this.Travis.reopen({\n EventsView: Travis.View.extend({\n templateName: 'events/list',\n eventsBinding: 'controller.events'\n }),\n EventsItemView: Travis.View.extend({\n tagName: 'tr'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/events");minispade.register('views/flash', "(function() {(function() {\n\n this.Travis.reopen({\n FlashView: Travis.View.extend({\n elementId: 'flash',\n tagName: 'ul',\n templateName: 'layouts/flash'\n }),\n FlashItemView: Travis.View.extend({\n tagName: 'li',\n classNameBindings: ['type'],\n type: (function() {\n return this.get('flash.type') || 'broadcast';\n }).property('flash.type'),\n close: function(event) {\n return this.get('controller').close(this.get('flash'));\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/flash");minispade.register('views/job', "(function() {(function() {\n\n this.Travis.reopen({\n JobsView: Travis.View.extend({\n templateName: 'jobs/list',\n buildBinding: 'controller.build'\n }),\n JobsItemView: Travis.View.extend({\n tagName: 'tr',\n classNameBindings: ['color'],\n repoBinding: 'context.repo',\n jobBinding: 'context',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('job.result'));\n }).property('job.result'),\n urlJob: (function() {\n return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n }).property('repo.slug', 'job.id')\n }),\n JobView: Travis.View.extend({\n templateName: 'jobs/show',\n repoBinding: 'controller.repo',\n jobBinding: 'controller.job',\n commitBinding: 'job.commit',\n currentItemBinding: 'job',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('job.result'));\n }).property('job.result'),\n urlJob: (function() {\n return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n }).property('repo.slug', 'job.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha'),\n urlAuthor: (function() {\n return Travis.Urls.email(this.get('commit.authorEmail'));\n }).property('commit.authorEmail'),\n urlCommitter: (function() {\n return Travis.Urls.email(this.get('commit.committerEmail'));\n }).property('commit.committerEmail')\n }),\n LogView: Travis.View.extend({\n templateName: 'jobs/log',\n logBinding: 'job.log',\n scrollTo: function(hash) {\n var currentScroll;\n $('#main').scrollTop(0);\n currentScroll = $('.application > div').scrollTop();\n $('.application > div').scrollTop($(hash).offset().top + currentScroll - 40);\n return this.set('controller.lineNumberHash', null);\n },\n lineNumberHashDidChange: (function() {\n return this.tryScrollingToHashLineNumber();\n }).observes('controller.lineNumberHash'),\n tryScrollingToHashLineNumber: function() {\n var checker, hash, self;\n if (hash = this.get('controller.lineNumberHash')) {\n self = this;\n checker = function() {\n if (self.get('isDestroyed')) {\n return;\n }\n if ($(hash).length) {\n return self.scrollTo(hash);\n } else {\n return setTimeout(checker, 100);\n }\n };\n return checker();\n }\n },\n didInsertElement: function() {\n this._super.apply(this, arguments);\n return this.tryScrollingToHashLineNumber();\n },\n click: function(event) {\n var path, target;\n target = $(event.target);\n target.closest('.fold').toggleClass('open');\n if (target.is('.log-line-number')) {\n path = target.attr('href');\n Travis.app.get('router').route(path);\n event.stopPropagation();\n return false;\n }\n },\n toTop: function() {\n return $(window).scrollTop(0);\n },\n jobBinding: 'context',\n toggleTailing: function(event) {\n Travis.app.tailing.toggle();\n return event.preventDefault();\n },\n logSubscriber: (function() {\n var job, state;\n job = this.get('job');\n state = this.get('job.state');\n if (job && state !== 'finished') {\n job.subscribe();\n }\n return null;\n }).property('job', 'job.state')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/job");minispade.register('views/left', "(function() {(function() {\n\n this.Travis.reopen({\n ReposView: Travis.View.extend({\n templateName: 'repos/list',\n tabBinding: 'controller.tab',\n classRecent: (function() {\n if (this.get('tab') === 'recent') {\n return 'active';\n }\n }).property('tab'),\n classOwned: (function() {\n var classes;\n classes = [];\n if (this.get('tab') === 'owned') {\n classes.push('active');\n }\n if (Travis.app.get('currentUser')) {\n classes.push('display');\n }\n return classes.join(' ');\n }).property('tab', 'Travis.currentUser'),\n classSearch: (function() {\n if (this.get('tab') === 'search') {\n return 'active';\n }\n }).property('tab')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/left");minispade.register('views/profile', "(function() {(function() {\n\n this.Travis.reopen({\n ProfileView: Travis.View.extend({\n templateName: 'profile/show',\n accountBinding: 'controller.account',\n name: (function() {\n return this.get('account.name') || this.get('account.login');\n }).property('account.name', 'account.login')\n }),\n ProfileTabsView: Travis.View.extend({\n templateName: 'profile/tabs',\n tabBinding: 'controller.tab',\n activate: function(event) {\n return this.get('controller').activate(event.target.name);\n },\n classHooks: (function() {\n if (this.get('tab') === 'hooks') {\n return 'active';\n }\n }).property('tab'),\n classUser: (function() {\n if (this.get('tab') === 'user') {\n return 'active';\n }\n }).property('tab'),\n accountBinding: 'controller.account',\n displayUser: (function() {\n return this.get('controller.account.login') === this.get('controller.user.login');\n }).property('controller.account.login', 'controller.user.login')\n }),\n HooksView: Travis.View.extend({\n templateName: 'profile/tabs/hooks',\n userBinding: 'controller.user',\n urlGithubAdmin: (function() {\n return Travis.Urls.githubAdmin(this.get('hook.slug'));\n }).property('hook.slug')\n }),\n UserView: Travis.View.extend({\n templateName: 'profile/tabs/user',\n userBinding: 'controller.user',\n gravatarUrl: (function() {\n return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=48&d=mm\";\n }).property('user.gravatarId'),\n locales: (function() {\n return [\n {\n key: null,\n name: ''\n }, {\n key: 'en',\n name: 'English'\n }, {\n key: 'ca',\n name: 'Catalan'\n }, {\n key: 'cs',\n name: 'Čeština'\n }, {\n key: 'es',\n name: 'Español'\n }, {\n key: 'fr',\n name: 'Français'\n }, {\n key: 'ja',\n name: '日本語'\n }, {\n key: 'nl',\n name: 'Nederlands'\n }, {\n key: 'nb',\n name: 'Norsk Bokmål'\n }, {\n key: 'pl',\n name: 'Polski'\n }, {\n key: {\n 'pt-BR': {\n name: 'Português brasileiro'\n }\n }\n }, {\n key: 'ru',\n name: 'Русский'\n }\n ];\n }).property(),\n saveLocale: function(event) {\n return this.get('user').updateLocale($('#locale').val());\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/profile");minispade.register('views/repo', "(function() {(function() {\nminispade.require('views/repo/list');\nminispade.require('views/repo/show');\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo");minispade.register('views/repo/list', "(function() {(function() {\n\n this.Travis.reopen({\n ReposView: Travis.View.extend({\n templateName: 'repos/list',\n toggleInfo: function(event) {\n return $('#repos').toggleClass('open');\n }\n }),\n ReposListView: Em.CollectionView.extend({\n elementId: 'repos',\n tagName: 'ul',\n emptyView: Ember.View.extend({\n template: Ember.Handlebars.compile('Loading')\n }),\n itemViewClass: Travis.View.extend({\n repoBinding: 'content',\n classNames: ['repo'],\n classNameBindings: ['color', 'selected'],\n selectedBinding: 'repo.selected',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('repo.lastBuildResult'));\n }).property('repo.lastBuildResult'),\n urlRepo: (function() {\n return Travis.Urls.repo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlLastBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('repo.lastBuildId'));\n }).property('repo.slug', 'repo.lastBuildId')\n })\n }),\n ReposListTabsView: Travis.View.extend({\n templateName: 'repos/list/tabs',\n tabBinding: 'controller.tab',\n activate: function(event) {\n return this.get('controller').activate(event.target.name);\n },\n classRecent: (function() {\n if (this.get('tab') === 'recent') {\n return 'active';\n }\n }).property('tab'),\n classOwned: (function() {\n var classes;\n classes = [];\n if (this.get('tab') === 'owned') {\n classes.push('active');\n }\n if (Travis.app.get('currentUser')) {\n classes.push('display-inline');\n }\n return classes.join(' ');\n }).property('tab', 'Travis.app.currentUser'),\n classSearch: (function() {\n if (this.get('tab') === 'search') {\n return 'active';\n }\n }).property('tab')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/list");minispade.register('views/repo/show', "(function() {(function() {\n\n this.Travis.reopen({\n RepoView: Travis.View.extend({\n templateName: 'repos/show',\n reposBinding: 'controller.repos',\n repoBinding: 'controller.repo',\n \"class\": (function() {\n if (!this.get('repo.isComplete') && !this.get('isEmpty')) {\n return 'loading';\n }\n }).property('repo.isComplete'),\n isEmpty: (function() {\n return this.get('repos.isLoaded') && this.get('repos.length') === 0;\n }).property('repos.length'),\n urlGithub: (function() {\n return Travis.Urls.githubRepo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlGithubWatchers: (function() {\n return Travis.Urls.githubWatchers(this.get('repo.slug'));\n }).property('repo.slug'),\n urlGithubNetwork: (function() {\n return Travis.Urls.githubNetwork(this.get('repo.slug'));\n }).property('repo.slug')\n }),\n ReposEmptyView: Travis.View.extend({\n template: ''\n }),\n RepoShowTabsView: Travis.View.extend({\n templateName: 'repos/show/tabs',\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n jobBinding: 'controller.job',\n tabBinding: 'controller.tab',\n classCurrent: (function() {\n if (this.get('tab') === 'current') {\n return 'active';\n }\n }).property('tab'),\n classBuilds: (function() {\n if (this.get('tab') === 'builds') {\n return 'active';\n }\n }).property('tab'),\n classPullRequests: (function() {\n if (this.get('tab') === 'pull_requests') {\n return 'active';\n }\n }).property('tab'),\n classBranches: (function() {\n if (this.get('tab') === 'branches') {\n return 'active';\n }\n }).property('tab'),\n classEvents: (function() {\n if (this.get('tab') === 'events') {\n return 'active';\n }\n }).property('tab'),\n classBuild: (function() {\n var classes, tab;\n tab = this.get('tab');\n classes = [];\n if (tab === 'build') {\n classes.push('active');\n }\n if (tab === 'build' || tab === 'job') {\n classes.push('display-inline');\n }\n return classes.join(' ');\n }).property('tab'),\n classJob: (function() {\n if (this.get('tab') === 'job') {\n return 'active display-inline';\n }\n }).property('tab')\n }),\n RepoShowToolsView: Travis.View.extend({\n templateName: 'repos/show/tools',\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n jobBinding: 'controller.job',\n tabBinding: 'controller.tab',\n closeMenu: function() {\n return $('.menu').removeClass('display');\n },\n menu: function(event) {\n var element;\n this.popupCloseAll();\n element = $('#tools .menu').toggleClass('display');\n return event.stopPropagation();\n },\n requeue: function() {\n this.closeMenu();\n return this.get('build').requeue();\n },\n statusImages: function(event) {\n this.set('active', true);\n this.closeMenu();\n this.popup(event);\n return event.stopPropagation();\n },\n canPush: (function() {\n return this.get('isBuildTab') && this.get('build.isFinished') && this.get('hasPushPermissions');\n }).property('build.isFinished', 'hasPushPermissions', 'isBuildTab'),\n isBuildTab: (function() {\n return ['current', 'build', 'job'].indexOf(this.get('tab')) > -1;\n }).property('tab'),\n hasPushPermissions: (function() {\n var permissions;\n if (permissions = Travis.app.get('currentUser.permissions')) {\n return permissions.indexOf(this.get('repo.id')) > -1;\n }\n }).property('Travis.app.currentUser.permissions.length', 'repo.id'),\n branches: (function() {\n if (this.get('active')) {\n return this.get('repo.branches');\n }\n }).property('active', 'repo.branches'),\n urlRepo: (function() {\n return 'https://' + location.host + Travis.Urls.repo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlStatusImage: (function() {\n return Travis.Urls.statusImage(this.get('repo.slug'), this.get('branch.commit.branch'));\n }).property('repo.slug', 'branch'),\n markdownStatusImage: (function() {\n return \"[) + \")](\" + (this.get('urlRepo')) + \")\";\n }).property('urlStatusImage'),\n textileStatusImage: (function() {\n return \"!\" + (this.get('urlStatusImage')) + \"!:\" + (this.get('urlRepo'));\n }).property('urlStatusImage'),\n rdocStatusImage: (function() {\n return \"{}[\" + (this.get('urlRepo')) + \"]\";\n }).property('urlStatusImage')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/show");minispade.register('views/sidebar', "(function() {(function() {\n\n this.Travis.reopen({\n SidebarView: Travis.View.extend({\n templateName: 'layouts/sidebar',\n DecksView: Em.View.extend({\n templateName: \"sponsors/decks\",\n controller: Travis.SponsorsController.create({\n perPage: 1\n }),\n didInsertElement: function() {\n var controller;\n controller = this.get('controller');\n if (!controller.get('content')) {\n Travis.app.get('router.sidebarController').tickables.push(controller);\n controller.set('content', Travis.Sponsor.decks());\n }\n return this._super.apply(this, arguments);\n }\n }),\n LinksView: Em.View.extend({\n templateName: \"sponsors/links\",\n controller: Travis.SponsorsController.create({\n perPage: 6\n }),\n didInsertElement: function() {\n var controller;\n controller = this.get('controller');\n if (!controller.get('content')) {\n controller.set('content', Travis.Sponsor.links());\n Travis.app.get('router.sidebarController').tickables.push(controller);\n }\n return this._super.apply(this, arguments);\n }\n }),\n WorkersView: Em.View.extend({\n templateName: 'workers/list',\n controller: Travis.WorkersController.create(),\n didInsertElement: function() {\n this.set('controller.content', Travis.Worker.find());\n return this._super.apply(this, arguments);\n }\n }),\n QueuesView: Em.View.extend({\n templateName: 'queues/list',\n controller: Em.ArrayController.create(),\n didInsertElement: function() {\n var queue, queues;\n queues = (function() {\n var _i, _len, _ref, _results;\n _ref = Travis.QUEUES;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n queue = _ref[_i];\n _results.push(Em.ArrayController.create({\n content: Travis.Job.queued(queue.name),\n id: \"queue_\" + queue.name,\n name: queue.display\n }));\n }\n return _results;\n })();\n this.set('controller.content', queues);\n return this._super.apply(this, arguments);\n }\n })\n }),\n WorkersView: Travis.View.extend({\n toggleWorkers: function(event) {\n var handle;\n handle = $(event.target).toggleClass('open');\n if (handle.hasClass('open')) {\n return $('#workers li').addClass('open');\n } else {\n return $('#workers li').removeClass('open');\n }\n }\n }),\n WorkersListView: Travis.View.extend({\n toggle: function(event) {\n return $(event.target).closest('li').toggleClass('open');\n }\n }),\n WorkersItemView: Travis.View.extend({\n display: (function() {\n var name, number, payload, repo, state;\n name = (this.get('worker.name') || '').replace('travis-', '');\n state = this.get('worker.state');\n payload = this.get('worker.payload');\n if (state === 'working' && (payload != null ? payload.repository : void 0) && (payload != null ? payload.build : void 0)) {\n repo = payload.repository.slug;\n number = ' #' + payload.build.number;\n return (\"\" + name + \": \" + repo + \" \" + number).htmlSafe();\n } else {\n return \"\" + name + \": \" + state;\n }\n }).property('worker.state')\n }),\n QueueItemView: Travis.View.extend({\n tagName: 'li'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/sidebar");minispade.register('views/signin', "(function() {(function() {\n\n this.Travis.reopen({\n SigninView: Travis.View.extend({\n templateName: 'auth/signin',\n signingIn: (function() {\n return Travis.app.get('authState') === 'signing-in';\n }).property('Travis.app.authState')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/signin");minispade.register('views/stats', "(function() {(function() {\n\n this.Travis.reopen({\n StatsView: Travis.View.extend({\n templateName: 'stats/show',\n didInsertElement: function() {},\n renderChart: function(config) {\n var chart;\n chart = new Highcharts.Chart(config);\n return this.fetch(config.source, function(data) {\n var stats;\n stats = (function() {\n var _i, _len, _ref, _results;\n _ref = data.stats;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n stats = _ref[_i];\n _results.push(config.map(stats));\n }\n return _results;\n })();\n return chart.series[0].setData(stats);\n });\n },\n fetch: function(url, callback) {\n return $.ajax({\n type: 'GET',\n url: url,\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n },\n success: callback\n });\n },\n CHARTS: {\n repos: {\n source: '/api/stats/repos',\n total: 0,\n map: function(data) {\n return [Date.parse(data.date), this.total += parseInt(data.count)];\n },\n chart: {\n renderTo: \"repos_stats\"\n },\n title: {\n text: \"Total Projects/Repositories\"\n },\n xAxis: {\n type: \"datetime\",\n dateTimeLabelFormats: {\n month: \"%e. %b\",\n year: \"%b\"\n }\n },\n yAxis: {\n title: {\n text: \"Count\"\n },\n min: 0\n },\n tooltip: {\n formatter: function() {\n return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" repos\";\n }\n },\n series: [\n {\n name: \"Repository Growth\",\n data: []\n }\n ]\n },\n builds: {\n source: '/api/stats/tests',\n map: function(data) {\n return [Date.parse(data.date), parseInt(data.count)];\n },\n chart: {\n renderTo: \"tests_stats\",\n type: \"column\"\n },\n title: {\n text: \"Build Count\"\n },\n subtitle: {\n text: \"last month\"\n },\n xAxis: {\n type: \"datetime\",\n dateTimeLabelFormats: {\n month: \"%e. %b\",\n year: \"%b\"\n }\n },\n yAxis: {\n title: {\n text: \"Count\"\n },\n min: 0\n },\n tooltip: {\n formatter: function() {\n return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" builds\";\n }\n },\n series: [\n {\n name: \"Total Builds\",\n data: []\n }\n ]\n }\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/stats");minispade.register('views/top', "(function() {(function() {\n\n this.Travis.reopen({\n TopView: Travis.View.extend({\n templateName: 'layouts/top',\n tabBinding: 'controller.tab',\n userBinding: 'controller.user',\n gravatarUrl: (function() {\n return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=24&d=mm\";\n }).property('user.gravatarId'),\n classHome: (function() {\n if (this.get('tab') === 'home') {\n return 'active';\n }\n }).property('tab'),\n classStats: (function() {\n if (this.get('tab') === 'stats') {\n return 'active';\n }\n }).property('tab'),\n classProfile: (function() {\n var classes;\n classes = ['profile'];\n if (this.get('tab') === 'profile') {\n classes.push('active');\n }\n classes.push(Travis.app.get('authState'));\n return classes.join(' ');\n }).property('tab', 'Travis.app.authState'),\n showProfile: function() {\n return $('#top .profile ul').show();\n },\n hideProfile: function() {\n return $('#top .profile ul').hide();\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/top");minispade.register('config/emoij', "(function() {(function() {\n\n this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=config/emoij");minispade.register('data/sponsors', "(function() {(function() {\n\n this.Travis.SPONSORS = [\n {\n type: 'platinum',\n url: \"http://www.wooga.com\",\n image: \"wooga-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://bendyworks.com\",\n image: \"bendyworks-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://cloudcontrol.com\",\n image: \"cloudcontrol-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://xing.de\",\n image: \"xing-205x130.png\"\n }, {\n type: 'gold',\n url: \"http://heroku.com\",\n image: \"heroku-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://soundcloud.com\",\n image: \"soundcloud-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://nedap.com\",\n image: \"nedap-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://mongohq.com\",\n image: \"mongohq-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://zweitag.de\",\n image: \"zweitag-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://kanbanery.com\",\n image: \"kanbanery-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://ticketevolution.com\",\n image: \"ticketevolution-205x60.jpg\"\n }, {\n type: 'gold',\n url: \"http://plan.io/travis\",\n image: \"planio-205x60.png\"\n }, {\n type: 'silver',\n link: \"Cobot: The one tool to run your coworking space\"\n }, {\n type: 'silver',\n link: \"JumpstartLab: We build developers\"\n }, {\n type: 'silver',\n link: \"Evil Martians: Agile Ruby on Rails development\"\n }, {\n type: 'silver',\n link: \"Zendesk: Love your helpdesk\"\n }, {\n type: 'silver',\n link: \"Stripe: Payments for developers\"\n }, {\n type: 'silver',\n link: \"Basho: We make Riak!\"\n }, {\n type: 'silver',\n link: \"Relevance: We deliver software solutions\"\n }, {\n type: 'silver',\n link: \"Mindmatters: Software für Menschen\"\n }, {\n type: 'silver',\n link: \"Amen: The best and worst of everything\"\n }, {\n type: 'silver',\n link: \"Site5: Premium Web Hosting Solutions\"\n }, {\n type: 'silver',\n link: \"Crowd Interactive: Leading Rails consultancy in Mexico\"\n }, {\n type: 'silver',\n link: \"Atomic Object: Work with really smart people\"\n }, {\n type: 'silver',\n link: \"Codeminer: smart services for your startup\"\n }, {\n type: 'silver',\n link: \"Cloudant: grow into your data layer, not out of it\"\n }, {\n type: 'silver',\n link: \"Gidsy: Explore, organize & book unique things to do!\"\n }, {\n type: 'silver',\n link: \"5apps: Package & deploy HTML5 apps automatically\"\n }, {\n type: 'silver',\n link: \"Meltmedia: We are Interactive Superheroes\"\n }, {\n type: 'silver',\n link: \"Fingertips offers design and development services\"\n }, {\n type: 'silver',\n link: \"Engine Yard: Build epic apps, let us handle the rest\"\n }, {\n type: 'silver',\n link: \"Malwarebytes: Defeat Malware once and for all.\"\n }, {\n type: 'silver',\n link: \"Readmill: The best reading app on the iPad.\"\n }, {\n type: 'silver',\n link: \"Medidata: clinical tech improving quality of life\"\n }, {\n type: 'silver',\n link: \"ESM: Japan's best agile Ruby/Rails consultancy\"\n }, {\n type: 'silver',\n link: \"Twitter: instantly connects people everywhere\"\n }, {\n type: 'silver',\n link: \"AGiLE ANiMAL: we <3 Travis CI.\"\n }, {\n type: 'silver',\n link: \"Tupalo: Discover, review & share local businesses.\"\n }\n ];\n\n this.Travis.WORKERS = {\n \"jvm-otp1.worker.travis-ci.org\": {\n name: \"Travis Pro\",\n url: \"http://travis-ci.com\"\n },\n \"jvm-otp2.worker.travis-ci.org\": {\n name: \"Transloadit\",\n url: \"http://transloadit.com\"\n },\n \"ppp1.worker.travis-ci.org\": {\n name: \"Travis Pro\",\n url: \"http://beta.travis-ci.com\"\n },\n \"ppp2.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ppp3.worker.travis-ci.org\": {\n name: \"Alchemy CMS\",\n url: \"http://alchemy-cms.com/\"\n },\n \"rails1.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ruby1.worker.travis-ci.org\": {\n name: \"Engine Yard\",\n url: \"http://www.engineyard.com\"\n },\n \"ruby2.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ruby3.worker.travis-ci.org\": {\n name: \"Railslove\",\n url: \"http://railslove.de\"\n },\n \"ruby4.worker.travis-ci.org\": {\n name: \"Engine Yard\",\n url: \"http://www.engineyard.com\"\n },\n \"spree.worker.travis-ci.org\": {\n name: \"Spree\",\n url: \"http://spreecommerce.com\"\n },\n \"staging.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=data/sponsors");minispade.register('ext/jquery', "(function() {(function() {\n\n $.fn.extend({\n outerHtml: function() {\n return $(this).wrap('').parent().html();\n },\n outerElement: function() {\n return $($(this).outerHtml()).empty();\n },\n flash: function() {\n return Utils.flash(this);\n },\n unflash: function() {\n return Utils.unflash(this);\n },\n filterLog: function() {\n this.deansi();\n return this.foldLog();\n },\n deansi: function() {\n return this.html(Utils.deansi(this.html()));\n },\n foldLog: function() {\n return this.html(Utils.foldLog(this.html()));\n },\n unfoldLog: function() {\n return this.html(Utils.unfoldLog(this.html()));\n },\n updateTimes: function() {\n return Utils.updateTimes(this);\n },\n activateTab: function(tab) {\n return Utils.activateTab(this, tab);\n },\n timeInWords: function() {\n return $(this).each(function() {\n return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n });\n },\n updateGithubStats: function(repo) {\n return Utils.updateGithubStats(repo, $(this));\n }\n });\n\n $.extend({\n isEmpty: function(obj) {\n if ($.isArray(obj)) {\n return !obj.length;\n } else if ($.isObject(obj)) {\n return !$.keys(obj).length;\n } else {\n return !obj;\n }\n },\n isObject: function(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n },\n keys: function(obj) {\n var keys;\n keys = [];\n $.each(obj, function(key) {\n return keys.push(key);\n });\n return keys;\n },\n values: function(obj) {\n var values;\n values = [];\n $.each(obj, function(key, value) {\n return values.push(value);\n });\n return values;\n },\n underscore: function(string) {\n return string[0].toLowerCase() + string.substring(1).replace(/([A-Z])?/g, function(match, chr) {\n if (chr) {\n return \"_\" + (chr.toUpperCase());\n } else {\n return '';\n }\n });\n },\n camelize: function(string, uppercase) {\n string = uppercase === false ? $.underscore(string) : $.capitalize(string);\n return string.replace(/_(.)?/g, function(match, chr) {\n if (chr) {\n return chr.toUpperCase();\n } else {\n return '';\n }\n });\n },\n capitalize: function(string) {\n return string[0].toUpperCase() + string.substring(1);\n },\n compact: function(object) {\n return $.grep(object, function(value) {\n return !!value;\n });\n },\n all: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return false;\n }\n i++;\n }\n return true;\n },\n detect: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return array[i];\n }\n i++;\n }\n },\n select: function(array, callback) {\n var args, i, result;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n result = [];\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n result.push(array[i]);\n }\n i++;\n }\n return result;\n },\n slice: function(object, key) {\n var keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) > -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n only: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) !== -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n except: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) === -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n intersect: function(array, other) {\n return array.filter(function(element) {\n return other.indexOf(element) !== -1;\n });\n },\n map: function(elems, callback, arg) {\n var i, isArray, key, length, ret, value;\n value = void 0;\n key = void 0;\n ret = [];\n i = 0;\n length = elems.length;\n isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n if (isArray) {\n while (i < length) {\n value = callback(elems[i], i, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n i++;\n }\n } else {\n for (key in elems) {\n value = callback(elems[key], key, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n }\n }\n return ret.concat.apply([], ret);\n },\n shuffle: function(array) {\n var current, tmp, top;\n array = array.slice();\n top = array.length;\n while (top && --top) {\n current = Math.floor(Math.random() * (top + 1));\n tmp = array[current];\n array[current] = array[top];\n array[top] = tmp;\n }\n return array;\n },\n truncate: function(string, length) {\n if (string.length > length) {\n return string.trim().substring(0, length) + '...';\n } else {\n return string;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('travis/ajax', "(function() {(function() {\n\n jQuery.support.cors = true;\n\n this.Travis.ajax = Em.Object.create({\n DEFAULT_OPTIONS: {\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n },\n get: function(url, callback) {\n return this.ajax(url, 'get', {\n success: callback\n });\n },\n post: function(url, data, callback) {\n return this.ajax(url, 'post', {\n data: data,\n success: callback\n });\n },\n ajax: function(url, method, options) {\n var endpoint, success, token, _base,\n _this = this;\n endpoint = Travis.config.api_endpoint || '';\n options = options || {};\n if (token = sessionStorage.getItem('travis.token')) {\n options.headers || (options.headers = {});\n (_base = options.headers)['Authorization'] || (_base['Authorization'] = \"token \" + token);\n }\n options.url = \"\" + endpoint + url;\n options.type = method;\n options.dataType = 'json';\n options.contentType = 'application/json; charset=utf-8';\n options.context = this;\n if (options.data && method !== 'GET' && method !== 'get') {\n options.data = JSON.stringify(options.data);\n }\n success = options.success || (function() {});\n options.success = function(data) {\n var _ref;\n if (((_ref = Travis.app) != null ? _ref.router : void 0) && data.flash) {\n Travis.app.router.flashController.loadFlashes(data.flash);\n }\n delete data.flash;\n return success.call(_this, data);\n };\n options.error = function(data) {\n if (data.flash) {\n return Travis.app.router.flashController.pushObject(data.flash);\n }\n };\n return $.ajax($.extend(options, Travis.ajax.DEFAULT_OPTIONS));\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ajax");minispade.register('travis/expandable_record_array', "(function() {(function() {\n\n Travis.ExpandableRecordArray = DS.RecordArray.extend({\n isLoaded: false,\n isLoading: false,\n load: function(array) {\n var observer, self;\n this.set('isLoading', true);\n self = this;\n observer = function() {\n var content;\n if (this.get('isLoaded')) {\n content = self.get('content');\n array.removeObserver('isLoaded', observer);\n array.forEach(function(record) {\n return self.pushObject(record);\n });\n self.set('isLoading', false);\n return self.set('isLoaded', true);\n }\n };\n return array.addObserver('isLoaded', observer);\n },\n pushObject: function(record) {\n var clientId, id, ids;\n ids = this.get('content');\n id = record.get('id');\n clientId = record.get('clientId');\n if (ids.contains(clientId)) {\n return;\n }\n return ids.pushObject(clientId);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/expandable_record_array");minispade.register('travis/limited_array', "(function() {(function() {\n\n Travis.LimitedArray = Em.ArrayProxy.extend({\n limit: 10,\n init: function() {\n return this._super.apply(this, arguments);\n },\n arrangedContent: (function() {\n var content;\n if (content = this.get('content')) {\n return content.slice(0, this.get('limit'));\n }\n }).property('content'),\n contentArrayDidChange: function(array, index, removedCount, addedCount) {\n var addedObjects, arrangedContent, length, limit, object, _i, _len;\n this._super.apply(this, arguments);\n if (addedCount > 0) {\n addedObjects = array.slice(index, index + addedCount);\n arrangedContent = this.get('arrangedContent');\n for (_i = 0, _len = addedObjects.length; _i < _len; _i++) {\n object = addedObjects[_i];\n arrangedContent.unshiftObject(object);\n }\n limit = this.get('limit');\n length = arrangedContent.get('length');\n if (length > limit) {\n return arrangedContent.replace(limit, length - limit);\n }\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/limited_array");minispade.register('travis/location', "(function() {(function() {\n\n Travis.Location = Ember.HistoryLocation.extend({\n onUpdateURL: function(callback) {\n var guid;\n guid = Ember.guidFor(this);\n return Ember.$(window).bind('popstate.ember-location-' + guid, function(e) {\n return callback(location.pathname + location.hash);\n });\n },\n getURL: function() {\n var location;\n location = this.get('location');\n return location.pathname + location.hash;\n }\n });\n\n Ember.Location.implementations['travis'] = Travis.Location;\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/location");minispade.register('travis/log', "(function() {(function() {\n\n this.Travis.Log = {\n FOLDS: {\n schema: /(
\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*? -- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n .*<\\/p>)/g,\n migrate: /( \\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n bundle: /( \\$ bundle install.*<\\/p>\\n( (Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n| <\\/p>\\n)*)/g,\n exec: /( [\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n },\n filter: function(log, path) {\n log = this.escape(log);\n log = this.deansi(log);\n log = log.replace(/\\r/g, '');\n log = this.number(log, path);\n log = this.fold(log);\n log = log.replace(/\\n/g, '');\n return log;\n },\n stripPaths: function(log) {\n return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n },\n escape: function(log) {\n return Handlebars.Utils.escapeExpression(log);\n },\n escapeRuby: function(log) {\n return log.replace(/#<(\\w+.*?)>/, '#<$1>');\n },\n number: function(log, path) {\n var result;\n path = \"\" + path + \"/\";\n result = '';\n $.each(log.trim().split('\\n'), function(ix, line) {\n var number, pathWithNumber;\n number = ix + 1;\n pathWithNumber = \"\" + path + \"#L\" + number;\n return result += ' %@%@
\\n'.fmt(pathWithNumber, number, number, number, line);\n });\n return result.trim();\n },\n deansi: function(log) {\n var ansi, text;\n log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/gm, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, \"\");\n ansi = ansiparse(log);\n text = '';\n ansi.forEach(function(part) {\n var classes;\n classes = [];\n part.foreground && classes.push(part.foreground);\n part.background && classes.push('bg-' + part.background);\n part.bold && classes.push('bold');\n part.italic && classes.push('italic');\n return text += (classes.length ? '' + part.text + '' : part.text);\n });\n return text.replace(/\\033/g, '');\n },\n fold: function(log) {\n log = this.unfold(log);\n $.each(Travis.Log.FOLDS, function(name, pattern) {\n return log = log.replace(pattern, function() {\n return '' + arguments[1].trim() + '';\n });\n });\n return log;\n },\n unfold: function(log) {\n return log.replace(/([\\s\\S]*?)<\\/div>/g, '$1\\n');\n },\n location: function() {\n return window.location.hash;\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n this.Travis.Model = DS.Model.extend({\n primaryKey: 'id',\n id: DS.attr('number'),\n init: function() {\n this.loadedAttributes = [];\n return this._super.apply(this, arguments);\n },\n get: function(name) {\n if (this.constructor.isAttribute(name) && this.get('incomplete') && !this.isAttributeLoaded(name)) {\n this.loadTheRest();\n }\n return this._super.apply(this, arguments);\n },\n refresh: function() {\n var id, store;\n if (id = this.get('id')) {\n store = this.get('store');\n return store.adapter.find(store, this.constructor, id);\n }\n },\n update: function(attrs) {\n var _this = this;\n $.each(attrs, function(key, value) {\n if (key !== 'id') {\n return _this.set(key, value);\n }\n });\n return this;\n },\n isAttributeLoaded: function(name) {\n return this.loadedAttributes.contains(name);\n },\n isComplete: (function() {\n if (this.get('incomplete')) {\n this.loadTheRest();\n return false;\n } else {\n this.set('isCompleting', false);\n return this.get('isLoaded');\n }\n }).property('incomplete', 'isLoaded'),\n loadTheRest: function() {\n if (this.get('isCompleting')) {\n return;\n }\n this.set('isCompleting', true);\n return this.refresh();\n },\n select: function() {\n return this.constructor.select(this.get('id'));\n }\n });\n\n this.Travis.Model.reopenClass({\n find: function() {\n if (arguments.length === 0) {\n return Travis.app.store.findAll(this);\n } else {\n return this._super.apply(this, arguments);\n }\n },\n filter: function(callback) {\n return Travis.app.store.filter(this, callback);\n },\n load: function(attrs) {\n return Travis.app.store.load(this, attrs);\n },\n select: function(id) {\n return this.find().forEach(function(record) {\n return record.set('selected', record.get('id') === id);\n });\n },\n buildURL: function(suffix) {\n var base, url;\n base = this.url || this.pluralName();\n Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n url = [base];\n if (suffix !== void 0) {\n url.push(suffix);\n }\n return url.join('/');\n },\n singularName: function() {\n var name, parts;\n parts = this.toString().split('.');\n name = parts[parts.length - 1];\n return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n },\n pluralName: function() {\n return Travis.app.store.adapter.pluralize(this.singularName());\n },\n isAttribute: function(name) {\n if (!this.attributesSaved) {\n this._saveAttributes();\n }\n return this.cachedAttributes.contains(name);\n },\n _saveAttributes: function() {\n var cachedAttributes;\n this.attributesSaved = true;\n cachedAttributes = [];\n this.eachComputedProperty(function(name, meta) {\n if (meta.isAttribute) {\n return cachedAttributes.pushObject(name);\n }\n });\n return this.cachedAttributes = cachedAttributes;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n this.Travis.Ticker = Ember.Object.extend({\n init: function() {\n if (this.get('interval') !== -1) {\n return this.schedule();\n }\n },\n tick: function() {\n var context, target, targets, _i, _len;\n context = this.get('context');\n targets = this.get('targets') || [this.get('target')];\n for (_i = 0, _len = targets.length; _i < _len; _i++) {\n target = targets[_i];\n if (context) {\n target = context.get(target);\n }\n if (target) {\n target.tick();\n }\n }\n return this.schedule();\n },\n schedule: function() {\n var _this = this;\n return Ember.run.later((function() {\n return _this.tick();\n }), this.get('interval') || Travis.app.TICK_INTERVAL);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('travis', "(function() {(function() {\nminispade.require('ext/jquery');\nminispade.require('ext/ember/namespace');\n\n this.Travis = Em.Namespace.create({\n config: {\n api_endpoint: $('meta[rel=\"travis.api_endpoint\"]').attr('href'),\n pusher_key: $('meta[name=\"travis.pusher_key\"]').attr('value')\n },\n CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'jdk', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'],\n ROUTES: {\n 'profile/:login/me': ['profile', 'user'],\n 'profile/:login': ['profile', 'hooks'],\n 'profile': ['profile', 'hooks'],\n 'stats': ['stats', 'show'],\n ':owner/:name/jobs/:id/:line': ['home', 'job'],\n ':owner/:name/jobs/:id': ['home', 'job'],\n ':owner/:name/builds/:id': ['home', 'build'],\n ':owner/:name/builds': ['home', 'builds'],\n ':owner/:name/pull_requests': ['home', 'pullRequests'],\n ':owner/:name/branches': ['home', 'branches'],\n ':owner/:name': ['home', 'current'],\n '': ['home', 'index'],\n '#': ['home', 'index']\n },\n QUEUES: [\n {\n name: 'common',\n display: 'Common'\n }, {\n name: 'php',\n display: 'PHP, Perl and Python'\n }, {\n name: 'node_js',\n display: 'Node.js'\n }, {\n name: 'jvmotp',\n display: 'JVM and Erlang'\n }, {\n name: 'rails',\n display: 'Rails'\n }, {\n name: 'spree',\n display: 'Spree'\n }\n ],\n INTERVALS: {\n sponsors: -1,\n times: -1,\n updateTimes: 1000\n },\n setLocale: function(locale) {\n if (!locale) {\n return;\n }\n I18n.locale = locale;\n return localStorage.setItem('travis.locale', locale);\n },\n run: function(attrs) {\n if (location.hash.slice(0, 2) === '#!') {\n location.href = location.href.replace('#!/', '');\n }\n this.setLocale(localStorage.getItem('travis.locale'));\n return Ember.run.next(this, function() {\n var app,\n _this = this;\n app = Travis.App.create(attrs || {});\n $.each(Travis, function(key, value) {\n if (value && value.isClass && key !== 'constructor') {\n return app[key] = value;\n }\n });\n this.app = app;\n this.store = app.store;\n return $(function() {\n return app.initialize();\n });\n });\n }\n });\nminispade.require('travis/ajax');\nminispade.require('app');\n\n}).call(this);\n\n})();\n//@ sourceURL=travis");minispade.register('templates', "(function() {\nEmber.TEMPLATES['application'] = Ember.Handlebars.compile(\"{{outlet}}\\n\");\n\nEmber.TEMPLATES['auth/signin'] = Ember.Handlebars.compile(\"{{#if view.signingIn}}\\nSigning in ...
\\n\\n Trying to authenticate with GitHub.\\n
\\n{{else}}\\nSign in
\\n\\n Please sign in with GitHub.\\n
\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/list'] = Ember.Handlebars.compile(\"{{#if builds.isLoaded}}\\n\\n \\n
\\n\\n \\n \\n\\n \\n {{#each build in builds}}\\n {{#view Travis.BuildsItemView contextBinding=\\\"build\\\"}}\\n{{t builds.name}} \\n{{t builds.commit}} \\n{{t builds.message}} \\n{{t builds.duration}} \\n{{t builds.finished_at}} \\n\\n \\n {{#if id}}\\n \\n {{number}}\\n \\n {{/if}}\\n \\n\\n \\n {{formatCommit commit}}\\n \\n \\n \\n\\n {{formatDuration duration}}\\n \\n\\n {{formatTime finishedAt}}\\n \\n {{/view}}\\n {{/each}}\\n \\n\\n {{view view.ShowMoreButton}}\\n
\\n{{else}}\\nLoading\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n {{#if loading}}\\n Loading\\n {{else}}\\n\\n
\\n\\n {{#if build.isMatrix}}\\n {{view Travis.JobsView jobsBinding=\\\"build.requiredJobs\\\" required=\\\"true\\\"}}\\n {{view Travis.JobsView jobsBinding=\\\"build.allowedFailureJobs\\\"}}\\n {{else}}\\n {{view Travis.LogView contextBinding=\\\"build.jobs.firstObject\\\"}}\\n {{/if}}\\n {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['events/list'] = Ember.Handlebars.compile(\"{{#if view.events.isLoaded}}\\n\\n\\n\\n- {{t builds.name}}
\\n- \\n \\n {{#if build.id}}\\n {{build.number}}\\n {{/if}}\\n
\\n- {{t builds.finished_at}}
\\n- {{formatTime build.finishedAt}}
\\n- {{t builds.duration}}
\\n- {{formatDuration build.duration}}
\\n\\n\\n\\n- {{t builds.commit}}
\\n- {{formatCommit build.commit}}
\\n {{#if commit.compareUrl}}\\n- {{t builds.compare}}
\\n- {{pathFrom build.commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n- {{t builds.author}}
\\n \\n {{/if}}\\n {{#if commit.committerName}}\\n- {{t builds.committer}}
\\n- {{build.commit.committerName}}
\\n {{/if}}\\n- {{t builds.message}}
\\n \\n\\n {{#unless isMatrix}}\\n- {{t builds.config}}
\\n- {{formatConfig build.config}}
\\n {{/unless}}\\n\\n \\n
\\n{{else}}\\n\\n \\n \\n\\n \\n {{#each event in view.events}}\\n {{#view Travis.EventsItemView contextBinding=\\\"event\\\"}}\\nTime \\nEvent \\nResult \\nMessage \\n\\n {{formatTime createdAt}}\\n \\n\\n {{event.event_}}\\n \\n\\n {{event.result}}\\n \\n \\n {{/view}}\\n {{/each}}\\n \\nLoading\\n{{/if}}\\n\\n\");\n\nEmber.TEMPLATES['jobs/list'] = Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n {{#if view.required}}\\n\\n
\\n {{t jobs.build_matrix}}\\n \\n {{else}}\\n\\n
\\n\\n {{#unless view.required}}\\n\\n {{t jobs.allowed_failures}}\\n \\n \\n {{/if}}\\n \\n\\n {{#each key in view.build.configKeys}}\\n \\n \\n \\n {{#each job in view.jobs}}\\n {{#view Travis.JobsItemView contextBinding=\\\"job\\\"}}\\n{{key}} \\n {{/each}}\\n\\n \\n {{#if job.id}}\\n {{number}}\\n {{/if}}\\n \\n\\n {{formatDuration duration}}\\n \\n\\n {{formatTime finishedAt}}\\n \\n {{#each value in configValues}}\\n{{value}} \\n {{/each}}\\n {{/view}}\\n {{/each}}\\n \\n\\n \\n\\n {{/unless}}\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/log'] = Ember.Handlebars.compile(\"{{view.logSubscriber}}\\n\\n{{#if log.isLoaded}}\\n{{t \\\"jobs.allowed_failures\\\"}}
\\n\\n Allowed Failures are items in your build matrix that are allowed to\\n fail without causing the entire build to be shown as failed.\\n
\\n\\n You can define allowed failures in the build matrix as follows:\\n
\\nmatrix:\\n allow_failures:\\n - rvm: ruby-head\\n\\n This lets you add in experimental and preparatory builds to test against versions or\\n configurations that you are not ready to officially support.\\n
\\n\\n \\n \\n {{{formatLog log.body repo=\\\"repository\\\" item=\\\"parentView.currentItem\\\"}}}\\n\\n {{#if sponsor.name}}\\n\\n {{t builds.messages.sponsored_by}}\\n {{sponsor.name}}\\n
\\n {{/if}}\\n\\n To top\\n{{else}}\\n\\n Loading\\n\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n {{#if job.isComplete}}\\n\\n\\n {{else}}\\n\\n
\\n\\n {{view Travis.LogView contextBinding=\\\"job\\\"}}}\\n\\n\\n\\n- Job
\\n- \\n \\n {{#if job.id}}\\n {{job.number}}\\n {{/if}}\\n
\\n- {{t jobs.finished_at}}
\\n- {{formatTime job.finishedAt}}
\\n- {{t jobs.duration}}
\\n- {{formatDuration job.duration}}
\\n\\n\\n\\n- {{t jobs.commit}}
\\n- {{formatCommit commit}}
\\n {{#if commit.compareUrl}}\\n- {{t jobs.compare}}
\\n- {{pathFrom commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n- {{t jobs.author}}
\\n \\n {{/if}}\\n {{#if commit.committerName}}\\n- {{t jobs.committer}}
\\n- {{commit.committerName}}
\\n {{/if}}\\n- {{t jobs.message}}
\\n \\n- {{t jobs.config}}
\\n- {{formatConfig job.config}}
\\n\\n Loading\\n\\n {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['layouts/flash'] = Ember.Handlebars.compile(\"{{#each flash in controller}}\\n {{#view Travis.FlashItemView flashBinding=\\\"flash\\\"}}\\n{{{flash.message}}}
\\n \\n {{/view}}\\n{{/each}}\\n\");\n\nEmber.TEMPLATES['layouts/home'] = Ember.Handlebars.compile(\"\\n {{outlet top}}\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/profile'] = Ember.Handlebars.compile(\"\\n {{outlet left}}\\n\\n\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\n\\n\\n {{outlet right}}\\n\\n\\n {{outlet top}}\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/sidebar'] = Ember.Handlebars.compile(\"\\n\\n\\n {{outlet left}}\\n\\n\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\n\\n\\n \\n\\n\\n\\n \\n\\n\\n\\n\\nGetting started?
\\n\\n Please read our guide.\\n It will only take a few minutes :)\\n
\\n\\n You can find detailled docs on our about site.\\n
\\n\\n If you need help please don’t hesitate to join\\n #travis on irc.freenode.net\\n or our mailinglist.\\n
\\n\\n \\n\\n\\n{{view view.DecksView}}\\n{{view view.WorkersView}}\\n{{view view.QueuesView}}\\n{{view view.LinksView}}\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/simple'] = Ember.Handlebars.compile(\"{{t layouts.about.join}}
\\n\\n
\\n- {{t layouts.about.repository}}: Github
\\n- {{t layouts.about.twitter}}: @travisci
\\n- {{t layouts.about.mailing_list}}: travis-ci
\\n- irc.freenode.net#travis
\\n\\n {{outlet top}}\\n\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/top'] = Ember.Handlebars.compile(\"\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\nTravis
\\n\\n\\n \\n\");\n\nEmber.TEMPLATES['profile/accounts'] = Ember.Handlebars.compile(\"\\n\\n\\n\\n
\\n\\n- \\n
\\nAccounts
\\n\\n {{#collection Travis.AccountsListView contentBinding=\\\"controller\\\"}}\\n {{view.name}}\\n\\n\");\n\nEmber.TEMPLATES['profile/show'] = Ember.Handlebars.compile(\"\\n Repositories:\\n {{view.account.reposCount}}\\n
\\n\\n {{/collection}}\\n{{view.name}}
\\n\\n{{view Travis.ProfileTabsView}}\\n\\n\\n {{outlet pane}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs'] = Ember.Handlebars.compile(\"\\n
\\n\");\n\nEmber.TEMPLATES['profile/tabs/hooks'] = Ember.Handlebars.compile(\"- \\n
\\n {{#if view.displayUser}}\\n\\n Repositories\\n
\\n- \\n
\\n {{/if}}\\n\\n Profile\\n
\\n\\n {{{t profiles.show.message.your_repos}}}\\n
\\n\\n{{#if hooks.isLoaded}}\\n {{#if user.isSyncing}}\\n \\n {{else}}\\n \\n\\n\\n {{#each hook in hooks}}\\n
\\n {{/if}}\\n{{else}}\\n \\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs/user'] = Ember.Handlebars.compile(\"- \\n {{hook.slug}}\\n
\\n {{else}}\\n{{hook.description}}
\\n\\n \\n- \\n You do not seem to have any repositories that we could sync.\\n
\\n {{/each}}\\n\\n\\n
\\n
\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['queues/list'] = Ember.Handlebars.compile(\"- \\n {{t profiles.show.github}}:\\n
\\n- \\n {{user.login}}\\n
\\n- \\n {{t profiles.show.email}}:\\n
\\n- \\n {{user.email}}\\n
\\n- \\n {{t profiles.show.token}}:\\n
\\n- \\n {{user.token}}\\n
\\n\\n{{#each queue in controller}}\\n
\\n\");\n\nEmber.TEMPLATES['repos/list'] = Ember.Handlebars.compile(\"- \\n
\\n{{/each}}\\n{{t queue}}: {{queue.name}}
\\n\\n {{#each job in queue}}\\n {{#view Travis.QueueItemView jobBinding=\\\"job\\\"}}\\n \\n \\n {{job.repo.slug}}\\n \\n #{{job.number}}\\n \\n {{/view}}\\n {{else}}\\n {{t no_job}}\\n {{/each}}\\n
\\n\\n {{view Ember.TextField valueBinding=\\\"controller.search\\\"}}\\n\\n\\n{{view Travis.ReposListTabsView}}\\n\\n\\n\\n\\n {{#collection Travis.ReposListView contentBinding=\\\"controller\\\"}}\\n {{#with view.repo}}\\n\\n\");\n\nEmber.TEMPLATES['repos/list/tabs'] = Ember.Handlebars.compile(\"\\n \\n {{#if slug}}\\n {{slug}}\\n {{/if}}\\n\\n {{#if lastBuildId}}\\n {{lastBuildNumber}}\\n {{/if}}\\n\\n\\n {{t repositories.duration}}:\\n {{formatDuration lastBuildDuration}},\\n {{t repositories.finished_at}}:\\n {{formatTime lastBuildFinishedAt}}\\n
\\n\\n\\n\\n {{#if description}}\\n\\n\\n {{/if}}\\n {{/with}}\\n {{else}}\\n \\n {{/collection}}\\n{{description}}
\\n\\n
\\n\\n\");\n\nEmber.TEMPLATES['repos/show'] = Ember.Handlebars.compile(\"- \\n
\\n{{t layouts.application.recent}}
\\n- \\n
\\n{{t layouts.application.my_repositories}}
\\n- \\n
\\n{{t layouts.application.search}}
\\n\\n {{#if view.isEmpty}}\\n {{view Travis.ReposEmptyView}}\\n {{else}}\\n {{#if view.repo.isComplete}}\\n {{#with view.repo}}\\n\\n\\n\");\n\nEmber.TEMPLATES['repos/show/tabs'] = Ember.Handlebars.compile(\"\\n {{slug}}\\n
\\n\\n{{description}}
\\n\\n\\n
\\n\\n {{view Travis.RepoShowTabsView}}\\n {{view Travis.RepoShowToolsView}}\\n {{/with}}\\n\\n {{else}}\\n Loading\\n {{/if}}\\n\\n- \\n {{lastBuildLanguage}}\\n
\\n- \\n \\n {{stats.watchers}}\\n \\n
\\n- \\n \\n {{stats.forks}}\\n \\n
\\n\\n {{outlet pane}}\\n\\n {{/if}}\\n\\n
\\n\");\n\nEmber.TEMPLATES['repos/show/tools'] = Ember.Handlebars.compile(\"\\n\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.current}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.build_history}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.pull_requests}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.branches}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n Events\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.build.id}}\\n \\n {{t repositories.tabs.build}} #{{view.build.number}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.job.id}}\\n \\n {{t repositories.tabs.job}} #{{view.job.number}}\\n \\n {{/if}}\\n
\\n\\n \\n\\n\");\n\nEmber.TEMPLATES['sponsors/decks'] = Ember.Handlebars.compile(\"\\n \\n {{#if view.branches.isLoaded}}\\n {{view Ember.Select contentBinding=\\\"view.branches\\\" selectionBinding=\\\"view.branch\\\" optionLabelPath=\\\"content.commit.branch\\\" optionValuePath=\\\"content.commit.branch\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n{{t layouts.application.sponsers}}
\\n\\n\\n {{#each deck in controller}}\\n {{#each deck}}\\n
\\n\\n- \\n \\n
\\n {{/each}}\\n {{/each}}\\n\\n \\n
\\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n
\\n\");\n\nEmber.TEMPLATES['sponsors/links'] = Ember.Handlebars.compile(\"\\n\\n\\n\");\n\nEmber.TEMPLATES['stats/show'] = Ember.Handlebars.compile(\"{{t layouts.application.sponsers}}
\\n\\n\\n {{#each controller}}\\n
\\n\\n \\n- \\n {{{link}}}\\n
\\n {{/each}}\\nSorry
\\nStatistics are disabled for now.
\\nWe're looking into a solution. If you want to help, please ping us!
\\n\");\n\nEmber.TEMPLATES['workers/list'] = Ember.Handlebars.compile(\"{{#view Travis.WorkersView}}\\n\\n {{t workers}}\\n \\n
\\n\\n {{#each group in controller.groups}}\\n {{#view Travis.WorkersListView}}\\n
\\n{{/view}}\\n\");\n\n})();\n//@ sourceURL=templates");minispade.register('config/locales', "(function() {window.I18n = window.I18n || {}\nwindow.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"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\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors →\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do not consider this a stable service. We're still far from that! More info here.\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"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\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our Getting Started guide.\\n It will only take a couple of minutes.\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"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\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores →\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor no considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información aquí.\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Activa los interruptores para inicial el Travis service hook para tus proyectos, y haz un Push en GitHub.- \\n
\\n {{/view}}\\n {{else}}\\n No workers\\n {{/each}}\\n\\n {{group.firstObject.host}}\\n
\\n\\n {{#each worker in group}}\\n {{#view Travis.WorkersItemView workerBinding=\\\"worker\\\"}}\\n
\\n- \\n \\n {{#if worker.isWorking}}\\n {{#if worker.job_id}}\\n \\n {{view.display}}\\n \\n {{/if}}\\n {{else}}\\n {{view.display}}\\n {{/if}}\\n
\\n {{/view}}\\n {{/each}}\\n
\\n Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra Guía de Inicio .\\n Solo tomará unos pocos minutos.\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"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\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors →\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez pas ce service comme étant stable. Nous sommes loin de ça! Plus d'infos ici.\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.
\\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre guide de démarrage.\\n Cela ne vous prendra que quelques minutes.\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくはこちら\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る →\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずはTravisのはじめ方を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"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\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er ikke en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du her.\"},\"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\"}},\"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.
\\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les kom-i-gang-veivisereren vår. Det tar bare et par minutter.\"},\"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\"},\"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\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"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\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service niet te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info hier.\"},\"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\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"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
\\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze startersgids lezen.\\\\n Het zal maar enkele minuten van uw tijd vergen.\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"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\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"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\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów →\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę nie traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz tutaj.\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"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\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.
\\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz Przewodnik .\\n Zajmie ci to tylko kilka minut.\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"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\"},\"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, não considere isto um serviço estável. Estamos muito longe disso! Mais informações aqui.\"},\"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\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"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.
Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso Guia de início. Só leva alguns minutinhos.\"},\"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\"},\"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\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"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\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"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\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, не считайте данный сервис стабильным. Мы еще очень далеки от стабильности! Подробности\"},\"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\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.
\\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите Руководство для быстрого старта. Это займет всего несколько минут.\"},\"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\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n context: null,\n options: null,\n property: null,\n // paths of the property that are also observed\n propertyPaths: [],\n\n value: Ember.K,\n\n valueForRender: function() {\n var value = this.value(Ember.get(this.context, this.property), this.options);\n if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n return value;\n },\n\n render: function(buffer) {\n buffer.push(this.valueForRender());\n },\n\n valueDidChange: function() {\n if (this.morph.isRemoved()) { return; }\n this.morph.html(this.valueForRender());\n },\n\n didInsertElement: function() {\n this.valueDidChange();\n },\n\n init: function() {\n this._super();\n Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n },\n\n destroy: function() {\n Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n this._super();\n }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n var propertyPaths = Array.prototype.slice.call(arguments, 2);\n Ember.Handlebars.registerHelper(name, function(property, options) {\n var data = options.data,\n view = data.view,\n ctx = this;\n\n var bindView = view.createChildView(BoundHelperView, {\n property: property,\n propertyPaths: propertyPaths,\n context: ctx,\n options: options.hash,\n value: func\n });\n\n view.appendChild(bindView);\n });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper");minispade.register('ext/ember/namespace', "(function() {Em.Namespace.reopen = Em.Namespace.reopenClass\n\n\n\n})();\n//@ sourceURL=ext/ember/namespace"); \ No newline at end of file +;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n Travis.reopen({\n App: Em.Application.extend({\n autoinit: false,\n currentUserBinding: 'auth.user',\n authStateBinding: 'auth.state',\n init: function() {\n this._super.apply(this, arguments);\n this.store = Travis.Store.create();\n this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n this.slider = new Travis.Slider();\n this.pusher = new Travis.Pusher(Travis.config.pusher_key);\n this.tailing = new Travis.Tailing();\n return this.set('auth', Travis.Auth.create({\n app: this,\n endpoint: Travis.config.api_endpoint\n }));\n },\n storeAfterSignInPath: function(path) {\n return this.get('auth').storeAfterSignInPath(path);\n },\n autoSignIn: function(path) {\n return this.get('auth').autoSignIn(path);\n },\n signIn: function() {\n return this.get('auth').signIn();\n },\n signOut: function() {\n this.get('auth').signOut();\n return this.get('router').send('afterSignOut');\n },\n receive: function() {\n return this.store.receive.apply(this.store, arguments);\n },\n toggleSidebar: function() {\n var element;\n $('body').toggleClass('maximized');\n element = $('');\n $('#top .profile').append(element);\n Em.run.later((function() {\n return element.remove();\n }), 10);\n element = $('');\n $('#repo').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n this.Travis.Auth = Ember.Object.extend({\n iframe: $('').hide(),\n timeout: 5000,\n state: 'signed-out',\n receivingEnd: \"\" + location.protocol + \"//\" + location.host,\n init: function() {\n var _this = this;\n this.iframe.appendTo('body');\n return window.addEventListener('message', function(e) {\n return _this.receiveMessage(e);\n });\n },\n accessToken: (function() {\n return sessionStorage.getItem('travis.token');\n }).property(),\n autoSignIn: function(path) {\n var user;\n if (user = sessionStorage.getItem('travis.user')) {\n return this.setData({\n user: JSON.parse(user)\n });\n } else if (localStorage.getItem('travis.auto_signin')) {\n return this.signIn();\n }\n },\n signIn: function() {\n this.set('state', 'signing-in');\n this.trySignIn();\n return Ember.run.later(this, this.checkSignIn.bind(this), this.timeout);\n },\n signOut: function() {\n localStorage.removeItem('travis.auto_signin');\n localStorage.removeItem('travis.locale');\n sessionStorage.clear();\n return this.setData();\n },\n trySignIn: function() {\n return this.iframe.attr('src', \"\" + this.endpoint + \"/auth/post_message?origin=\" + this.receivingEnd);\n },\n checkSignIn: function() {\n if (this.get('state') === 'signing-in') {\n return this.forceSignIn();\n }\n },\n forceSignIn: function() {\n localStorage.setItem('travis.auto_signin', 'true');\n return window.location = \"\" + this.endpoint + \"/auth/handshake?redirect_uri=\" + location;\n },\n setData: function(data) {\n var user;\n if (typeof data === 'string') {\n data = JSON.parse(data);\n }\n if (data != null ? data.token : void 0) {\n this.storeToken(data.token);\n }\n if (data != null ? data.user : void 0) {\n user = this.storeUser(data.user);\n }\n this.set('state', user ? 'signed-in' : 'signed-out');\n this.set('user', user ? user : void 0);\n return this.afterSignIn();\n },\n afterSignIn: function() {\n return this.get('app.router').send('afterSignIn', this.readAfterSignInPath());\n },\n storeToken: function(token) {\n sessionStorage.setItem('travis.token', token);\n return this.notifyPropertyChange('accessToken');\n },\n storeUser: function(user) {\n localStorage.setItem('travis.auto_signin', 'true');\n sessionStorage.setItem('travis.user', JSON.stringify(user));\n this.app.store.load(Travis.User, user);\n user = this.app.store.find(Travis.User, user.id);\n user.get('permissions');\n return user;\n },\n storeAfterSignInPath: function(path) {\n return sessionStorage.setItem('travis.after_signin_path', path);\n },\n readAfterSignInPath: function() {\n var path;\n path = sessionStorage.getItem('travis.after_signin_path');\n sessionStorage.removeItem('travis.after_signin_path');\n return path;\n },\n receiveMessage: function(event) {\n if (event.origin === this.expectedOrigin()) {\n if (event.data.token) {\n event.data.user.token = event.data.token;\n }\n this.setData(event.data);\n return console.log(\"signed in as \" + event.data.user.login);\n } else {\n return console.log(\"unexpected message \" + event.origin + \": \" + event.data);\n }\n },\n expectedOrigin: function() {\n if (this.endpoint[0] === '/') {\n return this.receivingEnd;\n } else {\n return this.endpoint;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=auth");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\nminispade.require('travis/ticker');\n\n Travis.reopen({\n Controller: Em.Controller.extend({\n connectOutlet: function() {\n var view, _connectedOutletViews;\n view = this._super.apply(this, arguments);\n if (view) {\n _connectedOutletViews = Travis.app.get('_connectedOutletViews');\n if (!_connectedOutletViews) {\n _connectedOutletViews = [];\n }\n _connectedOutletViews.pushObject(view);\n Travis.app.set('_connectedOutletViews', _connectedOutletViews);\n }\n return view;\n }\n }),\n TopController: Em.Controller.extend({\n userBinding: 'Travis.app.currentUser'\n }),\n ApplicationController: Em.Controller.extend(),\n MainController: Em.Controller.extend(),\n StatsLayoutController: Em.Controller.extend(),\n ProfileLayoutController: Em.Controller.extend(),\n AuthLayoutController: Em.Controller.extend()\n });\nminispade.require('controllers/accounts');\nminispade.require('controllers/builds');\nminispade.require('controllers/flash');\nminispade.require('controllers/home');\nminispade.require('controllers/profile');\nminispade.require('controllers/repos');\nminispade.require('controllers/repo');\nminispade.require('controllers/sidebar');\nminispade.require('controllers/stats');\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('controllers/accounts', "(function() {(function() {\n\n Travis.AccountsController = Ember.ArrayController.extend({\n tab: 'accounts',\n init: function() {\n return this._super();\n },\n findByLogin: function(login) {\n return this.find(function(account) {\n return account.get('login') === login;\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/accounts");minispade.register('controllers/builds', "(function() {(function() {\n\n Travis.BuildsController = Em.ArrayController.extend({\n repo: 'parent.repo',\n contentBinding: 'parent.builds'\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/builds");minispade.register('controllers/flash', "(function() {(function() {\n\n Travis.FlashController = Ember.ArrayController.extend({\n broadcastBinding: 'Travis.app.currentUser.broadcasts',\n init: function() {\n this.set('flashes', Ember.A());\n return this._super.apply(this, arguments);\n },\n content: (function() {\n return this.get('unseenBroadcasts').concat(this.get('flashes'));\n }).property('unseenBroadcasts.length', 'flashes.length'),\n unseenBroadcasts: (function() {\n return this.get('broadcasts').filterProperty('isSeen', false);\n }).property('broadcasts.isLoaded', 'broadcasts.length'),\n broadcasts: (function() {\n if (Travis.app.get('currentUser')) {\n return Travis.Broadcast.find();\n } else {\n return Ember.A();\n }\n }).property('Travis.app.currentUser'),\n loadFlashes: function(msgs) {\n var msg, type, _i, _len, _results;\n _results = [];\n for (_i = 0, _len = msgs.length; _i < _len; _i++) {\n msg = msgs[_i];\n type = Ember.keys(msg)[0];\n msg = {\n type: type,\n message: msg[type]\n };\n this.get('flashes').pushObject(msg);\n _results.push(Ember.run.later(this, (function() {\n return this.get('flashes').removeObject(msg);\n }), 15000));\n }\n return _results;\n },\n close: function(msg) {\n if (msg instanceof Travis.Broadcast) {\n msg.setSeen();\n return this.notifyPropertyChange('unseenBroadcasts');\n } else {\n return this.get('flashes').removeObject(msg);\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/flash");minispade.register('controllers/home', "(function() {(function() {\n\n Travis.HomeLayoutController = Travis.Controller.extend();\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/home");minispade.register('controllers/profile', "(function() {(function() {\n\n Travis.ProfileController = Travis.Controller.extend({\n name: 'profile',\n userBinding: 'Travis.app.currentUser',\n accountsBinding: 'Travis.app.router.accountsController',\n account: (function() {\n var account, login;\n login = this.get('params.login') || Travis.app.get('currentUser.login');\n account = this.get('accounts').filter(function(account) {\n if (account.get('login') === login) {\n return account;\n }\n })[0];\n if (account) {\n account.select();\n }\n return account;\n }).property('accounts.length', 'params.login'),\n activate: function(action, params) {\n this.setParams(params || this.get('params'));\n return this[\"view\" + ($.camelize(action))]();\n },\n viewHooks: function() {\n this.connectTab('hooks');\n return this.set('hooks', Travis.Hook.find({\n owner_name: this.get('params.login') || Travis.app.get('currentUser.login')\n }));\n },\n viewUser: function() {\n return this.connectTab('user');\n },\n connectTab: function(tab) {\n var viewClass;\n viewClass = Travis[\"\" + ($.camelize(tab)) + \"View\"];\n this.set('tab', tab);\n return this.connectOutlet({\n outletName: 'pane',\n controller: this,\n viewClass: viewClass\n });\n },\n setParams: function(params) {\n var key, value, _results;\n this.set('params', {});\n _results = [];\n for (key in params) {\n value = params[key];\n _results.push(this.set(\"params.\" + key, params[key]));\n }\n return _results;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/profile");minispade.register('controllers/repo', "(function() {(function() {\n\n Travis.RepoController = Travis.Controller.extend({\n bindings: [],\n init: function() {\n this._super.apply(this, arguments);\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n updateTimes: function() {\n var build, builds, jobs;\n if (builds = this.get('builds')) {\n builds.forEach(function(b) {\n return b.updateTimes();\n });\n }\n if (build = this.get('build')) {\n build.updateTimes();\n }\n if (build && (jobs = build.get('jobs'))) {\n jobs.forEach(function(j) {\n return j.updateTimes();\n });\n }\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n activate: function(action) {\n this._unbind();\n return this[\"view\" + ($.camelize(action))]();\n },\n viewIndex: function() {\n this._bind('repo', 'controllers.reposController.firstObject');\n this._bind('build', 'repo.lastBuild');\n return this.connectTab('current');\n },\n viewCurrent: function() {\n this.connectTab('current');\n return this._bind('build', 'repo.lastBuild');\n },\n viewBuilds: function() {\n this.connectTab('builds');\n return this._bind('builds', 'repo.builds');\n },\n viewPullRequests: function() {\n this.connectTab('pull_requests');\n return this._bind('builds', 'repo.pullRequests');\n },\n viewBranches: function() {\n this.connectTab('branches');\n return this._bind('builds', 'repo.branches');\n },\n viewEvents: function() {\n this.connectTab('events');\n return this._bind('events', 'repo.events');\n },\n viewBuild: function() {\n return this.connectTab('build');\n },\n viewJob: function() {\n this._bind('build', 'job.build');\n return this.connectTab('job');\n },\n repoObserver: (function() {\n var repo;\n repo = this.get('repo');\n if (repo) {\n return repo.select();\n }\n }).observes('repo.id'),\n connectTab: function(tab) {\n var name, viewClass;\n name = tab === 'current' ? 'build' : tab;\n viewClass = name === 'builds' || name === 'branches' || name === 'pull_requests' ? Travis.BuildsView : Travis[\"\" + ($.camelize(name)) + \"View\"];\n this.set('tab', tab);\n return this.connectOutlet({\n outletName: 'pane',\n controller: this,\n viewClass: viewClass\n });\n },\n _bind: function(to, from) {\n return this.bindings.push(Ember.oneWay(this, to, from));\n },\n _unbind: function() {\n var binding, _i, _len, _ref;\n _ref = this.bindings;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n binding = _ref[_i];\n binding.disconnect(this);\n }\n return this.bindings.length = 0;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repo");minispade.register('controllers/repos', "(function() {(function() {\nminispade.require('travis/limited_array');\n\n Travis.ReposController = Ember.ArrayController.extend({\n defaultTab: 'recent',\n sortProperties: ['sortOrder'],\n init: function() {\n this.activate(this.defaultTab);\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n updateTimes: function() {\n var content;\n if (content = this.get('content')) {\n content.forEach(function(r) {\n return r.updateTimes();\n });\n }\n return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n },\n activate: function(tab, params) {\n this.set('tab', tab);\n return this[\"view\" + ($.camelize(tab))](params);\n },\n viewRecent: function() {\n var content;\n content = Travis.LimitedArray.create({\n content: Travis.Repo.find(),\n limit: 30\n });\n return this.set('content', content);\n },\n viewOwned: function() {\n return this.set('content', Travis.Repo.accessibleBy(Travis.app.get('currentUser.login')));\n },\n viewSearch: function(params) {\n return this.set('content', Travis.Repo.search(params.search));\n },\n searchObserver: (function() {\n var search;\n search = this.get('search');\n if (search) {\n return this.searchFor(search);\n } else {\n this.activate('recent');\n return 'recent';\n }\n }).observes('search'),\n searchFor: function(phrase) {\n if (this.searchLater) {\n Ember.run.cancel(this.searchLater);\n }\n return this.searchLater = Ember.run.later(this, (function() {\n return this.activate('search', {\n search: phrase\n });\n }), 500);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repos");minispade.register('controllers/sidebar', "(function() {(function() {\n\n Travis.reopen({\n SidebarController: Em.ArrayController.extend({\n init: function() {\n this.tickables = [];\n return Travis.Ticker.create({\n target: this,\n interval: Travis.INTERVALS.sponsors\n });\n },\n tick: function() {\n var tickable, _i, _len, _ref, _results;\n _ref = this.tickables;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n tickable = _ref[_i];\n _results.push(tickable.tick());\n }\n return _results;\n }\n }),\n QueuesController: Em.ArrayController.extend(),\n WorkersController: Em.ArrayController.extend({\n groups: (function() {\n var content, groups, host, worker, _i, _len, _ref;\n if (content = this.get('arrangedContent')) {\n groups = {};\n _ref = content.toArray();\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n worker = _ref[_i];\n host = worker.get('host');\n if (!groups[host]) {\n groups[host] = Em.ArrayProxy.create(Em.SortableMixin, {\n content: [],\n sortProperties: ['nameForSort']\n });\n }\n groups[host].addObject(worker);\n }\n return $.values(groups);\n }\n }).property('length')\n }),\n SponsorsController: Em.ArrayController.extend({\n page: 0,\n arrangedContent: (function() {\n return this.get('shuffled').slice(this.start(), this.end());\n }).property('shuffled.length', 'page'),\n shuffled: (function() {\n var content;\n if (content = this.get('content')) {\n return $.shuffle(content);\n } else {\n return [];\n }\n }).property('content.length'),\n tick: function() {\n return this.set('page', this.isLast() ? 0 : this.get('page') + 1);\n },\n pages: (function() {\n var length;\n length = this.get('content.length');\n if (length) {\n return parseInt(length / this.get('perPage') + 1);\n } else {\n return 1;\n }\n }).property('length'),\n isLast: function() {\n return this.get('page') === this.get('pages') - 1;\n },\n start: function() {\n return this.get('page') * this.get('perPage');\n },\n end: function() {\n return this.start() + this.get('perPage');\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/sidebar");minispade.register('controllers/stats', "(function() {(function() {\n\n Travis.StatsController = Travis.Controller.extend({\n name: 'stats',\n init: function() {\n return this._super('top');\n },\n activate: function(action, params) {}\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/stats");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n var safe;\nminispade.require('ext/ember/bound_helper');\n\n safe = function(string) {\n return new Handlebars.SafeString(string);\n };\n\n Handlebars.registerHelper('tipsy', function(text, tip) {\n return safe('' + text + '');\n });\n\n Handlebars.registerHelper('t', function(key) {\n return safe(I18n.t(key));\n });\n\n Ember.registerBoundHelper('formatTime', function(value, options) {\n return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n });\n\n Ember.registerBoundHelper('formatDuration', function(duration, options) {\n return safe(Travis.Helpers.timeInWords(duration));\n });\n\n Ember.registerBoundHelper('formatCommit', function(commit, options) {\n if (commit) {\n return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n }\n });\n\n Ember.registerBoundHelper('formatSha', function(sha, options) {\n return safe(Travis.Helpers.formatSha(sha));\n });\n\n Ember.registerBoundHelper('pathFrom', function(url, options) {\n return safe(Travis.Helpers.pathFrom(url));\n });\n\n Ember.registerBoundHelper('formatMessage', function(message, options) {\n return safe(Travis.Helpers.formatMessage(message, options));\n });\n\n Ember.registerBoundHelper('formatConfig', function(config, options) {\n return safe(Travis.Helpers.formatConfig(config));\n });\n\n Ember.registerBoundHelper('formatLog', function(log, options) {\n var item, parentView, repo;\n parentView = this.get('parentView');\n repo = parentView.get(options.repo);\n item = parentView.get(options.item);\n return Travis.Helpers.formatLog(log, repo, item) || '';\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\nminispade.require('config/emoij');\n\n this.Travis.Helpers = {\n compact: function(object) {\n var key, result, value, _ref;\n result = {};\n _ref = object || {};\n for (key in _ref) {\n value = _ref[key];\n if (!$.isEmpty(value)) {\n result[key] = value;\n }\n }\n return result;\n },\n safe: function(string) {\n return new Handlebars.SafeString(string);\n },\n colorForResult: function(result) {\n if (result === 0) {\n return 'green';\n } else {\n if (result === 1) {\n return 'red';\n } else {\n return null;\n }\n }\n },\n formatCommit: function(sha, branch) {\n return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n },\n formatSha: function(sha) {\n return (sha || '').substr(0, 7);\n },\n formatConfig: function(config) {\n var values;\n config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n values = $.map(config, function(value, key) {\n value = (value && value.join ? value.join(', ') : value) || '';\n return '%@: %@'.fmt($.camelize(key), value);\n });\n if (values.length === 0) {\n return '-';\n } else {\n return values.join(', ');\n }\n },\n formatMessage: function(message, options) {\n message = message || '';\n if (options.short) {\n message = message.split(/\\n/)[0];\n }\n return this._emojize(this._escape(message)).replace(/\\n/g, '
');\n },\n formatLog: function(log, repo, item) {\n var event, url;\n event = item.constructor === Travis.Build ? 'showBuild' : 'showJob';\n url = Travis.app.get('router').urlForEvent(event, repo, item);\n return Travis.Log.filter(log, url);\n },\n pathFrom: function(url) {\n return (url || '').split('/').pop();\n },\n timeAgoInWords: function(date) {\n return $.timeago.distanceInWords(date);\n },\n durationFrom: function(started, finished) {\n started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n if (started && finished) {\n return Math.round((finished - started) / 1000);\n } else {\n return 0;\n }\n },\n timeInWords: function(duration) {\n var days, hours, minutes, result, seconds;\n days = Math.floor(duration / 86400);\n hours = Math.floor(duration % 86400 / 3600);\n minutes = Math.floor(duration % 3600 / 60);\n seconds = duration % 60;\n if (days > 0) {\n return 'more than 24 hrs';\n } else {\n result = [];\n if (hours === 1) {\n result.push(hours + ' hr');\n }\n if (hours > 1) {\n result.push(hours + ' hrs');\n }\n if (minutes > 0) {\n result.push(minutes + ' min');\n }\n if (seconds > 0) {\n result.push(seconds + ' sec');\n }\n if (result.length > 0) {\n return result.join(' ');\n } else {\n return '-';\n }\n }\n },\n _normalizeDateString: function(string) {\n if (window.JHW) {\n string = string.replace('T', ' ').replace(/-/g, '/');\n string = string.replace('Z', '').replace(/\\..*$/, '');\n }\n return string;\n },\n _nowUtc: function() {\n return this._toUtc(new Date());\n },\n _toUtc: function(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n },\n _emojize: function(text) {\n var emojis;\n emojis = text.match(/:\\S+?:/g);\n if (emojis !== null) {\n $.each(emojis.uniq(), function(ix, emoji) {\n var image, strippedEmoji;\n strippedEmoji = emoji.substring(1, emoji.length - 1);\n if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n image = '';\n return text = text.replace(new RegExp(emoji, 'g'), image);\n }\n });\n }\n return text;\n },\n _escape: function(text) {\n return text.replace(/&/g, '&').replace(//g, '>');\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n this.Travis.Urls = {\n repo: function(slug) {\n return \"/\" + slug;\n },\n builds: function(slug) {\n return \"/\" + slug + \"/builds\";\n },\n pullRequests: function(slug) {\n return \"/\" + slug + \"/pull_requests\";\n },\n branches: function(slug) {\n return \"/\" + slug + \"/branches\";\n },\n build: function(slug, id) {\n return \"/\" + slug + \"/builds/\" + id;\n },\n job: function(slug, id) {\n return \"/\" + slug + \"/jobs/\" + id;\n },\n githubCommit: function(slug, sha) {\n return \"http://github.com/\" + slug + \"/commit/\" + sha;\n },\n githubRepo: function(slug) {\n return \"http://github.com/\" + slug;\n },\n githubWatchers: function(slug) {\n return \"http://github.com/\" + slug + \"/watchers\";\n },\n githubNetwork: function(slug) {\n return \"http://github.com/\" + slug + \"/network\";\n },\n githubAdmin: function(slug) {\n return \"http://github.com/\" + slug + \"/admin/hooks#travis_minibucket\";\n },\n statusImage: function(slug, branch) {\n return (\"https://secure.travis-ci.org/\" + slug + \".png\") + (branch ? \"?branch=\" + branch : '');\n },\n email: function(email) {\n return \"mailto:\" + email;\n },\n account: function(login) {\n return \"/profile/\" + login;\n },\n user: function(login) {\n return \"/profile/\" + login + \"/me\";\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('models', "(function() {(function() {\nminispade.require('models/extensions');\nminispade.require('models/account');\nminispade.require('models/artifact');\nminispade.require('models/broadcast');\nminispade.require('models/branch');\nminispade.require('models/build');\nminispade.require('models/commit');\nminispade.require('models/event');\nminispade.require('models/hook');\nminispade.require('models/job');\nminispade.require('models/repo');\nminispade.require('models/sponsor');\nminispade.require('models/user');\nminispade.require('models/worker');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/account', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Account = Travis.Model.extend({\n primaryKey: 'login',\n login: DS.attr('string'),\n name: DS.attr('string'),\n type: DS.attr('string'),\n reposCount: DS.attr('number'),\n urlGithub: (function() {\n return \"http://github.com/\" + (this.get('login'));\n }).property()\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/account");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Artifact = Travis.Model.extend({\n body: DS.attr('string'),\n init: function() {\n this._super.apply(this, arguments);\n this.set('queue', Ember.A([]));\n this.addObserver('body', this.fetchWorker);\n return this.fetchWorker();\n },\n append: function(body) {\n if (this.get('isLoaded')) {\n return this.set('body', this.get('body') + body);\n } else {\n return this.get('queue').pushObject(body);\n }\n },\n recordDidLoad: (function() {\n var queue;\n if (this.get('isLoaded')) {\n queue = this.get('queue');\n if (queue.get('length') > 0) {\n return this.append(queue.toArray().join(''));\n }\n }\n }).observes('isLoaded'),\n fetchWorker: function() {\n var body, line, match, worker;\n if (body = this.get('body')) {\n line = body.split(\"\\n\")[0];\n if (line && (match = line.match(/Using worker: (.*)/))) {\n if (worker = match[1]) {\n worker = worker.trim().split(':')[0];\n this.set('workerName', worker);\n return this.removeObserver('body', this.fetchWorker);\n }\n }\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n commitId: DS.attr('number'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n duration: DS.attr('number'),\n startedAt: DS.attr('string'),\n finishedAt: DS.attr('string'),\n commit: DS.belongsTo('Travis.Commit'),\n repo: (function() {\n if (this.get('repoId')) {\n return Travis.Repo.find(this.get('repoId'));\n }\n }).property('repoId'),\n updateTimes: function() {\n this.notifyPropertyChange('started_at');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n this.Travis.Branch.reopenClass({\n byRepoId: function(id) {\n return this.find({\n repository_id: id\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/broadcast', "(function() {(function() {\n var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('travis/model');\n\n this.Travis.Broadcast = Travis.Model.extend({\n message: DS.attr('string'),\n toObject: function() {\n return {\n type: 'broadcast',\n id: this.get('id'),\n message: this.get('message')\n };\n },\n isSeen: (function() {\n var _ref;\n return _ref = this.get('id'), __indexOf.call(Travis.Broadcast.seen, _ref) >= 0;\n }).property(),\n setSeen: function() {\n Travis.Broadcast.seen.pushObject(this.get('id'));\n localStorage.setItem('travis.seen_broadcasts', JSON.stringify(Travis.Broadcast.seen));\n return this.notifyPropertyChange('isSeen');\n }\n });\n\n this.Travis.Broadcast.reopenClass({\n seen: Ember.A(JSON.parse(localStorage.getItem('travis.seen_broadcasts')) || [])\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/broadcast");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Build = Travis.Model.extend(Travis.DurationCalculations, {\n eventType: DS.attr('string'),\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n commitId: DS.attr('number'),\n state: DS.attr('string'),\n number: DS.attr('number'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n result: DS.attr('number'),\n _duration: DS.attr('number', {\n key: 'duration'\n }),\n startedAt: DS.attr('string', {\n key: 'started_at'\n }),\n finishedAt: DS.attr('string', {\n key: 'finished_at'\n }),\n repo: DS.belongsTo('Travis.Repo', {\n key: 'repository_id'\n }),\n commit: DS.belongsTo('Travis.Commit'),\n jobs: DS.hasMany('Travis.Job', {\n key: 'job_ids'\n }),\n config: (function() {\n return Travis.Helpers.compact(this.get('data.config'));\n }).property('data.config'),\n isMatrix: (function() {\n return this.get('data.job_ids.length') > 1;\n }).property('data.job_ids.length'),\n isFinished: (function() {\n return this.get('state') === 'finished';\n }).property('state'),\n requiredJobs: (function() {\n return this.get('jobs').filter(function(data) {\n return !data.get('allowFailure');\n });\n }).property('jobs.@each.allowFailure'),\n allowedFailureJobs: (function() {\n return this.get('jobs').filter(function(data) {\n return data.get('allowFailure');\n });\n }).property('jobs.@each.allowFailure'),\n configKeys: (function() {\n var config, headers, key, keys;\n if (!(config = this.get('config'))) {\n return [];\n }\n keys = $.intersect($.keys(config), Travis.CONFIG_KEYS);\n headers = (function() {\n var _i, _len, _ref, _results;\n _ref = ['build.job', 'build.duration', 'build.finished_at'];\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n key = _ref[_i];\n _results.push(I18n.t(key));\n }\n return _results;\n })();\n return $.map(headers.concat(keys), function(key) {\n return $.camelize(key);\n });\n }).property('config'),\n requeue: (function() {\n return Travis.ajax.post('/requests', {\n build_id: this.get('id')\n });\n })\n });\n\n this.Travis.Build.reopenClass({\n byRepoId: function(id, parameters) {\n return this.find($.extend(parameters || {}, {\n repository_id: id\n }));\n },\n olderThanNumber: function(id, build_number) {\n return this.find({\n url: \"/builds\",\n repository_id: id,\n after_number: build_number\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Commit = Travis.Model.extend({\n buildId: DS.attr('number'),\n sha: DS.attr('string'),\n branch: DS.attr('string'),\n message: DS.attr('string'),\n compareUrl: DS.attr('string'),\n authorName: DS.attr('string'),\n authorEmail: DS.attr('string'),\n committerName: DS.attr('string'),\n committerEmail: DS.attr('string'),\n build: DS.belongsTo('Travis.Build', {\n key: 'buildId'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/event', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Event = Travis.Model.extend({\n event: DS.attr('string'),\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n sourceId: DS.attr('number', {\n key: 'source_id'\n }),\n sourceType: DS.attr('string', {\n key: 'source_type'\n }),\n createdAt: DS.attr('string', {\n key: 'created_at'\n }),\n event_: (function() {\n return this.get('event');\n }).property('event'),\n result: (function() {\n return this.get('data.data.result');\n }).property('data.data.result'),\n message: (function() {\n return this.get('data.data.message');\n }).property('data.data.message'),\n source: (function() {\n var type;\n if (type = this.get('sourceType')) {\n return Travis[type].find(this.get('sourceId'));\n }\n }).property('sourceType', 'sourceId')\n });\n\n this.Travis.Event.reopenClass({\n byRepoId: function(id) {\n return this.find({\n repository_id: id\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/event");minispade.register('models/extensions', "(function() {(function() {\n\n Travis.DurationCalculations = Ember.Mixin.create({\n duration: (function() {\n var duration;\n if (duration = this.get('_duration')) {\n return duration;\n } else {\n return Travis.Helpers.durationFrom(this.get('startedAt'), this.get('finishedAt'));\n }\n }).property('_duration', 'finishedAt', 'startedAt'),\n updateTimes: function() {\n this.notifyPropertyChange('_duration');\n return this.notifyPropertyChange('finished_at');\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/extensions");minispade.register('models/hook', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Hook = Travis.Model.extend({\n name: DS.attr('string'),\n ownerName: DS.attr('string'),\n description: DS.attr('string'),\n active: DS.attr('boolean'),\n account: (function() {\n return this.get('slug').split('/')[0];\n }).property('slug'),\n slug: (function() {\n return \"\" + (this.get('ownerName')) + \"/\" + (this.get('name'));\n }).property('ownerName', 'name'),\n urlGithub: (function() {\n return \"http://github.com/\" + (this.get('slug'));\n }).property(),\n urlGithubAdmin: (function() {\n return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n }).property(),\n toggle: function() {\n var transaction;\n transaction = this.get('store').transaction();\n transaction.add(this);\n this.set('active', !this.get('active'));\n return transaction.commit();\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/hook");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Job = Travis.Model.extend(Travis.DurationCalculations, {\n repoId: DS.attr('number', {\n key: 'repository_id'\n }),\n buildId: DS.attr('number'),\n commitId: DS.attr('number'),\n logId: DS.attr('number'),\n queue: DS.attr('string'),\n state: DS.attr('string'),\n number: DS.attr('string'),\n result: DS.attr('number'),\n _duration: DS.attr('number', {\n key: 'duration'\n }),\n startedAt: DS.attr('string'),\n finishedAt: DS.attr('string'),\n allowFailure: DS.attr('boolean', {\n key: 'allow_failure'\n }),\n repo: DS.belongsTo('Travis.Repo', {\n key: 'repository_id'\n }),\n build: DS.belongsTo('Travis.Build', {\n key: 'build_id'\n }),\n commit: DS.belongsTo('Travis.Commit', {\n key: 'commit_id'\n }),\n log: DS.belongsTo('Travis.Artifact', {\n key: 'log_id'\n }),\n config: (function() {\n return Travis.Helpers.compact(this.get('data.config'));\n }).property('data.config'),\n sponsor: (function() {\n var worker;\n worker = this.get('log.workerName');\n if (worker && worker.length) {\n return Travis.WORKERS[worker] || {\n name: \"Travis Pro\",\n url: \"http://travis-ci.com\"\n };\n }\n }).property('log.workerName'),\n configValues: (function() {\n var buildConfig, config, keys;\n config = this.get('config');\n buildConfig = this.get('build.config');\n if (config && buildConfig) {\n keys = $.intersect($.keys(buildConfig), Travis.CONFIG_KEYS);\n return keys.map(function(key) {\n return config[key];\n });\n } else {\n return [];\n }\n }).property('config'),\n appendLog: function(text) {\n var log;\n if (log = this.get('log')) {\n return log.append(text);\n }\n },\n subscribe: function() {\n var id;\n if (id = this.get('id')) {\n return Travis.app.pusher.subscribe(\"job-\" + id);\n }\n },\n onStateChange: (function() {\n if (this.get('state') === 'finished') {\n return Travis.app.pusher.unsubscribe(\"job-\" + (this.get('id')));\n }\n }).observes('state')\n });\n\n this.Travis.Job.reopenClass({\n queued: function(queue) {\n this.find();\n return Travis.app.store.filter(this, function(job) {\n var queued;\n queued = ['created', 'queued'].indexOf(job.get('state')) !== -1;\n return queued && (!queue || job.get('queue') === (\"builds.\" + queue));\n });\n },\n findMany: function(ids) {\n return Travis.app.store.findMany(this, ids);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repo', "(function() {(function() {\nminispade.require('travis/expandable_record_array');\nminispade.require('travis/model');\n\n this.Travis.Repo = Travis.Model.extend({\n slug: DS.attr('string'),\n description: DS.attr('string'),\n lastBuildId: DS.attr('number'),\n lastBuildNumber: DS.attr('string'),\n lastBuildResult: DS.attr('number'),\n lastBuildStartedAt: DS.attr('string'),\n lastBuildFinishedAt: DS.attr('string'),\n lastBuild: DS.belongsTo('Travis.Build'),\n builds: (function() {\n var array, builds, id;\n id = this.get('id');\n builds = Travis.Build.byRepoId(id, {\n event_type: 'push'\n });\n array = Travis.ExpandableRecordArray.create({\n type: Travis.Build,\n content: Ember.A([]),\n store: this.get('store')\n });\n array.load(builds);\n return array;\n }).property(),\n pullRequests: (function() {\n var array, builds, id;\n id = this.get('id');\n builds = Travis.Build.byRepoId(id, {\n event_type: 'pull_request'\n });\n array = Travis.ExpandableRecordArray.create({\n type: Travis.Build,\n content: Ember.A([]),\n store: this.get('store')\n });\n array.load(builds);\n return array;\n }).property(),\n branches: (function() {\n return Travis.Branch.byRepoId(this.get('id'));\n }).property(),\n events: (function() {\n return Travis.Event.byRepoId(this.get('id'));\n }).property(),\n owner: (function() {\n return (this.get('slug') || '').split('/')[0];\n }).property('slug'),\n name: (function() {\n return (this.get('slug') || '').split('/')[1];\n }).property('slug'),\n lastBuildDuration: (function() {\n var duration;\n duration = this.get('data.last_build_duration');\n if (!duration) {\n duration = Travis.Helpers.durationFrom(this.get('lastBuildStartedAt'), this.get('lastBuildFinishedAt'));\n }\n return duration;\n }).property('data.last_build_duration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n sortOrder: (function() {\n var lastBuildFinishedAt;\n if (lastBuildFinishedAt = this.get('lastBuildFinishedAt')) {\n return -new Date(lastBuildFinishedAt).getTime();\n } else {\n return -new Date('9999').getTime() - parseInt(this.get('lastBuildId'));\n }\n }).property('lastBuildFinishedAt', 'lastBuildId'),\n stats: (function() {\n var _this = this;\n return this.get('_stats') || $.get(\"https://api.github.com/repos/\" + (this.get('slug')), function(data) {\n _this.set('_stats', data);\n return _this.notifyPropertyChange('stats');\n }) && {};\n }).property(),\n updateTimes: function() {\n return this.notifyPropertyChange('lastBuildDuration');\n }\n });\n\n this.Travis.Repo.reopenClass({\n recent: function() {\n return this.find();\n },\n ownedBy: function(login) {\n return this.find({\n owner_name: login,\n orderBy: 'name'\n });\n },\n accessibleBy: function(login) {\n return this.find({\n member: login,\n orderBy: 'name'\n });\n },\n search: function(query) {\n return this.find({\n search: query,\n orderBy: 'name'\n });\n },\n bySlug: function(slug) {\n var repo;\n repo = $.select(this.find().toArray(), function(repo) {\n return repo.get('slug') === slug;\n });\n if (repo.length > 0) {\n return repo;\n } else {\n return this.find({\n slug: slug\n });\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repo");minispade.register('models/sponsor', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Sponsor = Travis.Model.extend({\n type: DS.attr('string'),\n url: DS.attr('string'),\n link: DS.attr('string'),\n image: (function() {\n return \"/images/sponsors/\" + (this.get('data.image'));\n }).property('data.image')\n });\n\n Travis.Sponsor.reopenClass({\n decks: function() {\n return this.platinum().concat(this.gold());\n },\n platinum: function() {\n var platinum, sponsor, _i, _len, _results;\n platinum = this.byType('platinum').toArray();\n _results = [];\n for (_i = 0, _len = platinum.length; _i < _len; _i++) {\n sponsor = platinum[_i];\n _results.push([sponsor]);\n }\n return _results;\n },\n gold: function() {\n var gold, _results;\n gold = this.byType('gold').toArray();\n _results = [];\n while (gold.length > 0) {\n _results.push(gold.splice(0, 2));\n }\n return _results;\n },\n links: function() {\n return this.byType('silver');\n },\n byType: function() {\n var types;\n types = Array.prototype.slice.apply(arguments);\n return Travis.Sponsor.filter(function(sponsor) {\n return types.indexOf(sponsor.get('type')) !== -1;\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/sponsor");minispade.register('models/user', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('travis/model');\n\n this.Travis.User = Travis.Model.extend({\n name: DS.attr('string'),\n email: DS.attr('string'),\n login: DS.attr('string'),\n token: DS.attr('string'),\n locale: DS.attr('string'),\n gravatarId: DS.attr('string'),\n isSyncing: DS.attr('boolean'),\n syncedAt: DS.attr('string'),\n repoCount: DS.attr('number'),\n init: function() {\n if (this.get('isSyncing')) {\n this.poll();\n }\n this._super();\n return Ember.run.next(this, function() {\n var transaction;\n transaction = this.get('store').transaction();\n return transaction.add(this);\n });\n },\n urlGithub: (function() {\n return \"https://github.com/\" + (this.get('login'));\n }).property(),\n permissions: (function() {\n var _this = this;\n if (!this.permissions) {\n this.permissions = Ember.ArrayProxy.create({\n content: []\n });\n Travis.ajax.get('/users/permissions', function(data) {\n return _this.permissions.set('content', data.permissions);\n });\n }\n return this.permissions;\n }).property(),\n updateLocale: function(locale) {\n var observer, self, transaction;\n this.setWithSession('locale', locale);\n transaction = this.get('transaction');\n transaction.commit();\n self = this;\n observer = function() {\n if (!self.get('isSaving')) {\n self.removeObserver('isSaving', observer);\n transaction = self.get('store').transaction();\n return transaction.add(self);\n }\n };\n return this.addObserver('isSaving', observer);\n },\n type: (function() {\n return 'user';\n }).property(),\n sync: function() {\n Travis.ajax.post('/users/sync');\n this.setWithSession('isSyncing', true);\n return this.poll();\n },\n poll: function() {\n var _this = this;\n return Travis.ajax.get('/users', function(data) {\n if (data.user.is_syncing) {\n return Ember.run.later(_this, _this.poll.bind(_this), 3000);\n } else {\n _this.set('isSyncing', false);\n return _this.setWithSession('syncedAt', data.user.synced_at);\n }\n });\n },\n setWithSession: function(name, value) {\n var user;\n this.set(name, value);\n user = JSON.parse(typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0);\n user[$.underscore(name)] = this.get(name);\n return typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.setItem('travis.user', JSON.stringify(user)) : void 0;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/user");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n this.Travis.Worker = Travis.Model.extend({\n state: DS.attr('string'),\n name: DS.attr('string'),\n host: DS.attr('string'),\n lastSeenAt: DS.attr('string'),\n payload: (function() {\n return this.get('data.payload');\n }).property('data.payload'),\n number: (function() {\n return this.get('name').match(/\\d+$/)[0];\n }).property('name'),\n isWorking: (function() {\n return this.get('state') === 'working';\n }).property('state'),\n repo: (function() {\n return Travis.Repo.find(this.get('payload.repository.id') || this.get('payload.repo.id'));\n }).property('payload.repository.id', 'payload.repo.id'),\n job_id: (function() {\n return this.get('payload.job.id');\n }).property('payload.job.id'),\n job: (function() {\n return Travis.Job.find(this.get('job_id'));\n }).property('job_id'),\n nameForSort: (function() {\n var id, match, name;\n if (name = this.get('name')) {\n match = name.match(/(.*?)-(\\d+)/);\n if (match) {\n name = match[1];\n id = match[2].toString();\n if (id.length < 2) {\n id = \"00\" + id;\n } else if (id.length < 3) {\n id = \"0\" + id;\n }\n return \"\" + name + \"-\" + id;\n }\n }\n }).property('name')\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('pusher', "(function() {(function() {\n\n Travis.Pusher = function(key) {\n if (key) {\n this.init(key);\n }\n return this;\n };\n\n $.extend(Travis.Pusher, {\n CHANNELS: ['common'],\n CHANNEL_PREFIX: ''\n });\n\n $.extend(Travis.Pusher.prototype, {\n active_channels: [],\n init: function(key) {\n var channel, _i, _len, _ref, _results;\n Pusher.warn = this.warn.bind(this);\n this.pusher = new Pusher(key);\n _ref = Travis.Pusher.CHANNELS;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n channel = _ref[_i];\n _results.push(this.subscribe(channel));\n }\n return _results;\n },\n subscribe: function(channel) {\n var _this = this;\n if (this.pusher && this.active_channels.indexOf(channel) === -1) {\n this.active_channels.push(channel);\n return this.pusher.subscribe(this.prefix(channel)).bind_all(function(event, data) {\n return _this.receive(event, data);\n });\n }\n },\n unsubscribe: function(channel) {\n var ix;\n ix = this.active_channels.indexOf(channel);\n if (this.pusher && ix === -1) {\n this.active_channels.splice(ix, 1);\n return this.pusher.unsubscribe(this.prefix(channel));\n }\n },\n prefix: function(channel) {\n return \"\" + Travis.Pusher.CHANNEL_PREFIX + channel;\n },\n receive: function(event, data) {\n if (event.substr(0, 6) === 'pusher') {\n return;\n }\n if (data.id) {\n data = this.normalize(event, data);\n }\n return Ember.run.next(function() {\n return Travis.app.store.receive(event, data);\n });\n },\n normalize: function(event, data) {\n switch (event) {\n case 'build:started':\n case 'build:finished':\n return data;\n case 'job:created':\n case 'job:started':\n case 'job:finished':\n case 'job:log':\n if (data.queue) {\n data.queue = data.queue.replace('builds.', '');\n }\n return {\n job: data\n };\n case 'worker:added':\n case 'worker:updated':\n case 'worker:removed':\n return {\n worker: data\n };\n }\n },\n warn: function(type, warning) {\n if (!this.ignoreWarning(warning)) {\n return console.warn(warning);\n }\n },\n ignoreWarning: function(warning) {\n var message, _ref;\n if (message = (_ref = warning.data) != null ? _ref.message : void 0) {\n return message.indexOf('Existing subscription') === 0 || message.indexOf('No current subscription') === 0;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=pusher");minispade.register('routes', "(function() {(function() {\n var defaultRoute, lineNumberRoute;\nminispade.require('travis/location');\n\n defaultRoute = Ember.Route.extend({\n route: '/',\n index: 1000\n });\n\n lineNumberRoute = Ember.Route.extend({\n route: '#L:number',\n index: 1,\n connectOutlets: function(router) {\n return router.saveLineNumberHash();\n },\n dynamicSegmentPattern: \"([0-9]+)\"\n });\n\n Travis.Router = Ember.Router.extend({\n location: 'travis',\n enableLogging: true,\n initialState: 'loading',\n showRoot: Ember.Route.transitionTo('root.home.show'),\n showStats: Ember.Route.transitionTo('root.stats'),\n showRepo: Ember.Route.transitionTo('root.home.repo.show'),\n showBuilds: Ember.Route.transitionTo('root.home.repo.builds.index'),\n showBuild: Ember.Route.transitionTo('root.home.repo.builds.show'),\n showPullRequests: Ember.Route.transitionTo('root.home.repo.pullRequests'),\n showBranches: Ember.Route.transitionTo('root.home.repo.branches'),\n showEvents: Ember.Route.transitionTo('root.home.repo.events'),\n showJob: Ember.Route.transitionTo('root.home.repo.job'),\n showProfile: Ember.Route.transitionTo('root.profile'),\n showAccount: Ember.Route.transitionTo('root.profile.account'),\n showUserProfile: Ember.Route.transitionTo('root.profile.account.profile'),\n saveLineNumberHash: function(path) {\n return Ember.run.next(this, function() {\n var match;\n path = path || this.get('location').getURL();\n if (match = path.match(/#L\\d+$/)) {\n return this.set('repoController.lineNumberHash', match[0]);\n }\n });\n },\n reload: function() {\n var url;\n url = this.get('location').getURL();\n this.transitionTo('loading');\n return this.route(url);\n },\n signedIn: function() {\n return !!Travis.app.get('auth.user');\n },\n needsAuth: function(path) {\n return path.indexOf('/profile') === 0;\n },\n afterSignOut: function() {\n return this.authorize('/');\n },\n loading: Ember.Route.extend({\n routePath: function(router, path) {\n router.saveLineNumberHash(path);\n router.authorize(path);\n if (!router.signedIn()) {\n return Travis.app.autoSignIn();\n }\n }\n }),\n authorize: function(path) {\n if (!this.signedIn() && this.needsAuth(path)) {\n Travis.app.storeAfterSignInPath(path);\n return this.transitionTo('root.auth');\n } else {\n this.transitionTo('root');\n return this.route(path);\n }\n },\n root: Ember.Route.extend({\n route: '/',\n loading: Ember.State.extend(),\n afterSignIn: (function() {}),\n auth: Ember.Route.extend({\n route: '/auth',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('authLayout');\n $('body').attr('id', 'auth');\n router.get('authLayoutController').connectOutlet('top', 'top');\n return router.get('authLayoutController').connectOutlet('main', 'signin');\n },\n afterSignIn: function(router, path) {\n return router.route(path || '/');\n }\n }),\n stats: Ember.Route.extend({\n route: '/stats',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('statsLayout');\n $('body').attr('id', 'stats');\n router.get('statsLayoutController').connectOutlet('top', 'top');\n return router.get('statsLayoutController').connectOutlet('main', 'stats');\n }\n }),\n profile: Ember.Route.extend({\n initialState: 'index',\n route: '/profile',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('profileLayout');\n $('body').attr('id', 'profile');\n router.get('accountsController').set('content', Travis.Account.find());\n router.get('profileLayoutController').connectOutlet('top', 'top');\n return router.get('profileLayoutController').connectOutlet('left', 'accounts');\n },\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n router.get('profileLayoutController').connectOutlet('main', 'profile');\n return router.get('profileController').activate('hooks');\n }\n }),\n account: Ember.Route.extend({\n initialState: 'index',\n route: '/:login',\n connectOutlets: function(router, account) {\n var params;\n if (account) {\n params = {\n login: account.get('login')\n };\n return router.get('profileController').setParams(params);\n } else {\n return router.send('showProfile');\n }\n },\n deserialize: function(router, params) {\n var account, controller, deferred, observer;\n controller = router.get('accountsController');\n if (!controller.get('content')) {\n controller.set('content', Travis.Account.find());\n }\n account = controller.findByLogin(params.login);\n if (account) {\n return account;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (account = controller.findByLogin(params.login)) {\n controller.removeObserver('content.length', observer);\n return deferred.resolve(account);\n }\n };\n controller.addObserver('content.length', observer);\n return deferred.promise();\n }\n },\n serialize: function(router, account) {\n if (account) {\n return {\n login: account.get('login')\n };\n } else {\n return {};\n }\n },\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('profileController').activate('hooks');\n }\n }),\n profile: Ember.Route.extend({\n route: '/profile',\n connectOutlets: function(router) {\n return router.get('profileController').activate('user');\n }\n })\n })\n }),\n home: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n router.get('applicationController').connectOutlet('homeLayout');\n $('body').attr('id', 'home');\n router.get('homeLayoutController').connectOutlet('left', 'repos');\n router.get('homeLayoutController').connectOutlet('right', 'sidebar');\n router.get('homeLayoutController').connectOutlet('top', 'top');\n router.get('homeLayoutController').connectOutlet('main', 'repo');\n router.get('homeLayoutController').connectOutlet('flash', 'flash');\n return router.get('repoController').set('repos', router.get('reposController'));\n },\n show: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('repoController').activate('index');\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n }),\n showWithLineNumber: Ember.Route.extend({\n route: '/#/L:number',\n connectOutlets: function(router) {\n return router.get('repoController').activate('index');\n }\n }),\n repo: Ember.Route.extend({\n route: '/:owner/:name',\n dynamicSegmentPattern: \"([^/#]+)\",\n connectOutlets: function(router, repo) {\n return router.get('repoController').set('repo', repo);\n },\n deserialize: function(router, params) {\n var deferred, observer, repos, slug;\n slug = \"\" + params.owner + \"/\" + params.name;\n repos = Travis.Repo.bySlug(slug);\n deferred = $.Deferred();\n observer = function() {\n if (repos.get('isLoaded')) {\n repos.removeObserver('isLoaded', observer);\n return deferred.resolve(repos.objectAt(0));\n }\n };\n if (repos.length) {\n deferred.resolve(repos[0]);\n } else {\n repos.addObserver('isLoaded', observer);\n }\n return deferred.promise();\n },\n serialize: function(router, repo) {\n if (repo) {\n return {\n owner: repo.get('owner'),\n name: repo.get('name')\n };\n } else {\n return {};\n }\n },\n show: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router) {\n return router.get('repoController').activate('current');\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n }),\n builds: Ember.Route.extend({\n route: '/builds',\n index: Ember.Route.extend({\n route: '/',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('builds');\n }\n }),\n show: Ember.Route.extend({\n route: '/:build_id',\n connectOutlets: function(router, build) {\n if (!build.get) {\n build = Travis.Build.find(build);\n }\n router.get('repoController').set('build', build);\n return router.get('repoController').activate('build');\n },\n serialize: function(router, build) {\n if (build.get) {\n return {\n build_id: build.get('id')\n };\n } else {\n return {\n build_id: build\n };\n }\n },\n deserialize: function(router, params) {\n var build, deferred, observer;\n build = Travis.Build.find(params.build_id);\n if (build.get('id')) {\n return build;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (build.get('id')) {\n build.removeObserver('id', observer);\n return deferred.resolve(build);\n }\n };\n build.addObserver('id', observer);\n return deferred.promise();\n }\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute,\n dynamicSegmentPattern: \"([^/#]+)\"\n })\n }),\n pullRequests: Ember.Route.extend({\n route: '/pull_requests',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('pull_requests');\n }\n }),\n branches: Ember.Route.extend({\n route: '/branches',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('branches');\n }\n }),\n events: Ember.Route.extend({\n route: '/events',\n connectOutlets: function(router, repo) {\n return router.get('repoController').activate('events');\n }\n }),\n job: Ember.Route.extend({\n route: '/jobs/:job_id',\n dynamicSegmentPattern: \"([^/#]+)\",\n connectOutlets: function(router, job) {\n if (!job.get) {\n job = Travis.Job.find(job);\n }\n router.get('repoController').set('job', job);\n return router.get('repoController').activate('job');\n },\n serialize: function(router, job) {\n if (job.get) {\n return {\n job_id: job.get('id')\n };\n } else {\n return {\n job_id: job\n };\n }\n },\n deserialize: function(router, params) {\n var deferred, job, observer;\n job = Travis.Job.find(params.job_id);\n if (job.get('id')) {\n return job;\n } else {\n deferred = $.Deferred();\n observer = function() {\n if (job.get('id')) {\n job.removeObserver('id', observer);\n return deferred.resolve(job);\n }\n };\n job.addObserver('id', observer);\n return deferred.promise();\n }\n },\n initialState: 'default',\n \"default\": defaultRoute,\n lineNumber: lineNumberRoute\n })\n })\n })\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=routes");minispade.register('slider', "(function() {(function() {\n\n this.Travis.Slider = function() {\n if ((typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.maximized') : void 0) === 'true') {\n this.minimize();\n }\n return this;\n };\n\n $.extend(Travis.Slider.prototype, {\n persist: function() {\n return typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.setItem('travis.maximized', this.isMinimized()) : void 0;\n },\n isMinimized: function() {\n return $('body').hasClass('maximized');\n },\n minimize: function() {\n return $('body').addClass('maximized');\n },\n toggle: function() {\n var element;\n $('body').toggleClass('maximized');\n this.persist();\n element = $('');\n $('#top .profile').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=slider");minispade.register('store', "(function() {(function() {\n var DATA_PROXY,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('store/rest_adapter');\n\n DATA_PROXY = {\n get: function(name) {\n return this.savedData[name];\n }\n };\n\n Travis.Store = DS.Store.extend({\n revision: 4,\n adapter: Travis.RestAdapter.create(),\n load: function(type, id, hash) {\n var record, result;\n result = this._super.apply(this, arguments);\n if (result && result.clientId) {\n record = this.findByClientId(type, result.clientId);\n record.set('incomplete', false);\n record.set('complete', true);\n }\n return result;\n },\n merge: function(type, id, hash) {\n var clientId, data, dataCache, primaryKey, record, recordCache, typeMap;\n if (hash === void 0) {\n hash = id;\n primaryKey = type.proto().primaryKey;\n Ember.assert(\"A data hash was loaded for a record of type \" + type.toString() + \" but no primary key '\" + primaryKey + \"' was provided.\", hash[primaryKey]);\n id = hash[primaryKey];\n }\n typeMap = this.typeMapFor(type);\n dataCache = typeMap.cidToHash;\n clientId = typeMap.idToCid[id];\n recordCache = this.get('recordCache');\n if (clientId !== void 0) {\n if (data = dataCache[clientId]) {\n $.extend(data, hash);\n } else {\n dataCache[clientId] = hash;\n }\n if (record = recordCache[clientId]) {\n record.send('didChangeData');\n }\n } else {\n clientId = this.pushHash(hash, id, type);\n }\n if (clientId) {\n DATA_PROXY.savedData = hash;\n this.updateRecordArrays(type, clientId, DATA_PROXY);\n return {\n id: id,\n clientId: clientId\n };\n }\n },\n receive: function(event, data) {\n var job, mappings, name, type, _ref;\n _ref = event.split(':'), name = _ref[0], type = _ref[1];\n mappings = this.adapter.get('mappings');\n type = mappings[name];\n if (event === 'job:log') {\n if (job = this.find(Travis.Job, data['job']['id'])) {\n return job.appendLog(data['job']['_log']);\n }\n } else if (data[type.singularName()]) {\n return this._loadOne(this, type, data);\n } else if (data[type.pluralName()]) {\n return this._loadMany(this, type, data);\n } else {\n if (!type) {\n throw \"can't load data for \" + name;\n }\n }\n },\n _loadOne: function(store, type, json) {\n var result, root;\n root = type.singularName();\n if (type === Travis.Build && json.repository) {\n result = this.loadIncomplete(Travis.Repo, json.repository);\n }\n return this.loadIncomplete(type, json[root]);\n },\n loadIncomplete: function(type, hash) {\n var record, result;\n result = this.merge(type, hash);\n if (result && result.clientId) {\n record = this.findByClientId(type, result.clientId);\n if (!record.get('complete')) {\n record.set('incomplete', true);\n record.loadedAttributes = Object.keys(hash);\n }\n this._updateAssociations(type, type.singularName(), hash);\n return record;\n }\n },\n _loadMany: function(store, type, json) {\n var root;\n root = type.pluralName();\n this.adapter.sideload(store, type, json, root);\n return this.loadMany(type, json[root]);\n },\n _updateAssociations: function(type, name, data) {\n var _this = this;\n return Em.get(type, 'associationsByName').forEach(function(key, meta) {\n var clientId, dataProxy, id, ids, parent, _ref;\n if (meta.kind === 'belongsTo') {\n id = data[\"\" + key + \"_id\"];\n if (clientId = _this.typeMapFor(meta.type).idToCid[id]) {\n if (parent = _this.findByClientId(meta.type, clientId, id)) {\n dataProxy = parent.get('data');\n if (ids = dataProxy.get(\"\" + name + \"_ids\")) {\n if (_ref = data.id, __indexOf.call(ids, _ref) < 0) {\n ids.pushObject(data.id);\n }\n return parent.send('didChangeData');\n }\n }\n }\n }\n });\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n this.Travis.FixtureAdapter = DS.Adapter.extend({\n find: function(store, type, id) {\n var fixtures;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n if (fixtures.hasLoaded) {\n return;\n }\n return setTimeout((function() {\n store.loadMany(type, fixtures);\n return fixtures.hasLoaded = true;\n }), 300);\n },\n findMany: function() {\n return this.find.apply(this, arguments);\n },\n findAll: function(store, type) {\n var fixtures, ids;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n ids = fixtures.map(function(item, index, self) {\n return item.id;\n });\n return store.loadMany(type, ids, fixtures);\n },\n findQuery: function(store, type, params, array) {\n var fixture, fixtures, hashes, key, matches, value;\n fixtures = type.FIXTURES;\n Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n hashes = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n fixture = fixtures[_i];\n matches = (function() {\n var _results1;\n _results1 = [];\n for (key in params) {\n value = params[key];\n _results1.push(key === 'orderBy' || fixture[key] === value);\n }\n return _results1;\n })();\n if (matches.reduce(function(a, b) {\n return a && b;\n })) {\n _results.push(fixture);\n } else {\n _results.push(null);\n }\n }\n return _results;\n })();\n return array.load(hashes.compact());\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('models');\n\n this.Travis.RestAdapter = DS.RESTAdapter.extend({\n mappings: {\n broadcasts: Travis.Broadcast,\n repositories: Travis.Repo,\n repository: Travis.Repo,\n repos: Travis.Repo,\n repo: Travis.Repo,\n builds: Travis.Build,\n build: Travis.Build,\n commits: Travis.Commit,\n commit: Travis.Commit,\n jobs: Travis.Job,\n job: Travis.Job,\n account: Travis.Account,\n accounts: Travis.Account,\n worker: Travis.Worker,\n workers: Travis.Worker\n },\n plurals: {\n repositories: 'repositories',\n repository: 'repositories',\n repo: 'repos',\n repos: 'repos',\n build: 'builds',\n branch: 'branches',\n job: 'jobs',\n worker: 'workers',\n profile: 'profile'\n },\n ajax: function() {\n return Travis.ajax.ajax.apply(this, arguments);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('tailing', "(function() {(function() {\n\n this.Travis.Tailing = function() {\n this.position = $(window).scrollTop();\n $(window).scroll(this.onScroll.bind(this));\n return this;\n };\n\n $.extend(Travis.Tailing.prototype, {\n options: {\n timeout: 200\n },\n run: function() {\n this.autoScroll();\n this.positionButton();\n if (this.active()) {\n return Ember.run.later(this.run.bind(this), this.options.timeout);\n }\n },\n toggle: function(event) {\n if (this.active()) {\n return this.stop();\n } else {\n return this.start();\n }\n },\n active: function() {\n return $('#tail').hasClass('active');\n },\n start: function() {\n $('#tail').addClass('active');\n return this.run();\n },\n stop: function() {\n return $('#tail').removeClass('active');\n },\n autoScroll: function() {\n var log, logBottom, win, winBottom;\n if (!this.active()) {\n return;\n }\n win = $(window);\n log = $('#log');\n logBottom = log.offset().top + log.outerHeight() + 40;\n winBottom = win.scrollTop() + win.height();\n if (logBottom - winBottom > 0) {\n return win.scrollTop(logBottom - win.height());\n }\n },\n onScroll: function() {\n var position;\n this.positionButton();\n position = $(window).scrollTop();\n if (position < this.position) {\n this.stop();\n }\n return this.position = position;\n },\n positionButton: function() {\n var max, offset, tail;\n tail = $('#tail');\n if (tail.length === 0) {\n return;\n }\n offset = $(window).scrollTop() - $('#log').offset().top;\n max = $('#log').height() - $('#tail').height() + 5;\n if (offset > max) {\n offset = max;\n }\n if (offset > 0) {\n return tail.css({\n top: offset - 2\n });\n } else {\n return tail.css({\n top: 0\n });\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=tailing");minispade.register('views', "(function() {(function() {\nminispade.require('ext/ember/namespace');\n\n this.Travis.reopen({\n View: Em.View.extend({\n popup: function(event) {\n this.popupCloseAll();\n return $(\"#\" + event.target.name).toggleClass('display');\n },\n popupClose: function(event) {\n return $(event.target).closest('.popup').removeClass('display');\n },\n popupCloseAll: function() {\n return $('.popup').removeClass('display');\n }\n })\n });\n\n this.Travis.reopen({\n HomeLayoutView: Travis.View.extend({\n templateName: 'layouts/home'\n }),\n AuthLayoutView: Travis.View.extend({\n templateName: 'layouts/simple'\n }),\n ProfileLayoutView: Travis.View.extend({\n templateName: 'layouts/profile'\n }),\n StatsLayoutView: Travis.View.extend({\n templateName: 'layouts/simple'\n })\n });\nminispade.require('views/accounts');\nminispade.require('views/application');\nminispade.require('views/build');\nminispade.require('views/events');\nminispade.require('views/flash');\nminispade.require('views/job');\nminispade.require('views/repo');\nminispade.require('views/profile');\nminispade.require('views/sidebar');\nminispade.require('views/stats');\nminispade.require('views/signin');\nminispade.require('views/top');\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('views/accounts', "(function() {(function() {\n\n this.Travis.reopen({\n AccountsView: Travis.View.extend({\n tabBinding: 'controller.tab',\n templateName: 'profile/accounts',\n classAccounts: (function() {\n if (this.get('tab') === 'accounts') {\n return 'active';\n }\n }).property('tab')\n }),\n AccountsListView: Em.CollectionView.extend({\n elementId: 'accounts',\n accountBinding: 'content',\n tagName: 'ul',\n emptyView: Ember.View.extend({\n template: Ember.Handlebars.compile('
Loading')\n }),\n itemViewClass: Travis.View.extend({\n accountBinding: 'content',\n typeBinding: 'content.type',\n selectedBinding: 'account.selected',\n classNames: ['account'],\n classNameBindings: ['type', 'selected'],\n name: (function() {\n return this.get('content.name') || this.get('content.login');\n }).property('content.login', 'content.name'),\n urlAccount: (function() {\n return Travis.Urls.account(this.get('account.login'));\n }).property('account.login')\n })\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/accounts");minispade.register('views/application', "(function() {(function() {\n\n this.Travis.reopen({\n ApplicationView: Travis.View.extend({\n templateName: 'application',\n classNames: ['application'],\n localeDidChange: (function() {\n var locale;\n if (locale = Travis.app.get('auth.user.locale')) {\n Travis.setLocale(locale);\n return Travis.app.get('router').reload();\n }\n }).observes('Travis.app.auth.user.locale'),\n click: function(event) {\n var targetAndParents;\n targetAndParents = $(event.target).parents().andSelf();\n if (!(targetAndParents.hasClass('open-popup') || targetAndParents.hasClass('popup'))) {\n this.popupCloseAll();\n }\n if (!targetAndParents.hasClass('menu')) {\n return $('.menu').removeClass('display');\n }\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/application");minispade.register('views/build', "(function() {(function() {\n\n this.Travis.reopen({\n BuildsView: Travis.View.extend({\n templateName: 'builds/list',\n buildsBinding: 'controller.builds',\n showMore: function() {\n var id, number;\n id = this.get('controller.repo.id');\n number = this.get('builds.lastObject.number');\n return this.get('builds').load(Travis.Build.olderThanNumber(id, number));\n },\n ShowMoreButton: Em.View.extend({\n tagName: 'button',\n classNameBindings: ['isLoading'],\n attributeBindings: ['disabled'],\n isLoadingBinding: 'controller.builds.isLoading',\n template: Em.Handlebars.compile('{{view.label}}'),\n disabledBinding: 'isLoading',\n label: (function() {\n if (this.get('isLoading')) {\n return 'Loading';\n } else {\n return 'Show more';\n }\n }).property('isLoading'),\n click: function() {\n return this.get('parentView').showMore();\n }\n })\n }),\n BuildsItemView: Travis.View.extend({\n tagName: 'tr',\n classNameBindings: ['color'],\n repoBinding: 'controller.repo',\n buildBinding: 'context',\n commitBinding: 'build.commit',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('build.result'));\n }).property('build.result'),\n urlBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n }).property('repo.slug', 'build.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha')\n }),\n BuildView: Travis.View.extend({\n templateName: 'builds/show',\n elementId: 'build',\n classNameBindings: ['color', 'loading'],\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n commitBinding: 'build.commit',\n currentItemBinding: 'build',\n loading: (function() {\n return !this.get('build.isComplete');\n }).property('build.isComplete'),\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('build.result'));\n }).property('build.result'),\n urlBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n }).property('repo.slug', 'build.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha'),\n urlAuthor: (function() {\n return Travis.Urls.email(this.get('commit.authorEmail'));\n }).property('commit.authorEmail'),\n urlCommitter: (function() {\n return Travis.Urls.email(this.get('commit.committerEmail'));\n }).property('commit.committerEmail')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/build");minispade.register('views/events', "(function() {(function() {\n\n this.Travis.reopen({\n EventsView: Travis.View.extend({\n templateName: 'events/list',\n eventsBinding: 'controller.events'\n }),\n EventsItemView: Travis.View.extend({\n tagName: 'tr'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/events");minispade.register('views/flash', "(function() {(function() {\n\n this.Travis.reopen({\n FlashView: Travis.View.extend({\n elementId: 'flash',\n tagName: 'ul',\n templateName: 'layouts/flash'\n }),\n FlashItemView: Travis.View.extend({\n tagName: 'li',\n classNameBindings: ['type'],\n type: (function() {\n return this.get('flash.type') || 'broadcast';\n }).property('flash.type'),\n close: function(event) {\n return this.get('controller').close(this.get('flash'));\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/flash");minispade.register('views/job', "(function() {(function() {\n\n this.Travis.reopen({\n JobsView: Travis.View.extend({\n templateName: 'jobs/list',\n buildBinding: 'controller.build'\n }),\n JobsItemView: Travis.View.extend({\n tagName: 'tr',\n classNameBindings: ['color'],\n repoBinding: 'context.repo',\n jobBinding: 'context',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('job.result'));\n }).property('job.result'),\n urlJob: (function() {\n return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n }).property('repo.slug', 'job.id')\n }),\n JobView: Travis.View.extend({\n templateName: 'jobs/show',\n repoBinding: 'controller.repo',\n jobBinding: 'controller.job',\n commitBinding: 'job.commit',\n currentItemBinding: 'job',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('job.result'));\n }).property('job.result'),\n urlJob: (function() {\n return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n }).property('repo.slug', 'job.id'),\n urlGithubCommit: (function() {\n return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n }).property('repo.slug', 'commit.sha'),\n urlAuthor: (function() {\n return Travis.Urls.email(this.get('commit.authorEmail'));\n }).property('commit.authorEmail'),\n urlCommitter: (function() {\n return Travis.Urls.email(this.get('commit.committerEmail'));\n }).property('commit.committerEmail')\n }),\n LogView: Travis.View.extend({\n templateName: 'jobs/log',\n logBinding: 'job.log',\n scrollTo: function(hash) {\n var currentScroll;\n $('#main').scrollTop(0);\n currentScroll = $('.application > div').scrollTop();\n $('.application > div').scrollTop($(hash).offset().top + currentScroll - 40);\n return this.set('controller.lineNumberHash', null);\n },\n lineNumberHashDidChange: (function() {\n return this.tryScrollingToHashLineNumber();\n }).observes('controller.lineNumberHash'),\n tryScrollingToHashLineNumber: function() {\n var checker, hash, self;\n if (hash = this.get('controller.lineNumberHash')) {\n self = this;\n checker = function() {\n if (self.get('isDestroyed')) {\n return;\n }\n if ($(hash).length) {\n return self.scrollTo(hash);\n } else {\n return setTimeout(checker, 100);\n }\n };\n return checker();\n }\n },\n didInsertElement: function() {\n this._super.apply(this, arguments);\n return this.tryScrollingToHashLineNumber();\n },\n click: function(event) {\n var path, target;\n target = $(event.target);\n target.closest('.fold').toggleClass('open');\n if (target.is('.log-line-number')) {\n path = target.attr('href');\n Travis.app.get('router').route(path);\n event.stopPropagation();\n return false;\n }\n },\n toTop: function() {\n return $(window).scrollTop(0);\n },\n jobBinding: 'context',\n toggleTailing: function(event) {\n Travis.app.tailing.toggle();\n return event.preventDefault();\n },\n logSubscriber: (function() {\n var job, state;\n job = this.get('job');\n state = this.get('job.state');\n if (job && state !== 'finished') {\n job.subscribe();\n }\n return null;\n }).property('job', 'job.state')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/job");minispade.register('views/left', "(function() {(function() {\n\n this.Travis.reopen({\n ReposView: Travis.View.extend({\n templateName: 'repos/list',\n tabBinding: 'controller.tab',\n classRecent: (function() {\n if (this.get('tab') === 'recent') {\n return 'active';\n }\n }).property('tab'),\n classOwned: (function() {\n var classes;\n classes = [];\n if (this.get('tab') === 'owned') {\n classes.push('active');\n }\n if (Travis.app.get('currentUser')) {\n classes.push('display');\n }\n return classes.join(' ');\n }).property('tab', 'Travis.currentUser'),\n classSearch: (function() {\n if (this.get('tab') === 'search') {\n return 'active';\n }\n }).property('tab')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/left");minispade.register('views/profile', "(function() {(function() {\n\n this.Travis.reopen({\n ProfileView: Travis.View.extend({\n templateName: 'profile/show',\n accountBinding: 'controller.account',\n name: (function() {\n return this.get('account.name') || this.get('account.login');\n }).property('account.name', 'account.login')\n }),\n ProfileTabsView: Travis.View.extend({\n templateName: 'profile/tabs',\n tabBinding: 'controller.tab',\n activate: function(event) {\n return this.get('controller').activate(event.target.name);\n },\n classHooks: (function() {\n if (this.get('tab') === 'hooks') {\n return 'active';\n }\n }).property('tab'),\n classUser: (function() {\n if (this.get('tab') === 'user') {\n return 'active';\n }\n }).property('tab'),\n accountBinding: 'controller.account',\n displayUser: (function() {\n return this.get('controller.account.login') === this.get('controller.user.login');\n }).property('controller.account.login', 'controller.user.login')\n }),\n HooksView: Travis.View.extend({\n templateName: 'profile/tabs/hooks',\n userBinding: 'controller.user',\n urlGithubAdmin: (function() {\n return Travis.Urls.githubAdmin(this.get('hook.slug'));\n }).property('hook.slug')\n }),\n UserView: Travis.View.extend({\n templateName: 'profile/tabs/user',\n userBinding: 'controller.user',\n gravatarUrl: (function() {\n return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=48&d=mm\";\n }).property('user.gravatarId'),\n locales: (function() {\n return [\n {\n key: null,\n name: ''\n }, {\n key: 'en',\n name: 'English'\n }, {\n key: 'ca',\n name: 'Catalan'\n }, {\n key: 'cs',\n name: 'Čeština'\n }, {\n key: 'es',\n name: 'Español'\n }, {\n key: 'fr',\n name: 'Français'\n }, {\n key: 'ja',\n name: '日本語'\n }, {\n key: 'nl',\n name: 'Nederlands'\n }, {\n key: 'nb',\n name: 'Norsk Bokmål'\n }, {\n key: 'pl',\n name: 'Polski'\n }, {\n key: {\n 'pt-BR': {\n name: 'Português brasileiro'\n }\n }\n }, {\n key: 'ru',\n name: 'Русский'\n }\n ];\n }).property(),\n saveLocale: function(event) {\n return this.get('user').updateLocale($('#locale').val());\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/profile");minispade.register('views/repo', "(function() {(function() {\nminispade.require('views/repo/list');\nminispade.require('views/repo/show');\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo");minispade.register('views/repo/list', "(function() {(function() {\n\n this.Travis.reopen({\n ReposView: Travis.View.extend({\n templateName: 'repos/list',\n toggleInfo: function(event) {\n return $('#repos').toggleClass('open');\n }\n }),\n ReposListView: Em.CollectionView.extend({\n elementId: 'repos',\n tagName: 'ul',\n emptyView: Ember.View.extend({\n template: Ember.Handlebars.compile('Loading')\n }),\n itemViewClass: Travis.View.extend({\n repoBinding: 'content',\n classNames: ['repo'],\n classNameBindings: ['color', 'selected'],\n selectedBinding: 'repo.selected',\n color: (function() {\n return Travis.Helpers.colorForResult(this.get('repo.lastBuildResult'));\n }).property('repo.lastBuildResult'),\n urlRepo: (function() {\n return Travis.Urls.repo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlLastBuild: (function() {\n return Travis.Urls.build(this.get('repo.slug'), this.get('repo.lastBuildId'));\n }).property('repo.slug', 'repo.lastBuildId')\n })\n }),\n ReposListTabsView: Travis.View.extend({\n templateName: 'repos/list/tabs',\n tabBinding: 'controller.tab',\n activate: function(event) {\n return this.get('controller').activate(event.target.name);\n },\n classRecent: (function() {\n if (this.get('tab') === 'recent') {\n return 'active';\n }\n }).property('tab'),\n classOwned: (function() {\n var classes;\n classes = [];\n if (this.get('tab') === 'owned') {\n classes.push('active');\n }\n if (Travis.app.get('currentUser')) {\n classes.push('display-inline');\n }\n return classes.join(' ');\n }).property('tab', 'Travis.app.currentUser'),\n classSearch: (function() {\n if (this.get('tab') === 'search') {\n return 'active';\n }\n }).property('tab')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/list");minispade.register('views/repo/show', "(function() {(function() {\n\n this.Travis.reopen({\n RepoView: Travis.View.extend({\n templateName: 'repos/show',\n reposBinding: 'controller.repos',\n repoBinding: 'controller.repo',\n \"class\": (function() {\n if (!this.get('repo.isComplete') && !this.get('isEmpty')) {\n return 'loading';\n }\n }).property('repo.isComplete'),\n isEmpty: (function() {\n return this.get('repos.isLoaded') && this.get('repos.length') === 0;\n }).property('repos.length'),\n urlGithub: (function() {\n return Travis.Urls.githubRepo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlGithubWatchers: (function() {\n return Travis.Urls.githubWatchers(this.get('repo.slug'));\n }).property('repo.slug'),\n urlGithubNetwork: (function() {\n return Travis.Urls.githubNetwork(this.get('repo.slug'));\n }).property('repo.slug')\n }),\n ReposEmptyView: Travis.View.extend({\n template: ''\n }),\n RepoShowTabsView: Travis.View.extend({\n templateName: 'repos/show/tabs',\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n jobBinding: 'controller.job',\n tabBinding: 'controller.tab',\n classCurrent: (function() {\n if (this.get('tab') === 'current') {\n return 'active';\n }\n }).property('tab'),\n classBuilds: (function() {\n if (this.get('tab') === 'builds') {\n return 'active';\n }\n }).property('tab'),\n classPullRequests: (function() {\n if (this.get('tab') === 'pull_requests') {\n return 'active';\n }\n }).property('tab'),\n classBranches: (function() {\n if (this.get('tab') === 'branches') {\n return 'active';\n }\n }).property('tab'),\n classEvents: (function() {\n if (this.get('tab') === 'events') {\n return 'active';\n }\n }).property('tab'),\n classBuild: (function() {\n var classes, tab;\n tab = this.get('tab');\n classes = [];\n if (tab === 'build') {\n classes.push('active');\n }\n if (tab === 'build' || tab === 'job') {\n classes.push('display-inline');\n }\n return classes.join(' ');\n }).property('tab'),\n classJob: (function() {\n if (this.get('tab') === 'job') {\n return 'active display-inline';\n }\n }).property('tab')\n }),\n RepoShowToolsView: Travis.View.extend({\n templateName: 'repos/show/tools',\n repoBinding: 'controller.repo',\n buildBinding: 'controller.build',\n jobBinding: 'controller.job',\n tabBinding: 'controller.tab',\n closeMenu: function() {\n return $('.menu').removeClass('display');\n },\n menu: function(event) {\n var element;\n this.popupCloseAll();\n element = $('#tools .menu').toggleClass('display');\n return event.stopPropagation();\n },\n requeue: function() {\n this.closeMenu();\n return this.get('build').requeue();\n },\n statusImages: function(event) {\n this.set('active', true);\n this.closeMenu();\n this.popup(event);\n return event.stopPropagation();\n },\n canPush: (function() {\n return this.get('isBuildTab') && this.get('build.isFinished') && this.get('hasPushPermissions');\n }).property('build.isFinished', 'hasPushPermissions', 'isBuildTab'),\n isBuildTab: (function() {\n return ['current', 'build', 'job'].indexOf(this.get('tab')) > -1;\n }).property('tab'),\n hasPushPermissions: (function() {\n var permissions;\n if (permissions = Travis.app.get('currentUser.permissions')) {\n return permissions.indexOf(this.get('repo.id')) > -1;\n }\n }).property('Travis.app.currentUser.permissions.length', 'repo.id'),\n branches: (function() {\n if (this.get('active')) {\n return this.get('repo.branches');\n }\n }).property('active', 'repo.branches'),\n urlRepo: (function() {\n return 'https://' + location.host + Travis.Urls.repo(this.get('repo.slug'));\n }).property('repo.slug'),\n urlStatusImage: (function() {\n return Travis.Urls.statusImage(this.get('repo.slug'), this.get('branch.commit.branch'));\n }).property('repo.slug', 'branch'),\n markdownStatusImage: (function() {\n return \"[) + \")](\" + (this.get('urlRepo')) + \")\";\n }).property('urlStatusImage'),\n textileStatusImage: (function() {\n return \"!\" + (this.get('urlStatusImage')) + \"!:\" + (this.get('urlRepo'));\n }).property('urlStatusImage'),\n rdocStatusImage: (function() {\n return \"{}[\" + (this.get('urlRepo')) + \"]\";\n }).property('urlStatusImage')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/show");minispade.register('views/sidebar', "(function() {(function() {\n\n this.Travis.reopen({\n SidebarView: Travis.View.extend({\n templateName: 'layouts/sidebar',\n DecksView: Em.View.extend({\n templateName: \"sponsors/decks\",\n controller: Travis.SponsorsController.create({\n perPage: 1\n }),\n didInsertElement: function() {\n var controller;\n controller = this.get('controller');\n if (!controller.get('content')) {\n Travis.app.get('router.sidebarController').tickables.push(controller);\n controller.set('content', Travis.Sponsor.decks());\n }\n return this._super.apply(this, arguments);\n }\n }),\n LinksView: Em.View.extend({\n templateName: \"sponsors/links\",\n controller: Travis.SponsorsController.create({\n perPage: 6\n }),\n didInsertElement: function() {\n var controller;\n controller = this.get('controller');\n if (!controller.get('content')) {\n controller.set('content', Travis.Sponsor.links());\n Travis.app.get('router.sidebarController').tickables.push(controller);\n }\n return this._super.apply(this, arguments);\n }\n }),\n WorkersView: Em.View.extend({\n templateName: 'workers/list',\n controller: Travis.WorkersController.create(),\n didInsertElement: function() {\n this.set('controller.content', Travis.Worker.find());\n return this._super.apply(this, arguments);\n }\n }),\n QueuesView: Em.View.extend({\n templateName: 'queues/list',\n controller: Em.ArrayController.create(),\n didInsertElement: function() {\n var queue, queues;\n queues = (function() {\n var _i, _len, _ref, _results;\n _ref = Travis.QUEUES;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n queue = _ref[_i];\n _results.push(Em.ArrayController.create({\n content: Travis.Job.queued(queue.name),\n id: \"queue_\" + queue.name,\n name: queue.display\n }));\n }\n return _results;\n })();\n this.set('controller.content', queues);\n return this._super.apply(this, arguments);\n }\n })\n }),\n WorkersView: Travis.View.extend({\n toggleWorkers: function(event) {\n var handle;\n handle = $(event.target).toggleClass('open');\n if (handle.hasClass('open')) {\n return $('#workers li').addClass('open');\n } else {\n return $('#workers li').removeClass('open');\n }\n }\n }),\n WorkersListView: Travis.View.extend({\n toggle: function(event) {\n return $(event.target).closest('li').toggleClass('open');\n }\n }),\n WorkersItemView: Travis.View.extend({\n display: (function() {\n var name, number, payload, repo, state;\n name = (this.get('worker.name') || '').replace('travis-', '');\n state = this.get('worker.state');\n payload = this.get('worker.payload');\n if (state === 'working' && (payload != null ? payload.repository : void 0) && (payload != null ? payload.build : void 0)) {\n repo = payload.repository.slug;\n number = ' #' + payload.build.number;\n return (\"\" + name + \": \" + repo + \" \" + number).htmlSafe();\n } else {\n return \"\" + name + \": \" + state;\n }\n }).property('worker.state')\n }),\n QueueItemView: Travis.View.extend({\n tagName: 'li'\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/sidebar");minispade.register('views/signin', "(function() {(function() {\n\n this.Travis.reopen({\n SigninView: Travis.View.extend({\n templateName: 'auth/signin',\n signingIn: (function() {\n return Travis.app.get('authState') === 'signing-in';\n }).property('Travis.app.authState')\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/signin");minispade.register('views/stats', "(function() {(function() {\n\n this.Travis.reopen({\n StatsView: Travis.View.extend({\n templateName: 'stats/show',\n didInsertElement: function() {},\n renderChart: function(config) {\n var chart;\n chart = new Highcharts.Chart(config);\n return this.fetch(config.source, function(data) {\n var stats;\n stats = (function() {\n var _i, _len, _ref, _results;\n _ref = data.stats;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n stats = _ref[_i];\n _results.push(config.map(stats));\n }\n return _results;\n })();\n return chart.series[0].setData(stats);\n });\n },\n fetch: function(url, callback) {\n return $.ajax({\n type: 'GET',\n url: url,\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n },\n success: callback\n });\n },\n CHARTS: {\n repos: {\n source: '/api/stats/repos',\n total: 0,\n map: function(data) {\n return [Date.parse(data.date), this.total += parseInt(data.count)];\n },\n chart: {\n renderTo: \"repos_stats\"\n },\n title: {\n text: \"Total Projects/Repositories\"\n },\n xAxis: {\n type: \"datetime\",\n dateTimeLabelFormats: {\n month: \"%e. %b\",\n year: \"%b\"\n }\n },\n yAxis: {\n title: {\n text: \"Count\"\n },\n min: 0\n },\n tooltip: {\n formatter: function() {\n return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" repos\";\n }\n },\n series: [\n {\n name: \"Repository Growth\",\n data: []\n }\n ]\n },\n builds: {\n source: '/api/stats/tests',\n map: function(data) {\n return [Date.parse(data.date), parseInt(data.count)];\n },\n chart: {\n renderTo: \"tests_stats\",\n type: \"column\"\n },\n title: {\n text: \"Build Count\"\n },\n subtitle: {\n text: \"last month\"\n },\n xAxis: {\n type: \"datetime\",\n dateTimeLabelFormats: {\n month: \"%e. %b\",\n year: \"%b\"\n }\n },\n yAxis: {\n title: {\n text: \"Count\"\n },\n min: 0\n },\n tooltip: {\n formatter: function() {\n return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" builds\";\n }\n },\n series: [\n {\n name: \"Total Builds\",\n data: []\n }\n ]\n }\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/stats");minispade.register('views/top', "(function() {(function() {\n\n this.Travis.reopen({\n TopView: Travis.View.extend({\n templateName: 'layouts/top',\n tabBinding: 'controller.tab',\n userBinding: 'controller.user',\n gravatarUrl: (function() {\n return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=24&d=mm\";\n }).property('user.gravatarId'),\n classHome: (function() {\n if (this.get('tab') === 'home') {\n return 'active';\n }\n }).property('tab'),\n classStats: (function() {\n if (this.get('tab') === 'stats') {\n return 'active';\n }\n }).property('tab'),\n classProfile: (function() {\n var classes;\n classes = ['profile'];\n if (this.get('tab') === 'profile') {\n classes.push('active');\n }\n classes.push(Travis.app.get('authState'));\n return classes.join(' ');\n }).property('tab', 'Travis.app.authState'),\n showProfile: function() {\n return $('#top .profile ul').show();\n },\n hideProfile: function() {\n return $('#top .profile ul').hide();\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/top");minispade.register('config/emoij', "(function() {(function() {\n\n this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=config/emoij");minispade.register('data/sponsors', "(function() {(function() {\n\n this.Travis.SPONSORS = [\n {\n type: 'platinum',\n url: \"http://www.wooga.com\",\n image: \"wooga-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://bendyworks.com\",\n image: \"bendyworks-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://cloudcontrol.com\",\n image: \"cloudcontrol-205x130.png\"\n }, {\n type: 'platinum',\n url: \"http://xing.de\",\n image: \"xing-205x130.png\"\n }, {\n type: 'gold',\n url: \"http://heroku.com\",\n image: \"heroku-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://soundcloud.com\",\n image: \"soundcloud-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://nedap.com\",\n image: \"nedap-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://mongohq.com\",\n image: \"mongohq-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://zweitag.de\",\n image: \"zweitag-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://kanbanery.com\",\n image: \"kanbanery-205x60.png\"\n }, {\n type: 'gold',\n url: \"http://ticketevolution.com\",\n image: \"ticketevolution-205x60.jpg\"\n }, {\n type: 'gold',\n url: \"http://plan.io/travis\",\n image: \"planio-205x60.png\"\n }, {\n type: 'silver',\n link: \"Cobot: The one tool to run your coworking space\"\n }, {\n type: 'silver',\n link: \"JumpstartLab: We build developers\"\n }, {\n type: 'silver',\n link: \"Evil Martians: Agile Ruby on Rails development\"\n }, {\n type: 'silver',\n link: \"Zendesk: Love your helpdesk\"\n }, {\n type: 'silver',\n link: \"Stripe: Payments for developers\"\n }, {\n type: 'silver',\n link: \"Basho: We make Riak!\"\n }, {\n type: 'silver',\n link: \"Relevance: We deliver software solutions\"\n }, {\n type: 'silver',\n link: \"Mindmatters: Software für Menschen\"\n }, {\n type: 'silver',\n link: \"Amen: The best and worst of everything\"\n }, {\n type: 'silver',\n link: \"Site5: Premium Web Hosting Solutions\"\n }, {\n type: 'silver',\n link: \"Crowd Interactive: Leading Rails consultancy in Mexico\"\n }, {\n type: 'silver',\n link: \"Atomic Object: Work with really smart people\"\n }, {\n type: 'silver',\n link: \"Codeminer: smart services for your startup\"\n }, {\n type: 'silver',\n link: \"Cloudant: grow into your data layer, not out of it\"\n }, {\n type: 'silver',\n link: \"Gidsy: Explore, organize & book unique things to do!\"\n }, {\n type: 'silver',\n link: \"5apps: Package & deploy HTML5 apps automatically\"\n }, {\n type: 'silver',\n link: \"Meltmedia: We are Interactive Superheroes\"\n }, {\n type: 'silver',\n link: \"Fingertips offers design and development services\"\n }, {\n type: 'silver',\n link: \"Engine Yard: Build epic apps, let us handle the rest\"\n }, {\n type: 'silver',\n link: \"Malwarebytes: Defeat Malware once and for all.\"\n }, {\n type: 'silver',\n link: \"Readmill: The best reading app on the iPad.\"\n }, {\n type: 'silver',\n link: \"Medidata: clinical tech improving quality of life\"\n }, {\n type: 'silver',\n link: \"ESM: Japan's best agile Ruby/Rails consultancy\"\n }, {\n type: 'silver',\n link: \"Twitter: instantly connects people everywhere\"\n }, {\n type: 'silver',\n link: \"AGiLE ANiMAL: we <3 Travis CI.\"\n }, {\n type: 'silver',\n link: \"Tupalo: Discover, review & share local businesses.\"\n }\n ];\n\n this.Travis.WORKERS = {\n \"jvm-otp1.worker.travis-ci.org\": {\n name: \"Travis Pro\",\n url: \"http://travis-ci.com\"\n },\n \"jvm-otp2.worker.travis-ci.org\": {\n name: \"Transloadit\",\n url: \"http://transloadit.com\"\n },\n \"ppp1.worker.travis-ci.org\": {\n name: \"Travis Pro\",\n url: \"http://beta.travis-ci.com\"\n },\n \"ppp2.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ppp3.worker.travis-ci.org\": {\n name: \"Alchemy CMS\",\n url: \"http://alchemy-cms.com/\"\n },\n \"rails1.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ruby1.worker.travis-ci.org\": {\n name: \"Engine Yard\",\n url: \"http://www.engineyard.com\"\n },\n \"ruby2.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n },\n \"ruby3.worker.travis-ci.org\": {\n name: \"Railslove\",\n url: \"http://railslove.de\"\n },\n \"ruby4.worker.travis-ci.org\": {\n name: \"Engine Yard\",\n url: \"http://www.engineyard.com\"\n },\n \"spree.worker.travis-ci.org\": {\n name: \"Spree\",\n url: \"http://spreecommerce.com\"\n },\n \"staging.worker.travis-ci.org\": {\n name: \"EnterpriseRails\",\n url: \"http://www.enterprise-rails.com\"\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=data/sponsors");minispade.register('ext/jquery', "(function() {(function() {\n\n $.fn.extend({\n outerHtml: function() {\n return $(this).wrap('').parent().html();\n },\n outerElement: function() {\n return $($(this).outerHtml()).empty();\n },\n flash: function() {\n return Utils.flash(this);\n },\n unflash: function() {\n return Utils.unflash(this);\n },\n filterLog: function() {\n this.deansi();\n return this.foldLog();\n },\n deansi: function() {\n return this.html(Utils.deansi(this.html()));\n },\n foldLog: function() {\n return this.html(Utils.foldLog(this.html()));\n },\n unfoldLog: function() {\n return this.html(Utils.unfoldLog(this.html()));\n },\n updateTimes: function() {\n return Utils.updateTimes(this);\n },\n activateTab: function(tab) {\n return Utils.activateTab(this, tab);\n },\n timeInWords: function() {\n return $(this).each(function() {\n return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n });\n },\n updateGithubStats: function(repo) {\n return Utils.updateGithubStats(repo, $(this));\n }\n });\n\n $.extend({\n isEmpty: function(obj) {\n if ($.isArray(obj)) {\n return !obj.length;\n } else if ($.isObject(obj)) {\n return !$.keys(obj).length;\n } else {\n return !obj;\n }\n },\n isObject: function(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n },\n keys: function(obj) {\n var keys;\n keys = [];\n $.each(obj, function(key) {\n return keys.push(key);\n });\n return keys;\n },\n values: function(obj) {\n var values;\n values = [];\n $.each(obj, function(key, value) {\n return values.push(value);\n });\n return values;\n },\n underscore: function(string) {\n return string[0].toLowerCase() + string.substring(1).replace(/([A-Z])?/g, function(match, chr) {\n if (chr) {\n return \"_\" + (chr.toUpperCase());\n } else {\n return '';\n }\n });\n },\n camelize: function(string, uppercase) {\n string = uppercase === false ? $.underscore(string) : $.capitalize(string);\n return string.replace(/_(.)?/g, function(match, chr) {\n if (chr) {\n return chr.toUpperCase();\n } else {\n return '';\n }\n });\n },\n capitalize: function(string) {\n return string[0].toUpperCase() + string.substring(1);\n },\n compact: function(object) {\n return $.grep(object, function(value) {\n return !!value;\n });\n },\n all: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return false;\n }\n i++;\n }\n return true;\n },\n detect: function(array, callback) {\n var args, i;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n return array[i];\n }\n i++;\n }\n },\n select: function(array, callback) {\n var args, i, result;\n args = Array.prototype.slice.apply(arguments);\n callback = args.pop();\n array = args.pop() || this;\n result = [];\n i = 0;\n while (i < array.length) {\n if (callback(array[i])) {\n result.push(array[i]);\n }\n i++;\n }\n return result;\n },\n slice: function(object, key) {\n var keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) > -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n only: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) !== -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n except: function(object) {\n var key, keys, result;\n keys = Array.prototype.slice.apply(arguments);\n object = (typeof keys[0] === 'object' ? keys.shift() : this);\n result = {};\n for (key in object) {\n if (keys.indexOf(key) === -1) {\n result[key] = object[key];\n }\n }\n return result;\n },\n intersect: function(array, other) {\n return array.filter(function(element) {\n return other.indexOf(element) !== -1;\n });\n },\n map: function(elems, callback, arg) {\n var i, isArray, key, length, ret, value;\n value = void 0;\n key = void 0;\n ret = [];\n i = 0;\n length = elems.length;\n isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n if (isArray) {\n while (i < length) {\n value = callback(elems[i], i, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n i++;\n }\n } else {\n for (key in elems) {\n value = callback(elems[key], key, arg);\n if (value != null) {\n ret[ret.length] = value;\n }\n }\n }\n return ret.concat.apply([], ret);\n },\n shuffle: function(array) {\n var current, tmp, top;\n array = array.slice();\n top = array.length;\n while (top && --top) {\n current = Math.floor(Math.random() * (top + 1));\n tmp = array[current];\n array[current] = array[top];\n array[top] = tmp;\n }\n return array;\n },\n truncate: function(string, length) {\n if (string.length > length) {\n return string.trim().substring(0, length) + '...';\n } else {\n return string;\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('travis/ajax', "(function() {(function() {\n\n jQuery.support.cors = true;\n\n this.Travis.ajax = Em.Object.create({\n DEFAULT_OPTIONS: {\n accepts: {\n json: 'application/vnd.travis-ci.2+json'\n }\n },\n get: function(url, callback) {\n return this.ajax(url, 'get', {\n success: callback\n });\n },\n post: function(url, data, callback) {\n return this.ajax(url, 'post', {\n data: data,\n success: callback\n });\n },\n ajax: function(url, method, options) {\n var endpoint, success, token, _base,\n _this = this;\n endpoint = Travis.config.api_endpoint || '';\n options = options || {};\n if (token = sessionStorage.getItem('travis.token')) {\n options.headers || (options.headers = {});\n (_base = options.headers)['Authorization'] || (_base['Authorization'] = \"token \" + token);\n }\n options.url = \"\" + endpoint + url;\n options.type = method;\n options.dataType = 'json';\n options.contentType = 'application/json; charset=utf-8';\n options.context = this;\n if (options.data && method !== 'GET' && method !== 'get') {\n options.data = JSON.stringify(options.data);\n }\n success = options.success || (function() {});\n options.success = function(data) {\n var _ref;\n if (((_ref = Travis.app) != null ? _ref.router : void 0) && data.flash) {\n Travis.app.router.flashController.loadFlashes(data.flash);\n }\n delete data.flash;\n return success.call(_this, data);\n };\n options.error = function(data) {\n if (data.flash) {\n return Travis.app.router.flashController.pushObject(data.flash);\n }\n };\n return $.ajax($.extend(options, Travis.ajax.DEFAULT_OPTIONS));\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ajax");minispade.register('travis/expandable_record_array', "(function() {(function() {\n\n Travis.ExpandableRecordArray = DS.RecordArray.extend({\n isLoaded: false,\n isLoading: false,\n load: function(array) {\n var observer, self;\n this.set('isLoading', true);\n self = this;\n observer = function() {\n var content;\n if (this.get('isLoaded')) {\n content = self.get('content');\n array.removeObserver('isLoaded', observer);\n array.forEach(function(record) {\n return self.pushObject(record);\n });\n self.set('isLoading', false);\n return self.set('isLoaded', true);\n }\n };\n return array.addObserver('isLoaded', observer);\n },\n pushObject: function(record) {\n var clientId, id, ids;\n ids = this.get('content');\n id = record.get('id');\n clientId = record.get('clientId');\n if (ids.contains(clientId)) {\n return;\n }\n return ids.pushObject(clientId);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/expandable_record_array");minispade.register('travis/limited_array', "(function() {(function() {\n\n Travis.LimitedArray = Em.ArrayProxy.extend({\n limit: 10,\n init: function() {\n return this._super.apply(this, arguments);\n },\n arrangedContent: (function() {\n var content;\n if (content = this.get('content')) {\n return content.slice(0, this.get('limit'));\n }\n }).property('content'),\n contentArrayDidChange: function(array, index, removedCount, addedCount) {\n var addedObjects, arrangedContent, length, limit, object, _i, _len;\n this._super.apply(this, arguments);\n if (addedCount > 0) {\n addedObjects = array.slice(index, index + addedCount);\n arrangedContent = this.get('arrangedContent');\n for (_i = 0, _len = addedObjects.length; _i < _len; _i++) {\n object = addedObjects[_i];\n arrangedContent.unshiftObject(object);\n }\n limit = this.get('limit');\n length = arrangedContent.get('length');\n if (length > limit) {\n return arrangedContent.replace(limit, length - limit);\n }\n }\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/limited_array");minispade.register('travis/location', "(function() {(function() {\n\n Travis.Location = Ember.HistoryLocation.extend({\n onUpdateURL: function(callback) {\n var guid;\n guid = Ember.guidFor(this);\n return Ember.$(window).bind('popstate.ember-location-' + guid, function(e) {\n return callback(location.pathname + location.hash);\n });\n },\n getURL: function() {\n var location;\n location = this.get('location');\n return location.pathname + location.hash;\n }\n });\n\n Ember.Location.implementations['travis'] = Travis.Location;\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/location");minispade.register('travis/log', "(function() {(function() {\n\n this.Travis.Log = {\n FOLDS: {\n schema: /(
\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*? -- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n .*<\\/p>)/g,\n migrate: /( \\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n bundle: /( \\$ bundle install.*<\\/p>\\n( (Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n| <\\/p>\\n)*)/g,\n exec: /( [\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n },\n filter: function(log, path) {\n log = this.escape(log);\n log = this.deansi(log);\n log = log.replace(/\\r/g, '');\n log = this.number(log, path);\n log = this.fold(log);\n log = log.replace(/\\n/g, '');\n return log;\n },\n stripPaths: function(log) {\n return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n },\n escape: function(log) {\n return Handlebars.Utils.escapeExpression(log);\n },\n escapeRuby: function(log) {\n return log.replace(/#<(\\w+.*?)>/, '#<$1>');\n },\n number: function(log, path) {\n var result;\n path = \"\" + path + \"/\";\n result = '';\n $.each(log.trim().split('\\n'), function(ix, line) {\n var number, pathWithNumber;\n number = ix + 1;\n pathWithNumber = \"\" + path + \"#L\" + number;\n return result += ' %@%@
\\n'.fmt(pathWithNumber, number, number, number, line);\n });\n return result.trim();\n },\n deansi: function(log) {\n var ansi, text;\n log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/gm, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, \"\");\n ansi = ansiparse(log);\n text = '';\n ansi.forEach(function(part) {\n var classes;\n classes = [];\n part.foreground && classes.push(part.foreground);\n part.background && classes.push('bg-' + part.background);\n part.bold && classes.push('bold');\n part.italic && classes.push('italic');\n return text += (classes.length ? '' + part.text + '' : part.text);\n });\n return text.replace(/\\033/g, '');\n },\n fold: function(log) {\n log = this.unfold(log);\n $.each(Travis.Log.FOLDS, function(name, pattern) {\n return log = log.replace(pattern, function() {\n return '' + arguments[1].trim() + '';\n });\n });\n return log;\n },\n unfold: function(log) {\n return log.replace(/([\\s\\S]*?)<\\/div>/g, '$1\\n');\n },\n location: function() {\n return window.location.hash;\n }\n };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n this.Travis.Model = DS.Model.extend({\n primaryKey: 'id',\n id: DS.attr('number'),\n init: function() {\n this.loadedAttributes = [];\n return this._super.apply(this, arguments);\n },\n get: function(name) {\n if (this.constructor.isAttribute(name) && this.get('incomplete') && !this.isAttributeLoaded(name)) {\n this.loadTheRest();\n }\n return this._super.apply(this, arguments);\n },\n refresh: function() {\n var id, store;\n if (id = this.get('id')) {\n store = this.get('store');\n return store.adapter.find(store, this.constructor, id);\n }\n },\n update: function(attrs) {\n var _this = this;\n $.each(attrs, function(key, value) {\n if (key !== 'id') {\n return _this.set(key, value);\n }\n });\n return this;\n },\n isAttributeLoaded: function(name) {\n return this.loadedAttributes.contains(name);\n },\n isComplete: (function() {\n if (this.get('incomplete')) {\n this.loadTheRest();\n return false;\n } else {\n this.set('isCompleting', false);\n return this.get('isLoaded');\n }\n }).property('incomplete', 'isLoaded'),\n loadTheRest: function() {\n if (this.get('isCompleting')) {\n return;\n }\n this.set('isCompleting', true);\n return this.refresh();\n },\n select: function() {\n return this.constructor.select(this.get('id'));\n }\n });\n\n this.Travis.Model.reopenClass({\n find: function() {\n if (arguments.length === 0) {\n return Travis.app.store.findAll(this);\n } else {\n return this._super.apply(this, arguments);\n }\n },\n filter: function(callback) {\n return Travis.app.store.filter(this, callback);\n },\n load: function(attrs) {\n return Travis.app.store.load(this, attrs);\n },\n select: function(id) {\n return this.find().forEach(function(record) {\n return record.set('selected', record.get('id') === id);\n });\n },\n buildURL: function(suffix) {\n var base, url;\n base = this.url || this.pluralName();\n Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n url = [base];\n if (suffix !== void 0) {\n url.push(suffix);\n }\n return url.join('/');\n },\n singularName: function() {\n var name, parts;\n parts = this.toString().split('.');\n name = parts[parts.length - 1];\n return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n },\n pluralName: function() {\n return Travis.app.store.adapter.pluralize(this.singularName());\n },\n isAttribute: function(name) {\n if (!this.attributesSaved) {\n this._saveAttributes();\n }\n return this.cachedAttributes.contains(name);\n },\n _saveAttributes: function() {\n var cachedAttributes;\n this.attributesSaved = true;\n cachedAttributes = [];\n this.eachComputedProperty(function(name, meta) {\n if (meta.isAttribute) {\n return cachedAttributes.pushObject(name);\n }\n });\n return this.cachedAttributes = cachedAttributes;\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n this.Travis.Ticker = Ember.Object.extend({\n init: function() {\n if (this.get('interval') !== -1) {\n return this.schedule();\n }\n },\n tick: function() {\n var context, target, targets, _i, _len;\n context = this.get('context');\n targets = this.get('targets') || [this.get('target')];\n for (_i = 0, _len = targets.length; _i < _len; _i++) {\n target = targets[_i];\n if (context) {\n target = context.get(target);\n }\n if (target) {\n target.tick();\n }\n }\n return this.schedule();\n },\n schedule: function() {\n var _this = this;\n return Ember.run.later((function() {\n return _this.tick();\n }), this.get('interval') || Travis.app.TICK_INTERVAL);\n }\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('travis', "(function() {(function() {\nminispade.require('ext/jquery');\nminispade.require('ext/ember/namespace');\n\n this.Travis = Em.Namespace.create({\n config: {\n api_endpoint: $('meta[rel=\"travis.api_endpoint\"]').attr('href'),\n pusher_key: $('meta[name=\"travis.pusher_key\"]').attr('value')\n },\n CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'jdk', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'],\n ROUTES: {\n 'profile/:login/me': ['profile', 'user'],\n 'profile/:login': ['profile', 'hooks'],\n 'profile': ['profile', 'hooks'],\n 'stats': ['stats', 'show'],\n ':owner/:name/jobs/:id/:line': ['home', 'job'],\n ':owner/:name/jobs/:id': ['home', 'job'],\n ':owner/:name/builds/:id': ['home', 'build'],\n ':owner/:name/builds': ['home', 'builds'],\n ':owner/:name/pull_requests': ['home', 'pullRequests'],\n ':owner/:name/branches': ['home', 'branches'],\n ':owner/:name': ['home', 'current'],\n '': ['home', 'index'],\n '#': ['home', 'index']\n },\n QUEUES: [\n {\n name: 'common',\n display: 'Common'\n }, {\n name: 'php',\n display: 'PHP, Perl and Python'\n }, {\n name: 'node_js',\n display: 'Node.js'\n }, {\n name: 'jvmotp',\n display: 'JVM and Erlang'\n }, {\n name: 'rails',\n display: 'Rails'\n }, {\n name: 'spree',\n display: 'Spree'\n }\n ],\n INTERVALS: {\n sponsors: -1,\n times: -1,\n updateTimes: 1000\n },\n setLocale: function(locale) {\n if (!locale) {\n return;\n }\n I18n.locale = locale;\n return localStorage.setItem('travis.locale', locale);\n },\n run: function(attrs) {\n if (location.hash.slice(0, 2) === '#!') {\n location.href = location.href.replace('#!/', '');\n }\n this.setLocale(localStorage.getItem('travis.locale'));\n return Ember.run.next(this, function() {\n var app,\n _this = this;\n app = Travis.App.create(attrs || {});\n $.each(Travis, function(key, value) {\n if (value && value.isClass && key !== 'constructor') {\n return app[key] = value;\n }\n });\n this.app = app;\n this.store = app.store;\n return $(function() {\n return app.initialize();\n });\n });\n }\n });\nminispade.require('travis/ajax');\nminispade.require('app');\n\n}).call(this);\n\n})();\n//@ sourceURL=travis");minispade.register('templates', "(function() {\nEmber.TEMPLATES['application'] = Ember.Handlebars.compile(\"{{outlet}}\\n\");\n\nEmber.TEMPLATES['auth/signin'] = Ember.Handlebars.compile(\"{{#if view.signingIn}}\\nSigning in ...
\\n\\n Trying to authenticate with GitHub.\\n
\\n{{else}}\\nSign in
\\n\\n Please sign in with GitHub.\\n
\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/list'] = Ember.Handlebars.compile(\"{{#if builds.isLoaded}}\\n\\n \\n
\\n\\n \\n \\n\\n \\n {{#each build in builds}}\\n {{#view Travis.BuildsItemView contextBinding=\\\"build\\\"}}\\n{{t builds.name}} \\n{{t builds.commit}} \\n{{t builds.message}} \\n{{t builds.duration}} \\n{{t builds.finished_at}} \\n\\n \\n {{#if id}}\\n \\n {{number}}\\n \\n {{/if}}\\n \\n\\n \\n {{formatCommit commit}}\\n \\n \\n \\n\\n {{formatDuration duration}}\\n \\n\\n {{formatTime finishedAt}}\\n \\n {{/view}}\\n {{/each}}\\n \\n\\n {{view view.ShowMoreButton}}\\n
\\n{{else}}\\nLoading\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n {{#if loading}}\\n Loading\\n {{else}}\\n\\n
\\n\\n {{#if build.isMatrix}}\\n {{view Travis.JobsView jobsBinding=\\\"build.requiredJobs\\\" required=\\\"true\\\"}}\\n {{view Travis.JobsView jobsBinding=\\\"build.allowedFailureJobs\\\"}}\\n {{else}}\\n {{view Travis.LogView contextBinding=\\\"build.jobs.firstObject\\\"}}\\n {{/if}}\\n {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['events/list'] = Ember.Handlebars.compile(\"{{#if view.events.isLoaded}}\\n\\n\\n\\n- {{t builds.name}}
\\n- \\n \\n {{#if build.id}}\\n {{build.number}}\\n {{/if}}\\n
\\n- {{t builds.finished_at}}
\\n- {{formatTime build.finishedAt}}
\\n- {{t builds.duration}}
\\n- {{formatDuration build.duration}}
\\n\\n\\n\\n- {{t builds.commit}}
\\n- {{formatCommit build.commit}}
\\n {{#if commit.compareUrl}}\\n- {{t builds.compare}}
\\n- {{pathFrom build.commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n- {{t builds.author}}
\\n \\n {{/if}}\\n {{#if commit.committerName}}\\n- {{t builds.committer}}
\\n- {{build.commit.committerName}}
\\n {{/if}}\\n- {{t builds.message}}
\\n \\n\\n {{#unless isMatrix}}\\n- {{t builds.config}}
\\n- {{formatConfig build.config}}
\\n {{/unless}}\\n\\n \\n
\\n{{else}}\\n\\n \\n \\n\\n \\n {{#each event in view.events}}\\n {{#view Travis.EventsItemView contextBinding=\\\"event\\\"}}\\nTime \\nEvent \\nResult \\nMessage \\n\\n {{formatTime createdAt}}\\n \\n\\n {{event.event_}}\\n \\n\\n {{event.result}}\\n \\n \\n {{/view}}\\n {{/each}}\\n \\nLoading\\n{{/if}}\\n\\n\");\n\nEmber.TEMPLATES['jobs/list'] = Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n {{#if view.required}}\\n\\n
\\n {{t jobs.build_matrix}}\\n \\n {{else}}\\n\\n
\\n\\n {{#unless view.required}}\\n\\n {{t jobs.allowed_failures}}\\n \\n \\n {{/if}}\\n \\n\\n {{#each key in view.build.configKeys}}\\n \\n \\n \\n {{#each job in view.jobs}}\\n {{#view Travis.JobsItemView contextBinding=\\\"job\\\"}}\\n{{key}} \\n {{/each}}\\n\\n \\n {{#if job.id}}\\n {{number}}\\n {{/if}}\\n \\n\\n {{formatDuration duration}}\\n \\n\\n {{formatTime finishedAt}}\\n \\n {{#each value in configValues}}\\n{{value}} \\n {{/each}}\\n {{/view}}\\n {{/each}}\\n \\n\\n \\n\\n {{/unless}}\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/log'] = Ember.Handlebars.compile(\"{{view.logSubscriber}}\\n\\n{{#if view.job.log.isLoaded}}\\n{{t \\\"jobs.allowed_failures\\\"}}
\\n\\n Allowed Failures are items in your build matrix that are allowed to\\n fail without causing the entire build to be shown as failed.\\n
\\n\\n You can define allowed failures in the build matrix as follows:\\n
\\nmatrix:\\n allow_failures:\\n - rvm: ruby-head\\n\\n This lets you add in experimental and preparatory builds to test against versions or\\n configurations that you are not ready to officially support.\\n
\\n\\n \\n \\n {{{formatLog log.body repo=\\\"repository\\\" item=\\\"parentView.currentItem\\\"}}}\\n\\n {{#if sponsor.name}}\\n\\n {{t builds.messages.sponsored_by}}\\n {{sponsor.name}}\\n
\\n {{/if}}\\n\\n To top\\n{{else}}\\n\\n Loading\\n\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n {{#if job.isComplete}}\\n\\n\\n {{else}}\\n\\n
\\n\\n {{view Travis.LogView contextBinding=\\\"job\\\"}}}\\n\\n\\n\\n- Job
\\n- \\n \\n {{#if job.id}}\\n {{job.number}}\\n {{/if}}\\n
\\n- {{t jobs.finished_at}}
\\n- {{formatTime job.finishedAt}}
\\n- {{t jobs.duration}}
\\n- {{formatDuration job.duration}}
\\n\\n\\n\\n- {{t jobs.commit}}
\\n- {{formatCommit commit}}
\\n {{#if commit.compareUrl}}\\n- {{t jobs.compare}}
\\n- {{pathFrom commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n- {{t jobs.author}}
\\n \\n {{/if}}\\n {{#if commit.committerName}}\\n- {{t jobs.committer}}
\\n- {{commit.committerName}}
\\n {{/if}}\\n- {{t jobs.message}}
\\n \\n- {{t jobs.config}}
\\n- {{formatConfig job.config}}
\\n\\n Loading\\n\\n {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['layouts/flash'] = Ember.Handlebars.compile(\"{{#each flash in controller}}\\n {{#view Travis.FlashItemView flashBinding=\\\"flash\\\"}}\\n{{{flash.message}}}
\\n \\n {{/view}}\\n{{/each}}\\n\");\n\nEmber.TEMPLATES['layouts/home'] = Ember.Handlebars.compile(\"\\n {{outlet top}}\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/profile'] = Ember.Handlebars.compile(\"\\n {{outlet left}}\\n\\n\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\n\\n\\n {{outlet right}}\\n\\n\\n {{outlet top}}\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/sidebar'] = Ember.Handlebars.compile(\"\\n\\n\\n {{outlet left}}\\n\\n\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\n\\n\\n \\n\\n\\n\\n \\n\\n\\n\\n\\nGetting started?
\\n\\n Please read our guide.\\n It will only take a few minutes :)\\n
\\n\\n You can find detailled docs on our about site.\\n
\\n\\n If you need help please don’t hesitate to join\\n #travis on irc.freenode.net\\n or our mailinglist.\\n
\\n\\n \\n\\n\\n{{view view.DecksView}}\\n{{view view.WorkersView}}\\n{{view view.QueuesView}}\\n{{view view.LinksView}}\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/simple'] = Ember.Handlebars.compile(\"{{t layouts.about.join}}
\\n\\n
\\n- {{t layouts.about.repository}}: Github
\\n- {{t layouts.about.twitter}}: @travisci
\\n- {{t layouts.about.mailing_list}}: travis-ci
\\n- irc.freenode.net#travis
\\n\\n {{outlet top}}\\n\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['layouts/top'] = Ember.Handlebars.compile(\"\\n\\n {{outlet flash}}\\n {{outlet main}}\\n\\nTravis
\\n\\n\\n \\n\");\n\nEmber.TEMPLATES['profile/accounts'] = Ember.Handlebars.compile(\"\\n\\n\\n\\n
\\n\\n- \\n
\\nAccounts
\\n\\n {{#collection Travis.AccountsListView contentBinding=\\\"controller\\\"}}\\n {{view.name}}\\n\\n\");\n\nEmber.TEMPLATES['profile/show'] = Ember.Handlebars.compile(\"\\n Repositories:\\n {{view.account.reposCount}}\\n
\\n\\n {{/collection}}\\n{{view.name}}
\\n\\n{{view Travis.ProfileTabsView}}\\n\\n\\n {{outlet pane}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs'] = Ember.Handlebars.compile(\"\\n
\\n\");\n\nEmber.TEMPLATES['profile/tabs/hooks'] = Ember.Handlebars.compile(\"- \\n
\\n {{#if view.displayUser}}\\n\\n Repositories\\n
\\n- \\n
\\n {{/if}}\\n\\n Profile\\n
\\n\\n {{{t profiles.show.message.your_repos}}}\\n
\\n\\n{{#if hooks.isLoaded}}\\n {{#if user.isSyncing}}\\n \\n {{else}}\\n \\n\\n\\n {{#each hook in hooks}}\\n
\\n {{/if}}\\n{{else}}\\n \\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs/user'] = Ember.Handlebars.compile(\"- \\n {{hook.slug}}\\n
\\n {{else}}\\n{{hook.description}}
\\n\\n \\n- \\n You do not seem to have any repositories that we could sync.\\n
\\n {{/each}}\\n\\n\\n
\\n
\\n\\n\\n\\n\\n\");\n\nEmber.TEMPLATES['queues/list'] = Ember.Handlebars.compile(\"- \\n {{t profiles.show.github}}:\\n
\\n- \\n {{user.login}}\\n
\\n- \\n {{t profiles.show.email}}:\\n
\\n- \\n {{user.email}}\\n
\\n- \\n {{t profiles.show.token}}:\\n
\\n- \\n {{user.token}}\\n
\\n\\n{{#each queue in controller}}\\n
\\n\");\n\nEmber.TEMPLATES['repos/list'] = Ember.Handlebars.compile(\"- \\n
\\n{{/each}}\\n{{t queue}}: {{queue.name}}
\\n\\n {{#each job in queue}}\\n {{#view Travis.QueueItemView jobBinding=\\\"job\\\"}}\\n \\n \\n {{job.repo.slug}}\\n \\n #{{job.number}}\\n \\n {{/view}}\\n {{else}}\\n {{t no_job}}\\n {{/each}}\\n
\\n\\n {{view Ember.TextField valueBinding=\\\"controller.search\\\"}}\\n\\n\\n{{view Travis.ReposListTabsView}}\\n\\n\\n\\n\\n {{#collection Travis.ReposListView contentBinding=\\\"controller\\\"}}\\n {{#with view.repo}}\\n\\n\");\n\nEmber.TEMPLATES['repos/list/tabs'] = Ember.Handlebars.compile(\"\\n \\n {{#if slug}}\\n {{slug}}\\n {{/if}}\\n\\n {{#if lastBuildId}}\\n {{lastBuildNumber}}\\n {{/if}}\\n\\n\\n {{t repositories.duration}}:\\n {{formatDuration lastBuildDuration}},\\n {{t repositories.finished_at}}:\\n {{formatTime lastBuildFinishedAt}}\\n
\\n\\n\\n\\n {{#if description}}\\n\\n\\n {{/if}}\\n {{/with}}\\n {{else}}\\n \\n {{/collection}}\\n{{description}}
\\n\\n
\\n\\n\");\n\nEmber.TEMPLATES['repos/show'] = Ember.Handlebars.compile(\"- \\n
\\n{{t layouts.application.recent}}
\\n- \\n
\\n{{t layouts.application.my_repositories}}
\\n- \\n
\\n{{t layouts.application.search}}
\\n\\n {{#if view.isEmpty}}\\n {{view Travis.ReposEmptyView}}\\n {{else}}\\n {{#if view.repo.isComplete}}\\n {{#with view.repo}}\\n\\n\\n\");\n\nEmber.TEMPLATES['repos/show/tabs'] = Ember.Handlebars.compile(\"\\n {{slug}}\\n
\\n\\n{{description}}
\\n\\n\\n
\\n\\n {{view Travis.RepoShowTabsView}}\\n {{view Travis.RepoShowToolsView}}\\n {{/with}}\\n\\n {{else}}\\n Loading\\n {{/if}}\\n\\n- \\n {{lastBuildLanguage}}\\n
\\n- \\n \\n {{stats.watchers}}\\n \\n
\\n- \\n \\n {{stats.forks}}\\n \\n
\\n\\n {{outlet pane}}\\n\\n {{/if}}\\n\\n
\\n\");\n\nEmber.TEMPLATES['repos/show/tools'] = Ember.Handlebars.compile(\"\\n\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.current}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.build_history}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.pull_requests}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n {{t repositories.tabs.branches}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.repo.slug}}\\n \\n Events\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.build.id}}\\n \\n {{t repositories.tabs.build}} #{{view.build.number}}\\n \\n {{/if}}\\n
\\n- \\n
\\n\\n {{#if view.job.id}}\\n \\n {{t repositories.tabs.job}} #{{view.job.number}}\\n \\n {{/if}}\\n
\\n\\n \\n\\n\");\n\nEmber.TEMPLATES['sponsors/decks'] = Ember.Handlebars.compile(\"\\n \\n {{#if view.branches.isLoaded}}\\n {{view Ember.Select contentBinding=\\\"view.branches\\\" selectionBinding=\\\"view.branch\\\" optionLabelPath=\\\"content.commit.branch\\\" optionValuePath=\\\"content.commit.branch\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n\\n \\n \\n
\\n{{t layouts.application.sponsers}}
\\n\\n\\n {{#each deck in controller}}\\n {{#each deck}}\\n
\\n\\n- \\n \\n
\\n {{/each}}\\n {{/each}}\\n\\n \\n
\\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n
\\n\");\n\nEmber.TEMPLATES['sponsors/links'] = Ember.Handlebars.compile(\"\\n\\n\\n\");\n\nEmber.TEMPLATES['stats/show'] = Ember.Handlebars.compile(\"{{t layouts.application.sponsers}}
\\n\\n\\n {{#each controller}}\\n
\\n\\n \\n- \\n {{{link}}}\\n
\\n {{/each}}\\nSorry
\\nStatistics are disabled for now.
\\nWe're looking into a solution. If you want to help, please ping us!
\\n\");\n\nEmber.TEMPLATES['workers/list'] = Ember.Handlebars.compile(\"{{#view Travis.WorkersView}}\\n\\n {{t workers}}\\n \\n
\\n\\n {{#each group in controller.groups}}\\n {{#view Travis.WorkersListView}}\\n
\\n{{/view}}\\n\");\n\n})();\n//@ sourceURL=templates");minispade.register('config/locales', "(function() {window.I18n = window.I18n || {}\nwindow.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"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\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors →\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do not consider this a stable service. We're still far from that! More info here.\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"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\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our Getting Started guide.\\n It will only take a couple of minutes.\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"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\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores →\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor no considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información aquí.\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Activa los interruptores para inicial el Travis service hook para tus proyectos, y haz un Push en GitHub.- \\n
\\n {{/view}}\\n {{else}}\\n No workers\\n {{/each}}\\n\\n {{group.firstObject.host}}\\n
\\n\\n {{#each worker in group}}\\n {{#view Travis.WorkersItemView workerBinding=\\\"worker\\\"}}\\n
\\n- \\n \\n {{#if worker.isWorking}}\\n {{#if worker.job_id}}\\n \\n {{view.display}}\\n \\n {{/if}}\\n {{else}}\\n {{view.display}}\\n {{/if}}\\n
\\n {{/view}}\\n {{/each}}\\n
\\n Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra Guía de Inicio .\\n Solo tomará unos pocos minutos.\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"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\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors →\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez pas ce service comme étant stable. Nous sommes loin de ça! Plus d'infos ici.\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.
\\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre guide de démarrage.\\n Cela ne vous prendra que quelques minutes.\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくはこちら\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る →\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずはTravisのはじめ方を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"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\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er ikke en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du her.\"},\"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\"}},\"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.
\\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les kom-i-gang-veivisereren vår. Det tar bare et par minutter.\"},\"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\"},\"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\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"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\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service niet te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info hier.\"},\"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\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"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
\\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze startersgids lezen.\\\\n Het zal maar enkele minuten van uw tijd vergen.\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"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\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"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\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów →\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę nie traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz tutaj.\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"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\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\" Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.
\\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz Przewodnik .\\n Zajmie ci to tylko kilka minut.\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"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\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"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\"},\"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, não considere isto um serviço estável. Estamos muito longe disso! Mais informações aqui.\"},\"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\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"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.
Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso Guia de início. Só leva alguns minutinhos.\"},\"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\"},\"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\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"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\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"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\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, не считайте данный сервис стабильным. Мы еще очень далеки от стабильности! Подробности\"},\"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\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.
\\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите Руководство для быстрого старта. Это займет всего несколько минут.\"},\"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\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n context: null,\n options: null,\n property: null,\n // paths of the property that are also observed\n propertyPaths: [],\n\n value: Ember.K,\n\n valueForRender: function() {\n var value = this.value(Ember.get(this.context, this.property), this.options);\n if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n return value;\n },\n\n render: function(buffer) {\n buffer.push(this.valueForRender());\n },\n\n valueDidChange: function() {\n if (this.morph.isRemoved()) { return; }\n this.morph.html(this.valueForRender());\n },\n\n didInsertElement: function() {\n this.valueDidChange();\n },\n\n init: function() {\n this._super();\n Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n },\n\n destroy: function() {\n Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n this.get('propertyPaths').forEach(function(propName) {\n this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n }, this);\n this._super();\n }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n var propertyPaths = Array.prototype.slice.call(arguments, 2);\n Ember.Handlebars.registerHelper(name, function(property, options) {\n var data = options.data,\n view = data.view,\n ctx = this;\n\n var bindView = view.createChildView(BoundHelperView, {\n property: property,\n propertyPaths: propertyPaths,\n context: ctx,\n options: options.hash,\n value: func\n });\n\n view.appendChild(bindView);\n });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper");minispade.register('ext/ember/namespace', "(function() {Em.Namespace.reopen = Em.Namespace.reopenClass\n\n\n\n})();\n//@ sourceURL=ext/ember/namespace"); \ No newline at end of file diff --git a/public/version b/public/version index a5d955ee..e0808036 100644 --- a/public/version +++ b/public/version @@ -1 +1 @@ -7ad8c605 \ No newline at end of file +bdcb74b8 \ No newline at end of file