@kwiz/common 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/_dependencies.d.ts +1 -0
- package/dist/_dependencies.js +8 -0
- package/dist/_dependencies.js.map +1 -0
- package/dist/helpers/Guid.d.ts +119 -0
- package/dist/helpers/Guid.js +183 -0
- package/dist/helpers/Guid.js.map +1 -0
- package/dist/helpers/_dependencies.d.ts +2 -0
- package/dist/helpers/_dependencies.js +21 -0
- package/dist/helpers/_dependencies.js.map +1 -0
- package/dist/helpers/base64.d.ts +8 -0
- package/dist/helpers/base64.js +178 -0
- package/dist/helpers/base64.js.map +1 -0
- package/dist/helpers/browser.d.ts +144 -0
- package/dist/helpers/browser.js +1200 -0
- package/dist/helpers/browser.js.map +1 -0
- package/dist/helpers/browserinfo.d.ts +23 -0
- package/dist/helpers/browserinfo.js +215 -0
- package/dist/helpers/browserinfo.js.map +1 -0
- package/dist/helpers/collections.base.d.ts +128 -0
- package/dist/helpers/collections.base.js +430 -0
- package/dist/helpers/collections.base.js.map +1 -0
- package/dist/helpers/collections.d.ts +18 -0
- package/dist/helpers/collections.js +99 -0
- package/dist/helpers/collections.js.map +1 -0
- package/dist/helpers/color.d.ts +11 -0
- package/dist/helpers/color.js +57 -0
- package/dist/helpers/color.js.map +1 -0
- package/dist/helpers/cookies.d.ts +6 -0
- package/dist/helpers/cookies.js +56 -0
- package/dist/helpers/cookies.js.map +1 -0
- package/dist/helpers/date.d.ts +43 -0
- package/dist/helpers/date.js +158 -0
- package/dist/helpers/date.js.map +1 -0
- package/dist/helpers/debug.d.ts +33 -0
- package/dist/helpers/debug.js +177 -0
- package/dist/helpers/debug.js.map +1 -0
- package/dist/helpers/emails.d.ts +2 -0
- package/dist/helpers/emails.js +10 -0
- package/dist/helpers/emails.js.map +1 -0
- package/dist/helpers/eval.d.ts +1 -0
- package/dist/helpers/eval.js +10 -0
- package/dist/helpers/eval.js.map +1 -0
- package/dist/helpers/file.d.ts +11 -0
- package/dist/helpers/file.js +55 -0
- package/dist/helpers/file.js.map +1 -0
- package/dist/helpers/flatted.d.ts +20 -0
- package/dist/helpers/flatted.js +135 -0
- package/dist/helpers/flatted.js.map +1 -0
- package/dist/helpers/functions.d.ts +4 -0
- package/dist/helpers/functions.js +17 -0
- package/dist/helpers/functions.js.map +1 -0
- package/dist/helpers/graph/calendar.types.d.ts +3 -0
- package/dist/helpers/graph/calendar.types.js +15 -0
- package/dist/helpers/graph/calendar.types.js.map +1 -0
- package/dist/helpers/http.d.ts +25 -0
- package/dist/helpers/http.js +70 -0
- package/dist/helpers/http.js.map +1 -0
- package/dist/helpers/images.d.ts +16 -0
- package/dist/helpers/images.js +21 -0
- package/dist/helpers/images.js.map +1 -0
- package/dist/helpers/index.d.ts +29 -0
- package/dist/helpers/index.js +46 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/json.d.ts +3 -0
- package/dist/helpers/json.js +44 -0
- package/dist/helpers/json.js.map +1 -0
- package/dist/helpers/md5.d.ts +5 -0
- package/dist/helpers/md5.js +172 -0
- package/dist/helpers/md5.js.map +1 -0
- package/dist/helpers/objects.d.ts +49 -0
- package/dist/helpers/objects.js +271 -0
- package/dist/helpers/objects.js.map +1 -0
- package/dist/helpers/promises.d.ts +14 -0
- package/dist/helpers/promises.js +112 -0
- package/dist/helpers/promises.js.map +1 -0
- package/dist/helpers/random.d.ts +2 -0
- package/dist/helpers/random.js +32 -0
- package/dist/helpers/random.js.map +1 -0
- package/dist/helpers/scheduler/scheduler.d.ts +39 -0
- package/dist/helpers/scheduler/scheduler.js +109 -0
- package/dist/helpers/scheduler/scheduler.js.map +1 -0
- package/dist/helpers/sharepoint.d.ts +112 -0
- package/dist/helpers/sharepoint.js +629 -0
- package/dist/helpers/sharepoint.js.map +1 -0
- package/dist/helpers/strings.d.ts +56 -0
- package/dist/helpers/strings.js +282 -0
- package/dist/helpers/strings.js.map +1 -0
- package/dist/helpers/typecheckers.d.ts +56 -0
- package/dist/helpers/typecheckers.js +274 -0
- package/dist/helpers/typecheckers.js.map +1 -0
- package/dist/helpers/url.d.ts +46 -0
- package/dist/helpers/url.js +199 -0
- package/dist/helpers/url.js.map +1 -0
- package/dist/helpers/urlhelper.d.ts +16 -0
- package/dist/helpers/urlhelper.js +96 -0
- package/dist/helpers/urlhelper.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/types/common.types.d.ts +19 -0
- package/dist/types/common.types.js +4 -0
- package/dist/types/common.types.js.map +1 -0
- package/dist/types/flatted.types.d.ts +49 -0
- package/dist/types/flatted.types.js +3 -0
- package/dist/types/flatted.types.js.map +1 -0
- package/dist/types/globals.types.d.ts +6 -0
- package/dist/types/globals.types.js +3 -0
- package/dist/types/globals.types.js.map +1 -0
- package/dist/types/graph/calendar.types.d.ts +79 -0
- package/dist/types/graph/calendar.types.js +3 -0
- package/dist/types/graph/calendar.types.js.map +1 -0
- package/dist/types/graph/index.d.ts +1 -0
- package/dist/types/graph/index.js +18 -0
- package/dist/types/graph/index.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.js +28 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/knownscript.types.d.ts +22 -0
- package/dist/types/knownscript.types.js +3 -0
- package/dist/types/knownscript.types.js.map +1 -0
- package/dist/types/libs/datajs.types.d.ts +29 -0
- package/dist/types/libs/datajs.types.js +3 -0
- package/dist/types/libs/datajs.types.js.map +1 -0
- package/dist/types/libs/ics.types.d.ts +29 -0
- package/dist/types/libs/ics.types.js +3 -0
- package/dist/types/libs/ics.types.js.map +1 -0
- package/dist/types/libs/index.d.ts +3 -0
- package/dist/types/libs/index.js +20 -0
- package/dist/types/libs/index.js.map +1 -0
- package/dist/types/libs/msal.types.d.ts +33 -0
- package/dist/types/libs/msal.types.js +63 -0
- package/dist/types/libs/msal.types.js.map +1 -0
- package/dist/types/locales.d.ts +122 -0
- package/dist/types/locales.js +1 -0
- package/dist/types/locales.js.map +1 -0
- package/dist/types/localstoragecache.types.d.ts +8 -0
- package/dist/types/localstoragecache.types.js +3 -0
- package/dist/types/localstoragecache.types.js.map +1 -0
- package/dist/types/moment.d.ts +6 -0
- package/dist/types/moment.js +1 -0
- package/dist/types/moment.js.map +1 -0
- package/dist/types/regex.types.d.ts +14 -0
- package/dist/types/regex.types.js +3 -0
- package/dist/types/regex.types.js.map +1 -0
- package/dist/types/rest.types.d.ts +81 -0
- package/dist/types/rest.types.js +24 -0
- package/dist/types/rest.types.js.map +1 -0
- package/dist/types/sharepoint.types.d.ts +1432 -0
- package/dist/types/sharepoint.types.js +629 -0
- package/dist/types/sharepoint.types.js.map +1 -0
- package/dist/types/sharepoint.utils.types.d.ts +246 -0
- package/dist/types/sharepoint.utils.types.js +26 -0
- package/dist/types/sharepoint.utils.types.js.map +1 -0
- package/dist/utils/_dependencies.d.ts +3 -0
- package/dist/utils/_dependencies.js +24 -0
- package/dist/utils/_dependencies.js.map +1 -0
- package/dist/utils/base64.d.ts +2 -0
- package/dist/utils/base64.js +41 -0
- package/dist/utils/base64.js.map +1 -0
- package/dist/utils/consolelogger.d.ts +73 -0
- package/dist/utils/consolelogger.js +281 -0
- package/dist/utils/consolelogger.js.map +1 -0
- package/dist/utils/date.d.ts +10 -0
- package/dist/utils/date.js +30 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/emails.d.ts +2 -0
- package/dist/utils/emails.js +24 -0
- package/dist/utils/emails.js.map +1 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.js +31 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/knownscript.d.ts +99 -0
- package/dist/utils/knownscript.js +261 -0
- package/dist/utils/knownscript.js.map +1 -0
- package/dist/utils/localstoragecache.d.ts +19 -0
- package/dist/utils/localstoragecache.js +372 -0
- package/dist/utils/localstoragecache.js.map +1 -0
- package/dist/utils/rest.d.ts +17 -0
- package/dist/utils/rest.js +402 -0
- package/dist/utils/rest.js.map +1 -0
- package/dist/utils/script.d.ts +33 -0
- package/dist/utils/script.js +169 -0
- package/dist/utils/script.js.map +1 -0
- package/dist/utils/sharepoint.rest/common.d.ts +32 -0
- package/dist/utils/sharepoint.rest/common.js +146 -0
- package/dist/utils/sharepoint.rest/common.js.map +1 -0
- package/dist/utils/sharepoint.rest/date.d.ts +2 -0
- package/dist/utils/sharepoint.rest/date.js +57 -0
- package/dist/utils/sharepoint.rest/date.js.map +1 -0
- package/dist/utils/sharepoint.rest/file.folder.d.ts +58 -0
- package/dist/utils/sharepoint.rest/file.folder.js +305 -0
- package/dist/utils/sharepoint.rest/file.folder.js.map +1 -0
- package/dist/utils/sharepoint.rest/index.d.ts +11 -0
- package/dist/utils/sharepoint.rest/index.js +28 -0
- package/dist/utils/sharepoint.rest/index.js.map +1 -0
- package/dist/utils/sharepoint.rest/item.d.ts +81 -0
- package/dist/utils/sharepoint.rest/item.js +444 -0
- package/dist/utils/sharepoint.rest/item.js.map +1 -0
- package/dist/utils/sharepoint.rest/list.d.ts +228 -0
- package/dist/utils/sharepoint.rest/list.js +868 -0
- package/dist/utils/sharepoint.rest/list.js.map +1 -0
- package/dist/utils/sharepoint.rest/listutils/GetListItemsByCaml.d.ts +19 -0
- package/dist/utils/sharepoint.rest/listutils/GetListItemsByCaml.js +629 -0
- package/dist/utils/sharepoint.rest/listutils/GetListItemsByCaml.js.map +1 -0
- package/dist/utils/sharepoint.rest/listutils/GetListItemsById.d.ts +14 -0
- package/dist/utils/sharepoint.rest/listutils/GetListItemsById.js +222 -0
- package/dist/utils/sharepoint.rest/listutils/GetListItemsById.js.map +1 -0
- package/dist/utils/sharepoint.rest/listutils/common.d.ts +3 -0
- package/dist/utils/sharepoint.rest/listutils/common.js +198 -0
- package/dist/utils/sharepoint.rest/listutils/common.js.map +1 -0
- package/dist/utils/sharepoint.rest/user-search.d.ts +76 -0
- package/dist/utils/sharepoint.rest/user-search.js +239 -0
- package/dist/utils/sharepoint.rest/user-search.js.map +1 -0
- package/dist/utils/sharepoint.rest/user.d.ts +71 -0
- package/dist/utils/sharepoint.rest/user.js +404 -0
- package/dist/utils/sharepoint.rest/user.js.map +1 -0
- package/dist/utils/sharepoint.rest/web.d.ts +107 -0
- package/dist/utils/sharepoint.rest/web.js +929 -0
- package/dist/utils/sharepoint.rest/web.js.map +1 -0
- package/dist/utils/sod.d.ts +29 -0
- package/dist/utils/sod.js +177 -0
- package/dist/utils/sod.js.map +1 -0
- package/package.json +60 -0
- package/readme.md +13 -0
- package/src/_dependencies.ts +2 -0
- package/src/helpers/Guid.ts +182 -0
- package/src/helpers/_dependencies.ts +3 -0
- package/src/helpers/base64.ts +174 -0
- package/src/helpers/browser.test.js +9 -0
- package/src/helpers/browser.ts +1299 -0
- package/src/helpers/browserinfo.ts +293 -0
- package/src/helpers/collections.base.test.js +26 -0
- package/src/helpers/collections.base.ts +439 -0
- package/src/helpers/collections.ts +108 -0
- package/src/helpers/color.ts +55 -0
- package/src/helpers/cookies.ts +55 -0
- package/src/helpers/date.test.js +97 -0
- package/src/helpers/date.ts +163 -0
- package/src/helpers/debug.ts +187 -0
- package/src/helpers/emails.ts +7 -0
- package/src/helpers/eval.ts +5 -0
- package/src/helpers/file.test.js +51 -0
- package/src/helpers/file.ts +59 -0
- package/src/helpers/flatted.ts +150 -0
- package/src/helpers/functions.ts +17 -0
- package/src/helpers/graph/calendar.types.ts +11 -0
- package/src/helpers/http.ts +70 -0
- package/src/helpers/images.ts +23 -0
- package/src/helpers/index.ts +29 -0
- package/src/helpers/json.ts +39 -0
- package/src/helpers/md5.ts +190 -0
- package/src/helpers/objects.test.js +27 -0
- package/src/helpers/objects.ts +256 -0
- package/src/helpers/promises.test.js +18 -0
- package/src/helpers/promises.ts +102 -0
- package/src/helpers/random.ts +27 -0
- package/src/helpers/scheduler/scheduler.test.js +104 -0
- package/src/helpers/scheduler/scheduler.ts +132 -0
- package/src/helpers/sharepoint.ts +681 -0
- package/src/helpers/strings.test.js +43 -0
- package/src/helpers/strings.ts +288 -0
- package/src/helpers/typecheckers.test.js +35 -0
- package/src/helpers/typecheckers.ts +263 -0
- package/src/helpers/url.test.js +18 -0
- package/src/helpers/url.ts +202 -0
- package/src/helpers/urlhelper.ts +104 -0
- package/src/index.ts +24 -0
- package/src/types/common.types.ts +16 -0
- package/src/types/flatted.types.ts +60 -0
- package/src/types/globals.types.ts +7 -0
- package/src/types/graph/calendar.types.ts +81 -0
- package/src/types/graph/index.ts +1 -0
- package/src/types/index.ts +12 -0
- package/src/types/knownscript.types.ts +19 -0
- package/src/types/libs/datajs.types.ts +29 -0
- package/src/types/libs/ics.types.ts +31 -0
- package/src/types/libs/index.ts +4 -0
- package/src/types/libs/msal.types.ts +79 -0
- package/src/types/locales.ts +125 -0
- package/src/types/localstoragecache.types.ts +9 -0
- package/src/types/moment.ts +7 -0
- package/src/types/regex.types.ts +17 -0
- package/src/types/rest.types.ts +94 -0
- package/src/types/sharepoint.types.ts +1413 -0
- package/src/types/sharepoint.utils.types.ts +246 -0
- package/src/utils/_dependencies.ts +4 -0
- package/src/utils/base64.ts +27 -0
- package/src/utils/consolelogger.ts +315 -0
- package/src/utils/date.ts +36 -0
- package/src/utils/emails.ts +25 -0
- package/src/utils/index.ts +13 -0
- package/src/utils/knownscript.ts +280 -0
- package/src/utils/localstoragecache.ts +419 -0
- package/src/utils/rest.ts +465 -0
- package/src/utils/script.ts +168 -0
- package/src/utils/sharepoint.rest/common.ts +149 -0
- package/src/utils/sharepoint.rest/date.ts +61 -0
- package/src/utils/sharepoint.rest/file.folder.ts +368 -0
- package/src/utils/sharepoint.rest/index.ts +11 -0
- package/src/utils/sharepoint.rest/item.ts +456 -0
- package/src/utils/sharepoint.rest/list.ts +1144 -0
- package/src/utils/sharepoint.rest/listutils/GetListItemsByCaml.ts +750 -0
- package/src/utils/sharepoint.rest/listutils/GetListItemsById.ts +265 -0
- package/src/utils/sharepoint.rest/listutils/common.ts +202 -0
- package/src/utils/sharepoint.rest/user-search.ts +254 -0
- package/src/utils/sharepoint.rest/user.ts +447 -0
- package/src/utils/sharepoint.rest/web.ts +1031 -0
- package/src/utils/sod.ts +193 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,1200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.interval = exports.debounce = exports.addEventListeners = exports.ScriptEncode = exports.HTMLDecode = exports.HTMLEncode = exports.isIFrameAccessible = exports.isInsideIFrame = exports.createHtmlElement = exports.createStylesheet = exports.addStyleSheet = exports.delayAsync = exports.waitForAsync = exports.waitFor = exports.waitForWindowObject = exports.composePath = exports.setSelectOptionByIndex = exports.setSelectOptionByValue = exports.getSelectedOption = exports.getSelectOptionByIndex = exports.getSelectOptionByValue = exports.removeAttributeFromHTMLElements = exports.removeHTMLElement = exports.emptyHTMLElement = exports.isNode = exports.isElement = exports.getAnimationEndEventName = exports.getAnimationFlags = exports.getPageHidden = exports.computedStyleToInlineStyle = exports.cumulativeOffset = exports.getScrollbarWidth = exports.getScrollParent = exports.querySelectorAllMaintainOrder = exports.querySelectorAllFirstOrNull = exports.isElementVisible = exports.removeDOMChangedObserver = exports.registerDOMChangedObserver = exports.registerModernThemeChanged = exports.registerModernInplaceNavigationOnInit = exports.registerDocumentLoadComplete = exports.registerDOMContentLoadedListener = exports.HtmlTextContents = exports.elementFromHtml = exports.copyToClipboard = exports.copyTextToClipboard = exports.downloadFile = exports.saveFile = exports.addEventHandler = exports.triggerNativeEvent = void 0;
|
|
13
|
+
exports.getUniqueElementId = exports.getLoadingOverlayHtml = exports.hideLoadingOverlay = exports.showLoadingOverlay = exports.loadModernFormsCSS = exports.findAcestor = exports.isChildOf = exports.DisableAnchorInterceptInHtml = exports.DisableAnchorIntercept = exports.DisableAnchorInterceptValue = exports.DisableAnchorInterceptAttribute = exports.registerUrlChanged = exports.getReactInstanceFromElement = exports.addStyleElement = exports.dispatchCustomEvent = exports.OnWindowResize = exports.throttle = void 0;
|
|
14
|
+
const collections_base_1 = require("./collections.base");
|
|
15
|
+
const images_1 = require("./images");
|
|
16
|
+
const random_1 = require("./random");
|
|
17
|
+
const strings_1 = require("./strings");
|
|
18
|
+
const typecheckers_1 = require("./typecheckers");
|
|
19
|
+
function triggerNativeEvent(ele, eventName) {
|
|
20
|
+
if ((0, typecheckers_1.isNullOrUndefined)(ele)) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (!(0, typecheckers_1.isNullOrUndefined)(ele.fireEvent)) { // < IE9
|
|
24
|
+
ele.fireEvent('on' + eventName);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Different events have different event classes.
|
|
28
|
+
// If this switch statement can't map an eventName to an eventClass,
|
|
29
|
+
// the event firing is going to fail.
|
|
30
|
+
let eventClass = "Events";
|
|
31
|
+
switch (eventName) {
|
|
32
|
+
case "click": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.
|
|
33
|
+
case "mousedown":
|
|
34
|
+
case "mouseup":
|
|
35
|
+
eventClass = "MouseEvents";
|
|
36
|
+
break;
|
|
37
|
+
case "focus":
|
|
38
|
+
case "change":
|
|
39
|
+
case "blur":
|
|
40
|
+
case "select":
|
|
41
|
+
eventClass = "HTMLEvents";
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
eventClass = "CustomEvent";
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
var evt = document.createEvent(eventClass);
|
|
48
|
+
evt.initEvent(eventName, true, true);
|
|
49
|
+
ele.dispatchEvent(evt);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.triggerNativeEvent = triggerNativeEvent;
|
|
53
|
+
function addEventHandler(elm, event, handler) {
|
|
54
|
+
if ((0, typecheckers_1.isUndefined)(elm.addEventListener)) //IE8
|
|
55
|
+
elm.attachEvent("on" + event, handler);
|
|
56
|
+
else
|
|
57
|
+
elm.addEventListener(event, handler, false);
|
|
58
|
+
}
|
|
59
|
+
exports.addEventHandler = addEventHandler;
|
|
60
|
+
/** prompts user to save/download a text file */
|
|
61
|
+
function saveFile(fileName, fileData, type) {
|
|
62
|
+
//Issue 6003
|
|
63
|
+
let blobObject = new Blob([fileData], { type: `${type};charset=utf-8;` });
|
|
64
|
+
if (window.Blob && window.navigator["msSaveOrOpenBlob"]) {
|
|
65
|
+
//edge/IE
|
|
66
|
+
window.navigator["msSaveOrOpenBlob"](blobObject, fileName);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
//Issue 6025
|
|
70
|
+
//var encodedUri = `data:${type};charset=utf-8,` + encodeURIComponent(fileData);
|
|
71
|
+
let link = document.getElementById('kwizcom_download_link_tmp');
|
|
72
|
+
if (link) {
|
|
73
|
+
link.remove();
|
|
74
|
+
link = null;
|
|
75
|
+
}
|
|
76
|
+
var url = URL.createObjectURL(blobObject);
|
|
77
|
+
if (!link) {
|
|
78
|
+
link = document.createElement("a");
|
|
79
|
+
link.style.position = "fixed";
|
|
80
|
+
link.style.top = "-200px";
|
|
81
|
+
link.download = fileName;
|
|
82
|
+
link.innerHTML = "Click Here to download";
|
|
83
|
+
DisableAnchorIntercept(link);
|
|
84
|
+
link.id = "kwizcom_download_link_tmp";
|
|
85
|
+
document.body.appendChild(link); // Required for FF
|
|
86
|
+
link.href = url;
|
|
87
|
+
}
|
|
88
|
+
window.setTimeout(() => {
|
|
89
|
+
link.click();
|
|
90
|
+
}, 200);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.saveFile = saveFile;
|
|
94
|
+
/** force browser to download instead of opening a file */
|
|
95
|
+
function downloadFile(url) {
|
|
96
|
+
var link = document.createElement('a');
|
|
97
|
+
link.href = url;
|
|
98
|
+
var parts = link.href.replace(/\\/g, "/").split('/');
|
|
99
|
+
var fileName = parts[parts.length - 1];
|
|
100
|
+
link.download = fileName;
|
|
101
|
+
DisableAnchorIntercept(link);
|
|
102
|
+
document.body.appendChild(link);
|
|
103
|
+
link.click();
|
|
104
|
+
document.body.removeChild(link);
|
|
105
|
+
}
|
|
106
|
+
exports.downloadFile = downloadFile;
|
|
107
|
+
function copyTextToClipboard(text) {
|
|
108
|
+
var input = document.createElement("input");
|
|
109
|
+
input.value = text;
|
|
110
|
+
input.style.position = "absolute";
|
|
111
|
+
input.style.top = "-100px";
|
|
112
|
+
input.style.left = "-100px";
|
|
113
|
+
document.body.appendChild(input);
|
|
114
|
+
let copied = copyToClipboard(input);
|
|
115
|
+
input.remove();
|
|
116
|
+
return copied;
|
|
117
|
+
}
|
|
118
|
+
exports.copyTextToClipboard = copyTextToClipboard;
|
|
119
|
+
/** copies the text of an element to the clipboard. if not supported by browser - will return false so caller must check and show
|
|
120
|
+
* a message to the user asking him to hit ctrl+c
|
|
121
|
+
*/
|
|
122
|
+
function copyToClipboard(el) {
|
|
123
|
+
// Copy textarea, pre, div, etc.
|
|
124
|
+
if (document.body.createTextRange) {
|
|
125
|
+
// IE
|
|
126
|
+
var textRange = document.body.createTextRange();
|
|
127
|
+
textRange.moveToElementText(el);
|
|
128
|
+
textRange.select();
|
|
129
|
+
textRange.execCommand("Copy");
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
else if (window.getSelection && document.createRange) {
|
|
133
|
+
// non-IE
|
|
134
|
+
var editable = el.contentEditable; // Record contentEditable status of element
|
|
135
|
+
var readOnly = el.readOnly; // Record readOnly status of element
|
|
136
|
+
el.contentEditable = true; // iOS will only select text on non-form elements if contentEditable = true;
|
|
137
|
+
el.readOnly = false; // iOS will not select in a read only form element
|
|
138
|
+
var range = document.createRange();
|
|
139
|
+
range.selectNodeContents(el);
|
|
140
|
+
var sel = window.getSelection();
|
|
141
|
+
sel.removeAllRanges();
|
|
142
|
+
sel.addRange(range); // Does not work for Firefox if a textarea or input
|
|
143
|
+
if (el.nodeName === "TEXTAREA" || el.nodeName === "INPUT")
|
|
144
|
+
el.select(); // Firefox will only select a form element with select()
|
|
145
|
+
if (el.setSelectionRange && navigator.userAgent.match(/ipad|ipod|iphone/i))
|
|
146
|
+
el.setSelectionRange(0, 999999); // iOS only selects "form" elements with SelectionRange
|
|
147
|
+
el.contentEditable = editable; // Restore previous contentEditable status
|
|
148
|
+
el.readOnly = readOnly; // Restore previous readOnly status
|
|
149
|
+
if (document.queryCommandSupported("copy")) {
|
|
150
|
+
var successful = document.execCommand('copy');
|
|
151
|
+
if (successful)
|
|
152
|
+
return true;
|
|
153
|
+
else
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
if (!navigator.userAgent.match(/ipad|ipod|iphone|android|silk/i))
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
exports.copyToClipboard = copyToClipboard;
|
|
164
|
+
/** wraps the html in a div element and returns it */
|
|
165
|
+
function elementFromHtml(html) {
|
|
166
|
+
var d = document.createElement("div");
|
|
167
|
+
d.innerHTML = html;
|
|
168
|
+
return d;
|
|
169
|
+
}
|
|
170
|
+
exports.elementFromHtml = elementFromHtml;
|
|
171
|
+
function HtmlTextContents(htmlElement) {
|
|
172
|
+
let innerText = ((0, typecheckers_1.isString)(htmlElement) ? elementFromHtml(htmlElement) : htmlElement).innerText;
|
|
173
|
+
return (0, strings_1.stripRichTextWhitespace)(innerText.replace(/\n/g, " ").replace(/ {2}/g, " "));
|
|
174
|
+
}
|
|
175
|
+
exports.HtmlTextContents = HtmlTextContents;
|
|
176
|
+
function registerDOMContentLoadedListener(doc) {
|
|
177
|
+
return new Promise((resolve, reject) => {
|
|
178
|
+
doc = doc || document;
|
|
179
|
+
if ((0, typecheckers_1.isNullOrUndefined)(doc)) {
|
|
180
|
+
reject();
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (!(0, typecheckers_1.isNullOrUndefined)(doc) && doc.readyState === "loading") {
|
|
184
|
+
doc.addEventListener("DOMContentLoaded", () => {
|
|
185
|
+
resolve();
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
resolve();
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
exports.registerDOMContentLoadedListener = registerDOMContentLoadedListener;
|
|
194
|
+
function registerDocumentLoadComplete(doc) {
|
|
195
|
+
return new Promise((resolve, reject) => {
|
|
196
|
+
doc = doc || document;
|
|
197
|
+
if ((0, typecheckers_1.isNullOrUndefined)(doc) || !(0, typecheckers_1.isFunction)(doc.addEventListener)) {
|
|
198
|
+
reject();
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (doc.readyState === "complete") {
|
|
202
|
+
resolve();
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
doc.addEventListener("readystatechange", () => {
|
|
206
|
+
if (doc.readyState === "complete") {
|
|
207
|
+
resolve();
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
exports.registerDocumentLoadComplete = registerDocumentLoadComplete;
|
|
214
|
+
/** on modern experience, using navagation does inplace-page update.
|
|
215
|
+
* document ready, and all windows events will not trigger and global objects will remain.
|
|
216
|
+
* our app loader will fire this event when the page does that navigation so we can hook up to be notified.
|
|
217
|
+
*/
|
|
218
|
+
function registerModernInplaceNavigationOnInit(handler) {
|
|
219
|
+
addEventHandler(document, "kwOnInit", handler);
|
|
220
|
+
}
|
|
221
|
+
exports.registerModernInplaceNavigationOnInit = registerModernInplaceNavigationOnInit;
|
|
222
|
+
/** Triggers handler when theme changes on a modern page
|
|
223
|
+
* When the user changes the site's theme, or when navigating to a sub-site, or clicking back
|
|
224
|
+
* in the browser navigating back to parent site with different theme
|
|
225
|
+
*/
|
|
226
|
+
function registerModernThemeChanged(handler) {
|
|
227
|
+
addEventHandler(document, "kwOnThemeChanged", handler);
|
|
228
|
+
}
|
|
229
|
+
exports.registerModernThemeChanged = registerModernThemeChanged;
|
|
230
|
+
let _DOMChangedObserverDefs = [];
|
|
231
|
+
function _getDOMChangedObserverDef(ele) {
|
|
232
|
+
if (!isElement(ele)) {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
let existingDef = _DOMChangedObserverDefs.filter((observer) => {
|
|
236
|
+
let observerEle = observer.ele;
|
|
237
|
+
return isElement(observerEle) && observerEle.isSameNode(ele);
|
|
238
|
+
})[0];
|
|
239
|
+
return existingDef;
|
|
240
|
+
}
|
|
241
|
+
function _getDomObserverCallbackInfo(callbackOrHandler) {
|
|
242
|
+
return {
|
|
243
|
+
handler: (0, typecheckers_1.isNullOrUndefined)(callbackOrHandler) ? null : (0, typecheckers_1.isFunction)(callbackOrHandler) ? callbackOrHandler : callbackOrHandler.handler,
|
|
244
|
+
key: (0, typecheckers_1.isNullOrUndefined)(callbackOrHandler) || (0, typecheckers_1.isFunction)(callbackOrHandler) ? null : callbackOrHandler.key
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
function registerDOMChangedObserver(callbackOrHandler, ele) {
|
|
248
|
+
let callbackInfo = _getDomObserverCallbackInfo(callbackOrHandler);
|
|
249
|
+
if (!(0, typecheckers_1.isFunction)(callbackInfo.handler)) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
var win;
|
|
253
|
+
var doc;
|
|
254
|
+
if (ele) {
|
|
255
|
+
try {
|
|
256
|
+
doc = ele.ownerDocument;
|
|
257
|
+
win = doc.defaultView || doc.parentWindow;
|
|
258
|
+
}
|
|
259
|
+
catch (ex) {
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
win = window;
|
|
264
|
+
doc = window && window.document;
|
|
265
|
+
ele = doc.body;
|
|
266
|
+
}
|
|
267
|
+
if ((0, typecheckers_1.isNullOrUndefined)(win) || (0, typecheckers_1.isNullOrUndefined)(doc)) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
registerDOMContentLoadedListener(win.document).then(() => {
|
|
271
|
+
let existingDef = _getDOMChangedObserverDef(ele);
|
|
272
|
+
if (!(0, typecheckers_1.isNullOrUndefined)(existingDef)) {
|
|
273
|
+
let existingCallbackIndex = (0, typecheckers_1.isNullOrEmptyString)(callbackInfo.key) ? -1 : (0, collections_base_1.firstIndexOf)(existingDef.callbacks, cb => cb.key === callbackInfo.key);
|
|
274
|
+
if (existingCallbackIndex >= 0) {
|
|
275
|
+
//replace
|
|
276
|
+
existingDef.callbacks[existingCallbackIndex].handler = callbackInfo.handler;
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
existingDef.callbacks.push(callbackInfo);
|
|
280
|
+
}
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
let newDef = {
|
|
284
|
+
ele: ele,
|
|
285
|
+
callbacks: [callbackInfo]
|
|
286
|
+
};
|
|
287
|
+
let onDomChanged = debounce(() => {
|
|
288
|
+
if (!(0, typecheckers_1.isNullOrUndefined)(newDef) && !(0, typecheckers_1.isNullOrEmptyArray)(newDef.callbacks)) {
|
|
289
|
+
newDef.callbacks.forEach((c) => {
|
|
290
|
+
try {
|
|
291
|
+
c.handler();
|
|
292
|
+
}
|
|
293
|
+
catch (e) { }
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}, 100);
|
|
297
|
+
if ("MutationObserver" in win) {
|
|
298
|
+
let observer = new win.MutationObserver((mutations) => {
|
|
299
|
+
let hasUpdates = mutations.some((mutation) => {
|
|
300
|
+
return !!mutation.addedNodes && !!mutation.addedNodes.length
|
|
301
|
+
|| !!mutation.removedNodes && !!mutation.removedNodes.length;
|
|
302
|
+
});
|
|
303
|
+
if (hasUpdates) {
|
|
304
|
+
onDomChanged();
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
observer.observe(ele, {
|
|
308
|
+
childList: true,
|
|
309
|
+
subtree: true,
|
|
310
|
+
attributes: false,
|
|
311
|
+
characterData: false
|
|
312
|
+
});
|
|
313
|
+
newDef.disconnect = () => {
|
|
314
|
+
observer.disconnect();
|
|
315
|
+
observer = null;
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
let domEvents = ["DOMNodeInsertedIntoDocument", "DOMNodeRemovedFromDocument"];
|
|
320
|
+
domEvents.forEach((eventName) => {
|
|
321
|
+
newDef.ele.addEventListener(eventName, onDomChanged, false);
|
|
322
|
+
});
|
|
323
|
+
newDef.disconnect = () => {
|
|
324
|
+
domEvents.forEach((eventName) => {
|
|
325
|
+
newDef.ele.removeEventListener(eventName, onDomChanged, false);
|
|
326
|
+
});
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
_DOMChangedObserverDefs.push(newDef);
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
exports.registerDOMChangedObserver = registerDOMChangedObserver;
|
|
333
|
+
function removeDOMChangedObserver(callbackOrHandler, ele) {
|
|
334
|
+
let callbackInfo = _getDomObserverCallbackInfo(callbackOrHandler);
|
|
335
|
+
if (!(0, typecheckers_1.isFunction)(callbackInfo.handler) && (0, typecheckers_1.isNullOrEmptyString)(callbackInfo.key)) {
|
|
336
|
+
return; //need function or key to remove
|
|
337
|
+
}
|
|
338
|
+
var win;
|
|
339
|
+
var doc;
|
|
340
|
+
if (ele) {
|
|
341
|
+
try {
|
|
342
|
+
doc = ele.ownerDocument;
|
|
343
|
+
win = doc.defaultView || doc.parentWindow;
|
|
344
|
+
}
|
|
345
|
+
catch (ex) {
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
win = window;
|
|
350
|
+
doc = window && window.document;
|
|
351
|
+
ele = doc.body;
|
|
352
|
+
}
|
|
353
|
+
if ((0, typecheckers_1.isNullOrUndefined)(win) || (0, typecheckers_1.isNullOrUndefined)(doc)) {
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
registerDOMContentLoadedListener(win.document).then(() => {
|
|
357
|
+
let existingDef = _getDOMChangedObserverDef(ele);
|
|
358
|
+
if ((0, typecheckers_1.isNullOrUndefined)(existingDef) || !isElement(existingDef.ele)) {
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
if (!(0, typecheckers_1.isNullOrEmptyString)(callbackInfo.key)) //find by key
|
|
362
|
+
{
|
|
363
|
+
existingDef.callbacks = existingDef.callbacks.filter((cb) => {
|
|
364
|
+
return cb.key !== callbackInfo.key;
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
else //find by handler - probably won't work for functions that are declared inline
|
|
368
|
+
{
|
|
369
|
+
existingDef.callbacks = existingDef.callbacks.filter((cb) => {
|
|
370
|
+
return (0, typecheckers_1.isNullOrEmptyString)(cb.key) && cb.handler !== callbackInfo.handler;
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
if (existingDef.callbacks.length === 0) {
|
|
374
|
+
existingDef.disconnect();
|
|
375
|
+
_DOMChangedObserverDefs = _DOMChangedObserverDefs.filter((def) => {
|
|
376
|
+
return def !== existingDef;
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
exports.removeDOMChangedObserver = removeDOMChangedObserver;
|
|
382
|
+
function isElementVisible(ele) {
|
|
383
|
+
//must be a valid element
|
|
384
|
+
if (!isElement(ele) || !ele.getAttribute) {
|
|
385
|
+
return false;
|
|
386
|
+
}
|
|
387
|
+
try {
|
|
388
|
+
var doc = ele.ownerDocument;
|
|
389
|
+
var win = doc.defaultView || doc.parentWindow;
|
|
390
|
+
var computed = win.getComputedStyle(ele);
|
|
391
|
+
return !!(computed.display.toLowerCase() !== "none"
|
|
392
|
+
&& computed.visibility.toLowerCase() !== "hidden"
|
|
393
|
+
&& (ele.offsetWidth !== 0
|
|
394
|
+
|| ele.offsetHeight !== 0
|
|
395
|
+
|| ele.offsetParent !== null
|
|
396
|
+
|| ele.getClientRects().length));
|
|
397
|
+
}
|
|
398
|
+
catch (ex) {
|
|
399
|
+
}
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
exports.isElementVisible = isElementVisible;
|
|
403
|
+
function querySelectorAllFirstOrNull(selectors, maintainOrder = false) {
|
|
404
|
+
if ((0, typecheckers_1.isNullOrUndefined)(selectors)) {
|
|
405
|
+
return null;
|
|
406
|
+
}
|
|
407
|
+
if (maintainOrder) {
|
|
408
|
+
return (querySelectorAllMaintainOrder(selectors)[0] || null);
|
|
409
|
+
}
|
|
410
|
+
else {
|
|
411
|
+
var result = (0, typecheckers_1.isString)(selectors) && !(0, typecheckers_1.isNullOrEmptyString)(selectors) ? document.querySelectorAll(selectors)[0] :
|
|
412
|
+
Array.isArray(selectors) ? document.querySelectorAll(selectors.join(","))[0] : null;
|
|
413
|
+
return (result || null);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
exports.querySelectorAllFirstOrNull = querySelectorAllFirstOrNull;
|
|
417
|
+
function querySelectorAllMaintainOrder(selectors, parent) {
|
|
418
|
+
if ((0, typecheckers_1.isNullOrUndefined)(selectors)) {
|
|
419
|
+
return null;
|
|
420
|
+
}
|
|
421
|
+
var query;
|
|
422
|
+
if ((0, typecheckers_1.isString)(selectors) && !(0, typecheckers_1.isNullOrEmptyString)(selectors)) {
|
|
423
|
+
query = selectors.split(",");
|
|
424
|
+
}
|
|
425
|
+
if (Array.isArray(selectors)) {
|
|
426
|
+
query = selectors;
|
|
427
|
+
}
|
|
428
|
+
var eles = [];
|
|
429
|
+
parent = parent || document;
|
|
430
|
+
query.forEach((selector) => {
|
|
431
|
+
if ((0, typecheckers_1.isString)(selector) && !(0, typecheckers_1.isNullOrEmptyString)(selector)) {
|
|
432
|
+
var result = Array.prototype.slice.call(parent.querySelectorAll(selector));
|
|
433
|
+
eles = eles.concat(result);
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
return eles;
|
|
437
|
+
}
|
|
438
|
+
exports.querySelectorAllMaintainOrder = querySelectorAllMaintainOrder;
|
|
439
|
+
function getScrollParent(node) {
|
|
440
|
+
if (node === null) {
|
|
441
|
+
return null;
|
|
442
|
+
}
|
|
443
|
+
if (node.scrollHeight > node.clientHeight) {
|
|
444
|
+
return node;
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
return getScrollParent(node.parentNode);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
exports.getScrollParent = getScrollParent;
|
|
451
|
+
var _scrollbarWidth = -1;
|
|
452
|
+
function getScrollbarWidth() {
|
|
453
|
+
if (_scrollbarWidth < 0) {
|
|
454
|
+
var outer = document.createElement("div");
|
|
455
|
+
outer.style.visibility = "hidden";
|
|
456
|
+
outer.style.width = "100px";
|
|
457
|
+
outer.style["msOverflowStyle"] = "scrollbar"; // needed for WinJS apps
|
|
458
|
+
document.body.appendChild(outer);
|
|
459
|
+
var widthNoScroll = outer.offsetWidth;
|
|
460
|
+
// force scrollbars
|
|
461
|
+
outer.style.overflow = "scroll";
|
|
462
|
+
// add innerdiv
|
|
463
|
+
var inner = document.createElement("div");
|
|
464
|
+
inner.style.width = "100%";
|
|
465
|
+
outer.appendChild(inner);
|
|
466
|
+
var widthWithScroll = inner.offsetWidth;
|
|
467
|
+
// remove divs
|
|
468
|
+
outer.parentNode.removeChild(outer);
|
|
469
|
+
_scrollbarWidth = widthNoScroll - widthWithScroll;
|
|
470
|
+
}
|
|
471
|
+
return _scrollbarWidth;
|
|
472
|
+
}
|
|
473
|
+
exports.getScrollbarWidth = getScrollbarWidth;
|
|
474
|
+
function cumulativeOffset(element) {
|
|
475
|
+
var top = 0, left = 0;
|
|
476
|
+
do {
|
|
477
|
+
top += element.offsetTop || 0;
|
|
478
|
+
left += element.offsetLeft || 0;
|
|
479
|
+
element = element.offsetParent;
|
|
480
|
+
} while (element);
|
|
481
|
+
return {
|
|
482
|
+
top: top,
|
|
483
|
+
left: left
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
exports.cumulativeOffset = cumulativeOffset;
|
|
487
|
+
function computedStyleToInlineStyle(elm, options = { recursive: true, removeClassNames: true }) {
|
|
488
|
+
if (!elm) {
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
if (options.recursive && elm.children && elm.children.length) {
|
|
492
|
+
var children = Array.prototype.slice.call(elm.children);
|
|
493
|
+
children.forEach(child => {
|
|
494
|
+
computedStyleToInlineStyle(child, options);
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
var computedStyle = window.getComputedStyle(elm);
|
|
498
|
+
if (options.removeClassNames) {
|
|
499
|
+
elm.removeAttribute("class");
|
|
500
|
+
}
|
|
501
|
+
elm.setAttribute("style", computedStyle.cssText);
|
|
502
|
+
}
|
|
503
|
+
exports.computedStyleToInlineStyle = computedStyleToInlineStyle;
|
|
504
|
+
function getPageHidden(document = window.document) {
|
|
505
|
+
var hiddenPropName;
|
|
506
|
+
if (typeof document.hidden !== "undefined") {
|
|
507
|
+
// Opera 12.10 and Firefox 18 and later support
|
|
508
|
+
hiddenPropName = "hidden";
|
|
509
|
+
}
|
|
510
|
+
else if (typeof document.msHidden !== "undefined") {
|
|
511
|
+
hiddenPropName = "msHidden";
|
|
512
|
+
}
|
|
513
|
+
else if (typeof document.webkitHidden !== "undefined") {
|
|
514
|
+
hiddenPropName = "webkitHidden";
|
|
515
|
+
}
|
|
516
|
+
return (0, typecheckers_1.isString)(hiddenPropName) ? document[hiddenPropName] : false;
|
|
517
|
+
}
|
|
518
|
+
exports.getPageHidden = getPageHidden;
|
|
519
|
+
function getAnimationFlags() {
|
|
520
|
+
var isSupported = false, animationstring = 'animation', keyframeprefix = '', domPrefixes = 'Webkit Moz O ms Khtml'.split(' '), pfx = '', elem = document.createElement('div');
|
|
521
|
+
if (elem.style.animationName !== undefined) {
|
|
522
|
+
isSupported = true;
|
|
523
|
+
}
|
|
524
|
+
if (isSupported === false) {
|
|
525
|
+
for (var i = 0; i < domPrefixes.length; i++) {
|
|
526
|
+
if (elem.style[domPrefixes[i] + 'AnimationName'] !== undefined) {
|
|
527
|
+
pfx = domPrefixes[i];
|
|
528
|
+
animationstring = pfx + 'Animation';
|
|
529
|
+
keyframeprefix = '-' + pfx.toLowerCase() + '-';
|
|
530
|
+
isSupported = true;
|
|
531
|
+
break;
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
return {
|
|
536
|
+
supported: isSupported,
|
|
537
|
+
animationName: animationstring,
|
|
538
|
+
keyFramePrefix: keyframeprefix,
|
|
539
|
+
prefix: pfx
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
exports.getAnimationFlags = getAnimationFlags;
|
|
543
|
+
function getAnimationEndEventName() {
|
|
544
|
+
var animations = {
|
|
545
|
+
"animation": "animationend",
|
|
546
|
+
"OAnimation": "oAnimationEnd",
|
|
547
|
+
"MozAnimation": "animationend",
|
|
548
|
+
"WebkitAnimation": "webkitAnimationEnd"
|
|
549
|
+
};
|
|
550
|
+
var flags = getAnimationFlags();
|
|
551
|
+
if (flags.supported) {
|
|
552
|
+
return animations[flags.animationName];
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
exports.getAnimationEndEventName = getAnimationEndEventName;
|
|
556
|
+
function isElement(ele) {
|
|
557
|
+
return !(0, typecheckers_1.isNullOrUndefined)(ele) && (ele.nodeType === 1 || ele instanceof Element);
|
|
558
|
+
}
|
|
559
|
+
exports.isElement = isElement;
|
|
560
|
+
function isNode(ele) {
|
|
561
|
+
return !(0, typecheckers_1.isNullOrUndefined)(ele) && ((ele.nodeName && ele.nodeType >= 1 && ele.nodeType <= 12) || ele instanceof Node);
|
|
562
|
+
}
|
|
563
|
+
exports.isNode = isNode;
|
|
564
|
+
function _eleOrSelectorToElementArray(eleOrSelector) {
|
|
565
|
+
if ((0, typecheckers_1.isNullOrUndefined)(eleOrSelector)) {
|
|
566
|
+
return [];
|
|
567
|
+
}
|
|
568
|
+
var elements;
|
|
569
|
+
if ((0, typecheckers_1.isString)(eleOrSelector)) {
|
|
570
|
+
elements = Array.from(document.querySelectorAll(eleOrSelector));
|
|
571
|
+
}
|
|
572
|
+
else if (isElement(eleOrSelector)) {
|
|
573
|
+
elements = [eleOrSelector];
|
|
574
|
+
}
|
|
575
|
+
else if (Array.isArray(eleOrSelector)) {
|
|
576
|
+
elements = eleOrSelector;
|
|
577
|
+
}
|
|
578
|
+
else if (eleOrSelector.length
|
|
579
|
+
|| (0, typecheckers_1.isFunction)(eleOrSelector.forEach)
|
|
580
|
+
|| eleOrSelector instanceof NodeList) {
|
|
581
|
+
elements = Array.from(eleOrSelector);
|
|
582
|
+
}
|
|
583
|
+
return elements || [];
|
|
584
|
+
}
|
|
585
|
+
function emptyHTMLElement(eleOrSelector) {
|
|
586
|
+
var elements = _eleOrSelectorToElementArray(eleOrSelector);
|
|
587
|
+
elements.forEach((ele) => {
|
|
588
|
+
if (ele && isElement(ele) && ele.firstChild) {
|
|
589
|
+
while (ele.firstChild) {
|
|
590
|
+
try {
|
|
591
|
+
ele.removeChild(ele.firstChild);
|
|
592
|
+
}
|
|
593
|
+
catch (ex) {
|
|
594
|
+
break;
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
exports.emptyHTMLElement = emptyHTMLElement;
|
|
601
|
+
function removeHTMLElement(eleOrSelector) {
|
|
602
|
+
var elements = _eleOrSelectorToElementArray(eleOrSelector);
|
|
603
|
+
elements.forEach((ele) => {
|
|
604
|
+
try {
|
|
605
|
+
var parent = ele.parentNode || ele.parentElement;
|
|
606
|
+
if (ele && isElement(ele) && parent && parent.removeChild) {
|
|
607
|
+
parent.removeChild(ele);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
catch (ex) {
|
|
611
|
+
}
|
|
612
|
+
});
|
|
613
|
+
}
|
|
614
|
+
exports.removeHTMLElement = removeHTMLElement;
|
|
615
|
+
function removeAttributeFromHTMLElements(eleOrSelector, attributeName) {
|
|
616
|
+
var elements = _eleOrSelectorToElementArray(eleOrSelector);
|
|
617
|
+
elements.forEach((elm) => {
|
|
618
|
+
try {
|
|
619
|
+
elm.removeAttribute(attributeName);
|
|
620
|
+
}
|
|
621
|
+
catch (ex) {
|
|
622
|
+
}
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
exports.removeAttributeFromHTMLElements = removeAttributeFromHTMLElements;
|
|
626
|
+
function getSelectOptionByValue(selectElement, value) {
|
|
627
|
+
if ((0, typecheckers_1.isNullOrUndefined)(selectElement) || (0, typecheckers_1.isNullOrUndefined)(value)) {
|
|
628
|
+
return null;
|
|
629
|
+
}
|
|
630
|
+
var option = Array.from(selectElement.options).filter(o => {
|
|
631
|
+
return o.value === value.toString();
|
|
632
|
+
})[0];
|
|
633
|
+
return option;
|
|
634
|
+
}
|
|
635
|
+
exports.getSelectOptionByValue = getSelectOptionByValue;
|
|
636
|
+
function getSelectOptionByIndex(selectElement, index) {
|
|
637
|
+
if ((0, typecheckers_1.isNullOrUndefined)(selectElement) || !(0, typecheckers_1.isNumeric)(index)) {
|
|
638
|
+
return null;
|
|
639
|
+
}
|
|
640
|
+
return selectElement.options[Number(index)];
|
|
641
|
+
}
|
|
642
|
+
exports.getSelectOptionByIndex = getSelectOptionByIndex;
|
|
643
|
+
function getSelectedOption(selectElement) {
|
|
644
|
+
if ((0, typecheckers_1.isNullOrUndefined)(selectElement)) {
|
|
645
|
+
return null;
|
|
646
|
+
}
|
|
647
|
+
return selectElement.options[selectElement.selectedIndex] || Array.from(selectElement.options).filter((option) => {
|
|
648
|
+
return option.selected;
|
|
649
|
+
})[0];
|
|
650
|
+
}
|
|
651
|
+
exports.getSelectedOption = getSelectedOption;
|
|
652
|
+
function setSelectOptionByValue(selectElement, value) {
|
|
653
|
+
var option = getSelectOptionByValue(selectElement, value);
|
|
654
|
+
if (option) {
|
|
655
|
+
option.selected = true;
|
|
656
|
+
return option;
|
|
657
|
+
}
|
|
658
|
+
return null;
|
|
659
|
+
}
|
|
660
|
+
exports.setSelectOptionByValue = setSelectOptionByValue;
|
|
661
|
+
function setSelectOptionByIndex(selectElement, index) {
|
|
662
|
+
if ((0, typecheckers_1.isNullOrUndefined)(selectElement) || (0, typecheckers_1.isNumeric)(index)) {
|
|
663
|
+
return null;
|
|
664
|
+
}
|
|
665
|
+
var option = selectElement.options[Number(index)];
|
|
666
|
+
if (option) {
|
|
667
|
+
option.selected = true;
|
|
668
|
+
return option;
|
|
669
|
+
}
|
|
670
|
+
return null;
|
|
671
|
+
}
|
|
672
|
+
exports.setSelectOptionByIndex = setSelectOptionByIndex;
|
|
673
|
+
function composePath(evt) {
|
|
674
|
+
var path = ((0, typecheckers_1.isFunction)(evt["composedPath"]) && evt["composedPath"]()) || evt.path, target = evt.target;
|
|
675
|
+
if (path !== null) {
|
|
676
|
+
// Safari doesn't include Window, and it should.
|
|
677
|
+
path = (path.indexOf(window) < 0) ? path.concat([window]) : path;
|
|
678
|
+
return path;
|
|
679
|
+
}
|
|
680
|
+
if (target === window) {
|
|
681
|
+
return [window];
|
|
682
|
+
}
|
|
683
|
+
function getParents(node, memo) {
|
|
684
|
+
memo = memo || [];
|
|
685
|
+
var parentNode = node.parentNode;
|
|
686
|
+
if (!parentNode) {
|
|
687
|
+
return memo;
|
|
688
|
+
}
|
|
689
|
+
else {
|
|
690
|
+
return getParents(parentNode, memo.concat([parentNode]));
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
return [target].concat(getParents(target)).concat([window]);
|
|
694
|
+
}
|
|
695
|
+
exports.composePath = composePath;
|
|
696
|
+
/** timeouts after 10 seconds by default */
|
|
697
|
+
function waitForWindowObject(typeFullName, windowOrParent, timeout = 10000) {
|
|
698
|
+
return waitFor(() => !(0, typecheckers_1.isTypeofFullNameNullOrUndefined)(typeFullName, windowOrParent), timeout);
|
|
699
|
+
}
|
|
700
|
+
exports.waitForWindowObject = waitForWindowObject;
|
|
701
|
+
/** timeouts after 10 seconds by default */
|
|
702
|
+
function waitFor(checker, timeout = 10000, intervalLength = 50) {
|
|
703
|
+
return new Promise((resolve, reject) => {
|
|
704
|
+
var timeoutId = null;
|
|
705
|
+
var max = Math.round(timeout / intervalLength);
|
|
706
|
+
var count = 0;
|
|
707
|
+
var exists = false;
|
|
708
|
+
var _retry = () => {
|
|
709
|
+
if (timeoutId) {
|
|
710
|
+
window.clearTimeout(timeoutId);
|
|
711
|
+
}
|
|
712
|
+
try {
|
|
713
|
+
exists = checker();
|
|
714
|
+
}
|
|
715
|
+
catch (ex) {
|
|
716
|
+
resolve(false);
|
|
717
|
+
return;
|
|
718
|
+
}
|
|
719
|
+
if (exists || count > max) {
|
|
720
|
+
resolve(exists);
|
|
721
|
+
}
|
|
722
|
+
else {
|
|
723
|
+
timeoutId = window.setTimeout(_retry, intervalLength);
|
|
724
|
+
}
|
|
725
|
+
count++;
|
|
726
|
+
};
|
|
727
|
+
_retry();
|
|
728
|
+
});
|
|
729
|
+
}
|
|
730
|
+
exports.waitFor = waitFor;
|
|
731
|
+
/**
|
|
732
|
+
* Waits for an async check to return true or times out.
|
|
733
|
+
* @param checker Async function that returns boolean result.
|
|
734
|
+
* @param timeout The timeout in milliseconds. Defaults to 10000ms.
|
|
735
|
+
* @param intervalLength The interval length in milliseconds to retry the checker function. Defaults to 50ms.
|
|
736
|
+
*/
|
|
737
|
+
function waitForAsync(checker, timeout = 10000, intervalLength = 50) {
|
|
738
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
739
|
+
var max = Math.round(timeout / intervalLength);
|
|
740
|
+
var count = 0;
|
|
741
|
+
var exists = false;
|
|
742
|
+
for (var count = 0; count < max; count++) {
|
|
743
|
+
exists = yield checker();
|
|
744
|
+
if (exists) {
|
|
745
|
+
break;
|
|
746
|
+
}
|
|
747
|
+
yield delayAsync(intervalLength);
|
|
748
|
+
}
|
|
749
|
+
return exists;
|
|
750
|
+
});
|
|
751
|
+
}
|
|
752
|
+
exports.waitForAsync = waitForAsync;
|
|
753
|
+
/**
|
|
754
|
+
* An async function that returns after a set delay.
|
|
755
|
+
* @param delay The delay in milliseconds. Defaults to 500ms.
|
|
756
|
+
*/
|
|
757
|
+
function delayAsync(delay = 500) {
|
|
758
|
+
return new Promise((resolve) => {
|
|
759
|
+
window.setTimeout(() => {
|
|
760
|
+
resolve(null);
|
|
761
|
+
}, delay);
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
exports.delayAsync = delayAsync;
|
|
765
|
+
function addStyleSheet(options, doc) {
|
|
766
|
+
doc = doc || document;
|
|
767
|
+
var head = doc.head || doc.getElementsByTagName("head")[0];
|
|
768
|
+
if (head) {
|
|
769
|
+
var link = createStylesheet(options, doc);
|
|
770
|
+
head.appendChild(link);
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
exports.addStyleSheet = addStyleSheet;
|
|
774
|
+
function createStylesheet(options, doc) {
|
|
775
|
+
doc = doc || document;
|
|
776
|
+
options = options || {};
|
|
777
|
+
options.properties = Object.assign({
|
|
778
|
+
type: "text/css",
|
|
779
|
+
rel: "stylesheet",
|
|
780
|
+
}, options.properties);
|
|
781
|
+
return createHtmlElement("link", options, doc);
|
|
782
|
+
}
|
|
783
|
+
exports.createStylesheet = createStylesheet;
|
|
784
|
+
function createHtmlElement(tagName, options, doc) {
|
|
785
|
+
doc = doc || document;
|
|
786
|
+
var element = doc.createElement(tagName);
|
|
787
|
+
if (options) {
|
|
788
|
+
if (options.attributes) {
|
|
789
|
+
Object.keys(options.attributes).forEach((attribName) => {
|
|
790
|
+
var attribValue = options.attributes[attribName];
|
|
791
|
+
if (!(0, typecheckers_1.isNullOrUndefined)(attribValue)) {
|
|
792
|
+
element.setAttribute(attribName, attribValue);
|
|
793
|
+
}
|
|
794
|
+
});
|
|
795
|
+
}
|
|
796
|
+
if (options.properties) {
|
|
797
|
+
var mergedProps = Object.assign(Object.assign({}, options.properties), {
|
|
798
|
+
style: options.style
|
|
799
|
+
});
|
|
800
|
+
Object.keys(mergedProps).forEach((propName) => {
|
|
801
|
+
var obj = mergedProps[propName];
|
|
802
|
+
if (!(0, typecheckers_1.isNullOrUndefined)(obj)) {
|
|
803
|
+
if ((0, typecheckers_1.isString)(obj) || (0, typecheckers_1.isBoolean)(obj) || (0, typecheckers_1.isNumber)(obj)) {
|
|
804
|
+
element[propName] = obj;
|
|
805
|
+
}
|
|
806
|
+
else {
|
|
807
|
+
if (!element[propName]) {
|
|
808
|
+
element[propName] = obj;
|
|
809
|
+
}
|
|
810
|
+
else {
|
|
811
|
+
Object.keys(obj).forEach((objName) => {
|
|
812
|
+
element[propName][objName] = obj[objName];
|
|
813
|
+
});
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
});
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
return element;
|
|
821
|
+
}
|
|
822
|
+
exports.createHtmlElement = createHtmlElement;
|
|
823
|
+
function isInsideIFrame(win) {
|
|
824
|
+
win = win || window;
|
|
825
|
+
try {
|
|
826
|
+
return win.parent.location !== win.location;
|
|
827
|
+
}
|
|
828
|
+
catch (ex) {
|
|
829
|
+
return true;
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
exports.isInsideIFrame = isInsideIFrame;
|
|
833
|
+
function isIFrameAccessible(iframeEle) {
|
|
834
|
+
try {
|
|
835
|
+
var location = (iframeEle.contentWindow || iframeEle.contentDocument).location;
|
|
836
|
+
return location && location.origin ? true : false;
|
|
837
|
+
}
|
|
838
|
+
catch (ex) {
|
|
839
|
+
return false;
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
exports.isIFrameAccessible = isIFrameAccessible;
|
|
843
|
+
function HTMLEncode(d) {
|
|
844
|
+
if ((0, typecheckers_1.isNullOrEmptyString)(d)) {
|
|
845
|
+
return "";
|
|
846
|
+
}
|
|
847
|
+
var tempString = String(d);
|
|
848
|
+
var result = [];
|
|
849
|
+
for (var index = 0; index < tempString.length; index++) {
|
|
850
|
+
var char = tempString.charAt(index);
|
|
851
|
+
switch (char) {
|
|
852
|
+
case "<":
|
|
853
|
+
result.push("<");
|
|
854
|
+
break;
|
|
855
|
+
case ">":
|
|
856
|
+
result.push(">");
|
|
857
|
+
break;
|
|
858
|
+
case "&":
|
|
859
|
+
result.push("&");
|
|
860
|
+
break;
|
|
861
|
+
case '"':
|
|
862
|
+
result.push(""");
|
|
863
|
+
break;
|
|
864
|
+
case "'":
|
|
865
|
+
result.push("'");
|
|
866
|
+
break;
|
|
867
|
+
default:
|
|
868
|
+
result.push(char);
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
return result.join("");
|
|
872
|
+
}
|
|
873
|
+
exports.HTMLEncode = HTMLEncode;
|
|
874
|
+
function HTMLDecode(a) {
|
|
875
|
+
if ((0, typecheckers_1.isNullOrEmptyString)(a)) {
|
|
876
|
+
return "";
|
|
877
|
+
}
|
|
878
|
+
var e = [/</g, />/g, /"/g, /'/g, /:/g, /{/g, /}/g, /&/g];
|
|
879
|
+
var f = ["<", ">", '"', "'", ":", "{", "}", "&"];
|
|
880
|
+
var d = [];
|
|
881
|
+
for (var c = 0; c < a.length; c++) {
|
|
882
|
+
var b = a.indexOf("&");
|
|
883
|
+
if (b !== -1) {
|
|
884
|
+
if (b > 0) {
|
|
885
|
+
d.push(a.substr(0, b));
|
|
886
|
+
a = a.substr(b);
|
|
887
|
+
}
|
|
888
|
+
a = a.replace(e[c], f[c]);
|
|
889
|
+
}
|
|
890
|
+
else {
|
|
891
|
+
break;
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
d.push(a);
|
|
895
|
+
return d.join("");
|
|
896
|
+
}
|
|
897
|
+
exports.HTMLDecode = HTMLDecode;
|
|
898
|
+
function ScriptEncode(e) {
|
|
899
|
+
if (null === e || typeof e === "undefined")
|
|
900
|
+
return "";
|
|
901
|
+
for (var d = String(e), a = [], c = 0, g = d.length; c < g; c++) {
|
|
902
|
+
var b = d.charCodeAt(c);
|
|
903
|
+
if (b > 4095)
|
|
904
|
+
a.push("\\u" + b.toString(16).toUpperCase());
|
|
905
|
+
else if (b > 255)
|
|
906
|
+
a.push("\\u0" + b.toString(16).toUpperCase());
|
|
907
|
+
else if (b > 127)
|
|
908
|
+
a.push("\\u00" + b.toString(16).toUpperCase());
|
|
909
|
+
else {
|
|
910
|
+
var f = d.charAt(c);
|
|
911
|
+
switch (f) {
|
|
912
|
+
case "\n":
|
|
913
|
+
a.push("\\n");
|
|
914
|
+
break;
|
|
915
|
+
case "\r":
|
|
916
|
+
a.push("\\r");
|
|
917
|
+
break;
|
|
918
|
+
case '"':
|
|
919
|
+
a.push("\\u0022");
|
|
920
|
+
break;
|
|
921
|
+
case "%":
|
|
922
|
+
a.push("\\u0025");
|
|
923
|
+
break;
|
|
924
|
+
case "&":
|
|
925
|
+
a.push("\\u0026");
|
|
926
|
+
break;
|
|
927
|
+
case "'":
|
|
928
|
+
a.push("\\u0027");
|
|
929
|
+
break;
|
|
930
|
+
case "(":
|
|
931
|
+
a.push("\\u0028");
|
|
932
|
+
break;
|
|
933
|
+
case ")":
|
|
934
|
+
a.push("\\u0029");
|
|
935
|
+
break;
|
|
936
|
+
case "+":
|
|
937
|
+
a.push("\\u002b");
|
|
938
|
+
break;
|
|
939
|
+
case "/":
|
|
940
|
+
a.push("\\u002f");
|
|
941
|
+
break;
|
|
942
|
+
case "<":
|
|
943
|
+
a.push("\\u003c");
|
|
944
|
+
break;
|
|
945
|
+
case ">":
|
|
946
|
+
a.push("\\u003e");
|
|
947
|
+
break;
|
|
948
|
+
case "\\":
|
|
949
|
+
a.push("\\\\");
|
|
950
|
+
break;
|
|
951
|
+
default:
|
|
952
|
+
a.push(f);
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
return a.join("");
|
|
957
|
+
}
|
|
958
|
+
exports.ScriptEncode = ScriptEncode;
|
|
959
|
+
function addEventListeners(eles, events, listener, useCapture = false) {
|
|
960
|
+
if (!(0, typecheckers_1.isFunction)(listener)) {
|
|
961
|
+
return;
|
|
962
|
+
}
|
|
963
|
+
var eventNames;
|
|
964
|
+
if ((0, typecheckers_1.isString)(events)) {
|
|
965
|
+
eventNames = events.split(" ");
|
|
966
|
+
}
|
|
967
|
+
else if (Array.isArray(events)) {
|
|
968
|
+
eventNames = events;
|
|
969
|
+
}
|
|
970
|
+
if ((0, typecheckers_1.isNullOrEmptyArray)(eventNames)) {
|
|
971
|
+
return;
|
|
972
|
+
}
|
|
973
|
+
var elements = _eleOrSelectorToElementArray(eles);
|
|
974
|
+
if ((0, typecheckers_1.isNullOrEmptyArray)(elements)) {
|
|
975
|
+
return;
|
|
976
|
+
}
|
|
977
|
+
elements.forEach((ele) => {
|
|
978
|
+
if (isElement(ele) && (0, typecheckers_1.isFunction)(ele.addEventListener)) {
|
|
979
|
+
eventNames.forEach((eventName) => {
|
|
980
|
+
ele.addEventListener(eventName, listener, useCapture);
|
|
981
|
+
});
|
|
982
|
+
}
|
|
983
|
+
});
|
|
984
|
+
}
|
|
985
|
+
exports.addEventListeners = addEventListeners;
|
|
986
|
+
/** defer calling this function multiple times within X time frame to execute only once after the last call */
|
|
987
|
+
function debounce(callback, ms, thisArg = null) {
|
|
988
|
+
let timeoutId = null;
|
|
989
|
+
let func = (...args) => {
|
|
990
|
+
window.clearTimeout(timeoutId);
|
|
991
|
+
timeoutId = window.setTimeout(() => {
|
|
992
|
+
callback.apply(thisArg, args);
|
|
993
|
+
}, ms);
|
|
994
|
+
};
|
|
995
|
+
return func;
|
|
996
|
+
}
|
|
997
|
+
exports.debounce = debounce;
|
|
998
|
+
/** call a funciton X number of times, on a specific interval. */
|
|
999
|
+
function interval(callback, msBetweenCalls, numberOfTimesToCall, thisArg = null) {
|
|
1000
|
+
for (let index = 1; index <= numberOfTimesToCall; index++)
|
|
1001
|
+
window.setTimeout(() => { callback.apply(thisArg); }, msBetweenCalls * index);
|
|
1002
|
+
}
|
|
1003
|
+
exports.interval = interval;
|
|
1004
|
+
/** throttle repeated calls to callback, makes sure it is only called once per *wait* at most, but won't defer it for longer than that.
|
|
1005
|
+
* Unlike debounce, which can end up waiting for 5 minutes if it is being called repeatedly.
|
|
1006
|
+
*/
|
|
1007
|
+
function throttle(callback, wait = 250, thisArg = null) {
|
|
1008
|
+
let previous = 0;
|
|
1009
|
+
let timeout = null;
|
|
1010
|
+
let result;
|
|
1011
|
+
let storedContext = thisArg;
|
|
1012
|
+
let storedArgs;
|
|
1013
|
+
const later = () => {
|
|
1014
|
+
previous = Date.now();
|
|
1015
|
+
timeout = null;
|
|
1016
|
+
result = callback.apply(storedContext, storedArgs);
|
|
1017
|
+
if (!timeout) {
|
|
1018
|
+
storedArgs = [];
|
|
1019
|
+
}
|
|
1020
|
+
};
|
|
1021
|
+
let wrapper = (...args) => {
|
|
1022
|
+
const now = Date.now();
|
|
1023
|
+
const remaining = wait - (now - previous);
|
|
1024
|
+
storedArgs = args;
|
|
1025
|
+
if (remaining <= 0 || remaining > wait) {
|
|
1026
|
+
if (timeout) {
|
|
1027
|
+
clearTimeout(timeout);
|
|
1028
|
+
timeout = null;
|
|
1029
|
+
}
|
|
1030
|
+
previous = now;
|
|
1031
|
+
result = callback.apply(storedContext, storedArgs);
|
|
1032
|
+
if (!timeout) {
|
|
1033
|
+
storedArgs = [];
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
else if (!timeout) {
|
|
1037
|
+
timeout = window.setTimeout(later, remaining);
|
|
1038
|
+
}
|
|
1039
|
+
return result;
|
|
1040
|
+
};
|
|
1041
|
+
return wrapper;
|
|
1042
|
+
}
|
|
1043
|
+
exports.throttle = throttle;
|
|
1044
|
+
var _resizeHandlers = {};
|
|
1045
|
+
var _resizeRegistered = false;
|
|
1046
|
+
function _handleResize() {
|
|
1047
|
+
Object.keys(_resizeHandlers).forEach(key => {
|
|
1048
|
+
try {
|
|
1049
|
+
_resizeHandlers[key]();
|
|
1050
|
+
}
|
|
1051
|
+
catch (e) { }
|
|
1052
|
+
});
|
|
1053
|
+
}
|
|
1054
|
+
/** allows you to register, re-register or remove a resize handler without ending up with multiple registrations. */
|
|
1055
|
+
function OnWindowResize(handlerID, handler) {
|
|
1056
|
+
if (!(0, typecheckers_1.isNullOrUndefined)(handler))
|
|
1057
|
+
_resizeHandlers[handlerID] = handler;
|
|
1058
|
+
else
|
|
1059
|
+
delete _resizeHandlers[handlerID];
|
|
1060
|
+
if (!_resizeRegistered) {
|
|
1061
|
+
_resizeRegistered = true;
|
|
1062
|
+
addEventHandler(window, "resize", debounce(_handleResize, 250));
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
exports.OnWindowResize = OnWindowResize;
|
|
1066
|
+
function dispatchCustomEvent(obj, eventName, params = { bubbles: false, cancelable: false, detail: null }) {
|
|
1067
|
+
if ((0, typecheckers_1.isNullOrUndefined)(obj) || !(0, typecheckers_1.isFunction)(obj.dispatchEvent)) {
|
|
1068
|
+
return;
|
|
1069
|
+
}
|
|
1070
|
+
params.bubbles = params.bubbles || false;
|
|
1071
|
+
params.cancelable = params.cancelable || false;
|
|
1072
|
+
params.detail = params.detail || null;
|
|
1073
|
+
let event = null;
|
|
1074
|
+
if ((0, typecheckers_1.isFunction)(window.CustomEvent)) {
|
|
1075
|
+
event = new CustomEvent(eventName, params);
|
|
1076
|
+
}
|
|
1077
|
+
else {
|
|
1078
|
+
event = document.createEvent('CustomEvent');
|
|
1079
|
+
event.initCustomEvent(eventName, params.bubbles, params.cancelable, params.detail);
|
|
1080
|
+
}
|
|
1081
|
+
obj.dispatchEvent(event);
|
|
1082
|
+
}
|
|
1083
|
+
exports.dispatchCustomEvent = dispatchCustomEvent;
|
|
1084
|
+
function addStyleElement(cssText, id) {
|
|
1085
|
+
var parent = document.head || document.getElementsByTagName("head")[0] || document;
|
|
1086
|
+
let cssElm = !(0, typecheckers_1.isNullOrEmptyString)(id) ? document.getElementById(id) : null;
|
|
1087
|
+
if (!cssElm) {
|
|
1088
|
+
cssElm = document.createElement("style");
|
|
1089
|
+
if (!(0, typecheckers_1.isNullOrEmptyString)(id))
|
|
1090
|
+
cssElm.id = id;
|
|
1091
|
+
parent.appendChild(cssElm);
|
|
1092
|
+
}
|
|
1093
|
+
cssElm.innerHTML = cssText;
|
|
1094
|
+
return cssElm;
|
|
1095
|
+
}
|
|
1096
|
+
exports.addStyleElement = addStyleElement;
|
|
1097
|
+
function getReactInstanceFromElement(node) {
|
|
1098
|
+
if (!(0, typecheckers_1.isNullOrUndefined)(node)) {
|
|
1099
|
+
for (const key in node) {
|
|
1100
|
+
if ((key).startsWith("__reactInternalInstance$") || key.startsWith("__reactFiber$")) {
|
|
1101
|
+
return node[key];
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
return null;
|
|
1106
|
+
}
|
|
1107
|
+
exports.getReactInstanceFromElement = getReactInstanceFromElement;
|
|
1108
|
+
/** registers a listener to when the browser url changed */
|
|
1109
|
+
function registerUrlChanged(callback) {
|
|
1110
|
+
let url = window.location.href;
|
|
1111
|
+
window.setInterval(() => {
|
|
1112
|
+
if (url !== window.location.href) {
|
|
1113
|
+
url = window.location.href;
|
|
1114
|
+
if ((0, typecheckers_1.isFunction)(callback)) {
|
|
1115
|
+
callback();
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
}, 333);
|
|
1119
|
+
}
|
|
1120
|
+
exports.registerUrlChanged = registerUrlChanged;
|
|
1121
|
+
exports.DisableAnchorInterceptAttribute = "data-interception";
|
|
1122
|
+
exports.DisableAnchorInterceptValue = "off";
|
|
1123
|
+
function DisableAnchorIntercept(link) {
|
|
1124
|
+
link.setAttribute(exports.DisableAnchorInterceptAttribute, exports.DisableAnchorInterceptValue);
|
|
1125
|
+
}
|
|
1126
|
+
exports.DisableAnchorIntercept = DisableAnchorIntercept;
|
|
1127
|
+
/** go over HTML and add data-interception="off" to all <a> tags. */
|
|
1128
|
+
function DisableAnchorInterceptInHtml(html) {
|
|
1129
|
+
return html.replace(/<a /g, `<a ${exports.DisableAnchorInterceptAttribute}="${exports.DisableAnchorInterceptValue}" `);
|
|
1130
|
+
}
|
|
1131
|
+
exports.DisableAnchorInterceptInHtml = DisableAnchorInterceptInHtml;
|
|
1132
|
+
function isChildOf(node, parent) {
|
|
1133
|
+
let _parent = node && node.parentElement;
|
|
1134
|
+
while (_parent) {
|
|
1135
|
+
if (((0, typecheckers_1.isNullOrEmptyString)(parent.id) || _parent.id === parent.id)
|
|
1136
|
+
&& ((0, typecheckers_1.isNullOrEmptyString)(parent.class) || _parent.classList.contains(parent.class))
|
|
1137
|
+
&& ((0, typecheckers_1.isNullOrEmptyString)(parent.tagName) || _parent.tagName.toUpperCase() === parent.tagName.toUpperCase()))
|
|
1138
|
+
return true;
|
|
1139
|
+
_parent = _parent.parentElement;
|
|
1140
|
+
}
|
|
1141
|
+
return false;
|
|
1142
|
+
}
|
|
1143
|
+
exports.isChildOf = isChildOf;
|
|
1144
|
+
function findAcestor(ele, predicate) {
|
|
1145
|
+
if (!isElement(ele) || !(0, typecheckers_1.isFunction)(predicate)) {
|
|
1146
|
+
return null;
|
|
1147
|
+
}
|
|
1148
|
+
while (ele) {
|
|
1149
|
+
if (predicate(ele)) {
|
|
1150
|
+
return ele;
|
|
1151
|
+
}
|
|
1152
|
+
ele = ele.parentElement;
|
|
1153
|
+
}
|
|
1154
|
+
return null;
|
|
1155
|
+
}
|
|
1156
|
+
exports.findAcestor = findAcestor;
|
|
1157
|
+
function loadModernFormsCSS() {
|
|
1158
|
+
let styleElm = document.getElementById('kw_modernui_css');
|
|
1159
|
+
if (!styleElm) {
|
|
1160
|
+
styleElm = document.createElement("link");
|
|
1161
|
+
styleElm.id = "kw_modernui_css";
|
|
1162
|
+
styleElm.rel = "stylesheet";
|
|
1163
|
+
styleElm.href = "https://apps.kwizcom.com/products/modern/css/app.min.css";
|
|
1164
|
+
document.head.appendChild(styleElm);
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
exports.loadModernFormsCSS = loadModernFormsCSS;
|
|
1168
|
+
function showLoadingOverlay(elm, options) {
|
|
1169
|
+
loadModernFormsCSS();
|
|
1170
|
+
let overlay = elm.querySelector('.kw-loading-overlay');
|
|
1171
|
+
if (!overlay) {
|
|
1172
|
+
overlay = document.createElement("div");
|
|
1173
|
+
overlay.className = "kw-loading-overlay kw-fixedCenter kw-absoluteFull";
|
|
1174
|
+
elm.appendChild(overlay);
|
|
1175
|
+
}
|
|
1176
|
+
overlay.innerHTML = options && options.innerHtml || `<img src="${images_1.LOGO_ANIM}" style="max-width: 30%;max-height: 30%;">`;
|
|
1177
|
+
overlay.style.backgroundColor = options && options.bgColor || "white";
|
|
1178
|
+
}
|
|
1179
|
+
exports.showLoadingOverlay = showLoadingOverlay;
|
|
1180
|
+
function hideLoadingOverlay(elm) {
|
|
1181
|
+
if (isElement(elm)) {
|
|
1182
|
+
let overlays = Array.from(elm.querySelectorAll('.kw-loading-overlay'));
|
|
1183
|
+
removeHTMLElement(overlays);
|
|
1184
|
+
}
|
|
1185
|
+
}
|
|
1186
|
+
exports.hideLoadingOverlay = hideLoadingOverlay;
|
|
1187
|
+
function getLoadingOverlayHtml(options) {
|
|
1188
|
+
loadModernFormsCSS();
|
|
1189
|
+
let overlay = document.createElement("div");
|
|
1190
|
+
overlay.className = "kw-loading-overlay kw-fixedCenter kw-absoluteFull";
|
|
1191
|
+
overlay.innerHTML = options && options.innerHtml || `<img src="${images_1.LOGO_ANIM}" style="max-width: 30%;max-height: 30%;">`;
|
|
1192
|
+
overlay.style.backgroundColor = options && options.bgColor || "white";
|
|
1193
|
+
return overlay.outerHTML;
|
|
1194
|
+
}
|
|
1195
|
+
exports.getLoadingOverlayHtml = getLoadingOverlayHtml;
|
|
1196
|
+
function getUniqueElementId(id = "") {
|
|
1197
|
+
return `${id}${(0, random_1.getUniqueId)()}`;
|
|
1198
|
+
}
|
|
1199
|
+
exports.getUniqueElementId = getUniqueElementId;
|
|
1200
|
+
//# sourceMappingURL=browser.js.map
|