talio-selectize
Version:
selectize packaged for talio and mercury.
103 lines (91 loc) • 2.95 kB
JavaScript
// 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;
};