UNPKG

talio-selectize

Version:

selectize packaged for talio and mercury.

103 lines (91 loc) 2.95 kB
// Generated by CoffeeScript 1.9.2 var SelectizeWidget, delegator, dispatchChange; delegator = null; dispatchChange = function(elem, value) { var event; if (value) { event = new CustomEvent('change', { 'detail': { value: value } }); return elem.dispatchEvent(event); } }; SelectizeWidget = (function() { SelectizeWidget.prototype.type = 'Widget'; function SelectizeWidget(opts) { this.opts = opts; this.opts.dropdownParent = 'body'; } SelectizeWidget.prototype.init = function() { var container, elem, selectize; container = document.createElement('div'); elem = document.createElement('select'); elem.name = this.opts.name || null; if (this.opts.maxItems > 1) { elem.multiple = true; } container.appendChild(elem); if (this.opts['ev-change']) { delegator.addEventListener(elem, 'change', this.opts['ev-change']); if (!this.opts.onChange) { this.opts.onChange = dispatchChange.bind(this, elem); } else { this.opts.onChange = (function(_this) { return function(value) { dispatchChange(elem, value); return _this.opts.onChange(value); }; })(this); } } selectize = $(elem).selectize(this.opts)[0].selectize; if (this.opts.value) { selectize.setValue(this.opts.value, true); } return container; }; SelectizeWidget.prototype.update = function(prev, container) { var elem, optionsChanged, selectize; elem = container.firstChild; if (this.opts.key !== prev.opts.key) { elem.selectize.destroy(); if (this.opts['ev-change']) { delegator.addEventListener(elem, 'change', this.opts['ev-change']); if (!this.opts.onChange) { this.opts.onChange = dispatchChange.bind(this, elem); } else { this.opts.onChange = (function(_this) { return function(value) { dispatchChange(elem, value); return _this.opts.onChange(value); }; })(this); } } $(elem).selectize(this.opts); } else if (this.opts.options !== prev.opts.options) { selectize = $(elem)[0].selectize; selectize.addOption(this.opts.options); selectize.refreshOptions(!!this.opts.openOnFocus); optionsChanged = true; } if (this.opts.value !== prev.opts.value || optionsChanged) { selectize = $(elem)[0].selectize; selectize.setValue(this.opts.value, true); } return container; }; SelectizeWidget.prototype.destroy = function() {}; return SelectizeWidget; })(); module.exports = function(props) { if (!delegator) { console.log('widget not initialized properly, please call .init(domDelegatorInstance) before calling this.'); } return new SelectizeWidget(props); }; module.exports.init = function(delegatorPassedToUs) { return delegator = delegatorPassedToUs; };