UNPKG

csdsolutions-csdjs

Version:

Libreria per i progetti di CSD Solutions

394 lines (333 loc) 9.57 kB
// Import all components from the component directory import { initializeFab, initializeSplitButton, initializeDatepickers, initializeEditor, initializeSearchbar, initializeCheckbox, initializeRadio, initializeRange, initializePassword, initializeMask, initializeTextArea, initializeToggle, initializeToggleButton, initializeModal, initializePopover, initializeSplitter, initializeConfirmDialog, initializeToast, initializeList, initializeReorder, initializeDropdown, initializeAccordion, initializeTab, initializeToolbar, initializeNavigation, initializeNumber, initializeCustomSelect, initializeSegment, initializeStepper, initializeMenu, initializeSidebar, initializeBtn, } from "./component"; // Import all function/Events import { showAccordion } from "./component"; import { $CSD } from "./csd-lib"; const originalVal = _CSD_UTILS.prototype.val; function initCSDComponents() { // Initialize searchbar components $CSD(".csd-searchbar-input:not(.csd-select-editable)").each(function () { initializeSearchbar(this); }); $CSD(".csd-btn").each(function () { initializeBtn(this); }); // Initialize form components $CSD(".csd-select").each(function () { initializeCustomSelect(this); }); $CSD(".csd-checkbox").each(function () { initializeCheckbox(this); }); $CSD(".csd-radio").each(function () { initializeRadio(this); }); // Initialize password inputs $CSD('input[type="password"].csd-input').each(function () { initializePassword(this); }); // Initialize masked inputs $CSD("input[data-mask].csd-input").each(function () { initializeMask(this); }); // Initialize number inputs $CSD(".csd-number").each(function () { initializeNumber(this); }); // Initialize textareas $CSD(".csd-textarea").each(function () { initializeTextArea(this); }); // Initialize datepickers initializeDatepickers(); // Reinitialize datepickers on content change $CSD(document).on("contentChanged", function () { initializeDatepickers(); }); // Initialize range components $CSD(".csd-range").each(function () { initializeRange(this); }); $CSD(".csd-knob").each(function () { initializeKnob(this); }); // Initialize toggle components $CSD(".csd-toggle").each(function () { initializeToggle(this); }); $CSD(".csd-toggle-button").each(function () { initializeToggleButton(this); }); // Initialize UI components $CSD(".csd-segment").each(function () { initializeSegment(this); }); $CSD(".csd-tabs").each(function () { initializeTab(this); }); $CSD(".csd-stepper-container").each(function () { initializeStepper(this); }); // Initialize menu components $CSD(".csd-menubar").each(function () { initializeMenu(this); }); $CSD(".csd-mega-menu").each(function () { initializeMenu(this); }); $CSD(".csd-toolbar").each(function () { initializeToolbar(this); }); // Initialize sidebar initializeSidebar(); // Initialize navigation elements $CSD(".csd-navigation").each(function () { initializeNavigation(this); }); // Initialize accordion elements $CSD(".csd-accordion").each(function () { initializeAccordion(this); }); // Handle csdClick="showAccordion(param)" syntax $CSD("[csdClick^='showAccordion']").on("click", function () { const param = $CSD(this) .attr("csdClick") .replace("showAccordion(", "") .replace(")", ""); showAccordion.call(this, param); }); // Initialize dropdown elements $CSD(".csd-dropdown").each(function () { initializeDropdown(this); }); // Initialize toast elements $CSD(".csd-toast").each(function () { initializeToast(this); }); // Modal $CSD(".csd-modal").each(function () { initializeModal(this); }); // Confirm Dialog $CSD(".csd-modal-confirm").each(function () { initializeConfirmDialog(this); }); // Popover $CSD(".csd-popover").each(function () { initializePopover(this); }); // Initialize splitter functionality $CSD(".csd-splitter").each(function () { initializeSplitter(this); }); // Initialize FABs $CSD(".csd-fab").each(function () { initializeFab(this); }); // Initialize list $CSD(".csd-list").each(function () { initializeList(this); }); // Initialize reorder $CSD(".csd-reorder").each(function () { initializeReorder(this); }); // Initialize global toast const toastInstance = initializeToast(); if (typeof window !== 'undefined') { window.toast = toastInstance; } // Initialize all split buttons $CSD(".csd-split-button").each(function () { initializeSplitButton(this); }); // Initialize all editors $CSD(".csd-editor").each(function () { initializeEditor(this); }); if (!$CSD(".csd-toast-container").length) { $CSD("body").append('<div class="csd-toast-container"></div>'); } // Toast buttons $CSD(document).on("click", ".csd-btn-toast", function () { const type = $CSD(this).data("type"); const message = $CSD(this).data("message"); const $toast = $CSD("<div>") .addClass("csd-toast") .addClass(`csd-toast-${type}`).html(` <div class="csd-toast-content"> <ion-icon name="${getToastIcon(type)}"></ion-icon> <span>${message}</span> </div> <button type="button" class="csd-toast-close"> <ion-icon name="close-outline"></ion-icon> </button> `); const $container = $CSD(".csd-toast-container"); $container.append($toast); // Show with animation setTimeout(() => { $toast.addClass("show"); }, 100); // Auto close after 3 seconds const autoCloseTimeout = setTimeout(() => { closeToast($toast); }, 2500); // Close button handler $toast.find(".csd-toast-close").on("click", function () { clearTimeout(autoCloseTimeout); closeToast($toast); }); }); function closeToast($toast) { $toast.removeClass("show"); setTimeout(() => { $toast.remove(); }, 300); } function getToastIcon(type) { switch (type) { case "success": return "checkmark-circle-outline"; case "warning": return "warning-outline"; case "error": return "alert-circle-outline"; case "info": return "information-circle-outline"; default: return "information-circle-outline"; } } // Initialize modals and confirm dialogs $CSD(".csd-modal, .csd-modal-confirm").each(function () { initializeModal(this); }); // Modal and confirm dialog open buttons $CSD(document).on("click", ".js-open-modal, .js-open-confirm", function (e) { e.preventDefault(); const targetId = $CSD(this).data("target"); const $modal = $CSD(targetId); if ($modal.length) { $modal.show(); setTimeout(() => { $modal.addClass("show"); }, 50); } }); // Modal close buttons and overlay $CSD(document).on( "click", ".csd-modal-close, .csd-modal-overlay", function (e) { e.preventDefault(); const $modal = $CSD(this).closest(".csd-modal"); $modal.removeClass("show"); } ); // Handle confirm dialog buttons $CSD(document).on("click", ".csd-confirm-btn", function (e) { e.preventDefault(); const $modal = $CSD(this).closest(".csd-modal-confirm"); if ($modal.length) { console.log("Confirmed"); $modal.removeClass("show"); setTimeout(() => { $modal.hide(); }, 300); } }); $CSD(document).on("click", ".csd-cancel-btn", function (e) { e.preventDefault(); const $modal = $CSD(this).closest(".csd-modal-confirm"); if ($modal.length) { console.log("Cancelled"); $modal.removeClass("show"); setTimeout(() => { $modal.hide(); }, 300); } }); // Form submit handler $CSD(".js-form-submit").on("click", function (e) { e.preventDefault(); const $modal = $CSD(this).closest(".csd-modal"); const $form = $modal.find("form"); // Check form validity if ($form[0].checkValidity()) { // Collect form data const formData = {}; $form.find(".csd-form-control").each(function () { const $input = $CSD(this); formData[$input.attr("name")] = $input.val(); }); // Handle form submission console.log("Form data:", formData); if (typeof window !== 'undefined' && window.toast) { window.toast.show("Dati salvati con successo!", "success"); } else if (toastInstance) { toastInstance.show("Dati salvati con successo!", "success"); } // Clear form and close modal $form[0].reset(); $modal.removeClass("show"); } else { // Trigger HTML5 validation $form[0].reportValidity(); } }); // Handle escape key $CSD(document).on("keydown", function (e) { if (e.key === "Escape") { const $modal = $CSD(".csd-modal.show"); if ($modal.length) { $modal.removeClass("show"); } } }); // Previeni il redirect sui link # che non sono submenu o dropdown $CSD(document).on("click", 'a[href="#"]', function (e) { const $target = $CSD(this); if ( !$target.closest(".has-submenu").length && !$target.closest(".csd-dropdown-menu").length ) { e.preventDefault(); } }); } export default initCSDComponents; export { initCSDComponents };