talio-selectize
Version:
selectize packaged for talio and mercury.
71 lines (57 loc) • 2.02 kB
text/coffeescript
delegator = null
dispatchChange = (elem, value) ->
if value
event = new CustomEvent 'change', 'detail': value: value
elem.dispatchEvent event
class SelectizeWidget
type: 'Widget'
constructor: () ->
.dropdownParent = 'body'
init: ->
container = document.createElement 'div'
elem = document.createElement 'select'
elem.name = .name or null
if .maxItems > 1
elem.multiple = true
container.appendChild elem
if ['ev-change']
delegator.addEventListener elem, 'change', ['ev-change']
if not .onChange
.onChange = dispatchChange.bind @, elem
else
.onChange = (value) =>
dispatchChange elem, value
.onChange value
selectize = $(elem).selectize()[0].selectize
if .value
selectize.setValue .value, true
return container
update: (prev, container) ->
elem = container.firstChild
if .key != prev.opts.key
elem.selectize.destroy()
if ['ev-change']
delegator.addEventListener elem, 'change', ['ev-change']
if not .onChange
.onChange = dispatchChange.bind @, elem
else
.onChange = (value) =>
dispatchChange elem, value
.onChange value
$(elem).selectize()
else if .options != prev.opts.options
selectize = $(elem)[0].selectize
selectize.addOption .options
selectize.refreshOptions !!.openOnFocus
optionsChanged = true
if .value != prev.opts.value or optionsChanged
selectize = $(elem)[0].selectize
selectize.setValue .value, true
return container
destroy: ->
module.exports = (props) ->
if not delegator
console.log 'widget not initialized properly, please call .init(domDelegatorInstance) before calling this.'
new SelectizeWidget props
module.exports.init = (delegatorPassedToUs) ->
delegator = delegatorPassedToUs