260 lines
8.9 KiB
JavaScript
260 lines
8.9 KiB
JavaScript
// =========================================================
|
|
// Material Kit 2 - v3.0.4
|
|
// =========================================================
|
|
|
|
// Product Page: https://www.creative-tim.com/product/soft-ui-design-system
|
|
// Copyright 2021 Creative Tim (https://www.creative-tim.com)
|
|
|
|
// Coded by Creative Tim
|
|
|
|
// =========================================================
|
|
|
|
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
|
|
// initialization of Popovers
|
|
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
|
|
var popoverList = popoverTriggerList.map(function(popoverTriggerEl) {
|
|
return new bootstrap.Popover(popoverTriggerEl)
|
|
})
|
|
|
|
// initialization of Tooltips
|
|
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
|
|
var tooltipList = tooltipTriggerList.map(function(tooltipTriggerEl) {
|
|
return new bootstrap.Tooltip(tooltipTriggerEl)
|
|
})
|
|
|
|
// helper for adding on all elements multiple attributes
|
|
function setAttributes(el, options) {
|
|
Object.keys(options).forEach(function(attr) {
|
|
el.setAttribute(attr, options[attr]);
|
|
})
|
|
}
|
|
|
|
// activate popovers
|
|
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-toggle="popover"]'))
|
|
var popoverList = popoverTriggerList.map(function(popoverTriggerEl) {
|
|
return new bootstrap.Popover(popoverTriggerEl)
|
|
})
|
|
|
|
// activate tooltips
|
|
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-toggle="tooltip"]'))
|
|
var tooltipList = tooltipTriggerList.map(function(tooltipTriggerEl) {
|
|
return new bootstrap.Tooltip(tooltipTriggerEl)
|
|
})
|
|
|
|
// Tabs navigation
|
|
|
|
var total = document.querySelectorAll('.nav-pills');
|
|
|
|
total.forEach(function(item, i) {
|
|
var moving_div = document.createElement('div');
|
|
var first_li = item.querySelector('li:first-child .nav-link');
|
|
var tab = first_li.cloneNode();
|
|
tab.innerHTML = "-";
|
|
|
|
moving_div.classList.add('moving-tab', 'position-absolute', 'nav-link');
|
|
moving_div.appendChild(tab);
|
|
item.appendChild(moving_div);
|
|
|
|
var list_length = item.getElementsByTagName("li").length;
|
|
|
|
moving_div.style.padding = '0px';
|
|
moving_div.style.width = item.querySelector('li:nth-child(1)').offsetWidth + 'px';
|
|
moving_div.style.transform = 'translate3d(0px, 0px, 0px)';
|
|
moving_div.style.transition = '.5s ease';
|
|
|
|
item.onmouseover = function(event) {
|
|
let target = getEventTarget(event);
|
|
let li = target.closest('li'); // get reference
|
|
if (li) {
|
|
let nodes = Array.from(li.closest('ul').children); // get array
|
|
let index = nodes.indexOf(li) + 1;
|
|
item.querySelector('li:nth-child(' + index + ') .nav-link').onclick = function() {
|
|
moving_div = item.querySelector('.moving-tab');
|
|
let sum = 0;
|
|
if (item.classList.contains('flex-column')) {
|
|
for (var j = 1; j <= nodes.indexOf(li); j++) {
|
|
sum += item.querySelector('li:nth-child(' + j + ')').offsetHeight;
|
|
}
|
|
moving_div.style.transform = 'translate3d(0px,' + sum + 'px, 0px)';
|
|
moving_div.style.height = item.querySelector('li:nth-child(' + j + ')').offsetHeight;
|
|
} else {
|
|
for (var j = 1; j <= nodes.indexOf(li); j++) {
|
|
sum += item.querySelector('li:nth-child(' + j + ')').offsetWidth;
|
|
}
|
|
moving_div.style.transform = 'translate3d(' + sum + 'px, 0px, 0px)';
|
|
moving_div.style.width = item.querySelector('li:nth-child(' + index + ')').offsetWidth + 'px';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
// Tabs navigation resize
|
|
|
|
window.addEventListener('resize', function(event) {
|
|
total.forEach(function(item, i) {
|
|
item.querySelector('.moving-tab').remove();
|
|
var moving_div = document.createElement('div');
|
|
var tab = item.querySelector(".nav-link.active").cloneNode();
|
|
tab.innerHTML = "-";
|
|
|
|
moving_div.classList.add('moving-tab', 'position-absolute', 'nav-link');
|
|
moving_div.appendChild(tab);
|
|
|
|
item.appendChild(moving_div);
|
|
|
|
moving_div.style.padding = '0px';
|
|
moving_div.style.transition = '.5s ease';
|
|
|
|
let li = item.querySelector(".nav-link.active").parentElement;
|
|
|
|
if (li) {
|
|
let nodes = Array.from(li.closest('ul').children); // get array
|
|
let index = nodes.indexOf(li) + 1;
|
|
|
|
let sum = 0;
|
|
if (item.classList.contains('flex-column')) {
|
|
for (var j = 1; j <= nodes.indexOf(li); j++) {
|
|
sum += item.querySelector('li:nth-child(' + j + ')').offsetHeight;
|
|
}
|
|
moving_div.style.transform = 'translate3d(0px,' + sum + 'px, 0px)';
|
|
moving_div.style.width = item.querySelector('li:nth-child(' + index + ')').offsetWidth + 'px';
|
|
moving_div.style.height = item.querySelector('li:nth-child(' + j + ')').offsetHeight;
|
|
} else {
|
|
for (var j = 1; j <= nodes.indexOf(li); j++) {
|
|
sum += item.querySelector('li:nth-child(' + j + ')').offsetWidth;
|
|
}
|
|
moving_div.style.transform = 'translate3d(' + sum + 'px, 0px, 0px)';
|
|
moving_div.style.width = item.querySelector('li:nth-child(' + index + ')').offsetWidth + 'px';
|
|
|
|
}
|
|
}
|
|
});
|
|
|
|
if (window.innerWidth < 991) {
|
|
total.forEach(function(item, i) {
|
|
if (!item.classList.contains('flex-column')) {
|
|
item.classList.add('flex-column', 'on-resize');
|
|
}
|
|
});
|
|
} else {
|
|
total.forEach(function(item, i) {
|
|
if (item.classList.contains('on-resize')) {
|
|
item.classList.remove('flex-column', 'on-resize');
|
|
}
|
|
})
|
|
}
|
|
});
|
|
|
|
|
|
function getEventTarget(e) {
|
|
e = e || window.event;
|
|
return e.target || e.srcElement;
|
|
}
|
|
|
|
// End tabs navigation
|
|
|
|
// Copy code function
|
|
|
|
function copyCode(el) {
|
|
const selection = window.getSelection();
|
|
const range = document.createRange();
|
|
const textToCopy = el.nextElementSibling;
|
|
range.selectNodeContents(textToCopy);
|
|
selection.removeAllRanges();
|
|
selection.addRange(range);
|
|
const successful = document.execCommand('copy');
|
|
window.getSelection().removeAllRanges()
|
|
if (!el.parentElement.querySelector('.alert')) {
|
|
var alert = document.createElement('div');
|
|
alert.classList.add('alert', 'alert-success', 'position-absolute', 'top-0', 'border-0', 'text-white', 'w-25', 'end-0', 'start-0', 'mt-2', 'mx-auto', 'py-2');
|
|
alert.style.transform = 'translate3d(0px, 0px, 0px)'
|
|
alert.style.opacity = '0';
|
|
alert.style.transition = '.35s ease';
|
|
setTimeout(function() {
|
|
alert.style.transform = 'translate3d(0px, 20px, 0px)';
|
|
alert.style.setProperty("opacity", "1", "important");
|
|
}, 100);
|
|
alert.innerHTML = "Code successfully copied!";
|
|
el.parentElement.appendChild(alert);
|
|
setTimeout(function() {
|
|
alert.style.transform = 'translate3d(0px, 0px, 0px)'
|
|
alert.style.setProperty("opacity", "0", "important");
|
|
}, 2000);
|
|
setTimeout(function() {
|
|
el.parentElement.querySelector('.alert').remove();
|
|
}, 2500);
|
|
}
|
|
}
|
|
|
|
// End copy code function
|
|
|
|
|
|
window.onload = function() {
|
|
// Material Design Input function
|
|
var inputs = document.querySelectorAll('input');
|
|
|
|
for (var i = 0; i < inputs.length; i++) {
|
|
inputs[i].addEventListener('focus', function(e) {
|
|
this.parentElement.classList.add('is-focused');
|
|
}, false);
|
|
|
|
inputs[i].onkeyup = function(e) {
|
|
if (this.value != "") {
|
|
this.parentElement.classList.add('is-filled');
|
|
} else {
|
|
this.parentElement.classList.remove('is-filled');
|
|
}
|
|
};
|
|
|
|
inputs[i].addEventListener('focusout', function(e) {
|
|
if (this.value != "") {
|
|
this.parentElement.classList.add('is-filled');
|
|
}
|
|
this.parentElement.classList.remove('is-focused');
|
|
}, false);
|
|
}
|
|
|
|
// Ripple Effect
|
|
var ripples = document.querySelectorAll('.btn');
|
|
|
|
for (var i = 0; i < ripples.length; i++) {
|
|
ripples[i].addEventListener('click', function(e) {
|
|
var targetEl = e.target;
|
|
var rippleDiv = targetEl.querySelector('.ripple');
|
|
|
|
rippleDiv = document.createElement('span');
|
|
rippleDiv.classList.add('ripple');
|
|
rippleDiv.style.width = rippleDiv.style.height = Math.max(targetEl.offsetWidth, targetEl.offsetHeight) + 'px';
|
|
targetEl.appendChild(rippleDiv);
|
|
|
|
rippleDiv.style.left = (e.offsetX - rippleDiv.offsetWidth / 2) + 'px';
|
|
rippleDiv.style.top = (e.offsetY - rippleDiv.offsetHeight / 2) + 'px';
|
|
rippleDiv.classList.add('ripple');
|
|
setTimeout(function() {
|
|
rippleDiv.parentElement.removeChild(rippleDiv);
|
|
}, 600);
|
|
}, false);
|
|
}
|
|
};
|
|
|
|
// Returns a function, that, as long as it continues to be invoked, will not
|
|
// be triggered. The function will be called after it stops being called for
|
|
// N milliseconds. If `immediate` is passed, trigger the function on the
|
|
// leading edge, instead of the trailing.
|
|
|
|
function debounce(func, wait, immediate) {
|
|
var timeout;
|
|
return function() {
|
|
var context = this,
|
|
args = arguments;
|
|
clearTimeout(timeout);
|
|
timeout = setTimeout(function() {
|
|
timeout = null;
|
|
if (!immediate) func.apply(context, args);
|
|
}, wait);
|
|
if (immediate && !timeout) func.apply(context, args);
|
|
};
|
|
}; |