/*!
* Your-project-name v1.0.0
* http://project-homepage.com
*
* Copyright (c) 2021 Your Company
*/
var App = (function () {
'use strict';
//Basic Config
var config = {
assetsPath: 'assets',
imgPath: 'img',
jsPath: 'js',
libsPath: 'lib',
leftSidebarSlideSpeed: 200,
leftSidebarToggleSpeed: 300,
enableLeftSidebar: true,
enableSwipe: true,
swipeTreshold: 100,
scrollTop: true,
openRightSidebarClass: 'open-right-sidebar',
openLeftSidebarClass: 'open-left-sidebar',
disabledLeftSidebarClass: 'be-left-sidebar-disabled',
offCanvasLeftSidebarClass: 'be-offcanvas-menu',
offCanvasLeftSidebarMobileClass: 'be-offcanvas-menu-sm',
topHeaderMenuClass: 'be-top-menu',
closeRsOnClickOutside: true,
removeLeftSidebarClass: 'be-nosidebar-left',
collapsibleSidebarClass: 'be-collapsible-sidebar',
collapsibleSidebarCollapsedClass: 'be-collapsible-sidebar-collapsed',
openLeftSidebarOnClick: true,
transitionClass: 'be-animate',
openSidebarDelay: 400
};
var colors = {};
var scrollers = {};
var body,
wrapper,
topNavbar,
leftSidebar,
rightSidebar,
asideDiv,
notificationsDiv,
toggleLeftSidebarButton,
openSidebar;
//Perfect scrollbar variables
var ps_be_scroller_notifications,
ps_left_sidebar,
ps_be_scroller_left_sidebar,
ps_sub_menu_scroller,
ps_chat_scroll,
ps_todo_scroll,
ps_settings_scroll,
ps_messages_scroll,
ps_aside_scroll;
//Get the template css colors into js vars
function getColor(c) {
var tmp = $("
", { class: c }).appendTo("body");
var color = tmp.css("background-color");
tmp.remove();
return color;
}
// Refresh scroller
function updateScroller(ps_object) {
if (typeof ps_object !== 'undefined') {
ps_object.update();
}
}
// Destroy scroller
function destroyScroller(ps_object) {
ps_object.destroy();
}
// Initialize scroller
function initScroller(domObject) {
if (typeof domObject[0] !== 'undefined') {
return new PerfectScrollbar(domObject[0], {
wheelPropagation: false
});
}
}
//Core private functions
function leftSidebarInit() {
var firstAnchor = $(".sidebar-elements > li > a", leftSidebar);
var anchor = $(".sidebar-elements li a", leftSidebar);
var lsc = $(".left-sidebar-scroll", leftSidebar);
var lsToggle = $(".left-sidebar-toggle", leftSidebar);
var openLeftSidebarOnClick = config.openLeftSidebarOnClick ? true : false;
// Collapsible sidebar toggle functionality
function toggleSideBar() {
var button = $(".be-toggle-left-sidebar");
button.on("click", function () {
if (wrapper.hasClass(config.collapsibleSidebarCollapsedClass)) {
wrapper.removeClass(config.collapsibleSidebarCollapsedClass);
$("li.open", leftSidebar).removeClass("open");
$("li.active", leftSidebar).parents(".parent").addClass("active open");
leftSidebar.trigger("shown.left-sidebar.collapse");
if (typeof ps_be_scroller_left_sidebar === "undefined" || !ps_be_scroller_left_sidebar || !ps_be_scroller_left_sidebar.nodeName) {
ps_be_scroller_left_sidebar = initScroller($(".be-scroller", leftSidebar));
}
destroyScroller(ps_be_scroller_left_sidebar);
// Destroy Perfect Scrollbar collapsed instance
if (typeof ps_sub_menu_scroller !== "undefined") {
destroyScroller(ps_sub_menu_scroller);
}
} else {
wrapper.addClass(config.collapsibleSidebarCollapsedClass);
$("li.active", leftSidebar).parents(".parent").removeClass("open");
$("li.open", leftSidebar).removeClass("open");
leftSidebar.trigger("hidden.left-sidebar.collapse");
}
});
}
// Tooltip sidebar funcionality
function tooltipSidebar() {
var menu = $(".sidebar-elements > li > a", leftSidebar);
for (var i = 0; i <= menu.length; i++) {
var _self = menu[i];
var title = $("> span", _self).text();
$(_self).attr({
'data-toggle': 'tooltip',
'data-placement': 'right',
'title': title
});
$(_self).tooltip({
trigger: 'manual'
});
}
menu.on('mouseenter', function () {
if (!$.isSm() && wrapper.hasClass(config.collapsibleSidebarCollapsedClass)) {
$(this).tooltip('show');
}
});
menu.on('mouseleave', function () {
$(this).tooltip('hide');
});
}
// Collapsed sidebar submenu title
function syncSubMenu(item) {
var elements;
if (typeof item !== "undefined") {
elements = item;
} else {
elements = $(".sidebar-elements > li", leftSidebar);
}
$.each(elements, function () {
var title = $(this).find("> a span").html();
var ul = $(this).find("> ul");
var subEls = $("> li", ul);
title = $('
' + title + '');
var subContainer = $('
');
if (!ul.find("> li.title").length) {
ul.prepend(title);
subEls.appendTo(subContainer.find(".content ul"));
subContainer.appendTo(ul);
}
});
}
// Return boolean whether the sidebar is collapsed or not
function isCollapsed() {
return wrapper.hasClass(config.collapsibleSidebarCollapsedClass);
}
// Return true if the collapsible left sidebar is enabled
function isCollapsible() {
return wrapper.hasClass(config.collapsibleSidebarClass);
}
// Close submenu function
function closeSubMenu(subMenu, event) {
var target = $(event.currentTarget);
var li = $(subMenu).parent();
var openChildren = $('li.open', li);
var clickOutside = !target.closest(leftSidebar).length;
var slideSpeed = config.leftSidebarSlideSpeed;
var isFirstLevel = target.parents().eq(1).hasClass('sidebar-elements');
// If left sidebar is collapsed, is not small device
// and the trigger element is first level
// or click outside the left sidebar
if (!$.isSm() && isCollapsed() && (isFirstLevel || clickOutside)) {
li.removeClass('open');
subMenu.removeClass('visible');
openChildren.removeClass('open').removeAttr('style');
} else { // If not execute classic slide interaction
subMenu.slideUp({
duration: slideSpeed, complete: function () {
li.removeClass('open');
$(this).removeAttr('style');
// Close opened child submenus
openChildren.removeClass('open').removeAttr('style');
if (wrapper.hasClass("be-fixed-sidebar") && !$.isSm()) {
updateScroller(ps_left_sidebar);
}
}
});
}
}
// Open submenu function
function openSubMenu(anchor, event) {
var _el = $(anchor);
var li = $(_el).parent();
var subMenu = $(_el).next();
var slideSpeed = config.leftSidebarSlideSpeed;
var isFirstLevel = $(event.currentTarget).parents().eq(1).hasClass('sidebar-elements');
// Get the open sub menus
var openSubMenus = li.siblings('.open');
// If there are open sub menus close them
if (openSubMenus) {
closeSubMenu($('> ul', openSubMenus), event);
}
// If left sidebar is collapsed, is not small device
// and the trigger element is first level
if (!$.isSm() && isCollapsed() && isFirstLevel) {
li.addClass('open');
subMenu.addClass('visible');
//Renew Perfect Scroller instance
if (typeof ps_sub_menu_scroller !== "undefined") {
destroyScroller(ps_sub_menu_scroller);
}
if (typeof ps_sub_menu_scroller === "undefined" || !ps_sub_menu_scroller || !ps_sub_menu_scroller.nodeName) {
ps_sub_menu_scroller = initScroller(li.find('.be-scroller'));
}
$(window).resize(function () {
waitForFinalEvent(function () {
if (!$.isXs()) {
if (typeof ps_sub_menu_scroller !== "undefined") {
updateScroller(ps_sub_menu_scroller);
}
}
}, 500, "am_check_phone_classes");
});
} else { // If not execute classic slide interaction
subMenu.slideDown({
duration: slideSpeed, complete: function () {
li.addClass('open');
$(this).removeAttr('style');
if (wrapper.hasClass("be-fixed-sidebar") && !$.isSm()) {
updateScroller(ps_left_sidebar);
}
}
});
}
}
// Execute if collapsible sidebar is enabled
if (isCollapsible()) {
/*Create sub menu elements*/
syncSubMenu();
toggleSideBar();
tooltipSidebar();
if (!openLeftSidebarOnClick) {
/*Open sub-menu on hover*/
firstAnchor.on('mouseover', function (event) {
if (isCollapsed()) {
openSubMenu(this, event);
}
});
/*Open sub-menu on click (fix for touch devices)*/
firstAnchor.on('touchstart', function (event) {
var anchor = $(this);
var li = anchor.parent();
var subMenu = anchor.next();
if (isCollapsed() && !$.isSm()) {
if (li.hasClass('open')) {
closeSubMenu(subMenu, event);
} else {
openSubMenu(this, event);
}
if ($(this).next().is('ul')) {
event.preventDefault();
}
}
});
/*Sub-menu delay on mouse leave*/
firstAnchor.on('mouseleave', function (event) {
var _self = $(this);
var _li = _self.parent();
var subMenu = _li.find('> ul');
if (!$.isSm() && isCollapsed()) {
//If mouse is over sub menu attach an additional mouseleave event to submenu
if (subMenu.length > 0) {
setTimeout(function () {
if (subMenu.is(':hover')) {
subMenu.on('mouseleave', function () {
setTimeout(function () {
if (!_self.is(':hover')) {
closeSubMenu(subMenu, event);
subMenu.off('mouseleave');
}
}, 300);
});
} else {
closeSubMenu(subMenu, event);
}
}, 300);
} else {
_li.removeClass('open');
}
}
});
}
/*Close sidebar on click outside*/
$(document).on("mousedown touchstart", function (event) {
if (!$(event.target).closest(leftSidebar).length && !$.isSm()) {
closeSubMenu($("ul.visible", leftSidebar), event);
}
});
}
/*Open sub-menu functionality*/
anchor.on("click", function (event) {
var $el = $(this), $open;
var $li = $el.parent();
var $subMenu = $el.next();
var isFirstLevel = $el.parents().eq(1).hasClass('sidebar-elements');
// Get the open menus
$open = $li.siblings(".open");
if ($li.hasClass('open')) {
closeSubMenu($subMenu, event);
} else {
openSubMenu(this, event);
}
//If current element has children stop link action
if ($el.next().is('ul')) {
event.preventDefault();
}
});
/*Calculate sidebar tree active & open classes*/
if (wrapper.hasClass(config.collapsibleSidebarCollapsedClass)) {
$("li.active", leftSidebar).parents(".parent").addClass("active");
} else {
$("li.active", leftSidebar).parents(".parent").addClass("active open");
}
/* Add classes if top menu is present */
if (topNavbar.find('.container-fluid > .navbar-collapse').length && leftSidebar.length) {
wrapper.addClass(config.offCanvasLeftSidebarClass).addClass(config.offCanvasLeftSidebarMobileClass);
wrapper.addClass(config.topHeaderMenuClass);
toggleLeftSidebarButton = $('');
$('.be-navbar-header', topNavbar).prepend(toggleLeftSidebarButton);
}
/*Scrollbar plugin init when left sidebar is fixed*/
if (wrapper.hasClass("be-fixed-sidebar")) {
if (!$.isSm() || wrapper.hasClass(config.offCanvasLeftSidebarClass)) {
if (typeof ps_left_sidebar === "undefined" || !ps_left_sidebar || !ps_left_sidebar.nodeName) {
ps_left_sidebar = initScroller(lsc);
}
}
/*Update scrollbar height on window resize*/
$(window).resize(function () {
waitForFinalEvent(function () {
if ($.isSm() && !wrapper.hasClass(config.offCanvasLeftSidebarClass)) {
destroyScroller(ps_left_sidebar);
} else {
if (lsc.hasClass('ps')) {
updateScroller(ps_left_sidebar);
} else {
if (typeof ps_left_sidebar === "undefined" || !ps_left_sidebar || !ps_left_sidebar.nodeName) {
ps_left_sidebar = initScroller(lsc);
}
}
}
}, 500, "be_update_scroller");
});
}
/*Toggle sidebar on small devices*/
lsToggle.on('click', function (e) {
var spacer = $(this).next('.left-sidebar-spacer'), toggleBtn = $(this);
toggleBtn.toggleClass('open');
spacer.slideToggle(config.leftSidebarToggleSpeed, function () {
$(this).removeAttr('style').toggleClass('open');
});
e.preventDefault();
});
/*Off canvas menu*/
function leftSidebarOffCanvas() {
/*Open Sidebar with toggle button*/
toggleLeftSidebarButton.on("click", function (e) {
if (openSidebar && body.hasClass(config.openLeftSidebarClass)) {
body.removeClass(config.openLeftSidebarClass);
sidebarDelay();
} else {
body.addClass(config.openLeftSidebarClass + " " + config.transitionClass);
openSidebar = true;
}
e.preventDefault();
});
/*Close sidebar on click outside*/
$(document).on("mousedown touchstart", function (e) {
if (!$(e.target).closest(leftSidebar).length && !$(e.target).closest(toggleLeftSidebarButton).length && body.hasClass(config.openLeftSidebarClass)) {
body.removeClass(config.openLeftSidebarClass);
sidebarDelay();
}
});
}
// Left sidebar off-canvas
if (wrapper.hasClass(config.offCanvasLeftSidebarClass)) {
leftSidebarOffCanvas();
}
}
function rightSidebarInit() {
var rsChatScrollbar = $(".be-scroller-chat", rightSidebar);
var rsTodoScrollbar = $(".be-scroller-todo", rightSidebar);
var rsSettingsScrollbar = $(".be-scroller-settings", rightSidebar);
function oSidebar() {
body.addClass(config.openRightSidebarClass + " " + config.transitionClass);
openSidebar = true;
}
function cSidebar() {
body.removeClass(config.openRightSidebarClass).addClass(config.transitionClass);
sidebarDelay();
}
if (rightSidebar.length > 0) {
/*Open-Sidebar when click on topbar button*/
$('.be-toggle-right-sidebar').on("click", function (e) {
if (openSidebar && body.hasClass(config.openRightSidebarClass)) {
cSidebar();
} else if (!openSidebar) {
oSidebar();
}
e.preventDefault();
});
/*Close sidebar on click outside*/
$(document).on("mousedown touchstart", function (e) {
if (!$(e.target).closest(rightSidebar).length && body.hasClass(config.openRightSidebarClass) && (config.closeRsOnClickOutside || $.isSm())) {
cSidebar();
}
});
}
if ((typeof ps_chat_scroll === "undefined" || !ps_chat_scroll || !ps_chat_scroll.nodeName) && rsChatScrollbar.length) {
ps_chat_scroll = initScroller(rsChatScrollbar);
}
if ((typeof ps_todo_scroll === "undefined" || !ps_todo_scroll || !ps_todo_scroll.nodeName) && rsTodoScrollbar.length) {
ps_todo_scroll = initScroller(rsTodoScrollbar);
}
if ((typeof ps_settings_scroll === "undefined" || !ps_settings_scroll || !ps_settings_scroll.nodeName) && rsSettingsScrollbar.length) {
ps_settings_scroll = initScroller(rsSettingsScrollbar);
}
/*Update scrollbar height on window resize*/
$(window).resize(function () {
waitForFinalEvent(function () {
updateScroller(ps_chat_scroll);
updateScroller(ps_todo_scroll);
updateScroller(ps_settings_scroll);
}, 500, "be_rs_update_scroller");
});
/*Update scrollbar when click on a tab*/
$('a[data-toggle="tab"]', rightSidebar).on('shown.bs.tab', function (e) {
updateScroller(ps_chat_scroll);
updateScroller(ps_todo_scroll);
updateScroller(ps_settings_scroll);
});
}
function sidebarDelay() {
openSidebar = true;
setTimeout(function () {
openSidebar = false;
}, config.openSidebarDelay);
}
function sidebarSwipe() {
/*Open sidedar on swipe*/
wrapper.swipe({
allowPageScroll: "vertical",
preventDefaultEvents: false,
fallbackToMouseEvents: false,
swipeLeft: function (e) {
if (!openSidebar && rightSidebar.length > 0) {
body.addClass(config.openRightSidebarClass + " " + config.transitionClass);
openSidebar = true;
}
},
threshold: config.swipeTreshold
});
}
function chatWidget() {
var chat = $(".be-right-sidebar .tab-chat");
var contactsEl = $(".chat-contacts", chat);
var conversationEl = $(".chat-window", chat);
var messagesContainer = $(".chat-messages", conversationEl);
var messagesList = $(".content ul", messagesContainer);
var messagesScroll = $(".be-scroller-messages", messagesContainer);
var chatInputContainer = $(".chat-input", conversationEl);
var chatInput = $("input", chatInputContainer);
var chatInputSendButton = $(".send-msg", chatInputContainer);
function openChatWindow() {
if (!chat.hasClass("chat-opened")) {
chat.addClass("chat-opened");
if (typeof ps_messages_scroll === "undefined" || !ps_messages_scroll || !ps_messages_scroll.nodeName) {
ps_messages_scroll = initScroller(messagesScroll);
}
}
}
function closeChatWindow() {
if (chat.hasClass("chat-opened")) {
chat.removeClass("chat-opened");
}
}
/*Open Conversation Window when click on chat user*/
$(".user a", contactsEl).on('click', function (e) {
openChatWindow();
e.preventDefault();
});
/*Close chat conv window*/
$(".title .return", conversationEl).on('click', function (e) {
closeChatWindow();
scrollerInit();
});
/*Send message*/
function sendMsg(msg, self) {
var $message = $('
');
if (msg != '') {
$('
' + msg + '
').appendTo($message);
$message.appendTo(messagesList);
messagesScroll.stop().animate({
'scrollTop': messagesScroll.prop("scrollHeight")
}, 900, 'swing');
updateScroller(ps_messages_scroll);
}
}
/*Send msg when click on 'send' button or press 'Enter'*/
chatInput.keypress(function (event) {
var keycode = (event.keyCode ? event.keyCode : event.which);
var msg = $(this).val();
if (keycode == '13') {
sendMsg(msg, true);
$(this).val("");
}
event.stopPropagation();
});
chatInputSendButton.on('click', function () {
var msg = chatInput.val();
sendMsg(msg, true);
chatInput.val("");
});
}
function scrollerInit() {
if (typeof ps_be_scroller_notifications === "undefined" || !ps_be_scroller_notifications || !ps_be_scroller_notifications.nodeName) {
ps_be_scroller_notifications = initScroller(notificationsDiv);
}
}
function scrollTopButton() {
var offset = 220;
var duration = 500;
var button = $('
');
button.appendTo("body");
$(window).on('scroll', function () {
if ($(this).scrollTop() > offset) {
button.fadeIn(duration);
} else {
button.fadeOut(duration);
}
});
button.on('touchstart mouseup', function (e) {
$('html, body').animate({ scrollTop: 0 }, duration);
e.preventDefault();
});
}
//Add and remove active class on left sidebar
function activeItemLeftSidebar(menu_item) {
var firstAnchor = menu_item;
var li = $(firstAnchor).parent();
var menu = $(li).parents('li');
if (!li.hasClass('active')) {
$('li.active', leftSidebar).removeClass('active');
$(menu).addClass('active');
$(li).addClass('active');
}
}
function initAsidePS() {
var pas = asideDiv;
ps_aside_scroll = initScroller(asideDiv);
$(window).resize(function () {
if ($.isSm() && !wrapper.hasClass(config.offCanvasLeftSidebarClass)) {
destroyScroller(ps_aside_scroll);
} else {
if (pas.hasClass('ps')) {
updateScroller(ps_aside_scroll);
} else {
if (typeof ps_aside_scroll === "undefined" || !ps_aside_scroll || !ps_aside_scroll.nodeName) {
ps_aside_scroll = initScroller(asideDiv);
}
}
}
});
}
//Wait for final event on window resize
var waitForFinalEvent = (function () {
var timers = {};
return function (callback, ms, uniqueId) {
if (!uniqueId) {
uniqueId = "x1x2x3x4";
}
if (timers[uniqueId]) {
clearTimeout(timers[uniqueId]);
}
timers[uniqueId] = setTimeout(callback, ms);
};
})();
return {
//General data
conf: config,
color: colors,
scroller: scrollers,
//Init function
init: function (options) {
//Get the main elements when document is ready
body = $("body");
wrapper = $(".be-wrapper");
topNavbar = $('.be-top-header', wrapper);
leftSidebar = $(".be-left-sidebar", wrapper);
rightSidebar = $(".be-right-sidebar", wrapper);
asideDiv = $(".be-scroller-aside", wrapper);
toggleLeftSidebarButton = $('.be-toggle-left-sidebar', topNavbar);
notificationsDiv = $(".be-scroller-notifications", topNavbar);
openSidebar = false;
//Extends basic config with options
$.extend(config, options);
/*FastClick on mobile*/
FastClick.attach(document.body);
/*Left Sidebar*/
if (config.enableLeftSidebar) {
leftSidebarInit();
} else {
wrapper.addClass(config.disabledLeftSidebarClass);
}
/*Right Sidebar*/
if (rightSidebar.length) {
rightSidebarInit();
chatWidget();
}
/*Sidebars Swipe*/
if (config.enableSwipe) {
sidebarSwipe();
}
/*Scroll Top button*/
if (config.scrollTop) {
scrollTopButton();
}
/*Page Aside*/
if (asideDiv.length) {
initAsidePS();
}
/*Scroller plugin init*/
if (notificationsDiv.length) {
scrollerInit();
}
/*Get colors*/
colors.primary = getColor('clr-primary');
colors.success = getColor('clr-success');
colors.warning = getColor('clr-warning');
colors.danger = getColor('clr-danger');
colors.grey = getColor('clr-grey');
/*Get scrollers*/
scrollers.be_scroller_notifications = ps_be_scroller_notifications;
scrollers.left_sidebar_scroll = ps_left_sidebar;
scrollers.be_left_sidebar_scroll = ps_be_scroller_left_sidebar;
scrollers.sub_menu_scroll = ps_sub_menu_scroller;
scrollers.chat_scroll = ps_chat_scroll;
scrollers.todo_scroll = ps_todo_scroll;
scrollers.settings_scroll = ps_settings_scroll;
scrollers.messages_scroll = ps_messages_scroll;
scrollers.aside_scroll = ps_aside_scroll;
scrollers.updateScroller = updateScroller;
scrollers.destroyScroller = destroyScroller;
scrollers.initScroller = initScroller;
/*Bind plugins on hidden elements*/
/*Dropdown shown event*/
$('.be-icons-nav .dropdown').on('shown.bs.dropdown', function () {
updateScroller(ps_be_scroller_notifications);
});
/*Tooltips*/
$('[data-toggle="tooltip"]').tooltip();
/*Popover*/
$('[data-toggle="popover"]').popover();
/*Bootstrap modal scroll top fix*/
$('.modal').on('show.bs.modal', function () {
$("html").addClass('be-modal-open');
});
$('.modal').on('hidden.bs.modal', function () {
$("html").removeClass('be-modal-open');
});
/*Fixes the Sweetalert gap in the top header on boxed layout*/
if (typeof Swal == 'function' && wrapper.hasClass('be-boxed-layout')) {
var observer = new MutationObserver(function (mutationsList, observer) {
mutationsList.forEach(function (mutation) {
if (mutation.type == 'attributes' && mutation.attributeName == 'style') {
if (document.body.className.indexOf('swal2-shown') > 0) {
topNavbar.css({ marginLeft: 'calc(-' + document.body.style.paddingRight + ' / 2)' });
} else {
topNavbar.css({ marginLeft: '0' });
}
}
});
});
observer.observe(document.body, { attributes: true });
}
},
//Methods
activeItemLeftSidebar: activeItemLeftSidebar
};
})();
function FastClick(o, e) { "use strict"; var t; if (e = e || {}, this.trackingClick = !1, this.trackingClickStart = 0, this.targetElement = null, this.touchStartX = 0, this.touchStartY = 0, this.lastTouchIdentifier = 0, this.touchBoundary = e.touchBoundary || 10, this.layer = o, this.tapDelay = e.tapDelay || 200, !FastClick.notNeeded(o)) { for (var n = ["onMouse", "onClick", "onTouchStart", "onTouchMove", "onTouchEnd", "onTouchCancel"], i = this, r = 0, s = n.length; r < s; r++)i[n[r]] = c(i[n[r]], i); deviceIsAndroid && (o.addEventListener("mouseover", this.onMouse, !0), o.addEventListener("mousedown", this.onMouse, !0), o.addEventListener("mouseup", this.onMouse, !0)), o.addEventListener("click", this.onClick, !0), o.addEventListener("touchstart", this.onTouchStart, !1), o.addEventListener("touchmove", this.onTouchMove, !1), o.addEventListener("touchend", this.onTouchEnd, !1), o.addEventListener("touchcancel", this.onTouchCancel, !1), Event.prototype.stopImmediatePropagation || (o.removeEventListener = function (e, t, n) { var i = Node.prototype.removeEventListener; "click" === e ? i.call(o, e, t.hijacked || t, n) : i.call(o, e, t, n) }, o.addEventListener = function (e, t, n) { var i = Node.prototype.addEventListener; "click" === e ? i.call(o, e, t.hijacked || (t.hijacked = function (e) { e.propagationStopped || t(e) }), n) : i.call(o, e, t, n) }), "function" == typeof o.onclick && (t = o.onclick, o.addEventListener("click", function (e) { t(e) }, !1), o.onclick = null) } function c(e, t) { return function () { return e.apply(t, arguments) } } } var deviceIsAndroid = 0 < navigator.userAgent.indexOf("Android"), deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent), deviceIsIOS4 = deviceIsIOS && /OS 4_\d(_\d)?/.test(navigator.userAgent), deviceIsIOSWithBadTarget = deviceIsIOS && /OS ([6-9]|\d{2})_\d/.test(navigator.userAgent), deviceIsBlackBerry10 = 0 < navigator.userAgent.indexOf("BB10"); FastClick.prototype.needsClick = function (e) { "use strict"; switch (e.nodeName.toLowerCase()) { case "button": case "select": case "textarea": if (e.disabled) return !0; break; case "input": if (deviceIsIOS && "file" === e.type || e.disabled) return !0; break; case "label": case "video": return !0 }return /\bneedsclick\b/.test(e.className) }, FastClick.prototype.needsFocus = function (e) { "use strict"; switch (e.nodeName.toLowerCase()) { case "textarea": return !0; case "select": return !deviceIsAndroid; case "input": switch (e.type) { case "button": case "checkbox": case "file": case "image": case "radio": case "submit": return !1 }return !e.disabled && !e.readOnly; default: return /\bneedsfocus\b/.test(e.className) } }, FastClick.prototype.sendClick = function (e, t) { "use strict"; var n, i, o, r; document.activeElement && document.activeElement !== e && document.activeElement.blur(), r = t.changedTouches[0], (o = document.createEvent("MouseEvents")).initMouseEvent("mousedown", !0, !0, window, 1, r.screenX, r.screenY, r.clientX, r.clientY, !1, !1, !1, !1, 0, null), o.forwardedTouchEvent = !0, e.dispatchEvent(o), (i = document.createEvent("MouseEvents")).initMouseEvent("mouseup", !0, !0, window, 1, r.screenX, r.screenY, r.clientX, r.clientY, !1, !1, !1, !1, 0, null), i.forwardedTouchEvent = !0, e.dispatchEvent(i), (n = document.createEvent("MouseEvents")).initMouseEvent(this.determineEventType(e), !0, !0, window, 1, r.screenX, r.screenY, r.clientX, r.clientY, !1, !1, !1, !1, 0, null), n.forwardedTouchEvent = !0, e.dispatchEvent(n) }, FastClick.prototype.determineEventType = function (e) { "use strict"; return deviceIsAndroid && "select" === e.tagName.toLowerCase() ? "mousedown" : "click" }, FastClick.prototype.focus = function (e) { "use strict"; var t; deviceIsIOS && e.setSelectionRange && 0 !== e.type.indexOf("date") && "time" !== e.type ? (t = e.value.length, e.setSelectionRange(t, t)) : e.focus() }, FastClick.prototype.updateScrollParent = function (e) { "use strict"; var t, n; if (!(t = e.fastClickScrollParent) || !t.contains(e)) { n = e; do { if (n.scrollHeight > n.offsetHeight) { t = n, e.fastClickScrollParent = n; break } n = n.parentElement } while (n) } t && (t.fastClickLastScrollTop = t.scrollTop) }, FastClick.prototype.getTargetElementFromEventTarget = function (e) { "use strict"; return e.nodeType === Node.TEXT_NODE ? e.parentNode : e }, FastClick.prototype.onTouchStart = function (e) { "use strict"; var t, n, i; if (1 < e.targetTouches.length) return !0; if (t = this.getTargetElementFromEventTarget(e.target), n = e.targetTouches[0], deviceIsIOS) { if ((i = window.getSelection()).rangeCount && !i.isCollapsed) return !0; if (!deviceIsIOS4) { if (n.identifier && n.identifier === this.lastTouchIdentifier) return e.preventDefault(), !1; this.lastTouchIdentifier = n.identifier, this.updateScrollParent(t) } } return this.trackingClick = !0, this.trackingClickStart = e.timeStamp, this.targetElement = t, this.touchStartX = n.pageX, this.touchStartY = n.pageY, e.timeStamp - this.lastClickTime < this.tapDelay && e.preventDefault(), !0 }, FastClick.prototype.touchHasMoved = function (e) { "use strict"; var t = e.changedTouches[0], n = this.touchBoundary; return Math.abs(t.pageX - this.touchStartX) > n || Math.abs(t.pageY - this.touchStartY) > n }, FastClick.prototype.onTouchMove = function (e) { "use strict"; return this.trackingClick && (this.targetElement === this.getTargetElementFromEventTarget(e.target) && !this.touchHasMoved(e) || (this.trackingClick = !1, this.targetElement = null)), !0 }, FastClick.prototype.findControl = function (e) { "use strict"; return void 0 !== e.control ? e.control : e.htmlFor ? document.getElementById(e.htmlFor) : e.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea") }, FastClick.prototype.onTouchEnd = function (e) { "use strict"; var t, n, i, o, r, s = this.targetElement; if (!this.trackingClick) return !0; if (e.timeStamp - this.lastClickTime < this.tapDelay) return this.cancelNextClick = !0; if (this.cancelNextClick = !1, this.lastClickTime = e.timeStamp, n = this.trackingClickStart, this.trackingClick = !1, this.trackingClickStart = 0, deviceIsIOSWithBadTarget && (r = e.changedTouches[0], (s = document.elementFromPoint(r.pageX - window.pageXOffset, r.pageY - window.pageYOffset) || s).fastClickScrollParent = this.targetElement.fastClickScrollParent), "label" === (i = s.tagName.toLowerCase())) { if (t = this.findControl(s)) { if (this.focus(s), deviceIsAndroid) return !1; s = t } } else if (this.needsFocus(s)) return 100 < e.timeStamp - n || deviceIsIOS && window.top !== window && "input" === i ? this.targetElement = null : (this.focus(s), this.sendClick(s, e), deviceIsIOS && "select" === i || (this.targetElement = null, e.preventDefault())), !1; return !(!deviceIsIOS || deviceIsIOS4 || !(o = s.fastClickScrollParent) || o.fastClickLastScrollTop === o.scrollTop) || (this.needsClick(s) || (e.preventDefault(), this.sendClick(s, e)), !1) }, FastClick.prototype.onTouchCancel = function () { "use strict"; this.trackingClick = !1, this.targetElement = null }, FastClick.prototype.onMouse = function (e) { "use strict"; return !this.targetElement || (!!e.forwardedTouchEvent || (!e.cancelable || (!(!this.needsClick(this.targetElement) || this.cancelNextClick) || (e.stopImmediatePropagation ? e.stopImmediatePropagation() : e.propagationStopped = !0, e.stopPropagation(), e.preventDefault(), !1)))) }, FastClick.prototype.onClick = function (e) { "use strict"; var t; return this.trackingClick ? (this.targetElement = null, !(this.trackingClick = !1)) : "submit" === e.target.type && 0 === e.detail || ((t = this.onMouse(e)) || (this.targetElement = null), t) }, FastClick.prototype.destroy = function () { "use strict"; var e = this.layer; deviceIsAndroid && (e.removeEventListener("mouseover", this.onMouse, !0), e.removeEventListener("mousedown", this.onMouse, !0), e.removeEventListener("mouseup", this.onMouse, !0)), e.removeEventListener("click", this.onClick, !0), e.removeEventListener("touchstart", this.onTouchStart, !1), e.removeEventListener("touchmove", this.onTouchMove, !1), e.removeEventListener("touchend", this.onTouchEnd, !1), e.removeEventListener("touchcancel", this.onTouchCancel, !1) }, FastClick.notNeeded = function (e) { "use strict"; var t, n, i; if (void 0 === window.ontouchstart) return !0; if (n = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [, 0])[1]) { if (!deviceIsAndroid) return !0; if (t = document.querySelector("meta[name=viewport]")) { if (-1 !== t.content.indexOf("user-scalable=no")) return !0; if (31 < n && document.documentElement.scrollWidth <= window.outerWidth) return !0 } } if (deviceIsBlackBerry10 && 10 <= (i = navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/))[1] && 3 <= i[2] && (t = document.querySelector("meta[name=viewport]"))) { if (-1 !== t.content.indexOf("user-scalable=no")) return !0; if (document.documentElement.scrollWidth <= window.outerWidth) return !0 } return "none" === e.style.msTouchAction }, FastClick.attach = function (e, t) { "use strict"; return new FastClick(e, t) }, "function" == typeof define && "object" == typeof define.amd && define.amd ? define(function () { "use strict"; return FastClick }) : "undefined" != typeof module && module.exports ? (module.exports = FastClick.attach, module.exports.FastClick = FastClick) : window.FastClick = FastClick;
/*!
* @fileOverview TouchSwipe - jQuery Plugin
* @version 1.6.18
*
* @author Matt Bryson http://www.github.com/mattbryson
* @see https://github.com/mattbryson/TouchSwipe-Jquery-Plugin
* @see http://labs.rampinteractive.co.uk/touchSwipe/
* @see http://plugins.jquery.com/project/touchSwipe
* @license
* Copyright (c) 2010-2015 Matt Bryson
* Dual licensed under the MIT or GPL Version 2 licenses.
*
*/
!function (factory) { "function" == typeof define && define.amd && define.amd.jQuery ? define(["jquery"], factory) : factory("undefined" != typeof module && module.exports ? require("jquery") : jQuery) }(function ($) { "use strict"; function init(options) { return !options || void 0 !== options.allowPageScroll || void 0 === options.swipe && void 0 === options.swipeStatus || (options.allowPageScroll = NONE), void 0 !== options.click && void 0 === options.tap && (options.tap = options.click), options || (options = {}), options = $.extend({}, $.fn.swipe.defaults, options), this.each(function () { var $this = $(this), plugin = $this.data(PLUGIN_NS); plugin || (plugin = new TouchSwipe(this, options), $this.data(PLUGIN_NS, plugin)) }) } function TouchSwipe(element, options) { function touchStart(jqEvent) { if (!(getTouchInProgress() || $(jqEvent.target).closest(options.excludedElements, $element).length > 0)) { var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent; if (!event.pointerType || "mouse" != event.pointerType || 0 != options.fallbackToMouseEvents) { var ret, touches = event.touches, evt = touches ? touches[0] : event; return phase = PHASE_START, touches ? fingerCount = touches.length : options.preventDefaultEvents !== !1 && jqEvent.preventDefault(), distance = 0, direction = null, currentDirection = null, pinchDirection = null, duration = 0, startTouchesDistance = 0, endTouchesDistance = 0, pinchZoom = 1, pinchDistance = 0, maximumsMap = createMaximumsData(), cancelMultiFingerRelease(), createFingerData(0, evt), !touches || fingerCount === options.fingers || options.fingers === ALL_FINGERS || hasPinches() ? (startTime = getTimeStamp(), 2 == fingerCount && (createFingerData(1, touches[1]), startTouchesDistance = endTouchesDistance = calculateTouchesDistance(fingerData[0].start, fingerData[1].start)), (options.swipeStatus || options.pinchStatus) && (ret = triggerHandler(event, phase))) : ret = !1, ret === !1 ? (phase = PHASE_CANCEL, triggerHandler(event, phase), ret) : (options.hold && (holdTimeout = setTimeout($.proxy(function () { $element.trigger("hold", [event.target]), options.hold && (ret = options.hold.call($element, event, event.target)) }, this), options.longTapThreshold)), setTouchInProgress(!0), null) } } } function touchMove(jqEvent) { var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent; if (phase !== PHASE_END && phase !== PHASE_CANCEL && !inMultiFingerRelease()) { var ret, touches = event.touches, evt = touches ? touches[0] : event, currentFinger = updateFingerData(evt); if (endTime = getTimeStamp(), touches && (fingerCount = touches.length), options.hold && clearTimeout(holdTimeout), phase = PHASE_MOVE, 2 == fingerCount && (0 == startTouchesDistance ? (createFingerData(1, touches[1]), startTouchesDistance = endTouchesDistance = calculateTouchesDistance(fingerData[0].start, fingerData[1].start)) : (updateFingerData(touches[1]), endTouchesDistance = calculateTouchesDistance(fingerData[0].end, fingerData[1].end), pinchDirection = calculatePinchDirection(fingerData[0].end, fingerData[1].end)), pinchZoom = calculatePinchZoom(startTouchesDistance, endTouchesDistance), pinchDistance = Math.abs(startTouchesDistance - endTouchesDistance)), fingerCount === options.fingers || options.fingers === ALL_FINGERS || !touches || hasPinches()) { if (direction = calculateDirection(currentFinger.start, currentFinger.end), currentDirection = calculateDirection(currentFinger.last, currentFinger.end), validateDefaultEvent(jqEvent, currentDirection), distance = calculateDistance(currentFinger.start, currentFinger.end), duration = calculateDuration(), setMaxDistance(direction, distance), ret = triggerHandler(event, phase), !options.triggerOnTouchEnd || options.triggerOnTouchLeave) { var inBounds = !0; if (options.triggerOnTouchLeave) { var bounds = getbounds(this); inBounds = isInBounds(currentFinger.end, bounds) } !options.triggerOnTouchEnd && inBounds ? phase = getNextPhase(PHASE_MOVE) : options.triggerOnTouchLeave && !inBounds && (phase = getNextPhase(PHASE_END)), phase != PHASE_CANCEL && phase != PHASE_END || triggerHandler(event, phase) } } else phase = PHASE_CANCEL, triggerHandler(event, phase); ret === !1 && (phase = PHASE_CANCEL, triggerHandler(event, phase)) } } function touchEnd(jqEvent) { var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent, touches = event.touches; if (touches) { if (touches.length && !inMultiFingerRelease()) return startMultiFingerRelease(event), !0; if (touches.length && inMultiFingerRelease()) return !0 } return inMultiFingerRelease() && (fingerCount = fingerCountAtRelease), endTime = getTimeStamp(), duration = calculateDuration(), didSwipeBackToCancel() || !validateSwipeDistance() ? (phase = PHASE_CANCEL, triggerHandler(event, phase)) : options.triggerOnTouchEnd || options.triggerOnTouchEnd === !1 && phase === PHASE_MOVE ? (options.preventDefaultEvents !== !1 && jqEvent.cancelable !== !1 && jqEvent.preventDefault(), phase = PHASE_END, triggerHandler(event, phase)) : !options.triggerOnTouchEnd && hasTap() ? (phase = PHASE_END, triggerHandlerForGesture(event, phase, TAP)) : phase === PHASE_MOVE && (phase = PHASE_CANCEL, triggerHandler(event, phase)), setTouchInProgress(!1), null } function touchCancel() { fingerCount = 0, endTime = 0, startTime = 0, startTouchesDistance = 0, endTouchesDistance = 0, pinchZoom = 1, cancelMultiFingerRelease(), setTouchInProgress(!1) } function touchLeave(jqEvent) { var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent; options.triggerOnTouchLeave && (phase = getNextPhase(PHASE_END), triggerHandler(event, phase)) } function removeListeners() { $element.off(START_EV, touchStart), $element.off(CANCEL_EV, touchCancel), $element.off(MOVE_EV, touchMove), $element.off(END_EV, touchEnd), LEAVE_EV && $element.off(LEAVE_EV, touchLeave), setTouchInProgress(!1) } function getNextPhase(currentPhase) { var nextPhase = currentPhase, validTime = validateSwipeTime(), validDistance = validateSwipeDistance(), didCancel = didSwipeBackToCancel(); return !validTime || didCancel ? nextPhase = PHASE_CANCEL : !validDistance || currentPhase != PHASE_MOVE || options.triggerOnTouchEnd && !options.triggerOnTouchLeave ? !validDistance && currentPhase == PHASE_END && options.triggerOnTouchLeave && (nextPhase = PHASE_CANCEL) : nextPhase = PHASE_END, nextPhase } function triggerHandler(event, phase) { var ret, touches = event.touches; return (didSwipe() || hasSwipes()) && (ret = triggerHandlerForGesture(event, phase, SWIPE)), (didPinch() || hasPinches()) && ret !== !1 && (ret = triggerHandlerForGesture(event, phase, PINCH)), didDoubleTap() && ret !== !1 ? ret = triggerHandlerForGesture(event, phase, DOUBLE_TAP) : didLongTap() && ret !== !1 ? ret = triggerHandlerForGesture(event, phase, LONG_TAP) : didTap() && ret !== !1 && (ret = triggerHandlerForGesture(event, phase, TAP)), phase === PHASE_CANCEL && touchCancel(event), phase === PHASE_END && (touches ? touches.length || touchCancel(event) : touchCancel(event)), ret } function triggerHandlerForGesture(event, phase, gesture) { var ret; if (gesture == SWIPE) { if ($element.trigger("swipeStatus", [phase, direction || null, distance || 0, duration || 0, fingerCount, fingerData, currentDirection]), options.swipeStatus && (ret = options.swipeStatus.call($element, event, phase, direction || null, distance || 0, duration || 0, fingerCount, fingerData, currentDirection), ret === !1)) return !1; if (phase == PHASE_END && validateSwipe()) { if (clearTimeout(singleTapTimeout), clearTimeout(holdTimeout), $element.trigger("swipe", [direction, distance, duration, fingerCount, fingerData, currentDirection]), options.swipe && (ret = options.swipe.call($element, event, direction, distance, duration, fingerCount, fingerData, currentDirection), ret === !1)) return !1; switch (direction) { case LEFT: $element.trigger("swipeLeft", [direction, distance, duration, fingerCount, fingerData, currentDirection]), options.swipeLeft && (ret = options.swipeLeft.call($element, event, direction, distance, duration, fingerCount, fingerData, currentDirection)); break; case RIGHT: $element.trigger("swipeRight", [direction, distance, duration, fingerCount, fingerData, currentDirection]), options.swipeRight && (ret = options.swipeRight.call($element, event, direction, distance, duration, fingerCount, fingerData, currentDirection)); break; case UP: $element.trigger("swipeUp", [direction, distance, duration, fingerCount, fingerData, currentDirection]), options.swipeUp && (ret = options.swipeUp.call($element, event, direction, distance, duration, fingerCount, fingerData, currentDirection)); break; case DOWN: $element.trigger("swipeDown", [direction, distance, duration, fingerCount, fingerData, currentDirection]), options.swipeDown && (ret = options.swipeDown.call($element, event, direction, distance, duration, fingerCount, fingerData, currentDirection)) } } } if (gesture == PINCH) { if ($element.trigger("pinchStatus", [phase, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]), options.pinchStatus && (ret = options.pinchStatus.call($element, event, phase, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData), ret === !1)) return !1; if (phase == PHASE_END && validatePinch()) switch (pinchDirection) { case IN: $element.trigger("pinchIn", [pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]), options.pinchIn && (ret = options.pinchIn.call($element, event, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData)); break; case OUT: $element.trigger("pinchOut", [pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]), options.pinchOut && (ret = options.pinchOut.call($element, event, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData)) } } return gesture == TAP ? phase !== PHASE_CANCEL && phase !== PHASE_END || (clearTimeout(singleTapTimeout), clearTimeout(holdTimeout), hasDoubleTap() && !inDoubleTap() ? (doubleTapStartTime = getTimeStamp(), singleTapTimeout = setTimeout($.proxy(function () { doubleTapStartTime = null, $element.trigger("tap", [event.target]), options.tap && (ret = options.tap.call($element, event, event.target)) }, this), options.doubleTapThreshold)) : (doubleTapStartTime = null, $element.trigger("tap", [event.target]), options.tap && (ret = options.tap.call($element, event, event.target)))) : gesture == DOUBLE_TAP ? phase !== PHASE_CANCEL && phase !== PHASE_END || (clearTimeout(singleTapTimeout), clearTimeout(holdTimeout), doubleTapStartTime = null, $element.trigger("doubletap", [event.target]), options.doubleTap && (ret = options.doubleTap.call($element, event, event.target))) : gesture == LONG_TAP && (phase !== PHASE_CANCEL && phase !== PHASE_END || (clearTimeout(singleTapTimeout), doubleTapStartTime = null, $element.trigger("longtap", [event.target]), options.longTap && (ret = options.longTap.call($element, event, event.target)))), ret } function validateSwipeDistance() { var valid = !0; return null !== options.threshold && (valid = distance >= options.threshold), valid } function didSwipeBackToCancel() { var cancelled = !1; return null !== options.cancelThreshold && null !== direction && (cancelled = getMaxDistance(direction) - distance >= options.cancelThreshold), cancelled } function validatePinchDistance() { return null !== options.pinchThreshold ? pinchDistance >= options.pinchThreshold : !0 } function validateSwipeTime() { var result; return result = options.maxTimeThreshold ? !(duration >= options.maxTimeThreshold) : !0 } function validateDefaultEvent(jqEvent, direction) { if (options.preventDefaultEvents !== !1) if (options.allowPageScroll === NONE) jqEvent.preventDefault(); else { var auto = options.allowPageScroll === AUTO; switch (direction) { case LEFT: (options.swipeLeft && auto || !auto && options.allowPageScroll != HORIZONTAL) && jqEvent.preventDefault(); break; case RIGHT: (options.swipeRight && auto || !auto && options.allowPageScroll != HORIZONTAL) && jqEvent.preventDefault(); break; case UP: (options.swipeUp && auto || !auto && options.allowPageScroll != VERTICAL) && jqEvent.preventDefault(); break; case DOWN: (options.swipeDown && auto || !auto && options.allowPageScroll != VERTICAL) && jqEvent.preventDefault(); break; case NONE: } } } function validatePinch() { var hasCorrectFingerCount = validateFingers(), hasEndPoint = validateEndPoint(), hasCorrectDistance = validatePinchDistance(); return hasCorrectFingerCount && hasEndPoint && hasCorrectDistance } function hasPinches() { return !!(options.pinchStatus || options.pinchIn || options.pinchOut) } function didPinch() { return !(!validatePinch() || !hasPinches()) } function validateSwipe() { var hasValidTime = validateSwipeTime(), hasValidDistance = validateSwipeDistance(), hasCorrectFingerCount = validateFingers(), hasEndPoint = validateEndPoint(), didCancel = didSwipeBackToCancel(), valid = !didCancel && hasEndPoint && hasCorrectFingerCount && hasValidDistance && hasValidTime; return valid } function hasSwipes() { return !!(options.swipe || options.swipeStatus || options.swipeLeft || options.swipeRight || options.swipeUp || options.swipeDown) } function didSwipe() { return !(!validateSwipe() || !hasSwipes()) } function validateFingers() { return fingerCount === options.fingers || options.fingers === ALL_FINGERS || !SUPPORTS_TOUCH } function validateEndPoint() { return 0 !== fingerData[0].end.x } function hasTap() { return !!options.tap } function hasDoubleTap() { return !!options.doubleTap } function hasLongTap() { return !!options.longTap } function validateDoubleTap() { if (null == doubleTapStartTime) return !1; var now = getTimeStamp(); return hasDoubleTap() && now - doubleTapStartTime <= options.doubleTapThreshold } function inDoubleTap() { return validateDoubleTap() } function validateTap() { return (1 === fingerCount || !SUPPORTS_TOUCH) && (isNaN(distance) || distance < options.threshold) } function validateLongTap() { return duration > options.longTapThreshold && DOUBLE_TAP_THRESHOLD > distance } function didTap() { return !(!validateTap() || !hasTap()) } function didDoubleTap() { return !(!validateDoubleTap() || !hasDoubleTap()) } function didLongTap() { return !(!validateLongTap() || !hasLongTap()) } function startMultiFingerRelease(event) { previousTouchEndTime = getTimeStamp(), fingerCountAtRelease = event.touches.length + 1 } function cancelMultiFingerRelease() { previousTouchEndTime = 0, fingerCountAtRelease = 0 } function inMultiFingerRelease() { var withinThreshold = !1; if (previousTouchEndTime) { var diff = getTimeStamp() - previousTouchEndTime; diff <= options.fingerReleaseThreshold && (withinThreshold = !0) } return withinThreshold } function getTouchInProgress() { return !($element.data(PLUGIN_NS + "_intouch") !== !0) } function setTouchInProgress(val) { $element && (val === !0 ? ($element.on(MOVE_EV, touchMove), $element.on(END_EV, touchEnd), LEAVE_EV && $element.on(LEAVE_EV, touchLeave)) : ($element.off(MOVE_EV, touchMove, !1), $element.off(END_EV, touchEnd, !1), LEAVE_EV && $element.off(LEAVE_EV, touchLeave, !1)), $element.data(PLUGIN_NS + "_intouch", val === !0)) } function createFingerData(id, evt) { var f = { start: { x: 0, y: 0 }, last: { x: 0, y: 0 }, end: { x: 0, y: 0 } }; return f.start.x = f.last.x = f.end.x = evt.pageX || evt.clientX, f.start.y = f.last.y = f.end.y = evt.pageY || evt.clientY, fingerData[id] = f, f } function updateFingerData(evt) { var id = void 0 !== evt.identifier ? evt.identifier : 0, f = getFingerData(id); return null === f && (f = createFingerData(id, evt)), f.last.x = f.end.x, f.last.y = f.end.y, f.end.x = evt.pageX || evt.clientX, f.end.y = evt.pageY || evt.clientY, f } function getFingerData(id) { return fingerData[id] || null } function setMaxDistance(direction, distance) { direction != NONE && (distance = Math.max(distance, getMaxDistance(direction)), maximumsMap[direction].distance = distance) } function getMaxDistance(direction) { return maximumsMap[direction] ? maximumsMap[direction].distance : void 0 } function createMaximumsData() { var maxData = {}; return maxData[LEFT] = createMaximumVO(LEFT), maxData[RIGHT] = createMaximumVO(RIGHT), maxData[UP] = createMaximumVO(UP), maxData[DOWN] = createMaximumVO(DOWN), maxData } function createMaximumVO(dir) { return { direction: dir, distance: 0 } } function calculateDuration() { return endTime - startTime } function calculateTouchesDistance(startPoint, endPoint) { var diffX = Math.abs(startPoint.x - endPoint.x), diffY = Math.abs(startPoint.y - endPoint.y); return Math.round(Math.sqrt(diffX * diffX + diffY * diffY)) } function calculatePinchZoom(startDistance, endDistance) { var percent = endDistance / startDistance * 1; return percent.toFixed(2) } function calculatePinchDirection() { return 1 > pinchZoom ? OUT : IN } function calculateDistance(startPoint, endPoint) { return Math.round(Math.sqrt(Math.pow(endPoint.x - startPoint.x, 2) + Math.pow(endPoint.y - startPoint.y, 2))) } function calculateAngle(startPoint, endPoint) { var x = startPoint.x - endPoint.x, y = endPoint.y - startPoint.y, r = Math.atan2(y, x), angle = Math.round(180 * r / Math.PI); return 0 > angle && (angle = 360 - Math.abs(angle)), angle } function calculateDirection(startPoint, endPoint) { if (comparePoints(startPoint, endPoint)) return NONE; var angle = calculateAngle(startPoint, endPoint); return 45 >= angle && angle >= 0 ? LEFT : 360 >= angle && angle >= 315 ? LEFT : angle >= 135 && 225 >= angle ? RIGHT : angle > 45 && 135 > angle ? DOWN : UP } function getTimeStamp() { var now = new Date; return now.getTime() } function getbounds(el) { el = $(el); var offset = el.offset(), bounds = { left: offset.left, right: offset.left + el.outerWidth(), top: offset.top, bottom: offset.top + el.outerHeight() }; return bounds } function isInBounds(point, bounds) { return point.x > bounds.left && point.x < bounds.right && point.y > bounds.top && point.y < bounds.bottom } function comparePoints(pointA, pointB) { return pointA.x == pointB.x && pointA.y == pointB.y } var options = $.extend({}, options), useTouchEvents = SUPPORTS_TOUCH || SUPPORTS_POINTER || !options.fallbackToMouseEvents, START_EV = useTouchEvents ? SUPPORTS_POINTER ? SUPPORTS_POINTER_IE10 ? "MSPointerDown" : "pointerdown" : "touchstart" : "mousedown", MOVE_EV = useTouchEvents ? SUPPORTS_POINTER ? SUPPORTS_POINTER_IE10 ? "MSPointerMove" : "pointermove" : "touchmove" : "mousemove", END_EV = useTouchEvents ? SUPPORTS_POINTER ? SUPPORTS_POINTER_IE10 ? "MSPointerUp" : "pointerup" : "touchend" : "mouseup", LEAVE_EV = useTouchEvents ? SUPPORTS_POINTER ? "mouseleave" : null : "mouseleave", CANCEL_EV = SUPPORTS_POINTER ? SUPPORTS_POINTER_IE10 ? "MSPointerCancel" : "pointercancel" : "touchcancel", distance = 0, direction = null, currentDirection = null, duration = 0, startTouchesDistance = 0, endTouchesDistance = 0, pinchZoom = 1, pinchDistance = 0, pinchDirection = 0, maximumsMap = null, $element = $(element), phase = "start", fingerCount = 0, fingerData = {}, startTime = 0, endTime = 0, previousTouchEndTime = 0, fingerCountAtRelease = 0, doubleTapStartTime = 0, singleTapTimeout = null, holdTimeout = null; try { $element.on(START_EV, touchStart), $element.on(CANCEL_EV, touchCancel) } catch (e) { $.error("events not supported " + START_EV + "," + CANCEL_EV + " on jQuery.swipe") } this.enable = function () { return this.disable(), $element.on(START_EV, touchStart), $element.on(CANCEL_EV, touchCancel), $element }, this.disable = function () { return removeListeners(), $element }, this.destroy = function () { removeListeners(), $element.data(PLUGIN_NS, null), $element = null }, this.option = function (property, value) { if ("object" == typeof property) options = $.extend(options, property); else if (void 0 !== options[property]) { if (void 0 === value) return options[property]; options[property] = value } else { if (!property) return options; $.error("Option " + property + " does not exist on jQuery.swipe.options") } return null } } var VERSION = "1.6.18", LEFT = "left", RIGHT = "right", UP = "up", DOWN = "down", IN = "in", OUT = "out", NONE = "none", AUTO = "auto", SWIPE = "swipe", PINCH = "pinch", TAP = "tap", DOUBLE_TAP = "doubletap", LONG_TAP = "longtap", HORIZONTAL = "horizontal", VERTICAL = "vertical", ALL_FINGERS = "all", DOUBLE_TAP_THRESHOLD = 10, PHASE_START = "start", PHASE_MOVE = "move", PHASE_END = "end", PHASE_CANCEL = "cancel", SUPPORTS_TOUCH = "ontouchstart" in window, SUPPORTS_POINTER_IE10 = window.navigator.msPointerEnabled && !window.PointerEvent && !SUPPORTS_TOUCH, SUPPORTS_POINTER = (window.PointerEvent || window.navigator.msPointerEnabled) && !SUPPORTS_TOUCH, PLUGIN_NS = "TouchSwipe", defaults = { fingers: 1, threshold: 75, cancelThreshold: null, pinchThreshold: 20, maxTimeThreshold: null, fingerReleaseThreshold: 250, longTapThreshold: 500, doubleTapThreshold: 200, swipe: null, swipeLeft: null, swipeRight: null, swipeUp: null, swipeDown: null, swipeStatus: null, pinchIn: null, pinchOut: null, pinchStatus: null, click: null, tap: null, doubleTap: null, longTap: null, hold: null, triggerOnTouchEnd: !0, triggerOnTouchLeave: !1, allowPageScroll: "auto", fallbackToMouseEvents: !0, excludedElements: ".noSwipe", preventDefaultEvents: !0 }; $.fn.swipe = function (method) { var $this = $(this), plugin = $this.data(PLUGIN_NS); if (plugin && "string" == typeof method) { if (plugin[method]) return plugin[method].apply(plugin, Array.prototype.slice.call(arguments, 1)); $.error("Method " + method + " does not exist on jQuery.swipe") } else if (plugin && "object" == typeof method) plugin.option.apply(plugin, arguments); else if (!(plugin || "object" != typeof method && method)) return init.apply(this, arguments); return $this }, $.fn.swipe.version = VERSION, $.fn.swipe.defaults = defaults, $.fn.swipe.phases = { PHASE_START: PHASE_START, PHASE_MOVE: PHASE_MOVE, PHASE_END: PHASE_END, PHASE_CANCEL: PHASE_CANCEL }, $.fn.swipe.directions = { LEFT: LEFT, RIGHT: RIGHT, UP: UP, DOWN: DOWN, IN: IN, OUT: OUT }, $.fn.swipe.pageScroll = { NONE: NONE, HORIZONTAL: HORIZONTAL, VERTICAL: VERTICAL, AUTO: AUTO }, $.fn.swipe.fingers = { ONE: 1, TWO: 2, THREE: 3, FOUR: 4, FIVE: 5, ALL: ALL_FINGERS } });
// TinyColor v1.4.1
// https://github.com/bgrins/TinyColor
// 2016-07-07, Brian Grinstead, MIT License
!function (a) { function b(a, d) { if (a = a ? a : "", d = d || {}, a instanceof b) return a; if (!(this instanceof b)) return new b(a, d); var e = c(a); this._originalInput = a, this._r = e.r, this._g = e.g, this._b = e.b, this._a = e.a, this._roundA = P(100 * this._a) / 100, this._format = d.format || e.format, this._gradientType = d.gradientType, this._r < 1 && (this._r = P(this._r)), this._g < 1 && (this._g = P(this._g)), this._b < 1 && (this._b = P(this._b)), this._ok = e.ok, this._tc_id = O++ } function c(a) { var b = { r: 0, g: 0, b: 0 }, c = 1, e = null, g = null, i = null, j = !1, k = !1; return "string" == typeof a && (a = K(a)), "object" == typeof a && (J(a.r) && J(a.g) && J(a.b) ? (b = d(a.r, a.g, a.b), j = !0, k = "%" === String(a.r).substr(-1) ? "prgb" : "rgb") : J(a.h) && J(a.s) && J(a.v) ? (e = G(a.s), g = G(a.v), b = h(a.h, e, g), j = !0, k = "hsv") : J(a.h) && J(a.s) && J(a.l) && (e = G(a.s), i = G(a.l), b = f(a.h, e, i), j = !0, k = "hsl"), a.hasOwnProperty("a") && (c = a.a)), c = z(c), { ok: j, format: a.format || k, r: Q(255, R(b.r, 0)), g: Q(255, R(b.g, 0)), b: Q(255, R(b.b, 0)), a: c } } function d(a, b, c) { return { r: 255 * A(a, 255), g: 255 * A(b, 255), b: 255 * A(c, 255) } } function e(a, b, c) { a = A(a, 255), b = A(b, 255), c = A(c, 255); var d, e, f = R(a, b, c), g = Q(a, b, c), h = (f + g) / 2; if (f == g) d = e = 0; else { var i = f - g; switch (e = h > .5 ? i / (2 - f - g) : i / (f + g), f) { case a: d = (b - c) / i + (c > b ? 6 : 0); break; case b: d = (c - a) / i + 2; break; case c: d = (a - b) / i + 4 }d /= 6 } return { h: d, s: e, l: h } } function f(a, b, c) { function d(a, b, c) { return 0 > c && (c += 1), c > 1 && (c -= 1), 1 / 6 > c ? a + 6 * (b - a) * c : .5 > c ? b : 2 / 3 > c ? a + 6 * (b - a) * (2 / 3 - c) : a } var e, f, g; if (a = A(a, 360), b = A(b, 100), c = A(c, 100), 0 === b) e = f = g = c; else { var h = .5 > c ? c * (1 + b) : c + b - c * b, i = 2 * c - h; e = d(i, h, a + 1 / 3), f = d(i, h, a), g = d(i, h, a - 1 / 3) } return { r: 255 * e, g: 255 * f, b: 255 * g } } function g(a, b, c) { a = A(a, 255), b = A(b, 255), c = A(c, 255); var d, e, f = R(a, b, c), g = Q(a, b, c), h = f, i = f - g; if (e = 0 === f ? 0 : i / f, f == g) d = 0; else { switch (f) { case a: d = (b - c) / i + (c > b ? 6 : 0); break; case b: d = (c - a) / i + 2; break; case c: d = (a - b) / i + 4 }d /= 6 } return { h: d, s: e, v: h } } function h(b, c, d) { b = 6 * A(b, 360), c = A(c, 100), d = A(d, 100); var e = a.floor(b), f = b - e, g = d * (1 - c), h = d * (1 - f * c), i = d * (1 - (1 - f) * c), j = e % 6, k = [d, h, g, g, i, d][j], l = [i, d, d, h, g, g][j], m = [g, g, i, d, d, h][j]; return { r: 255 * k, g: 255 * l, b: 255 * m } } function i(a, b, c, d) { var e = [F(P(a).toString(16)), F(P(b).toString(16)), F(P(c).toString(16))]; return d && e[0].charAt(0) == e[0].charAt(1) && e[1].charAt(0) == e[1].charAt(1) && e[2].charAt(0) == e[2].charAt(1) ? e[0].charAt(0) + e[1].charAt(0) + e[2].charAt(0) : e.join("") } function j(a, b, c, d, e) { var f = [F(P(a).toString(16)), F(P(b).toString(16)), F(P(c).toString(16)), F(H(d))]; return e && f[0].charAt(0) == f[0].charAt(1) && f[1].charAt(0) == f[1].charAt(1) && f[2].charAt(0) == f[2].charAt(1) && f[3].charAt(0) == f[3].charAt(1) ? f[0].charAt(0) + f[1].charAt(0) + f[2].charAt(0) + f[3].charAt(0) : f.join("") } function k(a, b, c, d) { var e = [F(H(d)), F(P(a).toString(16)), F(P(b).toString(16)), F(P(c).toString(16))]; return e.join("") } function l(a, c) { c = 0 === c ? 0 : c || 10; var d = b(a).toHsl(); return d.s -= c / 100, d.s = B(d.s), b(d) } function m(a, c) { c = 0 === c ? 0 : c || 10; var d = b(a).toHsl(); return d.s += c / 100, d.s = B(d.s), b(d) } function n(a) { return b(a).desaturate(100) } function o(a, c) { c = 0 === c ? 0 : c || 10; var d = b(a).toHsl(); return d.l += c / 100, d.l = B(d.l), b(d) } function p(a, c) { c = 0 === c ? 0 : c || 10; var d = b(a).toRgb(); return d.r = R(0, Q(255, d.r - P(255 * -(c / 100)))), d.g = R(0, Q(255, d.g - P(255 * -(c / 100)))), d.b = R(0, Q(255, d.b - P(255 * -(c / 100)))), b(d) } function q(a, c) { c = 0 === c ? 0 : c || 10; var d = b(a).toHsl(); return d.l -= c / 100, d.l = B(d.l), b(d) } function r(a, c) { var d = b(a).toHsl(), e = (d.h + c) % 360; return d.h = 0 > e ? 360 + e : e, b(d) } function s(a) { var c = b(a).toHsl(); return c.h = (c.h + 180) % 360, b(c) } function t(a) { var c = b(a).toHsl(), d = c.h; return [b(a), b({ h: (d + 120) % 360, s: c.s, l: c.l }), b({ h: (d + 240) % 360, s: c.s, l: c.l })] } function u(a) { var c = b(a).toHsl(), d = c.h; return [b(a), b({ h: (d + 90) % 360, s: c.s, l: c.l }), b({ h: (d + 180) % 360, s: c.s, l: c.l }), b({ h: (d + 270) % 360, s: c.s, l: c.l })] } function v(a) { var c = b(a).toHsl(), d = c.h; return [b(a), b({ h: (d + 72) % 360, s: c.s, l: c.l }), b({ h: (d + 216) % 360, s: c.s, l: c.l })] } function w(a, c, d) { c = c || 6, d = d || 30; var e = b(a).toHsl(), f = 360 / d, g = [b(a)]; for (e.h = (e.h - (f * c >> 1) + 720) % 360; --c;)e.h = (e.h + f) % 360, g.push(b(e)); return g } function x(a, c) { c = c || 6; for (var d = b(a).toHsv(), e = d.h, f = d.s, g = d.v, h = [], i = 1 / c; c--;)h.push(b({ h: e, s: f, v: g })), g = (g + i) % 1; return h } function y(a) { var b = {}; for (var c in a) a.hasOwnProperty(c) && (b[a[c]] = c); return b } function z(a) { return a = parseFloat(a), (isNaN(a) || 0 > a || a > 1) && (a = 1), a } function A(b, c) { D(b) && (b = "100%"); var d = E(b); return b = Q(c, R(0, parseFloat(b))), d && (b = parseInt(b * c, 10) / 100), a.abs(b - c) < 1e-6 ? 1 : b % c / parseFloat(c) } function B(a) { return Q(1, R(0, a)) } function C(a) { return parseInt(a, 16) } function D(a) { return "string" == typeof a && -1 != a.indexOf(".") && 1 === parseFloat(a) } function E(a) { return "string" == typeof a && -1 != a.indexOf("%") } function F(a) { return 1 == a.length ? "0" + a : "" + a } function G(a) { return 1 >= a && (a = 100 * a + "%"), a } function H(b) { return a.round(255 * parseFloat(b)).toString(16) } function I(a) { return C(a) / 255 } function J(a) { return !!V.CSS_UNIT.exec(a) } function K(a) { a = a.replace(M, "").replace(N, "").toLowerCase(); var b = !1; if (T[a]) a = T[a], b = !0; else if ("transparent" == a) return { r: 0, g: 0, b: 0, a: 0, format: "name" }; var c; return (c = V.rgb.exec(a)) ? { r: c[1], g: c[2], b: c[3] } : (c = V.rgba.exec(a)) ? { r: c[1], g: c[2], b: c[3], a: c[4] } : (c = V.hsl.exec(a)) ? { h: c[1], s: c[2], l: c[3] } : (c = V.hsla.exec(a)) ? { h: c[1], s: c[2], l: c[3], a: c[4] } : (c = V.hsv.exec(a)) ? { h: c[1], s: c[2], v: c[3] } : (c = V.hsva.exec(a)) ? { h: c[1], s: c[2], v: c[3], a: c[4] } : (c = V.hex8.exec(a)) ? { r: C(c[1]), g: C(c[2]), b: C(c[3]), a: I(c[4]), format: b ? "name" : "hex8" } : (c = V.hex6.exec(a)) ? { r: C(c[1]), g: C(c[2]), b: C(c[3]), format: b ? "name" : "hex" } : (c = V.hex4.exec(a)) ? { r: C(c[1] + "" + c[1]), g: C(c[2] + "" + c[2]), b: C(c[3] + "" + c[3]), a: I(c[4] + "" + c[4]), format: b ? "name" : "hex8" } : (c = V.hex3.exec(a)) ? { r: C(c[1] + "" + c[1]), g: C(c[2] + "" + c[2]), b: C(c[3] + "" + c[3]), format: b ? "name" : "hex" } : !1 } function L(a) { var b, c; return a = a || { level: "AA", size: "small" }, b = (a.level || "AA").toUpperCase(), c = (a.size || "small").toLowerCase(), "AA" !== b && "AAA" !== b && (b = "AA"), "small" !== c && "large" !== c && (c = "small"), { level: b, size: c } } var M = /^\s+/, N = /\s+$/, O = 0, P = a.round, Q = a.min, R = a.max, S = a.random; b.prototype = { isDark: function () { return this.getBrightness() < 128 }, isLight: function () { return !this.isDark() }, isValid: function () { return this._ok }, getOriginalInput: function () { return this._originalInput }, getFormat: function () { return this._format }, getAlpha: function () { return this._a }, getBrightness: function () { var a = this.toRgb(); return (299 * a.r + 587 * a.g + 114 * a.b) / 1e3 }, getLuminance: function () { var b, c, d, e, f, g, h = this.toRgb(); return b = h.r / 255, c = h.g / 255, d = h.b / 255, e = .03928 >= b ? b / 12.92 : a.pow((b + .055) / 1.055, 2.4), f = .03928 >= c ? c / 12.92 : a.pow((c + .055) / 1.055, 2.4), g = .03928 >= d ? d / 12.92 : a.pow((d + .055) / 1.055, 2.4), .2126 * e + .7152 * f + .0722 * g }, setAlpha: function (a) { return this._a = z(a), this._roundA = P(100 * this._a) / 100, this }, toHsv: function () { var a = g(this._r, this._g, this._b); return { h: 360 * a.h, s: a.s, v: a.v, a: this._a } }, toHsvString: function () { var a = g(this._r, this._g, this._b), b = P(360 * a.h), c = P(100 * a.s), d = P(100 * a.v); return 1 == this._a ? "hsv(" + b + ", " + c + "%, " + d + "%)" : "hsva(" + b + ", " + c + "%, " + d + "%, " + this._roundA + ")" }, toHsl: function () { var a = e(this._r, this._g, this._b); return { h: 360 * a.h, s: a.s, l: a.l, a: this._a } }, toHslString: function () { var a = e(this._r, this._g, this._b), b = P(360 * a.h), c = P(100 * a.s), d = P(100 * a.l); return 1 == this._a ? "hsl(" + b + ", " + c + "%, " + d + "%)" : "hsla(" + b + ", " + c + "%, " + d + "%, " + this._roundA + ")" }, toHex: function (a) { return i(this._r, this._g, this._b, a) }, toHexString: function (a) { return "#" + this.toHex(a) }, toHex8: function (a) { return j(this._r, this._g, this._b, this._a, a) }, toHex8String: function (a) { return "#" + this.toHex8(a) }, toRgb: function () { return { r: P(this._r), g: P(this._g), b: P(this._b), a: this._a } }, toRgbString: function () { return 1 == this._a ? "rgb(" + P(this._r) + ", " + P(this._g) + ", " + P(this._b) + ")" : "rgba(" + P(this._r) + ", " + P(this._g) + ", " + P(this._b) + ", " + this._roundA + ")" }, toPercentageRgb: function () { return { r: P(100 * A(this._r, 255)) + "%", g: P(100 * A(this._g, 255)) + "%", b: P(100 * A(this._b, 255)) + "%", a: this._a } }, toPercentageRgbString: function () { return 1 == this._a ? "rgb(" + P(100 * A(this._r, 255)) + "%, " + P(100 * A(this._g, 255)) + "%, " + P(100 * A(this._b, 255)) + "%)" : "rgba(" + P(100 * A(this._r, 255)) + "%, " + P(100 * A(this._g, 255)) + "%, " + P(100 * A(this._b, 255)) + "%, " + this._roundA + ")" }, toName: function () { return 0 === this._a ? "transparent" : this._a < 1 ? !1 : U[i(this._r, this._g, this._b, !0)] || !1 }, toFilter: function (a) { var c = "#" + k(this._r, this._g, this._b, this._a), d = c, e = this._gradientType ? "GradientType = 1, " : ""; if (a) { var f = b(a); d = "#" + k(f._r, f._g, f._b, f._a) } return "progid:DXImageTransform.Microsoft.gradient(" + e + "startColorstr=" + c + ",endColorstr=" + d + ")" }, toString: function (a) { var b = !!a; a = a || this._format; var c = !1, d = this._a < 1 && this._a >= 0, e = !b && d && ("hex" === a || "hex6" === a || "hex3" === a || "hex4" === a || "hex8" === a || "name" === a); return e ? "name" === a && 0 === this._a ? this.toName() : this.toRgbString() : ("rgb" === a && (c = this.toRgbString()), "prgb" === a && (c = this.toPercentageRgbString()), ("hex" === a || "hex6" === a) && (c = this.toHexString()), "hex3" === a && (c = this.toHexString(!0)), "hex4" === a && (c = this.toHex8String(!0)), "hex8" === a && (c = this.toHex8String()), "name" === a && (c = this.toName()), "hsl" === a && (c = this.toHslString()), "hsv" === a && (c = this.toHsvString()), c || this.toHexString()) }, clone: function () { return b(this.toString()) }, _applyModification: function (a, b) { var c = a.apply(null, [this].concat([].slice.call(b))); return this._r = c._r, this._g = c._g, this._b = c._b, this.setAlpha(c._a), this }, lighten: function () { return this._applyModification(o, arguments) }, brighten: function () { return this._applyModification(p, arguments) }, darken: function () { return this._applyModification(q, arguments) }, desaturate: function () { return this._applyModification(l, arguments) }, saturate: function () { return this._applyModification(m, arguments) }, greyscale: function () { return this._applyModification(n, arguments) }, spin: function () { return this._applyModification(r, arguments) }, _applyCombination: function (a, b) { return a.apply(null, [this].concat([].slice.call(b))) }, analogous: function () { return this._applyCombination(w, arguments) }, complement: function () { return this._applyCombination(s, arguments) }, monochromatic: function () { return this._applyCombination(x, arguments) }, splitcomplement: function () { return this._applyCombination(v, arguments) }, triad: function () { return this._applyCombination(t, arguments) }, tetrad: function () { return this._applyCombination(u, arguments) } }, b.fromRatio = function (a, c) { if ("object" == typeof a) { var d = {}; for (var e in a) a.hasOwnProperty(e) && (d[e] = "a" === e ? a[e] : G(a[e])); a = d } return b(a, c) }, b.equals = function (a, c) { return a && c ? b(a).toRgbString() == b(c).toRgbString() : !1 }, b.random = function () { return b.fromRatio({ r: S(), g: S(), b: S() }) }, b.mix = function (a, c, d) { d = 0 === d ? 0 : d || 50; var e = b(a).toRgb(), f = b(c).toRgb(), g = d / 100, h = { r: (f.r - e.r) * g + e.r, g: (f.g - e.g) * g + e.g, b: (f.b - e.b) * g + e.b, a: (f.a - e.a) * g + e.a }; return b(h) }, b.readability = function (c, d) { var e = b(c), f = b(d); return (a.max(e.getLuminance(), f.getLuminance()) + .05) / (a.min(e.getLuminance(), f.getLuminance()) + .05) }, b.isReadable = function (a, c, d) { var e, f, g = b.readability(a, c); switch (f = !1, e = L(d), e.level + e.size) { case "AAsmall": case "AAAlarge": f = g >= 4.5; break; case "AAlarge": f = g >= 3; break; case "AAAsmall": f = g >= 7 }return f }, b.mostReadable = function (a, c, d) { var e, f, g, h, i = null, j = 0; d = d || {}, f = d.includeFallbackColors, g = d.level, h = d.size; for (var k = 0; k < c.length; k++)e = b.readability(a, c[k]), e > j && (j = e, i = b(c[k])); return b.isReadable(a, i, { level: g, size: h }) || !f ? i : (d.includeFallbackColors = !1, b.mostReadable(a, ["#fff", "#000"], d)) }; var T = b.names = { aliceblue: "f0f8ff", antiquewhite: "faebd7", aqua: "0ff", aquamarine: "7fffd4", azure: "f0ffff", beige: "f5f5dc", bisque: "ffe4c4", black: "000", blanchedalmond: "ffebcd", blue: "00f", blueviolet: "8a2be2", brown: "a52a2a", burlywood: "deb887", burntsienna: "ea7e5d", cadetblue: "5f9ea0", chartreuse: "7fff00", chocolate: "d2691e", coral: "ff7f50", cornflowerblue: "6495ed", cornsilk: "fff8dc", crimson: "dc143c", cyan: "0ff", darkblue: "00008b", darkcyan: "008b8b", darkgoldenrod: "b8860b", darkgray: "a9a9a9", darkgreen: "006400", darkgrey: "a9a9a9", darkkhaki: "bdb76b", darkmagenta: "8b008b", darkolivegreen: "556b2f", darkorange: "ff8c00", darkorchid: "9932cc", darkred: "8b0000", darksalmon: "e9967a", darkseagreen: "8fbc8f", darkslateblue: "483d8b", darkslategray: "2f4f4f", darkslategrey: "2f4f4f", darkturquoise: "00ced1", darkviolet: "9400d3", deeppink: "ff1493", deepskyblue: "00bfff", dimgray: "696969", dimgrey: "696969", dodgerblue: "1e90ff", firebrick: "b22222", floralwhite: "fffaf0", forestgreen: "228b22", fuchsia: "f0f", gainsboro: "dcdcdc", ghostwhite: "f8f8ff", gold: "ffd700", goldenrod: "daa520", gray: "808080", green: "008000", greenyellow: "adff2f", grey: "808080", honeydew: "f0fff0", hotpink: "ff69b4", indianred: "cd5c5c", indigo: "4b0082", ivory: "fffff0", khaki: "f0e68c", lavender: "e6e6fa", lavenderblush: "fff0f5", lawngreen: "7cfc00", lemonchiffon: "fffacd", lightblue: "add8e6", lightcoral: "f08080", lightcyan: "e0ffff", lightgoldenrodyellow: "fafad2", lightgray: "d3d3d3", lightgreen: "90ee90", lightgrey: "d3d3d3", lightpink: "ffb6c1", lightsalmon: "ffa07a", lightseagreen: "20b2aa", lightskyblue: "87cefa", lightslategray: "789", lightslategrey: "789", lightsteelblue: "b0c4de", lightyellow: "ffffe0", lime: "0f0", limegreen: "32cd32", linen: "faf0e6", magenta: "f0f", maroon: "800000", mediumaquamarine: "66cdaa", mediumblue: "0000cd", mediumorchid: "ba55d3", mediumpurple: "9370db", mediumseagreen: "3cb371", mediumslateblue: "7b68ee", mediumspringgreen: "00fa9a", mediumturquoise: "48d1cc", mediumvioletred: "c71585", midnightblue: "191970", mintcream: "f5fffa", mistyrose: "ffe4e1", moccasin: "ffe4b5", navajowhite: "ffdead", navy: "000080", oldlace: "fdf5e6", olive: "808000", olivedrab: "6b8e23", orange: "ffa500", orangered: "ff4500", orchid: "da70d6", palegoldenrod: "eee8aa", palegreen: "98fb98", paleturquoise: "afeeee", palevioletred: "db7093", papayawhip: "ffefd5", peachpuff: "ffdab9", peru: "cd853f", pink: "ffc0cb", plum: "dda0dd", powderblue: "b0e0e6", purple: "800080", rebeccapurple: "663399", red: "f00", rosybrown: "bc8f8f", royalblue: "4169e1", saddlebrown: "8b4513", salmon: "fa8072", sandybrown: "f4a460", seagreen: "2e8b57", seashell: "fff5ee", sienna: "a0522d", silver: "c0c0c0", skyblue: "87ceeb", slateblue: "6a5acd", slategray: "708090", slategrey: "708090", snow: "fffafa", springgreen: "00ff7f", steelblue: "4682b4", tan: "d2b48c", teal: "008080", thistle: "d8bfd8", tomato: "ff6347", turquoise: "40e0d0", violet: "ee82ee", wheat: "f5deb3", white: "fff", whitesmoke: "f5f5f5", yellow: "ff0", yellowgreen: "9acd32" }, U = b.hexNames = y(T), V = function () { var a = "[-\\+]?\\d+%?", b = "[-\\+]?\\d*\\.\\d+%?", c = "(?:" + b + ")|(?:" + a + ")", d = "[\\s|\\(]+(" + c + ")[,|\\s]+(" + c + ")[,|\\s]+(" + c + ")\\s*\\)?", e = "[\\s|\\(]+(" + c + ")[,|\\s]+(" + c + ")[,|\\s]+(" + c + ")[,|\\s]+(" + c + ")\\s*\\)?"; return { CSS_UNIT: new RegExp(c), rgb: new RegExp("rgb" + d), rgba: new RegExp("rgba" + e), hsl: new RegExp("hsl" + d), hsla: new RegExp("hsla" + e), hsv: new RegExp("hsv" + d), hsva: new RegExp("hsva" + e), hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ } }(); "undefined" != typeof module && module.exports ? module.exports = b : "function" == typeof define && define.amd ? define(function () { return b }) : window.tinycolor = b }(Math);
!function (r) { var i = function (n) { var e, i; return i = (e = r("
", { class: n }).appendTo("body")).is(":visible"), e.remove(), i }; r.isBreakpoint = function (n) { var e; switch (n) { case "xs": e = "d-block d-sm-none"; break; case "sm": e = "d-none d-sm-block d-md-none"; break; case "md": e = "d-none d-md-block d-lg-none"; break; case "lg": e = "d-none d-lg-block d-xl-none"; break; case "xl": e = "d-none d-xl-block" }return i(e) }, r.isBreakpointUp = function (n) { var e; switch (n) { case "xs": return !0; case "sm": e = "d-none d-sm-block"; break; case "md": e = "d-none d-md-block"; break; case "lg": e = "d-none d-lg-block"; break; case "xl": e = "d-none d-xl-block" }return i(e) }, r.extend(r, { isXs: function () { return r.isBreakpoint("xs") }, isSm: function () { return r.isBreakpoint("sm") }, isMd: function () { return r.isBreakpoint("md") }, isLg: function () { return r.isBreakpoint("lg") }, isXl: function () { return r.isBreakpoint("xl") }, isXsUp: function () { return r.isBreakpointUp("xs") }, isSmUp: function () { return r.isBreakpointUp("sm") }, isMdUp: function () { return r.isBreakpointUp("md") }, isLgUp: function () { return r.isBreakpointUp("lg") }, isXlUp: function () { return r.isBreakpointUp("xl") } }) }(jQuery);