apex4x
Version:
The Comprehensive ARIA Development Suite
6,260 lines • 212 kB
JavaScript
/*@license
Apex 4X: The Comprehensive ARIA Development Suite ( Neuromancer - 2024.7.15 )
Author: Bryan Garaventa (https://www.linkedin.com/in/bgaraventa)
Home: WhatSock.com : Download: https://github.com/whatsock/apex
License: MIT (https://opensource.org/licenses/MIT)
*/
export const $A = (function () {
var moduleFolder = "/4X/Modules/",
Version = "2024.7.15",
BN = {},
$A = (function () {
var $A = function (dc, dcA, dcI, onReady, disableAsync) {
if (!arguments.length && this === $A) {
return $A;
} else if ($A.isChain(dc) && arguments.length === 1) {
return dc;
} else if ($A.isFn(dc) && arguments.length === 1) {
if ($A.isDocLoaded) {
dc();
} else {
$A.on("load", function () {
dc();
});
}
return $A;
} else if (
dc &&
$A.isArray(dc) &&
dc.length &&
dc[0] &&
typeof dc[0] === "object" &&
dc[0].id &&
!dc[0].nodeType
) {
disableAsync = onReady;
onReady = dcI;
dcI = dcA;
dcA = dc;
dc = null;
} else if (
((dc && $A.isDC(dc)) || $A.reg.has(dc)) &&
dcA &&
$A.isArray(dcA) &&
dcA.length &&
dcA[0] &&
typeof dcA[0] === "object" &&
dcA[0].id &&
!$A.isNode(dcA, window, document, 11)
) {
if ($A.reg.has(dc)) dc = $A.reg.get(dc);
} else if (dc || (this && this !== $A)) {
if (this && $A.isStr(this)) {
dcI = dcA;
dcA = dc;
dc = this;
}
if (dc && $A.reg.has(dc)) {
return $A.reg.get(dc);
}
if ($A.isStr(dc)) dc = $A.morph(dc);
return $A._clone(dc);
}
$A.lastCreated = [];
var fn = function (dcA, dcI, dc) {
var w = $A._GenDC(dcA, dcI, dc);
if ($A._lastCreatedCallback && $A.isFn($A._lastCreatedCallback))
$A._lastCreatedCallback.call($A, w);
$A._lastCreatedCallback = false;
for (var i = 0; i < w.length; i++) {
var dc = w[i];
if (dc.preloadImages && !dc.preload) dc.preload = true;
if (dc.preload && !dc.loading && !dc.loaded) {
if (dc.mode === 1 && dc.fetch.url) {
dc.content = $A.toNode();
dc.isLoading = true;
$A.load(
dc.fetch.url,
dc.content,
dc.fetch.data,
function (content) {
dc.isLoading = false;
if (dc.preloadImages) $A.preload(content);
$A.getModule(dc, "afterFetch", content);
if ($A.isFn(dc.fn.afterLoaded)) {
dc.fn.afterLoaded(dc);
dc.fn.afterLoaded = null;
}
},
function (e) {
dc.isLoading = false;
$A.parseDebug(e);
},
);
dc.mode = 0;
} else if (dc.preloadImages && !dc.mode && dc.content)
$A.preload(dc.content);
}
if (dc.preloadCSS && dc.importCSS && !dc.loading && !dc.loaded) {
dc.fn.style = $A.toNode();
$A.import(dc.importCSS, {}, dc.fn.style);
}
}
return w;
};
if (onReady && !$A.isDocLoaded) {
$A.on("load", function () {
fn.call(window, dcA, dcI, dc);
});
} else fn.call(window, dcA, dcI, dc);
return $A.lastCreated;
},
nowI = 0,
now = function () {
return new Date().getTime() + nowI++;
};
$A.isArray = function (v) {
return (
[
"[object Array]",
"[object NodeList]",
"[object HTMLCollection]",
].indexOf(Object.prototype.toString.call(v)) !== -1 &&
!(v instanceof Element || v instanceof HTMLDocument)
);
};
// extend derived from jQuery core for cross platform compatibility
$A.extend = function () {
var options,
name,
src,
copy,
copyIsArray,
clone,
target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false;
if (typeof target === "boolean") {
deep = target;
target = arguments[1] || {};
i = 2;
}
if (typeof target !== "object" && typeof target !== "function") {
target = {};
}
if (length === i) {
target = $A;
--i;
}
for (; i < length; i++) {
if ((options = arguments[i]) !== null) {
for (name in options) {
src = target[name];
copy = options[name];
if (target === copy) {
continue;
}
if (
deep &&
copy &&
($A.isPlainObject(copy) || (copyIsArray = $A.isArray(copy)))
) {
if (copyIsArray) {
copyIsArray = false;
clone = src && $A.isArray(src) ? src : [];
} else {
clone = src && $A.isPlainObject(src) ? src : {};
}
target[name] = $A.extend(deep, clone, copy);
} else if (copy !== undefined) {
target[name] = copy;
}
}
}
}
return target;
};
// isPlainObject derived from jQuery core for cross platform compatibility
$A.isPlainObject = function (obj) {
var hasOwn = Object.prototype.hasOwnProperty;
if (
!obj ||
typeof obj !== "object" ||
obj instanceof Element ||
obj instanceof HTMLDocument ||
obj.nodeType ||
"setInterval" in obj ||
(obj.constructor &&
!hasOwn.call(obj, "constructor") &&
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf"))
)
return false;
var key;
for (key in obj) break;
return key === undefined || hasOwn.call(obj, key);
};
$A.extend({
debug: false,
parseDebug: function (e) {
if ($A.debug) {
console.log(e);
}
},
_XR: function (o) {
if (this._4X) {
this._X = o;
return this;
} else return o;
},
setGlobal: function (o, retroactive) {
if (o && typeof o === "object") {
$A.extend(true, {}, $A.fn.globalDC, o);
if (retroactive) $A.mergeGlobal();
}
},
mergeGlobal: function () {
$A.queryDC(function (dc) {
$A.extend(true, {}, $A.fn.globalDC, dc);
});
},
reg: new Map(),
fn: {
globalDC: {},
},
_version: Version,
lastCreated: [],
_lastCreatedCallback: false,
lastCreatedCallback: function (fn) {
if ($A.isFn(fn)) $A._lastCreatedCallback = fn;
},
props: {},
isDocLoaded: false,
isDOMContentLoaded: false,
_boundRefO: new Map(),
_boundObjectIds: new Map(),
setIdFor: function (o) {
if (this._4X) {
o = this._X;
}
var id = $A.hasIdFor(o) ? $A.getIdFor(o) : null;
if (!id) {
id = $A.genId();
$A._boundObjectIds.set(o, id);
$A._boundRefO.set(id, o);
}
return id;
},
remIdFor: function (o) {
if (this._4X) {
o = this._X;
}
var id = $A.hasIdFor(o) ? $A.getIdFor(o) : null;
if (id) {
$A._boundRefO.delete(id);
$A._boundObjectIds.delete(o);
return true;
}
return false;
},
getIdFor: function (o) {
if (this._4X) {
o = this._X;
}
return $A._boundObjectIds.has(o) ? $A._boundObjectIds.get(o) : null;
},
hasIdFor: function (o) {
if (this._4X) {
o = this._X;
}
return $A._boundObjectIds.has(o);
},
getFromId: function (id) {
if (this._4X) {
id = this._X;
}
return $A._boundRefO.has(id) ? $A._boundRefO.get(id) : null;
},
_boundObjects: new Map(),
bindObjects: function (o, dc) {
if (this._4X) {
dc = o;
o = this._X;
}
$A._boundObjects.set(o, dc);
$A._boundObjects.set(dc, o);
return $A._XR.call(this, o);
},
unbindObjects: function (o) {
if (this._4X) {
o = this._X;
}
$A._boundObjects.delete($A._boundObjects.get(o));
$A._boundObjects.delete(o);
return $A._XR.call(this, o);
},
boundTo: function (o) {
if (this._4X) {
o = this._X;
}
var r = $A._boundObjects.get(o);
return r;
},
hasBound: function (o) {
if (this._4X) {
o = this._X;
}
var r = $A._boundObjects.has(o);
return r;
},
toFetch: function (u) {
var x = u.indexOf("#");
if (!$A.isPath(u) || x === -1) return { data: {} };
return {
url: $A.trim(u.slice(0, x)),
data: {
selector: $A.trim(u.slice(x)),
},
};
},
getSelectorFromURI: function (u) {
if (!$A.isStr(u)) return "";
return $A.toFetch(u).data.selector;
},
isPath: function (p) {
return $A.isStr(p) &&
!$A.isMarkup(p) &&
!$A.isSelector(p) &&
p.indexOf("/") !== -1
? true
: false;
},
map: function (config) {
if (
config &&
(($A.isArray(config.siblings) && $A.isDC(config.siblings[0])) ||
$A.isDC(config.parent))
)
config.siblings[0].map(config);
},
_parseDCScripts: function (dc, type, next) {
var toGet = [],
toRun = [],
rn = function (typ, isOnce, DC) {
var ran = typ + "Ran",
run = typ;
if (
!$A.isFn(DC[run]) &&
!$A.isStr(DC[run]) &&
!$A.isArray(DC[run])
)
return;
if (!isOnce || (isOnce && !DC[ran])) {
if (isOnce && !DC[ran]) DC[ran] = true;
if ($A.isFn(DC[run])) toRun.push(DC[run]);
else if ($A.isStr(DC[run])) toGet.push(DC[run]);
else if ($A.isArray(DC[run]))
Array.prototype.push.apply(toGet, DC[run]);
}
},
fns = [
"jsOnce" + type,
"once" + type,
"js" + type,
type[0].toLowerCase() + type.slice(1),
];
if (dc.reverseJSOrder) fns = fns.reverse();
var lp = function (mDC) {
$A.loop(
fns,
function (i, f) {
rn(f, f.toLowerCase().indexOf("once") !== -1, mDC);
},
"array",
);
};
lp(dc);
if (dc.allowCascade) {
lp(dc.fn.proto);
lp($A.fn.globalDC);
}
if ($A.isFn(next)) toRun.push(next);
var cont = function () {
$A.loop(
toRun,
function (i, r) {
r(dc, dc.container);
},
"array",
);
};
if (toGet.length)
$A.import(toGet, {
props: {
DC: dc,
},
call: function () {
cont();
},
});
else cont();
return dc;
},
setPage: function (id, title) {
if (!id) return;
if (title) document.title = title;
window.history.pushState(
{ html: document.html, pageTitle: id },
"",
"./#" + id,
);
},
getHash: function (u) {
if (!u || !$A.isStr(u))
return $A.trim(window.location.hash.replace("#", ""));
var x = u.indexOf("#");
return x !== -1 ? $A.trim(u.slice(x + 1)) : "";
},
isHash: function (h) {
var h = h || $A.getHash();
return $A.hasDC(h);
},
hasHash: function (a, h) {
var h = h || $A.getHash();
if (!$A.isHash(h)) return false;
if (!$A.isArray(a)) return true;
for (var i = 0; i < a.length; i++) {
if (($A.isDC(a[i]) ? a[i].id : a[i]) === h) return true;
}
return false;
},
toDC: function (o, config) {
if (this._4X) {
config = o;
o = this._X;
}
if ($A.isPlainObject(o)) {
config = o;
o = null;
}
if (!$A.isPlainObject(config)) config = {};
if ($A.isPath(o)) {
config = $A.extend(
{
fetch: $A.toFetch(o),
autoRender: true,
},
config,
);
o = null;
}
if (o) o = $A.morph(o);
var ctrl = $A.isNode(o) && $A.getAttr(o, "data-controls");
if (config.fetch && config.fetch.url) {
config.toggleHide = false;
config.mode = 1;
}
if (ctrl && $A.isPath(ctrl)) {
config.toggleHide = false;
config.fetch = $A.toFetch(ctrl);
config.content = null;
config.trigger = o;
config.mode = 1;
if (!config.id && $A.isNode(o) && o.id) config.id = o.id;
} else if (
ctrl &&
$A.isSelector("#" + ctrl) &&
document.querySelector("#" + ctrl)
) {
config.content = document.querySelector("#" + ctrl);
config.trigger = o;
if (!config.id && $A.isNode(o) && o.id) config.id = o.id;
} else if ($A.isNode(o) && (config.content || config.fetch)) {
config.trigger = o;
if (!config.id && o.id) config.id = o.id;
} else if ($A.isNode(o)) {
if (!config.id && o.id) config.id = o.id;
config.content = o;
}
var rendered = $A.isBool(config.isRendered)
? config.isRendered
: !$A.isHidden(config.content);
if (rendered && !config.root) {
if ($A.isNode($A.next(config.content))) {
config.root = $A.next(config.content);
config.before = true;
} else if ($A.isNode($A.previous(config.content))) {
config.root = $A.previous(config.content);
config.after = true;
} else if ($A.isNode(config.content.parentNode)) {
config.root = config.content.parentNode;
config.append = true;
}
config.loaded = true;
}
config.isRendered = rendered;
config.widgetType =
config.widgetType || $A.getAttr(o, "data-widget-type") || null;
var DC = $A([
$A.extend(
true,
{
id: config.id || $A.genId(),
fn: {
isMorphedDC: true,
},
on: "click",
},
config,
),
])[0];
if (rendered && DC.loaded && $A.isNode(DC.content)) {
if (!DC.content.id) DC.content.id = $A.genId();
DC.wrapper = DC.container = DC.content;
DC.wrapperId = DC.containerId = DC.content.id;
}
return DC;
},
_store: function (f, arrayOnly) {
if (f && f.nodeType === 11) {
var nl = [];
for (var i = 0; i < f.childNodes.length; i++) {
var o = f.childNodes[i];
if ($A.isNode(o)) nl.push(o);
}
$A.data(nl, "StoredFrag", f);
$A.data(f, "StoredNodeList", nl);
if (arrayOnly) return nl;
}
return f;
},
_check: function (f, rNode) {
var isA = $A.isArray(f);
if ($A.isChain(f)) return $A._check(f.return(), rNode);
else if (isA)
return rNode ? $A.data(f, "StoredFrag") || $A.toNode(f, true) : f;
else if (f && f.nodeType === 11) {
var nl = $A.data(f, "StoredNodeList") || [];
if (nl.length) return rNode ? f : nl;
else if (f.childNodes.length)
return $A._store(f, rNode ? false : true);
else if (rNode) return null;
else return [];
} else if (!rNode && !isA) return [f];
return f;
},
toNode: function (s, elementOnly, arrayOnly) {
if (this._4X) {
elementOnly = s;
s = this._X;
}
if (!s) {
return document.createDocumentFragment();
} else if ($A.isStr(s)) {
try {
s = $A._store(
document.createRange().createContextualFragment(s),
arrayOnly,
);
} catch (e) {
var f = document.createDocumentFragment();
$A.insertMarkup(s, f);
s = $A._store(f, arrayOnly);
}
} else if (elementOnly && $A.isArray(s)) {
var f = document.createDocumentFragment();
var loop = function (o) {
var s = o;
if (s && s.nodeType === 11) s = $A._store(s, true);
$A.loop(
s,
function (i, n) {
if (n && n.nodeType === 11) loop(n);
else if ($A.isNode(n)) f.appendChild(n);
},
"array",
);
};
loop(s);
s = $A._store(f);
}
if (
!arrayOnly &&
!$A.isArray(s) &&
s &&
s.nodeType === 11 &&
s.childNodes &&
s.childNodes.length === 1
)
s = s.childNodes[0];
if (arrayOnly && !$A.isArray(s)) s = [s];
return $A._XR.call(this, s);
},
_clone: function (o) {
if ($A.isChain(o)) return o;
var f = function (o) {
this._4X = true;
this._X = o;
};
f.prototype = $A;
return new f(o);
},
return: function (o) {
if (this._4X) {
o = this._X;
}
return o;
},
getNode: function (o) {
if (this._4X) {
o = this._X;
}
return o;
},
getDC: function (o, includeFromBound) {
if (this._4X) {
includeFromBound = o;
o = this._X;
}
if ($A.isDC(o)) {
return o;
} else if ($A.reg.has(o)) {
return $A.reg.get(o);
} else if (includeFromBound && $A.hasDC(o, includeFromBound)) {
return $A.data(o, "DC");
}
return null;
},
isChain: function (o) {
return o && typeof o === "object" && o._4X ? true : false;
},
isDC: function (o) {
return o && typeof o === "object" && o.fn && o.fn.isDCI
? true
: false;
},
hasDC: function (o, includeFromBound) {
if (!o) return false;
if ($A.isDC(o)) return true;
if ($A.reg.has(o)) return true;
if (includeFromBound && $A.isDC($A.data(o, "DC"))) return true;
return false;
},
preload: function (a) {
if (this._4X) {
a = this._X;
}
var c = $A.morph(a);
if ($A.isNode(c)) {
$A.on("load", function () {
if (!$A._imageMap) $A._imageMap = {};
var images = [];
$A.query("img[src]", c, function (i, o) {
if (!($A._imageMap[o.src] && $A._imageMap[o.src].parentNode))
images.push(o.src);
});
if (images.length)
$A("<div hidden></div>")
.import(images, {
tag: "img",
callOnAll: true,
call: function (g) {
$A._imageMap[g.src] = g;
},
})
.appendTo(document.body);
});
}
return $A._XR.call(this, a);
},
isMarkup: function (s) {
if (this._4X) {
s = this._X;
}
if (!s || !$A.isStr(s)) {
return false;
}
return stringAnnounce.iterate(s, /</g) > 1 &&
stringAnnounce.iterate(s, />/g) > 1
? true
: false;
},
morph: function (o, retArray, context) {
if ($A.isArray(o)) {
return o;
} else if ($A.isNode(o, null, null, 11)) {
return retArray && !$A.isArray(o) ? [o] : o;
} else if ($A.isStr(o)) {
if ($A.isMarkup(o)) return $A.toNode(o, false, retArray);
else {
if (window.document.getElementById(o))
return window.document.getElementById(o);
else if ($A.isSelector(o)) {
if (!$A.isNode(context, null, document, 11)) context = document;
var r = context.querySelectorAll(o);
if (!retArray && r.length === 1) r = r[0];
else if (!retArray && !r.length) r = null;
return r;
} else return $A.toText(o);
}
} else if ($A.isNum(o)) {
o = $A.toText(o.toString());
return retArray ? [o] : o;
}
return retArray && !$A.isArray(o) ? [o] : o;
},
isMap: function (o) {
try {
Map.prototype.has.call(o);
return true;
} catch (e) {
return false;
}
},
loop: function (o, fn, type) {
if (this._4X) {
type = fn;
fn = o;
o = this._X;
}
if (!$A.isFn(fn)) {
return $A._XR.call(this, o);
}
if (!$A.isArray(o) && type === "array") o = [o];
if ((!type || type === "map") && $A.isMap(o) && $A.isFn(o.forEach)) {
o.forEach(function (v, k) {
fn.call(v, k, v);
});
} else if ((!type || type === "array") && $A.isArray(o)) {
for (var i = 0; i < o.length; i++) {
fn.call(o[i], i, o[i]);
}
} else if (
(!type || type === "object") &&
o &&
typeof o === "object"
) {
for (var n in o) {
fn.call(o[n], n, o[n]);
}
} else if ((!type || type === "string") && $A.isStr(o)) {
for (var i = 0; i < o.length; i++) {
fn.call(o.charAt(i), i, o.charAt(i));
}
} else if ($A.isNode(o)) {
fn.call(o, 0, o);
} else if (o && type === "other") fn.call(o, 0, o);
return $A._XR.call(this, o);
},
isSelector: function (s) {
if (s && $A.isStr(s)) {
try {
return document.querySelectorAll(s) ? true : false;
} catch (e) {
return false;
}
}
return false;
},
isNode: function (n, win, doc) {
var isType = function (args) {
var i = 3;
while (args[i]) {
if (n.nodeType === args[i]) return true;
i++;
}
return false;
};
return n &&
!$A.isArray(n) &&
(n instanceof Element ||
(doc &&
doc instanceof HTMLDocument &&
n instanceof HTMLDocument) ||
(win && n === win) ||
isType(arguments))
? true
: false;
},
isArray: function (v) {
if (this._4X) {
v = this._X;
}
return (
[
"[object Array]",
"[object NodeList]",
"[object HTMLCollection]",
].indexOf(Object.prototype.toString.call(v)) !== -1 &&
!(v instanceof Element || v instanceof HTMLDocument)
);
},
inArray: function (searchFor, inStack) {
if (this._4X) {
inStack = searchFor;
searchFor = this._X;
}
if (inStack.indexOf) return inStack.indexOf(searchFor);
for (var i = 0; i < inStack.length; i++) {
if (inStack[i] === searchFor) {
return i;
}
}
return -1;
},
isFn: function (o) {
return typeof o === "function";
},
isStr: function (o) {
return typeof o === "string";
},
isNum: function (o) {
return typeof o === "number";
},
isBool: function (o) {
return typeof o === "boolean";
},
isTouch: false,
isIE: function () {
return !window.ActiveXObject && "ActiveXObject" in window
? true
: false;
},
trim: function (s) {
if (this._4X) {
s = this._X;
}
if ($A.isStr(s)) s = s.replace(/^\s+|\s+$/g, "");
return s;
},
query: function (sel, con, call) {
if (this._4X) {
call = con;
con = this._X;
}
if ($A.isFn(con)) {
call = con;
con = null;
}
if (!$A.isNode(con, null, document, 11)) con = document;
var r = [],
isA = true,
isO = false;
if (!sel) {
return $A._XR.call(this, r);
}
if ($A.isMarkup(sel)) {
r = $A.toNode(sel, false, true);
} else if ($A.isSelector(sel) && $A.isFn(con.querySelectorAll)) {
r = con.querySelectorAll(sel);
} else if ($A.isNode(sel)) {
r.push(sel);
} else {
isA = $A.isArray(sel);
isO = $A.isPlainObject(sel);
if (isA || isO) r = sel;
}
var q = [];
if (call && $A.isFn(call)) {
if (isA) {
for (var i = 0; i < r.length; i++) {
if (call.apply(r[i], [i, r[i]]) !== false) q.push(r[i]);
}
} else if (isO) {
for (var n in r) {
if (call.apply(r[n], [n, r[n]]) !== false) q.push(r[n]);
}
} else Array.prototype.push.apply(q, r);
} else Array.prototype.push.apply(q, r);
return $A._XR.call(this, q);
},
getText: function (n) {
if (this._4X) {
n = this._X;
}
if (!n) return "";
if ($A.isNode(n)) return n.innerText || n.textContent || "";
if (n && n.nodeType === 3) return n.data;
return "";
},
queryDC: function (ids, fn) {
if ($A.isFn(ids)) {
fn = ids;
ids = null;
}
var dcs = [];
if (!$A.isFn(fn)) return dcs;
if (ids)
$A.loop(
ids,
function (i, id) {
if ($A.hasDC(id)) {
var dc = $A.getDC(id);
if (fn.call(dc, dc) !== false) dcs.push(dc);
}
},
"array",
);
else
$A.loop(
$A.reg,
function (id, dc) {
if ($A.isDC(dc)) {
if (!fn.call(dc, dc)) dcs.push(dc);
}
},
"map",
);
return dcs;
},
Get: function (o) {
if (!o || o.url === null) return;
/* Syntax of array, may include multiple fetch objects to chain them in succession
[
{
url: "resourcePath",
data: {returnType: "html", selector: "#myWidget"},
success: function(content, promise){},
error: function(error, promise){}
}
]
*/
var config = {
// 4X related properties
returnType: "html", // Options: "html", "text", "xml", "json"
selector: "", // Sets a CSS query selector to return the first matching node within the newly loaded html or xml.
// These properties are part of the Fetch Standard
method: "GET",
headers: {}, // request headers. format is the identical to that accepted by the Headers constructor
body: null, // request body. can be null, a string, a Buffer, a Blob, or a Node.js Readable stream
cache: $A.noCache ? "no-cache" : "default", // The cache mode you want to use for the request: default, no-store, reload, no-cache, force-cache, or only-if-cached.
redirect: "follow", // The redirect mode to use: follow (automatically follow redirects), error (abort with an error if a redirect occurs), or manual (handle redirects manually). In Chrome the default is follow (before Chrome 47 it defaulted to manual).
keepalive: false, // The keepalive option can be used to allow the request to outlive the page. Fetch with the keepalive flag is a replacement for the Navigator.sendBeacon() API.
mode: "cors", // The mode you want to use for the request, e.g., cors, no-cors, or same-origin.
// credentials: 'omit', // The request credentials you want to use for the request: omit, same-origin, or include. To automatically send cookies for the current domain, this option must be provided. Starting with Chrome 50, this property also takes a FederatedCredential instance or a PasswordCredential instance.
// referrer: 'client', // A USVString specifying no-referrer, client, or a URL. The default is client.
// referrerPolicy: 'no-referrer', // Specifies the value of the referer HTTP header. May be one of no-referrer, no-referrer-when-downgrade, origin, origin-when-cross-origin, unsafe-url.
// signal: null, // An AbortSignal object instance; allows you to communicate with a fetch request and abort it if desired via an AbortController.
// integrity: null, // Contains the subresource integrity value of the request (e.g., sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=).
},
i = 0,
load = function (url, data, success, error) {
var options = $A.extend({}, config, data || {});
window
.fetch(url, options)
.then(function (response) {
if (response.status >= 200 && response.status < 300) {
// text or html or xml
if (
["html", "text", "xml"].indexOf(
options.returnType.toLowerCase(),
) >= 0
)
response.text().then(function (content) {
if (
$A.isStr(content) &&
options.returnType.toLowerCase() === "xml"
)
content = $A.toXML(content);
else if (
$A.isStr(content) &&
options.returnType.toLowerCase() === "html"
)
content = $A.toNode(content);
if (
$A.isNode(content, null, document, 11) &&
$A.isSelector(options.selector)
)
content = content.querySelector(options.selector);
if ($A.isFn(success))
success.call(this, content, response);
i++;
if (o[i])
load(o[i].url, o[i].data, o[i].success, o[i].error);
});
// json
else if (options.returnType.toLowerCase() === "json")
response.json().then(function (json) {
if ($A.isFn(success))
success.call(this, json, response);
i++;
if (o[i])
load(o[i].url, o[i].data, o[i].success, o[i].error);
});
} else if ($A.isFn(error)) {
error.call(this, response.statusText, response);
}
})
.catch(function (errorMsg) {
if ($A.isFn(error)) error.call(this, errorMsg, this);
});
};
if (!$A.isArray(o)) o = [o];
load(o[i].url, o[i].data, o[i].success, o[i].error);
},
toXML: function (data) {
if (!data) data = "";
var doc;
if (window.DOMParser) {
var parser = new DOMParser();
doc = parser.parseFromString(data, "text/xml");
} else {
doc = new window.ActiveXObject("Microsoft.XMLDOM");
doc.async = "false";
doc.loadXML(data);
}
return doc;
},
moduleFolder: moduleFolder,
noCache: false,
_ICB: [],
_ICBD: [],
_cssCache: {},
_jsCache: {},
_cacheName: {},
clearCache: function () {
$A._cssCache = {};
$A._jsCache = {};
$A._cacheName = {};
},
import: function (source, config, context) {
if (this._4X) {
context = this._X;
}
if ($A.isFn(config)) config = { call: config };
else if ($A.isNode(config, null, null, 11)) {
context = config;
config = {};
}
if (!config) config = {};
var nC = $A.isBool(config.noCache) ? config.noCache : $A.noCache;
if ($A.isFn(context)) {
config.call = context;
context = null;
}
if ($A.isNode(config.context, null, null, 11))
context = config.context;
if (!$A.isNode(context, null, null, 11)) context = null;
if (!config.props) config.props = {};
var pDeferred = config.props._Defer ? true : false;
if (pDeferred) config.defer = true;
if (config.defer) config.props._Defer = true;
var impId = config.props._ImpId ? config.props._ImpId : $A.genId();
config.props._ImpId = impId;
if (!$A.isFn(config.call)) config.call = function () {};
var refs = [],
m = !$A.isArray(source) ? 0 : source.length - 1,
cb = function (iA, i, rs) {
if (iA.length) {
iA[iA.length - 1].call(window, iA[iA.length - 1]["_props"], rs);
if (i === m) iA.splice(iA.length - 1, 1);
}
};
if (
!source ||
($A.isArray(source) && !source.length) ||
(!nC && config.name && $A._cacheName[config.name])
) {
if ($A.isFn($A._cacheName[config.name])) {
if (!pDeferred && config.defer && !$A.isDocLoaded)
$A.on("load", function () {
$A._cacheName[config.name].call(window, config.props);
});
else $A._cacheName[config.name].call(window, config.props);
}
} else if (
config.tag === "img" &&
$A.isNode(context, null, null, 11)
) {
$A.loop(
source,
function (i, s) {
var r = $A.create("img", {
src: s,
alt: "",
});
context.appendChild(r);
if ((config.callOnAll || i === m) && $A.isFn(config.call))
config.call.call(context, config.props, r);
},
"array",
);
} else {
if ($A.isFn(config.call)) {
config.call["_props"] = config.props || {};
$A[config.defer ? "_ICBD" : "_ICB"].push(config.call);
}
$A.loop(
source,
function (i, s) {
var isCSS = s.slice(-4).toLowerCase() === ".css",
u =
(!$A.isPath(s) ? $A.moduleFolder : "") +
(isCSS
? s
: s.slice(-3).toLowerCase() === ".js"
? s
: s + ".js");
if (!nC && isCSS && $A._cssCache[u]) {
if (!$A.get($A._cssCache[u].id))
(context || document.head || document.body).appendChild(
$A._cssCache[u].cloneNode(true),
);
if ($A.isFn(config.call) && (config.callOnAll || i === m)) {
config.call.call(window, config.call["_props"]);
}
} else if (
!nC &&
!isCSS &&
$A._jsCache[u] &&
$A._jsCache[u]._ImpId !== impId
) {
var rs;
if (!$A._jsCache[u].once) {
try {
rs = $A._jsCache[u].call(
window,
window,
document,
$A,
config.props,
config.props.DC,
);
} catch (e) {
$A.parseDebug(e);
}
}
if ((config.callOnAll || i === m) && $A.isFn(config.call)) {
if (!pDeferred && config.defer && !$A.isDocLoaded)
$A.on("load", function () {
cb($A._ICBD, i, rs);
});
else cb($A[config.defer ? "_ICBD" : "_ICB"], i, rs);
}
} else
refs.push(
$A.extend(
true,
{
url: u,
data: {
returnType: "text",
},
success: function (content, promise) {
var rs = false;
if (content) {
if (isCSS) {
rs = $A.create("style", {
type: "text/css",
id: $A.genId(),
});
rs.innerHTML = content;
if (!nC) $A._cssCache[u] = rs;
(
context ||
document.head ||
document.body
).appendChild(rs.cloneNode(true));
} else {
try {
var f =
$A._jsCache[u] ||
new Function(
"window,document,$A,props,DC",
content,
);
rs =
$A._jsCache[u] && $A._jsCache[u].once
? null
: f.call(
window,
window,
document,
$A,
config.props,
config.props.DC,
);
if (!nC && config.once) f.once = true;
f._ImpId = impId;
if (!nC && !$A._jsCache[u]) $A._jsCache[u] = f;
} catch (e) {
$A.parseDebug(e);
}
}
if (!nC && config.name)
$A._cacheName[config.name] = config.call;
}
if (
(config.callOnAll || i === m) &&
$A.isFn(config.call)
) {
if (!pDeferred && config.defer && !$A.isDocLoaded)
$A.on("load", function () {
cb($A._ICBD, i, rs);
});
else cb($A[config.defer ? "_ICBD" : "_ICB"], i, rs);
}
},
},
config.override || {},
),
);
},
"array",
);
$A.Get(refs);
}
return $A._XR.call(this, context);
},
getScript: function (source, config, context) {
if ($A.isFn(config)) config = { callback: config };
config = config || {};
var max = $A.isArray(source) ? 0 : source.length - 1;
$A.loop(
source,
function (i, s) {
var t = $A.create("script", {
src:
(!$A.isPath(s) ? $A.moduleFolder : "") +
(s.slice(-3).toLowerCase() === ".js" ? s : s + ".js"),
async: config.disableAsync ? false : true,
defer: config.defer ? true : false,
});
if (
(config.callbackOnAll || i === max) &&
$A.isFn(config.callback)
)
t.addEventListener("load", function (ev) {
config.callback.call(window, config.props || ev);
});
(context || document.head || document.body).appendChild(t);
},
"array",
);
},
_parseURLWithSelector: function (u) {
var ss = u.split(/\s+/);
return {
url: ss[0],
selector: u.substring(ss[0].length),
};
},
load: function (target, context, data, cb, errorCB) {
if (this._4X) {
errorCB = cb;
cb = data;
data = context;
context = this._X;
}
if ($A.isFn(data)) {
errorCB = cb;
cb = data;
data = null;
}
var config = {
returnType: "html",
};
$A.extend(config, data || {});
$A.Get({
url: target,
data: config,
success: function (node, promise) {
$A.insert(node, context);
if ($A.isFn(cb)) cb.call(this, node, promise);
},
error: function (errorMsg, promise) {
if ($A.isFn(errorCB)) errorCB.call(this, errorMsg, promise);
},
});
return $A._XR.call(this, context);
},
detachObserver: function (o, e) {
var m = $A.data(o, "_MutationObserver") || false;
if (!m || !(e && m[e])) return false;
if (e && m[e]) m[e].disconnect();
else for (e in m) m[e].disconnect();
return true;
},
isObserverConfig: function (o) {
return $A.isPlainObject(o) &&
(o.context ||
o.subtree ||
o.childList ||
o.attributes ||
o.attributeFilter ||
o.attributeOldValue ||
o.characterData ||
o.characterDataOldValue)
? true
: false;
},
observer: function (o, e, fn, attributeFilter, override) {
e = e.toLowerCase();
if (
",remove,add,attributechange,subtreechange,contentchange,".indexOf(
"," + e + ",",
) === -1
)
return false;
var t = o,
config = {};
if (e === "remove" || e === "add") {
config = { childList: true, subtree: true };
if (override.context) {
t = override.context;
delete override.context;
} else if (e === "remove") t = document;
} else if (e === "attributechange") {
config = { attributes: true, attributeOldValue: true };
if ($A.isArray(attributeFilter) && attributeFilter.length)
config.attributeFilter = attributeFilter;
} else if (e === "subtreechange") {
config = { childList: true, subtree: true };
} else if (e === "contentchange") {
config = {
characterData: true,
childList: true,
subtree: true,
characterDataOldValue: true,
};
$A.data(o, "_CurrentText", $A.getText(o));
} else {
return false;
}
$A.extend(config, override || {});
if (!$A.data(o, "_MutationObserver"))
$A.data(o, "_MutationObserver", {});
var m = $A.data(o, "_MutationObserver");
if (!m[e])
m[e] = new MutationObserver(function (MTS) {
MTS.forEach(function (M) {
var MT = M.target,
BO =
$A.boundTo(MT) ||
$A.getDC($A.data(MT, "SavedEventParameters")) ||
$A.data(MT, "DC"),
SP = $A.data(MT, "SavedEventParameters");
if (M.type === "childList") {
if (
e === "remove" &&
$A.isArray(M.removedNodes) &&
M.removedNodes.length &&
($A.isFn(Array.from)
? Array.from(M.removedNodes)
: [].slice(M.removedNodes)
).indexOf(o) !== -1
) {
fn.call(MT, M, MT, M.removedNodes, BO, SP);
} else if (
e === "add" &&
$A.isArray(M.addedNodes) &&
M.addedNodes.length
) {
fn.call(MT, M, MT, M.addedNodes, BO, SP);
} else if (
e === "subtreechange" &&
(($A.isArray(M.addedNodes) && M.addedNodes.length) ||
($A.isArray(M.removedNodes) && M.removedNodes.length))
) {
fn.call(MT, M, MT, M.addedNodes, M.removedNodes, BO, SP);
} else if (e === "contentchange") {
$A.data(MT, "_OldText", $A.data(MT, "_CurrentText"));
$A.data(MT, "_CurrentText", $A.getText(MT));
fn.call(
MT,
M,
MT,
$A.data(MT, "_CurrentText"),
$A.data(MT, "_OldText"),
BO,
SP,
);
}
} else if (M.type === "attributes") {
if (e === "attributechange") {
fn.call(
MT,
M,
MT,
M.attributeName,
$A.getAttr(MT, M.attributeName),
M.oldValue,
BO,
SP,
);
}
} else if (M.type === "characterData") {
if (e === "contentchange") {
$A.data(MT, "_OldText", $A.data(MT, "_CurrentText"));
$A.data(MT, "_CurrentText", $A.getText(MT));
fn.call(
MT,
M,
MT,
$A.data(MT, "_CurrentText"),
$A.data(MT, "_OldText"),
BO,
SP,
);
}
}
});
});
m[e].observe(t, config);
$A.data(o, "_MutationObserver", m);
return true;
},
keyEvent: function (e) {
return e.which || e.keyCode;
},
event: {
on: BN.on,
add: BN.add,
one: BN.one,
off: BN.off,
remove: BN.off,
fire: BN.fire,
Event: BN.Event,
},
on: function (ta, e, fn, save, ns, attributeFilter, override) {
var isLoaded = function (e) {
return (
($A.isDOMContentLoaded && e === "DOMContentLoaded") ||
($A.isDocLoaded && e === "load")
);
};
if (this._4X) {
override = attributeFilter;
attributeFilter = ns;
ns = save;
save = fn;
fn = e;
e = ta;
ta = this._X;
}
if ($A.isFn($A.isObserverConfig) && $A.isObserverConfig(fn)) {
override = fn;
fn = null;
} else if (
$A.isFn($A.isObserverConfig) &&
$A.isObserverConfig(save)
) {
override = save;
save = null;
} else if ($A.isFn($A.isObserverConfig) && $A.isObserverConfig(ns)) {
override = ns;
ns = null;
} else override = {};
attributeFilter = override.attributeFilter || false;
if (
(ta === "DOMContentLoaded" ||
ta === "load" ||
ta === "touchchange") &&
$A.isFn(e)
) {
ns = save;
save = fn;
fn = e;
e = ta;
ta = window;
}
if ($A.isStr(fn) && fn[0] === ".") {
ns = fn;
fn = null;
} else if ($A.isStr(save) && save[0] === ".") {
ns = save;
save = null;
}
if (fn && !$A.isFn(fn)) {
ns = save;
save = fn;
fn = null;
}
if (!ta || !e) return this._4X ? this : ta;
if ($A.isStr(ta)) ta = $A.morph(ta);
var obj = $A._check(ta);
if ($A.isStr(e)) e = e.split(/\s+/);
if (!$A.isStr(ns)) ns = "";
$A.loop(
obj,
function (i, o) {
if ($A.isNode(o, window, document, 11)) {
if (save) $A.data(o, "SavedEventParameters", save);
$A.loop(
e,
function (j, p) {
if ($A.isStr(j) && $A.isFn(p)) {
j = j.split(/\s+/);
$A.loop(
j,
function (k, q) {
var dc =
$A.getDC($A.data(o, "SavedEventParameters")) ||
$A.data(o, "DC");
if ($A.isDC(dc) && $A.isMap($A.data(o, "DC-ON")))
dc.triggerNode = o;
if (isLoaded(q)) {
p.call(
o,
null,
dc,
$A.data(o, "SavedEventParameters"),
);
} else if (
!$A.observer(o, q, p, attributeFilter, override)
) {
$A.event.on(o, q + ns, function (ev) {
p.call(
o,
ev,
dc,
$A.data(o, "SavedEventParameters"),
);
});
}
},
"array",
);
} else if ($A.isStr(p) && $A.isFn(fn)) {
var dc =
$A.getDC($A.data(o, "SavedEventParameters")) ||
$A.data(o, "DC");
if ($A.isDC(dc) && $A.isMap($A.data(o, "DC-ON")))
dc.triggerNode = o;
if (isLoaded(p)) {
fn.call(
o,
null,
dc,
$A.data(o, "SavedEventParameters"),
);
} else if (
!$A.observer(o, p, fn, attributeFilter, override)
) {
$A.event.on(o, p + ns, function (ev) {
fn.call(
o,
ev,
dc,
$A.data(o, "SavedEventParameters"),
);
});
}
}
},
$A.isArray(e) ? "array" : "object",
);
}
},
"array",
);
return $A._XR.call(this, ta);
},
off: function (ta, e) {
if (this._4X) {
e = ta;
ta = this._X;
}
if (!ta) return this._4X ? this : ta;
var events = e;
if ($A.isStr(ta)) ta = $A.morph(ta);
var obj = $A._check(ta);
if (!$A.isArray(obj)) obj = [obj];
if ($A.isStr(events)) events = events.split(/\s+/);
$A.loop(
obj,
function (i, o) {
if ($A.isNode(o, window, document, 11)) {
$A.removeData(o, "SavedEventParameters");
if (!e) {
$A.detachObserver(o);
$A.event.off(o);
} else {
$A.loop(
events,
function (j, p) {
if ($A.isStr(p)) {
$A.detachObserver(o, p);
$A.event.off(o, p);
}
},
$A.isArray(events) ? "array" : "object",
);
}
}
},
"array",
);
return $A._XR.call(this, ta);
},
trigger: function (ta, e) {
if (this._4X) {
e = ta;
ta = this._X;
}
if (!ta || !e) return this._4X ? this : ta;
var events = e;
if ($A.isStr(ta)) ta = $A.morph(ta);
var obj = $A._check(ta);
if ($A.isStr(events)) events = events.split(/\s+/);
$A.loop(
obj,
function (i, o) {
if ($A.isNode(o, window, document)) {
$A.loop(
events,
function (j, p) {
if ($A.isStr(p)) $A.event.fire(o, p);
},
"array",
);
}
},
"array",
);
return $A._XR.call(this, ta);
},
isNative: function (node) {
if (this._4X) {
node = this._X;
}
if (!$A.isNode(node)) return false;
var nodeName = node.nodeName.toLowerCase(),
href = $A.hasAttr(node, "href");
return (nodeName === "a" && href) ||
["button", "input", "select", "textarea", "details"].indexOf(
nodeName,
) !== -1
? true
: false;
},
getActive: function (c, onlyFocusable) {
var c = $A.isNode(c) ? c : document;
return $A.query(
"a[href], button, input, textarea, select, details, *[tabindex]",
c,
function (i, o) {
if (onlyFocusable) return $A.isFocusable(o);
},
);
},
setCircular: function (c, activeElements) {
if (this._4X) {
activeElements = c;
c = this._X;
}
if ($A.isArray(c)) {
activeElements = c;
c = null;
}
if (!$A.isArray(activeElements) && !$A.isNode(c, null, null, 11))
return [];
if (!$A.isArray(activeElements) && $A.isNode(c, null, null, 11))
activeElements = $A.getActive(c, true);
if (activeElements.length) {
var f = activeElements[0],
l = activeElements[activeElements.length - 1];
$A.on(
f,
"keydown",
function (ev) {
var k = $A.keyEvent(ev);
if (k === 9 && ev.shiftKey && !ev.altKey && !ev.ctrlKey) {
$A.focus(l);
ev.preventDefault();
}
},
".circularTabbing",
);
$A.on(
l,
"keydown",
function (ev) {
var k = $A.keyEvent(ev);
if (k === 9 && !ev.shiftKey && !ev.altKey && !ev.ctrlKey) {
$A.focus(f);
ev.preventDefault();
}
},
".circularTabbing",
);
}
return $A._XR.call(this, activeElements);
},
addWidgetProfile: function (widgetType, config) {
if (!$A.module[widgetType]) $A.module[widgetType] = {};
$A.extend($A.module[widgetType], config);
},
module: {},
getModule: function (dc, action, content) {
if (
$A.module[dc.widgetType] &&
$A.isFn($A.module[dc.widgetType][action])
)
return $A.module[dc.widgetType][action](dc, content);
},
_widgetTypes: [],
_regWidgets: new Map(),
_dataMap: new Map(),
data: function (obj, key, val) {
if (this._4X) {
val = key;
key = obj;
obj = this._X;
}
if (!obj) return this._4X ? this : obj;
if (obj && key && typeof val === "undefined") {
if ($A._dataMap.has(obj) && $A._dataMap.get(obj).has(key)) {
var r = $A._dataMap.get(obj).get(key);
return $A._XR.call(this, r);
}
return $A._XR.call(this, null);
} else if (obj && key && typeof val !== "undefined") {
if (!$A._dataMap.has(obj)) $A._dataMap.set(obj, new Map());
$A._dataMap.get(obj).set(key, val);
}
return $A._XR.call(this, obj);
},
removeData: function (obj, key) {
if (this._4X) {
key = obj;
obj = this._X;
}
if (obj && key) {
if ($A._dataMap.has(obj) && $A._dataMap.get(obj).has(key))
$A._dataMap.get(obj).delete(key);
} else if (obj) {
if ($A._dataMap.has(obj)) $A._dataMap.delete(obj);
}
return $A._XR.call(this, obj);
},
insert: function (obj, root, fn, skip) {
if (this._4X) {
fn = root;
root = this._X;
}
obj = $A.morph(obj);
root = $A.morph(root);
if (
!$A.isNode(root, null, null, 11) ||
!$A.isNode(obj, null, null, 11, 3)
)
return this._4X ? this : obj;
$A.empty(root);
root.appendChild(obj);
if (fn && $A.isFn(fn)) fn.apply(obj, [obj]);
if ($A.straylight && !skip) $A.straylight(root);
return $A._XR.call(this, obj);
},
insertWithin: function (root, obj, fn) {
if (this._4X) {
fn = obj;
obj = this._X;
}
obj = $A.insert(obj, root, fn);
return $A._XR.call(this, obj);
},
before: function (obj, existingNode, fn) {
if (this._4X) {
fn = existingNode;
existingNode = obj;
obj = this._X;
}
obj = $A._insertBefore(obj, existingNode, fn);
return $A._XR.call(this, obj);
},
_insertBefore: function (obj, existingNode, fn) {
if (this._4X) {
fn = existingNode;
existingNode = obj;
obj = this._X;
}
obj = $A.morph(obj);
existingNode = $A.morph(existingNode);
if (!$A.isNode(existingNode) || !$A.isNode(obj, null, null, 11))
return this._4X ? this : obj;
existingNode.parentNode.insertBefore(obj, existingNode);
if (fn && $A.isFn(fn)) fn.apply(obj, [obj]);
return $A._XR.call(this, obj);
},
replace: function (obj, existingNode, fn) {
if (this._4X) {
fn = existingNode;
existingNode = obj;
obj = this._X;
}
obj = $A._replaceChild(obj, existingNode, fn);
return $A._XR.call(this, obj);
},
_replaceChild: function (obj, existingNode, fn) {
obj = $A.morph(obj);
existingNode = $A.morph(existingNode);
if (!$A.isNode(existingNode) || !$A.isNode(obj, null, null, 11))
return obj;
existingNode.parentNode.replaceChild(obj, existingNode);
if (fn && $A.isFn(fn)) fn.apply(obj, [obj]);
return obj;
},
after: function (obj, existingNode, fn) {
if (this._4X) {
fn = existingNode;
existingNode = obj;
obj = this._X;
}
obj = $A._insertAfter(obj, existingNode, fn);
return $A._XR.call(this, obj);
},
_insertAfter: function (obj, existingNode, fn) {
obj = $A.morph(obj);
existingNode = $A.morph(existingNode);
if (!$A.isNode(existingNode) || !$A.isNode(obj, null, null, 11))
return obj;
var ns = $A.nextSibling(existingNode);
if (ns) ns.parentNode.insertBefore(obj, ns);
else existingNode.parentNode.appendChild(obj);
if (fn && $A.isFn(fn)) fn.apply(obj, [obj]);
return obj;
},
prepend: function (obj, root, fn) {
if (this._4X) {
fn = root;
root = this._X;
}
obj = $A.morph(obj);
root = $A.morph(root);
if (
$A.isNode(root, null, null, 11) &&
$A.isNode(obj, null, null, 11)
) {
var fc = $A.firstChild(root);
if (fc) $A._insertBefore(obj, fc);
else root.appendChild(obj);
}
if (fn && $A.isFn(fn)) fn.apply(obj, [obj]);
return $A._XR.call(this, obj);
},
prependTo: function (root, obj, fn) {
if (this._4X) {
fn = obj;
obj = this._X;
}
obj = $A.prepend(obj, root, fn);
return $A._XR.call(this, obj);
},
append: function (obj, root, fn) {
if (this._4X) {
fn = root;
root = this._X;
}
obj = $A.morph(obj);
root = $A.morph(root);
if (
$A.isNode(root, null, null, 11) &&
$A.isNode(obj, null, null, 11)
) {
if ($A.isStr(obj)) obj = $A.morph(obj);
root.appendChild(obj);
}
if (fn && $A.isFn(fn)) fn.apply(obj, [obj]);
return $A._XR.call(this, obj);
},
appendTo: function (root, obj, fn) {
if (this._4X) {
fn = obj;
obj = this._X;
}
obj = $A.append(obj, root, fn);
return $A._XR.call(this, obj);
},
insertMarkup: function (obj, root, pos, fn) {
if (this._4X) {
fn = pos;
pos = root;
root = this._X;
}
if ($A.isFn(pos)) {
fn = pos;
pos = null;
}
root = $A.morph(root);
if ($A.isNode(root)) {
if ($A.isNum(obj)) obj = obj.toString();
if ($A.isStr(obj)) {
var locale = {
prepend: "afterbegin",
append: "beforeend",
before: "beforebegin",
after: "afterend",
};
if (locale[pos]) root.insertAdjacentHTML(locale[pos], obj);
else {
$A.empty(root);
root.innerHTML = obj;
}
}
}
if (fn && $A.isFn(fn)) fn.apply(root, [root]);
return $A._XR.call(this, root);
},
_deleteNode: function (o) {
try {
var range = document.createRange();
range.selectNode(o);
range.deleteContents();
} catch (e) {
if (o && o.parentNode) o.parentNode.removeChild(o);
}
},
cloneNodes: function (o, noFrag) {
if (this._4X) {
noFrag = o;
o = this._X;
}
var r;
try {
var range = document.createRange();
range.selectNodeContents(o);
r = range.cloneContents();
} catch (e) {
r = $A.toNode();
if ($A.isNode(o) && o.firstChild) {
var node = o.firstChild;
while (node) {
if (node.cloneNode) r.appendChild(node.cloneNode(true));
node = o.nextSibling;
}
}
}
r = $A._store(r);
return $A._XR.call(this, r);
},
extractNodes: function (o, noFrag) {
if (this._4X) {
noFrag = o;
o = this._X;
}
var r;
try {
var range = document.createRange();
range.selectNodeContents(o);
r = range.extractContents();
} catch (e) {
r = $A.toNode();
if ($A.isNode(o) && o.firstChild) {
var node = o.firstChild;
while (node) {
r.appendChild(o.removeChild(node));
node = o.firstChild;
}
}
}
if (r.nodeType === 11 && r.childNodes.length === 1)
r = r.childNodes[0];
r = $A._store(r);
return $A._XR.call(this, r);
},
empty: function (obj, removeParent) {
if (this._4X) {
removeParent = obj;
obj = this._X;
}
if (obj && obj.getElementsByTagName) {
var items = obj.getElementsByTagName("*");
if (items.length)
for (var i = items.length; i--; ) {
$A.remove(items[i], true);
}
obj.innerHTML = "";
}
if (removeParent) {
$A.remove(obj);
obj = null;
}
return $A._XR.call(this, obj);
},
_cleanAll: function (obj, includeParent, skipDel) {
if (obj && obj.getElementsByTagName) {
var items = obj.getElementsByTagName("*");
for (var i = items.length; i--; ) {
$A._clean(items[i], skipDel);
}
if (includeParent) $A._clean(obj, skipDel);
}
},
_clean: function (obj, sD) {
var dcs = $A.data(obj, "DC-ON");
if ($A.isMap(dcs)) {
$A.loop(
dcs,
function (i, dc) {
dc.bypass();
},
"map",
);
}
$A.detachObserver(obj);
$A.removeData(obj);
$A.event.off(obj);
},
remove: function (obj, skipDelete) {
if (this._4X) {
skipDelete = obj;
obj = this._X;
}
if (obj && obj.nodeType === 11) {
var o = $A._check(obj);
if (o && o.length) {
for (var i = o.length; i--; ) {
$A.remove(o[i], skipDelete);
}
}
$A._clean(obj, skipDelete);
obj = null;
} else if (obj && obj.nodeType) {
$A._clean(obj, skipDelete);
if (!skipDelete) {
$A._deleteNode(obj);
obj = null;
}
}
return $A._XR.call(this, obj);
},
destroy: function (id, p, fromBound) {
if (fromBound) {
$A.query(id, function (i, o) {
if ($A.isMap($A.data(o, "DC-ON"))) {
$A.loop(
$A.data(o, "DC-ON"),
function (i, c) {
$A.destroy(c, p);
},
"map",
);
}
});
return;
}
var r = null;
if ($A.isDC(id)) r = id;
else r = $A.reg.get(id);
if (!$A.isDC(id)) return false;
var a = r.wrapper,
c = r.container;
if (p && r.loaded) {
if (r.contentOnly) {
$A.before(c, a);
c = null;
} else $A.before($A.extractNodes(c), a);
}
r.bypass(function () {
var aD = r.afterDestroy;
if ($A.isFn(r.beforeDestroy)) r.beforeDestroy(r);
$A.removeData(r.id);
r.id = r.wrapper = r.container = a = c = null;
if (r.widgetType && r.autoCloseWidget) {
var wtI = $A._widgetTypes.indexOf(r.id);
if (wtI !== -1) {
$A._widgetTypes.splice(wtI, 1);
}
}
if (r.widgetType && r.autoCloseSameWidget) {
var wtA = $A._regWidgets.get(r.widgetType),
wtI = wtA.indexOf(r.id);
if (wtI !== -1) {
wtA.splice(wtI, 1);
$A._regWidgets.set(r.widgetType, wtA);
}
}
var iv = r.indexVal,
wh = r.siblings;
wh.splice(iv, 1);
for (var i = 0; i < wh.length; i++) {
wh[i].indexVal = i;
wh[i].siblings = wh;
}
if (r.parent && r.parent.children && r.parent.children.length) {
var pc = -1,
cn = r.parent.children;
for (var i = 0; i < cn.length; i++) {
if (cn[i].id === id) pc = i;
}
if (pc >= 0) r.parent.children.splice(pc, 1);
}
$A.reg.delete(id);
if ($A.isFn(aD)) aD();
});
return true;
},
get: function (e, con, fn) {
if (this._4X) {
fn = con;
con = this._X;
}
if ($A.isFn(con)) {
fn = con;
con = null;
}
con = $A.isNode(con, null, document) ? con : document;
if (!e || !$A.isStr(e)) return null;
var r = null;
if (con.getElementById) r = con.getElementById(e);
if (!$A.isNode(r) && con.querySelector) r = con.querySelector(e);
if ($A.isNode(r) && $A.isFn(fn)) fn.call(r, r);
return $A._XR.call(this, r);
},
create: function (t) {
var o = $A.isMarkup(t) ? $A.morph(t) : document.createElement(t);
if (arguments.length === 1 || !$A.isNode(o)) return o;
if (arguments[1]) $A.setAttr(o, arguments[1]);
if (arguments[2]) $A.css(o, arguments[2]);
if (arguments[3]) $A.addClass(o, arguments[3]);
if (arguments[4]) $A.insert(arguments[4], o);
return o;
},
toText: function (s) {
if ($A.isNode(s, null, null, 3)) return s;
else if (!$A.isStr(s)) s = "";
return document.createTextNode(s);
},
getAttr: function (e, n) {
if (this._4X) {
n = e;
e = this._X;
}
e = $A.morph(e);
var E = $A._check(e, true);
if (!$A.isNode(E) || !n) return null;
return E.getAttribute(n);
},
hasAttr: function (e, n) {
if (this._4X) {
n = e;
e = this._X;
}
e = $A.morph(e);
var E = $A._check(e, true);
if (!$A.isNode(E) || !n) return null;
return E.hasAttribute(n);
},
remAttr: function (e, n) {
if (this._4X) {
n = e;
e = this._X;
}
e = $A.morph(e);
var E = $A._check(e);
var o = $A.isArray(E) ? E : [E];
for (var x = 0; x < o.length; x++) {
if ($A.isNode(o[x])) {
var a = $A.isArray(n) ? n : [n];
for (var i = 0; i < a.length; i++) {
o[x].removeAttribute(a[i]);
}
}
}
return $A._XR.call(this, e);
},
setAttr: function (e, name, value) {
if (this._4X) {
value = name;
name = e;
e = this._X;
}
e = $A.morph(e);
var E = $A._check(e),
o = $A.isArray(E) ? E : [E];
for (var x = 0; x < o.length; x++) {
if ($A.isNode(o[x])) {
if ($A.isStr(name)) {
if (value === null || value === undefined)
o[x].removeAttribute(name);
else o[x].setAttribute(name, value);
} else if (typeof name === "object") {
for (var n in name) {
if (name[n] === null || name[n] === undefined)
o[x].removeAttribute(n);
else o[x].setAttribute(n, name[n]);
}
}
}
}
return $A._XR.call(this, e);
},
toggleAttr: function (e, name, value) {
if (this._4X) {
value = name;
name = e;
e = this._X;
}
e = $A.morph(e);
var E = $A._check(e),
o = $A.isArray(E) ? E : [E],
isIE = $A.isIE();
for (var x = 0; x < o.length; x++) {
if ($A.isNode(o[x])) {
if ($A.isStr(name)) {
if (!isIE) {
if ($A.isBool(value)) o[x].toggleAttribute(name, value);
else o[x].toggleAttribute(name);
} else
o[x].setAttribute(
name,
$A.isBool(value)
? value
: o[x].getAttribute(name)
? false
: true,
);
} else if (typeof name === "object") {
for (var n in name) {
if (!isIE) {
if ($A.isBool(name[n])) o[x].toggleAttribute(n, name[n]);
else o[x].toggleAttribute(n);
} else
o[x].setAttribute(
n,
$A.isBool(name[n])
? name[n]
: o[x].getAttribute(n)
? false
: true,
);
}
}
}
}
return $A._XR.call(this, e);
},
prevSibling: function (e, t) {
if (this._4X) {
t = e;
e = this._X;
}
e = $A.morph(e);
e = $A._check(e, true);
if (!$A.isNode(e, null, null, 11)) return this._4X ? this : e;
e = e.previousSibling;
while (e) {
if ($A.isNode(e) && (!$A.isFn(t) || ($A.isFn(t) && t(e) === true)))
break;
e = e.previousSibling;
}
return $A._XR.call(this, e);
},
nextSibling: function (e, t) {
if (this._4X) {
t = e;
e = this._X;
}
e = $A.morph(e);
e = $A._check(e, true);
if (!$A.isNode(e, null, null, 11)) return this._4X ? this : e;
e = e.nextSibling;
while (e) {
if ($A.isNode(e) && (!$A.isFn(t) || ($A.isFn(t) && t(e) === true)))
break;
e = e.nextSibling;
}
return $A._XR.call(this, e);
},
firstChild: function (e, t) {
if (this._4X) {
t = e;
e = this._X;
}
e = $A.morph(e);
e = $A._check(e, true);
if (!$A.isNode(e, null, null, 11)) return this._4X ? this : e;
e = e.firstChild;
while (e) {
if ($A.isNode(e) && (!$A.isFn(t) || ($A.isFn(t) && t(e) === true)))
break;
e = e.nextSibling;
}
return $A._XR.call(this, e);
},
lastChild: function (e, t) {
if (this._4X) {
t = e;
e = this._X;
}
e = $A.morph(e);
e = $A._check(e, true);
if (!$A.isNode(e, null, null, 11)) return this._4X ? this : e;
e = e.lastChild;
while (e) {
if ($A.isNode(e) && (!$A.isFn(t) || ($A.isFn(t) && t(e) === true)))
break;
e = e.previousSibling;
}
return $A._XR.call(this, e);
},
nearestHL: function (e, context) {
if (!$A.isNode(e)) return 0;
if (!e.id) e.id = $A.genId();
var els = (context || document).querySelectorAll(
'h1, h2, h3, h4, h5, h6, *[role="heading"], #' + e.id,
),
h = null;
$A.loop(
els,
function (i, o) {
if (e === o) h = els[i - 1] || null;
},
"array",
);
if (!$A.isNode(h)) return 0;
var l = 0,
nn = h.nodeName.toLowerCase();
if (nn.length === 2 && nn[0] === "h")
l = parseInt(h.getAttribute("aria-level")) || parseInt(nn[1]) || 0;
if (h.getAttribute("role") === "heading")
l = parseInt(h.getAttribute("aria-level")) || l || 2;
return l;
},
closest: function (node, fn) {
if (this._4X) {
fn = node;
node = this._X;
}
node = $A.morph(node);
while ($A.isNode(node)) {
node = node.parentNode;
if (!$A.isFn(fn) || ($A.isFn(fn) && fn(node) === true)) break;
}
return $A._XR.call(this, node);
},
_getStyleObject: function (node) {
var style = {};
if (document.defaultView && document.defaultView.getComputedStyle) {
style = document.defaultView.getComputedStyle(node, "");
} else if (node.currentStyle) {
style = node.currentStyle;
}
return style;
},
css: function (ob, p, v) {
if (this._4X) {
v = p;
p = ob;
ob = this._X;
}
ob = $A.morph(ob);
var obj = $A._check(ob);
if (!obj || !p) return this._4X ? this : ob;
if (!$A.isArray(obj)) obj = [obj];
if (
obj.length === 1 &&
$A.isNode(obj[0]) &&
$A.isStr(p) &&
!$A.isStr(v) &&
!$A.isNum(v) &&
!v
) {
return $A._getStyleObject(obj[0])[p];
}
var isNumProp = function (n) {
if (!n) return false;
var list = ["top", "left", "bottom", "right", "width", "height"];
for (var l = 0; l < list.length; l++) {
if (list[l].substr(list[l].length - n.length) === n) return true;
}
return false;
};
var setProp = function (o, prop, val) {
val = isNumProp(prop) && $A.isNum(val) ? val + "px" : val;
try {
if (!(val || $A.isNum(val)) && o.style.removeProperty) {
o.style.removeProperty(prop);
} else {
prop = $A._camelize(prop);
o.style[prop] = val;
}
} catch (e) {}
};
for (var z = 0; z < obj.length; z++) {
if ($A.isNode(obj[z])) {
if ($A.isStr(p)) setProp(obj[z], p, v);
else if (typeof p === "object") {
for (var n in p) {
var v = p[n];
setProp(obj[z], n, v);
}
}
}
}
return $A._XR.call(this, ob);
},
hasClass: function (O, cn) {
if (this._4X) {
cn = O;
O = this._X;
}
var t = $A.morph(O);
var o = $A._check(t, true);
if (!$A.isNode(o) || !o.className || !cn || !$A.isStr(cn))
return false;
var names = cn.split(/\s+/),
i = 0,
n = 0;
try {
var cL = o.classList;
for (n = 0; n < names.length; n++) {
if (cL.contains(names[n])) i += 1;
}
} catch (e) {
var oClasses = o.className ? o.className.split(/\s+/) : [];
for (n = 0; n < names.length; n++) {
if (oClasses.indexOf(names[n]) !== -1) i += 1;
}
}
return i === names.length;
},
addClass: function (obj, cn) {
if (this._4X) {
cn = obj;
obj = this._X;
}
obj = $A.morph(obj);
var o = $A._check(obj);
if (!o || !cn || !$A.isStr(cn)) return this._4X ? this : obj;
if (!$A.isArray(o)) o = [o];
var names = cn.split(/\s+/);
for (var x = 0; x < o.length; x++) {
var n = 0;
try {
var cL = o[x].classList;
for (n = 0; n < names.length; n++) cL.add(names[n]);
} catch (e) {
if ($A.isNode(o[x]) && !$A.hasClass(o[x], cn)) {
var oClasses = o[x].className
? o[x].className.split(/\s+/)
: [];
for (n = 0; n < names.length; n++) {
if (oClasses.indexOf(names[n]) === -1)
oClasses.push(names[n]);
}
o[x].className = oClasses.join(" ");
}
}
}
return $A._XR.call(this, obj);
},
remClass: function (obj, cn) {
if (this._4X) {
cn = obj;
obj = this._X;
}
obj = $A.morph(obj);
var o = $A._check(obj);
if (!o || !cn || !$A.isStr(cn)) return this._4X ? this : obj;
if (!$A.isArray(o)) o = [o];
var names = cn.split(/\s+/);
for (var x = 0; x < o.length; x++) {
var n = 0;
try {
var cL = o[x].classList;
for (n = 0; n < names.length; n++) cL.remove(names[n]);
} catch (e) {
if ($A.isNode(o[x]) && $A.hasClass(o[x], cn)) {
var oClasses = o[x].className
? o[x].className.split(/\s+/)
: [],
nc = [];
for (n = 0; n < oClasses.length; n++) {
if (names.indexOf(oClasses[n]) === -1) nc.push(oClasses[n]);
}
o[x].className = nc.join(" ");
}
}
}
return $A._XR.call(this, obj);
},
toggleClass: function (obj, cn, isTrue, fn) {
if (this._4X) {
fn = isTrue;
isTrue = cn;
cn = obj;
obj = this._X;
}
if ($A.isFn(isTrue)) {
fn = isTrue;
isTrue = null;
}
obj = $A.morph(obj);
var O = $A._check(obj);
if (!O || !cn || !$A.isStr(cn)) return this._4X ? this : obj;
if (!$A.isArray(O)) O = [O];
for (var x = 0; x < O.length; x++) {
var o = O[x];
if (!$A.isBool(isTrue)) isTrue = !$A.hasClass(o, cn);
$A[isTrue ? "addClass" : "remClass"](o, cn);
if ($A.isFn(fn)) fn.apply(o, [isTrue]);
}
return $A._XR.call(this, obj);
},
setOffScreen: function (obj) {
if (this._4X) {
obj = this._X;
}
$A.css(obj, $A.sraCSS);
return $A._XR.call(this, obj);
},
clearOffScreen: function (obj) {
if (this._4X) {
obj = this._X;
}
$A.css(obj, $A.sraCSSClear);
return $A._XR.call(this, obj);
},
sraCSS: {
position: "absolute",
clip: "rect(1px 1px 1px 1px)",
clip: "rect(1px, 1px, 1px, 1px)",
clipPath: "inset(50%)",
padding: 0,
border: 0,
height: "1px",
width: "1px",
overflow: "hidden",
whiteSpace: "nowrap",
},
sraCSSClear: {
position: "",
clip: "auto",
clipPath: "none",
padding: "",
height: "",
width: "",
overflow: "",
whiteSpace: "normal",
},
_calcPosition: function (dc, objArg, posVal) {
var obj = objArg || dc.posAnchor;
if (obj && $A.isStr(obj)) obj = $A.query(obj)[0];
else if (!obj) obj = dc.triggerNode;
if (!obj) return;
var autoPosition = posVal || dc.autoPosition,
pos = {},
aPos = {
height: $A.elementHeight(dc.wrapper),
width: $A.elementWidth(dc.wrapper),
},
oPos = $A.offset(obj),
position = $A.css(dc.wrapper, "position");
if (position === "absolute" && $A.css(obj, "position") !== "fixed")
oPos = $A.offset(obj, true);
if (autoPosition === 1) {
pos.left = oPos.left;
pos.top = oPos.top - aPos.height;
} else if (autoPosition === 2) {
pos.left = oPos.right;
pos.top = oPos.top - aPos.height;
} else if (autoPosition === 3) {
pos.left = oPos.right;
pos.top = oPos.top;
} else if (autoPosition === 4) {
pos.left = oPos.right;
pos.top = oPos.bottom;
} else if (autoPosition === 5) {
pos.left = oPos.left;
pos.top = oPos.bottom;
} else if (autoPosition === 6) {
pos.left = oPos.left - aPos.width;
pos.top = oPos.bottom;
} else if (autoPosition === 7) {
pos.left = oPos.left - aPos.width;
pos.top = oPos.top;
} else if (autoPosition === 8) {
pos.left = oPos.left - aPos.width;
pos.top = oPos.top - aPos.height;
} else if (autoPosition === 9) {
pos.left = oPos.left;
pos.top = oPos.top;
} else if (autoPosition === 10) {
pos.left = oPos.right - aPos.width;
pos.top = oPos.top - aPos.height;
} else if (autoPosition === 11) {
pos.left = oPos.right - aPos.width;
pos.top = oPos.top;
} else if (autoPosition === 12) {
pos.left = oPos.right - aPos.width;
pos.top = oPos.bottom;
}
if ($A.isNum(dc.offsetTop) && (dc.offsetTop < 0 || dc.offsetTop > 0))
pos.top += dc.offsetTop;
if (
$A.isNum(dc.offsetLeft) &&
(dc.offsetLeft < 0 || dc.offsetLeft > 0)
)
pos.left += dc.offsetLeft;
$A.css(dc.wrapper, pos);
},
getWindow: function (w) {
var w = $A.isNode(w, window) ? w : window;
return {
width:
w.document.documentElement.clientWidth ||
w.document.body.clientWidth,
height:
w.document.documentElement.clientHeight ||
w.document.body.clientHeight,
};
},
_getAbsolutePos: function (obj) {
if (!obj) return obj;
var curleft = 0;
var curtop = 0;
do {
curleft += obj.offsetLeft;
curtop += obj.offsetTop;
} while ((obj = obj.offsetParent));
return {
left: curleft,
top: curtop,
};
},
offset: function (c, forceAbsolute, forceRelative, returnTopLeftOnly) {
if (this._4X) {
returnTopLeftOnly = forceRelative;
forceRelative = forceAbsolute;
forceAbsolute = c;
c = this._X;
}
if (!$A.isNode(c, window)) return c;
var r = {},
position = $A.css(c, "position");
if (forceAbsolute || position === "absolute")
r = $A._getAbsolutePos(c);
else if (forceRelative || position === "relative") {
r.top = c.offsetTop;
r.left = c.offsetLeft;
r.height = $A.elementHeight(c);
r.width = $A.elementWidth(c);
r.right = r.left + r.width;
r.bottom = r.top + r.height;
} else {
var br = c.getBoundingClientRect();
r = {
top: br.top,
left: br.left,
right: br.right,
bottom: br.bottom,
height: br.height,
width: br.width,
};
}
if (returnTopLeftOnly) {
// Ensure only top and left properties are returned if returnTopLeftOnly = true
r = {
top: r.top,
left: r.left,
};
}
return r;
},
_camelize: function (cssPropStr) {
if (!$A.isStr(cssPropStr)) cssPropStr = "";
var i, c, a, s;
a = cssPropStr.split("-");
s = a[0];
for (i = 1; i < a.length; i++) {
c = a[i].charAt(0);
s += a[i].replace(c, c.toUpperCase());
}
return s;
},
_getComputedStyle: function (e, p, i) {
if (!e) return e;
var s,
v = "undefined",
dv = document.defaultView;
if (dv && dv.getComputedStyle) {
if (e === document) e = document.body;
s = dv.getComputedStyle(e, "");
if (s) v = s.getPropertyValue(p);
} else if (e.currentStyle) v = e.currentStyle[$A._camelize(p)];
else return null;
return i ? parseInt(v, 10) || 0 : v;
},
_num: function () {
for (var i = 0; i < arguments.length; i++) {
if (isNaN(arguments[i]) || !$A.isNum(arguments[i])) return false;
}
return true;
},
_def: function () {
for (var i = 0; i < arguments.length; i++) {
if (typeof arguments[i] === "undefined") return false;
}
return true;
},
_str: function () {
for (var i = 0; i < arguments.length; i++) {
if (!$A.isStr(arguments[i])) return false;
}
return true;
},
elementHeight: function (e, h) {
var css,
pt = 0,
pb = 0,
bt = 0,
bb = 0;
if (!e) return 0;
if ($A._num(h)) {
if (h < 0) h = 0;
else h = Math.round(h);
} else h = -1;
css = $A._def(e.style);
if (css && $A._def(e.offsetHeight) && $A._str(e.style.height)) {
if (h >= 0) {
if (document.compatMode === "CSS1Compat") {
pt = $A._getComputedStyle(e, "padding-top", 1);
if (pt !== null) {
pb = $A._getComputedStyle(e, "padding-bottom", 1);
bt = $A._getComputedStyle(e, "border-top-width", 1);
bb = $A._getComputedStyle(e, "border-bottom-width", 1);
} else if ($A._def(e.offsetHeight, e.style.height)) {
e.style.height = h + "px";
pt = e.offsetHeight - h;
}
}
h -= pt + pb + bt + bb;
if (isNaN(h) || h < 0) return;
else e.style.height = h + "px";
}
h = e.offsetHeight;
} else if (css && $A._def(e.style.pixelHeight)) {
if (h >= 0) e.style.pixelHeight = h;
h = e.style.pixelHeight;
}
return h;
},
elementWidth: function (e, w) {
var css,
pl = 0,
pr = 0,
bl = 0,
br = 0;
if (!e) return 0;
if ($A._num(w)) {
if (w < 0) w = 0;
else w = Math.round(w);
} else w = -1;
css = $A._def(e.style);
if (css && $A._def(e.offsetWidth) && $A._str(e.style.width)) {
if (w >= 0) {
if (document.compatMode === "CSS1Compat") {
pl = $A._getComputedStyle(e, "padding-left", 1);
if (pl !== null) {
pr = $A._getComputedStyle(e, "padding-right", 1);
bl = $A._getComputedStyle(e, "border-left-width", 1);
br = $A._getComputedStyle(e, "border-right-width", 1);
} else if ($A._def(e.offsetWidth, e.style.width)) {
e.style.width = w + "px";
pl = e.offsetWidth - w;
}
}
w -= pl + pr + bl + br;
if (isNaN(w) || w < 0) return;
else e.style.width = w + "px";
}
w = e.offsetWidth;
} else if (css && $A._def(e.style.pixelWidth)) {
if (w >= 0) e.style.pixelWidth = w;
w = e.style.pixelWidth;
}
return w;
},
_top: function (e, iY) {
var css = $A._def(e.style);
if (css && $A._str(e.style.top)) {
if ($A._num(iY)) e.style.top = iY + "px";
else {
iY = parseInt(e.style.top, 10);
if (isNaN(iY)) iY = $A._getComputedStyle(e, "top", 1);
if (isNaN(iY)) iY = 0;
}
} else if (css && $A._def(e.style.pixelTop)) {
if ($A._num(iY)) e.style.pixelTop = iY;
else iY = e.style.pixelTop;
}
return iY;
},
_left: function (e, iX) {
var css = $A._def(e.style);
if (css && $A._str(e.style.left)) {
if ($A._num(iX)) e.style.left = iX + "px";
else {
iX = parseInt(e.style.left, 10);
if (isNaN(iX)) iX = $A._getComputedStyle(e, "left", 1);
if (isNaN(iX)) iX = 0;
}
} else if (css && $A._def(e.style.pixelLeft)) {
if ($A._num(iX)) e.style.pixelLeft = iX;
else iX = e.style.pixelLeft;
}
return iX;
},
isPointerWithin: function (n) {
if (
$A.isNode(n) &&
$A.event.pointer &&
$A.isNode($A.event.pointer.target)
) {
return $A.isWithin($A.event.pointer.target, n);
}
return false;
},
owns: function (o, targ) {
if (this._4X) {
targ = o;
o = this._X;
}
var a = [],
o = $A.morph(o);
if ($A.isNode(o)) {
$A.query(targ, function (i, t) {
if ($A.isNode(t)) a.push(t);
});
a = a.reverse();
$A.loop(
a,
function (i, t) {
if (!t.id) t.id = $A.genId();
var id = t.id;
if (
["input", "img", "progress", "iframe", "hr"].indexOf(
o.nodeName.toLowerCase(),
) === -1
)
$A.addIdRef(o, "aria-owns", id);
},
"array",
);
}
return $A._XR.call(this, o);
},
controls: function (o, targ, attr) {
if (this._4X) {
targ = o;
o = this._X;
}
attr = attr || "aria-controls";
$A.query(targ, function (i, t) {
if ($A.isNode(t)) {
if (!t.id) t.id = $A.genId();
var id = t.id;
$A.query(o, function (i, o) {
$A.addIdRef(o, attr, id);
});
}
});
return $A._XR.call(this, o);
},
labelledBy: function (o, targ) {
if (this._4X) {
targ = o;
o = this._X;
}
o = $A.controls(o, targ, "aria-labelledby");
return $A._XR.call(this, o);
},
describedBy: function (o, targ) {
if (this._4X) {
targ = o;
o = this._X;
}
o = $A.controls(o, targ, "aria-describedby");
return $A._XR.call(this, o);
},
flowsTo: function (o, targ) {
if (this._4X) {
targ = o;
o = this._X;
}
o = $A.controls(o, targ, ["aria-controls", "aria-flowto"]);
return $A._XR.call(this, o);
},
addIdRef: function (obj, attr, ids) {
if (this._4X) {
ids = attr;
attr = obj;
obj = this._X;
}
obj = $A.morph(obj);
var t = $A._check(obj),
ni = (ids || "").split(/\s+/);
$A.loop(
t,
function (i, o) {
$A.loop(
attr,
function (j, attr) {
var ds = ($A.getAttr(o, attr) || "").split(/\s+/);
for (var z = 0; z < ni.length; z++) {
var d = ni[z];
if (ds.indexOf(d) === -1) ds.push(d);
}
$A.setAttr(o, attr, ds.join(" "));
},
"array",
);
},
"array",
);
return $A._XR.call(this, obj);
},
remIdRef: function (obj, attr, ids) {
if (this._4X) {
ids = attr;
attr = obj;
obj = this._X;
}
obj = $A.morph(obj);
var t = $A._check(obj),
ni = (ids || "").split(/\s+/);
$A.loop(
t,
function (i, o) {
$A.loop(
attr,
function (j, attr) {
var n = [],
ds = ($A.getAttr(o, attr) || "").split(/\s+/);
for (var z = 0; z < ds.length; z++) {
var d = ds[z];
if (ni.indexOf(d) === -1) n.push(d);
}
$A.setAttr(o, attr, n.join(" "));
},
"array",
);
},
"array",
);
return $A._XR.call(this, obj);
},
genId: function (obj) {
if (this._4X) {
obj = this._X;
}
var id = "DC4X" + now();
if (obj && $A.isStr(obj)) {
obj = $A.morph(obj);
obj = $A._check(obj, true);
}
if ($A.isNode(obj)) {
obj.id = id;
return $A._XR.call(this, obj);
}
return id;
},
announce: function (str, noRepeat, aggr) {
if (this._4X) {
aggr = noRepeat;
noRepeat = str;
str = this._X;
}
if (str) announceString(str, noRepeat, aggr);
return $A._XR.call(this, str);
},
alert: function (str, noRepeat) {
if (this._4X) {
noRepeat = str;
str = this._X;
}
if (str) announceString(str, noRepeat, true);
return $A._XR.call(this, str);
},
// Derived from isOutOfViewport.js by Chris Ferdinandi
// https://vanillajstoolkit.com/helpers/isoutofviewport/
isOutOfView: function (elem) {
var bounding = elem.getBoundingClientRect();
var out = {
bounding: bounding,
};
out.top = bounding.top < 0;
out.left = bounding.left < 0;
out.bottom =
bounding.bottom >
(window.innerHeight || document.documentElement.clientHeight);
out.right =
bounding.right >
(window.innerWidth || document.documentElement.clientWidth);
out.any = out.top || out.left || out.bottom || out.right;
out.all = out.top && out.left && out.bottom && out.right;
return out;
},
getOrientation: function (nodes) {
if (this._4X) {
nodes = this._X;
}
if (!$A.isArray(nodes)) {
nodes = $A.morph(nodes);
nodes = $A._check(nodes);
}
var r = {};
if (
!nodes ||
!$A.isArray(nodes) ||
nodes.length < 2 ||
!$A.isNode(nodes[0])
)
return r;
var nt = [],
nl = [],
fn,
ln;
$A.loop(
nodes,
function (i, n) {
var o = $A.offset(n);
if (i === 0) fn = o;
else if (i === nodes.length - 1) ln = o;
nt.push(o.top);
nl.push(o.left);
},
"array",
);
var max = function (a, b) {
return Math.max(a, b);
},
min = function (a, b) {
return Math.min(a, b);
},
maxT = nt.reduce(max),
minT = nt.reduce(min),
maxL = nl.reduce(max),
minL = nl.reduce(min),
diffT = maxT - minT,
diffL = maxL - minL;
r.orientation = diffL > diffT ? "horizontal" : "vertical";
r.lineWrap =
r.orientation === "horizontal" &&
(ln.bottom - fn.top) * 0.8 > fn.height
? true
: false;
return r;
},
focus: function (obj, f) {
if (this._4X) {
f = obj;
obj = this._X;
}
obj = $A.morph(obj);
if (!$A.isNode(obj)) return this._4X ? this : obj;
$A._setFocus(obj);
if ($A.isFn(f)) f.call(obj, obj);
return $A._XR.call(this, obj);
},
isFocusWithin: function (o) {
if (this._4X) {
o = this._X;
}
if ($A.isNode(o, null, document) && o.querySelectorAll) {
return o.querySelectorAll("*:focus").length > 0;
}
return false;
},
isHidden: function (o) {
if (this._4X) {
o = this._X;
}
if (!$A.isNode(o)) return true;
if (
o.offsetHeight + o.offsetWidth < 1 ||
$A.css(o, "visibility") === "hidden"
)
return true;
return false;
},
isWithin: function (node, container) {
if (this._4X) {
container = node;
node = this._X;
}
var n = node,
d = $A.isNode(container, null, null, 11)
? container
: document.body;
while ($A.isNode(n, null, null, 11, 3)) {
if (n === d) return true;
n = n.parentNode;
}
return false;
},
hide: function (o) {
if (this._4X) {
o = this._X;
}
o = $A.morph(o);
if ($A.isNode(o)) o.hidden = true;
return $A._XR.call(this, o);
},
show: function (o) {
if (this._4X) {
o = this._X;
}
o = $A.morph(o);
if ($A.isNode(o)) o.hidden = false;
return $A._XR.call(this, o);
},
hideBackground: function (eN) {
if (this._4X) {
eN = this._X;
}
var n = eN ? $A.morph(eN) : null;
if (!$A.isNode(n)) {
$A.showBackground();
} else {
if (
!(
n &&
n.parentNode &&
n.parentNode.nodeName &&
n.parentNode.nodeName.toLowerCase() === "body"
)
)
document.body.appendChild(n);
$A.loop(
document.body.children,
function (i, o) {
if ($A.isNode(o)) {
var m = o === n;
o.inert = m ? false : true;
$A.setAttr(o, "aria-hidden", m ? "false" : "true");
if (m) $A.remAttr(o, "aria-hidden");
}
},
"array",
);
}
return $A._XR.call(this, n);
},
showBackground: function (eN) {
if (this._4X) {
eN = this._X;
}
var n = eN ? $A.morph(eN) : null;
if ($A.isNode(n)) {
$A.hideBackground(n);
} else {
$A.loop(
document.body.children,
function (i, o) {
if ($A.isNode(o)) {
o.inert = false;
$A.remAttr(o, "aria-hidden");
}
},
"array",
);
}
return $A._XR.call(this, n);
},
svgFix: function (c) {
if (this._4X) {
c = this._X;
}
c = $A.morph(c);
if ($A.isNode(c, null, document, 11)) {
if ($A.isIE())
$A.query("svg", c, function (i, o) {
$A.setAttr(o, "focusable", "false");
});
}
return $A._XR.call(this, c);
},
setKBA11Y: function (node, role, name, noSpacebar, fn) {
if (this._4X) {
fn = noSpacebar;
noSpacebar = name;
name = role;
role = node;
node = this._X;
}
if ($A.isFn(role)) {
fn = role;
role = null;
}
if ($A.isFn(name)) {
fn = name;
name = null;
}
if ($A.isFn(noSpacebar)) {
fn = noSpacebar;
noSpacebar = null;
}
if ($A.isBool(role)) {
noSpacebar = role;
role = null;
}
if ($A.isBool(name)) {
noSpacebar = name;
name = null;
}
role = role || "button";
var nodes = $A.query(node, function (i, node) {
if ($A.isNode(node) && !$A.isNative(node)) {
$A.setAttr(node, {
tabindex: 0,
role: role,
});
if (name) $A.setAttr(node, "aria-label", name);
if ($A.isFn(fn)) $A.on(node, "click.kba11y", fn);
$A.on(
node,
{
keydown: function (ev) {
var k = $A.keyEvent(ev);
if (k === 13 || (!noSpacebar && k === 32)) {
$A.trigger(node, "click");
ev.preventDefault();
}
},
},
".kba11y",
);
return true;
}
return false;
});
if (!nodes.length) node = null;
else if (nodes.length === 1) node = nodes[0];
else node = nodes;
return $A._XR.call(this, node);
},
setDisabled: function (o, disable) {
if (this._4X) {
disable = o;
o = this._X;
}
var t = o,
isDC = false;
if (!$A.isDC(o) && $A.hasDC(o)) o = $A.getDC(o);
if ($A.isDC(o)) {
t = o.triggerNode || o.trigger;
isDC = true;
}
$A.query(t, function (i, o) {
var isNat = $A.isNative(o),
isLink = isNat && o.nodeName.toLowerCase() === "a";
if (isNat && !isLink) o.disabled = disable ? true : false;
else {
$A.setAttr(o, "aria-disabled", disable ? "true" : "false");
if (isLink) {
if (disable)
$A.on(o, "click.disable", function (ev) {
ev.preventDefault();
});
else $A.off(o, "click.disable");
}
}
$A.data(o, "disabled", disable ? true : false);
if (isDC) o.disabled = true;
});
return $A._XR.call(this, o);
},
isDisabled: function (o) {
if (this._4X) {
o = this._X;
}
var t = o;
if (!$A.isDC(o) && $A.hasDC(o)) o = $A.getDC(o);
if ($A.isDC(o)) t = o.triggerNode || $A.query(o.trigger)[0];
if (
($A.isDC(o) && o.disabled) ||
$A.data(t, "disabled") ||
($A.isNode(t) && $A.getAttr(t, "aria-disabled") === "true")
)
return true;
return false;
},
updateDisabled: function (o) {
if (this._4X) {
o = this._X;
}
var a = o;
if ($A.isDC(o)) a = o.siblings;
if (!a) a = document.querySelectorAll('*[aria-disabled="true"]');
$A.loop(
a,
function (i, o) {
var t = o;
if (!$A.isDC(o) && $A.hasDC(o)) o = $A.getDC(o);
if ($A.isDC(o)) t = o.triggerNode || o.trigger;
$A.query(t, function (x, e) {
var isD =
($A.isNative(e) && e.disabled) ||
$A.getAttr(e, "aria-disabled") === "true"
? true
: false;
if (isD) $A.data(e, "disabled", true);
});
},
"array",
);
return $A._XR.call(this, o);
},
isFocusable: function (node, usingFocus) {
if (this._4X) {
usingFocus = node;
node = this._X;
}
if (!$A.isNode(node) || $A.isHidden(node) || !$A.isWithin(node))
return false;
var tabI = parseInt($A.getAttr(node, "tabindex"));
return (usingFocus && $A.isNum(tabI)) ||
(!usingFocus && $A.isNum(tabI) && tabI >= 0) ||
($A.isNative(node) && !node.disabled)
? true
: false;
},
_setFocus: function (o) {
if ($A.isNode(o)) {
if (!$A.isFocusable(o)) $A.setAttr(o, "tabindex", -1);
o.focus();
}
return o;
},
_GenDC: function (DCObjects, gImport, parentDC) {
var WL = [],
checkWT = function (dc) {
var dc = WL[DC.indexVal],
w = 0,
wt = null,
wtA = [];
if (dc.top.widgetType && $A._widgetTypes.length) {
for (w = 0; w < $A._widgetTypes.length; w++) {
wt = $A.reg.get($A._widgetTypes[w]);
if (
wt &&
wt.top.autoCloseWidget &&
wt.top.loaded &&
wt.top.widgetType !== dc.top.widgetType
) {
wt.top.bypass();
}
}
}
if (
dc.top.autoCloseSameWidget &&
$A._regWidgets.has(dc.top.widgetType)
) {
wtA = $A._regWidgets.get(dc.top.widgetType);
for (w = 0; w < wtA.length; w++) {
wt = $A.reg.get(wtA[w]);
wt.top.currentWT = wt.top === dc.top;
if (wt && wt.top.loaded && !wt.top.currentWT) {
wt.top.bypass();
}
if (
wt &&
wt.top.isAnimating &&
wt.top.loading &&
!wt.top.currentWT &&
$A.Velocity
) {
$A.Velocity.animate(wt.top.wrapper, "finish");
wt.top.css(wt.top.style);
}
}
}
return dc;
},
DCR1 = function (DC) {
var dc = WL[DC.indexVal],
disabled = dc.isDisabled();
if (
disabled ||
dc.loading ||
dc.loaded ||
dc.allowRerender ||
dc.lock ||
dc.closing
) {
if (dc.loaded && dc.isToggle) closeDC(dc);
else if (dc.loaded && dc.allowRerender)
dc.bypass(function () {
DCR1(dc);
});
if (
!(
dc.allowRerender &&
!disabled &&
!dc.loading &&
!dc.loaded &&
!dc.lock &&
!dc.closing
)
)
return dc;
}
checkWT(dc);
dc.cancel = false;
dc.fn.baseId = $A.genId();
dc.wrapperId = dc.fn.baseId + "ON";
dc.containerId = dc.fn.baseId + "IN";
$A.getModule(dc, "beforeRender", dc.container);
$A._parseDCScripts(dc, "BeforeRender", DCR2);
return dc;
},
DCR2 = function (DC) {
var dc = WL[DC.indexVal];
if (dc.cancel) {
dc.cancel = dc.loading = false;
return dc;
}
dc.loading = true;
if (dc.mode && dc.toggleHide) dc.toggleHide = false;
if (dc.toggleHide) {
if (dc.isLoading) dc.fn.afterLoaded = DCR3;
else DCR3(dc);
return dc;
}
switch (dc.mode) {
case 1:
dc.content = $A.toNode();
dc.isLoading = true;
$A.load(
dc.fetch.url,
dc.content,
dc.fetch.data,
function (content, promise) {
dc.isLoading = false;
if (dc.preloadImages) $A.preload(content);
$A.getModule(dc, "afterFetch", content);
dc.fetch.success(content, promise, dc);
DCR3(dc);
},
function (errorMsg, promise) {
dc.isLoading = false;
dc.fetch.error(errorMsg, promise, dc);
$A.parseDebug(errorMsg);
},
);
break;
case 2:
dc.content = $A.toNode();
dc.isLoading = true;
$A.Get({
url: dc.fetch.url,
data: dc.fetch.data,
success: function (content, promise) {
dc.isLoading = true;
if (dc.preloadImages) $A.preload(content);
$A.getModule(dc, "afterFetch", content);
dc.fetch.success(content, promise, dc);
DCR3(dc);
},
error: function (errorMsg, promise) {
dc.isLoading = false;
dc.fetch.error(errorMsg, promise, dc);
},
});
break;
default:
if (dc.isLoading) dc.fn.afterLoaded = DCR3;
else DCR3(dc);
}
return dc;
},
DCR3 = function (DC) {
var dc = WL[DC.indexVal];
if (dc.cancel) {
dc.cancel = dc.loading = false;
return dc;
}
if (!dc.toggleHide) {
if (dc.importCSS) {
dc.fn.style = $A.toNode();
$A.import(dc.importCSS, {}, dc.fn.style);
}
if (dc.exposeBounds) dc.contentOnly = false;
} else dc.contentOnly = true;
if (!dc.contentOnly) {
dc.wrapper = $A.create("div", {
id: dc.wrapperId,
});
dc.container = $A.create("div", {
id: dc.containerId,
});
dc.wrapper.appendChild(dc.container);
if ($A.isStr(dc.content) && $A.isMarkup(dc.content))
$A.insertMarkup(dc.content, dc.container);
else $A.insert(dc.content, dc.container, null, true);
var fC = $A.firstChild(dc.container);
if (fC && fC.hidden) fC.hidden = false;
} else {
dc.content = $A.morph(dc.content);
if (!dc.toggleHide) dc.content = $A._check(dc.content, true);
dc.wrapper = dc.container = dc.content;
if (!dc.content.id) dc.content.id = dc.fn.baseId;
dc.wrapperId = dc.containerId = dc.content.id;
if (!dc.toggleHide && dc.content.hidden)
dc.content.hidden = false;
}
if (!dc.toggleHide) {
var scripts = dc.container.querySelectorAll("script");
if (scripts.length) {
$A.loop(
scripts,
function (i, s) {
if (s.src) {
if (!$A.isArray(dc.jsAfter)) dc.jsAfter = [];
dc.jsAfter.push(s.src);
} else {
if (!$A.isArray(dc.embeddedJS)) dc.embeddedJS = [];
dc.embeddedJS.push(
new Function("window,document,$A,DC,dc", s.innerHTML),
);
}
s.parentNode.removeChild(s);
},
"array",
);
}
if (dc.fn.style) $A.prepend(dc.fn.style, dc.wrapper);
if (dc.className) dc.addClass(dc.className);
if (dc.displayInline)
$A.css([dc.wrapper, dc.container], "display", "inline");
}
if (dc.style) dc.css(dc.style);
if (dc.exposeBounds) {
dc.setAttr("role", "region");
}
if (
$A.module[dc.widgetType] &&
$A.isFn($A.module[dc.widgetType].role)
)
dc.setAttr($A.module[dc.widgetType].role.call(dc, dc));
if (
$A.module[dc.widgetType] &&
$A.isFn($A.module[dc.widgetType].innerRole)
)
$A.setAttr(
dc.container,
$A.module[dc.widgetType].innerRole.call(dc, dc),
);
if (dc.ariaLabelledby && dc.triggerNode) {
if (!dc.triggerNode.id) dc.triggerNode.id = $A.genId();
$A.addIdRef(dc.wrapper, "aria-labelledby", dc.triggerNode.id);
} else if (dc.role) dc.setAttr("aria-label", dc.role);
if (dc.ariaControls && dc.triggerNode) {
$A.setAttr(dc.triggerNode, "aria-controls", dc.wrapperId);
}
$A.getModule(dc, "duringRender", dc.container);
$A._parseDCScripts(dc, "DuringRender", DCR4);
return dc;
},
DCR4 = function (DC) {
var dc = WL[DC.indexVal];
if (dc.cancel) {
dc.cancel = dc.loading = false;
return dc;
}
for (var w = 0; w < dc.siblings.length; w++) {
var sb = dc.siblings[w];
if (sb.loaded && !sb.allowMultiple) sb.bypass();
}
if (!dc.toggleHide) {
if (!dc.isRendered) {
if (dc.root) {
if ($A.isChain(dc.root)) dc.root = dc.root.return();
if (dc.before) {
if ($A.isFn(dc.before))
dc.before.apply(dc, [dc.wrapper, dc.root]);
else $A.before(dc.wrapper, dc.root);
} else if (dc.prepend) {
if ($A.isFn(dc.prepend))
dc.prepend.apply(dc, [dc.wrapper, dc.root]);
else {
try {
$A.prepend(dc.wrapper, dc.root);
} catch (e) {
$A.before(dc.wrapper, dc.root);
}
}
} else if (dc.append) {
if ($A.isFn(dc.append))
dc.append.apply(dc, [dc.wrapper, dc.root]);
else {
try {
$A.append(dc.wrapper, dc.root);
} catch (e) {
$A.after(dc.wrapper, dc.root);
}
}
} else if (dc.after) {
if ($A.isFn(dc.after))
dc.after.apply(dc, [dc.wrapper, dc.root]);
else $A.after(dc.wrapper, dc.root);
} else {
$A.insert(dc.wrapper, dc.root, null, true);
}
} else if (dc.targetNode)
$A._insertAfter(dc.wrapper, dc.targetNode);
else if (dc.triggerNode)
$A._insertAfter(dc.wrapper, dc.triggerNode);
}
} else {
dc.container.hidden = false;
dc.storeData = true;
}
dc.fn.wasRendered = dc.isRendered;
dc.isRendered = true;
if (!dc.storeData) {
if (dc.contentOnly) dc.content = dc.container.cloneNode(true);
else dc.content = $A.cloneNodes(dc.container);
}
var complete = function () {
$A.isAnimating = dc.isAnimating = false;
if (dc.isFocusable)
dc.setAttr({
tabindex: "0",
"aria-describedby": dc.containerId,
});
if (dc.autoPosition > 0 && !dc.root && !dc.autoFix)
$A._calcPosition(dc);
if (dc.autoFix) {
sizeAutoFix(dc);
setAutoFix(dc);
}
if (dc.exposeHiddenClose) {
dc.closeId = dc.fn.baseId + "CL";
dc.fn.closeLink = $A.create(
"a",
{
id: dc.closeId,
href: "#close",
},
$A.sraCSS,
dc.closeClassName,
);
dc.fn.closeLink.innerHTML = dc.hiddenCloseName;
$A.append(dc.fn.closeLink, dc.wrapper);
$A.on(dc.fn.closeLink, {
click: function (ev) {
dc.remove();
ev.preventDefault();
},
});
if (dc.displayHiddenClose)
$A.on(dc.fn.closeLink, {
focus: function (ev) {
var disableC =
$A.isFn(dc.tabOut) && dc.tabOut(ev, dc)
? true
: false;
if (!disableC) {
$A.clearOffScreen(this);
}
},
blur: function (ev) {
$A.setOffScreen(this);
},
});
else $A.setAttr(dc.fn.closeLink, "tabindex", "-1");
}
$A.query(
"." + dc.closeClassName,
dc.container,
function (i, c) {
if (dc.toggleHide) $A.off(c, "click.closeDC");
$A.on(c, "click.closeDC", function (ev) {
dc.remove();
ev.preventDefault();
});
},
);
$A.data(dc.wrapper, "DC-O", dc);
if (dc.escToClose) {
if (dc.toggleHide) $A.off(dc.wrapper, "keydown.esctoclose");
$A.on(dc.wrapper, "keydown.esctoclose", function (ev) {
var k = $A.keyEvent(ev);
if (k === 27) {
dc.remove();
ev.stopPropagation();
}
});
}
dc.activeElements = $A.getActive(dc.container, true);
if (dc.activeElements.length) {
dc.first = dc.activeElements[0];
dc.last = dc.activeElements[dc.activeElements.length - 1];
if (dc.circularTabbing) $A.setCircular(dc.activeElements);
}
var toBind = {};
$A.data(dc.id, "DC", dc);
$A.loop(
dc.events,
function (i, e) {
if ($A.isFn(dc[e])) {
toBind[e.toLowerCase().replace(/^on/, "")] = function (
ev,
) {
dc[e].apply(dc.wrapper, [ev, dc]);
};
}
},
"array",
);
if (dc.toggleHide) $A.off(dc.wrapper, ".extradchandlers4x");
$A.on(dc.wrapper, toBind, dc.id, ".extradchandlers4x");
dc.loading = false;
dc.loaded = true;
if (
dc.abortLoad ||
(dc.autoCloseSameWidget &&
$A._regWidgets.has(dc.widgetType) &&
!dc.currentWT)
) {
dc.abortLoad = false;
if (dc.fn.timer) clearTimeout(dc.fn.timer);
dc.fn.timer = setTimeout(function () {
dc.remove();
}, 1);
} else {
if (dc.toggleClassName)
$A.toggleClass(dc.triggerNode, dc.toggleClassName, true);
if ($A.isArray(dc.embeddedJS) && dc.embeddedJS.length) {
$A.loop(
dc.embeddedJS,
function (i, f) {
f.call(dc.container, window, document, $A, dc, dc);
},
"array",
);
}
$A.getModule(dc, "afterRender", dc.container);
$A._parseDCScripts(dc, "AfterRender", function () {
if (dc.scrollIntoView) {
if ($A.isFn(dc.scrollIntoView))
dc.scrollIntoView.call(dc.container, dc, dc.container);
else
dc.container.scrollIntoView({
behavior: "smooth",
});
}
$A.lastLoaded = dc;
if (dc.forceFocus) dc.focus(dc);
if ($A.isFn(dc.fn.renderCallback)) {
dc.fn.renderCallback.call(dc, dc);
dc.fn.renderCallback = null;
}
if (dc.announce)
$A.announce(dc.container, dc.noRepeat, dc.isAlert);
if ($A.straylight) $A.straylight(dc.container);
if ($A.isNum(dc.delayTimeout) && dc.delayTimeout > 0) {
if (dc.fn.timer) clearTimeout(dc.fn.timer);
dc.fn.timer = setTimeout(function () {
dc.timeout(dc);
}, dc.delayTimeout);
}
});
}
};
if (
!dc.fn.wasRendered &&
dc.animate &&
$A.isFn(dc.animate.onRender)
) {
$A.isAnimating = dc.isAnimating = true;
dc.animate.onRender.call(dc.wrapper, dc, dc.wrapper, complete);
} else complete();
return dc;
},
closeDC = function (DC) {
var dc = WL[DC.indexVal];
if (!dc.loaded || dc.lock || dc.closing) return dc;
dc.closing = true;
dc.cancel = false;
$A.getModule(dc, "beforeRemove", dc.container);
$A._parseDCScripts(dc, "BeforeRemove", function () {
if (!dc.loaded || dc.lock || dc.cancel) {
dc.closing = dc.cancel = false;
return dc;
}
dc.loaded = false;
var complete = function () {
$A.isAnimating = dc.isAnimating = false;
if (!dc.storeData) $A._cleanAll(dc.container, true);
if (dc.fn.style) $A.remove(dc.fn.style);
if (dc.fn.closeLink) $A.remove(dc.fn.closeLink);
if (!dc.toggleHide) {
if (dc.contentOnly) {
if (dc.container.parentNode)
dc.content = dc.container.parentNode.removeChild(
dc.container,
);
dc.wrapper = dc.container = null;
} else dc.content = $A.extractNodes(dc.container);
if ($A.isNode(dc.wrapper)) $A.empty(dc.wrapper, true);
} else {
dc.content = dc.container;
dc.content.hidden = true;
dc.wrapper = dc.container = null;
}
dc.isRendered = false;
dc.loaded = false;
if (dc.toggleClassName)
$A.toggleClass(dc.triggerNode, dc.toggleClassName, false);
dc.closing = false;
$A.getModule(dc, "afterRemove", dc.container);
$A._parseDCScripts(dc, "AfterRemove", function () {
if (!dc.fn.bypass) {
if (
dc.returnFocus &&
dc.triggerNode &&
!dc.rerouteFocus
) {
$A.focus(dc.triggerNode);
} else if (dc.rerouteFocus) {
$A.focus(dc.rerouteFocus);
dc.rerouteFocus = null;
}
}
if ($A.isFn(dc.fn.removeCallback)) {
dc.fn.removeCallback.call(dc, dc);
dc.fn.removeCallback = null;
}
});
};
if (dc.animate && $A.isFn(dc.animate.onRemove)) {
$A.isAnimating = dc.isAnimating = true;
dc.animate.onRemove.call(
dc.wrapper,
dc,
dc.wrapper,
complete,
);
} else complete();
});
return dc;
},
unsetTrigger = function (DC) {
var dc = WL[DC.indexVal];
if (!dc.trigger || !dc.on) return dc;
var events = [];
if ($A.isPlainObject(dc.on)) {
$A.loop(
dc.on,
function (e, f) {
events.push(e);
},
"object",
);
} else if ($A.isStr(dc.on)) {
events = dc.on.split(/\s+/);
}
$A.query(dc.trigger, function (i, o) {
$A.off(o, events);
});
return dc;
},
setTrigger = function (DC) {
var dc = WL[DC.indexVal];
unsetTrigger(dc);
setBindings(dc);
return dc;
},
setAutoFix = function (DC) {
var dc = WL[DC.indexVal];
if (!dc.loading && !dc.loaded) return dc;
var cs = {
position: "fixed",
right: "",
bottom: "",
top: "",
left: "",
};
switch (dc.autoFix) {
case 1:
cs.top = 0;
cs.left = "40%";
break;
case 2:
cs.top = 0;
cs.right = 0;
break;
case 3:
cs.top = "40%";
cs.right = 0;
break;
case 4:
cs.bottom = 0;
cs.right = 0;
break;
case 5:
cs.bottom = 0;
cs.left = "40%";
break;
case 6:
cs.bottom = 0;
cs.left = 0;
break;
case 7:
cs.top = "40%";
cs.left = 0;
break;
case 8:
cs.top = 0;
cs.left = 0;
break;
case 9:
cs.top = "40%";
cs.left = "40%";
break;
default:
cs = dc.style;
}
$A.css(dc.wrapper, cs);
return dc;
},
sizeAutoFix = function (DC) {
var dc = WL[DC.indexVal];
if (!dc.loading && !dc.loaded) return dc;
var win = $A.getWindow();
var bodyW = win.width,
bodyH = win.height,
aW = $A.elementWidth(dc.wrapper),
aH = $A.elementHeight(dc.wrapper);
var npw = 50;
if (bodyW > aW) npw = parseInt(((aW / bodyW) * 100) / 2, 10);
var nph = 50;
if (bodyH > aH) nph = parseInt(((aH / bodyH) * 100) / 2, 10);
switch (dc.autoFix) {
case 1:
case 5:
$A.css(dc.wrapper, "left", 50 - npw + "%");
break;
case 3:
case 7:
$A.css(dc.wrapper, "top", 50 - nph + "%");
break;
case 9:
$A.css(dc.wrapper, {
left: 50 - npw + "%",
top: 50 - nph + "%",
});
break;
default:
}
if (
dc.offsetTop < 0 ||
dc.offsetTop > 0 ||
dc.offsetLeft < 0 ||
dc.offsetLeft > 0
) {
var cs = $A.offset(dc.wrapper);
cs.top += dc.offsetTop;
cs.left += dc.offsetLeft;
$A.css(dc.wrapper, cs);
}
return dc;
},
setBindings = function (dc) {
var dc = WL[DC.indexVal];
dc.fn.internalEventsId = $A.getIdFor(dc.id) || $A.setIdFor(dc.id);
if (dc.trigger)
$A.query(dc.trigger, function (i, o) {
if (dc.toggleHide) $A.off(o, "." + dc.fn.internalEventsId);
if (!dc.triggerNode) dc.triggerNode = o;
if (!$A.isMap($A.data(o, "DC-ON")))
$A.data(o, "DC-ON", new Map());
$A.data(o, "DC-ON").set(dc.id, dc);
$A.data(o, "DC", dc);
if (dc.on) {
if ($A.isStr(dc.on)) {
$A.on(
o,
dc.on,
function (ev) {
DCR1(dc);
ev.preventDefault();
},
dc.id,
"." + dc.fn.internalEventsId,
);
} else if ($A.isPlainObject(dc.on)) {
$A.on(o, dc.on, dc.id, "." + dc.fn.internalEventsId);
}
}
if (dc.escToClose)
$A.on(
o,
"keydown",
function (ev) {
var k = $A.keyEvent(ev);
if (k === 27) {
dc.remove();
ev.stopPropagation();
}
},
"." + dc.fn.internalEventsId,
);
});
return dc;
},
DCInst = function (dc) {
var f = function () {};
f.prototype = dc;
var nDC = new f();
nDC.props.DC = nDC.DC = nDC;
$A.lastCreated.push(nDC);
return nDC;
},
DCInit = function (dc) {
var dc = WL[DC.indexVal];
$A.reg.set(dc.id, dc);
if (dc.widgetType && dc.autoCloseWidget) {
$A._widgetTypes.push(dc.id);
}
if (dc.widgetType && dc.autoCloseSameWidget) {
if (!$A._regWidgets.has(dc.widgetType))
$A._regWidgets.set(dc.widgetType, []);
$A._regWidgets.get(dc.widgetType).push(dc.id);
}
return dc;
},
render = [],
svs = [
"jsOnceBeforeRender",
"onceBeforeRender",
"jsBeforeRender",
"beforeRender",
"jsOnceDuringRender",
"onceDuringRender",
"jsDuringRender",
"duringRender",
"jsOnceAfterRender",
"onceAfterRender",
"jsAfterRender",
"afterRender",
"jsOnceBeforeRemove",
"onceBeforeRemove",
"jsBeforeRemove",
"beforeRemove",
"jsOnceAfterRemove",
"onceAfterRemove",
"jsAfterRemove",
"afterRemove",
];
var a = 0,
s = 0;
var dc = {
// role: "",
// loaded: false,
fn: {
isDCI: true,
},
props: {},
setOffScreen: function () {
var dc = this;
$A.setOffScreen(dc.wrapper);
return dc;
},
clearOffScreen: function () {
var dc = this;
$A.clearOffScreen(dc.wrapper);
return dc;
},
hasDC: function () {
return true;
},
getDC: function () {
return this;
},
offset: function (forceAbsolute, forceRelative, returnTopLeftOnly) {
var dc = this;
return $A.offset(
dc.wrapper,
forceAbsolute,
forceRelative,
returnTopLeftOnly,
);
},
// trigger: "",
setTrigger: function (dc) {
var dc = dc || this;
if (!dc.trigger || !dc.on) {
return dc;
}
return setTrigger(dc);
},
unsetTrigger: function (dc) {
var dc = dc || this;
if (!dc.trigger || !dc.on) return dc;
return unsetTrigger(dc);
},
// targetNode: null,
hiddenCloseName: "Close",
// exposeHiddenClose: false,
displayHiddenClose: true,
// exposeBounds: false,
query: function (sel, con, call) {
var dc = this;
call = con;
con = dc.container;
return $A.query(sel, con, call);
},
// content: "",
contentOnly: true,
// storeData: false,
// toggleHide: false,
// on: "",
// displayInline: false,
// widgetType: "",
// autoCloseWidget: false,
// autoCloseSameWidget: false,
allowCascade: true,
// reverseJSOrder: false,
destroy: function (p) {
var dc = this;
setTimeout(function () {
$A.destroy(dc, p);
}, 1);
return true;
},
getAttr: function (n) {
var dc = this;
return $A.getAttr(dc.wrapper, n);
},
hasAttr: function (n) {
var dc = this;
return $A.hasAttr(dc.wrapper, n);
},
remAttr: function (n) {
var dc = this;
$A.remAttr(dc.wrapper, n);
return dc;
},
setAttr: function (n, v) {
var dc = this;
$A.setAttr(dc.wrapper, n, v);
return dc;
},
toggleAttr: function (n, v) {
var dc = this;
$A.toggleAttr(dc.wrapper, n, v);
return dc;
},
hasClass: function (cn) {
var dc = this;
return $A.hasClass(dc.wrapper, cn);
},
addClass: function (cn) {
var dc = this;
$A.addClass(dc.wrapper, cn);
return dc;
},
nearestHL: function (context) {
var dc = this;
return $A.nearestHL(dc.wrapper, context);
},
remClass: function (cn) {
var dc = this;
$A.remClass(dc.wrapper, cn);
return dc;
},
toggleClass: function (cn, isTrue, fn) {
var dc = this;
$A.toggleClass(dc.wrapper, cn, isTrue, fn);
return dc;
},
// allowMultiple: false,
// allowRerender: false,
// isToggle: false,
// toggleClassName: "",
activeElements: [],
// isFocusable: false,
// forceFocus: false,
forceFocusWithin: true,
// returnFocus: false,
focus: function (dc) {
var dc = dc || this;
if (!dc.loaded) return dc;
$A.focus(
!dc.forceFocusWithin ||
!dc.activeElements.length ||
!$A.isNode(dc.first)
? dc.container
: dc.first,
);
return dc;
},
// root: "",
// before: false,
// prepend: false,
// append: false,
// after: false,
// autoRender: false,
// lock: false,
// mode: 0,
// announce: false,
// noRepeat: false,
// isAlert: false,
speak: function (noRep) {
var dc = this;
$A.announce(dc.container, noRep);
return dc;
},
alert: function (noRep) {
var dc = this;
$A.alert(dc.container, noRep);
return dc;
},
load: function (url, data, sCb) {
var dc = this;
if ($A.isFn(data)) {
sCb = data;
data = null;
}
dc.isLoading = true;
$A.load(
url,
dc.container,
data,
function (c) {
dc.isLoading = false;
if ($A.isFn(sCb)) sCb.call(this, c);
},
function (e) {
dc.isLoading = false;
$A.parseDebug(e);
},
);
return dc;
},
fetch: {
url: "",
data: {
returnType: "html",
},
success: function (content, promise, dc) {
dc.content = content;
return dc;
},
error: function (errorMsg, promise, dc) {
dc.error = errorMsg;
return dc;
},
},
isFocusWithin: function (dc) {
var dc = dc || this;
return $A.isFocusWithin(dc.container);
},
setProps: function (conf) {
var dc = this;
$A.extend(true, dc.props, conf || {});
dc.props.DC = dc;
return dc;
},
getText: function () {
var dc = this;
return $A.getText(dc.container);
},
insert: function (node) {
var dc = this;
if (dc.loaded && $A.isNode(dc.container)) {
$A.insert(node, dc.container);
if ($A.isNum(dc.delayTimeout) && dc.delayTimeout > 0) {
if (dc.fn.timer) clearTimeout(dc.fn.timer);
dc.fn.timer = setTimeout(function () {
dc.timeout(dc);
}, dc.delayTimeout);
}
} else {
dc.content = node;
dc.mode = 0;
DCR1(dc);
}
return dc;
},
prependWithin: function (node) {
var dc = this;
$A.prepend(node, dc.container);
return dc;
},
appendWithin: function (node) {
var dc = this;
$A.append(node, dc.container);
return dc;
},
renderWithin: function (node, conf) {
var dc = this;
dc.before = dc.prepend = dc.append = dc.after = false;
$A.extend(
dc,
{
root: node,
},
conf || {},
);
return dc.bypass(function () {
DCR1(dc);
});
},
insertBefore: function (node, conf) {
var dc = this;
dc.before = dc.prepend = dc.append = dc.after = false;
$A.extend(
dc,
{
root: node,
before: true,
},
conf || {},
);
return dc.bypass(function () {
DCR1(dc);
});
},
prependTo: function (node, conf) {
var dc = this;
dc.before = dc.prepend = dc.append = dc.after = false;
$A.extend(
dc,
{
root: node,
prepend: true,
},
conf || {},
);
return dc.bypass(function () {
DCR1(dc);
});
},
appendTo: function (node, conf) {
var dc = this;
dc.before = dc.prepend = dc.append = dc.after = false;
$A.extend(
dc,
{
root: node,
append: true,
},
conf || {},
);
return dc.bypass(function () {
DCR1(dc);
});
},
insertAfter: function (node, conf) {
var dc = this;
dc.before = dc.prepend = dc.append = dc.after = false;
$A.extend(
dc,
{
root: node,
after: true,
},
conf || {},
);
return dc.bypass(function () {
DCR1(dc);
});
},
bypass: function (fn) {
var dc = this;
if (dc.loaded) {
dc.fn.removeCallback = function () {
dc.fn.bypass = false;
if ($A.isFn(fn)) fn.call(dc, dc);
};
dc.fn.bypass = true;
closeDC(dc);
} else {
if ($A.isFn(fn)) fn.call(dc, dc);
}
return dc;
},
setDisabled: function (bool) {
var dc = this;
$A.setDisabled(dc, bool);
return dc;
},
isDisabled: function (dc) {
var dc = dc || this;
return $A.isDisabled(dc);
},
updateDisabled: function (dc) {
var dc = dc || this;
$A.updateDisabled(dc);
return dc;
},
render: function (fn) {
var dc = this;
if (dc.isDisabled()) return dc;
var rn = function () {
if (!dc.loaded) {
dc.fn.renderCallback = fn;
DCR1(dc);
} else {
if ($A.isFn(fn)) fn.call(dc, dc);
}
};
if ($A.isNum(dc.delay) && dc.delay > 0) {
if (dc.fn.Delay) clearTimeout(dc.fn.Delay);
dc.fn.Delay = setTimeout(function () {
rn();
}, dc.delay);
} else {
rn();
}
return dc;
},
rerender: function (fn) {
var dc = this,
aR = dc.allowRerender;
dc.allowRerender = true;
dc.remove(function () {
dc.render(fn);
});
dc.allowRerender = aR;
return dc;
},
remove: function (fn) {
var dc = this;
if (dc.isDisabled()) return dc;
if (dc.loaded) {
dc.fn.removeCallback = fn;
closeDC(dc);
} else {
if ($A.isFn(fn)) fn.call(dc, dc);
}
return dc;
},
toggle: function (fn) {
var dc = this;
if (dc.loaded) dc.remove(fn);
else dc.render(fn);
return dc;
},
events: [
"click",
"dblClick",
"touchStart",
"touchEnd",
"touchMove",
"mouseOver",
"mouseOut",
"mouseDown",
"mouseUp",
"mouseMove",
"mouseEnter",
"mouseLeave",
"keyDown",
"keyPress",
"keyUp",
"error",
"focus",
"focusIn",
"focusOut",
"blur",
"change",
"resize",
"scroll",
"contextmenu",
"mouseWL",
"mousemultiWL",
"DOMMouseScroll",
"selectstart",
"selectend",
"orientationchange",
"reset",
"select",
"submit",
"load",
"unload",
"beforeunload",
"move",
"DOMContentLoaded",
"abort",
"onRemove",
],
// tabOut: function(ev, dc) {},
// delayTimeout: 0,
timeout: function (dc) {
dc.remove();
return dc;
},
// escToClose: false,
// className: "",
closeClassName: "CloseDC",
style: {},
// importCSS: "",
css: function (prop, val, mergeCSS) {
var dc = this;
if ($A.isBool(val)) {
mergeCSS = val;
val = null;
}
if ($A.isStr(prop) && !$A.isStr(val) && !$A.isNum(val)) {
return $A.css(dc.wrapper, prop);
} else if (prop && $A.isStr(prop) && mergeCSS) {
dc.style[prop] = val;
} else if (prop && typeof prop === "object" && mergeCSS) {
$A.extend(dc.style, prop);
}
$A.css(dc.wrapper, prop, val);
return dc;
},
map: function (o, extend) {
var dc = this;
if (!o) o = {};
var inList = function (DC, dcA) {
for (var i = 0; i < dcA.length; i++) {
if (dcA[i].id === DC.id) {
return true;
}
}
return false;
};
if ($A.isDC(o.parent)) {
dc.parent = o.parent;
}
if ($A.isArray(o.children)) {
if (!extend) dc.children = [];
for (var i = 0; i < o.children.length; i++) {
if ($A.isDC(o.children[i])) {
o.children[i].parent = dc;
if (!inList(o.children[i], dc.children))
dc.children.push(o.children[i]);
}
}
}
if ($A.isArray(o.siblings)) {
if (!extend) dc.siblings = [dc];
for (var i = 0; i < o.siblings.length; i++) {
if ($A.isDC(o.siblings[i])) {
if (!inList(o.siblings[i], dc.siblings))
dc.siblings.push(o.siblings[i]);
}
}
}
dc.top = dc;
var p = dc.parent;
while (
$A.isDC(p) &&
(!dc.widgetType || dc.widgetType === p.widgetType)
) {
dc.top = p;
p = p.parent;
}
if (dc.parent && !extend) dc.parent.children = [];
for (var x = 0; x < dc.siblings.length; x++) {
var DCX = dc.siblings[x];
if ($A.isDC(DCX)) {
DCX.parent = dc.parent;
DCX.siblings = dc.siblings;
if (dc.parent && !inList(DCX, dc.parent.children))
dc.parent.children.push(DCX);
}
}
var setTop = function (a) {
for (var i = 0; i < a.length; i++) {
if ($A.isDC(a[i]) && a[i].children.length) {
for (var x = 0; x < a[i].children.length; x++) {
var DCX = a[i].children[x];
if ($A.isDC(DCX)) {
setTop(DCX.siblings);
}
}
}
if ($A.isDC(a[i])) a[i].top = dc.top;
}
};
setTop(dc.siblings);
return dc;
},
children: [],
siblings: [],
// parent: null,
// top: null,
// autoPosition: 0,
// offsetTop: 0,
// offsetLeft: 0,
// posAnchor: null,
setPosition: function (obj, posVal, save) {
var dc = this;
if ($A.isNum(obj)) {
save = posVal;
posVal = obj;
obj = null;
}
if (save) {
dc.posAnchor = obj || dc.posAnchor;
dc.autoPosition = posVal || dc.autoPosition;
}
$A._calcPosition(dc, obj, posVal);
return dc;
},
setFix: function (posVal, save) {
var dc = this;
if (save) {
dc.autoFix = posVal || dc.autoFix;
}
setAutoFix(dc);
if (posVal > 0) sizeAutoFix(dc);
return dc;
},
};
$A.extend(dc, {
text: dc["getText"],
getAttribute: dc["getAttr"],
hasAttribute: dc["hasAttr"],
removeAttribute: dc["remAttr"],
setAttribute: dc["setAttr"],
toggleAttribute: dc["toggleAttr"],
removeClass: dc["remClass"],
nearestHeadingLevel: dc["nearestHL"],
});
if (!gImport) gImport = {};
for (a = 0; a < DCObjects.length; a++) {
var aO = DCObjects[a],
gO = {},
iO = {};
if (!$A.isBool(aO.allowCascade)) {
if ($A.isBool(gImport.allowCascade))
aO.allowCascade = gImport.allowCascade;
else if ($A.isBool($A.fn.globalDC.allowCascade))
aO.allowCascade = $A.fn.globalDC.allowCascade;
else aO.allowCascade = dc.allowCascade;
}
if (aO.allowCascade) {
for (s = 0; s < svs.length; s++) {
gO[svs[s]] = $A.fn.globalDC[svs[s]];
iO[svs[s]] = gImport[svs[s]];
}
}
dc.indexVal = WL.length;
WL[dc.indexVal] = DCInst(dc);
var DC = WL[dc.indexVal];
if (
$A.module[aO.widgetType] &&
$A.isFn($A.module[aO.widgetType].configure)
)
$A.extend(
true,
DC,
$A.module[aO.widgetType].configure.call(DC, DC) || {},
);
$A.extend(true, DC, $A.fn.globalDC);
$A.extend(true, DC, gImport);
$A.extend(true, DC, aO);
if (DC.allowCascade) {
for (s = 0; s < svs.length; s++) {
$A.fn.globalDC[svs[s]] = gO[svs[s]];
}
DC.fn.proto = iO;
}
$A.query(DC.trigger, function (i, o) {
if (
$A.isMap($A.data(o, "DC-ON")) &&
$A.data(o, "DC-ON").has(DC.id)
)
$A.data(o, "DC-ON").get(DC.id).unsetTrigger();
});
DCInit(DC);
if ($A.isDC(DC)) {
setBindings(DC);
if (DC.autoRender) render.push(DC);
if ($A.isDC(parentDC)) {
var chk = -1,
p = parentDC,
c = DC;
for (var i = 0; i < p.children.length; i++) {
if (c.id === p.children[i].id) chk = i;
}
if (chk >= 0) p.children.slice(chk, 1, c);
else p.children.push(c);
c.parent = p;
var t = c;
while (t.parent) t = t.parent;
c.top = t;
} else DC.top = DC;
if (DC.onCreate && $A.isFn(DC.onCreate)) {
DC.onCreate.apply(DC, [DC]);
}
$A.updateDisabled(DC);
if (DC.trackPage && $A.getHash() === DC.id) render.push(DC);
}
}
for (a = 0; a < WL.length; a++) WL[a].siblings = WL;
if (render.length) {
for (s = 0; s < render.length; s++) DCR1(render[s]);
}
return WL;
},
});
$A.extend({
// Expanded variable method names for alternative usage
isFunction: $A["isFn"],
isString: $A["isStr"],
isNumber: $A["isNum"],
isBoolean: $A["isBool"],
getElement: $A["get"],
createElement: $A["create"],
getAttribute: $A["getAttr"],
hasAttribute: $A["hasAttr"],
removeAttribute: $A["remAttr"],
setAttribute: $A["setAttr"],
toggleAttribute: $A["toggleAttr"],
previousSibling: $A["prevSibling"],
previous: $A["prevSibling"],
next: $A["nextSibling"],
first: $A["firstChild"],
last: $A["lastChild"],
parent: $A["closest"],
removeClass: $A["remClass"],
height: $A["elementHeight"],
width: $A["elementWidth"],
top: $A["_top"],
left: $A["_left"],
addIdReference: $A["addIdRef"],
removeIdReference: $A["remIdRef"],
preloadImages: $A["preload"],
setCircularTabbing: $A["setCircular"],
isNativeActiveElement: $A["isNative"],
getActiveElements: $A["getActive"],
nearestHeadingLevel: $A["nearestHL"],
setKeyboardA11Y: $A["setKBA11Y"],
generateId: $A["genId"],
toTextNode: $A["toText"],
text: $A["getText"],
});
var announceString = function (strm, noRep, aggr, loop) {
var str = strm;
if (!arguments.length || $A.isBool(str)) {
loop = aggr;
aggr = noRep;
noRep = str;
strm = this;
str = strm;
}
if ($A.isNum(str)) {
str = str.toString();
} else if (str && str.nodeType) {
str = $A.getText(str);
}
if (str && $A.isStr(str)) {
var uA = function () {
if (stringAnnounce.loaded) {
if (
!stringAnnounce.liveRendered &&
!aggr &&
stringAnnounce.placeHolder
) {
stringAnnounce.liveRendered = true;
document.body.appendChild(stringAnnounce.placeHolder);
}
if (
!stringAnnounce.alertRendered &&
aggr &&
stringAnnounce.placeHolder2
) {
stringAnnounce.alertRendered = true;
document.body.appendChild(stringAnnounce.placeHolder2);
}
}
if (!loop && $A.inArray(str, stringAnnounce.alertMsgs) === -1)
stringAnnounce.alertMsgs.push(str);
if (stringAnnounce.alertMsgs.length === 1 || loop) {
var timeLength =
stringAnnounce.baseDelay +
stringAnnounce.iterate(
stringAnnounce.alertMsgs[0],
/\s|,|\.|:|;|!|\(|\)|\/|\?|@|#|\$|%|\^|&|\*|\\|-|_|\+|=/g,
) *
stringAnnounce.charMultiplier;
if (
!(
noRep &&
stringAnnounce.lastMsg === stringAnnounce.alertMsgs[0]
)
) {
stringAnnounce.lastMsg = stringAnnounce.alertMsgs[0];
if (aggr)
$A.insertMarkup(
stringAnnounce.alertMsgs[0],
stringAnnounce.placeHolder2,
);
else
$A.insertMarkup(
stringAnnounce.alertMsgs[0],
stringAnnounce.placeHolder,
);
}
stringAnnounce.alertTO = setTimeout(function () {
$A.insertMarkup("", stringAnnounce.placeHolder);
$A.insertMarkup("", stringAnnounce.placeHolder2);
stringAnnounce.alertMsgs.shift();
if (stringAnnounce.alertMsgs.length >= 1)
announceString(
stringAnnounce.alertMsgs[0],
noRep,
aggr,
true,
);
}, timeLength);
}
};
if (!$A.isDocLoaded)
$A.on("load", function () {
uA();
});
else uA();
}
return strm;
};
var stringAnnounce = {
alertMsgs: [],
clear: function () {
if (this.alertTO) clearTimeout(this.alertTO);
this.alertMsgs = [];
},
baseDelay: 500,
charMultiplier: 1,
lastMsg: "",
iterate: function (str, regExp) {
var iCount = 0;
str.replace(regExp, function () {
iCount++;
});
return iCount;
},
loaded: false,
liveRendered: false,
alertRendered: false,
};
String.prototype.announce = function (noRep) {
return $A.announce(this, noRep);
};
String.prototype.alert = function (noRep) {
return $A.alert(this, noRep);
};
$A.announce.clear =
$A.alert.clear =
String.prototype.announce.clear =
String.prototype.alert.clear =
announceString.clear =
stringAnnounce.clear;
$A.on(document, {
touchstart: function () {
if (!$A.isTouch) {
$A.isTouch = true;
$A.event.fire(document, "touchchange");
}
},
keyup: function () {
if ($A.isTouch) {
$A.isTouch = false;
$A.event.fire(document, "touchchange");
}
},
});
$A.on(window, {
DOMContentLoaded: function () {
$A.isDOMContentLoaded = true;
},
load: function () {
$A.isDocLoaded = true;
if (!stringAnnounce.placeHolder) {
stringAnnounce.placeHolder = $A.create(
"div",
{
"aria-live": "polite",
},
$A.sraCSS,
);
stringAnnounce.placeHolder2 = $A.create(
"div",
{
role: "alert",
},
$A.sraCSS,
);
}
stringAnnounce.loaded = true;
$A.on(document.body, "mouseover.MouseCoordTracker", function (e) {
$A.event.pointer = e;
});
},
});
if ("Import4X" in window && window.Import4X.length) {
$A.import(window.Import4X);
}
(function () {
var scripts = document.querySelectorAll("script[src]"),
path =
scripts[scripts.length - 1].src.replace(/\/|\\|<|>/g, "") || "",
ext = $A.getHash(path),
mods = ext ? ext.split(",") : [];
if (mods.length) $A.import(mods);
})();
window[window.Namespace4X ? window.Namespace4X : "$A"] = $A;
return $A;
})(
(function () {
/*@! Dependencies */
(function () {
/*@! Bean */
/*
* Bean - copyright (c) Jacob Thornton 2011-2012
* https://github.com/fat/bean
* MIT license
*/
(function (name, context, definition) {
if (typeof module !== "undefined" && module.exports)
module.exports = definition();
else if (typeof define === "function" && define.amd)
define(definition);
else context[name] = BN = definition();
})("bean", window, function (name, context) {
name = name || "listener";
context = context || window;
var win = window,
old = context[name],
namespaceRegex = /[^\.]*(?=\..*)\.|.*/,
nameRegex = /\..*/,
addEvent = "addEventListener",
removeEvent = "removeEventListener",
doc = document || {},
root = doc.documentElement || {},
W3C_MODEL = root[addEvent],
eventSupport = W3C_MODEL ? addEvent : "attachEvent",
ONE = {}, // singleton for quick matching making add() do one()
slice = Array.prototype.slice,
str2arr = function (s, d) {
return s.split(d || " ");
},
isString = function (o) {
return typeof o === "string";
},
isFunction = function (o) {
return typeof o === "function";
},
// events that we consider to be 'native', anything not in this list will
// be treated as a custom event
standardNativeEvents =
"click dblclick mouseup mousedown contextmenu " + // mouse buttons
"mouseWL mousemultiWL DOMMouseScroll " + // mouse WL
"mouseover mouseout mousemove selectstart selectend " + // mouse movement
"keydown keypress keyup " + // keyboard
"orientationchange " + // mobile
"focus blur change reset select submit " + // form elements
"load unload beforeunload resize move DOMContentLoaded " + // window
"readystatechange message " + // window
"error abort scroll ", // misc
// element.fireEvent('onXYZ'... is not forgiving if we try to fire an event
// that doesn't actually exist, so make sure we only do these on newer browsers
w3cNativeEvents =
"show " + // mouse buttons
"input invalid " + // form elements
"touchstart touchmove touchend touchcancel " + // touch
"gesturestart gesturechange gestureend " + // gesture
"textinput " + // TextEvent
"readystatechange pageshow pagehide popstate " + // window
"hashchange offline online " + // window
"afterprint beforeprint " + // printing
"dragstart dragenter dragover dragleave drag drop dragend " + // dnd
"loadstart progress suspend emptied stalled loadmetadata " + // media
"loadeddata canplay canplaythrough playing waiting seeking " + // media
"seeked ended durationchange timeupdate play pause ratechange " + // media
"volumechange cuechange " + // media
"checking noupdate downloading cached updateready obsolete ", // appcache
// convert to a hash for quick lookups
nativeEvents = (function (hash, events, i) {
for (i = 0; i < events.length; i++)
events[i] && (hash[events[i]] = 1);
return hash;
})(
{},
str2arr(
standardNativeEvents + (W3C_MODEL ? w3cNativeEvents : ""),
),
),
// custom events are events that we *fake*, they are not provided natively but
// we can use native events to generate them
customEvents = (function () {
var isAncestor =
"compareDocumentPosition" in root
? function (element, container) {
return (
container.compareDocumentPosition &&
(container.compareDocumentPosition(element) &
16) ===
16
);
}
: "contains" in root
? function (element, container) {
container =
container.nodeType === 9 || container === window
? root
: container;
return (
container !== element &&
container.contains(element)
);
}
: function (element, container) {
while ((element = element.parentNode))
if (element === container) return 1;
return 0;
},
check = function (event) {
var related = event.relatedTarget;
return !related
? related === null
: related !== this &&
related.prefix !== "xul" &&
!/document/.test(this.toString()) &&
!isAncestor(related, this);
};
return {
mouseenter: { base: "mouseover", condition: check },
mouseleave: { base: "mouseout", condition: check },
mouseWL: {
base: /Firefox/.test(navigator.userAgent)
? "DOMMouseScroll"
: "mouseWL",
},
};
})(),
// we provide a consistent Event object across browsers by taking the actual DOM
// event object and generating a new one from its properties.
Event = (function () {
// a whitelist of properties (for different event types) tells us what to check for and copy
var commonProps = str2arr(
"altKey attrChange attrName bubbles cancelable ctrlKey currentTarget " +
"detail eventPhase getModifierState isTrusted metaKey relatedNode relatedTarget shiftKey " +
"srcElement target timeStamp type view which propertyName",
),
mouseProps = commonProps.concat(
str2arr(
"button buttons clientX clientY dataTransfer " +
"fromElement offsetX offsetY pageX pageY screenX screenY toElement",
),
),
mouseWheelProps = mouseProps.concat(
str2arr("WLDelta WLDeltaX WLDeltaY WLDeltaZ " + "axis"),
), // 'axis' is FF specific
keyProps = commonProps.concat(
str2arr(
"char charCode key keyCode keyIdentifier " +
"keyLocation location",
),
),
textProps = commonProps.concat(str2arr("data")),
touchProps = commonProps.concat(
str2arr(
"touches targetTouches changedTouches scale rotation",
),
),
messageProps = commonProps.concat(
str2arr("data origin source"),
),
stateProps = commonProps.concat(str2arr("state")),
overOutRegex = /over|out/,
// some event types need special handling and some need special properties, do that all here
typeFixers = [
{
// key events
reg: /key/i,
fix: function (event, newEvent) {
newEvent.keyCode = event.keyCode || event.which;
return keyProps;
},
},
{
// mouse events
reg: /click|mouse(?!(.*WL|scroll))|menu|drag|drop/i,
fix: function (event, newEvent, type) {
newEvent.rightClick =
event.which === 3 || event.button === 2;
newEvent.pos = { x: 0, y: 0 };
if (event.pageX || event.pageY) {
newEvent.clientX = event.pageX;
newEvent.clientY = event.pageY;
} else if (event.clientX || event.clientY) {
newEvent.clientX =
event.clientX +
doc.body.scrollLeft +
root.scrollLeft;
newEvent.clientY =
event.clientY + doc.body.scrollTop + root.scrollTop;
}
if (overOutRegex.test(type)) {
newEvent.relatedTarget =
event.relatedTarget ||
event[
(type === "mouseover" ? "from" : "to") + "Element"
];
}
return mouseProps;
},
},
{
// mouse WL events
reg: /mouse.*(WL|scroll)/i,
fix: function () {
return mouseWheelProps;
},
},
{
// TextEvent
reg: /^text/i,
fix: function () {
return textProps;
},
},
{
// touch and gesture events
reg: /^touch|^gesture/i,
fix: function () {
return touchProps;
},
},
{
// message events
reg: /^message$/i,
fix: function () {
return messageProps;
},
},
{
// popstate events
reg: /^popstate$/i,
fix: function () {
return stateProps;
},
},
{
// everything else
reg: /.*/,
fix: function () {
return commonProps;
},
},
],
typeFixerMap = {}, // used to map event types to fixer functions (above), a basic cache mechanism
Event = function (event, element, isNative) {
if (!arguments.length) return;
event =
event ||
(
(element.ownerDocument || element.document || element)
.parentWindow || win
).event;
this.originalEvent = event;
this.isNative = isNative;
this.isBean = true;
if (!event) return;
var type = event.type,
target = event.target || event.srcElement,
i,
l,
p,
props,
fixer;
this.target =
target && target.nodeType === 3
? target.parentNode
: target;
if (isNative) {
// we only need basic augmentation on custom events, the rest expensive & pointless
fixer = typeFixerMap[type];
if (!fixer) {
// haven't encountered this event type before, map a fixer function for it
for (i = 0, l = typeFixers.length; i < l; i++) {
if (typeFixers[i].reg.test(type)) {
// guaranteed to match at least one, last is .*
typeFixerMap[type] = fixer = typeFixers[i].fix;
break;
}
}
}
props = fixer(event, this, type);
for (i = props.length; i--; ) {
if (!((p = props[i]) in this) && p in event)
this[p] = event[p];
}
}
};
// preventDefault() and stopPropagation() are a consistent interface to those functions
// on the DOM, stop() is an alias for both of them together
Event.prototype.preventDefault = function () {
if (this.originalEvent.preventDefault)
this.originalEvent.preventDefault();
else this.originalEvent.returnValue = false;
};
Event.prototype.stopPropagation = function () {
if (this.originalEvent.stopPropagation)
this.originalEvent.stopPropagation();
else this.originalEvent.cancelBubble = true;
};
Event.prototype.stop = function () {
this.preventDefault();
this.stopPropagation();
this.stopped = true;
};
// stopImmediatePropagation() has to be handled internally because we manage the event list for
// each element
// note that originalElement may be a Bean#Event object in some situations
Event.prototype.stopImmediatePropagation = function () {
if (this.originalEvent.stopImmediatePropagation)
this.originalEvent.stopImmediatePropagation();
this.isImmediatePropagationStopped = function () {
return true;
};
};
Event.prototype.isImmediatePropagationStopped = function () {
return (
this.originalEvent.isImmediatePropagationStopped &&
this.originalEvent.isImmediatePropagationStopped()
);
};
Event.prototype.clone = function (currentTarget) {
//TODO: this is ripe for optimisation, new events are *expensive*
// improving this will speed up delegated events
var ne = new Event(this, this.element, this.isNative);
ne.currentTarget = currentTarget;
return ne;
};
return Event;
})(),
// if we're in old IE we can't do onpropertychange on doc or win so we use doc.documentElement for both
targetElement = function (element, isNative) {
return !W3C_MODEL &&
!isNative &&
(element === doc || element === win)
? root
: element;
},
/**
* Bean maintains an internal registry for event listeners. We don't touch elements, objects
* or functions to identify them, instead we store everything in the registry.
* Each event listener has a RegEntry object, we have one 'registry' for the whole instance.
*/
RegEntry = (function () {
// each handler is wrapped so we can handle delegation and custom events
var wrappedHandler = function (element, fn, condition, args) {
var call = function (event, eargs) {
return fn.apply(
element,
args
? slice.call(eargs, event ? 0 : 1).concat(args)
: eargs,
);
},
findTarget = function (event, eventElement) {
return fn.__beanDel
? fn.__beanDel.ft(event.target, element)
: eventElement;
},
handler = condition
? function (event) {
var target = findTarget(event, this); // deleated event
if (condition.apply(target, arguments)) {
if (event) event.currentTarget = target;
return call(event, arguments);
}
}
: function (event) {
if (fn.__beanDel)
event = event.clone(findTarget(event)); // delegated event, fix the fix
return call(event, arguments);
};
handler.__beanDel = fn.__beanDel;
return handler;
},
RegEntry = function (
element,
type,
handler,
original,
namespaces,
args,
root,
) {
var customType = customEvents[type],
isNative;
if (type === "unload") {
// self clean-up
handler = once(
removeListener,
element,
type,
handler,
original,
);
}
if (customType) {
if (customType.condition) {
handler = wrappedHandler(
element,
handler,
customType.condition,
args,
);
}
type = customType.base || type;
}
this.isNative = isNative =
nativeEvents[type] && !!element[eventSupport];
this.customType = !W3C_MODEL && !isNative && type;
this.element = element;
this.type = type;
this.original = original;
this.namespaces = namespaces;
this.eventType =
W3C_MODEL || isNative ? type : "propertychange";
this.target = targetElement(element, isNative);
this[eventSupport] = !!this.target[eventSupport];
this.root = root;
this.handler = wrappedHandler(element, handler, null, args);
};
// given a list of namespaces, is our entry in any of them?
RegEntry.prototype.inNamespaces = function (checkNamespaces) {
var i,
j,
c = 0;
if (!checkNamespaces) return true;
if (!this.namespaces) return false;
for (i = checkNamespaces.length; i--; ) {
for (j = this.namespaces.length; j--; ) {
if (checkNamespaces[i] === this.namespaces[j]) c++;
}
}
return checkNamespaces.length === c;
};
// match by element, original fn (opt), handler fn (opt)
RegEntry.prototype.matches = function (
checkElement,
checkOriginal,
checkHandler,
) {
return (
this.element === checkElement &&
(!checkOriginal || this.original === checkOriginal) &&
(!checkHandler || this.handler === checkHandler)
);
};
return RegEntry;
})(),
registry = (function () {
// our map stores arrays by event type, just because it's better than storing
// everything in a single array.
// uses '$' as a prefix for the keys for safety and 'r' as a special prefix for
// rootListeners so we can look them up fast
var map = {},
// generic functional search of our registry for matching listeners,
// `fn` returns false to break out of the loop
forAll = function (
element,
type,
original,
handler,
root,
fn,
) {
var pfx = root ? "r" : "$";
if (!type || type === "*") {
// search the whole registry
for (var t in map) {
if (t.charAt(0) === pfx) {
forAll(
element,
t.substr(1),
original,
handler,
root,
fn,
);
}
}
} else {
var i = 0,
l,
list = map[pfx + type],
all = element === "*";
if (!list) return;
for (l = list.length; i < l; i++) {
if (
(all ||
list[i].matches(element, original, handler)) &&
!fn(list[i], list, i, type)
)
return;
}
}
},
has = function (element, type, original, root) {
// we're not using forAll here simply because it's a bit slower and this
// needs to be fast
var i,
list = map[(root ? "r" : "$") + type];
if (list) {
for (i = list.length; i--; ) {
if (
!list[i].root &&
list[i].matches(element, original, null)
)
return true;
}
}
return false;
},
get = function (element, type, original, root) {
var entries = [];
forAll(
element,
type,
original,
null,
root,
function (entry) {
return entries.push(entry);
},
);
return entries;
},
put = function (entry) {
var has =
!entry.root &&
!this.has(entry.element, entry.type, null, false),
key = (entry.root ? "r" : "$") + entry.type;
(map[key] || (map[key] = [])).push(entry);
return has;
},
del = function (entry) {
forAll(
entry.element,
entry.type,
null,
entry.handler,
entry.root,
function (entry, list, i) {
list.splice(i, 1);
entry.removed = true;
if (list.length === 0)
delete map[(entry.root ? "r" : "$") + entry.type];
return false;
},
);
},
// dump all entries, used for onunload
entries = function () {
var t,
entries = [];
for (t in map) {
if (t.charAt(0) === "$") entries = entries.concat(map[t]);
}
return entries;
};
return {
has: has,
get: get,
put: put,
del: del,
entries: entries,
};
})(),
// we need a selector engine for delegated events, use querySelectorAll if it exists
// but for older browsers we need Qwery, Sizzle or similar
selectorEngine,
setSelectorEngine = function (e) {
if (!arguments.length) {
selectorEngine = doc.querySelectorAll
? function (s, r) {
return r.querySelectorAll(s);
}
: function () {
throw new Error("Bean: No selector engine installed"); // eeek
};
} else {
selectorEngine = e;
}
},
// we attach this listener to each DOM event that we need to listen to, only once
// per event type per DOM element
rootListener = function (event, type) {
if (
!W3C_MODEL &&
type &&
event &&
event.propertyName !== "_on" + type
)
return;
var listeners = registry.get(
this,
type || event.type,
null,
false,
),
l = listeners.length,
i = 0;
event = new Event(event, this, true);
if (type) event.type = type;
// iterate through all handlers registered for this type, calling them unless they have
// been removed by a previous handler or stopImmediatePropagation() has been called
for (; i < l && !event.isImmediatePropagationStopped(); i++) {
if (!listeners[i].removed)
listeners[i].handler.call(this, event);
}
},
// add and remove listeners to DOM elements
listener = W3C_MODEL
? function (element, type, add) {
// new browsers
element[add ? addEvent : removeEvent](
type,
rootListener,
false,
);
}
: function (element, type, add, custom) {
// IE8 and below, use attachEvent/detachEvent and we have to piggy-back propertychange events
// to simulate event bubbling etc.
var entry;
if (add) {
registry.put(
(entry = new RegEntry(
element,
custom || type,
function (event) {
// handler
rootListener.call(element, event, custom);
},
rootListener,
null,
null,
true, // is root
)),
);
if (custom && element["_on" + custom] === null)
element["_on" + custom] = 0;
entry.target.attachEvent(
"on" + entry.eventType,
entry.handler,
);
} else {
entry = registry.get(
element,
custom || type,
rootListener,
true,
)[0];
if (entry) {
entry.target.detachEvent(
"on" + entry.eventType,
entry.handler,
);
registry.del(entry);
}
}
},
once = function (rm, element, type, fn, originalFn) {
// wrap the handler in a handler that does a remove as well
return function () {
fn.apply(this, arguments);
rm(element, type, originalFn);
};
},
removeListener = function (
element,
orgType,
handler,
namespaces,
) {
var type = orgType && orgType.replace(nameRegex, ""),
handlers = registry.get(element, type, null, false),
removed = {},
i,
l;
for (i = 0, l = handlers.length; i < l; i++) {
if (
(!handler || handlers[i].original === handler) &&
handlers[i].inNamespaces(namespaces)
) {
// TODO: this is problematic, we have a registry.get() and registry.del() that
// both do registry searches so we waste cycles doing this. Needs to be rolled into
// a single registry.forAll(fn) that removes while finding, but the catch is that
// we'll be splicing the arrays that we're iterating over. Needs extra tests to
// make sure we don't screw it up. @rvagg
registry.del(handlers[i]);
if (
!removed[handlers[i].eventType] &&
handlers[i][eventSupport]
)
removed[handlers[i].eventType] = {
t: handlers[i].eventType,
c: handlers[i].type,
};
}
}
// check each type/element for removed listeners and remove the rootListener where it's no longer needed
for (i in removed) {
if (!registry.has(element, removed[i].t, null, false)) {
// last listener of this type, remove the rootListener
listener(element, removed[i].t, false, removed[i].c);
}
}
},
// set up a delegate helper using the given selector, wrap the handler function
delegate = function (selector, fn) {
//TODO: findTarget (therefore $) is called twice, once for match and once for
// setting e.currentTarget, fix this so it's only needed once
var findTarget = function (target, root) {
var i,
array = isString(selector)
? selectorEngine(selector, root)
: selector;
for (
;
target && target !== root;
target = target.parentNode
) {
for (i = array.length; i--; ) {
if (array[i] === target) return target;
}
}
},
handler = function (e) {
var match = findTarget(e.target, this);
if (match) fn.apply(match, arguments);
};
// __beanDel isn't pleasant but it's a private function, not exposed outside of Bean
handler.__beanDel = {
ft: findTarget, // attach it here for customEvents to use too
selector: selector,
};
return handler;
},
fireListener = W3C_MODEL
? function (isNative, type, element) {
// modern browsers, do a proper dispatchEvent()
var evt = doc.createEvent(
isNative ? "HTMLEvents" : "UIEvents",
);
evt[isNative ? "initEvent" : "initUIEvent"](
type,
true,
true,
win,
1,
);
element.dispatchEvent(evt);
}
: function (isNative, type, element) {
// old browser use onpropertychange, just increment a custom property to trigger the event
element = targetElement(element, isNative);
isNative
? element.fireEvent("on" + type, doc.createEventObject())
: element["_on" + type]++;
},
/**
* Public API: off(), on(), add(), (remove()), one(), fire(), clone()
*/
/**
* off(element[, eventType(s)[, handler ]])
*/
off = function (element, typeSpec, fn) {
var isTypeStr = isString(typeSpec),
k,
type,
namespaces,
i;
if (isTypeStr && typeSpec.indexOf(" ") > 0) {
// off(el, 't1 t2 t3', fn) or off(el, 't1 t2 t3')
typeSpec = str2arr(typeSpec);
for (i = typeSpec.length; i--; )
off(element, typeSpec[i], fn);
return element;
}
type = isTypeStr && typeSpec.replace(nameRegex, "");
if (type && customEvents[type]) type = customEvents[type].base;
if (!typeSpec || isTypeStr) {
// off(el) or off(el, t1.ns) or off(el, .ns) or off(el, .ns1.ns2.ns3)
if (
(namespaces =
isTypeStr && typeSpec.replace(namespaceRegex, ""))
)
namespaces = str2arr(namespaces, ".");
removeListener(element, type, fn, namespaces);
} else if (isFunction(typeSpec)) {
// off(el, fn)
removeListener(element, null, typeSpec);
} else {
// off(el, { t1: fn1, t2, fn2 })
for (k in typeSpec) {
if (typeSpec.hasOwnProperty(k))
off(element, k, typeSpec[k]);
}
}
return element;
},
/**
* on(element, eventType(s)[, selector], handler[, args ])
*/
on = function (element, events, selector, fn) {
var originalFn, type, types, i, args, entry, first;
//TODO: the undefined check means you can't pass an 'args' argument, fix this perhaps?
if (selector === undefined && typeof events === "object") {
//TODO: this can't handle delegated events
for (type in events) {
if (events.hasOwnProperty(type)) {
on.call(this, element, type, events[type]);
}
}
return;
}
if (!isFunction(selector)) {
// delegated event
originalFn = fn;
args = slice.call(arguments, 4);
fn = delegate(selector, originalFn, selectorEngine);
} else {
args = slice.call(arguments, 3);
fn = originalFn = selector;
}
types = str2arr(events);
// special case for one(), wrap in a self-removing handler
if (this === ONE) {
fn = once(off, element, events, fn, originalFn);
}
for (i = types.length; i--; ) {
// add new handler to the registry and check if it's the first for this element/type
first = registry.put(
(entry = new RegEntry(
element,
types[i].replace(nameRegex, ""), // event type
fn,
originalFn,
str2arr(types[i].replace(namespaceRegex, ""), "."), // namespaces
args,
false, // not root
)),
);
if (entry[eventSupport] && first) {
// first event of this type on this element, add root listener
listener(element, entry.eventType, true, entry.customType);
}
}
return element;
},
/**
* add(element[, selector], eventType(s), handler[, args ])
*
* Deprecated: kept (for now) for backward-compatibility
*/
add = function (element, events, fn, delfn) {
return on.apply(
null,
!isString(fn)
? slice.call(arguments)
: [element, fn, events, delfn].concat(
arguments.length > 3 ? slice.call(arguments, 5) : [],
),
);
},
/**
* one(element, eventType(s)[, selector], handler[, args ])
*/
one = function () {
return on.apply(ONE, arguments);
},
/**
* fire(element, eventType(s)[, args ])
*
* The optional 'args' argument must be an array, if no 'args' argument is provided
* then we can use the browser's DOM event system, otherwise we trigger handlers manually
*/
fire = function (element, type, args) {
var types = str2arr(type),
i,
j,
l,
names,
handlers;
for (i = types.length; i--; ) {
type = types[i].replace(nameRegex, "");
if ((names = types[i].replace(namespaceRegex, "")))
names = str2arr(names, ".");
if (!names && !args && element[eventSupport]) {
fireListener(nativeEvents[type], type, element);
} else {
// non-native event, either because of a namespace, arguments or a non DOM element
// iterate over all listeners and manually 'fire'
handlers = registry.get(element, type, null, false);
args = [false].concat(args);
for (j = 0, l = handlers.length; j < l; j++) {
if (handlers[j].inNamespaces(names)) {
handlers[j].handler.apply(element, args);
}
}
}
}
return element;
},
/**
* clone(dstElement, srcElement[, eventType ])
*
* TODO: perhaps for consistency we should allow the same flexibility in type specifiers?
*/
clone = function (element, from, type) {
var handlers = registry.get(from, type, null, false),
l = handlers.length,
i = 0,
args,
beanDel;
for (; i < l; i++) {
if (handlers[i].original) {
args = [element, handlers[i].type];
if ((beanDel = handlers[i].handler.__beanDel))
args.push(beanDel.selector);
args.push(handlers[i].original);
on.apply(null, args);
}
}
return element;
},
bean = {
on: on,
add: add,
one: one,
off: off,
remove: off,
clone: clone,
fire: fire,
Event: Event,
setSelectorEngine: setSelectorEngine,
noConflict: function () {
context[name] = old;
return this;
},
};
// for IE, clean up on unload to avoid leaks
if (win.attachEvent) {
var cleanup = function () {
var i,
entries = registry.entries();
for (i in entries) {
if (entries[i].type && entries[i].type !== "unload")
off(entries[i].element, entries[i].type);
}
win.detachEvent("onunload", cleanup);
win.CollectGarbage && win.CollectGarbage();
};
win.attachEvent("onunload", cleanup);
}
// initialize selector engine to internal default (qSA or throw Error)
setSelectorEngine();
return bean;
});
})();
})(),
);
return $A;
})();