2014-03-18 14:59:36 -04:00
|
|
|
View = require 'views/kinds/CocoView'
|
|
|
|
add_thangs_template = require 'templates/editor/level/add_thangs'
|
|
|
|
ThangType = require 'models/ThangType'
|
|
|
|
CocoCollection = require 'models/CocoCollection'
|
|
|
|
|
|
|
|
class ThangTypeSearchCollection extends CocoCollection
|
|
|
|
url: '/db/thang.type/search?project=true'
|
|
|
|
model: ThangType
|
|
|
|
|
|
|
|
addTerm: (term) ->
|
|
|
|
@url += "&term=#{term}" if term
|
|
|
|
|
|
|
|
module.exports = class AddThangsView extends View
|
|
|
|
id: "add-thangs-column"
|
|
|
|
className: 'add-thangs-palette thangs-column'
|
|
|
|
template: add_thangs_template
|
|
|
|
startsLoading: false
|
|
|
|
|
|
|
|
events:
|
|
|
|
'keyup input#thang-search': 'runSearch'
|
|
|
|
|
|
|
|
constructor: (options) ->
|
|
|
|
super options
|
|
|
|
@world = options.world
|
|
|
|
@thangTypes = @supermodel.getCollection new ThangTypeSearchCollection() # should load depended-on Components, too
|
2014-03-24 12:58:34 -04:00
|
|
|
@listenToOnce(@thangTypes, 'sync', @onThangTypesLoaded)
|
2014-03-18 14:59:36 -04:00
|
|
|
@thangTypes.fetch()
|
|
|
|
|
2014-03-24 12:58:34 -04:00
|
|
|
onThangTypesLoaded: ->
|
2014-03-18 14:59:36 -04:00
|
|
|
return if @destroyed
|
|
|
|
@render() # do it again but without the loading screen
|
|
|
|
|
|
|
|
getRenderData: (context={}) ->
|
|
|
|
context = super(context)
|
|
|
|
if @searchModels
|
|
|
|
models = @searchModels
|
|
|
|
else
|
|
|
|
models = @supermodel.getModels(ThangType)
|
|
|
|
|
|
|
|
thangTypes = (thangType.attributes for thangType in models)
|
|
|
|
thangTypes = _.uniq thangTypes, false, 'original'
|
|
|
|
thangTypes = _.reject thangTypes, kind: 'Mark'
|
|
|
|
groupMap = {}
|
|
|
|
for thangType in thangTypes
|
|
|
|
groupMap[thangType.kind] ?= []
|
|
|
|
groupMap[thangType.kind].push thangType
|
|
|
|
|
|
|
|
groups = []
|
|
|
|
for groupName in Object.keys(groupMap).sort()
|
|
|
|
someThangTypes = groupMap[groupName]
|
|
|
|
someThangTypes = _.sortBy someThangTypes, 'name'
|
|
|
|
group =
|
|
|
|
name: groupName
|
|
|
|
thangs: someThangTypes
|
|
|
|
groups.push group
|
|
|
|
|
|
|
|
context.thangTypes = thangTypes
|
|
|
|
context.groups = groups
|
|
|
|
context
|
|
|
|
|
|
|
|
afterRender: ->
|
|
|
|
return if @startsLoading
|
|
|
|
super()
|
|
|
|
|
|
|
|
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: ->
|
|
|
|
@$el.find('input#thang-search').val("")
|
|
|
|
@runSearch
|