Files
2026-08-27 11:22:01 -06:00

244 lines
9.6 KiB
JavaScript
Executable File

"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();
});
}
});