codecombat/app/views/play/level/tome/spell_palette_view.coffee

63 lines
2.1 KiB
CoffeeScript
Raw Normal View History

2014-01-03 13:32:13 -05:00
View = require 'views/kinds/CocoView'
template = require 'templates/play/level/tome/spell_palette'
{me} = require 'lib/auth'
filters = require 'lib/image_filter'
Docs = require 'lib/world/docs'
SpellPaletteEntryView = require './spell_palette_entry_view'
module.exports = class SpellPaletteView extends View
id: 'spell-palette-view'
template: template
controlsEnabled: true
subscriptions:
'level-disable-controls': 'onDisableControls'
'level-enable-controls': 'onEnableControls'
'surface:frame-changed': "onFrameChanged"
constructor: (options) ->
super options
@thang = options.thang
afterRender: ->
super()
@createPalette()
createPalette: ->
docs = Docs.getDocsFor @thang, @thang.programmableProperties
docs = docs.concat Docs.getDocsFor(@thang, @thang.programmableSnippets, true)
shortenize = docs.length > 6
@entries = (@addEntry doc, shortenize for doc in docs)
addEntry: (doc, shortenize) ->
entry = new SpellPaletteEntryView doc: doc, thang: @thang, shortenize: shortenize
@$el.find('.properties').append entry.el
entry.render() # Render after appending so that we can access parent container for popover
entry
onDisableControls: (e) -> @toggleControls e, false
onEnableControls: (e) -> @toggleControls e, true
toggleControls: (e, enabled) ->
return if e.controls and not ('palette' in e.controls)
return if enabled is @controlsEnabled
@controlsEnabled = enabled
@$el.find('*').attr('disabled', not enabled)
@toggleBackground()
toggleBackground: =>
# TODO: make the palette background an actual background and do the CSS trick
# used in spell_list_entry.sass for disabling
background = @$el.find('.code-palette-background')[0]
if background.naturalWidth is 0 # not loaded yet
return _.delay @toggleBackground, 100
filters.revertImage background if @controlsEnabled
filters.darkenImage background, 0.8 unless @controlsEnabled
onFrameChanged: (e) ->
return unless e.selectedThang?.id is @thang.id
@thang = e.selectedThang # Update our thang to the current version
destroy: ->
super()
entry.destroy() for entry in @entries