mirror of
https://github.com/a2nt/webpack-bootstrap-ui-kit.git
synced 2024-10-22 11:05:45 +02:00
98 lines
2.0 KiB
JavaScript
98 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
import $ from 'jquery';
|
|
|
|
import select2 from 'select2/dist/js/select2.js';
|
|
import Events from '../_events';
|
|
|
|
const FormSelect2 = (($) => {
|
|
// Constants
|
|
const NAME = 'jsFormSelect2';
|
|
const DATA_KEY = NAME;
|
|
const $Html = $('html, body');
|
|
const W = window;
|
|
const D = document;
|
|
|
|
class FormSelect2 {
|
|
constructor(el) {
|
|
const ui = this;
|
|
const $el = $(el);
|
|
|
|
ui._el = el;
|
|
ui.dispose();
|
|
|
|
console.log(`${NAME}: init`);
|
|
$el.data(DATA_KEY, this);
|
|
|
|
const $fields = $el.find(Events.FORM_FIELDS);
|
|
|
|
const $selectFields = $el
|
|
.find('select:not([readonly])')
|
|
.not('.no-select2');
|
|
|
|
$selectFields.each((i, el) => {
|
|
$(el).select2();
|
|
});
|
|
|
|
$el.addClass(`${NAME}-active`);
|
|
$el.trigger(Events.FORM_INIT_BASICS);
|
|
}
|
|
|
|
// Public methods
|
|
dispose() {
|
|
console.log(`${NAME}: dispose`);
|
|
const ui = this;
|
|
|
|
const $el = $(ui._el);
|
|
|
|
const $selectFields = $el
|
|
.find('select:not([readonly])')
|
|
.not('.no-select2');
|
|
$selectFields.each((i, el) => {
|
|
const $el = $(el);
|
|
if ($el.hasClass('select2-hidden-accessible')) {
|
|
$el.select2('destroy');
|
|
}
|
|
});
|
|
|
|
$.removeData(ui._el, DATA_KEY);
|
|
ui._el = null;
|
|
$el.removeClass(`${NAME}-active`);
|
|
}
|
|
|
|
static _jQueryInterface() {
|
|
return this.each(() => {
|
|
// attach functionality to el
|
|
const $el = $(this);
|
|
let data = $el.data(DATA_KEY);
|
|
|
|
if (!data) {
|
|
data = new FormSelect2(this);
|
|
$el.data(DATA_KEY, data);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
// jQuery interface
|
|
$.fn[NAME] = FormSelect2._jQueryInterface;
|
|
$.fn[NAME].Constructor = FormSelect2;
|
|
$.fn[NAME].noConflict = function () {
|
|
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
|
return FormSelect2._jQueryInterface;
|
|
};
|
|
|
|
const init = () => {
|
|
$('form').jsFormSelect2();
|
|
};
|
|
|
|
// auto-apply
|
|
$(W).on(`${NAME}.init ${Events.AJAX} ${Events.LOADED}`, () => {
|
|
init();
|
|
});
|
|
|
|
return FormSelect2;
|
|
})($);
|
|
|
|
export default FormSelect2;
|