
I found the commit that caused the bug that caused me to do the last
revert. I'm therefore reverting the previous revert and I will be
committing a revert that reverts the commit that introduced the bug. See
next commit.
This reverts commit db2d38a7af
.
330 lines
8.5 KiB
CoffeeScript
330 lines
8.5 KiB
CoffeeScript
require 'ext/ember/bound_helper'
|
|
|
|
safe = (string) ->
|
|
new Handlebars.SafeString(string)
|
|
|
|
Travis.Tab = Ember.Object.extend
|
|
show: ->
|
|
@get('tabs').forEach( (t) -> t.hide() )
|
|
@set('visible', true)
|
|
|
|
hide: ->
|
|
@set('visible', false)
|
|
|
|
Travis.TabsView = Ember.View.extend
|
|
tabBinding: 'controller.tab'
|
|
tabsBinding: 'controller.tabs'
|
|
|
|
tabDidChange: (->
|
|
@activateTab(@get('tab'))
|
|
).observes('tab')
|
|
|
|
tabsDidChange: (->
|
|
tab = @get('tab')
|
|
if tab
|
|
@activateTab(tab)
|
|
else if @get('tabs.length')
|
|
@activateTab(@get('tabs.firstObject.id'))
|
|
).observes('tabs.length', 'tabs')
|
|
|
|
activateTab: (tabId) ->
|
|
tab = @get('tabs').findBy('id', tabId)
|
|
|
|
return unless tab
|
|
|
|
tab.show() unless tab.get('visible')
|
|
|
|
# TODO: remove hardcoded link
|
|
layout: Ember.Handlebars.compile(
|
|
'<ul class="tabs">' +
|
|
' {{#each tab in tabs}}' +
|
|
' <li {{bindAttr class="tab.visible:active"}}>' +
|
|
' <h5>{{#linkTo "repo.settings.tab" tab.id}}{{tab.name}}{{/linkTo}}</h5>' +
|
|
' </li>' +
|
|
' {{/each}}' +
|
|
'</ul>' +
|
|
'{{yield}}')
|
|
|
|
Travis.TabView = Ember.View.extend
|
|
attributeBindings: ['style']
|
|
|
|
style: (->
|
|
if !@get('tab.visible')
|
|
'display: none'
|
|
).property('tab.visible')
|
|
|
|
Ember.Handlebars.registerHelper('travis-tab', (id, name, options) ->
|
|
controller = this
|
|
controller.set('tabs', []) unless controller.get('tabs')
|
|
|
|
tab = Travis.Tab.create(id: id, name: name, tabs: controller.get('tabs'))
|
|
|
|
view = Travis.TabView.create(
|
|
controller: this
|
|
tab: tab
|
|
)
|
|
|
|
controller = this
|
|
Ember.run.schedule('afterRender', ->
|
|
if controller.get('tabs.length') == 0
|
|
tab.show()
|
|
controller.get('tabs').pushObject(tab)
|
|
)
|
|
|
|
Ember.Handlebars.helpers.view.call(this, view, options)
|
|
)
|
|
|
|
|
|
Ember.Handlebars.registerHelper('travis-tabs', (options) ->
|
|
template = options.fn
|
|
delete options.fn
|
|
|
|
@set('tabs', [])
|
|
|
|
view = Travis.TabsView.create(
|
|
controller: this
|
|
template: template
|
|
)
|
|
|
|
Ember.Handlebars.helpers.view.call(this, view, options)
|
|
)
|
|
|
|
Travis.SettingsMultiplierView = Ember.CollectionView.extend()
|
|
|
|
createObjects = (path, offset) ->
|
|
segments = path.split('.')
|
|
if segments.length > offset
|
|
for i in [1..(segments.length - offset)]
|
|
path = segments.slice(0, i).join('.')
|
|
if Ember.isNone(Ember.get(this, path))
|
|
Ember.set(this, path, {})
|
|
|
|
return segments
|
|
|
|
Ember.Handlebars.registerHelper('settings-multiplier', (path, options) ->
|
|
template = options.fn
|
|
delete options.fn
|
|
|
|
parentsPath = getSettingsPath(options.data.view)
|
|
if parentsPath && parentsPath != ''
|
|
path = parentsPath + '.' + path
|
|
|
|
createObjects.call(this, path, 1)
|
|
|
|
if Ember.isNone(@get(path))
|
|
collection = [{}]
|
|
@set(path, collection)
|
|
|
|
|
|
itemViewClass = Ember.View.extend(
|
|
template: template,
|
|
controller: this,
|
|
tagName: 'li',
|
|
multiplier: true
|
|
)
|
|
|
|
view = Travis.SettingsMultiplierView.create(
|
|
contentBinding: 'controller.' + path
|
|
controller: this
|
|
tagName: 'ul'
|
|
itemViewClass: itemViewClass
|
|
fields: []
|
|
settingsPath: path
|
|
)
|
|
|
|
view.addObserver('content.length', ->
|
|
if @get('content.length') == 0
|
|
@get('content').pushObject({})
|
|
)
|
|
|
|
Ember.Handlebars.helpers.view.call(this, view, options)
|
|
)
|
|
|
|
Travis.FormSettingsView = Ember.View.extend Ember.TargetActionSupport,
|
|
target: Ember.computed.alias('controller')
|
|
actionContext: Ember.computed.alias('context'),
|
|
action: 'submit'
|
|
tagName: 'form'
|
|
submit: (event) ->
|
|
event.preventDefault()
|
|
@triggerAction()
|
|
|
|
|
|
Ember.Handlebars.registerHelper('settings-form', (path, options) ->
|
|
if arguments.length == 1
|
|
options = path
|
|
path = 'settings'
|
|
|
|
view = Travis.FormSettingsView.create(
|
|
template: options.fn
|
|
controller: this
|
|
settingsPath: path
|
|
)
|
|
|
|
delete options.fn
|
|
|
|
Ember.Handlebars.helpers.view.call(this, view, options)
|
|
)
|
|
|
|
Ember.Handlebars.helper('settings-select', (options) ->
|
|
view = options.data.view
|
|
optionValues = options.hash.options
|
|
delete options.hash.options
|
|
|
|
originalPath = options.hash.value
|
|
|
|
parentsPath = getSettingsPath(view)
|
|
#TODO: such checks should also check parents, not only current context view
|
|
if !view.get('multiplier') && parentsPath && parentsPath != ''
|
|
originalPath = parentsPath + '.' + originalPath
|
|
|
|
fullPath = originalPath
|
|
|
|
if view.get('multiplier')
|
|
fullPath = 'view.content.' + fullPath
|
|
|
|
createObjects.call(this, fullPath, 1)
|
|
|
|
# TODO: setting a value here does not work and we still need
|
|
# a valueBinding in the view, I'm not sure why
|
|
options.hash.value = fullPath
|
|
|
|
selectView = Ember.Select.create(
|
|
content: [''].pushObjects(optionValues.split(','))
|
|
controller: this
|
|
valueBinding: 'controller.' + fullPath
|
|
)
|
|
|
|
Ember.Handlebars.helpers.view.call(this, selectView, options)
|
|
)
|
|
|
|
|
|
|
|
Ember.Handlebars.helper('settings-remove-link', (options) ->
|
|
view = Ember.View.extend(
|
|
tagName: 'a'
|
|
attributeBindings: ['href', 'style']
|
|
href: '#'
|
|
style: (->
|
|
# TODO: do not assume that we're direct child
|
|
if @get('parentView.parentView.content.length') == 1
|
|
'display: none'
|
|
).property('parentView.parentView.content.length')
|
|
template: Ember.Handlebars.compile('remove')
|
|
controller: this
|
|
click: (event) ->
|
|
event.preventDefault()
|
|
|
|
if content = @get('parentView.content')
|
|
@get('parentView.parentView.content').removeObject(content)
|
|
).create()
|
|
|
|
Ember.Handlebars.helpers.view.call(this, view, options)
|
|
)
|
|
|
|
Ember.Handlebars.registerHelper('settings-add-link', (path, options) ->
|
|
parentsPath = getSettingsPath(options.data.view)
|
|
if parentsPath && parentsPath != ''
|
|
path = parentsPath + '.' + path
|
|
|
|
view = Ember.View.create(
|
|
tagName: 'a'
|
|
attributeBindings: ['href']
|
|
href: '#'
|
|
template: options.fn
|
|
controller: this
|
|
click: (event) ->
|
|
event.preventDefault()
|
|
|
|
if collection = @get('controller.' + path)
|
|
collection.pushObject({})
|
|
)
|
|
|
|
Ember.Handlebars.helpers.view.call(this, view, options)
|
|
)
|
|
|
|
getSettingsPath = (view) ->
|
|
settingsPaths = []
|
|
if settingsPath = view.get('settingsPath')
|
|
settingsPaths.pushObject settingsPath
|
|
|
|
parent = view
|
|
while parent = parent.get('parentView')
|
|
if settingsPath = parent.get('settingsPath')
|
|
settingsPaths.pushObject settingsPath
|
|
|
|
return settingsPaths.reverse().join('.')
|
|
|
|
Ember.Handlebars.helper('settings-input', (options) ->
|
|
view = options.data.view
|
|
|
|
if options.hash.type == 'checkbox'
|
|
originalPath = options.hash.checked
|
|
else
|
|
originalPath = options.hash.value
|
|
|
|
parentsPath = getSettingsPath(view)
|
|
#TODO: such checks should also check parents, not only current context view
|
|
if !view.get('multiplier') && parentsPath && parentsPath != ''
|
|
originalPath = parentsPath + '.' + originalPath
|
|
|
|
fullPath = originalPath
|
|
|
|
if view.get('multiplier')
|
|
fullPath = 'view.content.' + fullPath
|
|
|
|
if options.hash.type != 'password'
|
|
createObjects.call(this, fullPath, 1)
|
|
else
|
|
createObjects.call(view, fullPath, 2)
|
|
content = view.get('content')
|
|
fullPath += ".value"
|
|
if Ember.isNone(Ember.get(content, originalPath))
|
|
Ember.set(content, originalPath, {})
|
|
Ember.set(content, originalPath + ".type", 'password')
|
|
|
|
if options.hash.type == 'checkbox'
|
|
options.hash.checked = fullPath
|
|
else
|
|
options.hash.value = fullPath
|
|
Ember.Handlebars.helpers.input.call(this, options)
|
|
)
|
|
|
|
Handlebars.registerHelper 'tipsy', (text, tip) ->
|
|
safe '<span class="tool-tip" original-title="' + tip + '">' + text + '</span>'
|
|
|
|
Ember.registerBoundHelper 'capitalize', (value, options) ->
|
|
if value?
|
|
safe $.capitalize(value)
|
|
else
|
|
''
|
|
|
|
Ember.registerBoundHelper 'formatTime', (value, options) ->
|
|
safe Travis.Helpers.timeAgoInWords(value) || '-'
|
|
|
|
Ember.registerBoundHelper 'formatDuration', (duration, options) ->
|
|
safe Travis.Helpers.timeInWords(duration)
|
|
|
|
Ember.Handlebars.helper('formatCommit', (commit) ->
|
|
safe Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')) if commit
|
|
, 'sha', 'branch')
|
|
|
|
Ember.registerBoundHelper 'formatSha', (sha, options) ->
|
|
safe Travis.Helpers.formatSha(sha)
|
|
|
|
Ember.registerBoundHelper 'pathFrom', (url, options) ->
|
|
safe Travis.Helpers.pathFrom(url)
|
|
|
|
Ember.Handlebars.helper 'formatMessage', (message, options) ->
|
|
safe Travis.Helpers.formatMessage(message, options.hash)
|
|
|
|
Ember.registerBoundHelper 'formatConfig', (config, options) ->
|
|
safe Travis.Helpers.formatConfig(config)
|
|
|
|
Ember.registerBoundHelper 'formatLog', (log, options) ->
|
|
parentView = @get 'parentView'
|
|
repo = parentView.get(options.repo)
|
|
item = parentView.get(options.item)
|
|
Travis.Helpers.formatLog(log, repo, item) || ''
|
|
|