CocoView = require 'views/kinds/CocoView' add_thangs_template = require 'templates/editor/level/add_thangs' 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 module.exports = class AddThangsView extends CocoView 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 # 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') is 'Mark' 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 context.thangTypes = thangTypes context.groups = groups context afterRender: -> 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