"use strict";
// Class definition
var KTApp = function () {
var initialized = false;
var select2FocusFixInitialized = false;
var countUpInitialized = false;
var createBootstrapTooltip = function (el, options) {
if (el.getAttribute("data-kt-initialized") === "1") {
return;
}
var delay = {};
// Handle delay options
if (el.hasAttribute('data-bs-delay-hide')) {
delay['hide'] = el.getAttribute('data-bs-delay-hide');
}
if (el.hasAttribute('data-bs-delay-show')) {
delay['show'] = el.getAttribute('data-bs-delay-show');
}
if (delay) {
options['delay'] = delay;
}
// Check dismiss options
if (el.hasAttribute('data-bs-dismiss') && el.getAttribute('data-bs-dismiss') == 'click') {
options['dismiss'] = 'click';
}
// Initialize popover
var tp = new bootstrap.Tooltip(el, options);
// Handle dismiss
if (options['dismiss'] && options['dismiss'] === 'click') {
// Hide popover on element click
el.addEventListener("click", function (e) {
tp.hide();
});
}
el.setAttribute("data-kt-initialized", "1");
return tp;
}
var createBootstrapTooltips = function () {
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
createBootstrapTooltip(tooltipTriggerEl, {});
});
}
var createBootstrapPopover = function (el, options) {
if (el.getAttribute("data-kt-initialized") === "1") {
return;
}
var delay = {};
// Handle delay options
if (el.hasAttribute('data-bs-delay-hide')) {
delay['hide'] = el.getAttribute('data-bs-delay-hide');
}
if (el.hasAttribute('data-bs-delay-show')) {
delay['show'] = el.getAttribute('data-bs-delay-show');
}
if (delay) {
options['delay'] = delay;
}
// Handle dismiss option
if (el.getAttribute('data-bs-dismiss') == 'true') {
options['dismiss'] = true;
}
if (options['dismiss'] === true) {
options['template'] = '
'
}
// Initialize popover
var popover = new bootstrap.Popover(el, options);
// Handle dismiss click
if (options['dismiss'] === true) {
var dismissHandler = function (e) {
popover.hide();
}
el.addEventListener('shown.bs.popover', function () {
var dismissEl = document.getElementById(el.getAttribute('aria-describedby'));
dismissEl.addEventListener('click', dismissHandler);
});
el.addEventListener('hide.bs.popover', function () {
var dismissEl = document.getElementById(el.getAttribute('aria-describedby'));
dismissEl.removeEventListener('click', dismissHandler);
});
}
el.setAttribute("data-kt-initialized", "1");
return popover;
}
var createBootstrapPopovers = function () {
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
createBootstrapPopover(popoverTriggerEl, {});
});
}
var createBootstrapToasts = function () {
var toastElList = [].slice.call(document.querySelectorAll('.toast'));
var toastList = toastElList.map(function (toastEl) {
if (toastEl.getAttribute("data-kt-initialized") === "1") {
return;
}
toastEl.setAttribute("data-kt-initialized", "1");
return new bootstrap.Toast(toastEl, {})
});
}
var createButtons = function () {
var buttonsGroup = [].slice.call(document.querySelectorAll('[data-kt-buttons="true"]'));
buttonsGroup.map(function (group) {
if (group.getAttribute("data-kt-initialized") === "1") {
return;
}
var selector = group.hasAttribute('data-kt-buttons-target') ? group.getAttribute('data-kt-buttons-target') : '.btn';
var activeButtons = [].slice.call(group.querySelectorAll(selector));
// Toggle Handler
KTUtil.on(group, selector, 'click', function (e) {
activeButtons.map(function (button) {
button.classList.remove('active');
});
this.classList.add('active');
});
group.setAttribute("data-kt-initialized", "1");
});
}
var createDateRangePickers = function() {
// Check if jQuery included
if (typeof jQuery == 'undefined') {
return;
}
// Check if daterangepicker included
if (typeof $.fn.daterangepicker === 'undefined') {
return;
}
var elements = [].slice.call(document.querySelectorAll('[data-kt-daterangepicker="true"]'));
var start = moment().subtract(29, 'days');
var end = moment();
elements.map(function (element) {
if (element.getAttribute("data-kt-initialized") === "1") {
return;
}
var display = element.querySelector('div');
var attrOpens = element.hasAttribute('data-kt-daterangepicker-opens') ? element.getAttribute('data-kt-daterangepicker-opens') : 'left';
var range = element.getAttribute('data-kt-daterangepicker-range');
var cb = function(start, end) {
var current = moment();
if (display) {
if ( current.isSame(start, "day") && current.isSame(end, "day") ) {
display.innerHTML = start.format('D MMM YYYY');
} else {
display.innerHTML = start.format('D MMM YYYY') + ' - ' + end.format('D MMM YYYY');
}
}
}
if ( range === "today" ) {
start = moment();
end = moment();
}
$(element).daterangepicker({
startDate: start,
endDate: end,
opens: attrOpens,
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
}
}, cb);
cb(start, end);
element.setAttribute("data-kt-initialized", "1");
});
}
var createSelect2 = function () {
// Check if jQuery included
if (typeof jQuery == 'undefined') {
return;
}
// Check if select2 included
if (typeof $.fn.select2 === 'undefined') {
return;
}
var elements = [].slice.call(document.querySelectorAll('[data-control="select2"], [data-kt-select2="true"]'));
elements.map(function (element) {
if (element.getAttribute("data-kt-initialized") === "1") {
return;
}
var options = {
dir: document.body.getAttribute('direction')
};
if (element.getAttribute('data-hide-search') == 'true') {
options.minimumResultsForSearch = Infinity;
}
$(element).select2(options);
// Handle Select2's KTMenu parent case
if (element.hasAttribute('data-dropdown-parent') && element.hasAttribute('multiple')) {
var parentEl = document.querySelector(element.getAttribute('data-dropdown-parent'));
if (parentEl && parentEl.hasAttribute("data-kt-menu")) {
var menu = new KTMenu(parentEl);
if (menu) {
$(element).on('select2:unselect', function (e) {
element.setAttribute("data-multiple-unselect", "1");
});
menu.on("kt.menu.dropdown.hide", function(item) {
if (element.getAttribute("data-multiple-unselect") === "1") {
element.removeAttribute("data-multiple-unselect");
return false;
}
});
}
}
}
element.setAttribute("data-kt-initialized", "1");
});
}
var createAutosize = function () {
if (typeof autosize === 'undefined') {
return;
}
var inputs = [].slice.call(document.querySelectorAll('[data-kt-autosize="true"]'));
inputs.map(function (input) {
if (input.getAttribute("data-kt-initialized") === "1") {
return;
}
autosize(input);
input.setAttribute("data-kt-initialized", "1");
});
}
var createCountUp = function () {
if (typeof countUp === 'undefined') {
return;
}
var elements = [].slice.call(document.querySelectorAll('[data-kt-countup="true"]:not(.counted)'));
elements.map(function (element) {
if (KTUtil.isInViewport(element) && KTUtil.visible(element)) {
if (element.getAttribute("data-kt-initialized") === "1") {
return;
}
var options = {};
var value = element.getAttribute('data-kt-countup-value');
value = parseFloat(value.replace(/,/g, ""));
if (element.hasAttribute('data-kt-countup-start-val')) {
options.startVal = parseFloat(element.getAttribute('data-kt-countup-start-val'));
}
if (element.hasAttribute('data-kt-countup-duration')) {
options.duration = parseInt(element.getAttribute('data-kt-countup-duration'));
}
if (element.hasAttribute('data-kt-countup-decimal-places')) {
options.decimalPlaces = parseInt(element.getAttribute('data-kt-countup-decimal-places'));
}
if (element.hasAttribute('data-kt-countup-prefix')) {
options.prefix = element.getAttribute('data-kt-countup-prefix');
}
if (element.hasAttribute('data-kt-countup-separator')) {
options.separator = element.getAttribute('data-kt-countup-separator');
}
if (element.hasAttribute('data-kt-countup-suffix')) {
options.suffix = element.getAttribute('data-kt-countup-suffix');
}
var count = new countUp.CountUp(element, value, options);
count.start();
element.classList.add('counted');
element.setAttribute("data-kt-initialized", "1");
}
});
}
var createCountUpTabs = function () {
if (typeof countUp === 'undefined') {
return;
}
if (countUpInitialized === false) {
// Initial call
createCountUp();
// Window scroll event handler
window.addEventListener('scroll', createCountUp);
}
// Tabs shown event handler
var tabs = [].slice.call(document.querySelectorAll('[data-kt-countup-tabs="true"][data-bs-toggle="tab"]'));
tabs.map(function (tab) {
if (tab.getAttribute("data-kt-initialized") === "1") {
return;
}
tab.addEventListener('shown.bs.tab', createCountUp);
tab.setAttribute("data-kt-initialized", "1");
});
countUpInitialized = true;
}
var createTinySliders = function () {
if (typeof tns === 'undefined') {
return;
}
// Sliders
const elements = Array.prototype.slice.call(document.querySelectorAll('[data-tns="true"]'), 0);
if (!elements && elements.length === 0) {
return;
}
elements.forEach(function (el) {
if (el.getAttribute("data-kt-initialized") === "1") {
return;
}
initTinySlider(el);
el.setAttribute("data-kt-initialized", "1");
});
}
var initTinySlider = function (el) {
if (!el) {
return;
}
const tnsOptions = {};
// Convert string boolean
const checkBool = function (val) {
if (val === 'true') {
return true;
}
if (val === 'false') {
return false;
}
return val;
};
// get extra options via data attributes
el.getAttributeNames().forEach(function (attrName) {
// more options; https://github.com/ganlanyuan/tiny-slider#options
if ((/^data-tns-.*/g).test(attrName)) {
let optionName = attrName.replace('data-tns-', '').toLowerCase().replace(/(?:[\s-])\w/g, function (match) {
return match.replace('-', '').toUpperCase();
});
if (attrName === 'data-tns-responsive') {
// fix string with a valid json
const jsonStr = el.getAttribute(attrName).replace(/(\w+:)|(\w+ :)/g, function (matched) {
return '"' + matched.substring(0, matched.length - 1) + '":';
});
try {
// convert json string to object
tnsOptions[optionName] = JSON.parse(jsonStr);
}
catch (e) {
}
}
else {
tnsOptions[optionName] = checkBool(el.getAttribute(attrName));
}
}
});
const opt = Object.assign({}, {
container: el,
slideBy: 'page',
autoplay: true,
center: true,
autoplayButtonOutput: false,
}, tnsOptions);
if (el.closest('.tns')) {
KTUtil.addClass(el.closest('.tns'), 'tns-initiazlied');
}
return tns(opt);
}
var initSmoothScroll = function () {
if (initialized === true) {
return;
}
if (typeof SmoothScroll === 'undefined') {
return;
}
new SmoothScroll('a[data-kt-scroll-toggle][href*="#"]', {
speed: 1000,
speedAsDuration: true,
offset: function (anchor, toggle) {
// Integer or Function returning an integer. How far to offset the scrolling anchor location in pixels
// This example is a function, but you could do something as simple as `offset: 25`
// An example returning different values based on whether the clicked link was in the header nav or not
if (anchor.hasAttribute('data-kt-scroll-offset')) {
var val = KTUtil.getResponsiveValue(anchor.getAttribute('data-kt-scroll-offset'));
return val;
} else {
return 0;
}
}
});
}
var initCard = function() {
// Toggle Handler
KTUtil.on(document.body, '[data-kt-card-action="remove"]', 'click', function (e) {
e.preventDefault();
const card = this.closest('.card');
if (!card) {
return;
}
const confirmMessage = this.getAttribute("data-kt-card-confirm-message");
const confirm = this.getAttribute("data-kt-card-confirm") === "true";
if (confirm) {
// Show message popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/
Swal.fire({
text: confirmMessage ? confirmMessage : "Are you sure to remove ?",
icon: "warning",
buttonsStyling: false,
confirmButtonText: "Confirm",
denyButtonText: "Cancel",
customClass: {
confirmButton: "btn btn-primary",
denyButton: "btn btn-danger"
}
}).then(function (result) {
if (result.isConfirmed) {
card.remove();
}
});
} else {
card.remove();
}
});
}
var initModal = function() {
var elements = Array.prototype.slice.call(document.querySelectorAll("[data-bs-stacked-modal]"));
if (elements && elements.length > 0) {
elements.forEach((element) => {
if (element.getAttribute("data-kt-initialized") === "1") {
return;
}
element.setAttribute("data-kt-initialized", "1");
element.addEventListener("click", function(e) {
e.preventDefault();
const modalEl = document.querySelector(this.getAttribute("data-bs-stacked-modal"));
if (modalEl) {
const modal = new bootstrap.Modal(modalEl, {backdrop: false});
modal.show();
}
});
});
}
}
var initCheck = function () {
if (initialized === true) {
return;
}
// Toggle Handler
KTUtil.on(document.body, '[data-kt-check="true"]', 'change', function (e) {
var check = this;
var targets = document.querySelectorAll(check.getAttribute('data-kt-check-target'));
KTUtil.each(targets, function (target) {
if (target.type == 'checkbox') {
target.checked = check.checked;
} else {
target.classList.toggle('active');
}
});
});
}
var initBootstrapCollapse = function() {
if (initialized === true) {
return;
}
KTUtil.on(document.body, '.collapsible[data-bs-toggle="collapse"]', 'click', function(e) {
if (this.classList.contains('collapsed')) {
this.classList.remove('active');
this.blur();
} else {
this.classList.add('active');
}
if (this.hasAttribute('data-kt-toggle-text')) {
var text = this.getAttribute('data-kt-toggle-text');
var target = this.querySelector('[data-kt-toggle-text-target="true"]');
var target = target ? target : this;
this.setAttribute('data-kt-toggle-text', target.innerText);
target.innerText = text;
}
});
}
var initBootstrapRotate = function() {
if (initialized === true) {
return;
}
KTUtil.on(document.body, '[data-kt-rotate="true"]', 'click', function(e) {
if (this.classList.contains('active')) {
this.classList.remove('active');
this.blur();
} else {
this.classList.add('active');
}
});
}
var initLozad = function() {
// Check if lozad included
if (typeof lozad === 'undefined') {
return;
}
const observer = lozad(); // lazy loads elements with default selector as '.lozad'
observer.observe();
}
var showPageLoading = function() {
document.body.classList.add('page-loading');
document.body.setAttribute('data-kt-app-page-loading', "on");
}
var hidePageLoading = function() {
// CSS3 Transitions only after page load(.page-loading or .app-page-loading class added to body tag and remove with JS on page load)
document.body.classList.remove('page-loading');
document.body.removeAttribute('data-kt-app-page-loading');
}
return {
init: function () {
initLozad();
initSmoothScroll();
initCard();
initModal();
initCheck();
initBootstrapCollapse();
initBootstrapRotate();
createBootstrapTooltips();
createBootstrapPopovers();
createBootstrapToasts();
createDateRangePickers();
createButtons();
createSelect2();
createCountUp();
createCountUpTabs();
createAutosize();
createTinySliders();
initialized = true;
},
initTinySlider: function(el) {
initTinySlider(el);
},
showPageLoading: function () {
showPageLoading();
},
hidePageLoading: function () {
hidePageLoading();
},
createBootstrapPopover: function(el, options) {
return createBootstrapPopover(el, options);
},
createBootstrapTooltip: function(el, options) {
return createBootstrapTooltip(el, options);
}
};
}();
// Declare KTApp for Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTApp;
}
"use strict";
// Class definition
var KTBlockUI = function(element, options) {
//////////////////////////////
// ** Private variables ** //
//////////////////////////////
var the = this;
if ( typeof element === "undefined" || element === null ) {
return;
}
// Default options
var defaultOptions = {
zIndex: false,
overlayClass: '',
overflow: 'hidden',
message: ''
};
////////////////////////////
// ** Private methods ** //
////////////////////////////
var _construct = function() {
if ( KTUtil.data(element).has('blockui') ) {
the = KTUtil.data(element).get('blockui');
} else {
_init();
}
}
var _init = function() {
// Variables
the.options = KTUtil.deepExtend({}, defaultOptions, options);
the.element = element;
the.overlayElement = null;
the.blocked = false;
the.positionChanged = false;
the.overflowChanged = false;
// Bind Instance
KTUtil.data(the.element).set('blockui', the);
}
var _block = function() {
if ( KTEventHandler.trigger(the.element, 'kt.blockui.block', the) === false ) {
return;
}
var isPage = (the.element.tagName === 'BODY');
var position = KTUtil.css(the.element, 'position');
var overflow = KTUtil.css(the.element, 'overflow');
var zIndex = isPage ? 10000 : 1;
if (the.options.zIndex > 0) {
zIndex = the.options.zIndex;
} else {
if (KTUtil.css(the.element, 'z-index') != 'auto') {
zIndex = KTUtil.css(the.element, 'z-index');
}
}
the.element.classList.add('blockui');
if (position === "absolute" || position === "relative" || position === "fixed") {
KTUtil.css(the.element, 'position', 'relative');
the.positionChanged = true;
}
if (the.options.overflow === 'hidden' && overflow === 'visible') {
KTUtil.css(the.element, 'overflow', 'hidden');
the.overflowChanged = true;
}
the.overlayElement = document.createElement('DIV');
the.overlayElement.setAttribute('class', 'blockui-overlay ' + the.options.overlayClass);
the.overlayElement.innerHTML = the.options.message;
KTUtil.css(the.overlayElement, 'z-index', zIndex);
the.element.append(the.overlayElement);
the.blocked = true;
KTEventHandler.trigger(the.element, 'kt.blockui.after.blocked', the)
}
var _release = function() {
if ( KTEventHandler.trigger(the.element, 'kt.blockui.release', the) === false ) {
return;
}
the.element.classList.add('blockui');
if (the.positionChanged) {
KTUtil.css(the.element, 'position', '');
}
if (the.overflowChanged) {
KTUtil.css(the.element, 'overflow', '');
}
if (the.overlayElement) {
KTUtil.remove(the.overlayElement);
}
the.blocked = false;
KTEventHandler.trigger(the.element, 'kt.blockui.released', the);
}
var _isBlocked = function() {
return the.blocked;
}
var _destroy = function() {
KTUtil.data(the.element).remove('blockui');
}
// Construct class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Plugin API
the.block = function() {
_block();
}
the.release = function() {
_release();
}
the.isBlocked = function() {
return _isBlocked();
}
the.destroy = function() {
return _destroy();
}
// Event API
the.on = function(name, handler) {
return KTEventHandler.on(the.element, name, handler);
}
the.one = function(name, handler) {
return KTEventHandler.one(the.element, name, handler);
}
the.off = function(name, handlerId) {
return KTEventHandler.off(the.element, name, handlerId);
}
the.trigger = function(name, event) {
return KTEventHandler.trigger(the.element, name, event, the, event);
}
};
// Static methods
KTBlockUI.getInstance = function(element) {
if (element !== null && KTUtil.data(element).has('blockui')) {
return KTUtil.data(element).get('blockui');
} else {
return null;
}
}
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTBlockUI;
}
"use strict";
// DOCS: https://javascript.info/cookie
// Class definition
var KTCookie = function() {
return {
// returns the cookie with the given name,
// or undefined if not found
get: function(name) {
var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : null;
},
// Please note that a cookie value is encoded,
// so getCookie uses a built-in decodeURIComponent function to decode it.
set: function(name, value, options) {
if ( typeof options === "undefined" || options === null ) {
options = {};
}
options = Object.assign({}, {
path: '/'
}, options);
if ( options.expires instanceof Date ) {
options.expires = options.expires.toUTCString();
}
var updatedCookie = encodeURIComponent(name) + "=" + encodeURIComponent(value);
for ( var optionKey in options ) {
if ( options.hasOwnProperty(optionKey) === false ) {
continue;
}
updatedCookie += "; " + optionKey;
var optionValue = options[optionKey];
if ( optionValue !== true ) {
updatedCookie += "=" + optionValue;
}
}
document.cookie = updatedCookie;
},
// To remove a cookie, we can call it with a negative expiration date:
remove: function(name) {
this.set(name, "", {
'max-age': -1
});
}
}
}();
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTCookie;
}
"use strict";
// Class definition
var KTDialer = function(element, options) {
////////////////////////////
// ** Private variables ** //
////////////////////////////
var the = this;
if (!element) {
return;
}
// Default options
var defaultOptions = {
min: null,
max: null,
step: 1,
decimals: 0,
prefix: "",
suffix: ""
};
////////////////////////////
// ** Private methods ** //
////////////////////////////
// Constructor
var _construct = function() {
if ( KTUtil.data(element).has('dialer') === true ) {
the = KTUtil.data(element).get('dialer');
} else {
_init();
}
}
// Initialize
var _init = function() {
// Variables
the.options = KTUtil.deepExtend({}, defaultOptions, options);
// Elements
the.element = element;
the.incElement = the.element.querySelector('[data-kt-dialer-control="increase"]');
the.decElement = the.element.querySelector('[data-kt-dialer-control="decrease"]');
the.inputElement = the.element.querySelector('input[type]');
// Set Values
if (_getOption('decimals')) {
the.options.decimals = parseInt(_getOption('decimals'));
}
if (_getOption('prefix')) {
the.options.prefix = _getOption('prefix');
}
if (_getOption('suffix')) {
the.options.suffix = _getOption('suffix');
}
if (_getOption('step')) {
the.options.step = parseFloat(_getOption('step'));
}
if (_getOption('min')) {
the.options.min = parseFloat(_getOption('min'));
}
if (_getOption('max')) {
the.options.max = parseFloat(_getOption('max'));
}
the.value = parseFloat(the.inputElement.value.replace(/[^\d.]/g, ''));
_setValue();
// Event Handlers
_handlers();
// Bind Instance
KTUtil.data(the.element).set('dialer', the);
}
// Handlers
var _handlers = function() {
KTUtil.addEvent(the.incElement, 'click', function(e) {
e.preventDefault();
_increase();
});
KTUtil.addEvent(the.decElement, 'click', function(e) {
e.preventDefault();
_decrease();
});
KTUtil.addEvent(the.inputElement, 'input', function(e) {
e.preventDefault();
_setValue();
});
}
// Event handlers
var _increase = function() {
// Trigger "after.dialer" event
KTEventHandler.trigger(the.element, 'kt.dialer.increase', the);
the.inputElement.value = the.value + the.options.step;
_setValue();
// Trigger "before.dialer" event
KTEventHandler.trigger(the.element, 'kt.dialer.increased', the);
return the;
}
var _decrease = function() {
// Trigger "after.dialer" event
KTEventHandler.trigger(the.element, 'kt.dialer.decrease', the);
the.inputElement.value = the.value - the.options.step;
_setValue();
// Trigger "before.dialer" event
KTEventHandler.trigger(the.element, 'kt.dialer.decreased', the);
return the;
}
// Set Input Value
var _setValue = function(value) {
// Trigger "after.dialer" event
KTEventHandler.trigger(the.element, 'kt.dialer.change', the);
if (value !== undefined) {
the.value = value;
} else {
the.value = _parse(the.inputElement.value);
}
if (the.options.min !== null && the.value < the.options.min) {
the.value = the.options.min;
}
if (the.options.max !== null && the.value > the.options.max) {
the.value = the.options.max;
}
the.inputElement.value = _format(the.value);
// Trigger input change event
the.inputElement.dispatchEvent(new Event('change'));
// Trigger "after.dialer" event
KTEventHandler.trigger(the.element, 'kt.dialer.changed', the);
}
var _parse = function(val) {
val = val
.replace(/[^0-9.-]/g, '') // remove chars except number, hyphen, point.
.replace(/(\..*)\./g, '$1') // remove multiple points.
.replace(/(?!^)-/g, '') // remove middle hyphen.
.replace(/^0+(\d)/gm, '$1'); // remove multiple leading zeros. <-- I added this.
val = parseFloat(val);
if (isNaN(val)) {
val = 0;
}
return val;
}
// Format
var _format = function(val){
return the.options.prefix + parseFloat(val).toFixed(the.options.decimals) + the.options.suffix;
}
// Get option
var _getOption = function(name) {
if ( the.element.hasAttribute('data-kt-dialer-' + name) === true ) {
var attr = the.element.getAttribute('data-kt-dialer-' + name);
var value = attr;
return value;
} else {
return null;
}
}
var _destroy = function() {
KTUtil.data(the.element).remove('dialer');
}
// Construct class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Plugin API
the.setMinValue = function(value) {
the.options.min = value;
}
the.setMaxValue = function(value) {
the.options.max = value;
}
the.setValue = function(value) {
_setValue(value);
}
the.getValue = function() {
return the.inputElement.value;
}
the.update = function() {
_setValue();
}
the.increase = function() {
return _increase();
}
the.decrease = function() {
return _decrease();
}
the.getElement = function() {
return the.element;
}
the.destroy = function() {
return _destroy();
}
// Event API
the.on = function(name, handler) {
return KTEventHandler.on(the.element, name, handler);
}
the.one = function(name, handler) {
return KTEventHandler.one(the.element, name, handler);
}
the.off = function(name, handlerId) {
return KTEventHandler.off(the.element, name, handlerId);
}
the.trigger = function(name, event) {
return KTEventHandler.trigger(the.element, name, event, the, event);
}
};
// Static methods
KTDialer.getInstance = function(element) {
if ( element !== null && KTUtil.data(element).has('dialer') ) {
return KTUtil.data(element).get('dialer');
} else {
return null;
}
}
// Create instances
KTDialer.createInstances = function(selector = '[data-kt-dialer="true"]') {
// Get instances
var elements = document.querySelectorAll(selector);
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
new KTDialer(elements[i]);
}
}
}
// Global initialization
KTDialer.init = function() {
KTDialer.createInstances();
};
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTDialer;
}
"use strict";
var KTDrawerHandlersInitialized = false;
// Class definition
var KTDrawer = function(element, options) {
//////////////////////////////
// ** Private variables ** //
//////////////////////////////
var the = this;
if ( typeof element === "undefined" || element === null ) {
return;
}
// Default options
var defaultOptions = {
overlay: true,
direction: 'end',
baseClass: 'drawer',
overlayClass: 'drawer-overlay'
};
////////////////////////////
// ** Private methods ** //
////////////////////////////
var _construct = function() {
if ( KTUtil.data(element).has('drawer') ) {
the = KTUtil.data(element).get('drawer');
} else {
_init();
}
}
var _init = function() {
// Variables
the.options = KTUtil.deepExtend({}, defaultOptions, options);
the.uid = KTUtil.getUniqueId('drawer');
the.element = element;
the.overlayElement = null;
the.name = the.element.getAttribute('data-kt-drawer-name');
the.shown = false;
the.lastWidth;
the.toggleElement = null;
// Set initialized
the.element.setAttribute('data-kt-drawer', 'true');
// Event Handlers
_handlers();
// Update Instance
_update();
// Bind Instance
KTUtil.data(the.element).set('drawer', the);
}
var _handlers = function() {
var togglers = _getOption('toggle');
var closers = _getOption('close');
if ( togglers !== null && togglers.length > 0 ) {
KTUtil.on(document.body, togglers, 'click', function(e) {
e.preventDefault();
the.toggleElement = this;
_toggle();
});
}
if ( closers !== null && closers.length > 0 ) {
KTUtil.on(document.body, closers, 'click', function(e) {
e.preventDefault();
the.closeElement = this;
_hide();
});
}
}
var _toggle = function() {
if ( KTEventHandler.trigger(the.element, 'kt.drawer.toggle', the) === false ) {
return;
}
if ( the.shown === true ) {
_hide();
} else {
_show();
}
KTEventHandler.trigger(the.element, 'kt.drawer.toggled', the);
}
var _hide = function() {
if ( KTEventHandler.trigger(the.element, 'kt.drawer.hide', the) === false ) {
return;
}
the.shown = false;
_deleteOverlay();
document.body.removeAttribute('data-kt-drawer-' + the.name, 'on');
document.body.removeAttribute('data-kt-drawer');
KTUtil.removeClass(the.element, the.options.baseClass + '-on');
if ( the.toggleElement !== null ) {
KTUtil.removeClass(the.toggleElement, 'active');
}
KTEventHandler.trigger(the.element, 'kt.drawer.after.hidden', the) === false
}
var _show = function() {
if ( KTEventHandler.trigger(the.element, 'kt.drawer.show', the) === false ) {
return;
}
the.shown = true;
_createOverlay();
document.body.setAttribute('data-kt-drawer-' + the.name, 'on');
document.body.setAttribute('data-kt-drawer', 'on');
KTUtil.addClass(the.element, the.options.baseClass + '-on');
if ( the.toggleElement !== null ) {
KTUtil.addClass(the.toggleElement, 'active');
}
KTEventHandler.trigger(the.element, 'kt.drawer.shown', the);
}
var _update = function() {
var width = _getWidth();
var direction = _getOption('direction');
var top = _getOption('top');
var bottom = _getOption('bottom');
var start = _getOption('start');
var end = _getOption('end');
// Reset state
if ( KTUtil.hasClass(the.element, the.options.baseClass + '-on') === true && String(document.body.getAttribute('data-kt-drawer-' + the.name + '-')) === 'on' ) {
the.shown = true;
} else {
the.shown = false;
}
// Activate/deactivate
if ( _getOption('activate') === true ) {
KTUtil.addClass(the.element, the.options.baseClass);
KTUtil.addClass(the.element, the.options.baseClass + '-' + direction);
KTUtil.css(the.element, 'width', width, true);
the.lastWidth = width;
if (top) {
KTUtil.css(the.element, 'top', top);
}
if (bottom) {
KTUtil.css(the.element, 'bottom', bottom);
}
if (start) {
if (KTUtil.isRTL()) {
KTUtil.css(the.element, 'right', start);
} else {
KTUtil.css(the.element, 'left', start);
}
}
if (end) {
if (KTUtil.isRTL()) {
KTUtil.css(the.element, 'left', end);
} else {
KTUtil.css(the.element, 'right', end);
}
}
} else {
KTUtil.removeClass(the.element, the.options.baseClass);
KTUtil.removeClass(the.element, the.options.baseClass + '-' + direction);
KTUtil.css(the.element, 'width', '');
if (top) {
KTUtil.css(the.element, 'top', '');
}
if (bottom) {
KTUtil.css(the.element, 'bottom', '');
}
if (start) {
if (KTUtil.isRTL()) {
KTUtil.css(the.element, 'right', '');
} else {
KTUtil.css(the.element, 'left', '');
}
}
if (end) {
if (KTUtil.isRTL()) {
KTUtil.css(the.element, 'left', '');
} else {
KTUtil.css(the.element, 'right', '');
}
}
_hide();
}
}
var _createOverlay = function() {
if ( _getOption('overlay') === true ) {
the.overlayElement = document.createElement('DIV');
KTUtil.css(the.overlayElement, 'z-index', KTUtil.css(the.element, 'z-index') - 1); // update
document.body.append(the.overlayElement);
KTUtil.addClass(the.overlayElement, _getOption('overlay-class'));
KTUtil.addEvent(the.overlayElement, 'click', function(e) {
e.preventDefault();
if ( _getOption('permanent') !== true ) {
_hide();
}
});
}
}
var _deleteOverlay = function() {
if ( the.overlayElement !== null ) {
KTUtil.remove(the.overlayElement);
}
}
var _getOption = function(name) {
if ( the.element.hasAttribute('data-kt-drawer-' + name) === true ) {
var attr = the.element.getAttribute('data-kt-drawer-' + name);
var value = KTUtil.getResponsiveValue(attr);
if ( value !== null && String(value) === 'true' ) {
value = true;
} else if ( value !== null && String(value) === 'false' ) {
value = false;
}
return value;
} else {
var optionName = KTUtil.snakeToCamel(name);
if ( the.options[optionName] ) {
return KTUtil.getResponsiveValue(the.options[optionName]);
} else {
return null;
}
}
}
var _getWidth = function() {
var width = _getOption('width');
if ( width === 'auto') {
width = KTUtil.css(the.element, 'width');
}
return width;
}
var _destroy = function() {
KTUtil.data(the.element).remove('drawer');
}
// Construct class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Plugin API
the.toggle = function() {
return _toggle();
}
the.show = function() {
return _show();
}
the.hide = function() {
return _hide();
}
the.isShown = function() {
return the.shown;
}
the.update = function() {
_update();
}
the.goElement = function() {
return the.element;
}
the.destroy = function() {
return _destroy();
}
// Event API
the.on = function(name, handler) {
return KTEventHandler.on(the.element, name, handler);
}
the.one = function(name, handler) {
return KTEventHandler.one(the.element, name, handler);
}
the.off = function(name, handlerId) {
return KTEventHandler.off(the.element, name, handlerId);
}
the.trigger = function(name, event) {
return KTEventHandler.trigger(the.element, name, event, the, event);
}
};
// Static methods
KTDrawer.getInstance = function(element) {
if (element !== null && KTUtil.data(element).has('drawer')) {
return KTUtil.data(element).get('drawer');
} else {
return null;
}
}
// Hide all drawers and skip one if provided
KTDrawer.hideAll = function(skip = null, selector = '[data-kt-drawer="true"]') {
var items = document.querySelectorAll(selector);
if (items && items.length > 0) {
for (var i = 0, len = items.length; i < len; i++) {
var item = items[i];
var drawer = KTDrawer.getInstance(item);
if (!drawer) {
continue;
}
if ( skip ) {
if ( item !== skip ) {
drawer.hide();
}
} else {
drawer.hide();
}
}
}
}
// Update all drawers
KTDrawer.updateAll = function(selector = '[data-kt-drawer="true"]') {
var items = document.querySelectorAll(selector);
if (items && items.length > 0) {
for (var i = 0, len = items.length; i < len; i++) {
var drawer = KTDrawer.getInstance(items[i]);
if (drawer) {
drawer.update();
}
}
}
}
// Create instances
KTDrawer.createInstances = function(selector = '[data-kt-drawer="true"]') {
// Initialize Menus
var elements = document.querySelectorAll(selector);
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
new KTDrawer(elements[i]);
}
}
}
// Toggle instances
KTDrawer.handleShow = function() {
// External drawer toggle handler
KTUtil.on(document.body, '[data-kt-drawer-show="true"][data-kt-drawer-target]', 'click', function(e) {
e.preventDefault();
var element = document.querySelector(this.getAttribute('data-kt-drawer-target'));
if (element) {
KTDrawer.getInstance(element).show();
}
});
}
// Handle escape key press
KTDrawer.handleEscapeKey = function() {
document.addEventListener('keydown', (event) => {
if (event.key === 'Escape') {
//if esc key was not pressed in combination with ctrl or alt or shift
const isNotCombinedKey = !(event.ctrlKey || event.altKey || event.shiftKey);
if (isNotCombinedKey) {
var elements = document.querySelectorAll('.drawer-on[data-kt-drawer="true"]:not([data-kt-drawer-escape="false"])');
var drawer;
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
drawer = KTDrawer.getInstance(elements[i]);
if (drawer.isShown()) {
drawer.hide();
}
}
}
}
}
});
}
// Dismiss instances
KTDrawer.handleDismiss = function() {
// External drawer toggle handler
KTUtil.on(document.body, '[data-kt-drawer-dismiss="true"]', 'click', function(e) {
var element = this.closest('[data-kt-drawer="true"]');
if (element) {
var drawer = KTDrawer.getInstance(element);
if (drawer.isShown()) {
drawer.hide();
}
}
});
}
// Handle resize
KTDrawer.handleResize = function() {
// Window resize Handling
window.addEventListener('resize', function() {
var timer;
KTUtil.throttle(timer, function() {
// Locate and update drawer instances on window resize
var elements = document.querySelectorAll('[data-kt-drawer="true"]');
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
var drawer = KTDrawer.getInstance(elements[i]);
if (drawer) {
drawer.update();
}
}
}
}, 200);
});
}
// Global initialization
KTDrawer.init = function() {
KTDrawer.createInstances();
if (KTDrawerHandlersInitialized === false) {
KTDrawer.handleResize();
KTDrawer.handleShow();
KTDrawer.handleDismiss();
KTDrawer.handleEscapeKey();
KTDrawerHandlersInitialized = true;
}
};
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTDrawer;
}
"use strict";
// Class definition
var KTEventHandler = function() {
////////////////////////////
// ** Private Variables ** //
////////////////////////////
var _handlers = {};
////////////////////////////
// ** Private Methods ** //
////////////////////////////
var _triggerEvent = function(element, name, target) {
var returnValue = true;
var eventValue;
if ( KTUtil.data(element).has(name) === true ) {
var handlerIds = KTUtil.data(element).get(name);
var handlerId;
for (var i = 0; i < handlerIds.length; i++) {
handlerId = handlerIds[i];
if ( _handlers[name] && _handlers[name][handlerId] ) {
var handler = _handlers[name][handlerId];
var value;
if ( handler.name === name ) {
if ( handler.one == true ) {
if ( handler.fired == false ) {
_handlers[name][handlerId].fired = true;
eventValue = handler.callback.call(this, target);
}
} else {
eventValue = handler.callback.call(this, target);
}
if ( eventValue === false ) {
returnValue = false;
}
}
}
}
}
return returnValue;
}
var _addEvent = function(element, name, callback, one) {
var handlerId = KTUtil.getUniqueId('event');
var handlerIds = KTUtil.data(element).get(name);
if ( !handlerIds ) {
handlerIds = [];
}
handlerIds.push(handlerId);
KTUtil.data(element).set(name, handlerIds);
if ( !_handlers[name] ) {
_handlers[name] = {};
}
_handlers[name][handlerId] = {
name: name,
callback: callback,
one: one,
fired: false
};
return handlerId;
}
var _removeEvent = function(element, name, handlerId) {
var handlerIds = KTUtil.data(element).get(name);
var index = handlerIds && handlerIds.indexOf(handlerId);
if (index !== -1) {
handlerIds.splice(index, 1);
KTUtil.data(element).set(name, handlerIds);
}
if (_handlers[name] && _handlers[name][handlerId]) {
delete _handlers[name][handlerId];
}
}
////////////////////////////
// ** Public Methods ** //
////////////////////////////
return {
trigger: function(element, name, target) {
return _triggerEvent(element, name, target);
},
on: function(element, name, handler) {
return _addEvent(element, name, handler);
},
one: function(element, name, handler) {
return _addEvent(element, name, handler, true);
},
off: function(element, name, handlerId) {
return _removeEvent(element, name, handlerId);
},
debug: function() {
for (var b in _handlers) {
if ( _handlers.hasOwnProperty(b) ) console.log(b);
}
}
}
}();
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTEventHandler;
}
"use strict";
// Class definition
var KTFeedback = function(options) {
////////////////////////////
// ** Private Variables ** //
////////////////////////////
var the = this;
// Default options
var defaultOptions = {
'width' : 100,
'placement' : 'top-center',
'content' : '',
'type': 'popup'
};
////////////////////////////
// ** Private methods ** //
////////////////////////////
var _construct = function() {
_init();
}
var _init = function() {
// Variables
the.options = KTUtil.deepExtend({}, defaultOptions, options);
the.uid = KTUtil.getUniqueId('feedback');
the.element;
the.shown = false;
// Event Handlers
_handlers();
// Bind Instance
KTUtil.data(the.element).set('feedback', the);
}
var _handlers = function() {
KTUtil.addEvent(the.element, 'click', function(e) {
e.preventDefault();
_go();
});
}
var _show = function() {
if ( KTEventHandler.trigger(the.element, 'kt.feedback.show', the) === false ) {
return;
}
if ( the.options.type === 'popup') {
_showPopup();
}
KTEventHandler.trigger(the.element, 'kt.feedback.shown', the);
return the;
}
var _hide = function() {
if ( KTEventHandler.trigger(the.element, 'kt.feedback.hide', the) === false ) {
return;
}
if ( the.options.type === 'popup') {
_hidePopup();
}
the.shown = false;
KTEventHandler.trigger(the.element, 'kt.feedback.hidden', the);
return the;
}
var _showPopup = function() {
the.element = document.createElement("DIV");
KTUtil.addClass(the.element, 'feedback feedback-popup');
KTUtil.setHTML(the.element, the.options.content);
if (the.options.placement == 'top-center') {
_setPopupTopCenterPosition();
}
document.body.appendChild(the.element);
KTUtil.addClass(the.element, 'feedback-shown');
the.shown = true;
}
var _setPopupTopCenterPosition = function() {
var width = KTUtil.getResponsiveValue(the.options.width);
var height = KTUtil.css(the.element, 'height');
KTUtil.addClass(the.element, 'feedback-top-center');
KTUtil.css(the.element, 'width', width);
KTUtil.css(the.element, 'left', '50%');
KTUtil.css(the.element, 'top', '-' + height);
}
var _hidePopup = function() {
the.element.remove();
}
var _destroy = function() {
KTUtil.data(the.element).remove('feedback');
}
// Construct class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Plugin API
the.show = function() {
return _show();
}
the.hide = function() {
return _hide();
}
the.isShown = function() {
return the.shown;
}
the.getElement = function() {
return the.element;
}
the.destroy = function() {
return _destroy();
}
// Event API
the.on = function(name, handler) {
return KTEventHandler.on(the.element, name, handler);
}
the.one = function(name, handler) {
return KTEventHandler.one(the.element, name, handler);
}
the.off = function(name, handlerId) {
return KTEventHandler.off(the.element, name, handlerId);
}
the.trigger = function(name, event) {
return KTEventHandler.trigger(the.element, name, event, the, event);
}
};
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTFeedback;
}
"use strict";
// Class definition
var KTImageInput = function(element, options) {
////////////////////////////
// ** Private Variables ** //
////////////////////////////
var the = this;
if ( typeof element === "undefined" || element === null ) {
return;
}
// Default Options
var defaultOptions = {
};
////////////////////////////
// ** Private Methods ** //
////////////////////////////
var _construct = function() {
if ( KTUtil.data(element).has('image-input') === true ) {
the = KTUtil.data(element).get('image-input');
} else {
_init();
}
}
var _init = function() {
// Variables
the.options = KTUtil.deepExtend({}, defaultOptions, options);
the.uid = KTUtil.getUniqueId('image-input');
// Elements
the.element = element;
the.inputElement = KTUtil.find(element, 'input[type="file"]');
the.wrapperElement = KTUtil.find(element, '.image-input-wrapper');
the.cancelElement = KTUtil.find(element, '[data-kt-image-input-action="cancel"]');
the.removeElement = KTUtil.find(element, '[data-kt-image-input-action="remove"]');
the.hiddenElement = KTUtil.find(element, 'input[type="hidden"]');
the.src = KTUtil.css(the.wrapperElement, 'backgroundImage');
// Set initialized
the.element.setAttribute('data-kt-image-input', 'true');
// Event Handlers
_handlers();
// Bind Instance
KTUtil.data(the.element).set('image-input', the);
}
// Init Event Handlers
var _handlers = function() {
KTUtil.addEvent(the.inputElement, 'change', _change);
KTUtil.addEvent(the.cancelElement, 'click', _cancel);
KTUtil.addEvent(the.removeElement, 'click', _remove);
}
// Event Handlers
var _change = function(e) {
e.preventDefault();
if ( the.inputElement !== null && the.inputElement.files && the.inputElement.files[0] ) {
// Fire change event
if ( KTEventHandler.trigger(the.element, 'kt.imageinput.change', the) === false ) {
return;
}
var reader = new FileReader();
reader.onload = function(e) {
KTUtil.css(the.wrapperElement, 'background-image', 'url('+ e.target.result +')');
}
reader.readAsDataURL(the.inputElement.files[0]);
the.element.classList.add('image-input-changed');
the.element.classList.remove('image-input-empty');
// Fire removed event
KTEventHandler.trigger(the.element, 'kt.imageinput.changed', the);
}
}
var _cancel = function(e) {
e.preventDefault();
// Fire cancel event
if ( KTEventHandler.trigger(the.element, 'kt.imageinput.cancel', the) === false ) {
return;
}
the.element.classList.remove('image-input-changed');
the.element.classList.remove('image-input-empty');
if (the.src === 'none') {
KTUtil.css(the.wrapperElement, 'background-image', '');
the.element.classList.add('image-input-empty');
} else {
KTUtil.css(the.wrapperElement, 'background-image', the.src);
}
the.inputElement.value = "";
if ( the.hiddenElement !== null ) {
the.hiddenElement.value = "0";
}
// Fire canceled event
KTEventHandler.trigger(the.element, 'kt.imageinput.canceled', the);
}
var _remove = function(e) {
e.preventDefault();
// Fire remove event
if ( KTEventHandler.trigger(the.element, 'kt.imageinput.remove', the) === false ) {
return;
}
the.element.classList.remove('image-input-changed');
the.element.classList.add('image-input-empty');
KTUtil.css(the.wrapperElement, 'background-image', "none");
the.inputElement.value = "";
if ( the.hiddenElement !== null ) {
the.hiddenElement.value = "1";
}
// Fire removed event
KTEventHandler.trigger(the.element, 'kt.imageinput.removed', the);
}
var _destroy = function() {
KTUtil.data(the.element).remove('image-input');
}
// Construct Class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Plugin API
the.getInputElement = function() {
return the.inputElement;
}
the.getElement = function() {
return the.element;
}
the.destroy = function() {
return _destroy();
}
// Event API
the.on = function(name, handler) {
return KTEventHandler.on(the.element, name, handler);
}
the.one = function(name, handler) {
return KTEventHandler.one(the.element, name, handler);
}
the.off = function(name, handlerId) {
return KTEventHandler.off(the.element, name, handlerId);
}
the.trigger = function(name, event) {
return KTEventHandler.trigger(the.element, name, event, the, event);
}
};
// Static methods
KTImageInput.getInstance = function(element) {
if ( element !== null && KTUtil.data(element).has('image-input') ) {
return KTUtil.data(element).get('image-input');
} else {
return null;
}
}
// Create instances
KTImageInput.createInstances = function(selector = '[data-kt-image-input]') {
// Initialize Menus
var elements = document.querySelectorAll(selector);
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
new KTImageInput(elements[i]);
}
}
}
// Global initialization
KTImageInput.init = function() {
KTImageInput.createInstances();
};
// Webpack Support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTImageInput;
}
"use strict";
var KTMenuHandlersInitialized = false;
// Class definition
var KTMenu = function(element, options) {
////////////////////////////
// ** Private Variables ** //
////////////////////////////
var the = this;
if ( typeof element === "undefined" || element === null ) {
return;
}
// Default Options
var defaultOptions = {
dropdown: {
hoverTimeout: 200,
zindex: 107
},
accordion: {
slideSpeed: 250,
expand: false
}
};
////////////////////////////
// ** Private Methods ** //
////////////////////////////
var _construct = function() {
if ( KTUtil.data(element).has('menu') === true ) {
the = KTUtil.data(element).get('menu');
} else {
_init();
}
}
var _init = function() {
the.options = KTUtil.deepExtend({}, defaultOptions, options);
the.uid = KTUtil.getUniqueId('menu');
the.element = element;
the.triggerElement;
the.disabled = false;
// Set initialized
the.element.setAttribute('data-kt-menu', 'true');
_setTriggerElement();
_update();
KTUtil.data(the.element).set('menu', the);
}
var _destroy = function() { // todo
}
// Event Handlers
// Toggle handler
var _click = function(element, e) {
e.preventDefault();
if (the.disabled === true) {
return;
}
var item = _getItemElement(element);
if ( _getOptionFromElementAttribute(item, 'trigger') !== 'click' ) {
return;
}
if ( _getOptionFromElementAttribute(item, 'toggle') === false ) {
_show(item);
} else {
_toggle(item);
}
}
// Link handler
var _link = function(element, e) {
if (the.disabled === true) {
return;
}
if ( KTEventHandler.trigger(the.element, 'kt.menu.link.click', element) === false ) {
return;
}
// Dismiss all shown dropdowns
KTMenu.hideDropdowns();
KTEventHandler.trigger(the.element, 'kt.menu.link.clicked', element);
}
// Dismiss handler
var _dismiss = function(element, e) {
var item = _getItemElement(element);
var items = _getItemChildElements(item);
if ( item !== null && _getItemSubType(item) === 'dropdown') {
_hide(item); // hide items dropdown
// Hide all child elements as well
if ( items.length > 0 ) {
for (var i = 0, len = items.length; i < len; i++) {
if ( items[i] !== null && _getItemSubType(items[i]) === 'dropdown') {
_hide(tems[i]);
}
}
}
}
}
// Mouseover handle
var _mouseover = function(element, e) {
var item = _getItemElement(element);
if (the.disabled === true) {
return;
}
if ( item === null ) {
return;
}
if ( _getOptionFromElementAttribute(item, 'trigger') !== 'hover' ) {
return;
}
if ( KTUtil.data(item).get('hover') === '1' ) {
clearTimeout(KTUtil.data(item).get('timeout'));
KTUtil.data(item).remove('hover');
KTUtil.data(item).remove('timeout');
}
_show(item);
}
// Mouseout handle
var _mouseout = function(element, e) {
var item = _getItemElement(element);
if (the.disabled === true) {
return;
}
if ( item === null ) {
return;
}
if ( _getOptionFromElementAttribute(item, 'trigger') !== 'hover' ) {
return;
}
var timeout = setTimeout(function() {
if ( KTUtil.data(item).get('hover') === '1' ) {
_hide(item);
}
}, the.options.dropdown.hoverTimeout);
KTUtil.data(item).set('hover', '1');
KTUtil.data(item).set('timeout', timeout);
}
// Toggle item sub
var _toggle = function(item) {
if ( !item ) {
item = the.triggerElement;
}
if ( _isItemSubShown(item) === true ) {
_hide(item);
} else {
_show(item);
}
}
// Show item sub
var _show = function(item) {
if ( !item ) {
item = the.triggerElement;
}
if ( _isItemSubShown(item) === true ) {
return;
}
if ( _getItemSubType(item) === 'dropdown' ) {
_showDropdown(item); // // show current dropdown
} else if ( _getItemSubType(item) === 'accordion' ) {
_showAccordion(item);
}
// Remember last submenu type
KTUtil.data(item).set('type', _getItemSubType(item)); // updated
}
// Hide item sub
var _hide = function(item) {
if ( !item ) {
item = the.triggerElement;
}
if ( _isItemSubShown(item) === false ) {
return;
}
if ( _getItemSubType(item) === 'dropdown' ) {
_hideDropdown(item);
} else if ( _getItemSubType(item) === 'accordion' ) {
_hideAccordion(item);
}
}
// Reset item state classes if item sub type changed
var _reset = function(item) {
if ( _hasItemSub(item) === false ) {
return;
}
var sub = _getItemSubElement(item);
// Reset sub state if sub type is changed during the window resize
if ( KTUtil.data(item).has('type') && KTUtil.data(item).get('type') !== _getItemSubType(item) ) { // updated
KTUtil.removeClass(item, 'hover');
KTUtil.removeClass(item, 'show');
KTUtil.removeClass(sub, 'show');
} // updated
}
// Update all item state classes if item sub type changed
var _update = function() {
var items = the.element.querySelectorAll('.menu-item[data-kt-menu-trigger]');
if ( items && items.length > 0 ) {
for (var i = 0, len = items.length; i < len; i++) {
_reset(items[i]);
}
}
}
// Set external trigger element
var _setTriggerElement = function() {
var target = document.querySelector('[data-kt-menu-target="#' + the.element.getAttribute('id') + '"]');
if ( target !== null ) {
the.triggerElement = target;
} else if ( the.element.closest('[data-kt-menu-trigger]') ) {
the.triggerElement = the.element.closest('[data-kt-menu-trigger]');
} else if ( the.element.parentNode && KTUtil.child(the.element.parentNode, '[data-kt-menu-trigger]')) {
the.triggerElement = KTUtil.child(the.element.parentNode, '[data-kt-menu-trigger]');
}
if ( the.triggerElement ) {
KTUtil.data(the.triggerElement).set('menu', the);
}
}
// Test if menu has external trigger element
var _isTriggerElement = function(item) {
return ( the.triggerElement === item ) ? true : false;
}
// Test if item's sub is shown
var _isItemSubShown = function(item) {
var sub = _getItemSubElement(item);
if ( sub !== null ) {
if ( _getItemSubType(item) === 'dropdown' ) {
if ( KTUtil.hasClass(sub, 'show') === true && sub.hasAttribute('data-popper-placement') === true ) {
return true;
} else {
return false;
}
} else {
return KTUtil.hasClass(item, 'show');
}
} else {
return false;
}
}
// Test if item dropdown is permanent
var _isItemDropdownPermanent = function(item) {
return _getOptionFromElementAttribute(item, 'permanent') === true ? true : false;
}
// Test if item's parent is shown
var _isItemParentShown = function(item) {
return KTUtil.parents(item, '.menu-item.show').length > 0;
}
// Test of it is item sub element
var _isItemSubElement = function(item) {
return KTUtil.hasClass(item, 'menu-sub');
}
// Test if item has sub
var _hasItemSub = function(item) {
return (KTUtil.hasClass(item, 'menu-item') && item.hasAttribute('data-kt-menu-trigger'));
}
// Get link element
var _getItemLinkElement = function(item) {
return KTUtil.child(item, '.menu-link');
}
// Get toggle element
var _getItemToggleElement = function(item) {
if ( the.triggerElement ) {
return the.triggerElement;
} else {
return _getItemLinkElement(item);
}
}
// Get item sub element
var _getItemSubElement = function(item) {
if ( _isTriggerElement(item) === true ) {
return the.element;
} if ( item.classList.contains('menu-sub') === true ) {
return item;
} else if ( KTUtil.data(item).has('sub') ) {
return KTUtil.data(item).get('sub');
} else {
return KTUtil.child(item, '.menu-sub');
}
}
// Get item sub type
var _getItemSubType = function(element) {
var sub = _getItemSubElement(element);
if ( sub && parseInt(KTUtil.css(sub, 'z-index')) > 0 ) {
return "dropdown";
} else {
return "accordion";
}
}
// Get item element
var _getItemElement = function(element) {
var item, sub;
// Element is the external trigger element
if (_isTriggerElement(element) ) {
return element;
}
// Element has item toggler attribute
if ( element.hasAttribute('data-kt-menu-trigger') ) {
return element;
}
// Element has item DOM reference in it's data storage
if ( KTUtil.data(element).has('item') ) {
return KTUtil.data(element).get('item');
}
// Item is parent of element
if ( (item = element.closest('.menu-item')) ) {
return item;
}
// Element's parent has item DOM reference in it's data storage
if ( (sub = element.closest('.menu-sub')) ) {
if ( KTUtil.data(sub).has('item') === true ) {
return KTUtil.data(sub).get('item')
}
}
}
// Get item parent element
var _getItemParentElement = function(item) {
var sub = item.closest('.menu-sub');
var parentItem;
if ( sub && KTUtil.data(sub).has('item') ) {
return KTUtil.data(sub).get('item');
}
if ( sub && (parentItem = sub.closest('.menu-item[data-kt-menu-trigger]')) ) {
return parentItem;
}
return null;
}
// Get item parent elements
var _getItemParentElements = function(item) {
var parents = [];
var parent;
var i = 0;
do {
parent = _getItemParentElement(item);
if ( parent ) {
parents.push(parent);
item = parent;
}
i++;
} while (parent !== null && i < 20);
if ( the.triggerElement ) {
parents.unshift(the.triggerElement);
}
return parents;
}
// Get item child element
var _getItemChildElement = function(item) {
var selector = item;
var element;
if ( KTUtil.data(item).get('sub') ) {
selector = KTUtil.data(item).get('sub');
}
if ( selector !== null ) {
//element = selector.querySelector('.show.menu-item[data-kt-menu-trigger]');
element = selector.querySelector('.menu-item[data-kt-menu-trigger]');
if ( element ) {
return element;
} else {
return null;
}
} else {
return null;
}
}
// Get item child elements
var _getItemChildElements = function(item) {
var children = [];
var child;
var i = 0;
do {
child = _getItemChildElement(item);
if ( child ) {
children.push(child);
item = child;
}
i++;
} while (child !== null && i < 20);
return children;
}
// Show item dropdown
var _showDropdown = function(item) {
// Handle dropdown show event
if ( KTEventHandler.trigger(the.element, 'kt.menu.dropdown.show', item) === false ) {
return;
}
// Hide all currently shown dropdowns except current one
KTMenu.hideDropdowns(item);
var toggle = _isTriggerElement(item) ? item : _getItemLinkElement(item);
var sub = _getItemSubElement(item);
var width = _getOptionFromElementAttribute(item, 'width');
var height = _getOptionFromElementAttribute(item, 'height');
var zindex = the.options.dropdown.zindex; // update
var parentZindex = KTUtil.getHighestZindex(item); // update
// Apply a new z-index if dropdown's toggle element or it's parent has greater z-index // update
if ( parentZindex !== null && parentZindex >= zindex ) {
zindex = parentZindex + 1;
}
if ( zindex > 0 ) {
KTUtil.css(sub, 'z-index', zindex);
}
if ( width !== null ) {
KTUtil.css(sub, 'width', width);
}
if ( height !== null ) {
KTUtil.css(sub, 'height', height);
}
KTUtil.css(sub, 'display', '');
KTUtil.css(sub, 'overflow', '');
// Init popper(new)
_initDropdownPopper(item, sub);
KTUtil.addClass(item, 'show');
KTUtil.addClass(item, 'menu-dropdown');
KTUtil.addClass(sub, 'show');
// Append the sub the the root of the menu
if ( _getOptionFromElementAttribute(item, 'overflow') === true ) {
document.body.appendChild(sub);
KTUtil.data(item).set('sub', sub);
KTUtil.data(sub).set('item', item);
KTUtil.data(sub).set('menu', the);
} else {
KTUtil.data(sub).set('item', item);
}
// Handle dropdown shown event
KTEventHandler.trigger(the.element, 'kt.menu.dropdown.shown', item);
}
// Hide item dropdown
var _hideDropdown = function(item) {
// Handle dropdown hide event
if ( KTEventHandler.trigger(the.element, 'kt.menu.dropdown.hide', item) === false ) {
return;
}
var sub = _getItemSubElement(item);
KTUtil.css(sub, 'z-index', '');
KTUtil.css(sub, 'width', '');
KTUtil.css(sub, 'height', '');
KTUtil.removeClass(item, 'show');
KTUtil.removeClass(item, 'menu-dropdown');
KTUtil.removeClass(sub, 'show');
// Append the sub back to it's parent
if ( _getOptionFromElementAttribute(item, 'overflow') === true ) {
if (item.classList.contains('menu-item')) {
item.appendChild(sub);
} else {
KTUtil.insertAfter(the.element, item);
}
KTUtil.data(item).remove('sub');
KTUtil.data(sub).remove('item');
KTUtil.data(sub).remove('menu');
}
// Destroy popper(new)
_destroyDropdownPopper(item);
// Handle dropdown hidden event
KTEventHandler.trigger(the.element, 'kt.menu.dropdown.hidden', item);
}
// Init dropdown popper(new)
var _initDropdownPopper = function(item, sub) {
// Setup popper instance
var reference;
var attach = _getOptionFromElementAttribute(item, 'attach');
if ( attach ) {
if ( attach === 'parent') {
reference = item.parentNode;
} else {
reference = document.querySelector(attach);
}
} else {
reference = item;
}
var popper = Popper.createPopper(reference, sub, _getDropdownPopperConfig(item));
KTUtil.data(item).set('popper', popper);
}
// Destroy dropdown popper(new)
var _destroyDropdownPopper = function(item) {
if ( KTUtil.data(item).has('popper') === true ) {
KTUtil.data(item).get('popper').destroy();
KTUtil.data(item).remove('popper');
}
}
// Prepare popper config for dropdown(see: https://popper.js.org/docs/v2/)
var _getDropdownPopperConfig = function(item) {
// Placement
var placement = _getOptionFromElementAttribute(item, 'placement');
if (!placement) {
placement = 'right';
}
// Offset
var offsetValue = _getOptionFromElementAttribute(item, 'offset');
var offset = offsetValue ? offsetValue.split(",") : [];
if (offset.length === 2) {
offset[0] = parseInt(offset[0]);
offset[1] = parseInt(offset[1]);
}
// Strategy
var strategy = _getOptionFromElementAttribute(item, 'overflow') === true ? 'absolute' : 'fixed';
var altAxis = _getOptionFromElementAttribute(item, 'flip') !== false ? true : false;
var popperConfig = {
placement: placement,
strategy: strategy,
modifiers: [{
name: 'offset',
options: {
offset: offset
}
}, {
name: 'preventOverflow',
options: {
altAxis: altAxis
}
}, {
name: 'flip',
options: {
flipVariations: false
}
}]
};
return popperConfig;
}
// Show item accordion
var _showAccordion = function(item) {
if ( KTEventHandler.trigger(the.element, 'kt.menu.accordion.show', item) === false ) {
return;
}
var sub = _getItemSubElement(item);
var expand = the.options.accordion.expand;
if (_getOptionFromElementAttribute(item, 'expand') === true) {
expand = true;
} else if (_getOptionFromElementAttribute(item, 'expand') === false) {
expand = false;
} else if (_getOptionFromElementAttribute(the.element, 'expand') === true) {
expand = true;
}
if ( expand === false ) {
_hideAccordions(item);
}
if ( KTUtil.data(item).has('popper') === true ) {
_hideDropdown(item);
}
KTUtil.addClass(item, 'hover');
KTUtil.addClass(item, 'showing');
KTUtil.slideDown(sub, the.options.accordion.slideSpeed, function() {
KTUtil.removeClass(item, 'showing');
KTUtil.addClass(item, 'show');
KTUtil.addClass(sub, 'show');
KTEventHandler.trigger(the.element, 'kt.menu.accordion.shown', item);
});
}
// Hide item accordion
var _hideAccordion = function(item) {
if ( KTEventHandler.trigger(the.element, 'kt.menu.accordion.hide', item) === false ) {
return;
}
var sub = _getItemSubElement(item);
KTUtil.addClass(item, 'hiding');
KTUtil.slideUp(sub, the.options.accordion.slideSpeed, function() {
KTUtil.removeClass(item, 'hiding');
KTUtil.removeClass(item, 'show');
KTUtil.removeClass(sub, 'show');
KTUtil.removeClass(item, 'hover'); // update
KTEventHandler.trigger(the.element, 'kt.menu.accordion.hidden', item);
});
}
var _setActiveLink = function(link) {
var item = _getItemElement(link);
if (!item) {
return;
}
var parentItems = _getItemParentElements(item);
var parentTabPane = link.closest('.tab-pane');
var activeLinks = [].slice.call(the.element.querySelectorAll('.menu-link.active'));
var activeParentItems = [].slice.call(the.element.querySelectorAll('.menu-item.here, .menu-item.show'));
if (_getItemSubType(item) === "accordion") {
_showAccordion(item);
} else {
item.classList.add("here");
}
if ( parentItems && parentItems.length > 0 ) {
for (var i = 0, len = parentItems.length; i < len; i++) {
var parentItem = parentItems[i];
if (_getItemSubType(parentItem) === "accordion") {
_showAccordion(parentItem);
} else {
parentItem.classList.add("here");
}
}
}
activeLinks.map(function (activeLink) {
activeLink.classList.remove("active");
});
activeParentItems.map(function (activeParentItem) {
if (activeParentItem.contains(item) === false) {
activeParentItem.classList.remove("here");
activeParentItem.classList.remove("show");
}
});
// Handle tab
if (parentTabPane && bootstrap.Tab) {
var tabEl = the.element.querySelector('[data-bs-target="#' + parentTabPane.getAttribute("id") + '"]');
var tab = new bootstrap.Tab(tabEl);
if (tab) {
tab.show();
}
}
link.classList.add("active");
}
var _getLinkByAttribute = function(value, name = "href") {
var link = the.element.querySelector('.menu-link[' + name + '="' + value + '"]');
if (link) {
return link;
} else {
null;
}
}
// Hide all shown accordions of item
var _hideAccordions = function(item) {
var itemsToHide = KTUtil.findAll(the.element, '.show[data-kt-menu-trigger]');
var itemToHide;
if (itemsToHide && itemsToHide.length > 0) {
for (var i = 0, len = itemsToHide.length; i < len; i++) {
itemToHide = itemsToHide[i];
if ( _getItemSubType(itemToHide) === 'accordion' && itemToHide !== item && item.contains(itemToHide) === false && itemToHide.contains(item) === false ) {
_hideAccordion(itemToHide);
}
}
}
}
// Get item option(through html attributes)
var _getOptionFromElementAttribute = function(item, name) {
var attr;
var value = null;
if ( item && item.hasAttribute('data-kt-menu-' + name) ) {
attr = item.getAttribute('data-kt-menu-' + name);
value = KTUtil.getResponsiveValue(attr);
if ( value !== null && String(value) === 'true' ) {
value = true;
} else if ( value !== null && String(value) === 'false' ) {
value = false;
}
}
return value;
}
var _destroy = function() {
KTUtil.data(the.element).remove('menu');
}
// Construct Class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Event Handlers
the.click = function(element, e) {
return _click(element, e);
}
the.link = function(element, e) {
return _link(element, e);
}
the.dismiss = function(element, e) {
return _dismiss(element, e);
}
the.mouseover = function(element, e) {
return _mouseover(element, e);
}
the.mouseout = function(element, e) {
return _mouseout(element, e);
}
// General Methods
the.getItemTriggerType = function(item) {
return _getOptionFromElementAttribute(item, 'trigger');
}
the.getItemSubType = function(element) {
return _getItemSubType(element);
}
the.show = function(item) {
return _show(item);
}
the.hide = function(item) {
return _hide(item);
}
the.toggle = function(item) {
return _toggle(item);
}
the.reset = function(item) {
return _reset(item);
}
the.update = function() {
return _update();
}
the.getElement = function() {
return the.element;
}
the.setActiveLink = function(link) {
return _setActiveLink(link);
}
the.getLinkByAttribute = function(value, name = "href") {
return _getLinkByAttribute(value, name);
}
the.getItemLinkElement = function(item) {
return _getItemLinkElement(item);
}
the.getItemToggleElement = function(item) {
return _getItemToggleElement(item);
}
the.getItemSubElement = function(item) {
return _getItemSubElement(item);
}
the.getItemParentElements = function(item) {
return _getItemParentElements(item);
}
the.isItemSubShown = function(item) {
return _isItemSubShown(item);
}
the.isItemParentShown = function(item) {
return _isItemParentShown(item);
}
the.getTriggerElement = function() {
return the.triggerElement;
}
the.isItemDropdownPermanent = function(item) {
return _isItemDropdownPermanent(item);
}
the.destroy = function() {
return _destroy();
}
the.disable = function() {
the.disabled = true;
}
the.enable = function() {
the.disabled = false;
}
// Accordion Mode Methods
the.hideAccordions = function(item) {
return _hideAccordions(item);
}
// Event API
the.on = function(name, handler) {
return KTEventHandler.on(the.element, name, handler);
}
the.one = function(name, handler) {
return KTEventHandler.one(the.element, name, handler);
}
the.off = function(name, handlerId) {
return KTEventHandler.off(the.element, name, handlerId);
}
};
// Get KTMenu instance by element
KTMenu.getInstance = function(element) {
var menu;
var item;
if (!element) {
return null;
}
// Element has menu DOM reference in it's DATA storage
if ( KTUtil.data(element).has('menu') ) {
return KTUtil.data(element).get('menu');
}
// Element has .menu parent
if ( menu = element.closest('.menu') ) {
if ( KTUtil.data(menu).has('menu') ) {
return KTUtil.data(menu).get('menu');
}
}
// Element has a parent with DOM reference to .menu in it's DATA storage
if ( KTUtil.hasClass(element, 'menu-link') ) {
var sub = element.closest('.menu-sub');
if ( KTUtil.data(sub).has('menu') ) {
return KTUtil.data(sub).get('menu');
}
}
return null;
}
// Hide all dropdowns and skip one if provided
KTMenu.hideDropdowns = function(skip) {
var items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');
if (items && items.length > 0) {
for (var i = 0, len = items.length; i < len; i++) {
var item = items[i];
var menu = KTMenu.getInstance(item);
if ( menu && menu.getItemSubType(item) === 'dropdown' ) {
if ( skip ) {
if ( menu.getItemSubElement(item).contains(skip) === false && item.contains(skip) === false && item !== skip ) {
menu.hide(item);
}
} else {
menu.hide(item);
}
}
}
}
}
// Update all dropdowns popover instances
KTMenu.updateDropdowns = function() {
var items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');
if (items && items.length > 0) {
for (var i = 0, len = items.length; i < len; i++) {
var item = items[i];
if ( KTUtil.data(item).has('popper') ) {
KTUtil.data(item).get('popper').forceUpdate();
}
}
}
}
// Global handlers
KTMenu.initHandlers = function() {
// Dropdown handler
document.addEventListener("click", function(e) {
var items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]:not([data-kt-menu-static="true"])');
var menu;
var item;
var sub;
var menuObj;
if ( items && items.length > 0 ) {
for ( var i = 0, len = items.length; i < len; i++ ) {
item = items[i];
menuObj = KTMenu.getInstance(item);
if (menuObj && menuObj.getItemSubType(item) === 'dropdown') {
menu = menuObj.getElement();
sub = menuObj.getItemSubElement(item);
if ( item === e.target || item.contains(e.target) ) {
continue;
}
if ( sub === e.target || sub.contains(e.target) ) {
continue;
}
menuObj.hide(item);
}
}
}
});
// Sub toggle handler(updated)
KTUtil.on(document.body, '.menu-item[data-kt-menu-trigger] > .menu-link, [data-kt-menu-trigger]:not(.menu-item):not([data-kt-menu-trigger="auto"])', 'click', function(e) {
var menu = KTMenu.getInstance(this);
if ( menu !== null ) {
return menu.click(this, e);
}
});
// Link handler
KTUtil.on(document.body, '.menu-item:not([data-kt-menu-trigger]) > .menu-link', 'click', function(e) {
var menu = KTMenu.getInstance(this);
if ( menu !== null ) {
return menu.link(this, e);
}
});
// Dismiss handler
KTUtil.on(document.body, '[data-kt-menu-dismiss="true"]', 'click', function(e) {
var menu = KTMenu.getInstance(this);
if ( menu !== null ) {
return menu.dismiss(this, e);
}
});
// Mouseover handler
KTUtil.on(document.body, '[data-kt-menu-trigger], .menu-sub', 'mouseover', function(e) {
var menu = KTMenu.getInstance(this);
if ( menu !== null && menu.getItemSubType(this) === 'dropdown' ) {
return menu.mouseover(this, e);
}
});
// Mouseout handler
KTUtil.on(document.body, '[data-kt-menu-trigger], .menu-sub', 'mouseout', function(e) {
var menu = KTMenu.getInstance(this);
if ( menu !== null && menu.getItemSubType(this) === 'dropdown' ) {
return menu.mouseout(this, e);
}
});
// Resize handler
window.addEventListener('resize', function() {
var menu;
var timer;
KTUtil.throttle(timer, function() {
// Locate and update Offcanvas instances on window resize
var elements = document.querySelectorAll('[data-kt-menu="true"]');
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
menu = KTMenu.getInstance(elements[i]);
if (menu) {
menu.update();
}
}
}
}, 200);
});
}
// Render menus by url
KTMenu.updateByLinkAttribute = function(value, name = "href") {
// Set menu link active state by attribute value
var elements = document.querySelectorAll('[data-kt-menu="true"]');
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
var menu = KTMenu.getInstance(elements[i]);
if (menu) {
var link = menu.getLinkByAttribute(value, name);
if (link) {
menu.setActiveLink(link);
}
}
}
}
}
// Global instances
KTMenu.createInstances = function(selector = '[data-kt-menu="true"]') {
// Initialize menus
var elements = document.querySelectorAll(selector);
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
new KTMenu(elements[i]);
}
}
}
// Global initialization
KTMenu.init = function() {
KTMenu.createInstances();
if (KTMenuHandlersInitialized === false) {
KTMenu.initHandlers();
KTMenuHandlersInitialized = true;
}
};
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTMenu;
}
"use strict";
// Class definition
var KTPasswordMeter = function(element, options) {
////////////////////////////
// ** Private variables ** //
////////////////////////////
var the = this;
if (!element) {
return;
}
// Default Options
var defaultOptions = {
minLength: 8,
checkUppercase: true,
checkLowercase: true,
checkDigit: true,
checkChar: true,
scoreHighlightClass: 'active'
};
////////////////////////////
// ** Private methods ** //
////////////////////////////
// Constructor
var _construct = function() {
if ( KTUtil.data(element).has('password-meter') === true ) {
the = KTUtil.data(element).get('password-meter');
} else {
_init();
}
}
// Initialize
var _init = function() {
// Variables
the.options = KTUtil.deepExtend({}, defaultOptions, options);
the.score = 0;
the.checkSteps = 5;
// Elements
the.element = element;
the.inputElement = the.element.querySelector('input[type]');
the.visibilityElement = the.element.querySelector('[data-kt-password-meter-control="visibility"]');
the.highlightElement = the.element.querySelector('[data-kt-password-meter-control="highlight"]');
// Set initialized
the.element.setAttribute('data-kt-password-meter', 'true');
// Event Handlers
_handlers();
// Bind Instance
KTUtil.data(the.element).set('password-meter', the);
}
// Handlers
var _handlers = function() {
if (the.highlightElement) {
the.inputElement.addEventListener('input', function() {
_check();
});
}
if (the.visibilityElement) {
the.visibilityElement.addEventListener('click', function() {
_visibility();
});
}
}
// Event handlers
var _check = function() {
var score = 0;
var checkScore = _getCheckScore();
if (_checkLength() === true) {
score = score + checkScore;
}
if (the.options.checkUppercase === true && _checkLowercase() === true) {
score = score + checkScore;
}
if (the.options.checkLowercase === true && _checkUppercase() === true ) {
score = score + checkScore;
}
if (the.options.checkDigit === true && _checkDigit() === true ) {
score = score + checkScore;
}
if (the.options.checkChar === true && _checkChar() === true ) {
score = score + checkScore;
}
the.score = score;
_highlight();
}
var _checkLength = function() {
return the.inputElement.value.length >= the.options.minLength; // 20 score
}
var _checkLowercase = function() {
return /[a-z]/.test(the.inputElement.value); // 20 score
}
var _checkUppercase = function() {
return /[A-Z]/.test(the.inputElement.value); // 20 score
}
var _checkDigit = function() {
return /[0-9]/.test(the.inputElement.value); // 20 score
}
var _checkChar = function() {
return /[~`!#@$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(the.inputElement.value); // 20 score
}
var _getCheckScore = function() {
var count = 1;
if (the.options.checkUppercase === true) {
count++;
}
if (the.options.checkLowercase === true) {
count++;
}
if (the.options.checkDigit === true) {
count++;
}
if (the.options.checkChar === true) {
count++;
}
the.checkSteps = count;
return 100 / the.checkSteps;
}
var _highlight = function() {
var items = [].slice.call(the.highlightElement.querySelectorAll('div'));
var total = items.length;
var index = 0;
var checkScore = _getCheckScore();
var score = _getScore();
items.map(function (item) {
index++;
if ( (checkScore * index * (the.checkSteps / total)) <= score ) {
item.classList.add('active');
} else {
item.classList.remove('active');
}
});
}
var _visibility = function() {
var visibleIcon = the.visibilityElement.querySelector(':scope > i:not(.d-none)');
var hiddenIcon = the.visibilityElement.querySelector(':scope > i.d-none');
if (the.inputElement.getAttribute('type').toLowerCase() === 'password' ) {
the.inputElement.setAttribute('type', 'text');
} else {
the.inputElement.setAttribute('type', 'password');
}
visibleIcon.classList.add('d-none');
hiddenIcon.classList.remove('d-none');
the.inputElement.focus();
}
var _reset = function() {
the.score = 0;
_highlight();
}
// Gets current password score
var _getScore = function() {
return the.score;
}
var _destroy = function() {
KTUtil.data(the.element).remove('password-meter');
}
// Construct class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Plugin API
the.check = function() {
return _check();
}
the.getScore = function() {
return _getScore();
}
the.reset = function() {
return _reset();
}
the.destroy = function() {
return _destroy();
}
};
// Static methods
KTPasswordMeter.getInstance = function(element) {
if ( element !== null && KTUtil.data(element).has('password-meter') ) {
return KTUtil.data(element).get('password-meter');
} else {
return null;
}
}
// Create instances
KTPasswordMeter.createInstances = function(selector = '[data-kt-password-meter]') {
// Get instances
var elements = document.body.querySelectorAll(selector);
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
// Initialize instances
new KTPasswordMeter(elements[i]);
}
}
}
// Global initialization
KTPasswordMeter.init = function() {
KTPasswordMeter.createInstances();
};
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTPasswordMeter;
}
"use strict";
var KTScrollHandlersInitialized = false;
// Class definition
var KTScroll = function(element, options) {
////////////////////////////
// ** Private Variables ** //
////////////////////////////
var the = this;
if (!element) {
return;
}
// Default options
var defaultOptions = {
saveState: true
};
////////////////////////////
// ** Private Methods ** //
////////////////////////////
var _construct = function() {
if ( KTUtil.data(element).has('scroll') ) {
the = KTUtil.data(element).get('scroll');
} else {
_init();
}
}
var _init = function() {
// Variables
the.options = KTUtil.deepExtend({}, defaultOptions, options);
// Elements
the.element = element;
the.id = the.element.getAttribute('id');
// Set initialized
the.element.setAttribute('data-kt-scroll', 'true');
// Update
_update();
// Bind Instance
KTUtil.data(the.element).set('scroll', the);
}
var _setupHeight = function() {
var heightType = _getHeightType();
var height = _getHeight();
// Set height
if ( height !== null && height.length > 0 ) {
KTUtil.css(the.element, heightType, height);
} else {
KTUtil.css(the.element, heightType, '');
}
}
var _setupState = function () {
var namespace = _getStorageNamespace();
if ( _getOption('save-state') === true && the.id ) {
if ( localStorage.getItem(namespace + the.id + 'st') ) {
var pos = parseInt(localStorage.getItem(namespace + the.id + 'st'));
if ( pos > 0 ) {
the.element.scroll({
top: pos,
behavior: 'instant'
});
}
}
}
}
var _getStorageNamespace = function(postfix) {
return document.body.hasAttribute("data-kt-name") ? document.body.getAttribute("data-kt-name") + "_" : "";
}
var _setupScrollHandler = function() {
if ( _getOption('save-state') === true && the.id ) {
the.element.addEventListener('scroll', _scrollHandler);
} else {
the.element.removeEventListener('scroll', _scrollHandler);
}
}
var _destroyScrollHandler = function() {
the.element.removeEventListener('scroll', _scrollHandler);
}
var _resetHeight = function() {
KTUtil.css(the.element, _getHeightType(), '');
}
var _scrollHandler = function () {
var namespace = _getStorageNamespace();
localStorage.setItem(namespace + the.id + 'st', the.element.scrollTop);
}
var _update = function() {
// Activate/deactivate
if ( _getOption('activate') === true || the.element.hasAttribute('data-kt-scroll-activate') === false ) {
_setupHeight();
_setupStretchHeight();
_setupScrollHandler();
_setupState();
} else {
_resetHeight()
_destroyScrollHandler();
}
}
var _setupStretchHeight = function() {
var stretch = _getOption('stretch');
// Stretch
if ( stretch !== null ) {
var elements = document.querySelectorAll(stretch);
if ( elements && elements.length == 2 ) {
var element1 = elements[0];
var element2 = elements[1];
var diff = _getElementHeight(element2) - _getElementHeight(element1);
if (diff > 0) {
var height = parseInt(KTUtil.css(the.element, _getHeightType())) + diff;
KTUtil.css(the.element, _getHeightType(), String(height) + 'px');
}
}
}
}
var _getHeight = function() {
var height = _getOption(_getHeightType());
if ( height instanceof Function ) {
return height.call();
} else if ( height !== null && typeof height === 'string' && height.toLowerCase() === 'auto' ) {
return _getAutoHeight();
} else {
return height;
}
}
var _getAutoHeight = function() {
var height = KTUtil.getViewPort().height;
var dependencies = _getOption('dependencies');
var wrappers = _getOption('wrappers');
var offset = _getOption('offset');
// Spacings
height = height - _getElementSpacing(the.element);
// Height dependencies
//console.log('Q:' + JSON.stringify(dependencies));
if ( dependencies !== null ) {
var elements = document.querySelectorAll(dependencies);
if ( elements && elements.length > 0 ) {
for ( var i = 0, len = elements.length; i < len; i++ ) {
if ( KTUtil.visible(elements[i]) === false ) {
continue;
}
height = height - _getElementHeight(elements[i]);
}
}
}
// Wrappers
if ( wrappers !== null ) {
var elements = document.querySelectorAll(wrappers);
if ( elements && elements.length > 0 ) {
for ( var i = 0, len = elements.length; i < len; i++ ) {
if ( KTUtil.visible(elements[i]) === false ) {
continue;
}
height = height - _getElementSpacing(elements[i]);
}
}
}
// Custom offset
if ( offset !== null && typeof offset !== 'object') {
height = height - parseInt(offset);
}
return String(height) + 'px';
}
var _getElementHeight = function(element) {
var height = 0;
if (element !== null) {
height = height + parseInt(KTUtil.css(element, 'height'));
height = height + parseInt(KTUtil.css(element, 'margin-top'));
height = height + parseInt(KTUtil.css(element, 'margin-bottom'));
if (KTUtil.css(element, 'border-top')) {
height = height + parseInt(KTUtil.css(element, 'border-top'));
}
if (KTUtil.css(element, 'border-bottom')) {
height = height + parseInt(KTUtil.css(element, 'border-bottom'));
}
}
return height;
}
var _getElementSpacing = function(element) {
var spacing = 0;
if (element !== null) {
spacing = spacing + parseInt(KTUtil.css(element, 'margin-top'));
spacing = spacing + parseInt(KTUtil.css(element, 'margin-bottom'));
spacing = spacing + parseInt(KTUtil.css(element, 'padding-top'));
spacing = spacing + parseInt(KTUtil.css(element, 'padding-bottom'));
if (KTUtil.css(element, 'border-top')) {
spacing = spacing + parseInt(KTUtil.css(element, 'border-top'));
}
if (KTUtil.css(element, 'border-bottom')) {
spacing = spacing + parseInt(KTUtil.css(element, 'border-bottom'));
}
}
return spacing;
}
var _getOption = function(name) {
if ( the.element.hasAttribute('data-kt-scroll-' + name) === true ) {
var attr = the.element.getAttribute('data-kt-scroll-' + name);
var value = KTUtil.getResponsiveValue(attr);
if ( value !== null && String(value) === 'true' ) {
value = true;
} else if ( value !== null && String(value) === 'false' ) {
value = false;
}
return value;
} else {
var optionName = KTUtil.snakeToCamel(name);
if ( the.options[optionName] ) {
return KTUtil.getResponsiveValue(the.options[optionName]);
} else {
return null;
}
}
}
var _getHeightType = function() {
if (_getOption('height')) {
return 'height';
} if (_getOption('min-height')) {
return 'min-height';
} if (_getOption('max-height')) {
return 'max-height';
}
}
var _destroy = function() {
KTUtil.data(the.element).remove('scroll');
}
// Construct Class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
the.update = function() {
return _update();
}
the.getHeight = function() {
return _getHeight();
}
the.getElement = function() {
return the.element;
}
the.destroy = function() {
return _destroy();
}
};
// Static methods
KTScroll.getInstance = function(element) {
if ( element !== null && KTUtil.data(element).has('scroll') ) {
return KTUtil.data(element).get('scroll');
} else {
return null;
}
}
// Create instances
KTScroll.createInstances = function(selector = '[data-kt-scroll="true"]') {
// Initialize Menus
var elements = document.body.querySelectorAll(selector);
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
new KTScroll(elements[i]);
}
}
}
// Window resize handling
KTScroll.handleResize = function() {
window.addEventListener('resize', function() {
var timer;
KTUtil.throttle(timer, function() {
// Locate and update Offcanvas instances on window resize
var elements = document.body.querySelectorAll('[data-kt-scroll="true"]');
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
var scroll = KTScroll.getInstance(elements[i]);
if (scroll) {
scroll.update();
}
}
}
}, 200);
});
}
// Global initialization
KTScroll.init = function() {
KTScroll.createInstances();
if (KTScrollHandlersInitialized === false) {
KTScroll.handleResize();
KTScrollHandlersInitialized = true;
}
};
// Webpack Support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTScroll;
}
"use strict";
// Class definition
var KTScrolltop = function(element, options) {
////////////////////////////
// ** Private variables ** //
////////////////////////////
var the = this;
if ( typeof element === "undefined" || element === null ) {
return;
}
// Default options
var defaultOptions = {
offset: 300,
speed: 600
};
////////////////////////////
// ** Private methods ** //
////////////////////////////
var _construct = function() {
if (KTUtil.data(element).has('scrolltop')) {
the = KTUtil.data(element).get('scrolltop');
} else {
_init();
}
}
var _init = function() {
// Variables
the.options = KTUtil.deepExtend({}, defaultOptions, options);
the.uid = KTUtil.getUniqueId('scrolltop');
the.element = element;
// Set initialized
the.element.setAttribute('data-kt-scrolltop', 'true');
// Event Handlers
_handlers();
// Bind Instance
KTUtil.data(the.element).set('scrolltop', the);
}
var _handlers = function() {
var timer;
window.addEventListener('scroll', function() {
KTUtil.throttle(timer, function() {
_scroll();
}, 200);
});
KTUtil.addEvent(the.element, 'click', function(e) {
e.preventDefault();
_go();
});
}
var _scroll = function() {
var offset = parseInt(_getOption('offset'));
var pos = KTUtil.getScrollTop(); // current vertical position
if ( pos > offset ) {
if ( document.body.hasAttribute('data-kt-scrolltop') === false ) {
document.body.setAttribute('data-kt-scrolltop', 'on');
}
} else {
if ( document.body.hasAttribute('data-kt-scrolltop') === true ) {
document.body.removeAttribute('data-kt-scrolltop');
}
}
}
var _go = function() {
var speed = parseInt(_getOption('speed'));
window.scrollTo({top: 0, behavior: 'smooth'});
//KTUtil.scrollTop(0, speed);
}
var _getOption = function(name) {
if ( the.element.hasAttribute('data-kt-scrolltop-' + name) === true ) {
var attr = the.element.getAttribute('data-kt-scrolltop-' + name);
var value = KTUtil.getResponsiveValue(attr);
if ( value !== null && String(value) === 'true' ) {
value = true;
} else if ( value !== null && String(value) === 'false' ) {
value = false;
}
return value;
} else {
var optionName = KTUtil.snakeToCamel(name);
if ( the.options[optionName] ) {
return KTUtil.getResponsiveValue(the.options[optionName]);
} else {
return null;
}
}
}
var _destroy = function() {
KTUtil.data(the.element).remove('scrolltop');
}
// Construct class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Plugin API
the.go = function() {
return _go();
}
the.getElement = function() {
return the.element;
}
the.destroy = function() {
return _destroy();
}
};
// Static methods
KTScrolltop.getInstance = function(element) {
if (element && KTUtil.data(element).has('scrolltop')) {
return KTUtil.data(element).get('scrolltop');
} else {
return null;
}
}
// Create instances
KTScrolltop.createInstances = function(selector = '[data-kt-scrolltop="true"]') {
// Initialize Menus
var elements = document.body.querySelectorAll(selector);
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
new KTScrolltop(elements[i]);
}
}
}
// Global initialization
KTScrolltop.init = function() {
KTScrolltop.createInstances();
};
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTScrolltop;
}
"use strict";
// Class definition
var KTSearch = function(element, options) {
////////////////////////////
// ** Private variables ** //
////////////////////////////
var the = this;
if (!element) {
return;
}
// Default Options
var defaultOptions = {
minLength: 2, // Miniam text lenght to query search
keypress: true, // Enable search on keypress
enter: true, // Enable search on enter key press
layout: 'menu', // Use 'menu' or 'inline' layout options to display search results
responsive: null, // Pass integer value or bootstrap compatible breakpoint key(sm,md,lg,xl,xxl) to enable reponsive form mode for device width below the breakpoint value
showOnFocus: true // Always show menu on input focus
};
////////////////////////////
// ** Private methods ** //
////////////////////////////
// Construct
var _construct = function() {
if ( KTUtil.data(element).has('search') === true ) {
the = KTUtil.data(element).get('search');
} else {
_init();
}
}
// Init
var _init = function() {
// Variables
the.options = KTUtil.deepExtend({}, defaultOptions, options);
the.processing = false;
// Elements
the.element = element;
the.contentElement = _getElement('content');
the.formElement = _getElement('form');
the.inputElement = _getElement('input');
the.spinnerElement = _getElement('spinner');
the.clearElement = _getElement('clear');
the.toggleElement = _getElement('toggle');
the.submitElement = _getElement('submit');
the.toolbarElement = _getElement('toolbar');
the.resultsElement = _getElement('results');
the.suggestionElement = _getElement('suggestion');
the.emptyElement = _getElement('empty');
// Set initialized
the.element.setAttribute('data-kt-search', 'true');
// Layout
the.layout = _getOption('layout');
// Menu
if ( the.layout === 'menu' ) {
the.menuObject = new KTMenu(the.contentElement);
} else {
the.menuObject = null;
}
// Update
_update();
// Event Handlers
_handlers();
// Bind Instance
KTUtil.data(the.element).set('search', the);
}
// Handlera
var _handlers = function() {
// Focus
the.inputElement.addEventListener('focus', _focus);
// Blur
the.inputElement.addEventListener('blur', _blur);
// Keypress
if ( _getOption('keypress') === true ) {
the.inputElement.addEventListener('input', _input);
}
// Submit
if ( the.submitElement ) {
the.submitElement.addEventListener('click', _search);
}
// Enter
if ( _getOption('enter') === true ) {
the.inputElement.addEventListener('keypress', _enter);
}
// Clear
if ( the.clearElement ) {
the.clearElement.addEventListener('click', _clear);
}
// Menu
if ( the.menuObject ) {
// Toggle menu
if ( the.toggleElement ) {
the.toggleElement.addEventListener('click', _show);
the.menuObject.on('kt.menu.dropdown.show', function(item) {
if (KTUtil.visible(the.toggleElement)) {
the.toggleElement.classList.add('active');
the.toggleElement.classList.add('show');
}
});
the.menuObject.on('kt.menu.dropdown.hide', function(item) {
if (KTUtil.visible(the.toggleElement)) {
the.toggleElement.classList.remove('active');
the.toggleElement.classList.remove('show');
}
});
}
the.menuObject.on('kt.menu.dropdown.shown', function() {
the.inputElement.focus();
});
}
// Window resize handling
window.addEventListener('resize', function() {
var timer;
KTUtil.throttle(timer, function() {
_update();
}, 200);
});
}
// Focus
var _focus = function() {
the.element.classList.add('focus');
if ( _getOption('show-on-focus') === true || the.inputElement.value.length >= minLength ) {
_show();
}
}
// Blur
var _blur = function() {
the.element.classList.remove('focus');
}
// Enter
var _enter = function(e) {
var key = e.charCode || e.keyCode || 0;
if (key == 13) {
e.preventDefault();
_search();
}
}
// Input
var _input = function() {
if ( _getOption('min-length') ) {
var minLength = parseInt(_getOption('min-length'));
if ( the.inputElement.value.length >= minLength ) {
_search();
} else if ( the.inputElement.value.length === 0 ) {
_clear();
}
}
}
// Search
var _search = function() {
if (the.processing === false) {
// Show search spinner
if (the.spinnerElement) {
the.spinnerElement.classList.remove("d-none");
}
// Hide search clear button
if (the.clearElement) {
the.clearElement.classList.add("d-none");
}
// Hide search toolbar
if (the.toolbarElement && the.formElement.contains(the.toolbarElement)) {
the.toolbarElement.classList.add("d-none");
}
// Focus input
the.inputElement.focus();
the.processing = true;
KTEventHandler.trigger(the.element, 'kt.search.process', the);
}
}
// Complete
var _complete = function() {
if (the.spinnerElement) {
the.spinnerElement.classList.add("d-none");
}
// Show search toolbar
if (the.clearElement) {
the.clearElement.classList.remove("d-none");
}
if ( the.inputElement.value.length === 0 ) {
_clear();
}
// Focus input
the.inputElement.focus();
_show();
the.processing = false;
}
// Clear
var _clear = function() {
if ( KTEventHandler.trigger(the.element, 'kt.search.clear', the) === false ) {
return;
}
// Clear and focus input
the.inputElement.value = "";
the.inputElement.focus();
// Hide clear icon
if (the.clearElement) {
the.clearElement.classList.add("d-none");
}
// Show search toolbar
if (the.toolbarElement && the.formElement.contains(the.toolbarElement)) {
the.toolbarElement.classList.remove("d-none");
}
// Hide menu
if ( _getOption('show-on-focus') === false ) {
_hide();
}
KTEventHandler.trigger(the.element, 'kt.search.cleared', the);
}
// Update
var _update = function() {
// Handle responsive form
if (the.layout === 'menu') {
var responsiveFormMode = _getResponsiveFormMode();
if ( responsiveFormMode === 'on' && the.contentElement.contains(the.formElement) === false ) {
the.contentElement.prepend(the.formElement);
the.formElement.classList.remove('d-none');
} else if ( responsiveFormMode === 'off' && the.contentElement.contains(the.formElement) === true ) {
the.element.prepend(the.formElement);
the.formElement.classList.add('d-none');
}
}
}
// Show menu
var _show = function() {
if ( the.menuObject ) {
_update();
the.menuObject.show(the.element);
}
}
// Hide menu
var _hide = function() {
if ( the.menuObject ) {
_update();
the.menuObject.hide(the.element);
}
}
// Get option
var _getOption = function(name) {
if ( the.element.hasAttribute('data-kt-search-' + name) === true ) {
var attr = the.element.getAttribute('data-kt-search-' + name);
var value = KTUtil.getResponsiveValue(attr);
if ( value !== null && String(value) === 'true' ) {
value = true;
} else if ( value !== null && String(value) === 'false' ) {
value = false;
}
return value;
} else {
var optionName = KTUtil.snakeToCamel(name);
if ( the.options[optionName] ) {
return KTUtil.getResponsiveValue(the.options[optionName]);
} else {
return null;
}
}
}
// Get element
var _getElement = function(name) {
return the.element.querySelector('[data-kt-search-element="' + name + '"]');
}
// Check if responsive form mode is enabled
var _getResponsiveFormMode = function() {
var responsive = _getOption('responsive');
var width = KTUtil.getViewPort().width;
if (!responsive) {
return null;
}
var breakpoint = KTUtil.getBreakpoint(responsive);
if (!breakpoint ) {
breakpoint = parseInt(responsive);
}
if (width < breakpoint) {
return "on";
} else {
return "off";
}
}
var _destroy = function() {
KTUtil.data(the.element).remove('search');
}
// Construct class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Plugin API
the.show = function() {
return _show();
}
the.hide = function() {
return _hide();
}
the.update = function() {
return _update();
}
the.search = function() {
return _search();
}
the.complete = function() {
return _complete();
}
the.clear = function() {
return _clear();
}
the.isProcessing = function() {
return the.processing;
}
the.getQuery = function() {
return the.inputElement.value;
}
the.getMenu = function() {
return the.menuObject;
}
the.getFormElement = function() {
return the.formElement;
}
the.getInputElement = function() {
return the.inputElement;
}
the.getContentElement = function() {
return the.contentElement;
}
the.getElement = function() {
return the.element;
}
the.destroy = function() {
return _destroy();
}
// Event API
the.on = function(name, handler) {
return KTEventHandler.on(the.element, name, handler);
}
the.one = function(name, handler) {
return KTEventHandler.one(the.element, name, handler);
}
the.off = function(name, handlerId) {
return KTEventHandler.off(the.element, name, handlerId);
}
};
// Static methods
KTSearch.getInstance = function(element) {
if ( element !== null && KTUtil.data(element).has('search') ) {
return KTUtil.data(element).get('search');
} else {
return null;
}
}
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTSearch;
}
"use strict";
// Class definition
var KTStepper = function(element, options) {
//////////////////////////////
// ** Private variables ** //
//////////////////////////////
var the = this;
if ( typeof element === "undefined" || element === null ) {
return;
}
// Default Options
var defaultOptions = {
startIndex: 1,
animation: false,
animationSpeed: '0.3s',
animationNextClass: 'animate__animated animate__slideInRight animate__fast',
animationPreviousClass: 'animate__animated animate__slideInLeft animate__fast'
};
////////////////////////////
// ** Private methods ** //
////////////////////////////
var _construct = function() {
if ( KTUtil.data(element).has('stepper') === true ) {
the = KTUtil.data(element).get('stepper');
} else {
_init();
}
}
var _init = function() {
the.options = KTUtil.deepExtend({}, defaultOptions, options);
the.uid = KTUtil.getUniqueId('stepper');
the.element = element;
// Set initialized
the.element.setAttribute('data-kt-stepper', 'true');
// Elements
the.steps = KTUtil.findAll(the.element, '[data-kt-stepper-element="nav"]');
the.btnNext = KTUtil.find(the.element, '[data-kt-stepper-action="next"]');
the.btnPrevious = KTUtil.find(the.element, '[data-kt-stepper-action="previous"]');
the.btnSubmit = KTUtil.find(the.element, '[data-kt-stepper-action="submit"]');
// Variables
the.totalStepsNumber = the.steps.length;
the.passedStepIndex = 0;
the.currentStepIndex = 1;
the.clickedStepIndex = 0;
// Set Current Step
if ( the.options.startIndex > 1 ) {
_goTo(the.options.startIndex);
}
// Event listeners
the.nextListener = function(e) {
e.preventDefault();
KTEventHandler.trigger(the.element, 'kt.stepper.next', the);
};
the.previousListener = function(e) {
e.preventDefault();
KTEventHandler.trigger(the.element, 'kt.stepper.previous', the);
};
the.stepListener = function(e) {
e.preventDefault();
if ( the.steps && the.steps.length > 0 ) {
for (var i = 0, len = the.steps.length; i < len; i++) {
if ( the.steps[i] === this ) {
the.clickedStepIndex = i + 1;
KTEventHandler.trigger(the.element, 'kt.stepper.click', the);
return;
}
}
}
};
// Event Handlers
KTUtil.addEvent(the.btnNext, 'click', the.nextListener);
KTUtil.addEvent(the.btnPrevious, 'click', the.previousListener);
the.stepListenerId = KTUtil.on(the.element, '[data-kt-stepper-action="step"]', 'click', the.stepListener);
// Bind Instance
KTUtil.data(the.element).set('stepper', the);
}
var _goTo = function(index) {
// Trigger "change" event
KTEventHandler.trigger(the.element, 'kt.stepper.change', the);
// Skip if this step is already shown
if ( index === the.currentStepIndex || index > the.totalStepsNumber || index < 0 ) {
return;
}
// Validate step number
index = parseInt(index);
// Set current step
the.passedStepIndex = the.currentStepIndex;
the.currentStepIndex = index;
// Refresh elements
_refreshUI();
// Trigger "changed" event
KTEventHandler.trigger(the.element, 'kt.stepper.changed', the);
return the;
}
var _goNext = function() {
return _goTo( _getNextStepIndex() );
}
var _goPrevious = function() {
return _goTo( _getPreviousStepIndex() );
}
var _goLast = function() {
return _goTo( _getLastStepIndex() );
}
var _goFirst = function() {
return _goTo( _getFirstStepIndex() );
}
var _refreshUI = function() {
var state = '';
if ( _isLastStep() ) {
state = 'last';
} else if ( _isFirstStep() ) {
state = 'first';
} else {
state = 'between';
}
// Set state class
KTUtil.removeClass(the.element, 'last');
KTUtil.removeClass(the.element, 'first');
KTUtil.removeClass(the.element, 'between');
KTUtil.addClass(the.element, state);
// Step Items
var elements = KTUtil.findAll(the.element, '[data-kt-stepper-element="nav"], [data-kt-stepper-element="content"], [data-kt-stepper-element="info"]');
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
var element = elements[i];
var index = KTUtil.index(element) + 1;
KTUtil.removeClass(element, 'current');
KTUtil.removeClass(element, 'completed');
KTUtil.removeClass(element, 'pending');
if ( index == the.currentStepIndex ) {
KTUtil.addClass(element, 'current');
if ( the.options.animation !== false && element.getAttribute('data-kt-stepper-element') == 'content' ) {
KTUtil.css(element, 'animationDuration', the.options.animationSpeed);
var animation = _getStepDirection(the.passedStepIndex) === 'previous' ? the.options.animationPreviousClass : the.options.animationNextClass;
KTUtil.animateClass(element, animation);
}
} else {
if ( index < the.currentStepIndex ) {
KTUtil.addClass(element, 'completed');
} else {
KTUtil.addClass(element, 'pending');
}
}
}
}
}
var _isLastStep = function() {
return the.currentStepIndex === the.totalStepsNumber;
}
var _isFirstStep = function() {
return the.currentStepIndex === 1;
}
var _isBetweenStep = function() {
return _isLastStep() === false && _isFirstStep() === false;
}
var _getNextStepIndex = function() {
if ( the.totalStepsNumber >= ( the.currentStepIndex + 1 ) ) {
return the.currentStepIndex + 1;
} else {
return the.totalStepsNumber;
}
}
var _getPreviousStepIndex = function() {
if ( ( the.currentStepIndex - 1 ) > 1 ) {
return the.currentStepIndex - 1;
} else {
return 1;
}
}
var _getFirstStepIndex = function(){
return 1;
}
var _getLastStepIndex = function() {
return the.totalStepsNumber;
}
var _getTotalStepsNumber = function() {
return the.totalStepsNumber;
}
var _getStepDirection = function(index) {
if ( index > the.currentStepIndex ) {
return 'next';
} else {
return 'previous';
}
}
var _getStepContent = function(index) {
var content = KTUtil.findAll(the.element, '[data-kt-stepper-element="content"]');
if ( content[index-1] ) {
return content[index-1];
} else {
return false;
}
}
var _destroy = function() {
// Event Handlers
KTUtil.removeEvent(the.btnNext, 'click', the.nextListener);
KTUtil.removeEvent(the.btnPrevious, 'click', the.previousListener);
KTUtil.off(the.element, 'click', the.stepListenerId);
KTUtil.data(the.element).remove('stepper');
}
// Construct Class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Plugin API
the.getElement = function(index) {
return the.element;
}
the.goTo = function(index) {
return _goTo(index);
}
the.goPrevious = function() {
return _goPrevious();
}
the.goNext = function() {
return _goNext();
}
the.goFirst = function() {
return _goFirst();
}
the.goLast = function() {
return _goLast();
}
the.getCurrentStepIndex = function() {
return the.currentStepIndex;
}
the.getNextStepIndex = function() {
return _getNextStepIndex();
}
the.getPassedStepIndex = function() {
return the.passedStepIndex;
}
the.getClickedStepIndex = function() {
return the.clickedStepIndex;
}
the.getPreviousStepIndex = function() {
return _getPreviousStepIndex();
}
the.destroy = function() {
return _destroy();
}
// Event API
the.on = function(name, handler) {
return KTEventHandler.on(the.element, name, handler);
}
the.one = function(name, handler) {
return KTEventHandler.one(the.element, name, handler);
}
the.off = function(name, handlerId) {
return KTEventHandler.off(the.element, name, handlerId);
}
the.trigger = function(name, event) {
return KTEventHandler.trigger(the.element, name, event, the, event);
}
};
// Static methods
KTStepper.getInstance = function(element) {
if ( element !== null && KTUtil.data(element).has('stepper') ) {
return KTUtil.data(element).get('stepper');
} else {
return null;
}
}
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTStepper;
}
"use strict";
var KTStickyHandlersInitialized = false;
// Class definition
var KTSticky = function(element, options) {
////////////////////////////
// ** Private Variables ** //
////////////////////////////
var the = this;
if ( typeof element === "undefined" || element === null ) {
return;
}
// Default Options
var defaultOptions = {
offset: 200,
reverse: false,
release: null,
animation: true,
animationSpeed: '0.3s',
animationClass: 'animation-slide-in-down'
};
////////////////////////////
// ** Private Methods ** //
////////////////////////////
var _construct = function() {
if ( KTUtil.data(element).has('sticky') === true ) {
the = KTUtil.data(element).get('sticky');
} else {
_init();
}
}
var _init = function() {
the.element = element;
the.options = KTUtil.deepExtend({}, defaultOptions, options);
the.uid = KTUtil.getUniqueId('sticky');
the.name = the.element.getAttribute('data-kt-sticky-name');
the.attributeName = 'data-kt-sticky-' + the.name;
the.attributeName2 = 'data-kt-' + the.name;
the.eventTriggerState = true;
the.lastScrollTop = 0;
the.scrollHandler;
// Set initialized
the.element.setAttribute('data-kt-sticky', 'true');
// Event Handlers
window.addEventListener('scroll', _scroll);
// Initial Launch
_scroll();
// Bind Instance
KTUtil.data(the.element).set('sticky', the);
}
var _scroll = function(e) {
var offset = _getOption('offset');
var release = _getOption('release');
var reverse = _getOption('reverse');
var st;
var attrName;
var diff;
// Exit if false
if ( offset === false ) {
_disable();
return;
}
offset = parseInt(offset);
release = release ? document.querySelector(release) : null;
st = KTUtil.getScrollTop();
diff = document.documentElement.scrollHeight - window.innerHeight - KTUtil.getScrollTop();
var proceed = (!release || (release.offsetTop - release.clientHeight) > st);
if ( reverse === true ) { // Release on reverse scroll mode
if ( st > offset && proceed ) {
if ( document.body.hasAttribute(the.attributeName) === false) {
if (_enable() === false) {
return;
}
document.body.setAttribute(the.attributeName, 'on');
document.body.setAttribute(the.attributeName2, 'on');
the.element.setAttribute("data-kt-sticky-enabled", "true");
}
if ( the.eventTriggerState === true ) {
KTEventHandler.trigger(the.element, 'kt.sticky.on', the);
KTEventHandler.trigger(the.element, 'kt.sticky.change', the);
the.eventTriggerState = false;
}
} else { // Back scroll mode
if ( document.body.hasAttribute(the.attributeName) === true) {
_disable();
document.body.removeAttribute(the.attributeName);
document.body.removeAttribute(the.attributeName2);
the.element.removeAttribute("data-kt-sticky-enabled");
}
if ( the.eventTriggerState === false ) {
KTEventHandler.trigger(the.element, 'kt.sticky.off', the);
KTEventHandler.trigger(the.element, 'kt.sticky.change', the);
the.eventTriggerState = true;
}
}
the.lastScrollTop = st;
} else { // Classic scroll mode
if ( st > offset && proceed ) {
if ( document.body.hasAttribute(the.attributeName) === false) {
if (_enable() === false) {
return;
}
document.body.setAttribute(the.attributeName, 'on');
document.body.setAttribute(the.attributeName2, 'on');
the.element.setAttribute("data-kt-sticky-enabled", "true");
}
if ( the.eventTriggerState === true ) {
KTEventHandler.trigger(the.element, 'kt.sticky.on', the);
KTEventHandler.trigger(the.element, 'kt.sticky.change', the);
the.eventTriggerState = false;
}
} else { // back scroll mode
if ( document.body.hasAttribute(the.attributeName) === true ) {
_disable();
document.body.removeAttribute(the.attributeName);
document.body.removeAttribute(the.attributeName2);
the.element.removeAttribute("data-kt-sticky-enabled");
}
if ( the.eventTriggerState === false ) {
KTEventHandler.trigger(the.element, 'kt.sticky.off', the);
KTEventHandler.trigger(the.element, 'kt.sticky.change', the);
the.eventTriggerState = true;
}
}
}
if (release) {
if ( release.offsetTop - release.clientHeight > st ) {
the.element.setAttribute('data-kt-sticky-released', 'true');
} else {
the.element.removeAttribute('data-kt-sticky-released');
}
}
}
var _enable = function(update) {
var top = _getOption('top');
top = top ? parseInt(top) : 0;
var left = _getOption('left');
var right = _getOption('right');
var width = _getOption('width');
var zindex = _getOption('zindex');
var dependencies = _getOption('dependencies');
var classes = _getOption('class');
var height = _calculateHeight();
var heightOffset = _getOption('height-offset');
heightOffset = heightOffset ? parseInt(heightOffset) : 0;
if (height + heightOffset + top > KTUtil.getViewPort().height) {
return false;
}
if ( update !== true && _getOption('animation') === true ) {
KTUtil.css(the.element, 'animationDuration', _getOption('animationSpeed'));
KTUtil.animateClass(the.element, 'animation ' + _getOption('animationClass'));
}
if ( classes !== null ) {
KTUtil.addClass(the.element, classes);
}
if ( zindex !== null ) {
KTUtil.css(the.element, 'z-index', zindex);
KTUtil.css(the.element, 'position', 'fixed');
}
if ( top >= 0 ) {
KTUtil.css(the.element, 'top', String(top) + 'px');
}
if ( width !== null ) {
if (width['target']) {
var targetElement = document.querySelector(width['target']);
if (targetElement) {
width = KTUtil.css(targetElement, 'width');
}
}
KTUtil.css(the.element, 'width', width);
}
if ( left !== null ) {
if ( String(left).toLowerCase() === 'auto' ) {
var offsetLeft = KTUtil.offset(the.element).left;
if ( offsetLeft >= 0 ) {
KTUtil.css(the.element, 'left', String(offsetLeft) + 'px');
}
} else {
KTUtil.css(the.element, 'left', left);
}
}
if ( right !== null ) {
KTUtil.css(the.element, 'right', right);
}
// Height dependencies
if ( dependencies !== null ) {
var dependencyElements = document.querySelectorAll(dependencies);
if ( dependencyElements && dependencyElements.length > 0 ) {
for ( var i = 0, len = dependencyElements.length; i < len; i++ ) {
KTUtil.css(dependencyElements[i], 'padding-top', String(height) + 'px');
}
}
}
}
var _disable = function() {
KTUtil.css(the.element, 'top', '');
KTUtil.css(the.element, 'width', '');
KTUtil.css(the.element, 'left', '');
KTUtil.css(the.element, 'right', '');
KTUtil.css(the.element, 'z-index', '');
KTUtil.css(the.element, 'position', '');
var dependencies = _getOption('dependencies');
var classes = _getOption('class');
if ( classes !== null ) {
KTUtil.removeClass(the.element, classes);
}
// Height dependencies
if ( dependencies !== null ) {
var dependencyElements = document.querySelectorAll(dependencies);
if ( dependencyElements && dependencyElements.length > 0 ) {
for ( var i = 0, len = dependencyElements.length; i < len; i++ ) {
KTUtil.css(dependencyElements[i], 'padding-top', '');
}
}
}
}
var _check = function() {
}
var _calculateHeight = function() {
var height = parseFloat(KTUtil.css(the.element, 'height'));
height = height + parseFloat(KTUtil.css(the.element, 'margin-top'));
height = height + parseFloat(KTUtil.css(the.element, 'margin-bottom'));
if (KTUtil.css(element, 'border-top')) {
height = height + parseFloat(KTUtil.css(the.element, 'border-top'));
}
if (KTUtil.css(element, 'border-bottom')) {
height = height + parseFloat(KTUtil.css(the.element, 'border-bottom'));
}
return height;
}
var _getOption = function(name) {
if ( the.element.hasAttribute('data-kt-sticky-' + name) === true ) {
var attr = the.element.getAttribute('data-kt-sticky-' + name);
var value = KTUtil.getResponsiveValue(attr);
if ( value !== null && String(value) === 'true' ) {
value = true;
} else if ( value !== null && String(value) === 'false' ) {
value = false;
}
return value;
} else {
var optionName = KTUtil.snakeToCamel(name);
if ( the.options[optionName] ) {
return KTUtil.getResponsiveValue(the.options[optionName]);
} else {
return null;
}
}
}
var _destroy = function() {
window.removeEventListener('scroll', _scroll);
KTUtil.data(the.element).remove('sticky');
}
// Construct Class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Methods
the.update = function() {
if ( document.body.hasAttribute(the.attributeName) === true ) {
_disable();
document.body.removeAttribute(the.attributeName);
document.body.removeAttribute(the.attributeName2);
_enable(true);
document.body.setAttribute(the.attributeName, 'on');
document.body.setAttribute(the.attributeName2, 'on');
}
}
the.destroy = function() {
return _destroy();
}
// Event API
the.on = function(name, handler) {
return KTEventHandler.on(the.element, name, handler);
}
the.one = function(name, handler) {
return KTEventHandler.one(the.element, name, handler);
}
the.off = function(name, handlerId) {
return KTEventHandler.off(the.element, name, handlerId);
}
the.trigger = function(name, event) {
return KTEventHandler.trigger(the.element, name, event, the, event);
}
};
// Static methods
KTSticky.getInstance = function(element) {
if ( element !== null && KTUtil.data(element).has('sticky') ) {
return KTUtil.data(element).get('sticky');
} else {
return null;
}
}
// Create instances
KTSticky.createInstances = function(selector = '[data-kt-sticky="true"]') {
// Initialize Menus
var elements = document.body.querySelectorAll(selector);
var sticky;
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
sticky = new KTSticky(elements[i]);
}
}
}
// Window resize handler
KTSticky.handleResize = function() {
window.addEventListener('resize', function() {
var timer;
KTUtil.throttle(timer, function() {
// Locate and update Offcanvas instances on window resize
var elements = document.body.querySelectorAll('[data-kt-sticky="true"]');
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
var sticky = KTSticky.getInstance(elements[i]);
if (sticky) {
sticky.update();
}
}
}
}, 200);
});
}
// Global initialization
KTSticky.init = function() {
KTSticky.createInstances();
if (KTStickyHandlersInitialized === false) {
KTSticky.handleResize();
KTStickyHandlersInitialized = true;
}
};
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTSticky;
}
"use strict";
var KTSwapperHandlersInitialized = false;
// Class definition
var KTSwapper = function(element, options) {
////////////////////////////
// ** Private Variables ** //
////////////////////////////
var the = this;
if ( typeof element === "undefined" || element === null ) {
return;
}
// Default Options
var defaultOptions = {
mode: 'append'
};
////////////////////////////
// ** Private Methods ** //
////////////////////////////
var _construct = function() {
if ( KTUtil.data(element).has('swapper') === true ) {
the = KTUtil.data(element).get('swapper');
} else {
_init();
}
}
var _init = function() {
the.element = element;
the.options = KTUtil.deepExtend({}, defaultOptions, options);
// Set initialized
the.element.setAttribute('data-kt-swapper', 'true');
// Initial update
_update();
// Bind Instance
KTUtil.data(the.element).set('swapper', the);
}
var _update = function(e) {
var parentSelector = _getOption('parent');
var mode = _getOption('mode');
var parentElement = parentSelector ? document.querySelector(parentSelector) : null;
if (parentElement && element.parentNode !== parentElement) {
if (mode === 'prepend') {
parentElement.prepend(element);
} else if (mode === 'append') {
parentElement.append(element);
}
}
}
var _getOption = function(name) {
if ( the.element.hasAttribute('data-kt-swapper-' + name) === true ) {
var attr = the.element.getAttribute('data-kt-swapper-' + name);
var value = KTUtil.getResponsiveValue(attr);
if ( value !== null && String(value) === 'true' ) {
value = true;
} else if ( value !== null && String(value) === 'false' ) {
value = false;
}
return value;
} else {
var optionName = KTUtil.snakeToCamel(name);
if ( the.options[optionName] ) {
return KTUtil.getResponsiveValue(the.options[optionName]);
} else {
return null;
}
}
}
var _destroy = function() {
KTUtil.data(the.element).remove('swapper');
}
// Construct Class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Methods
the.update = function() {
_update();
}
the.destroy = function() {
return _destroy();
}
// Event API
the.on = function(name, handler) {
return KTEventHandler.on(the.element, name, handler);
}
the.one = function(name, handler) {
return KTEventHandler.one(the.element, name, handler);
}
the.off = function(name, handlerId) {
return KTEventHandler.off(the.element, name, handlerId);
}
the.trigger = function(name, event) {
return KTEventHandler.trigger(the.element, name, event, the, event);
}
};
// Static methods
KTSwapper.getInstance = function(element) {
if ( element !== null && KTUtil.data(element).has('swapper') ) {
return KTUtil.data(element).get('swapper');
} else {
return null;
}
}
// Create instances
KTSwapper.createInstances = function(selector = '[data-kt-swapper="true"]') {
// Initialize Menus
var elements = document.querySelectorAll(selector);
var swapper;
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
swapper = new KTSwapper(elements[i]);
}
}
}
// Window resize handler
KTSwapper.handleResize = function() {
window.addEventListener('resize', function() {
var timer;
KTUtil.throttle(timer, function() {
// Locate and update Offcanvas instances on window resize
var elements = document.querySelectorAll('[data-kt-swapper="true"]');
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
var swapper = KTSwapper.getInstance(elements[i]);
if (swapper) {
swapper.update();
}
}
}
}, 200);
});
};
// Global initialization
KTSwapper.init = function() {
KTSwapper.createInstances();
if (KTSwapperHandlersInitialized === false) {
KTSwapper.handleResize();
KTSwapperHandlersInitialized = true;
}
};
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTSwapper;
}
"use strict";
// Class definition
var KTToggle = function(element, options) {
////////////////////////////
// ** Private variables ** //
////////////////////////////
var the = this;
if (!element) {
return;
}
// Default Options
var defaultOptions = {
saveState: true
};
////////////////////////////
// ** Private methods ** //
////////////////////////////
var _construct = function() {
if ( KTUtil.data(element).has('toggle') === true ) {
the = KTUtil.data(element).get('toggle');
} else {
_init();
}
}
var _init = function() {
// Variables
the.options = KTUtil.deepExtend({}, defaultOptions, options);
the.uid = KTUtil.getUniqueId('toggle');
// Elements
the.element = element;
the.target = document.querySelector(the.element.getAttribute('data-kt-toggle-target')) ? document.querySelector(the.element.getAttribute('data-kt-toggle-target')) : the.element;
the.state = the.element.hasAttribute('data-kt-toggle-state') ? the.element.getAttribute('data-kt-toggle-state') : '';
the.mode = the.element.hasAttribute('data-kt-toggle-mode') ? the.element.getAttribute('data-kt-toggle-mode') : '';
the.attribute = 'data-kt-' + the.element.getAttribute('data-kt-toggle-name');
// Event Handlers
_handlers();
// Bind Instance
KTUtil.data(the.element).set('toggle', the);
}
var _handlers = function() {
KTUtil.addEvent(the.element, 'click', function(e) {
e.preventDefault();
if ( the.mode !== '' ) {
if ( the.mode === 'off' && _isEnabled() === false ) {
_toggle();
} else if ( the.mode === 'on' && _isEnabled() === true ) {
_toggle();
}
} else {
_toggle();
}
});
}
// Event handlers
var _toggle = function() {
// Trigger "after.toggle" event
KTEventHandler.trigger(the.element, 'kt.toggle.change', the);
if ( _isEnabled() ) {
_disable();
} else {
_enable();
}
// Trigger "before.toggle" event
KTEventHandler.trigger(the.element, 'kt.toggle.changed', the);
return the;
}
var _enable = function() {
if ( _isEnabled() === true ) {
return;
}
KTEventHandler.trigger(the.element, 'kt.toggle.enable', the);
the.target.setAttribute(the.attribute, 'on');
if (the.state.length > 0) {
the.element.classList.add(the.state);
}
if ( typeof KTCookie !== 'undefined' && the.options.saveState === true ) {
KTCookie.set(the.attribute, 'on');
}
KTEventHandler.trigger(the.element, 'kt.toggle.enabled', the);
return the;
}
var _disable = function() {
if ( _isEnabled() === false ) {
return;
}
KTEventHandler.trigger(the.element, 'kt.toggle.disable', the);
the.target.removeAttribute(the.attribute);
if (the.state.length > 0) {
the.element.classList.remove(the.state);
}
if ( typeof KTCookie !== 'undefined' && the.options.saveState === true ) {
KTCookie.remove(the.attribute);
}
KTEventHandler.trigger(the.element, 'kt.toggle.disabled', the);
return the;
}
var _isEnabled = function() {
return (String(the.target.getAttribute(the.attribute)).toLowerCase() === 'on');
}
var _destroy = function() {
KTUtil.data(the.element).remove('toggle');
}
// Construct class
_construct();
///////////////////////
// ** Public API ** //
///////////////////////
// Plugin API
the.toggle = function() {
return _toggle();
}
the.enable = function() {
return _enable();
}
the.disable = function() {
return _disable();
}
the.isEnabled = function() {
return _isEnabled();
}
the.goElement = function() {
return the.element;
}
the.destroy = function() {
return _destroy();
}
// Event API
the.on = function(name, handler) {
return KTEventHandler.on(the.element, name, handler);
}
the.one = function(name, handler) {
return KTEventHandler.one(the.element, name, handler);
}
the.off = function(name, handlerId) {
return KTEventHandler.off(the.element, name, handlerId);
}
the.trigger = function(name, event) {
return KTEventHandler.trigger(the.element, name, event, the, event);
}
};
// Static methods
KTToggle.getInstance = function(element) {
if ( element !== null && KTUtil.data(element).has('toggle') ) {
return KTUtil.data(element).get('toggle');
} else {
return null;
}
}
// Create instances
KTToggle.createInstances = function(selector = '[data-kt-toggle]') {
// Get instances
var elements = document.body.querySelectorAll(selector);
if ( elements && elements.length > 0 ) {
for (var i = 0, len = elements.length; i < len; i++) {
// Initialize instances
new KTToggle(elements[i]);
}
}
}
// Global initialization
KTToggle.init = function() {
KTToggle.createInstances();
};
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTToggle;
}
"use strict";
/**
* @class KTUtil base utilize class that privides helper functions
*/
// Polyfills
// Element.matches() polyfill
if (!Element.prototype.matches) {
Element.prototype.matches = function(s) {
var matches = (this.document || this.ownerDocument).querySelectorAll(s),
i = matches.length;
while (--i >= 0 && matches.item(i) !== this) {}
return i > -1;
};
}
/**
* Element.closest() polyfill
* https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill
*/
if (!Element.prototype.closest) {
Element.prototype.closest = function (s) {
var el = this;
var ancestor = this;
if (!document.documentElement.contains(el)) return null;
do {
if (ancestor.matches(s)) return ancestor;
ancestor = ancestor.parentElement;
} while (ancestor !== null);
return null;
};
}
/**
* ChildNode.remove() polyfill
* https://gomakethings.com/removing-an-element-from-the-dom-the-es6-way/
* @author Chris Ferdinandi
* @license MIT
*/
(function (elem) {
for (var i = 0; i < elem.length; i++) {
if (!window[elem[i]] || 'remove' in window[elem[i]].prototype) continue;
window[elem[i]].prototype.remove = function () {
this.parentNode.removeChild(this);
};
}
})(['Element', 'CharacterData', 'DocumentType']);
//
// requestAnimationFrame polyfill by Erik Möller.
// With fixes from Paul Irish and Tino Zijdel
//
// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
//
// MIT license
//
(function() {
var lastTime = 0;
var vendors = ['webkit', 'moz'];
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
window.cancelAnimationFrame =
window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
}
if (!window.requestAnimationFrame)
window.requestAnimationFrame = function(callback) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function() {
callback(currTime + timeToCall);
}, timeToCall);
lastTime = currTime + timeToCall;
return id;
};
if (!window.cancelAnimationFrame)
window.cancelAnimationFrame = function(id) {
clearTimeout(id);
};
}());
// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md
(function(arr) {
arr.forEach(function(item) {
if (item.hasOwnProperty('prepend')) {
return;
}
Object.defineProperty(item, 'prepend', {
configurable: true,
enumerable: true,
writable: true,
value: function prepend() {
var argArr = Array.prototype.slice.call(arguments),
docFrag = document.createDocumentFragment();
argArr.forEach(function(argItem) {
var isNode = argItem instanceof Node;
docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));
});
this.insertBefore(docFrag, this.firstChild);
}
});
});
})([Element.prototype, Document.prototype, DocumentFragment.prototype]);
// getAttributeNames
if (Element.prototype.getAttributeNames == undefined) {
Element.prototype.getAttributeNames = function () {
var attributes = this.attributes;
var length = attributes.length;
var result = new Array(length);
for (var i = 0; i < length; i++) {
result[i] = attributes[i].name;
}
return result;
};
}
// Global variables
window.KTUtilElementDataStore = {};
window.KTUtilElementDataStoreID = 0;
window.KTUtilDelegatedEventHandlers = {};
var KTUtil = function() {
var resizeHandlers = [];
/**
* Handle window resize event with some
* delay to attach event handlers upon resize complete
*/
var _windowResizeHandler = function() {
var _runResizeHandlers = function() {
// reinitialize other subscribed elements
for (var i = 0; i < resizeHandlers.length; i++) {
var each = resizeHandlers[i];
each.call();
}
};
var timer;
window.addEventListener('resize', function() {
KTUtil.throttle(timer, function() {
_runResizeHandlers();
}, 200);
});
};
return {
/**
* Class main initializer.
* @param {object} settings.
* @returns null
*/
//main function to initiate the theme
init: function(settings) {
_windowResizeHandler();
},
/**
* Adds window resize event handler.
* @param {function} callback function.
*/
addResizeHandler: function(callback) {
resizeHandlers.push(callback);
},
/**
* Removes window resize event handler.
* @param {function} callback function.
*/
removeResizeHandler: function(callback) {
for (var i = 0; i < resizeHandlers.length; i++) {
if (callback === resizeHandlers[i]) {
delete resizeHandlers[i];
}
}
},
/**
* Trigger window resize handlers.
*/
runResizeHandlers: function() {
_runResizeHandlers();
},
resize: function() {
if (typeof(Event) === 'function') {
// modern browsers
window.dispatchEvent(new Event('resize'));
} else {
// for IE and other old browsers
// causes deprecation warning on modern browsers
var evt = window.document.createEvent('UIEvents');
evt.initUIEvent('resize', true, false, window, 0);
window.dispatchEvent(evt);
}
},
/**
* Get GET parameter value from URL.
* @param {string} paramName Parameter name.
* @returns {string}
*/
getURLParam: function(paramName) {
var searchString = window.location.search.substring(1),
i, val, params = searchString.split("&");
for (i = 0; i < params.length; i++) {
val = params[i].split("=");
if (val[0] == paramName) {
return unescape(val[1]);
}
}
return null;
},
/**
* Checks whether current device is mobile touch.
* @returns {boolean}
*/
isMobileDevice: function() {
var test = (this.getViewPort().width < this.getBreakpoint('lg') ? true : false);
if (test === false) {
// For use within normal web clients
test = navigator.userAgent.match(/iPad/i) != null;
}
return test;
},
/**
* Checks whether current device is desktop.
* @returns {boolean}
*/
isDesktopDevice: function() {
return KTUtil.isMobileDevice() ? false : true;
},
/**
* Gets browser window viewport size. Ref:
* http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
* @returns {object}
*/
getViewPort: function() {
var e = window,
a = 'inner';
if (!('innerWidth' in window)) {
a = 'client';
e = document.documentElement || document.body;
}
return {
width: e[a + 'Width'],
height: e[a + 'Height']
};
},
/**
* Checks whether given device mode is currently activated.
* @param {string} mode Responsive mode name(e.g: desktop,
* desktop-and-tablet, tablet, tablet-and-mobile, mobile)
* @returns {boolean}
*/
isBreakpointUp: function(mode) {
var width = this.getViewPort().width;
var breakpoint = this.getBreakpoint(mode);
return (width >= breakpoint);
},
isBreakpointDown: function(mode) {
var width = this.getViewPort().width;
var breakpoint = this.getBreakpoint(mode);
return (width < breakpoint);
},
getViewportWidth: function() {
return this.getViewPort().width;
},
/**
* Generates unique ID for give prefix.
* @param {string} prefix Prefix for generated ID
* @returns {boolean}
*/
getUniqueId: function(prefix) {
return prefix + Math.floor(Math.random() * (new Date()).getTime());
},
/**
* Gets window width for give breakpoint mode.
* @param {string} mode Responsive mode name(e.g: xl, lg, md, sm)
* @returns {number}
*/
getBreakpoint: function(breakpoint) {
var value = this.getCssVariableValue('--bs-' + breakpoint);
if ( value ) {
value = parseInt(value.trim());
}
return value;
},
/**
* Checks whether object has property matchs given key path.
* @param {object} obj Object contains values paired with given key path
* @param {string} keys Keys path seperated with dots
* @returns {object}
*/
isset: function(obj, keys) {
var stone;
keys = keys || '';
if (keys.indexOf('[') !== -1) {
throw new Error('Unsupported object path notation.');
}
keys = keys.split('.');
do {
if (obj === undefined) {
return false;
}
stone = keys.shift();
if (!obj.hasOwnProperty(stone)) {
return false;
}
obj = obj[stone];
} while (keys.length);
return true;
},
/**
* Gets highest z-index of the given element parents
* @param {object} el jQuery element object
* @returns {number}
*/
getHighestZindex: function(el) {
var position, value;
while (el && el !== document) {
// Ignore z-index if position is set to a value where z-index is ignored by the browser
// This makes behavior of this function consistent across browsers
// WebKit always returns auto if the element is positioned
position = KTUtil.css(el, 'position');
if (position === "absolute" || position === "relative" || position === "fixed") {
// IE returns 0 when zIndex is not specified
// other browsers return a string
// we ignore the case of nested elements with an explicit value of 0
//
value = parseInt(KTUtil.css(el, 'z-index'));
if (!isNaN(value) && value !== 0) {
return value;
}
}
el = el.parentNode;
}
return 1;
},
/**
* Checks whether the element has any parent with fixed positionfreg
* @param {object} el jQuery element object
* @returns {boolean}
*/
hasFixedPositionedParent: function(el) {
var position;
while (el && el !== document) {
position = KTUtil.css(el, 'position');
if (position === "fixed") {
return true;
}
el = el.parentNode;
}
return false;
},
/**
* Simulates delay
*/
sleep: function(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds) {
break;
}
}
},
/**
* Gets randomly generated integer value within given min and max range
* @param {number} min Range start value
* @param {number} max Range end value
* @returns {number}
*/
getRandomInt: function(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
},
/**
* Checks whether Angular library is included
* @returns {boolean}
*/
isAngularVersion: function() {
return window.Zone !== undefined ? true : false;
},
// Deep extend: $.extend(true, {}, objA, objB);
deepExtend: function(out) {
out = out || {};
for (var i = 1; i < arguments.length; i++) {
var obj = arguments[i];
if (!obj) continue;
for (var key in obj) {
if (!obj.hasOwnProperty(key)) {
continue;
}
// based on https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/
if ( Object.prototype.toString.call(obj[key]) === '[object Object]' ) {
out[key] = KTUtil.deepExtend(out[key], obj[key]);
continue;
}
out[key] = obj[key];
}
}
return out;
},
// extend: $.extend({}, objA, objB);
extend: function(out) {
out = out || {};
for (var i = 1; i < arguments.length; i++) {
if (!arguments[i])
continue;
for (var key in arguments[i]) {
if (arguments[i].hasOwnProperty(key))
out[key] = arguments[i][key];
}
}
return out;
},
getBody: function() {
return document.getElementsByTagName('body')[0];
},
/**
* Checks whether the element has given classes
* @param {object} el jQuery element object
* @param {string} Classes string
* @returns {boolean}
*/
hasClasses: function(el, classes) {
if (!el) {
return;
}
var classesArr = classes.split(" ");
for (var i = 0; i < classesArr.length; i++) {
if (KTUtil.hasClass(el, KTUtil.trim(classesArr[i])) == false) {
return false;
}
}
return true;
},
hasClass: function(el, className) {
if (!el) {
return;
}
return el.classList ? el.classList.contains(className) : new RegExp('\\b' + className + '\\b').test(el.className);
},
addClass: function(el, className) {
if (!el || typeof className === 'undefined') {
return;
}
var classNames = className.split(' ');
if (el.classList) {
for (var i = 0; i < classNames.length; i++) {
if (classNames[i] && classNames[i].length > 0) {
el.classList.add(KTUtil.trim(classNames[i]));
}
}
} else if (!KTUtil.hasClass(el, className)) {
for (var x = 0; x < classNames.length; x++) {
el.className += ' ' + KTUtil.trim(classNames[x]);
}
}
},
removeClass: function(el, className) {
if (!el || typeof className === 'undefined') {
return;
}
var classNames = className.split(' ');
if (el.classList) {
for (var i = 0; i < classNames.length; i++) {
el.classList.remove(KTUtil.trim(classNames[i]));
}
} else if (KTUtil.hasClass(el, className)) {
for (var x = 0; x < classNames.length; x++) {
el.className = el.className.replace(new RegExp('\\b' + KTUtil.trim(classNames[x]) + '\\b', 'g'), '');
}
}
},
triggerCustomEvent: function(el, eventName, data) {
var event;
if (window.CustomEvent) {
event = new CustomEvent(eventName, {
detail: data
});
} else {
event = document.createEvent('CustomEvent');
event.initCustomEvent(eventName, true, true, data);
}
el.dispatchEvent(event);
},
triggerEvent: function(node, eventName) {
// Make sure we use the ownerDocument from the provided node to avoid cross-window problems
var doc;
if (node.ownerDocument) {
doc = node.ownerDocument;
} else if (node.nodeType == 9) {
// the node may be the document itself, nodeType 9 = DOCUMENT_NODE
doc = node;
} else {
throw new Error("Invalid node passed to fireEvent: " + node.id);
}
if (node.dispatchEvent) {
// Gecko-style approach (now the standard) takes more work
var eventClass = "";
// Different events have different event classes.
// If this switch statement can't map an eventName to an eventClass,
// the event firing is going to fail.
switch (eventName) {
case "click": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.
case "mouseenter":
case "mouseleave":
case "mousedown":
case "mouseup":
eventClass = "MouseEvents";
break;
case "focus":
case "change":
case "blur":
case "select":
eventClass = "HTMLEvents";
break;
default:
throw "fireEvent: Couldn't find an event class for event '" + eventName + "'.";
break;
}
var event = doc.createEvent(eventClass);
var bubbles = eventName == "change" ? false : true;
event.initEvent(eventName, bubbles, true); // All events created as bubbling and cancelable.
event.synthetic = true; // allow detection of synthetic events
// The second parameter says go ahead with the default action
node.dispatchEvent(event, true);
} else if (node.fireEvent) {
// IE-old school style
var event = doc.createEventObject();
event.synthetic = true; // allow detection of synthetic events
node.fireEvent("on" + eventName, event);
}
},
index: function( el ){
var c = el.parentNode.children, i = 0;
for(; i < c.length; i++ )
if( c[i] == el ) return i;
},
trim: function(string) {
return string.trim();
},
eventTriggered: function(e) {
if (e.currentTarget.dataset.triggered) {
return true;
} else {
e.currentTarget.dataset.triggered = true;
return false;
}
},
remove: function(el) {
if (el && el.parentNode) {
el.parentNode.removeChild(el);
}
},
find: function(parent, query) {
if ( parent !== null) {
return parent.querySelector(query);
} else {
return null;
}
},
findAll: function(parent, query) {
if ( parent !== null ) {
return parent.querySelectorAll(query);
} else {
return null;
}
},
insertAfter: function(el, referenceNode) {
return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);
},
parents: function(elem, selector) {
// Set up a parent array
var parents = [];
// Push each parent element to the array
for ( ; elem && elem !== document; elem = elem.parentNode ) {
if (selector) {
if (elem.matches(selector)) {
parents.push(elem);
}
continue;
}
parents.push(elem);
}
// Return our parent array
return parents;
},
children: function(el, selector, log) {
if (!el || !el.childNodes) {
return null;
}
var result = [],
i = 0,
l = el.childNodes.length;
for (var i; i < l; ++i) {
if (el.childNodes[i].nodeType == 1 && KTUtil.matches(el.childNodes[i], selector, log)) {
result.push(el.childNodes[i]);
}
}
return result;
},
child: function(el, selector, log) {
var children = KTUtil.children(el, selector, log);
return children ? children[0] : null;
},
matches: function(el, selector, log) {
var p = Element.prototype;
var f = p.matches || p.webkitMatchesSelector || p.mozMatchesSelector || p.msMatchesSelector || function(s) {
return [].indexOf.call(document.querySelectorAll(s), this) !== -1;
};
if (el && el.tagName) {
return f.call(el, selector);
} else {
return false;
}
},
data: function(el) {
return {
set: function(name, data) {
if (!el) {
return;
}
if (el.customDataTag === undefined) {
window.KTUtilElementDataStoreID++;
el.customDataTag = window.KTUtilElementDataStoreID;
}
if (window.KTUtilElementDataStore[el.customDataTag] === undefined) {
window.KTUtilElementDataStore[el.customDataTag] = {};
}
window.KTUtilElementDataStore[el.customDataTag][name] = data;
},
get: function(name) {
if (!el) {
return;
}
if (el.customDataTag === undefined) {
return null;
}
return this.has(name) ? window.KTUtilElementDataStore[el.customDataTag][name] : null;
},
has: function(name) {
if (!el) {
return false;
}
if (el.customDataTag === undefined) {
return false;
}
return (window.KTUtilElementDataStore[el.customDataTag] && window.KTUtilElementDataStore[el.customDataTag][name]) ? true : false;
},
remove: function(name) {
if (el && this.has(name)) {
delete window.KTUtilElementDataStore[el.customDataTag][name];
}
}
};
},
outerWidth: function(el, margin) {
var width;
if (margin === true) {
width = parseFloat(el.offsetWidth);
width += parseFloat(KTUtil.css(el, 'margin-left')) + parseFloat(KTUtil.css(el, 'margin-right'));
return parseFloat(width);
} else {
width = parseFloat(el.offsetWidth);
return width;
}
},
offset: function(el) {
var rect, win;
if ( !el ) {
return;
}
// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
// Support: IE <=11 only
// Running getBoundingClientRect on a
// disconnected node in IE throws an error
if ( !el.getClientRects().length ) {
return { top: 0, left: 0 };
}
// Get document-relative position by adding viewport scroll to viewport-relative gBCR
rect = el.getBoundingClientRect();
win = el.ownerDocument.defaultView;
return {
top: rect.top + win.pageYOffset,
left: rect.left + win.pageXOffset,
right: window.innerWidth - (el.offsetLeft + el.offsetWidth)
};
},
height: function(el) {
return KTUtil.css(el, 'height');
},
outerHeight: function(el, withMargin) {
var height = el.offsetHeight;
var style;
if (typeof withMargin !== 'undefined' && withMargin === true) {
style = getComputedStyle(el);
height += parseInt(style.marginTop) + parseInt(style.marginBottom);
return height;
} else {
return height;
}
},
visible: function(el) {
return !(el.offsetWidth === 0 && el.offsetHeight === 0);
},
isVisibleInContainer: function (el, container, offset = 0) {
const eleTop = el.offsetTop;
const eleBottom = eleTop + el.clientHeight + offset;
const containerTop = container.scrollTop;
const containerBottom = containerTop + container.clientHeight;
// The element is fully visible in the container
return (
(eleTop >= containerTop && eleBottom <= containerBottom)
);
},
getRelativeTopPosition: function (el, container) {
return el.offsetTop - container.offsetTop;
},
attr: function(el, name, value) {
if (el == undefined) {
return;
}
if (value !== undefined) {
el.setAttribute(name, value);
} else {
return el.getAttribute(name);
}
},
hasAttr: function(el, name) {
if (el == undefined) {
return;
}
return el.getAttribute(name) ? true : false;
},
removeAttr: function(el, name) {
if (el == undefined) {
return;
}
el.removeAttribute(name);
},
animate: function(from, to, duration, update, easing, done) {
/**
* TinyAnimate.easings
* Adapted from jQuery Easing
*/
var easings = {};
var easing;
easings.linear = function(t, b, c, d) {
return c * t / d + b;
};
easing = easings.linear;
// Early bail out if called incorrectly
if (typeof from !== 'number' ||
typeof to !== 'number' ||
typeof duration !== 'number' ||
typeof update !== 'function') {
return;
}
// Create mock done() function if necessary
if (typeof done !== 'function') {
done = function() {};
}
// Pick implementation (requestAnimationFrame | setTimeout)
var rAF = window.requestAnimationFrame || function(callback) {
window.setTimeout(callback, 1000 / 50);
};
// Animation loop
var canceled = false;
var change = to - from;
function loop(timestamp) {
var time = (timestamp || +new Date()) - start;
if (time >= 0) {
update(easing(time, from, change, duration));
}
if (time >= 0 && time >= duration) {
update(to);
done();
} else {
rAF(loop);
}
}
update(from);
// Start animation loop
var start = window.performance && window.performance.now ? window.performance.now() : +new Date();
rAF(loop);
},
actualCss: function(el, prop, cache) {
var css = '';
if (el instanceof HTMLElement === false) {
return;
}
if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {
var value;
// the element is hidden so:
// making the el block so we can meassure its height but still be hidden
css = el.style.cssText;
el.style.cssText = 'position: absolute; visibility: hidden; display: block;';
if (prop == 'width') {
value = el.offsetWidth;
} else if (prop == 'height') {
value = el.offsetHeight;
}
el.style.cssText = css;
// store it in cache
el.setAttribute('kt-hidden-' + prop, value);
return parseFloat(value);
} else {
// store it in cache
return parseFloat(el.getAttribute('kt-hidden-' + prop));
}
},
actualHeight: function(el, cache) {
return KTUtil.actualCss(el, 'height', cache);
},
actualWidth: function(el, cache) {
return KTUtil.actualCss(el, 'width', cache);
},
getScroll: function(element, method) {
// The passed in `method` value should be 'Top' or 'Left'
method = 'scroll' + method;
return (element == window || element == document) ? (
self[(method == 'scrollTop') ? 'pageYOffset' : 'pageXOffset'] ||
(browserSupportsBoxModel && document.documentElement[method]) ||
document.body[method]
) : element[method];
},
css: function(el, styleProp, value, important) {
if (!el) {
return;
}
if (value !== undefined) {
if ( important === true ) {
el.style.setProperty(styleProp, value, 'important');
} else {
el.style[styleProp] = value;
}
} else {
var defaultView = (el.ownerDocument || document).defaultView;
// W3C standard way:
if (defaultView && defaultView.getComputedStyle) {
// sanitize property name to css notation
// (hyphen separated words eg. font-Size)
styleProp = styleProp.replace(/([A-Z])/g, "-$1").toLowerCase();
return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);
} else if (el.currentStyle) { // IE
// sanitize property name to camelCase
styleProp = styleProp.replace(/\-(\w)/g, function(str, letter) {
return letter.toUpperCase();
});
value = el.currentStyle[styleProp];
// convert other units to pixels on IE
if (/^\d+(em|pt|%|ex)?$/i.test(value)) {
return (function(value) {
var oldLeft = el.style.left, oldRsLeft = el.runtimeStyle.left;
el.runtimeStyle.left = el.currentStyle.left;
el.style.left = value || 0;
value = el.style.pixelLeft + "px";
el.style.left = oldLeft;
el.runtimeStyle.left = oldRsLeft;
return value;
})(value);
}
return value;
}
}
},
slide: function(el, dir, speed, callback, recalcMaxHeight) {
if (!el || (dir == 'up' && KTUtil.visible(el) === false) || (dir == 'down' && KTUtil.visible(el) === true)) {
return;
}
speed = (speed ? speed : 600);
var calcHeight = KTUtil.actualHeight(el);
var calcPaddingTop = false;
var calcPaddingBottom = false;
if (KTUtil.css(el, 'padding-top') && KTUtil.data(el).has('slide-padding-top') !== true) {
KTUtil.data(el).set('slide-padding-top', KTUtil.css(el, 'padding-top'));
}
if (KTUtil.css(el, 'padding-bottom') && KTUtil.data(el).has('slide-padding-bottom') !== true) {
KTUtil.data(el).set('slide-padding-bottom', KTUtil.css(el, 'padding-bottom'));
}
if (KTUtil.data(el).has('slide-padding-top')) {
calcPaddingTop = parseInt(KTUtil.data(el).get('slide-padding-top'));
}
if (KTUtil.data(el).has('slide-padding-bottom')) {
calcPaddingBottom = parseInt(KTUtil.data(el).get('slide-padding-bottom'));
}
if (dir == 'up') { // up
el.style.cssText = 'display: block; overflow: hidden;';
if (calcPaddingTop) {
KTUtil.animate(0, calcPaddingTop, speed, function(value) {
el.style.paddingTop = (calcPaddingTop - value) + 'px';
}, 'linear');
}
if (calcPaddingBottom) {
KTUtil.animate(0, calcPaddingBottom, speed, function(value) {
el.style.paddingBottom = (calcPaddingBottom - value) + 'px';
}, 'linear');
}
KTUtil.animate(0, calcHeight, speed, function(value) {
el.style.height = (calcHeight - value) + 'px';
}, 'linear', function() {
el.style.height = '';
el.style.display = 'none';
if (typeof callback === 'function') {
callback();
}
});
} else if (dir == 'down') { // down
el.style.cssText = 'display: block; overflow: hidden;';
if (calcPaddingTop) {
KTUtil.animate(0, calcPaddingTop, speed, function(value) {//
el.style.paddingTop = value + 'px';
}, 'linear', function() {
el.style.paddingTop = '';
});
}
if (calcPaddingBottom) {
KTUtil.animate(0, calcPaddingBottom, speed, function(value) {
el.style.paddingBottom = value + 'px';
}, 'linear', function() {
el.style.paddingBottom = '';
});
}
KTUtil.animate(0, calcHeight, speed, function(value) {
el.style.height = value + 'px';
}, 'linear', function() {
el.style.height = '';
el.style.display = '';
el.style.overflow = '';
if (typeof callback === 'function') {
callback();
}
});
}
},
slideUp: function(el, speed, callback) {
KTUtil.slide(el, 'up', speed, callback);
},
slideDown: function(el, speed, callback) {
KTUtil.slide(el, 'down', speed, callback);
},
show: function(el, display) {
if (typeof el !== 'undefined') {
el.style.display = (display ? display : 'block');
}
},
hide: function(el) {
if (typeof el !== 'undefined') {
el.style.display = 'none';
}
},
addEvent: function(el, type, handler, one) {
if (typeof el !== 'undefined' && el !== null) {
el.addEventListener(type, handler);
}
},
removeEvent: function(el, type, handler) {
if (el !== null) {
el.removeEventListener(type, handler);
}
},
on: function(element, selector, event, handler) {
if ( element === null ) {
return;
}
var eventId = KTUtil.getUniqueId('event');
window.KTUtilDelegatedEventHandlers[eventId] = function(e) {
var targets = element.querySelectorAll(selector);
var target = e.target;
while ( target && target !== element ) {
for ( var i = 0, j = targets.length; i < j; i++ ) {
if ( target === targets[i] ) {
handler.call(target, e);
}
}
target = target.parentNode;
}
}
KTUtil.addEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);
return eventId;
},
off: function(element, event, eventId) {
if (!element || !window.KTUtilDelegatedEventHandlers[eventId]) {
return;
}
KTUtil.removeEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);
delete window.KTUtilDelegatedEventHandlers[eventId];
},
one: function onetime(el, type, callback) {
el.addEventListener(type, function callee(e) {
// remove event
if (e.target && e.target.removeEventListener) {
e.target.removeEventListener(e.type, callee);
}
// need to verify from https://themeforest.net/author_dashboard#comment_23615588
if (el && el.removeEventListener) {
e.currentTarget.removeEventListener(e.type, callee);
}
// call handler
return callback(e);
});
},
hash: function(str) {
var hash = 0,
i, chr;
if (str.length === 0) return hash;
for (i = 0; i < str.length; i++) {
chr = str.charCodeAt(i);
hash = ((hash << 5) - hash) + chr;
hash |= 0; // Convert to 32bit integer
}
return hash;
},
animateClass: function(el, animationName, callback) {
var animation;
var animations = {
animation: 'animationend',
OAnimation: 'oAnimationEnd',
MozAnimation: 'mozAnimationEnd',
WebkitAnimation: 'webkitAnimationEnd',
msAnimation: 'msAnimationEnd',
};
for (var t in animations) {
if (el.style[t] !== undefined) {
animation = animations[t];
}
}
KTUtil.addClass(el, animationName);
KTUtil.one(el, animation, function() {
KTUtil.removeClass(el, animationName);
});
if (callback) {
KTUtil.one(el, animation, callback);
}
},
transitionEnd: function(el, callback) {
var transition;
var transitions = {
transition: 'transitionend',
OTransition: 'oTransitionEnd',
MozTransition: 'mozTransitionEnd',
WebkitTransition: 'webkitTransitionEnd',
msTransition: 'msTransitionEnd'
};
for (var t in transitions) {
if (el.style[t] !== undefined) {
transition = transitions[t];
}
}
KTUtil.one(el, transition, callback);
},
animationEnd: function(el, callback) {
var animation;
var animations = {
animation: 'animationend',
OAnimation: 'oAnimationEnd',
MozAnimation: 'mozAnimationEnd',
WebkitAnimation: 'webkitAnimationEnd',
msAnimation: 'msAnimationEnd'
};
for (var t in animations) {
if (el.style[t] !== undefined) {
animation = animations[t];
}
}
KTUtil.one(el, animation, callback);
},
animateDelay: function(el, value) {
var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];
for (var i = 0; i < vendors.length; i++) {
KTUtil.css(el, vendors[i] + 'animation-delay', value);
}
},
animateDuration: function(el, value) {
var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];
for (var i = 0; i < vendors.length; i++) {
KTUtil.css(el, vendors[i] + 'animation-duration', value);
}
},
scrollTo: function(target, offset, duration) {
var duration = duration ? duration : 500;
var targetPos = target ? KTUtil.offset(target).top : 0;
var scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
var from, to;
if (offset) {
targetPos = targetPos - offset;
}
from = scrollPos;
to = targetPos;
KTUtil.animate(from, to, duration, function(value) {
document.documentElement.scrollTop = value;
document.body.parentNode.scrollTop = value;
document.body.scrollTop = value;
}); //, easing, done
},
scrollTop: function(offset, duration) {
KTUtil.scrollTo(null, offset, duration);
},
isArray: function(obj) {
return obj && Array.isArray(obj);
},
isEmpty: function(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
return false;
}
}
return true;
},
numberString: function(nStr) {
nStr += '';
var x = nStr.split('.');
var x1 = x[0];
var x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
},
isRTL: function() {
return (document.querySelector('html').getAttribute("direction") === 'rtl');
},
snakeToCamel: function(s){
return s.replace(/(\-\w)/g, function(m){return m[1].toUpperCase();});
},
filterBoolean: function(val) {
// Convert string boolean
if (val === true || val === 'true') {
return true;
}
if (val === false || val === 'false') {
return false;
}
return val;
},
setHTML: function(el, html) {
el.innerHTML = html;
},
getHTML: function(el) {
if (el) {
return el.innerHTML;
}
},
getDocumentHeight: function() {
var body = document.body;
var html = document.documentElement;
return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );
},
getScrollTop: function() {
return (document.scrollingElement || document.documentElement).scrollTop;
},
colorLighten: function(color, amount) {
const addLight = function(color, amount){
let cc = parseInt(color,16) + amount;
let c = (cc > 255) ? 255 : (cc);
c = (c.toString(16).length > 1 ) ? c.toString(16) : `0${c.toString(16)}`;
return c;
}
color = (color.indexOf("#")>=0) ? color.substring(1,color.length) : color;
amount = parseInt((255*amount)/100);
return color = `#${addLight(color.substring(0,2), amount)}${addLight(color.substring(2,4), amount)}${addLight(color.substring(4,6), amount)}`;
},
colorDarken: function(color, amount) {
const subtractLight = function(color, amount){
let cc = parseInt(color,16) - amount;
let c = (cc < 0) ? 0 : (cc);
c = (c.toString(16).length > 1 ) ? c.toString(16) : `0${c.toString(16)}`;
return c;
}
color = (color.indexOf("#")>=0) ? color.substring(1,color.length) : color;
amount = parseInt((255*amount)/100);
return color = `#${subtractLight(color.substring(0,2), amount)}${subtractLight(color.substring(2,4), amount)}${subtractLight(color.substring(4,6), amount)}`;
},
// Throttle function: Input as function which needs to be throttled and delay is the time interval in milliseconds
throttle: function (timer, func, delay) {
// If setTimeout is already scheduled, no need to do anything
if (timer) {
return;
}
// Schedule a setTimeout after delay seconds
timer = setTimeout(function () {
func();
// Once setTimeout function execution is finished, timerId = undefined so that in
// the next scroll event function execution can be scheduled by the setTimeout
timer = undefined;
}, delay);
},
// Debounce function: Input as function which needs to be debounced and delay is the debounced time in milliseconds
debounce: function (timer, func, delay) {
// Cancels the setTimeout method execution
clearTimeout(timer)
// Executes the func after delay time.
timer = setTimeout(func, delay);
},
parseJson: function(value) {
if (typeof value === 'string') {
value = value.replace(/'/g, "\"");
var jsonStr = value.replace(/(\w+:)|(\w+ :)/g, function(matched) {
return '"' + matched.substring(0, matched.length - 1) + '":';
});
try {
value = JSON.parse(jsonStr);
} catch(e) { }
}
return value;
},
getResponsiveValue: function(value, defaultValue) {
var width = this.getViewPort().width;
var result = null;
value = KTUtil.parseJson(value);
if (typeof value === 'object') {
var resultKey;
var resultBreakpoint = -1;
var breakpoint;
for (var key in value) {
if (key === 'default') {
breakpoint = 0;
} else {
breakpoint = this.getBreakpoint(key) ? this.getBreakpoint(key) : parseInt(key);
}
if (breakpoint <= width && breakpoint > resultBreakpoint) {
resultKey = key;
resultBreakpoint = breakpoint;
}
}
if (resultKey) {
result = value[resultKey];
} else {
result = value;
}
} else {
result = value;
}
return result;
},
each: function(array, callback) {
return [].slice.call(array).map(callback);
},
getSelectorMatchValue: function(value) {
var result = null;
value = KTUtil.parseJson(value);
if ( typeof value === 'object' ) {
// Match condition
if ( value['match'] !== undefined ) {
var selector = Object.keys(value['match'])[0];
value = Object.values(value['match'])[0];
if ( document.querySelector(selector) !== null ) {
result = value;
}
}
} else {
result = value;
}
return result;
},
getConditionalValue: function(value) {
var value = KTUtil.parseJson(value);
var result = KTUtil.getResponsiveValue(value);
if ( result !== null && result['match'] !== undefined ) {
result = KTUtil.getSelectorMatchValue(result);
}
if ( result === null && value !== null && value['default'] !== undefined ) {
result = value['default'];
}
return result;
},
getCssVariableValue: function(variableName) {
var hex = getComputedStyle(document.documentElement).getPropertyValue(variableName);
if ( hex && hex.length > 0 ) {
hex = hex.trim();
}
return hex;
},
isInViewport: function(element) {
var rect = element.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
},
isPartiallyInViewport: function(element) {
let x = element.getBoundingClientRect().left;
let y = element.getBoundingClientRect().top;
let ww = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
let hw = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
let w = element.clientWidth;
let h = element.clientHeight;
return (
(y < hw &&
y + h > 0) &&
(x < ww &&
x + w > 0)
);
},
onDOMContentLoaded: function(callback) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', callback);
} else {
callback();
}
},
inIframe: function() {
try {
return window.self !== window.top;
} catch (e) {
return true;
}
},
isHexColor(code) {
return /^#[0-9A-F]{6}$/i.test(code);
}
}
}();
// Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTUtil;
}
//
// Global init of core components
//
// Init components
var KTComponents = function () {
// Public methods
return {
init: function () {
KTApp.init();
KTDrawer.init();
KTMenu.init();
KTScroll.init();
KTSticky.init();
KTSwapper.init();
KTToggle.init();
KTScrolltop.init();
KTDialer.init();
KTImageInput.init();
KTPasswordMeter.init();
}
}
}();
// On document ready
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", function() {
KTComponents.init();
});
} else {
KTComponents.init();
}
// Init page loader
window.addEventListener("load", function() {
KTApp.hidePageLoading();
});
// Declare KTApp for Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
window.KTComponents = module.exports = KTComponents;
}
"use strict";
// Class definition
var KTAppLayoutBuilder = function() {
var form;
var actionInput;
var url;
var previewButton;
var exportButton;
var resetButton;
var engage;
var engageToggleOff;
var engageToggleOn;
var engagePrebuiltsModal;
var handleEngagePrebuilts = function() {
if (engagePrebuiltsModal === null) {
return;
}
if ( KTCookie.get("app_engage_prebuilts_modal_displayed") !== "1" ) {
setTimeout(function() {
const modal = new bootstrap.Modal(engagePrebuiltsModal);
modal.show();
const date = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000); // 30 days from now
KTCookie.set("app_engage_prebuilts_modal_displayed", "1", {expires: date});
}, 3000);
}
}
var handleEngagePrebuiltsViewMenu = function() {
const selected = engagePrebuiltsModal.querySelector('[data-kt-element="selected"]');
const selectedTitle = engagePrebuiltsModal.querySelector('[data-kt-element="title"]');
const menu = engagePrebuiltsModal.querySelector('[data-kt-menu="true"]');
// Toggle Handler
KTUtil.on(engagePrebuiltsModal, '[data-kt-mode]', 'click', function (e) {
const title = this.innerText;
const mode = this.getAttribute("data-kt-mode");
const selectedLink = menu.querySelector('.menu-link.active');
const viewImage = document.querySelector('#kt_app_engage_prebuilts_view_image');
const viewText = document.querySelector('#kt_app_engage_prebuilts_view_text');
selectedTitle.innerText = title;
if (selectedLink) {
selectedLink.classList.remove('active');
}
this.classList.add('active');
if (mode === "image") {
viewImage.classList.remove("d-none");
viewImage.classList.add("d-block");
viewText.classList.remove("d-block");
viewText.classList.add("d-none");
} else {
viewText.classList.remove("d-none");
viewText.classList.add("d-block");
viewImage.classList.remove("d-block");
viewImage.classList.add("d-none");
}
});
}
var handleEngageToggle = function() {
engageToggleOff.addEventListener("click", function (e) {
e.preventDefault();
const date = new Date(Date.now() + 1 * 24 * 60 * 60 * 1000); // 1 days from now
KTCookie.set("app_engage_hide", "1", {expires: date});
engage.classList.add('app-engage-hide');
});
engageToggleOn.addEventListener("click", function (e) {
e.preventDefault();
KTCookie.remove("app_engage_hide");
engage.classList.remove('app-engage-hide');
});
}
var handlePreview = function() {
previewButton.addEventListener("click", function(e) {
e.preventDefault();
// Set form action value
actionInput.value = "preview";
// Show progress
previewButton.setAttribute("data-kt-indicator", "on");
// Prepare form data
var data = $(form).serialize();
// Submit
$.ajax({
type: "POST",
dataType: "html",
url: url,
data: data,
success: function(response, status, xhr) {
if (history.scrollRestoration) {
history.scrollRestoration = 'manual';
}
location.reload();
return;
toastr.success(
"Preview has been updated with current configured layout.",
"Preview updated!",
{timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
);
setTimeout(function() {
location.reload(); // reload page
}, 1500);
},
error: function(response) {
toastr.error(
"Please try it again later.",
"Something went wrong!",
{timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
);
},
complete: function() {
previewButton.removeAttribute("data-kt-indicator");
}
});
});
};
var handleExport = function() {
exportButton.addEventListener("click", function(e) {
e.preventDefault();
toastr.success(
"Process has been started and it may take a while.",
"Generating HTML!",
{timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
);
// Show progress
exportButton.setAttribute("data-kt-indicator", "on");
// Set form action value
actionInput.value = "export";
// Prepare form data
var data = $(form).serialize();
$.ajax({
type: "POST",
dataType: "html",
url: url,
data: data,
success: function(response, status, xhr) {
var timer = setInterval(function() {
$("").attr({
src: url + "?layout-builder[action]=export&download=1&output=" + response,
style: "visibility:hidden;display:none",
}).ready(function() {
// Stop the timer
clearInterval(timer);
exportButton.removeAttribute("data-kt-indicator");
}).appendTo("body");
}, 3000);
},
error: function(response) {
toastr.error(
"Please try it again later.",
"Something went wrong!",
{timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
);
exportButton.removeAttribute("data-kt-indicator");
},
});
});
};
var handleReset = function() {
resetButton.addEventListener("click", function(e) {
e.preventDefault();
// Show progress
resetButton.setAttribute("data-kt-indicator", "on");
// Set form action value
actionInput.value = "reset";
// Prepare form data
var data = $(form).serialize();
$.ajax({
type: "POST",
dataType: "html",
url: url,
data: data,
success: function(response, status, xhr) {
if (history.scrollRestoration) {
history.scrollRestoration = 'manual';
}
location.reload();
return;
toastr.success(
"Preview has been successfully reset and the page will be reloaded.",
"Reset Preview!",
{timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
);
setTimeout(function() {
location.reload(); // reload page
}, 1500);
},
error: function(response) {
toastr.error(
"Please try it again later.",
"Something went wrong!",
{timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
);
},
complete: function() {
resetButton.removeAttribute("data-kt-indicator");
},
});
});
};
var handleThemeMode = function() {
var checkLight = document.querySelector('#kt_layout_builder_theme_mode_light');
var checkDark = document.querySelector('#kt_layout_builder_theme_mode_dark');
var check = document.querySelector('#kt_layout_builder_theme_mode_' + KTThemeMode.getMode());
if (checkLight) {
checkLight.addEventListener("click", function() {
this.checked = true;
this.closest('[data-kt-buttons="true"]').querySelector('.form-check-image.active').classList.remove('active');
this.closest('.form-check-image').classList.add('active');
KTThemeMode.setMode('light');
});
}
if (checkDark) {
checkDark.addEventListener("click", function() {
this.checked = true;
this.closest('[data-kt-buttons="true"]').querySelector('.form-check-image.active').classList.remove('active');
this.closest('.form-check-image').classList.add('active');
KTThemeMode.setMode('dark');
});
}
if ( check ) {
check.closest('.form-check-image').classList.add('active');
check.checked = true;
}
}
return {
// Public functions
init: function() {
engage = document.querySelector('#kt_app_engage');
engageToggleOn = document.querySelector('#kt_app_engage_toggle_on');
engageToggleOff = document.querySelector('#kt_app_engage_toggle_off');
engagePrebuiltsModal = document.querySelector('#kt_app_engage_prebuilts_modal');
if ( engage && engagePrebuiltsModal) {
handleEngagePrebuilts();
handleEngagePrebuiltsViewMenu();
}
if ( engage && engageToggleOn && engageToggleOff ) {
handleEngageToggle();
}
form = document.querySelector("#kt_app_layout_builder_form");
if ( !form ) {
return;
}
url = form.getAttribute("action");
actionInput = document.querySelector("#kt_app_layout_builder_action");
previewButton = document.querySelector("#kt_app_layout_builder_preview");
exportButton = document.querySelector("#kt_app_layout_builder_export");
resetButton = document.querySelector("#kt_app_layout_builder_reset");
if ( previewButton ) {
handlePreview();
}
if ( exportButton ) {
handleExport();
}
if ( resetButton ) {
handleReset();
}
handleThemeMode();
}
};
}();
// On document ready
KTUtil.onDOMContentLoaded(function() {
KTAppLayoutBuilder.init();
});
"use strict";
// Class definition
var KTLayoutSearch = function() {
// Private variables
var element;
var formElement;
var mainElement;
var resultsElement;
var wrapperElement;
var emptyElement;
var preferencesElement;
var preferencesShowElement;
var preferencesDismissElement;
var advancedOptionsFormElement;
var advancedOptionsFormShowElement;
var advancedOptionsFormCancelElement;
var advancedOptionsFormSearchElement;
var searchObject;
// Private functions
var processs = function(search) {
var timeout = setTimeout(function() {
var number = KTUtil.getRandomInt(1, 3);
// Hide recently viewed
mainElement.classList.add('d-none');
if (number === 3) {
// Hide results
resultsElement.classList.add('d-none');
// Show empty message
emptyElement.classList.remove('d-none');
} else {
// Show results
resultsElement.classList.remove('d-none');
// Hide empty message
emptyElement.classList.add('d-none');
}
// Complete search
search.complete();
}, 1500);
}
var processsAjax = function(search) {
// Hide recently viewed
mainElement.classList.add('d-none');
// Learn more: https://axios-http.com/docs/intro
axios.post('/search.php', {
query: searchObject.getQuery()
})
.then(function (response) {
// Populate results
resultsElement.innerHTML = response;
// Show results
resultsElement.classList.remove('d-none');
// Hide empty message
emptyElement.classList.add('d-none');
// Complete search
search.complete();
})
.catch(function (error) {
// Hide results
resultsElement.classList.add('d-none');
// Show empty message
emptyElement.classList.remove('d-none');
// Complete search
search.complete();
});
}
var clear = function(search) {
// Show recently viewed
mainElement.classList.remove('d-none');
// Hide results
resultsElement.classList.add('d-none');
// Hide empty message
emptyElement.classList.add('d-none');
}
var handlePreferences = function() {
// Preference show handler
if (preferencesShowElement) {
preferencesShowElement.addEventListener('click', function() {
wrapperElement.classList.add('d-none');
preferencesElement.classList.remove('d-none');
});
}
// Preference dismiss handler
if (preferencesDismissElement) {
preferencesDismissElement.addEventListener('click', function() {
wrapperElement.classList.remove('d-none');
preferencesElement.classList.add('d-none');
});
}
}
var handleAdvancedOptionsForm = function() {
// Show
if (advancedOptionsFormShowElement) {
advancedOptionsFormShowElement.addEventListener('click', function() {
wrapperElement.classList.add('d-none');
advancedOptionsFormElement.classList.remove('d-none');
});
}
// Cancel
if (advancedOptionsFormCancelElement) {
advancedOptionsFormCancelElement.addEventListener('click', function() {
wrapperElement.classList.remove('d-none');
advancedOptionsFormElement.classList.add('d-none');
});
}
}
// Public methods
return {
init: function() {
// Elements
element = document.querySelector('#kt_header_search');
if (!element) {
return;
}
wrapperElement = element.querySelector('[data-kt-search-element="wrapper"]');
formElement = element.querySelector('[data-kt-search-element="form"]');
mainElement = element.querySelector('[data-kt-search-element="main"]');
resultsElement = element.querySelector('[data-kt-search-element="results"]');
emptyElement = element.querySelector('[data-kt-search-element="empty"]');
preferencesElement = element.querySelector('[data-kt-search-element="preferences"]');
preferencesShowElement = element.querySelector('[data-kt-search-element="preferences-show"]');
preferencesDismissElement = element.querySelector('[data-kt-search-element="preferences-dismiss"]');
advancedOptionsFormElement = element.querySelector('[data-kt-search-element="advanced-options-form"]');
advancedOptionsFormShowElement = element.querySelector('[data-kt-search-element="advanced-options-form-show"]');
advancedOptionsFormCancelElement = element.querySelector('[data-kt-search-element="advanced-options-form-cancel"]');
advancedOptionsFormSearchElement = element.querySelector('[data-kt-search-element="advanced-options-form-search"]');
// Initialize search handler
searchObject = new KTSearch(element);
// Demo search handler
searchObject.on('kt.search.process', processs);
// Ajax search handler
//searchObject.on('kt.search.process', processsAjax);
// Clear handler
searchObject.on('kt.search.clear', clear);
// Custom handlers
if (preferencesElement) {
handlePreferences();
}
if (advancedOptionsFormElement) {
handleAdvancedOptionsForm();
}
}
};
}();
// On document ready
KTUtil.onDOMContentLoaded(function() {
KTLayoutSearch.init();
});
"use strict";
// Class definition
var KTAppSidebar = function () {
// Private variables
var toggle;
var sidebar;
var headerMenu;
var menuDashboardsCollapse;
var menuScroll;
var toggle;
// Private functions
// Handle sidebar minimize mode toggle
var handleToggle = function () {
var toggleObj = KTToggle.getInstance(toggle);
var headerMenuObj = KTMenu.getInstance(headerMenu);
if ( toggleObj === null) {
return;
}
// Add a class to prevent sidebar hover effect after toggle click
toggleObj.on('kt.toggle.change', function() {
// Set animation state
sidebar.classList.add('animating');
// Wait till animation finishes
setTimeout(function() {
// Remove animation state
sidebar.classList.remove('animating');
}, 300);
// Prevent header menu dropdown display on hover
if (headerMenuObj) {
headerMenuObj.disable();
// Timeout to enable header menu
setTimeout(function() {
headerMenuObj.enable();
}, 1000);
}
});
// Store sidebar minimize state in cookie
toggleObj.on('kt.toggle.changed', function() {
// In server side check sidebar_minimize_state cookie
// value and add data-kt-app-sidebar-minimize="on"
// attribute to Body tag and "active" class to the toggle button
var date = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000); // 30 days from now
KTCookie.set("sidebar_minimize_state", toggleObj.isEnabled() ? "on" : "off", {expires: date});
});
}
// Handle dashboards menu items collapse mode
var handleShowMore = function() {
menuDashboardsCollapse.addEventListener('hide.bs.collapse', event => {
menuScroll.scrollTo({
top: 0,
behavior: 'instant'
});
});
}
var handleMenuScroll = function() {
var menuActiveItem = menuScroll.querySelector(".menu-link.active");
if ( !menuActiveItem ) {
return;
}
if ( KTUtil.isVisibleInContainer(menuActiveItem, menuScroll) === true) {
return;
}
menuScroll.scroll({
top: KTUtil.getRelativeTopPosition(menuActiveItem, menuScroll),
behavior: 'smooth'
});
}
// Public methods
return {
init: function () {
// Elements
sidebar = document.querySelector('#kt_app_sidebar');
toggle = document.querySelector('#kt_app_sidebar_toggle');
headerMenu = document.querySelector('#kt_app_header_menu');
menuDashboardsCollapse = document.querySelector('#kt_app_sidebar_menu_dashboards_collapse');
menuScroll = document.querySelector('#kt_app_sidebar_menu_scroll');
if ( sidebar === null ) {
return;
}
if ( toggle ) {
handleToggle();
}
if ( menuScroll ) {
handleMenuScroll();
}
if ( menuDashboardsCollapse ) {
handleShowMore();
}
}
};
}();
// On document ready
KTUtil.onDOMContentLoaded(function () {
KTAppSidebar.init();
});
"use strict";
// Class definition
var KTThemeModeUser = function () {
var handleSubmit = function() {
// Update chart on theme mode change
KTThemeMode.on("kt.thememode.change", function() {
var menuMode = KTThemeMode.getMenuMode();
var mode = KTThemeMode.getMode();
console.log("user selected theme mode:" + menuMode);
console.log("theme mode:" + mode);
// Submit selected theme mode menu option via ajax and
// store it in user profile and set the user opted theme mode via HTML attribute
// ....
});
}
return {
init: function () {
handleSubmit();
}
};
}();
// Initialize app on document ready
KTUtil.onDOMContentLoaded(function () {
KTThemeModeUser.init();
});
// Declare KTThemeModeUser for Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTThemeModeUser;
}
"use strict";
// Class definition
var KTThemeMode = function () {
var menu;
var callbacks = [];
var the = this;
var getMode = function() {
var mode;
if ( document.documentElement.hasAttribute("data-bs-theme") ) {
return document.documentElement.getAttribute("data-bs-theme");
} else if ( localStorage.getItem("data-bs-theme") !== null ) {
return localStorage.getItem("data-bs-theme");
} else if ( getMenuMode() === "system" ) {
return getSystemMode();
}
return "light";
}
var setMode = function(mode, menuMode) {
var currentMode = getMode();
// Reset mode if system mode was changed
if ( menuMode === 'system') {
if ( getSystemMode() !== mode ) {
mode = getSystemMode();
}
} else if (mode !== menuMode) {
menuMode = mode;
}
// Read active menu mode value
var activeMenuItem = menu ? menu.querySelector('[data-kt-element="mode"][data-kt-value="' + menuMode + '"]') : null;
// Enable switching state
document.documentElement.setAttribute("data-kt-theme-mode-switching", "true");
// Set mode to the target document.documentElement
document.documentElement.setAttribute("data-bs-theme", mode);
// Disable switching state
setTimeout(function() {
document.documentElement.removeAttribute("data-kt-theme-mode-switching");
}, 300);
// Store mode value in storage
localStorage.setItem("data-bs-theme", mode);
// Set active menu item
if ( activeMenuItem ) {
localStorage.setItem("data-bs-theme-mode", menuMode);
setActiveMenuItem(activeMenuItem);
}
if (mode !== currentMode) {
KTEventHandler.trigger(document.documentElement, 'kt.thememode.change', the);
}
}
var getMenuMode = function() {
if (!menu) {
return null;
}
var menuItem = menu ? menu.querySelector('.active[data-kt-element="mode"]') : null;
if ( menuItem && menuItem.getAttribute('data-kt-value') ) {
return menuItem.getAttribute('data-kt-value');
} else if ( document.documentElement.hasAttribute("data-bs-theme-mode") ) {
return document.documentElement.getAttribute("data-bs-theme-mode")
} else if ( localStorage.getItem("data-bs-theme-mode") !== null ) {
return localStorage.getItem("data-bs-theme-mode");
} else {
return typeof defaultThemeMode !== "undefined" ? defaultThemeMode : "light";
}
}
var getSystemMode = function() {
return window.matchMedia('(prefers-color-scheme: dark)').matches ? "dark" : "light";
}
var initMode = function() {
setMode(getMode(), getMenuMode());
KTEventHandler.trigger(document.documentElement, 'kt.thememode.init', the);
}
var getActiveMenuItem = function() {
return menu.querySelector('[data-kt-element="mode"][data-kt-value="' + getMenuMode() + '"]');
}
var setActiveMenuItem = function(item) {
var menuMode = item.getAttribute("data-kt-value");
var activeItem = menu.querySelector('.active[data-kt-element="mode"]');
if ( activeItem ) {
activeItem.classList.remove("active");
}
item.classList.add("active");
localStorage.setItem("data-bs-theme-mode", menuMode);
}
var handleMenu = function() {
var items = [].slice.call(menu.querySelectorAll('[data-kt-element="mode"]'));
items.map(function (item) {
item.addEventListener("click", function(e) {
e.preventDefault();
var menuMode = item.getAttribute("data-kt-value");
var mode = menuMode;
if ( menuMode === "system") {
mode = getSystemMode();
}
setMode(mode, menuMode);
});
});
}
return {
init: function () {
menu = document.querySelector('[data-kt-element="theme-mode-menu"]');
initMode();
if (menu) {
handleMenu();
}
},
getMode: function () {
return getMode();
},
getMenuMode: function() {
return getMenuMode();
},
getSystemMode: function () {
return getSystemMode();
},
setMode: function(mode) {
return setMode(mode)
},
on: function(name, handler) {
return KTEventHandler.on(document.documentElement, name, handler);
},
off: function(name, handlerId) {
return KTEventHandler.off(document.documentElement, name, handlerId);
}
};
}();
// Initialize app on document ready
KTUtil.onDOMContentLoaded(function () {
KTThemeMode.init();
});
// Declare KTThemeMode for Webpack support
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = KTThemeMode;
}
"use strict";
// Class definition
var KTLayoutToolbar = function () {
// Private variables
var toolbar;
// Private functions
var initForm = function () {
var rangeSlider = document.querySelector("#kt_app_toolbar_slider");
var rangeSliderValueElement = document.querySelector("#kt_app_toolbar_slider_value");
if (!rangeSlider) {
return;
}
noUiSlider.create(rangeSlider, {
start: [5],
connect: [true, false],
step: 1,
format: wNumb({
decimals: 1
}),
range: {
min: [1],
max: [10]
}
});
rangeSlider.noUiSlider.on("update", function (values, handle) {
rangeSliderValueElement.innerHTML = values[handle];
});
var handle = rangeSlider.querySelector(".noUi-handle");
handle.setAttribute("tabindex", 0);
handle.addEventListener("click", function () {
this.focus();
});
handle.addEventListener("keydown", function (event) {
var value = Number(rangeSlider.noUiSlider.get());
switch (event.which) {
case 37:
rangeSlider.noUiSlider.set(value - 1);
break;
case 39:
rangeSlider.noUiSlider.set(value + 1);
break;
}
});
}
// Public methods
return {
init: function () {
// Elements
toolbar = document.querySelector('#kt_app_toolbar');
if (!toolbar) {
return;
}
initForm();
}
};
}();
// On document ready
KTUtil.onDOMContentLoaded(function () {
KTLayoutToolbar.init();
});