codecombat/app/views/editor/level/systems/AddLevelSystemModal.coffee

55 lines
2 KiB
CoffeeScript
Raw Normal View History

2014-07-17 20:22:26 -04:00
ModalView = require 'views/kinds/ModalView'
2014-01-03 13:32:13 -05:00
template = require 'templates/editor/level/system/add'
availableSystemTemplate = require 'templates/editor/level/system/available_system'
LevelSystem = require 'models/LevelSystem'
CocoCollection = require 'collections/CocoCollection'
2014-01-03 13:32:13 -05:00
class LevelSystemSearchCollection extends CocoCollection
url: '/db/level_system'
2014-01-03 13:32:13 -05:00
model: LevelSystem
module.exports = class AddLevelSystemModal extends ModalView
2014-06-30 22:16:26 -04:00
id: 'editor-level-system-add-modal'
2014-01-03 13:32:13 -05:00
template: template
instant: true
events:
'click .available-systems-list li': 'onAddSystem'
constructor: (options) ->
super options
@extantSystems = options.extantSystems ? []
2014-08-26 20:34:00 -04:00
@systems = @supermodel.loadCollection(new LevelSystemSearchCollection(), 'systems').model
2014-01-03 13:32:13 -05:00
afterRender: ->
super()
2014-08-26 20:34:00 -04:00
return unless @supermodel.finished()
2014-01-03 13:32:13 -05:00
@renderAvailableSystems()
renderAvailableSystems: ->
ul = @$el.find('ul.available-systems-list').empty()
systems = (m.attributes for m in @systems.models)
_.remove systems, (system) =>
_.find @extantSystems, {original: system.original} # already have this one added
systems = _.sortBy systems, 'name'
for system in systems
ul.append $(availableSystemTemplate(system: system))
onAddSystem: (e) ->
id = $(e.currentTarget).data('system-id')
system = _.find @systems.models, id: id
unless system
2014-06-30 22:16:26 -04:00
return console.error 'Couldn\'t find system for id', id, 'out of', @systems.models
2014-01-03 13:32:13 -05:00
# Add all dependencies, recursively, unless we already have them
toAdd = system.getDependencies(@systems.models)
_.remove toAdd, (s1) =>
_.find @extantSystems, original: s1.get('original')
for s in toAdd.concat [system]
levelSystem =
original: s.get('original') ? id
majorVersion: s.get('version').major ? 0
config: $.extend(true, {}, s.get('configSchema').default ? {})
2014-01-03 13:32:13 -05:00
@extantSystems.push levelSystem
Backbone.Mediator.publish 'level-system-added', system: levelSystem
@renderAvailableSystems()