abbott_2024_event/bin/app.publish/BackEnd/assets/javascript/theme.js

2012 lines
56 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
var Theme = /*#__PURE__*/function () {
function Theme() {
var _this = this;
_classCallCheck(this, Theme);
// looper color scheme refer from our _variable-bs-overrides.scss
this.colors = {
black: '#14141F',
brand: {
blue: '#0179A8',
indigo: '#346CB0',
purple: '#5F4B8B',
pink: '#B76BA3',
red: '#EA6759',
orange: '#EC935E',
yellow: '#F7C46C',
green: '#A7C796',
teal: '#00A28A',
cyan: '#3686A0'
},
gray: {
100: '#f6f7f9',
200: '#e6e8ed',
300: '#d6d8e1',
400: '#c6c9d5',
500: '#a6abbd',
600: '#888c9b',
700: '#363642',
800: '#222230',
900: '#191927'
},
white: '#ffffff'
}; // list of supported skin
this.skins = ['default', 'dark']; // current skin
this.skin = localStorage.getItem('skin') || 'default'; // current aside menu mode
this.hasCompactMenu = JSON.parse(localStorage.getItem('hasCompactMenu')) || false; // get auto initialize variable
this.autoInit = localStorage.getItem('autoInit') || true; // initialized
$(document).ready(function () {
if (_this.autoInit) _this.init();
});
}
_createClass(Theme, [{
key: "init",
value: function init() {
// handle polyfill
// =============================================================
this.placeholderShown();
this.objectFitFallback(); // handle bootstrap components
// =============================================================
this.tooltips();
this.popovers();
this.nestedDropdown();
this.inputClearable();
this.inputGroup();
this.inputNumber();
this.fileInputBehavior();
this.togglePasswordVisibility();
this.indeterminateCheckboxes();
this.formValidation();
this.cardExpansion();
this.modalScrollable();
this.autofocusInputBehaviour(); // handle theme skins (default, dark)
// =============================================================
this.setSkin(this.skin);
if (this.skin === 'dark') {
this.invertGrays();
} // handle theme layouts
// =============================================================
this.asideBackdrop();
this.toggleAside();
this.asideMenu();
this.handleAsideMenu();
this.sidebar();
this.pageExpander(); // handle theme components
// =============================================================
this.hamburger();
this.publisher();
this.tasksStyle();
this.filterList();
this.radioList();
this.checkboxList();
this.smoothScroll(); // handle plugins initialization
// =============================================================
this.perfectScrollbar();
this.masonry();
this.chartjs();
this.sparkline();
this.easypie();
this.knob();
this.sortable();
this.nestable();
this.plyr();
this.bootstrapSelect();
this.select2();
this.atwho();
this.tribute();
this.flatpickr();
this.colorpicker();
this.touchspin();
this.nouislider();
this.summernote();
this.quill();
this.simplemde();
this.maskInput();
this.headroom();
this.zxcvbn();
this.aos(); // handle events how our components should react on events?
// =============================================================
this.eventProps();
this.watchMQ();
this.watchIE(); // utilities
// =============================================================
this.browserFlagging();
this.osFlagging(); // trigger the document
$(document).trigger('theme:init', this);
} // Polifyll
// =============================================================
/**
* Polyfill for Array.values()
* returns an array of a given object's own enumerable property values,
* in the same order as that provided
*/
}, {
key: "objToArray",
value: function objToArray(obj) {
return Object.keys(obj).map(function (key) {
return obj[key];
});
}
/**
* Polyfill for :placeholder-shown
* used by floating label input
*/
}, {
key: "placeholderShown",
value: function placeholderShown() {
$(document).on('focus blur keyup change', '.form-label-group > input', function () {
this.classList[this.value ? 'remove' : 'add']('placeholder-shown');
}); // toggle .placeholder-shown onload
$('.form-label-group > input').trigger('change');
}
/**
* object-fit fallbaack for ie and edge
*/
}, {
key: "objectFitFallback",
value: function objectFitFallback() {
if (this.isIE() || this.isEdge()) {
var selectors = ['.user-avatar img', '.tile > img', '.figure-attachment > img', '.page-cover > .cover-img', '.list-group-item-figure > img'];
$(selectors.toString()).each(function () {
var $img = $(this);
var url = $img.prop('src');
var $container = $img.parent(); // .user-avatar with dropdown has deep markup
if ($container.is('[data-toggle="dropdown"]')) {
$container = $container.parent();
}
if (url) {
// copy img url then put as container bg
$container.css({
backgroundImage: "url(".concat(url, ")"),
backgroundSize: 'cover',
backgroundPosition: 'center center'
});
if ($container.hasClass('user-avatar') || $container.hasClass('user-avatar')) {
$container.css('background-position', 'top center');
} // hide the image
$img.css('opacity', 0);
}
});
}
} // Bootstrap Components
// =============================================================
/**
* Init bootstrap tooltips
*/
}, {
key: "tooltips",
value: function tooltips() {
// Turn off the transform placement on Popper
Popper.Defaults.modifiers.computeStyle.gpuAcceleration = false;
$('[data-toggle="tooltip"]').tooltip();
}
/**
* Init bootstrap popovers
*/
}, {
key: "popovers",
value: function popovers() {
$('[data-toggle="popover"]').popover();
}
/**
* Init nested dropdown
*/
}, {
key: "nestedDropdown",
value: function nestedDropdown() {
$('.dropdown-menu [data-toggle="dropdown"]').on('click', function (e) {
e.preventDefault();
e.stopPropagation();
var $trigger = $(this);
var $dropdown = $trigger.parent();
var $dropdownMenu = $trigger.next(); // close all dropdown menu
$dropdown.siblings().find('.dropdown-menu').removeClass('show');
$dropdownMenu.toggleClass('show');
$trigger.parents('.nav-item').on('hidden.bs.dropdown', function () {
return $dropdownMenu.removeClass('show');
});
});
}
/**
* Hide/show clearable button due to input value
*/
}, {
key: "inputClearable",
value: function inputClearable() {
// hide/show due to input value
var toggleClear = function toggleClear(input) {
var isEmpty = !$(input).val();
var clearable = $(input).parent().children('.close');
clearable.toggleClass('show', !isEmpty);
}; // give natural state onload
// show close button when input has value
$('.has-clearable > .form-control').each(function () {
toggleClear(this);
}); // handle input clearable events
$(document).on('keyup', '.has-clearable > .form-control', function () {
toggleClear(this);
}).on('click', '.has-clearable > .close', function () {
var $input = $(this).parent().children('.form-control');
$input.val('').focus();
toggleClear($input[0]);
$input.trigger('keyup');
});
}
/**
* Toggle focus class in input-group when input is focused
*/
}, {
key: "inputGroup",
value: function inputGroup() {
// handle input group events
$(document).on('focusin focusout', '.input-group:not(.input-group-alt) .form-control', function (e) {
var $parent = $(this).parent();
var hasInputGroup = $parent.has('.input-group');
var hasFocus = e.type === 'focusin';
if (hasInputGroup) {
$parent.toggleClass('focus', hasFocus);
}
});
}
/**
* Toggle focus class in input-group when input is focused
*/
}, {
key: "inputNumber",
value: function inputNumber() {
$('.custom-number').each(function () {
var spinner = $(this);
var input = spinner.children('.form-control[type="number"]');
var min = parseFloat(input.attr('min'));
var max = parseFloat(input.attr('max'));
var step = parseFloat(input.attr('step')) || 1;
var newVal = 0;
var controls = $('<div class="custom-number-controls"></div>');
var btnUp = $('<div class="custom-number-btn custom-number-up">+</div>');
var btnDown = $('<div class="custom-number-btn custom-number-down">-</div>');
controls.prepend(btnUp).append(btnDown);
spinner.append(controls);
btnUp.on('click', function () {
var oldValue = parseFloat(input.val()) || 0;
newVal = oldValue >= max ? oldValue : oldValue + step;
input.val(newVal).trigger('change');
});
btnDown.on('click', function () {
var oldValue = parseFloat(input.val()) || 0;
newVal = oldValue <= min ? oldValue : oldValue - step;
input.val(newVal).trigger('change');
});
});
}
/**
* Add text value to our custom file input
*/
}, {
key: "fileInputBehavior",
value: function fileInputBehavior() {
// copy label text to data label which we'll use later
$('.custom-file > .custom-file-label').each(function () {
var label = $(this).text();
$(this).data('label', label);
}); // update label text with current input value
$(document).on('change', '.custom-file > .custom-file-input', function () {
var files = this.files;
var $fileLabel = $(this).next('.custom-file-label'); // use when no file chosen
var $originLabel = $fileLabel.data('label'); // truncate text when user chose more than 2 files
$fileLabel.text(files.length + ' files selected');
if (files.length <= 2) {
var fileNames = [];
for (var i = 0; i < files.length; i++) {
fileNames.push(files[i].name);
}
$fileLabel.text(fileNames.join(', '));
} // reset label text if no file chosen
if (!files.length) {
$fileLabel.text($originLabel);
}
});
}
/**
* Toggle visibility password input value
*/
}, {
key: "togglePasswordVisibility",
value: function togglePasswordVisibility() {
$(document).on('click', '[data-toggle="password"]', function (e) {
e.preventDefault();
var target = $(this).attr('href');
var $input = $(target);
var hasFa = $(this).has('.fa');
var isPassword = $input.is('[type="password"]');
var inputType = isPassword ? 'text' : 'password';
var triggerText = isPassword ? 'Hide' : 'Show'; // toggle icon
$(this).children('.fa, .far').toggleClass('fa-eye fa-eye-slash', hasFa); // toggle trigger text
$(this).children().last().text(triggerText); // toggle input type
$input.prop('type', inputType);
});
}
/**
* Add indeterminate state in custom checkbox
*/
}, {
key: "indeterminateCheckboxes",
value: function indeterminateCheckboxes() {
$('input[type="checkbox"][indeterminate], input[type="checkbox"][data-indeterminate="true"]').prop('indeterminate', true);
}
/**
* Validate form on submit
*/
}, {
key: "formValidation",
value: function formValidation() {
$(window).on('load', function () {
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = $('.needs-validation'); // Loop over them and prevent submission
forms.each(function (i, form) {
$(form).on('submit', function (e) {
if (form.checkValidity() === false) {
e.preventDefault();
e.stopPropagation();
}
$(form).addClass('was-validated');
});
});
});
}
/**
* Toggle card expansion like accordion
*/
}, {
key: "cardExpansion",
value: function cardExpansion() {
$(document).on('show.bs.collapse hide.bs.collapse', '.card-expansion-item > .collapse', function (e) {
var $item = $(this).parent();
var isShown = e.type === 'show';
$item.toggleClass('expanded', isShown);
});
}
/**
* Toggle class scrollable when the modal body scroll reach the top/bottom
*/
}, {
key: "modalScrollable",
value: function modalScrollable() {
$('.modal').on('shown.bs.modal', function () {
$(this).addClass('has-shown').find('.modal-body').trigger('scroll');
});
$('.modal-dialog-scrollable .modal-body, .modal-drawer .modal-body').on('scroll', function () {
var $elem = $(this);
var elem = $elem[0];
var isTop = $elem.scrollTop() === 0;
var isBottom = elem.scrollHeight - $elem.scrollTop() === $elem.outerHeight();
$elem.prev().toggleClass('modal-body-scrolled', isTop);
$elem.next().toggleClass('modal-body-scrolled', isBottom);
});
}
/**
* Make input with [autofocus] attribute in modal and dropdown work as native [autofocus]
*/
}, {
key: "autofocusInputBehaviour",
value: function autofocusInputBehaviour() {
$(document).on('shown.bs.modal shown.bs.dropdown', '.modal, .dropdown', function (e) {
var $modal = $(e.target);
$modal.find('input[autofocus]:first, input[data-autofocus="true"]:first').focus();
});
} // Theme Skins
// =============================================================
/**
* Get gray colors from colors
*/
}, {
key: "getColors",
value: function getColors(color) {
return this.colors[color];
}
/**
* Get muted colors based on active skin
*/
}, {
key: "getMutedColor",
value: function getMutedColor() {
return this.skin === 'dark' ? this.colors.gray[400] : this.colors.gray[600];
}
/**
* Get light color based on active skin
*/
}, {
key: "getLightColor",
value: function getLightColor() {
return this.colors.gray[100];
}
/**
* Get dark color based on active skin
*/
}, {
key: "getDarkColor",
value: function getDarkColor() {
return this.colors.gray[900];
}
/**
* Set current skin to given value
* We need to reload the browser when perform this method
* to apply changes to all components
*/
}, {
key: "setSkin",
value: function setSkin(skin) {
// reset to default when using un-appropriate value
skin = this.skins.indexOf(skin) < 0 ? 'default' : skin; // inverse gray colors
if (this.skin !== skin) {
this.invertGrays();
} // flagging class
$('body').removeClass('dark-skin default-skin').addClass("".concat(skin, "-skin"));
localStorage.setItem('skin', skin);
this.skin = skin;
}
/**
* Invert gray colors due to active skin
*/
}, {
key: "invertGrays",
value: function invertGrays() {
var _this2 = this;
var self = this;
var gray = this.getColors('gray'); // get gray colors in array that reserve it
var reverseGray = this.objToArray(gray).reverse();
var x = 0;
$.each(gray, function (i, v) {
_this2.colors.gray[i] = reverseGray[x];
x++;
});
} // Theme Layout
// =============================================================
/**
* Append aside-backdrop to .app
*/
}, {
key: "asideBackdrop",
value: function asideBackdrop() {
$('.app').append('<div class="aside-backdrop"/>');
}
/**
* Showing aside-backdrop
*/
}, {
key: "showAsideBackdrop",
value: function showAsideBackdrop() {
$('.aside-backdrop').addClass('show');
return $('.aside-backdrop');
}
/**
* Hiding aside-backdrop
*/
}, {
key: "hideAsideBackdrop",
value: function hideAsideBackdrop() {
$('.aside-backdrop').removeClass('show');
return $('.aside-backdrop');
}
/**
* Show aside
*/
}, {
key: "showAside",
value: function showAside() {
var _this3 = this;
// show aside-backdrop
var backdrop = this.showAsideBackdrop(); // add .show class to aside
$('.app-aside').addClass('show'); // add .active state to trigger button
$('[data-toggle="aside"]').addClass('active');
backdrop.one('click', function () {
_this3.hideAside();
});
}
/**
* Hide aside
*/
}, {
key: "hideAside",
value: function hideAside() {
// hide aside-backdrop
this.hideAsideBackdrop(); // remove .show class to aside
$('.app-aside').removeClass('show'); // remove .active state to trigger button
$('[data-toggle="aside"]').removeClass('active');
}
/**
* Handle show/hide aside
*/
}, {
key: "toggleAside",
value: function toggleAside() {
var _this4 = this;
var $trigger = $('[data-toggle="aside"]');
$trigger.on('click', function () {
var isShown = $('.app-aside').hasClass('show');
$trigger.toggleClass('active', !isShown);
if (isShown) _this4.hideAside();else _this4.showAside();
});
}
/**
* Get the appropriate StackedMenu options
*/
}, {
key: "getMenuOptions",
value: function getMenuOptions() {
return {
compact: this.hasCompactMenu,
hoverable: this.hasCompactMenu
};
}
/**
* Handle aside menu
*/
}, {
key: "asideMenu",
value: function asideMenu() {
var ps;
if (window.StackedMenu && this.isExists('#stacked-menu')) {
// init stackedMenu
this.stackedMenu = new StackedMenu(this.getMenuOptions());
$('.app').toggleClass('has-compact-menu', this.hasCompactMenu); // watch aside
this.watchAside(); // update perfect scrollbar
$(this.stackedMenu.selector).on('menu:open menu:close', function () {
// wait until translation done
setTimeout(function () {
if (window.PerfectScrollbar) {
ps.update();
}
}, 300);
}); // perfect scrollbar for aside menu
if (window.PerfectScrollbar) {
ps = new PerfectScrollbar('.aside-menu', {
suppressScrollX: true
});
}
}
}
/**
* Collapse aside menu to compact mode
*/
}, {
key: "collapseAsideMenu",
value: function collapseAsideMenu() {
if (typeof this.stackedMenu !== 'undefined') {
this.stackedMenu.compact(true).hoverable(true); // update aside mode
this.hasCompactMenu = true; // as well as localStorage data
localStorage.setItem('hasCompactMenu', true); // update flag class
$('.app').addClass('has-compact-menu');
} // watch aside
this.watchAside();
}
/**
* Expand aside menu to normal mode
*/
}, {
key: "expandAsideMenu",
value: function expandAsideMenu() {
if (typeof this.stackedMenu !== 'undefined') {
this.stackedMenu.compact(false).hoverable(false); // update aside mode
this.hasCompactMenu = false; // as well as localStorage data
localStorage.setItem('hasCompactMenu', false); // update flag class
$('.app').removeClass('has-compact-menu');
} // watch aside
this.watchAside();
}
/**
* Toggle aside menu mode
*/
}, {
key: "toggleAsideMenu",
value: function toggleAsideMenu() {
if (this.hasCompactMenu == true) {
this.expandAsideMenu();
} else {
this.collapseAsideMenu();
}
}
/**
* Watch aside on toggle screen
*/
}, {
key: "watchAside",
value: function watchAside() {
var $appWrapper = $('.app');
if (typeof this.stackedMenu !== 'undefined') {
if (!this.isToggleScreenUp() || $appWrapper.hasClass('has-fullwidth')) {
this.stackedMenu.compact(false).hoverable(false);
$appWrapper.removeClass('has-compact-menu');
} else {
this.stackedMenu.compact(this.hasCompactMenu).hoverable(this.hasCompactMenu);
$appWrapper.toggleClass('has-compact-menu', this.hasCompactMenu);
}
}
}
/**
* handle aside compact
*/
}, {
key: "handleAsideMenu",
value: function handleAsideMenu() {
var _this5 = this;
$('body').on('click', '[data-toggle="aside-collapse"]', function (e) {
e.preventDefault();
_this5.collapseAsideMenu();
}).on('click', '[data-toggle="aside-expand"]', function (e) {
e.preventDefault();
_this5.expandAsideMenu();
}).on('click', '[data-toggle="aside-menu"]', function (e) {
e.preventDefault();
_this5.toggleAsideMenu();
}); // remove any preparation classes here
$('html').removeClass('preparing-compact-menu');
}
/**
* Showing sidebar
*/
}, {
key: "showSidebar",
value: function showSidebar(relatedTarget) {
$('.has-sidebar').addClass('has-sidebar-open'); // trigger event
$('.page-sidebar').trigger({
type: 'toggle.sidebar',
isOpen: true,
relatedTarget: relatedTarget
});
}
/**
* Hiding sidebar
*/
}, {
key: "hideSidebar",
value: function hideSidebar(relatedTarget) {
$('.has-sidebar').removeClass('has-sidebar-open'); // trigger event
$('.page-sidebar').trigger({
type: 'toggle.sidebar',
isOpen: false,
relatedTarget: relatedTarget
});
}
/**
* Toggle sidebar
*/
}, {
key: "toggleSidebar",
value: function toggleSidebar(relatedTarget) {
var $target = $('.has-sidebar');
var isOpen = $target.hasClass('has-sidebar-open');
if (this.isExists('.has-sidebar') && isOpen) {
this.hideSidebar(relatedTarget);
} else if (this.isExists('.has-sidebar') && !isOpen) {
this.showSidebar(relatedTarget);
}
}
/**
* Add sidebar backdrop to the .page
*/
}, {
key: "sidebarBackdrop",
value: function sidebarBackdrop() {
// append backdrop only when .page has .sidebar component
if (this.isExists('.has-sidebar')) {
$('.page').prepend('<div class="sidebar-backdrop" />');
}
}
/**
* Handle sidebar
*/
}, {
key: "sidebar",
value: function sidebar() {
var self = this; // handle sidebar
this.sidebarBackdrop();
$(document).on('click', '[data-toggle="sidebar"], .sidebar-backdrop', function (e) {
e.preventDefault();
var state = $(this).data('sidebar');
switch (state) {
case 'show':
self.showSidebar(this);
break;
case 'hide':
self.hideSidebar(this);
break;
default:
self.toggleSidebar(this);
}
});
}
/**
* Toggle .page-expanded class on .page
* best fit to used in board layout
*/
}, {
key: "pageExpander",
value: function pageExpander() {
$(document).on('click', '[data-toggle="page-expander"]', function (e) {
e.preventDefault();
$('.page').toggleClass('page-expanded');
});
} // Theme Components
// =============================================================
/**
* Handle hamburger .active state
*/
}, {
key: "hamburger",
value: function hamburger() {
$(document).on('click', '.hamburger-toggle', function () {
$(this).toggleClass('active');
});
}
/**
* Handle publisher focus state
*/
}, {
key: "publisher",
value: function publisher() {
$(document).on('focusin', '.publisher .form-control', function () {
var $publisher = $(this).parents('.publisher'); // normalize all empty publisher
$('.publisher').each(function () {
var hasEmpty = !$(this).find('.form-control').val();
if (hasEmpty) {
$(this).removeClass('active');
$(this).not('.keep-focus').removeClass('focus');
}
}); // add state classes
$publisher.addClass('focus active');
}).on('click', 'html', function () {
var $publisher = $('.publisher.active');
var isEmpty = !$publisher.find('.form-control').val(); // always remove active state
$publisher.removeClass('active'); // remove focus if input is empty
if (isEmpty) {
$publisher.not('.keep-focus').removeClass('focus');
}
}).on('click', '.publisher.active', function (e) {
e.stopPropagation();
});
}
/**
* Add hover state when task header is hovered
*/
}, {
key: "tasksStyle",
value: function tasksStyle() {
$(document).on('mouseenter mouseleave', '.task-header', function (e) {
var isHover = e.type === 'mouseenter';
$(this).parent().toggleClass('hover', isHover);
});
}
/**
* Filter list(s) through input
*/
}, {
key: "filterList",
value: function filterList() {
$(document).on('keyup', '[data-filter]', function () {
var target = $(this).data('filter');
var value = $(this).val().toLowerCase();
$(target).filter(function () {
var text = $(this).text().toLowerCase();
$(this).toggle(text.indexOf(value) > -1);
});
});
}
/**
* Make list items selectable like input[radio]
*/
}, {
key: "radioList",
value: function radioList() {
$(document).on('click', '[data-toggle="radiolist"] > *', function () {
var $list = $(this).parent();
var $listItems = $list.children(); // remove all selected item
$listItems.removeClass('active'); // selected item
$(this).addClass('active');
$list.trigger({
type: 'change',
relatedTarget: this
});
});
}
/**
* Make list items selectable like input[checkbox]
*/
}, {
key: "checkboxList",
value: function checkboxList() {
$(document).on('click', '[data-toggle="checkboxlist"] > *', function () {
var $list = $(this).parent();
var isActive = $(this).hasClass('active'); // selected item
$(this).toggleClass('active', !isActive);
$list.trigger({
type: 'change',
relatedTarget: $list.children('.active')
});
});
}
/**
* Animate scroll on internal link
*/
}, {
key: "smoothScroll",
value: function smoothScroll() {
$(document).on('click', 'a.smooth-scroll[href^="#"]', function (e) {
var hash = $(this).attr('href');
var target = $(hash);
if (!target.length) {
return;
}
e.preventDefault();
var headerHeight = $('.app-header').height() + 20;
var offset = target.offset().top - headerHeight;
$('html, body').animate({
scrollTop: offset < 0 ? 0 : offset
}, 700);
});
} // Theme Plugins
// =============================================================
/**
* Handle perfect scrollbar
*/
}, {
key: "perfectScrollbar",
value: function perfectScrollbar() {
// initialization for any components
if (window.PerfectScrollbar && this.isExists('.perfect-scrollbar')) {
$('.perfect-scrollbar:not(".aside-menu")').each(function () {
new PerfectScrollbar(this, {
suppressScrollX: true
});
});
}
}
/**
* Handle masonry
*/
}, {
key: "masonry",
value: function masonry() {
if (window.Masonry) {
$(document).ready(function () {
$('.masonry-layout').masonry({
itemSelector: '.masonry-item',
columnWidth: '.masonry-item:first-child',
percentPosition: true
});
});
}
}
/**
* Handle ChartJS default options
*/
}, {
key: "chartjs",
value: function chartjs() {
if (window.Chart) {
var colors = this.colors;
var skin = this.skin;
var isDarkSkin = skin === 'dark';
var gray = this.getColors('gray'); // our settings for Chart JS
var settings = {
global: {
responsive: true,
maintainAspectRatio: false,
defaultColor: isDarkSkin ? this.hexToRgba(colors.white, .08) : this.hexToRgba(colors.black, .1),
defaultFontColor: isDarkSkin ? gray[400] : gray[600],
fontFamily: '-apple-system, BlinkMacSystemFont, "Fira Sans", "Helvetica Neue", "Apple Color Emoji", sans-serif',
tooltips: {
backgroundColor: isDarkSkin ? this.hexToRgba(colors.white, .98) : this.hexToRgba(colors.black, .98),
xPadding: 8,
yPadding: 8,
titleMarginBottom: 8,
footerMarginTop: 8,
titleFontColor: gray[200],
bodyFontColor: gray[200],
footerFontColor: gray[200],
multiKeyBackground: gray[200]
},
title: {
fontColor: gray[700],
fontStyle: 500
},
legend: {
display: false
}
},
scale: {
gridLines: {
color: isDarkSkin ? this.hexToRgba(colors.white, .08) : this.hexToRgba(colors.black, .1),
zeroLineColor: isDarkSkin ? this.hexToRgba(colors.white, .08) : this.hexToRgba(colors.black, .1)
}
}
}; // Merge settings to Chart JS default options
$.extend(true, Chart.defaults, settings);
}
}
/**
* Handle Flot default options
*/
}, {
key: "flotDefaultOptions",
value: function flotDefaultOptions() {
var colors = this.colors;
var skin = this.skin;
var isDarkSkin = skin === 'dark';
var gray = this.getColors('gray'); // our setting to merge with flot default options
return {
xaxis: {
tickColor: isDarkSkin ? this.hexToRgba(colors.white, .08) : this.hexToRgba(colors.black, .1),
color: isDarkSkin ? gray[400] : gray[600]
},
yaxis: {
tickColor: isDarkSkin ? this.hexToRgba(colors.white, .08) : this.hexToRgba(colors.black, .1),
color: isDarkSkin ? gray[400] : gray[600]
}
};
}
/**
* Handle Sparkline initialization
*/
}, {
key: "sparkline",
value: function sparkline() {
if ($.fn.sparkline) {
$('[data-toggle="sparkline"]').each(function () {
var selector = this;
var options = $(selector).data();
var values = options.values || 'html';
$(selector).sparkline(values, options);
});
}
}
/**
* Handle easyPieChart initialization
*/
}, {
key: "easypie",
value: function easypie() {
if ($.fn.easyPieChart) {
var self = this;
$('[data-toggle="easypiechart"]').each(function () {
var selector = this;
var options = $(selector).data(); // default for undefined
options.barColor = options.barColor || self.colors.brand.teal;
options.trackColor = options.trackColor || self.skin === 'dark' ? self.getColors('gray')[200] : self.colors.white;
options.scaleColor = options.scaleColor || 'transparent';
options.lineWidth = options.lineWidth ? parseInt(options.lineWidth) : 8;
options.size = options.size ? parseInt(options.size) : 120;
options.rotate = options.rotate ? parseInt(options.rotate) : 0;
options.trackColor = options.trackColor == 'false' || options.trackColor == '' ? false : options.trackColor;
options.scaleColor = options.scaleColor == 'false' || options.scaleColor == '' ? false : options.scaleColor;
$(selector).easyPieChart(options);
});
}
}
/**
* Handle knob initialization
*/
}, {
key: "knob",
value: function knob() {
if ($.fn.knob) {
var self = this;
$('[data-toggle="knob"]').each(function () {
var selector = this;
var options = $(selector).data();
options.bgColor = options.bgcolor || self.getLightColor();
options.fgColor = options.fgcolor || self.colors.brand.teal;
options.draw = function () {
// 'tron' case
if (this.$.data('skin') == 'tron') {
this.cursorExt = 0.3;
var a = this.arc(this.cv); // Arc
var pa; // Previous arc
var r = 1;
this.g.lineWidth = this.lineWidth;
if (this.o.displayPrevious) {
pa = this.arc(this.v);
this.g.beginPath();
this.g.strokeStyle = this.pColor;
this.g.arc(this.xy, this.xy, this.radius - this.lineWidth, pa.s, pa.e, pa.d);
this.g.stroke();
}
this.g.beginPath();
this.g.strokeStyle = r ? this.o.fgColor : this.fgColor;
this.g.arc(this.xy, this.xy, this.radius - this.lineWidth, a.s, a.e, a.d);
this.g.stroke();
this.g.lineWidth = 2;
this.g.beginPath();
this.g.strokeStyle = this.o.fgColor;
this.g.arc(this.xy, this.xy, this.radius - this.lineWidth + 1 + this.lineWidth * 2 / 3, 0, 2 * Math.PI, false);
this.g.stroke();
return false;
}
};
$(selector).knob(options);
});
}
}
/**
* Handle Sortable initialization
*/
}, {
key: "sortable",
value: function sortable() {
if (window.Sortable) {
$('[data-toggle="sortable"]').each(function () {
var selector = this;
var options = $(selector).data();
options.animation = options.animation || 150;
options.filter = options.filter || '.ignore-sort';
Sortable.create(selector, options);
});
}
}
/**
* Handle Nestable initialization
*/
}, {
key: "nestable",
value: function nestable() {
if ($.fn.nestable) {
$('[data-toggle="nestable"]').each(function () {
var selector = this;
var options = $(selector).data();
$(selector).nestable(options);
});
}
}
/**
* Handle Plyr initialization
*/
}, {
key: "plyr",
value: function plyr() {
if (window.Plyr) {
$('[data-toggle="plyr"]').each(function () {
var selector = this;
new Plyr(selector);
});
}
}
/**
* jsTree common types setup
*/
}, {
key: "jsTreeTypes",
value: function jsTreeTypes() {
return {
'#': {
max_children: 1,
max_depth: 4,
valid_children: ['root']
},
'root': {
icon: 'fa fa-hdd text-yellow',
valid_children: ['default', 'file']
},
default: {
icon: 'fa fa-folder text-yellow',
valid_children: ['default', 'file']
},
file: {
icon: 'fa fa-file',
valid_children: []
},
text: {
icon: 'far fa-file-alt',
valid_children: []
},
word: {
icon: 'far fa-file-word',
valid_children: []
},
excel: {
icon: 'far fa-file-excel',
valid_children: []
},
ppt: {
icon: 'far fa-file-powerpoint',
valid_children: []
},
pdf: {
icon: 'far fa-file-pdf',
valid_children: []
},
archive: {
icon: 'far fa-file-archive',
valid_children: []
},
image: {
icon: 'far fa-file-image',
valid_children: []
},
audio: {
icon: 'far fa-file-audio',
valid_children: []
},
video: {
icon: 'far fa-file-video',
valid_children: []
}
};
}
/**
* Handle bootstrap select initialization
* See https://developer.snapappointments.com/bootstrap-select
*/
}, {
key: "bootstrapSelect",
value: function bootstrapSelect() {
if ($.fn.selectpicker) {
// use fontawesome as default icon
$.fn.selectpicker.Constructor.DEFAULTS.style = '';
$.fn.selectpicker.Constructor.DEFAULTS.styleBase = 'custom-select';
$.fn.selectpicker.Constructor.DEFAULTS.iconBase = 'mr-1 fa';
$.fn.selectpicker.Constructor.DEFAULTS.tickIcon = 'fa-check font-size-sm mt-2';
$('[data-toggle="selectpicker"]').each(function () {
var selector = this; // initialize
$(selector).selectpicker() // add dropdown menu arrow
.on('loaded.bs.select', function (e) {
$(e.target).nextAll('.dropdown-menu').prepend('<div class="dropdown-arrow" />');
});
});
}
}
/**
* Handle select2 initialization
* See https://select2.org/configuration/data-attributes
* to use select2 with data-* attributes
*/
}, {
key: "select2",
value: function select2() {
if ($.fn.select2) {
// responsive setting
$.fn.select2.defaults.set('width', '100%');
$('[data-toggle="select2"]').each(function () {
var selector = this;
var options = $(selector).data();
options = options.options ? options.options : options;
$(selector).select2(options);
});
}
}
/**
* Handle At.js initialization
*/
}, {
key: "atwho",
value: function atwho() {
if ($.fn.atwho) {
$('[data-toggle="atwho"]').each(function () {
var selector = this;
var options = $(selector).data();
$(selector).atwho(options);
});
}
}
/**
* Handle Tribute initialization
*/
}, {
key: "tribute",
value: function tribute() {
if (window.Tribute) {
$('[data-toggle="tribute"]').each(function () {
var selector = this;
var options = $(selector).data();
options.menuContainer = document.querySelector(options.menuContainer) || false; // define custom template
if (options.itemTemplate == true) {
options.menuItemTemplate = function (item) {
return "<span class=\"user-avatar user-avatar-sm mr-2\"><img src=\"".concat(item.original.avatar, "\"></span> ").concat(item.string);
};
} // define select template
if (options.selectTemplate == true) {
options.selectTemplate = function (item) {
// function called on select that returns the content to insert
return "<a href=\"#\" class=\"mention\">@".concat(item.original.value, "</a>");
};
} // set values from data-remote if exist
if (options.remote) {
$.ajax({
async: false,
dataType: 'json',
url: options.remote,
success: function success(data) {
options.values = data;
}
});
}
var tribute = new Tribute(options);
tribute.attach(this);
});
}
}
/**
* Handle flatpickr initialization
*/
}, {
key: "flatpickr",
value: function (_flatpickr) {
function flatpickr() {
return _flatpickr.apply(this, arguments);
}
flatpickr.toString = function () {
return _flatpickr.toString();
};
return flatpickr;
}(function () {
if (window.flatpickr) {
flatpickr.defaultConfig.disableMobile = true;
$('[data-toggle="flatpickr"]').each(function () {
var selector = this;
var options = $(selector).data();
options.plugins = [];
options.disable = options.disables || [];
options.defaultDate = options.defaultDates || null; // flatpickr plugins
if (options.confirmdate) {
options.plugins.push(new confirmDatePlugin({
showAlways: true
}));
}
if (options.weekselect) {
options.plugins.push(new weekSelect({}));
}
if (options.monthselect) {
options.plugins.push(new monthSelectPlugin({
shorthand: true,
//defaults to false
dateFormat: 'm/y',
//defaults to 'F Y'
altFormat: 'F Y' //defaults to 'F Y'
}));
}
if (options.rangeplugin) {
options.plugins.push(new range({
input: "#".concat(options.secondInput)
}));
}
flatpickr(selector, options);
});
}
})
/**
* Handle colorpicker initialization
*/
}, {
key: "colorpicker",
value: function colorpicker() {
if ($.fn.colorpicker) {
$('[data-toggle="colorpicker"]').each(function () {
var selector = this;
var options = $(selector).data();
$(selector).colorpicker(options);
});
}
}
/**
* Handle TouchSpin initialization
*/
}, {
key: "touchspin",
value: function touchspin() {
if ($.fn.TouchSpin) {
$('[data-toggle="touchspin"]').each(function () {
var selector = this;
var settings = $(selector).data();
var options = {
buttondown_class: 'btn btn-secondary',
buttonup_class: 'btn btn-secondary',
verticalupclass: '+',
verticaldownclass: '-'
}; // Merge options
$.extend(true, options, settings);
$(selector).TouchSpin(options);
});
}
}
/**
* Handle nouislider initialization
*/
}, {
key: "nouislider",
value: function nouislider() {
if (window.noUiSlider) {
$('[data-toggle="nouislider"]').each(function () {
var selector = this;
var options = $(selector).data();
if (window.wNumb && options.formatWnumb) {
options.format = wNumb(options.formatWnumb);
}
noUiSlider.create(selector, options);
});
}
}
/**
* Handle summernote initialization
*/
}, {
key: "summernote",
value: function summernote() {
if ($.fn.summernote) {
$('[data-toggle="summernote"]').each(function () {
var selector = this;
var options = $(selector).data();
options.callbacks = {
// fix broken checkbox on link modal
onInit: function onInit(e) {
var editor = $(e.editor);
editor.find('.custom-control-description').addClass('custom-control-label d-block').parent().removeAttr('for');
}
};
$(selector).summernote(options);
});
}
}
/**
* Handle Quill initialization
*/
}, {
key: "quill",
value: function quill() {
if (window.Quill) {
$('[data-toggle="quill"]').each(function () {
var selector = this;
var options = $(selector).data();
if (options.modules == null) {
options.modules = {
'formula': true,
'syntax': true,
'toolbar': [[{
'font': []
}, {
'size': []
}], ['bold', 'italic', 'underline', 'strike'], [{
'color': []
}, {
'background': []
}], [{
'script': 'super'
}, {
'script': 'sub'
}], [{
'header': [false, 1, 2, 3, 4, 5, 6]
}, 'blockquote', 'code-block'], [{
'list': 'ordered'
}, {
'list': 'bullet'
}, {
'indent': '-1'
}, {
'indent': '+1'
}], ['direction', {
'align': []
}], ['link', 'image', 'video', 'formula'], ['clean']]
};
}
options.theme = options.theme ? options.theme : 'snow';
new Quill(selector, options);
});
}
}
/**
* Handle SimpleMDE initialization
*/
}, {
key: "simplemde",
value: function simplemde() {
if (window.SimpleMDE) {
$('[data-toggle="simplemde"]').each(function () {
var selector = this;
var options = $(selector).data();
options.element = this;
new SimpleMDE(options);
});
}
}
/*
* Handle Vanilla Text Mask
*/
}, {
key: "maskInput",
value: function maskInput() {
if (window.vanillaTextMask) {
$('[data-mask]').each(function () {
var selector = this;
var options = $(selector).data();
var patterns = {
date: [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/],
usphone: ['(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/],
usphonecode: ['+', '1', ' ', '(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/],
uszip: [/\d/, /\d/, /\d/, /\d/, /\d/],
cazip: [/[A-Z]/i, /\d/, /[A-Z]/i, ' ', /\d/, /[A-Z]/i, /\d/],
cc: [/\d/, /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/],
expdatecc: [/\d/, /\d/, '/', /\d/, /\d/],
cvc: [/\d/, /\d/, /\d/]
};
var pattern = options.mask;
options.inputElement = selector;
options.mask = patterns[options.mask] || [];
options.placeholderChar = options.placeholderChar || '#';
if (pattern == 'cazip') {
options.pipe = function (val) {
return val.toUpperCase();
};
} else if (pattern == 'email') {
options.mask = textMaskAddons.emailMask || [];
} else if (pattern == 'currency') {
options.prefix = options.prefix || '';
options.mask = textMaskAddons.createNumberMask ? textMaskAddons.createNumberMask(options) : [];
} else if (pattern == 'percentage') {
options.prefix = '';
options.suffix = '%';
options.mask = textMaskAddons.createNumberMask ? textMaskAddons.createNumberMask(options) : [];
}
if (options.autoCorrectDate) {
var autoCorrectedDatePipe = textMaskAddons.createAutoCorrectedDatePipe ? textMaskAddons.createAutoCorrectedDatePipe(options.autoCorrectDate) : null;
options.pipe = autoCorrectedDatePipe;
}
vanillaTextMask.maskInput(options);
});
}
}
/*
* Handle headroom.js
*/
}, {
key: "headroom",
value: function headroom() {
if (window.Headroom) {
$('[data-toggle="headroom"]').each(function () {
var options = $(this).data();
var headroom = new Headroom(this, options); // initialise
headroom.init();
});
}
}
/*
* Handle zxcvbn (password strength meter)
*/
}, {
key: "zxcvbn",
value: function (_zxcvbn) {
function zxcvbn() {
return _zxcvbn.apply(this, arguments);
}
zxcvbn.toString = function () {
return _zxcvbn.toString();
};
return zxcvbn;
}(function () {
if (window.zxcvbn) {
$('.form-strength-meter').each(function () {
var input = this;
var indicator = $(this).data('indicator');
var feedback = $(this).data('indicatorFeedback');
var strength = ['bg-red', 'bg-orange', 'bg-yellow', 'bg-teal', 'bg-indigo'];
$(input).on('keyup', function () {
var val = input.value;
var result = zxcvbn(val);
var indicatorWidth = "".concat((result.score + 1) / strength.length * 100, "%"); // Update the password strength meter
if (val !== '') {
$(indicator).removeClass("d-none ".concat(strength.join(' '))).addClass("".concat(strength[result.score])).css('width', indicatorWidth);
$(feedback).html("<strong>".concat(result.feedback.warning, "</strong> ").concat(result.feedback.suggestions));
} else {
$(indicator).addClass('d-none');
$(feedback).html('');
}
});
});
}
})
/*
* Handle AOS
*/
}, {
key: "aos",
value: function aos() {
if (window.AOS) {
AOS.init({
duration: 1000,
once: true
});
}
} // Events
// =============================================================
/**
* Handle prevent default & propagation
*/
}, {
key: "eventProps",
value: function eventProps() {
$('body').on('click', '.stop-propagation', function (e) {
e.stopPropagation();
}).on('click', '.prevent-default', function (e) {
e.preventDefault();
});
}
/**
* Handle window resize
*/
}, {
key: "watchMQ",
value: function watchMQ() {
var _this6 = this;
$(window).on('resize', function () {
// force close aside on toggle screen up
if (_this6.isToggleScreenUp() && $('.app-aside').hasClass('has-open') && !$('.app').hasClass('has-fullwidth')) {
_this6.hideAside();
} // handle appropriate aside by screen sizes
_this6.watchAside(); // disable transition temporarily
$('.app-aside, .page-sidebar').addClass('notransition');
setTimeout(function () {
$('.app-aside, .page-sidebar').removeClass('notransition');
}, 1);
});
}
/**
* Handle IE 11 lack render
*/
}, {
key: "watchIE",
value: function watchIE() {
if (this.isIE()) {
$('.metric').each(function () {
var height = $(this).height();
$(this).height("".concat(height, "px"));
});
}
} // Utilities
// =============================================================
/**
* Opera 8.0+
* @return {Boolean}
*/
}, {
key: "isOpera",
value: function isOpera() {
return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
}
/**
* Firefox 1.0+
* @return {Boolean}
*/
}, {
key: "isFirefox",
value: function isFirefox() {
return typeof InstallTrigger !== 'undefined';
}
/**
* Safari 3.0+ "[object HTMLElementConstructor]"
* @return {Boolean}
*/
}, {
key: "isSafari",
value: function isSafari() {
// Safari 3.0+ "[object HTMLElementConstructor]"
return /constructor/i.test(window.HTMLElement) || function (p) {
return p.toString() === '[object SafariRemoteNotification]';
}(!window['safari'] || typeof safari !== 'undefined' && safari.pushNotification);
}
/**
* Internet Explorer 6-11
* @return {Boolean}
*/
}, {
key: "isIE",
value: function isIE() {
return (
/*@cc_on!@*/
false || !!document.documentMode
);
}
/**
* Edge 20+
* @return {Boolean}
*/
}, {
key: "isEdge",
value: function isEdge() {
return !this.isIE() && !!window.StyleMedia;
}
/**
* Chrome 1+
* @return {Boolean}
*/
}, {
key: "isChrome",
value: function isChrome() {
return !!window.chrome && !!window.chrome.webstore;
}
/**
* Blink engine detection
* @return {Boolean}
*/
}, {
key: "isBlink",
value: function isBlink() {
return (this.isChrome() || this.isOpera()) && !!window.CSS;
}
/**
* Add class to body by browser name
*/
}, {
key: "browserFlagging",
value: function browserFlagging() {
if (this.isOpera()) {
$('body').addClass('opera');
}
if (this.isFirefox()) {
$('body').addClass('firefox');
}
if (this.isSafari()) {
$('body').addClass('safari');
}
if (this.isIE()) {
$('body').addClass('ie');
}
if (this.isEdge()) {
$('body').addClass('edge');
}
if (this.isChrome()) {
$('body').addClass('chrome');
}
if (this.isBlink()) {
$('body').addClass('blink');
}
}
/**
* We used diferent font-family between mac and other os
* so we need to flaggin it to avoid unconsistent line-height
*/
}, {
key: "osFlagging",
value: function osFlagging() {
// add flagging class on macos due to fonts line-height issue
if (navigator.appVersion.toLowerCase().indexOf('mac') != -1) {
$('body').addClass('macos');
}
}
/**
* Detect if current screen size wider than our toggleScreen
* refer to our media-breakpoint-up("md")
*/
}, {
key: "isToggleScreenUp",
value: function isToggleScreenUp() {
return window.matchMedia('(min-width: 768px)').matches;
}
/**
* Detect if current screen size lower than our toggleScreen
* refer to our media-breakpoint-down("md")
*/
}, {
key: "isToggleScreenDown",
value: function isToggleScreenDown() {
return window.matchMedia('(max-width: 767.98px)').matches;
}
/**
* Check the existence of an element
*/
}, {
key: "isExists",
value: function isExists(selector) {
return $(selector).length > 0;
}
/**
* Convert rgb color to hex
* Credit: https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb?rq=1
*/
}, {
key: "rgbToHex",
value: function rgbToHex(r, g, b) {
return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}
/**
* Convert hex color to rgb
* Credit: https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb?rq=1
*/
}, {
key: "hexToRgb",
value: function hexToRgb(hex) {
// Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
var regex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
hex = hex.replace(regex, function (m, r, g, b) {
return r + r + g + g + b + b;
});
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? "rgb(".concat(parseInt(result[1], 16), ", ").concat(parseInt(result[2], 16), ", ").concat(parseInt(result[3], 16), ")") : null;
}
/**
* Convert hex color to rgba
*/
}, {
key: "hexToRgba",
value: function hexToRgba(hex, alpha) {
// Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
var regex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
hex = hex.replace(regex, function (m, r, g, b) {
return r + r + g + g + b + b;
});
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? "rgba(".concat(parseInt(result[1], 16), ", ").concat(parseInt(result[2], 16), ", ").concat(parseInt(result[3], 16), ", ").concat(alpha, ")") : null;
}
}]);
return Theme;
}();
/**
* Initialize Theme as Looper,
* we can use it as global variable.
* @example
* Looper.setSkin('dark')
*/
var Looper = function () {
var Looper = new Theme(); // toggle skin thought button
$('[data-toggle="skin"]').on('click', function (e) {
e.preventDefault();
var skin = Looper.skin === 'dark' ? 'default' : 'dark';
Looper.setSkin(skin); // we need to refresh our page after change the skin
location.reload();
}).each(function () {
var isDarkSkin = Looper.skin === 'dark';
var $icon = $(this).find('.fa-moon');
if (isDarkSkin) {
$icon.addClass('far');
$icon.removeClass('fas');
}
}); // make it global
return Looper;
}();