travis-web/assets/scripts/travis.coffee
Piotr Sarnacki 5065bb5739 Subscribe to pusher channels only when entering the MainRoute
We don't want to subscribe if we're at any other routes, because there is no
data there. The main target is to avoid all of the notifications from a common
channel if we're on the /dashboard route.
2015-01-15 10:36:35 +01:00

232 lines
6.9 KiB
CoffeeScript

require 'ext/jquery'
require 'ext/ember/namespace'
require 'ext/ember/computed'
require 'app'
window.ENV ||= {}
window.ENV.RAISE_ON_DEPRECATION = true
if window.history.state == undefined
window.history.state = {}
oldPushState = window.history.pushState
window.history.pushState = (state, title, href) ->
window.history.state = state
oldPushState.apply this, arguments
oldReplaceState = window.history.replaceState
window.history.replaceState = (state, title, href) ->
window.history.state = state
oldReplaceState.apply this, arguments
# TODO: how can I put it in Travis namespace and use immediately?
Storage = Em.Object.extend
init: ->
@set('storage', {})
key: (key) ->
"__#{key.replace('.', '__')}"
getItem: (k) ->
return @get("storage.#{@key(k)}")
setItem: (k,v) ->
@set("storage.#{@key(k)}", v)
removeItem: (k) ->
@setItem(k, null)
clear: ->
@set('storage', {})
Ember.RecordArray.reopen
# TODO: ember.js changed a way ArrayProxies behave, so that check for content is done
# in _replace method. I should not be overriding it, because it's private, but
# there is no easy other way to do it at this point
_replace: (index, removedCount, records) ->
# in Travis it's sometimes the case that we add new records to RecordArrays
# from pusher before its content has loaded from an ajax query. In order to handle
# this case nicer I'm extending record array to buffer those records and push them
# to content when it's available
@bufferedRecords = [] unless @bufferedRecords
if !@get('content')
for record in records
@bufferedRecords.pushObject(record) unless @bufferedRecords.contains(record)
records = []
# call super only if there's anything more to add
if removedCount || records.length
@_super(index, removedCount, records)
contentDidChange: (->
if (content = @get('content')) && @bufferedRecords && @bufferedRecords.length
for record in @bufferedRecords
content.pushObject(record) unless content.contains(record)
@bufferedRecords = []
).observes('content')
window.Travis = TravisApplication.create(
LOG_ACTIVE_GENERATION: true,
LOG_MODULE_RESOLVER: true,
LOG_TRANSITIONS: true,
LOG_TRANSITIONS_INTERNAL: true,
LOG_VIEW_LOOKUPS: true
)
Travis.deferReadiness()
pages_endpoint = $('meta[rel="travis.pages_endpoint"]').attr('href')
billing_endpoint = $('meta[rel="travis.billing_endpoint"]').attr('href')
customer_io_site_id = $('meta[name="travis.customer_io_site_id"]').attr('value')
setupCustomerio(customer_io_site_id) if customer_io_site_id
$.extend Travis,
run: ->
Travis.advanceReadiness() # bc, remove once merged to master
config:
syncingPageRedirectionTime: 5000
api_endpoint: $('meta[rel="travis.api_endpoint"]').attr('href')
source_endpoint: $('meta[rel="travis.source_endpoint"]').attr('href')
pusher_key: $('meta[name="travis.pusher_key"]').attr('value')
pusher_host: $('meta[name="travis.pusher_host"]').attr('value')
ga_code: $('meta[name="travis.ga_code"]').attr('value')
code_climate: $('meta[name="travis.code_climate"]').attr('value')
ssh_key_enabled: $('meta[name="travis.ssh_key_enabled"]').attr('value') == 'true'
code_climate_url: $('meta[name="travis.code_climate_url"]').attr('value')
caches_enabled: $('meta[name="travis.caches_enabled"]').attr('value') == 'true'
show_repos_hint: 'private'
avatar_default_url: 'https://travis-ci.org/images/ui/default-avatar.png'
pusher_log_fallback: $('meta[name="travis.pusher_log_fallback"]').attr('value') == 'true'
pro: $('meta[name="travis.pro"]').attr('value') == 'true'
pages_endpoint: pages_endpoint || billing_endpoint
billing_endpoint: billing_endpoint
url_legal: "#{billing_endpoint}/pages/legal"
url_imprint: "#{billing_endpoint}/pages/imprint"
url_security: "#{billing_endpoint}/pages/security"
url_terms: "#{billing_endpoint}/pages/terms"
customer_io_site_id: customer_io_site_id
CONFIG_KEYS_MAP: {
go: 'Go'
rvm: 'Ruby'
gemfile: 'Gemfile'
env: 'ENV'
jdk: 'JDK'
otp_release: 'OTP Release'
php: 'PHP'
node_js: 'Node.js'
perl: 'Perl'
python: 'Python'
scala: 'Scala'
compiler: 'Compiler'
ghc: 'GHC'
os: 'OS'
ruby: 'Ruby'
xcode_sdk: 'Xcode SDK'
xcode_scheme:'Xcode Scheme'
d: 'D'
julia: 'Julia'
csharp: 'C#'
}
QUEUES: [
{ name: 'linux', display: 'Linux' }
{ name: 'mac_osx', display: 'Mac and OSX' }
]
INTERVALS: { times: -1, updateTimes: 1000 }
storage: (->
storage = null
try
storage = window.localStorage || throw('no storage')
catch err
storage = Storage.create()
storage
)()
sessionStorage: (->
storage = null
try
# firefox will not throw error on access for sessionStorage var,
# you need to actually get something from session
sessionStorage.getItem('foo')
storage = sessionStorage
catch err
storage = Storage.create()
storage
)()
Travis.initializer
name: 'googleAnalytics'
initialize: (container) ->
if Travis.config.ga_code
window._gaq = []
_gaq.push(['_setAccount', Travis.config.ga_code])
ga = document.createElement('script')
ga.type = 'text/javascript'
ga.async = true
ga.src = 'https://ssl.google-analytics.com/ga.js'
s = document.getElementsByTagName('script')[0]
s.parentNode.insertBefore(ga, s)
Travis.initializer
name: 'inject-config'
initialize: (container, application) ->
application.register 'config:main', Travis.config, { instantiate: false }
application.inject('controller', 'config', 'config:main')
application.inject('route', 'config', 'config:main')
Travis.initializer
name: 'inject-pusher'
initialize: (container, application) ->
application.register 'pusher:main', Travis.pusher, { instantiate: false }
application.inject('route', 'pusher', 'pusher:main')
Travis.Router.reopen
didTransition: ->
@_super.apply @, arguments
if Travis.config.ga_code
_gaq.push ['_trackPageview', location.pathname]
Ember.LinkView.reopen
loadingClass: 'loading_link'
if charm_key = $('meta[name="travis.charm_key"]').attr('value')
@__CHARM =
key: $('meta[name="travis.charm_key"]').attr('value')
url: "https://charmscout.herokuapp.com/feedback"
$('head').append $('<script src="https://charmscout.herokuapp.com/charmeur.js?v=2" async defer></script>')
require 'travis/ajax'
Travis.ajax.pro = Travis.config.pro
require 'travis/adapter'
require 'travis/adapters/env_vars'
require 'travis/adapters/ssh_key'
require 'routes'
require 'auth'
require 'controllers'
require 'helpers'
require 'models'
require 'pusher'
require 'slider'
require 'tailing'
require 'templates'
require 'views'
require 'components'
require 'travis/instrumentation'
Travis.setup()