LinkStack/assets/js/hope-ui.js

514 lines
18 KiB
JavaScript

/*
* Version: 1.2.0
* Template: Hope-Ui - Responsive Bootstrap 5 Admin Dashboard Template
* Author: iqonic.design
* Design and Developed by: iqonic.design
* NOTE: This file contains the script for initialize & listener Template.
*/
/*----------------------------------------------
Index Of Script
------------------------------------------------
------- Plugin Init --------
:: Sticky-Nav
:: Popover
:: Tooltip
:: Circle Progress
:: Progress Bar
:: NoUiSlider
:: CopyToClipboard
:: CounterUp 2
:: SliderTab
:: Data Tables
:: Active Class for Pricing Table
:: AOS Animation Plugin
------ Functions --------
:: Resize Plugins
:: Loader Init
:: Sidebar Toggle
:: Back To Top
------- Listners ---------
:: DOMContentLoaded
:: Window Resize
:: DropDown
:: Form Validation
:: Flatpickr
------------------------------------------------
Index Of Script
----------------------------------------------*/
"use strict";
/*---------------------------------------------------------------------
Sticky-Nav
-----------------------------------------------------------------------*/
window.addEventListener('scroll', function () {
let yOffset = document.documentElement.scrollTop;
let navbar = document.querySelector(".navs-sticky")
if (navbar !== null) {
if (yOffset >= 100) {
navbar.classList.add("menu-sticky");
} else {
navbar.classList.remove("menu-sticky");
}
}
});
/*---------------------------------------------------------------------
Popover
-----------------------------------------------------------------------*/
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
if (typeof bootstrap !== typeof undefined) {
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
})
}
/*---------------------------------------------------------------------
Tooltip
-----------------------------------------------------------------------*/
if (typeof bootstrap !== typeof undefined) {
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-sidebar-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
}
/*---------------------------------------------------------------------
Circle Progress
-----------------------------------------------------------------------*/
const progressBar = document.getElementsByClassName('circle-progress')
if (typeof progressBar !== typeof undefined) {
Array.from(progressBar, (elem) => {
const minValue = elem.getAttribute('data-min-value')
const maxValue = elem.getAttribute('data-max-value')
const value = elem.getAttribute('data-value')
const type = elem.getAttribute('data-type')
if (elem.getAttribute('id') !== '' && elem.getAttribute('id') !== null) {
new CircleProgress('#' + elem.getAttribute('id'), {
min: minValue,
max: maxValue,
value: value,
textFormat: type,
});
}
})
}
/*---------------------------------------------------------------------
Progress Bar
-----------------------------------------------------------------------*/
const progressBarInit = (elem) => {
const currentValue = elem.getAttribute('aria-valuenow')
elem.style.width = '0%'
elem.style.transition = 'width 2s'
if (typeof Waypoint !== typeof undefined) {
new Waypoint({
element: elem,
handler: function () {
setTimeout(() => {
elem.style.width = currentValue + '%'
}, 100);
},
offset: 'bottom-in-view',
})
}
}
const customProgressBar = document.querySelectorAll('[data-toggle="progress-bar"]')
Array.from(customProgressBar, (elem) => {
progressBarInit(elem)
})
/*---------------------------------------------------------------------
noUiSlider
-----------------------------------------------------------------------*/
const rangeSlider = document.querySelectorAll('.range-slider');
Array.from(rangeSlider, (elem) => {
if (typeof noUiSlider !== typeof undefined) {
noUiSlider.create(elem, {
start: [20, 80],
connect: true,
range: {
'min': 0,
'max': 100
}
})
}
})
const slider = document.querySelectorAll('.slider');
Array.from(slider, (elem) => {
if (typeof noUiSlider !== typeof undefined) {
noUiSlider.create(elem, {
start: 50,
connect: [true, false],
range: {
'min': 0,
'max': 100
}
})
}
})
/*---------------------------------------------------------------------
Copy To Clipboard
-----------------------------------------------------------------------*/
const copy = document.querySelectorAll('[data-toggle="copy"]')
if (typeof copy !== typeof undefined) {
Array.from(copy, (elem) => {
elem.addEventListener('click', (e) => {
const target = elem.getAttribute("data-copy-target");
let value = elem.getAttribute("data-copy-value");
const container = document.querySelector(target);
if (container !== undefined && container !== null) {
if (container.value !== undefined && container.value !== null) {
value = container.value;
} else {
value = container.innerHTML;
}
}
if (value !== null) {
const elem = document.createElement("input");
document.querySelector("body").appendChild(elem);
elem.value = value;
elem.select();
document.execCommand("copy");
elem.remove();
}
})
});
}
/*---------------------------------------------------------------------
CounterUp 2
-----------------------------------------------------------------------*/
if (window.counterUp !== undefined) {
const counterUp = window.counterUp["default"];
const counterUp2 = document.querySelectorAll('.counter')
Array.from(counterUp2, (el) => {
if (typeof Waypoint !== typeof undefined) {
const waypoint = new Waypoint({
element: el,
handler: function () {
counterUp(el, {
duration: 1000,
delay: 10,
});
this.destroy();
},
offset: "bottom-in-view",
});
}
})
}
/*---------------------------------------------------------------------
SliderTab
-----------------------------------------------------------------------*/
Array.from(document.querySelectorAll('[data-toggle="slider-tab"]'), (elem) => {
if (typeof SliderTab !== typeof undefined) {
new SliderTab(elem)
}
})
let Scrollbar
if (typeof Scrollbar !== typeof null) {
if (document.querySelectorAll(".data-scrollbar").length) {
Scrollbar = window.Scrollbar
Scrollbar.init(document.querySelector('.data-scrollbar'), {
continuousScrolling: false,
})
}
}
/*---------------------------------------------------------------------
Data tables
-----------------------------------------------------------------------*/
if ($.fn.DataTable) {
if ($('[data-toggle="data-table"]').length) {
const table = $('[data-toggle="data-table"]').DataTable({
"dom": '<"row align-items-center"<"col-md-6" l><"col-md-6" f>><"table-responsive border-bottom my-3" rt><"row align-items-center" <"col-md-6" i><"col-md-6" p>><"clear">',
});
}
}
/*---------------------------------------------------------------------
Active Class for Pricing Table
-----------------------------------------------------------------------*/
const tableTh = document.querySelectorAll('#my-table tr th')
const tableTd = document.querySelectorAll('#my-table td')
if (tableTh !== null) {
Array.from(tableTh, (elem) => {
elem.addEventListener('click', (e) => {
Array.from(tableTh, (th) => {
if (th.children.length) {
th.children[0].classList.remove('active')
}
})
elem.children[0].classList.add('active')
Array.from(tableTd, (td) => td.classList.remove('active'))
const col = Array.prototype.indexOf.call(document.querySelector('#my-table tr').children, elem);
const tdIcons = document.querySelectorAll("#my-table tr td:nth-child(" + parseInt(col + 1) + ")");
Array.from(tdIcons, (td) => td.classList.add('active'))
})
})
}
/*---------------------------------------------------------------------
AOS Animation Plugin
-----------------------------------------------------------------------*/
if (typeof AOS !== typeof undefined) {
AOS.init({
startEvent: 'DOMContentLoaded',
disable: function () {
var maxWidth = 996;
return window.innerWidth < maxWidth;
},
throttleDelay: 10,
once: true,
duration: 700,
offset: 10
});
}
/*---------------------------------------------------------------------
Resize Plugins
-----------------------------------------------------------------------*/
const resizePlugins = () => {
// sidebar-mini
const tabs = document.querySelectorAll('.nav')
const sidebarResponsive = document.querySelector('.sidebar-default')
if (window.innerWidth < 1025) {
Array.from(tabs, (elem) => {
if (!elem.classList.contains('flex-column') && elem.classList.contains('nav-tabs') && elem.classList.contains('nav-pills')) {
elem.classList.add('flex-column', 'on-resize');
}
})
if (sidebarResponsive !== null) {
if (!sidebarResponsive.classList.contains('sidebar-mini')) {
sidebarResponsive.classList.add('sidebar-mini', 'on-resize')
}
}
} else {
Array.from(tabs, (elem) => {
if (elem.classList.contains('on-resize')) {
elem.classList.remove('flex-column', 'on-resize');
}
})
if (sidebarResponsive !== null) {
if (sidebarResponsive.classList.contains('sidebar-mini') && sidebarResponsive.classList.contains('on-resize')) {
sidebarResponsive.classList.remove('sidebar-mini', 'on-resize')
}
}
}
}
/*---------------------------------------------------------------------
LoaderInit
-----------------------------------------------------------------------*/
const loaderInit = () => {
const loader = document.querySelector('.loader')
setTimeout(() => {
loader.classList.add('animate__animated', 'animate__fadeOut')
setTimeout(() => {
loader.classList.add('d-none')
}, 500)
}, 500)
}
/*---------------------------------------------------------------------
Sidebar Toggle
-----------------------------------------------------------------------*/
const sidebarToggle = (elem) => {
elem.addEventListener('click', (e) => {
const sidebar = document.querySelector('.sidebar')
if (sidebar.classList.contains('sidebar-mini')) {
sidebar.classList.remove('sidebar-mini')
} else {
sidebar.classList.add('sidebar-mini')
}
})
}
const sidebarToggleBtn = document.querySelectorAll('[data-toggle="sidebar"]')
const sidebar = document.querySelector('.sidebar-default')
if (sidebar !== null) {
const sidebarActiveItem = sidebar.querySelectorAll('.active')
Array.from(sidebarActiveItem, (elem) => {
if (!elem.closest('ul').classList.contains('iq-main-menu')) {
const childMenu = elem.closest('ul')
childMenu.classList.add('show')
const parentMenu = childMenu.closest('li').querySelector('.nav-link')
parentMenu.classList.add('collapsed')
parentMenu.setAttribute('aria-expanded', true)
}
})
}
Array.from(sidebarToggleBtn, (sidebarBtn) => {
sidebarToggle(sidebarBtn)
})
/*---------------------------------------------------------------------------
Back To Top
----------------------------------------------------------------------------*/
const backToTop = document.getElementById("back-to-top")
if (backToTop !== null && backToTop !== undefined) {
document.getElementById("back-to-top").classList.add("animate__animated", "animate__fadeOut")
window.addEventListener('scroll', (e) => {
if (document.documentElement.scrollTop > 250) {
document.getElementById("back-to-top").classList.remove("animate__fadeOut")
document.getElementById("back-to-top").classList.add("animate__fadeIn")
} else {
document.getElementById("back-to-top").classList.remove("animate__fadeIn")
document.getElementById("back-to-top").classList.add("animate__fadeOut")
}
})
// scroll body to 0px on click
document.querySelector('#top').addEventListener('click', (e) => {
e.preventDefault()
window.scrollTo({ top: 0, behavior: 'smooth' });
})
}
/*---------------------------------------------------------------------
DOMContentLoaded
-----------------------------------------------------------------------*/
document.addEventListener('DOMContentLoaded', (event) => {
resizePlugins()
loaderInit()
});
/*---------------------------------------------------------------------
Window Resize
-----------------------------------------------------------------------*/
window.addEventListener('resize', function (event) {
resizePlugins()
});
/*---------------------------------------------------------------------
| | | | | DropDown
-----------------------------------------------------------------------*/
function darken_screen(yesno) {
if (yesno == true) {
if (document.querySelector('.screen-darken') !== null) {
document.querySelector('.screen-darken').classList.add('active');
}
}
else if (yesno == false) {
if (document.querySelector('.screen-darken') !== null) {
document.querySelector('.screen-darken').classList.remove('active');
}
}
}
function close_offcanvas() {
darken_screen(false);
if (document.querySelector('.mobile-offcanvas.show') !== null) {
document.querySelector('.mobile-offcanvas.show').classList.remove('show');
document.body.classList.remove('offcanvas-active');
}
}
function show_offcanvas(offcanvas_id) {
darken_screen(true);
if (document.getElementById(offcanvas_id) !== null) {
document.getElementById(offcanvas_id).classList.add('show');
document.body.classList.add('offcanvas-active');
}
}
document.addEventListener("DOMContentLoaded", function () {
document.querySelectorAll('[data-trigger]').forEach(function (everyelement) {
let offcanvas_id = everyelement.getAttribute('data-trigger');
everyelement.addEventListener('click', function (e) {
e.preventDefault();
show_offcanvas(offcanvas_id);
});
});
if (document.querySelectorAll('.btn-close')) {
document.querySelectorAll('.btn-close').forEach(function (everybutton) {
everybutton.addEventListener('click', function (e) {
close_offcanvas();
});
});
}
if (document.querySelector('.screen-darken')) {
document.querySelector('.screen-darken').addEventListener('click', function (event) {
close_offcanvas();
});
}
});
if (document.querySelector('#navbarSideCollapse')) {
document.querySelector('#navbarSideCollapse').addEventListener('click', function () {
document.querySelector('.offcanvas-collapse').classList.toggle('open')
})
}
/*---------------------------------------------------------------------
Form Validation
-----------------------------------------------------------------------*/
// Example starter JavaScript for disabling form submissions if there are invalid fields
window.addEventListener('load', function () {
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.getElementsByClassName('needs-validation');
// Loop over them and prevent submission
var validation = Array.prototype.filter.call(forms, function (form) {
form.addEventListener('submit', function (event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
}, false);
});
}, false);
(function () {
/*----------------------------------------------------------
Flatpickr
-------------------------------------------------------------*/
const date_flatpickr = document.querySelectorAll('.date_flatpicker')
Array.from(date_flatpickr, (elem) => {
if (typeof flatpickr !== typeof undefined) {
flatpickr(elem, {
minDate: "today",
dateFormat: "Y-m-d",
})
}
})
/*----------Range Flatpickr--------------*/
const range_flatpicker = document.querySelectorAll('.range_flatpicker')
Array.from(range_flatpicker, (elem) => {
if (typeof flatpickr !== typeof undefined) {
flatpickr(elem, {
mode: "range",
minDate: "today",
dateFormat: "Y-m-d",
})
}
})
/*------------Wrap Flatpickr---------------*/
const wrap_flatpicker = document.querySelectorAll('.wrap_flatpicker')
Array.from(wrap_flatpicker, (elem) => {
if (typeof flatpickr !== typeof undefined) {
flatpickr(elem, {
wrap: true,
minDate: "today",
dateFormat: "Y-m-d",
})
}
})
/*-------------Time Flatpickr---------------*/
const time_flatpickr = document.querySelectorAll('.time_flatpicker')
Array.from(time_flatpickr, (elem) => {
if (typeof flatpickr !== typeof undefined) {
flatpickr(elem, {
enableTime: true,
noCalendar: true,
dateFormat: "H:i",
})
}
})
/*-------------Inline Flatpickr-----------------*/
const inline_flatpickr = document.querySelectorAll('.inline_flatpickr')
Array.from(inline_flatpickr, (elem) => {
if (typeof flatpickr !== typeof undefined) {
flatpickr(elem, {
inline: true,
minDate: "today",
dateFormat: "Y-m-d",
})
}
})
})();