'use strict'; import $ from 'jquery'; import Events from '../_events'; const FormFieldUI = (($) => { // Constants const NAME = 'jsFormFieldUI'; const DATA_KEY = NAME; const $Html = $('html, body'); class FormFieldUI { constructor(el) { const ui = this; ui.$el = $(el); ui.shown = true; ui.$el.data(DATA_KEY, ui); //ui.$actions = ui.$el.parents('form').children('.btn-toolbar,.form-actions'); ui.vals = { val: ui.$el.val(), checked: ui.$el.is(':checked'), }; // bootstrap collapse integration ui.$el.parents('.optionset').not('.field').removeClass('collapse'); ui.$collapse = ui.$el .parents('.field.collapse') .not('.composite') .first(); if (ui.$collapse.length) { ui.$el.removeClass('collapse'); ui.$collapse.on('show.bs.collapse', (e) => { ui.show(); }); ui.$collapse.on('hidden.bs.collapse', (e) => { ui.hide(); }); } ui.$el.addClass(`${NAME}-active`); return ui; } // Public methods dispose() { const ui = this; const $el = ui.$el; $el.removeClass(`${NAME}-active`); $.removeData($el[0], DATA_KEY); } show() { const ui = this; const $el = ui.$el; ui.restore(); ui.shown = true; /*if (ui.$collapse.length) { ui.$collapse.collapse('show'); } if ($el.hasClass('collapse')) { $el.collapse('show'); }*/ $el.trigger(`shown.${NAME}`); } hide() { const ui = this; const $el = ui.$el; ui.wipe(); ui.shown = false; /*if (ui.$collapse.length) { ui.$collapse.collapse('hide'); } if ($el.hasClass('collapse')) { $el.collapse('hide'); } $el.trigger('change');*/ $el.trigger(`hidden.${NAME}`); } wipe() { const ui = this; const $el = ui.$el; ui.vals = { name: $el.attr('name'), val: $el.val(), checked: $el.is(':checked'), }; $el.val(''); $el.prop('checked', false); } restore() { const ui = this; const $el = ui.$el; const checked = ui.vals['checked']; $el.val(ui.vals['val']); $el.prop('checked', checked); } addMessage(msg, type = null, scrollTo = true) { const ui = this; const $field = ui.$el.closest('.field'); $field.addClass('has-message'); if (msg) { $field.append(`
${msg}
`); } if (scrollTo) { const pos = $field.offset().top; $field.focus(); $Html.scrollTop(pos - 100); } } removeMessages() { const ui = this; const $field = ui.$el.closest('.field'); $field.removeClass('has-message'); $field.find('.message').remove(); } static _jQueryInterface() { return this.each(function () { // attach functionality to el const $el = $(this); let data = $el.data(DATA_KEY); if (!data) { data = new FormFieldUI(this); $el.data(DATA_KEY, data); } }); } } // jQuery interface $.fn[NAME] = FormFieldUI._jQueryInterface; $.fn[NAME].Constructor = FormFieldUI; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return FormFieldUI._jQueryInterface; }; return FormFieldUI; })($); export default FormFieldUI;