codecombat/app/views/editor/level/thangs/AddThangsView.coffee

84 lines
2.5 KiB
CoffeeScript
Raw Normal View History

2014-07-17 20:20:11 -04:00
CocoView = require 'views/kinds/CocoView'
add_thangs_template = require 'templates/editor/level/add-thangs-view'
ThangType = require 'models/ThangType'
CocoCollection = require 'collections/CocoCollection'
class ThangTypeSearchCollection extends CocoCollection
url: '/db/thang.type?project=original,name,version,description,slug,kind,rasterIcon'
model: ThangType
addTerm: (term) ->
@url += "&term=#{term}" if term
2014-07-17 20:20:11 -04:00
module.exports = class AddThangsView extends CocoView
id: 'add-thangs-view'
className: 'add-thangs-palette'
template: add_thangs_template
events:
'keyup input#thang-search': 'runSearch'
constructor: (options) ->
super options
@world = options.world
# should load depended-on Components, too
@thangTypes = @supermodel.loadCollection(new ThangTypeSearchCollection(), 'thangs').model
getRenderData: (context={}) ->
context = super(context)
if @searchModels
models = @searchModels
else
models = @supermodel.getModels(ThangType)
thangTypes = _.uniq models, false, (thangType) -> thangType.get('original')
thangTypes = _.reject thangTypes, (thangType) -> thangType.get('kind') in ['Mark', 'Item']
groupMap = {}
for thangType in thangTypes
kind = thangType.get('kind')
groupMap[kind] ?= []
groupMap[kind].push thangType
groups = []
for groupName in Object.keys(groupMap).sort()
someThangTypes = groupMap[groupName]
someThangTypes = _.sortBy someThangTypes, (thangType) -> thangType.get('name')
group =
name: groupName
thangs: someThangTypes
groups.push group
groups = _.sortBy groups, (group) ->
index = ['Wall', 'Floor', 'Unit', 'Doodad', 'Misc'].indexOf group.name
if index is -1 then 9001 else index
context.thangTypes = thangTypes
context.groups = groups
context
afterRender: ->
super()
2014-08-26 17:34:23 -04:00
@buildAddThangPopovers()
buildAddThangPopovers: ->
@$el.find('#thangs-list .add-thang-palette-icon').tooltip(container: 'body', animation: false)
runSearch: (e) =>
if e?.which is 27
@onEscapePressed()
term = @$el.find('input#thang-search').val()
return unless term isnt @lastSearch
@searchModels = @thangTypes.filter (model) ->
return true unless term
regExp = new RegExp term, 'i'
return model.get('name').match regExp
@render()
@$el.find('input#thang-search').focus().val(term)
@lastSearch = term
onEscapePressed: ->
2014-06-30 22:16:26 -04:00
@$el.find('input#thang-search').val('')
@runSearch