webpack-bootstrap-ui-kit/src/js_old/_main.js

651 lines
16 KiB
JavaScript
Raw Normal View History

2021-08-18 20:51:15 +02:00
"use strict";
2019-06-08 17:20:51 +02:00
2021-08-18 20:51:15 +02:00
import $ from "jquery";
2019-06-08 17:20:51 +02:00
2021-08-18 20:51:15 +02:00
import Events from "./_events";
import Consts from "./_consts";
2019-10-20 01:40:40 +02:00
2021-08-18 20:51:15 +02:00
import EventsRouter from "./_events.router";
import Spinner from "./_components/_ui.spinner";
2019-06-08 17:20:51 +02:00
2019-09-07 03:49:08 +02:00
// AJAX functionality
2021-08-18 20:51:15 +02:00
import AjaxUI from "./_components/_ui.ajax";
2019-07-10 20:59:57 +02:00
2021-08-18 20:51:15 +02:00
import FormBasics from "./_components/_ui.form.basics";
import HeaderUI from "./_components/_ui.header-footer";
2021-08-18 20:51:15 +02:00
import SmoothScroll from "smooth-scroll";
2019-06-08 17:20:51 +02:00
const smoothScroll = SmoothScroll();
2020-02-17 19:47:05 +01:00
const MainUI = (($) => {
2020-09-10 21:48:14 +02:00
// Constants
const W = window;
const $W = $(W);
const D = document;
2021-08-18 20:51:15 +02:00
const $Body = $("body");
2020-09-10 21:48:14 +02:00
2021-08-18 20:51:15 +02:00
const NAME = "MainUI";
2020-09-10 21:48:14 +02:00
console.clear();
console.info(
`%cUI Kit ${UINAME} ${UIVERSION}`,
2021-08-18 20:51:15 +02:00
"color:yellow;font-size:14px"
2020-09-10 21:48:14 +02:00
);
console.info(
`%c${UIMetaNAME} ${UIMetaVersion}`,
2021-08-18 20:51:15 +02:00
"color:yellow;font-size:12px"
2020-09-10 21:48:14 +02:00
);
console.info(
`%chttps://github.com/a2nt/webpack-bootstrap-ui-kit by ${UIAUTHOR}`,
2021-08-18 20:51:15 +02:00
"color:yellow;font-size:10px"
2020-09-10 21:48:14 +02:00
);
2021-08-18 20:51:15 +02:00
console.groupCollapsed("Events");
2020-09-10 21:48:14 +02:00
Object.keys(Events).forEach((k) => {
console.info(`${k}: ${Events[k]}`);
});
2021-08-18 20:51:15 +02:00
console.groupEnd("Events");
2020-09-10 21:48:14 +02:00
2021-08-18 20:51:15 +02:00
console.groupCollapsed("Consts");
2020-09-10 21:48:14 +02:00
Object.keys(Consts).forEach((k) => {
console.info(`${k}: ${Consts[k]}`);
});
2021-08-18 20:51:15 +02:00
console.groupEnd("Events");
2020-09-10 21:48:14 +02:00
2021-08-18 20:51:15 +02:00
console.groupCollapsed("Init");
console.time("init");
2020-09-10 21:48:14 +02:00
$W.on(`${Events.LODEDANDREADY}`, () => {
2021-08-18 20:51:15 +02:00
console.groupEnd("Init");
console.timeEnd("init");
2020-09-10 21:48:14 +02:00
2021-08-18 20:51:15 +02:00
console.time("Post-init");
console.groupCollapsed("Post-init");
2020-09-10 21:48:14 +02:00
});
// get browser locale
//const Locale = $('html').attr('lang').substring(0, 2);
2021-08-18 20:51:15 +02:00
const $AlertNotify = $("#AlertNotify");
const $SiteWideMessage = $("#SiteWideMessage");
2020-09-10 21:48:14 +02:00
// get browser window visibility preferences
// Opera 12.10, Firefox >=18, Chrome >=31, IE11
2021-08-18 20:51:15 +02:00
const HiddenName = "hidden";
const VisibilityChangeEvent = "visibilitychange";
2020-09-10 21:48:14 +02:00
// update visibility state
D.addEventListener(VisibilityChangeEvent, () => {
if (D.visibilityState === HiddenName) {
console.log(`${NAME}: Tab: hidden`);
2021-08-18 20:51:15 +02:00
$Body.addClass("is-hidden");
2020-09-10 21:48:14 +02:00
$Body.trigger(Events.TABHIDDEN);
$W.trigger(Events.TABHIDDEN);
} else {
console.log(`${NAME}: Tab: focused`);
2021-08-18 20:51:15 +02:00
$Body.removeClass("is-hidden");
2020-09-10 21:48:14 +02:00
$Body.trigger(Events.TABFOCUSED);
$W.trigger(Events.TABFOCUSED);
}
});
// session ping
let pingInterval;
let pingLock = false;
const sessionPing = () => {
2021-08-18 20:51:15 +02:00
if (pingLock || $Body.hasClass("is-offline")) {
2020-09-10 21:48:14 +02:00
return;
}
console.log(`${NAME}: session ping`);
pingLock = true;
$.ajax({
sync: false,
async: true,
cache: false,
2021-08-18 20:51:15 +02:00
url: "/Security/ping",
2020-09-10 21:48:14 +02:00
global: false,
2021-08-18 20:51:15 +02:00
type: "POST",
2020-09-10 21:48:14 +02:00
complete: (data, datastatus) => {
updateOnlineStatus();
2021-08-18 20:51:15 +02:00
if (datastatus !== "success") {
2020-09-10 21:48:14 +02:00
console.warn(`${NAME}: ping failed`);
clearInterval(pingInterval);
pingInterval = null;
}
pingLock = false;
},
});
};
// update online/offline state
2020-09-10 22:11:51 +02:00
let statusLock = false;
2020-09-10 21:48:14 +02:00
const updateOnlineStatus = () => {
2020-09-10 22:11:51 +02:00
if (statusLock) {
return;
}
statusLock = true;
2021-08-18 20:51:15 +02:00
if (typeof navigator.onLine === "undefined") {
2020-09-10 21:48:14 +02:00
return false;
}
if (!navigator.onLine) {
2020-09-10 22:53:35 +02:00
console.log(`${NAME}: Offline`);
2020-09-10 21:48:14 +02:00
clearInterval(pingInterval);
pingInterval = null;
2021-08-18 20:51:15 +02:00
$Body.addClass("is-offline");
$Body.removeClass("is-online");
2020-09-10 21:48:14 +02:00
$Body.trigger(Events.OFFLINE);
$W.trigger(Events.OFFLINE);
2020-09-10 22:11:51 +02:00
statusLock = false;
2020-09-10 21:48:14 +02:00
return true;
}
if (!pingInterval) {
pingInterval = setInterval(sessionPing, 300000); // 5 min in ms
}
2021-08-18 20:51:15 +02:00
if ($Body.hasClass("is-offline")) {
2020-09-10 21:48:14 +02:00
sessionPing();
2020-09-10 22:53:35 +02:00
console.log(`${NAME}: is back online`);
2020-09-10 21:48:14 +02:00
$Body.trigger(Events.BACKONLINE);
2020-09-10 22:53:35 +02:00
} else {
console.log(`${NAME}: Online`);
2020-09-10 21:48:14 +02:00
}
2021-08-18 20:51:15 +02:00
$Body.addClass("is-online");
$Body.removeClass("is-offline");
2020-09-10 21:48:14 +02:00
$Body.trigger(Events.ONLINE);
$W.trigger(Events.ONLINE);
2020-09-10 22:11:51 +02:00
statusLock = false;
2020-09-10 21:48:14 +02:00
return true;
};
W.addEventListener(
`${Events.OFFLINE}`,
() => {
updateOnlineStatus();
},
2021-08-18 20:51:15 +02:00
false
2020-09-10 21:48:14 +02:00
);
W.addEventListener(
`${Events.ONLINE}`,
() => {
updateOnlineStatus();
},
2021-08-18 20:51:15 +02:00
false
2020-09-10 21:48:14 +02:00
);
$W.on(`${Events.LOADED} ${Events.AJAX}`, () => {
updateOnlineStatus();
});
// scrollTo
const ScrollTo = (trigger, selector) => {
smoothScroll.animateScroll(D.querySelector(selector), trigger, {
speed: 500,
offset: -20,
//easing: 'easeInOutCubic',
// Callback API
//before: (anchor, toggle) => {}, // Callback to run before scroll
//`after: (anchor, toggle) => {} // Callback to run after scroll
});
};
W.URLDetails = {
2021-08-18 20:51:15 +02:00
base: $("base").attr("href"),
relative: "/",
hash: "",
2020-09-10 21:48:14 +02:00
};
let eventFired = false;
const setTouchScreen = (bool) => {
if (W.IsTouchScreen === bool || eventFired) {
return;
}
eventFired = true;
W.IsTouchScreen = bool;
$.support.touch = W.IsTouchScreen;
if (bool) {
console.log(`${NAME}: Touch screen enabled`);
$Body.trigger(Events.TOUCHENABLE);
$W.trigger(Events.TOUCHENABLE);
} else {
console.log(`${NAME}: Touch screen disabled`);
$Body.trigger(Events.TOUCHDISABLED);
$W.trigger(Events.TOUCHDISABLED);
}
// prevent firing touch and mouse events together
setTimeout(() => {
eventFired = false;
}, 200);
};
2021-08-18 20:51:15 +02:00
setTouchScreen("ontouchstart" in window || navigator.msMaxTouchPoints > 0);
2020-09-10 21:48:14 +02:00
// disable touch on mouse events
/*D.addEventListener('mousemove', () => {
2020-02-17 19:45:54 +01:00
setTouchScreen(false);
});
D.addEventListener('mousedown', () => {
setTouchScreen(false);
});*/
2020-09-10 21:48:14 +02:00
// enable touch screen on touch events
2021-08-18 20:51:15 +02:00
D.addEventListener("touchmove", () => {
2020-09-10 21:48:14 +02:00
setTouchScreen(true);
});
2021-08-18 20:51:15 +02:00
D.addEventListener("touchstart", () => {
2020-09-10 21:48:14 +02:00
setTouchScreen(true);
});
2020-02-17 19:06:39 +01:00
2020-09-10 21:48:14 +02:00
class MainUI {
// Static methods
2019-06-08 17:20:51 +02:00
2020-09-10 21:48:14 +02:00
static init() {
const ui = this;
ui.dispose();
2019-06-08 17:20:51 +02:00
2020-09-10 21:48:14 +02:00
console.log(`${NAME}: init`);
2019-06-08 17:20:51 +02:00
2020-09-10 21:48:14 +02:00
// update location details
ui.updateLocation();
2019-06-08 17:20:51 +02:00
2020-09-10 21:48:14 +02:00
// mark available offline areas
2021-08-18 20:51:15 +02:00
if ("caches" in W) {
$("a.offline").addClass("offline-available");
2020-09-10 21:48:14 +02:00
}
2019-06-08 17:20:51 +02:00
2020-09-10 21:48:14 +02:00
ui.loadImages();
2019-10-20 01:40:40 +02:00
2020-09-10 21:48:14 +02:00
// detect bootstrap screen size
ui.detectBootstrapScreenSize();
2019-06-08 17:20:51 +02:00
2020-09-10 21:48:14 +02:00
// mark external links
2021-08-18 20:51:15 +02:00
$('a.external,a[rel="external"]').attr("target", "_blank");
2019-06-08 17:20:51 +02:00
2020-09-10 21:48:14 +02:00
// show encoded emails
/*$(D).find('.obm').each(() => {
2019-10-20 01:40:40 +02:00
if ($(this).attr('data-val') !== undefined) {
const email = $(this).attr('data-val').split('')
.reverse()
.join('')
.slice(0, -8)
.replace(/[a-zA-Z]/g, (c) => String.fromCharCode((c <= 'Z' ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26))
.replace('#AT#', '@');
const attr = $(this).attr('data-val-append');
if (attr !== undefined && attr !== false) {
$(this).append(email);
}
if ($(this).find('.sr-only').length > 0) {
$(this).find('.sr-only').append(email);
}
if ($(this).attr('href') !== undefined) {
$(this).attr('href', `mailto:${email}`);
}
}
});*/
2020-09-10 21:48:14 +02:00
//
// scroll links
2021-08-18 20:51:15 +02:00
$(".js-scrollTo").on("click", (e) => {
2020-09-10 21:48:14 +02:00
console.log(`${NAME}: .js-scrollTo`);
e.preventDefault();
const el = e.currentTarget;
const $el = $(e.currentTarget);
2021-08-18 20:51:15 +02:00
ScrollTo(el, $el.attr("data-target"));
2020-09-10 21:48:14 +02:00
});
// load external fonts
2021-08-18 20:51:15 +02:00
if ($("[data-extfont]").length) {
2020-09-10 21:48:14 +02:00
console.log(`${NAME}: loading external fonts [data-extfont]`);
$.getScript(
2021-08-18 20:51:15 +02:00
"//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js",
2020-09-10 21:48:14 +02:00
() => {
const fonts = [];
2021-08-18 20:51:15 +02:00
$("[data-extfont]").each((i, el) => {
fonts[i] = $(el).attr("data-extfont");
2020-09-10 21:48:14 +02:00
});
W.WebFont.load({
google: {
families: fonts,
},
});
2021-08-18 20:51:15 +02:00
}
2020-09-10 21:48:14 +02:00
);
}
// data-set links
2021-08-18 20:51:15 +02:00
$("[data-set-target]").on("click", (e) => {
2020-09-10 21:48:14 +02:00
console.log(`${NAME}: [data-set-target]`);
const $el = $(e.currentTarget);
2021-08-18 20:51:15 +02:00
const $target = $($el.data("set-target"));
2020-09-10 21:48:14 +02:00
if (!$target.length) {
return;
}
$target.each((i, targetEl) => {
const $targetEl = $(targetEl);
2021-08-18 20:51:15 +02:00
const tag = $targetEl.prop("tagName").toLowerCase();
2020-09-10 21:48:14 +02:00
2021-08-18 20:51:15 +02:00
if (tag === "input" || tag === "select") {
$targetEl.val($el.data("set-val"));
} else if (!$targetEl.hasClass("field")) {
$targetEl.text($el.data("set-val"));
2020-09-10 21:48:14 +02:00
}
});
$el.trigger(Events.SET_TARGET_UPDATE);
2021-08-18 20:51:15 +02:00
$target.closest("form").trigger(Events.SET_TARGET_UPDATE);
2020-09-10 21:48:14 +02:00
});
// emulate links
2021-08-18 20:51:15 +02:00
$(".a[data-href]").on("click", (e) => {
2020-09-10 21:48:14 +02:00
console.log(`${NAME}: js link processing .a[data-href]`);
const $el = $(e.currentTarget);
2021-08-18 20:51:15 +02:00
const href = $el.data("href");
2020-09-10 21:48:14 +02:00
if (!href.length) {
console.warn(`${NAME}: .a[data-href] | Missing data-href`);
console.warn($el);
}
W.location.assign(href);
});
2021-01-25 17:04:47 +01:00
// set attributes for mobile friendly tables
2021-08-18 20:51:15 +02:00
$(".typography table").each((i, el) => {
2021-01-25 17:04:47 +01:00
const $table = $(el);
2021-08-18 20:51:15 +02:00
let $header = $table.find("thead tr:first-child");
2021-01-25 17:04:47 +01:00
if (!$header.length) {
2021-08-18 20:51:15 +02:00
$header = $(el).find("tr:first-child");
2021-01-25 17:04:47 +01:00
}
2021-08-18 20:51:15 +02:00
$header.addClass("d-typography-breakpoint-none");
2021-01-25 17:08:43 +01:00
2021-08-18 20:51:15 +02:00
$header.find("td").each((i, h) => {
2021-01-25 17:04:47 +01:00
const $h = $(h);
$table
2021-08-18 20:51:15 +02:00
.find("tr")
2021-01-25 17:04:47 +01:00
.find(`td:eq(${i})`)
.each((i, el) => {
const $el = $(el);
2021-08-18 20:51:15 +02:00
if (!$el.attr("data-label")) {
$el.attr("data-label", $h.text());
2021-01-25 17:04:47 +01:00
}
});
});
});
//
2020-09-10 21:48:14 +02:00
// hide spinner
Spinner.hide(() => {
2021-08-18 20:51:15 +02:00
$Body.addClass("loaded");
2020-09-10 21:48:14 +02:00
});
// fire page printing
2021-08-18 20:51:15 +02:00
if (W.URLDetails["hash"].indexOf("printpage") > -1) {
2020-09-10 21:48:14 +02:00
W.print();
}
$Body.data(NAME, ui);
2021-08-18 20:51:15 +02:00
$W.removeClass("lock-main-init");
2020-09-10 21:48:14 +02:00
}
static detectBootstrapScreenSize() {
const $el = $('<div class="env-test"></div>');
let envs = [...Consts.ENVS];
$Body.append($el);
let curEnv = envs.shift();
envs = envs.reverse();
for (let i = 0; i < envs.length; ++i) {
const env = envs[i];
$el.addClass(`d-${env}-none`);
2021-08-18 20:51:15 +02:00
if ($el.is(":hidden")) {
2020-09-10 21:48:14 +02:00
curEnv = env;
break;
}
}
$el.remove();
$Body.removeClass(envs);
$Body.addClass(curEnv);
let landscape = true;
if ($W.width() > $W.height()) {
2021-08-18 20:51:15 +02:00
$Body.removeClass("portrait");
$Body.addClass("landscape");
2020-09-10 21:48:14 +02:00
} else {
landscape = false;
2021-08-18 20:51:15 +02:00
$Body.removeClass("landscape");
$Body.addClass("portrait");
2020-09-10 21:48:14 +02:00
}
console.log(
2021-08-18 20:51:15 +02:00
`${NAME}: screen size detected ${curEnv} | landscape ${landscape}`
2020-09-10 21:48:14 +02:00
);
return curEnv;
}
static updateLocation(url) {
let location = url || W.location.href;
2021-08-18 20:51:15 +02:00
location = location.replace(W.URLDetails["base"], "/");
const hash = location.indexOf("#");
2020-09-10 21:48:14 +02:00
2021-08-18 20:51:15 +02:00
W.URLDetails.relative = location.split("#")[0];
2020-09-10 21:48:14 +02:00
W.URLDetails.hash =
2021-08-18 20:51:15 +02:00
hash >= 0 ? location.substr(location.indexOf("#")) : "";
2020-09-10 21:48:14 +02:00
}
// show site-wide alert
static alert(msg, cls) {
2021-08-18 20:51:15 +02:00
$SiteWideMessage.fadeOut("fast");
2020-09-10 21:48:14 +02:00
$SiteWideMessage.html(
2021-08-18 20:51:15 +02:00
`<div class="page-alert"><div class="alert alert-${cls}"><i class="close" data-dismiss="alert">&times;</i>${msg}</div></div>`
2020-09-10 21:48:14 +02:00
);
2021-08-18 20:51:15 +02:00
$SiteWideMessage.find(".page-alert").alert();
2020-09-10 21:48:14 +02:00
$SiteWideMessage.find('.close[data-dismiss="alert"]').click(() => {
2021-08-18 20:51:15 +02:00
$SiteWideMessage.fadeOut("slow", () => {
$SiteWideMessage.find(".page-alert").alert("close");
2020-09-10 21:48:14 +02:00
});
});
2021-08-18 20:51:15 +02:00
$SiteWideMessage.fadeIn("slow");
2020-09-10 21:48:14 +02:00
if ($AlertNotify.length) {
$AlertNotify[0].play();
}
$W.trigger(`${Events.ALLERTAPPEARED}`);
}
// hide site-wide alert
static alertHide() {
if ($SiteWideMessage.length !== 0) {
2021-08-18 20:51:15 +02:00
$SiteWideMessage.fadeOut("slow", () => {
$SiteWideMessage.find(".alert").alert("close");
2020-09-10 21:48:14 +02:00
});
}
2021-08-18 20:51:15 +02:00
if ($AlertNotify.length && typeof $AlertNotify[0].stop !== "undefined") {
2020-09-10 21:48:14 +02:00
$AlertNotify[0].stop();
}
$W.trigger(`${Events.ALLERTREMOVED}`);
}
// load all images
static loadImages() {
2021-08-18 20:51:15 +02:00
const $imgs = $Body.find("img").not(".loaded");
2020-09-10 21:48:14 +02:00
const $imgUrls = [];
const $imgLazyUrls = [];
// collect image details
$imgs.each((i, el) => {
const $el = $(el);
2021-08-18 20:51:15 +02:00
const src = $el.attr("src");
const lazySrc = $el.data("lazy-src");
2020-09-10 21:48:14 +02:00
2021-08-18 20:51:15 +02:00
if ($el.hasClass("loaded")) {
2020-09-10 21:48:14 +02:00
return;
}
if (src && src.length) {
$imgUrls.push(src);
}
if (lazySrc && lazySrc.length) {
$imgLazyUrls.push(lazySrc);
2021-08-18 20:51:15 +02:00
$el.addClass("loading");
2020-09-10 21:48:14 +02:00
AjaxUI.preload([lazySrc]).then(() => {
2021-08-18 20:51:15 +02:00
$el.attr("src", lazySrc);
2020-09-10 21:48:14 +02:00
$el.on(`${Events.LOADED}`, () => {
2021-08-18 20:51:15 +02:00
$el.addClass("loaded");
$el.removeClass("loading");
2020-09-10 21:48:14 +02:00
$el.trigger(`${Events.LAZYIMAGEREADY}`);
});
});
}
});
// load lazy backgrounds
$Body
2021-08-18 20:51:15 +02:00
.find("[data-lazy-bg]")
.not(".loaded")
2020-09-10 21:48:14 +02:00
.each((i, el) => {
const $el = $(el);
2021-08-18 20:51:15 +02:00
const lazySrc = $el.data("lazy-bg");
2020-09-10 21:48:14 +02:00
2021-08-18 20:51:15 +02:00
if ($el.hasClass("loaded")) {
2020-09-10 21:48:14 +02:00
return;
}
if (lazySrc && lazySrc.length) {
$imgLazyUrls.push(lazySrc);
2021-08-18 20:51:15 +02:00
$el.addClass("loading");
2020-09-10 21:48:14 +02:00
AjaxUI.preload([lazySrc]).then(() => {
2021-08-18 20:51:15 +02:00
$el.css({ "background-image": `url(${lazySrc})` });
2020-09-10 21:48:14 +02:00
2021-08-18 20:51:15 +02:00
$el.addClass("loaded");
$el.removeClass("loading");
2020-09-10 21:48:14 +02:00
$el.trigger(`${Events.LAZYIMAGEREADY}`);
});
}
});
// replace img src
$Body
2021-08-18 20:51:15 +02:00
.find("[data-src-replace]")
.not(".loaded")
2020-09-10 21:48:14 +02:00
.each((i, el) => {
const $el = $(el);
2021-08-18 20:51:15 +02:00
const lazySrc = $el.data("src-replace");
2020-09-10 21:48:14 +02:00
2021-08-18 20:51:15 +02:00
if ($el.hasClass("loaded")) {
2020-09-10 21:48:14 +02:00
return;
}
if (lazySrc && lazySrc.length) {
2021-08-18 20:51:15 +02:00
$el.addClass("loaded");
$el.attr("src", lazySrc);
2020-09-10 21:48:14 +02:00
}
});
// load defined images
AjaxUI.preload($imgUrls).then(() => {
2021-08-18 20:51:15 +02:00
$W.trigger("images-loaded");
2020-09-10 21:48:14 +02:00
// load lazy images
AjaxUI.preload($imgLazyUrls).then(() => {
console.log(`${NAME}: All images are loaded!`);
setTimeout(() => {
$W.trigger(`${Events.LAZYIMAGESREADY}`);
2021-08-18 20:51:15 +02:00
console.groupEnd("Post-init");
console.timeEnd("Post-init");
2020-09-10 21:48:14 +02:00
}, 100);
});
});
}
static dispose() {
console.log(`${NAME}: dispose`);
}
}
$W.on(
`${Events.MAININIT} ${Events.AJAX} ${Events.AJAXMAIN} ${Events.LOADED}`,
() => {
2021-08-18 20:51:15 +02:00
if ($W.hasClass("lock-main-init")) {
2020-09-10 22:53:35 +02:00
console.warn(`${NAME}: locked`);
2020-09-10 21:48:14 +02:00
return;
}
2021-08-18 20:51:15 +02:00
$W.addClass("lock-main-init");
2020-09-10 21:48:14 +02:00
MainUI.init();
2021-08-18 20:51:15 +02:00
}
2020-09-10 21:48:14 +02:00
);
$W.on(`${Events.RESIZE}`, () => {
MainUI.detectBootstrapScreenSize();
});
2021-08-18 20:51:15 +02:00
$W.on("beforeunload unload", () => {
2020-09-10 21:48:14 +02:00
Spinner.show(() => {
2021-08-18 20:51:15 +02:00
$Body.removeClass("loaded");
2020-09-10 21:48:14 +02:00
});
});
// hide spinner on target _blank
2021-01-04 07:45:07 +01:00
$('[target="_blank"],.external')
.not('[data-toggle="lightbox"],[data-lightbox-gallery]')
2021-08-18 20:51:15 +02:00
.on("click submit touch", (e) => {
2021-01-04 07:45:07 +01:00
console.log(`${NAME}: External link`);
setTimeout(() => {
Spinner.hide(() => {
2021-08-18 20:51:15 +02:00
$Body.addClass("loaded");
2021-01-04 07:45:07 +01:00
});
}, 1000);
});
2020-09-10 21:48:14 +02:00
W.MainUI = MainUI;
return MainUI;
2019-06-08 17:20:51 +02:00
})($);
export default MainUI;