$(window).ready -> navbox = $('._navbox') navbox.select2 placeholder: navbox.attr("placeholder") escapeMarkup: (markup) -> markup minimumInputLength: 1 maximumSelectionSize: 1 ajax: delay: 200 url: decko.path ':search.json' data: (params) -> query: { keyword: params.term } view: "complete" processResults: (data) -> results: navboxize(data) cache: true templateResult: formatNavboxItem templateSelection: formatNavboxSelectedItem multiple: true containerCssClass: 'select2-navbox-autocomplete' dropdownCssClass: 'select2-navbox-dropdown' width: "100%!important" navbox.on "select2:select", (e) -> navboxSelect(e) formatNavboxItem = (i) -> if i.loading return i.text '' + i.icon + '' + '' + i.prefix + ': ' + '' + i.label + '' formatNavboxSelectedItem = (i) -> unless i.icon return i.text '' + i.icon + '' + '' + i.label + '' navboxize = (results) -> items = [] term = results.term if results["search"] # id is what the form sends items.push navboxItem(prefix: "search", id: term, text: term) $.each ['add', 'new'], (index, key) -> if val = results[key] items.push navboxItem(prefix: key, icon: "add", text: val[0], href: val[1]) $.each results['goto'], (index, val) -> i = navboxItem( prefix: "go to", id: index, icon: "arrow_forward", text: val[0], href: val[1], label: val[2] ) items.push i items navboxItem = (data) -> data.id ||= data.prefix data.icon ||= data.prefix data.label ||= '' + data.text + '' data navboxSelect = (event) -> item = event.params.data if item.href window.location = decko.path(item.href) else $(event.target).closest('form').submit() $(event.target).attr('disabled', 'disabled')