"use strict"; import $ from "jquery"; import Events from "../_events"; import SpinnerUI from "./_ui.spinner"; import FormFieldUI from "./_ui.form.fields"; const FormBasics = (($) => { // Constants const NAME = "jsFormBasics"; const DATA_KEY = NAME; const $Html = $("html, body"); const W = window; const D = document; class FormBasics { constructor(el) { const ui = this; const $el = $(el); ui._el = el; ui.dispose(); console.log(`${NAME}: init`); $el.data(DATA_KEY, this); //$('[data-inputmask]').inputmask(); const $fields = $el.find(Events.FORM_FIELDS); // init fields ui $fields.each((i, el) => { // skip some fields here new FormFieldUI(el); }); $fields.each((e, el) => { const $el = $(el); if ($el.hasClass("required") || $el.attr("aria-required")) { $el.closest(".field").addClass("required"); } }); const $radioOptions = $el.find('input[type="radio"]'); $radioOptions.each((e, el) => { const $el = $(el); if ($el.is(":checked")) { $el.parents(".radio").addClass("checked"); } }); $radioOptions.on("change", (e) => { const $el = $(e.currentTarget); const $parent = $el.parents(".radio"); $parent.siblings(".radio").each((i, el) => { const $el = $(el); if (!$el.find("input").is(":checked")) { $el.removeClass("checked"); } }); if ($el.is(":checked")) { $parent.addClass("checked"); } }); $el.on("submit", (e) => { setTimeout(() => { if (!$el.find(".error").length) { SpinnerUI.show(); } }, 100); }); $(".field.password .show-password").on("click", (e) => { console.log(`${NAME}: .field.password .show-password (click)`); const $el = $(e.currentTarget); const $field = $el.siblings("input"); const $icon = $el.find(".fas"); const attr = $field.attr("type"); if (attr === "password") { $field.attr("type", "text"); $icon.removeClass("fa-eye").addClass("fa-eye-slash"); } else { $field.attr("type", "password"); $icon.removeClass("fa-eye-slash").addClass("fa-eye"); } }); $el.addClass(`${NAME}-active`); $el.trigger(Events.FORM_INIT_BASICS); } // Public methods dispose() { console.log(`${NAME}: dispose`); const ui = this; const $el = $(ui._el); $.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 FormBasics(this); $el.data(DATA_KEY, data); } }); } } // jQuery interface $.fn[NAME] = FormBasics._jQueryInterface; $.fn[NAME].Constructor = FormBasics; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return FormBasics._jQueryInterface; }; const init = () => { $("form").jsFormBasics(); }; // auto-apply $(W).on(`${NAME}.init ${Events.AJAX} ${Events.LOADED}`, () => { init(); }); return FormBasics; })($); export default FormBasics;