"use strict"; document.addEventListener("DOMContentLoaded", function () { // ------------------------------------------------------- // // Transition Placeholders // ------------------------------------------------------ // let materialInputs = document.querySelectorAll("input.input-material"); let materialLabel = document.querySelectorAll("label.label-material"); // activate labels for prefilled values let filledMaterialInputs = Array.from(materialInputs).filter(function (input) { return input.value !== ""; }); filledMaterialInputs.forEach((input) => input.parentElement.lastElementChild.setAttribute("class", "label-material active")); // move label on focus materialInputs.forEach((input) => { input.addEventListener("focus", function () { input.parentElement.lastElementChild.setAttribute("class", "label-material active"); }); }); // remove/keep label on blur materialInputs.forEach((input) => { input.addEventListener("blur", function () { if (input.value !== "") { input.parentElement.lastElementChild.setAttribute("class", "label-material active"); } else { input.parentElement.lastElementChild.setAttribute("class", "label-material"); } }); }); // ------------------------------------------------------- // // Footer // ------------------------------------------------------ // let footer = document.querySelector("#footer"); if (footer) { document.addEventListener("sidebarChanged", function () { adjustFooter(); }); window.addEventListener("resize", function () { adjustFooter(); }); } function adjustFooter() { var footerBlockHeight = document.querySelector("#footer").outerHeight; pageContent.style.paddingBottom = `${footerBlockHeight}px`; } // ------------------------------------------------------- // // Card Close // ------------------------------------------------------ // const closeCardBtn = document.querySelectorAll(".card-close a.remove"); closeCardBtn.forEach((el) => { el.addEventListener("click", (e) => { e.preventDefault(); el.closest(".card").style.opacity = "0"; setTimeout(function () { el.closest(".card").classList.add("d-none"); }, 300); }); }); // ------------------------------------------------------- // // Card Close dropdown // ------------------------------------------------------ // const cardSettingsToggle = document.querySelectorAll(".card-close .dropdown-toggle"); cardSettingsToggle.forEach((el) => { el.addEventListener("click", () => { if (el.classList.contains("show")) { setTimeout(function () { el.nextElementSibling.classList.add("is-visible"); }, 100); } }); }); document.addEventListener("click", function (e) { cardSettingsToggle.forEach((el) => { if (e.target == el) { setTimeout(function () { el.nextElementSibling.classList.add("is-visible"); }, 100); } else { el.nextElementSibling.classList.remove("is-visible"); } }); }); // ------------------------------------------------------- // // Search Popup // ------------------------------------------------------ // var searchOpenBtn = document.querySelector(".search-open"); var searchPanel = document.querySelector(".search-panel"); var searchCloseBtn = document.querySelector(".search-panel .close-btn"); if (searchOpenBtn) { searchOpenBtn.addEventListener("click", function (e) { e.preventDefault(); searchPanel.style.display = "block"; }); searchCloseBtn.addEventListener("click", function (e) { e.preventDefault(); searchPanel.style.display = "none"; }); } // ------------------------------------------------------- // // Tooltips init // ------------------------------------------------------ // var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl); }); // ------------------------------------------------------- // // Sidebar Functionality // ------------------------------------------------------ // var sidebarToggler = document.querySelector(".sidebar-toggle"); var sidebar = document.querySelector("#sidebar"); var pageContent = document.querySelector(".page-content"); var navBrand = document.querySelector(".navbar-brand"); if (sidebarToggler) { sidebarToggler.addEventListener("click", function () { this.classList.toggle("active"); navBrand.classList.toggle("active"); sidebar.classList.toggle("shrinked"); pageContent.classList.toggle("active"); document.dispatchEvent(new Event("sidebarChanged")); }); } function bsValidationBehavior(errorInputs, form) { function watchError() { errorInputs.forEach((input) => { if (input.classList.contains("js-validate-error-field")) { input.classList.add("is-invalid"); input.classList.remove("is-valid"); } else { input.classList.remove("is-invalid"); input.classList.add("is-valid"); } }); } watchError(); } // ------------------------------------------------------- // // Login Form Validation // ------------------------------------------------------ // let loginForm = document.querySelector(".login-form"); if (loginForm) { new window.JustValidate(".login-form", { rules: { loginUsername: { required: true, email: true, }, loginPassword: { required: true, }, }, messages: { loginUsername: "Please enter a valid email", loginPassword: "Please enter your password", }, invalidFormCallback: function () { let errorInputs = document.querySelectorAll(".login-form input[required]"); bsValidationBehavior(errorInputs, loginForm); loginForm.addEventListener("keyup", () => bsValidationBehavior(errorInputs, loginForm)); }, }); } // ------------------------------------------------------- // // Register Form Validation // ------------------------------------------------------ // let registerForm = document.querySelector(".register-form"); if (registerForm) { new window.JustValidate(".register-form", { rules: { registerUsername: { required: true, }, registerEmail: { required: true, email: true, }, registerPassword: { required: true, }, registerAgree: { required: true, }, }, messages: { registerUsername: "Please enter your username", registerEmail: "Please enter a valid email address", registerPassword: "Please enter your password", registerAgree: "Your agreement is required", }, invalidFormCallback: function () { let errorInputs = document.querySelectorAll(".register-form input[required]"); bsValidationBehavior(errorInputs, registerForm); registerForm.addEventListener("keyup", () => bsValidationBehavior(errorInputs, registerForm)); registerForm.addEventListener("change", () => bsValidationBehavior(errorInputs, registerForm)); }, }); } // ------------------------------------------------------- // // Profile page choices // ------------------------------------------------------ // function injectClassess(x) { let pickerCustomClass = x.dataset.customclass; let pickerSevClasses = pickerCustomClass.split(" "); x.parentElement.classList.add.apply(x.parentElement.classList, pickerSevClasses); } const profileCountryChoices = document.querySelector(".profile-country-choices"); if (profileCountryChoices) { const countryChoices = new Choices(profileCountryChoices, { searchEnabled: false, placeholder: false, callbackOnInit: () => injectClassess(profileCountryChoices), }); } // ------------------------------------------------------- // // Masonry with ImagesLoaded // ------------------------------------------------------ // const masonryGrid = document.querySelector(".msnry-grid"); if (masonryGrid) { var msnry = new Masonry(masonryGrid, { percentPosition: true, }); imagesLoaded(masonryGrid).on("progress", function () { msnry.layout(); }); } });