@olenbetong/appframe-core 2.13.1 → 2.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/af.common.js +93 -21
- package/dist/esm/af.common.legacy.js +89 -17
- package/dist/esm/af.common.legacy.min.js +3 -3
- package/dist/esm/af.common.legacy.min.js.map +1 -1
- package/dist/esm/af.common.min.js +3 -3
- package/dist/esm/af.common.min.js.map +1 -1
- package/dist/iife/af.common.js +94 -20
- package/dist/iife/af.common.legacy.js +90 -16
- package/dist/iife/af.common.legacy.min.js +3 -3
- package/dist/iife/af.common.legacy.min.js.map +1 -1
- package/dist/iife/af.common.min.js +3 -3
- package/dist/iife/af.common.min.js.map +1 -1
- package/es/filter/index.d.ts +1 -1
- package/es/filter/index.js +1 -1
- package/es/filter/tree.d.ts +9 -0
- package/es/filter/tree.js +14 -0
- package/es/filter/tree.test.js +23 -1
- package/es/getLocalizedString.d.ts +63 -1
- package/es/getLocalizedString.js +89 -18
- package/es/getLocalizedString.test.d.ts +1 -0
- package/es/getLocalizedString.test.js +66 -0
- package/es/index.d.ts +7 -1
- package/es/index.js +2 -2
- package/es/report/render.js +5 -1
- package/es/report/render.test.js +26 -2
- package/package.json +4 -4
- package/src/filter/index.ts +1 -0
- package/src/filter/tree.test.ts +33 -0
- package/src/filter/tree.ts +16 -0
- package/src/getLocalizedString.test.ts +85 -0
- package/src/getLocalizedString.ts +123 -19
- package/src/index.ts +7 -1
- package/src/report/render.test.ts +36 -1
- package/src/report/render.ts +6 -1
package/dist/iife/af.common.js
CHANGED
|
@@ -26,7 +26,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
//#endregion
|
|
29
|
-
//#region \0@oxc-project+runtime@0.
|
|
29
|
+
//#region \0@oxc-project+runtime@0.150.0/helpers/esm/typeof.js
|
|
30
30
|
function _typeof(o) {
|
|
31
31
|
"@babel/helpers - typeof";
|
|
32
32
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
@@ -37,7 +37,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
//#endregion
|
|
40
|
-
//#region \0@oxc-project+runtime@0.
|
|
40
|
+
//#region \0@oxc-project+runtime@0.150.0/helpers/esm/toPrimitive.js
|
|
41
41
|
function toPrimitive(t, r) {
|
|
42
42
|
if ("object" != _typeof(t) || !t) return t;
|
|
43
43
|
var e = t[Symbol.toPrimitive];
|
|
@@ -50,14 +50,14 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
//#endregion
|
|
53
|
-
//#region \0@oxc-project+runtime@0.
|
|
53
|
+
//#region \0@oxc-project+runtime@0.150.0/helpers/esm/toPropertyKey.js
|
|
54
54
|
function toPropertyKey(t) {
|
|
55
55
|
var i = toPrimitive(t, "string");
|
|
56
56
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
//#endregion
|
|
60
|
-
//#region \0@oxc-project+runtime@0.
|
|
60
|
+
//#region \0@oxc-project+runtime@0.150.0/helpers/esm/defineProperty.js
|
|
61
61
|
function _defineProperty(e, r, t) {
|
|
62
62
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
63
63
|
value: t,
|
|
@@ -558,9 +558,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
558
558
|
|
|
559
559
|
//#endregion
|
|
560
560
|
//#region src/getLocalizedString.ts
|
|
561
|
-
async function fetchLocalizedString(text) {
|
|
561
|
+
async function fetchLocalizedString(text, project) {
|
|
562
562
|
try {
|
|
563
|
-
let response = await fetch(`/api/user/localize/new/${
|
|
563
|
+
let response = await fetch(`/api/user/localize/new/${encodeURIComponent(project)}`, {
|
|
564
564
|
body: JSON.stringify({ text }),
|
|
565
565
|
headers: {
|
|
566
566
|
Accept: "application/json; */*",
|
|
@@ -573,20 +573,77 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
573
573
|
} catch {}
|
|
574
574
|
return text;
|
|
575
575
|
}
|
|
576
|
-
|
|
576
|
+
/**
|
|
577
|
+
* The dictionary a string is resolved in: the project's when the page carries one,
|
|
578
|
+
* otherwise the article's; nothing when the page has no `af` at all.
|
|
579
|
+
*/
|
|
580
|
+
function sourceFor(project) {
|
|
581
|
+
let af = window.af;
|
|
582
|
+
if (!af) return void 0;
|
|
583
|
+
if (project) {
|
|
584
|
+
let dictionary = af.i18n?.[project];
|
|
585
|
+
if (dictionary) return {
|
|
586
|
+
dictionary,
|
|
587
|
+
harvestAs: project
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
let article = af.article;
|
|
591
|
+
if (!article?.i18n) return void 0;
|
|
592
|
+
return {
|
|
593
|
+
dictionary: article.i18n,
|
|
594
|
+
harvestAs: article.id
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
function getLocalizedString(string, waitOrOptions) {
|
|
577
598
|
if (typeof string === "string" && string.trim().length === 0) return string;
|
|
578
599
|
if (string === void 0 || string === "" || string === null) return;
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
600
|
+
let { project, wait } = typeof waitOrOptions === "object" ? waitOrOptions : { wait: waitOrOptions };
|
|
601
|
+
let source = sourceFor(project);
|
|
602
|
+
if (source === void 0) return string;
|
|
603
|
+
let { dictionary, harvestAs } = source;
|
|
604
|
+
if (!Object.hasOwn(dictionary, string)) {
|
|
605
|
+
dictionary[string] = string;
|
|
606
|
+
let promise = fetchLocalizedString(string, harvestAs).then((text) => {
|
|
607
|
+
dictionary[string] = text;
|
|
608
|
+
return text;
|
|
609
|
+
});
|
|
610
|
+
if (wait) return promise;
|
|
611
|
+
}
|
|
612
|
+
return dictionary[string];
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* `getLocalizedString` and `localize` bound to a globalization project, for code that is
|
|
616
|
+
* not part of the article it runs on: the site chrome, the shared component packages.
|
|
617
|
+
*
|
|
618
|
+
* On a page whose template renders the project (`af.i18n[project]` exists) the strings are
|
|
619
|
+
* looked up and harvested there; on any other page they resolve through the article's
|
|
620
|
+
* dictionary as a plain `getLocalizedString` would.
|
|
621
|
+
*
|
|
622
|
+
* @example
|
|
623
|
+
* ```ts
|
|
624
|
+
* const { getLocalizedString: t } = createLocalizer("synergi-chrome");
|
|
625
|
+
* t("Applications");
|
|
626
|
+
* ```
|
|
627
|
+
*/
|
|
628
|
+
function createLocalizer(project) {
|
|
629
|
+
function bound(string, wait) {
|
|
630
|
+
return getLocalizedString(string, {
|
|
631
|
+
project,
|
|
632
|
+
wait
|
|
633
|
+
});
|
|
634
|
+
}
|
|
635
|
+
function localize(stringParts, ...args) {
|
|
636
|
+
let localized = bound(stringParts.map((s, i) => i === stringParts.length - 1 ? s : `${s}$${i}`).join(""));
|
|
637
|
+
args.forEach((arg, index) => {
|
|
638
|
+
localized = localized.replace(`$${index}`, String(arg));
|
|
639
|
+
});
|
|
640
|
+
return localized;
|
|
641
|
+
}
|
|
642
|
+
return {
|
|
643
|
+
project,
|
|
644
|
+
getLocalizedString: bound,
|
|
645
|
+
localize
|
|
646
|
+
};
|
|
590
647
|
}
|
|
591
648
|
|
|
592
649
|
//#endregion
|
|
@@ -891,6 +948,19 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
891
948
|
return filter;
|
|
892
949
|
}
|
|
893
950
|
/**
|
|
951
|
+
* Returns the `and` group alone when it is the only item of an `or` group.
|
|
952
|
+
*
|
|
953
|
+
* The server parses filter strings into the standard layout, which wraps even
|
|
954
|
+
* a plain list of conditions in an `or` group of one `and` group. That extra
|
|
955
|
+
* level means nothing, so the builder shows the `and` group on its own, as the
|
|
956
|
+
* Windows filter editor does.
|
|
957
|
+
*/
|
|
958
|
+
function unwrapSingleAndGroup(filter) {
|
|
959
|
+
if (filter.mode !== "or" || filter.items.length !== 1) return filter;
|
|
960
|
+
let [only] = filter.items;
|
|
961
|
+
return isGroup(only) && only.mode === "and" ? only : filter;
|
|
962
|
+
}
|
|
963
|
+
/**
|
|
894
964
|
* True when the filter contains no expressions. An empty filter must not be
|
|
895
965
|
* saved or applied.
|
|
896
966
|
*/
|
|
@@ -1817,10 +1887,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
1817
1887
|
async function openReport(options) {
|
|
1818
1888
|
let blob = await renderReport(options);
|
|
1819
1889
|
let url = URL.createObjectURL(blob.type ? blob : new Blob([blob], { type: getReportMediaType(options.format) }));
|
|
1820
|
-
|
|
1890
|
+
let opened = window.open(url, "_blank");
|
|
1891
|
+
if (!opened) {
|
|
1821
1892
|
URL.revokeObjectURL(url);
|
|
1822
1893
|
throw new Error("The report could not be opened. Allow pop-ups for this site and try again.");
|
|
1823
1894
|
}
|
|
1895
|
+
opened.opener = null;
|
|
1824
1896
|
window.setTimeout(() => URL.revokeObjectURL(url), 6e4);
|
|
1825
1897
|
}
|
|
1826
1898
|
/**
|
|
@@ -2052,7 +2124,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
2052
2124
|
|
|
2053
2125
|
//#endregion
|
|
2054
2126
|
//#region src/index.ts
|
|
2055
|
-
const version = "2.
|
|
2127
|
+
const version = "2.15.1";
|
|
2056
2128
|
|
|
2057
2129
|
//#endregion
|
|
2058
2130
|
exports.ConfirmButtons = ConfirmButtons;
|
|
@@ -2076,6 +2148,7 @@ exports.countExpressions = countExpressions;
|
|
|
2076
2148
|
exports.createEmptyFilter = createEmptyFilter;
|
|
2077
2149
|
exports.createEmptyGroup = createEmptyGroup;
|
|
2078
2150
|
exports.createExpression = createExpression;
|
|
2151
|
+
exports.createLocalizer = createLocalizer;
|
|
2079
2152
|
exports.decodeXml = decodeXml;
|
|
2080
2153
|
exports.describeFilter = describeFilter;
|
|
2081
2154
|
exports.downloadBlob = downloadBlob;
|
|
@@ -2148,6 +2221,7 @@ exports.toReportParameter = toReportParameter;
|
|
|
2148
2221
|
exports.toReportParameters = toReportParameters;
|
|
2149
2222
|
exports.toSavedFilter = toSavedFilter;
|
|
2150
2223
|
exports.toSavedFilters = toSavedFilters;
|
|
2224
|
+
exports.unwrapSingleAndGroup = unwrapSingleAndGroup;
|
|
2151
2225
|
exports.updateNodeAtPath = updateNodeAtPath;
|
|
2152
2226
|
exports.version = version;
|
|
2153
2227
|
exports.waitForDialog = waitForDialog;
|
|
@@ -512,9 +512,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
512
512
|
|
|
513
513
|
//#endregion
|
|
514
514
|
//#region src/getLocalizedString.ts
|
|
515
|
-
async function fetchLocalizedString(text) {
|
|
515
|
+
async function fetchLocalizedString(text, project) {
|
|
516
516
|
try {
|
|
517
|
-
let response = await fetch(`/api/user/localize/new/${
|
|
517
|
+
let response = await fetch(`/api/user/localize/new/${encodeURIComponent(project)}`, {
|
|
518
518
|
body: JSON.stringify({ text }),
|
|
519
519
|
headers: {
|
|
520
520
|
Accept: "application/json; */*",
|
|
@@ -527,20 +527,77 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
527
527
|
} catch {}
|
|
528
528
|
return text;
|
|
529
529
|
}
|
|
530
|
-
|
|
530
|
+
/**
|
|
531
|
+
* The dictionary a string is resolved in: the project's when the page carries one,
|
|
532
|
+
* otherwise the article's; nothing when the page has no `af` at all.
|
|
533
|
+
*/
|
|
534
|
+
function sourceFor(project) {
|
|
535
|
+
let af = window.af;
|
|
536
|
+
if (!af) return void 0;
|
|
537
|
+
if (project) {
|
|
538
|
+
let dictionary = af.i18n?.[project];
|
|
539
|
+
if (dictionary) return {
|
|
540
|
+
dictionary,
|
|
541
|
+
harvestAs: project
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
let article = af.article;
|
|
545
|
+
if (!article?.i18n) return void 0;
|
|
546
|
+
return {
|
|
547
|
+
dictionary: article.i18n,
|
|
548
|
+
harvestAs: article.id
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
function getLocalizedString(string, waitOrOptions) {
|
|
531
552
|
if (typeof string === "string" && string.trim().length === 0) return string;
|
|
532
553
|
if (string === void 0 || string === "" || string === null) return;
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
554
|
+
let { project, wait } = typeof waitOrOptions === "object" ? waitOrOptions : { wait: waitOrOptions };
|
|
555
|
+
let source = sourceFor(project);
|
|
556
|
+
if (source === void 0) return string;
|
|
557
|
+
let { dictionary, harvestAs } = source;
|
|
558
|
+
if (!Object.hasOwn(dictionary, string)) {
|
|
559
|
+
dictionary[string] = string;
|
|
560
|
+
let promise = fetchLocalizedString(string, harvestAs).then((text) => {
|
|
561
|
+
dictionary[string] = text;
|
|
562
|
+
return text;
|
|
563
|
+
});
|
|
564
|
+
if (wait) return promise;
|
|
565
|
+
}
|
|
566
|
+
return dictionary[string];
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* `getLocalizedString` and `localize` bound to a globalization project, for code that is
|
|
570
|
+
* not part of the article it runs on: the site chrome, the shared component packages.
|
|
571
|
+
*
|
|
572
|
+
* On a page whose template renders the project (`af.i18n[project]` exists) the strings are
|
|
573
|
+
* looked up and harvested there; on any other page they resolve through the article's
|
|
574
|
+
* dictionary as a plain `getLocalizedString` would.
|
|
575
|
+
*
|
|
576
|
+
* @example
|
|
577
|
+
* ```ts
|
|
578
|
+
* const { getLocalizedString: t } = createLocalizer("synergi-chrome");
|
|
579
|
+
* t("Applications");
|
|
580
|
+
* ```
|
|
581
|
+
*/
|
|
582
|
+
function createLocalizer(project) {
|
|
583
|
+
function bound(string, wait) {
|
|
584
|
+
return getLocalizedString(string, {
|
|
585
|
+
project,
|
|
586
|
+
wait
|
|
587
|
+
});
|
|
588
|
+
}
|
|
589
|
+
function localize(stringParts, ...args) {
|
|
590
|
+
let localized = bound(stringParts.map((s, i) => i === stringParts.length - 1 ? s : `${s}$${i}`).join(""));
|
|
591
|
+
args.forEach((arg, index) => {
|
|
592
|
+
localized = localized.replace(`$${index}`, String(arg));
|
|
593
|
+
});
|
|
594
|
+
return localized;
|
|
595
|
+
}
|
|
596
|
+
return {
|
|
597
|
+
project,
|
|
598
|
+
getLocalizedString: bound,
|
|
599
|
+
localize
|
|
600
|
+
};
|
|
544
601
|
}
|
|
545
602
|
|
|
546
603
|
//#endregion
|
|
@@ -845,6 +902,19 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
845
902
|
return filter;
|
|
846
903
|
}
|
|
847
904
|
/**
|
|
905
|
+
* Returns the `and` group alone when it is the only item of an `or` group.
|
|
906
|
+
*
|
|
907
|
+
* The server parses filter strings into the standard layout, which wraps even
|
|
908
|
+
* a plain list of conditions in an `or` group of one `and` group. That extra
|
|
909
|
+
* level means nothing, so the builder shows the `and` group on its own, as the
|
|
910
|
+
* Windows filter editor does.
|
|
911
|
+
*/
|
|
912
|
+
function unwrapSingleAndGroup(filter) {
|
|
913
|
+
if (filter.mode !== "or" || filter.items.length !== 1) return filter;
|
|
914
|
+
let [only] = filter.items;
|
|
915
|
+
return isGroup(only) && only.mode === "and" ? only : filter;
|
|
916
|
+
}
|
|
917
|
+
/**
|
|
848
918
|
* True when the filter contains no expressions. An empty filter must not be
|
|
849
919
|
* saved or applied.
|
|
850
920
|
*/
|
|
@@ -1771,10 +1841,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
1771
1841
|
async function openReport(options) {
|
|
1772
1842
|
let blob = await renderReport(options);
|
|
1773
1843
|
let url = URL.createObjectURL(blob.type ? blob : new Blob([blob], { type: getReportMediaType(options.format) }));
|
|
1774
|
-
|
|
1844
|
+
let opened = window.open(url, "_blank");
|
|
1845
|
+
if (!opened) {
|
|
1775
1846
|
URL.revokeObjectURL(url);
|
|
1776
1847
|
throw new Error("The report could not be opened. Allow pop-ups for this site and try again.");
|
|
1777
1848
|
}
|
|
1849
|
+
opened.opener = null;
|
|
1778
1850
|
window.setTimeout(() => URL.revokeObjectURL(url), 6e4);
|
|
1779
1851
|
}
|
|
1780
1852
|
/**
|
|
@@ -2006,7 +2078,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
2006
2078
|
|
|
2007
2079
|
//#endregion
|
|
2008
2080
|
//#region src/index.ts
|
|
2009
|
-
const version = "2.
|
|
2081
|
+
const version = "2.15.1";
|
|
2010
2082
|
|
|
2011
2083
|
//#endregion
|
|
2012
2084
|
exports.ConfirmButtons = ConfirmButtons;
|
|
@@ -2030,6 +2102,7 @@ exports.countExpressions = countExpressions;
|
|
|
2030
2102
|
exports.createEmptyFilter = createEmptyFilter;
|
|
2031
2103
|
exports.createEmptyGroup = createEmptyGroup;
|
|
2032
2104
|
exports.createExpression = createExpression;
|
|
2105
|
+
exports.createLocalizer = createLocalizer;
|
|
2033
2106
|
exports.decodeXml = decodeXml;
|
|
2034
2107
|
exports.describeFilter = describeFilter;
|
|
2035
2108
|
exports.downloadBlob = downloadBlob;
|
|
@@ -2102,6 +2175,7 @@ exports.toReportParameter = toReportParameter;
|
|
|
2102
2175
|
exports.toReportParameters = toReportParameters;
|
|
2103
2176
|
exports.toSavedFilter = toSavedFilter;
|
|
2104
2177
|
exports.toSavedFilters = toSavedFilters;
|
|
2178
|
+
exports.unwrapSingleAndGroup = unwrapSingleAndGroup;
|
|
2105
2179
|
exports.updateNodeAtPath = updateNodeAtPath;
|
|
2106
2180
|
exports.version = version;
|
|
2107
2181
|
exports.waitForDialog = waitForDialog;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
this.af=this.af||{},this.af.common=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return{all:e||=new Map,on:function(t,n){var r=e.get(t);r?r.push(n):e.set(t,[n])},off:function(t,n){var r=e.get(t);r&&(n?r.splice(r.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var r=e.get(t);r&&r.slice().map(function(e){e(n)}),(r=e.get(`*`))&&r.slice().map(function(e){e(t,n)})}}}var n=class{eventHandler=t();authenticated(){this.eventHandler.emit(`onAuthenticated`)}async expired(e,t){try{let n=new Promise(t=>{let n=()=>{this.eventHandler.off(`onAuthenticated`,n),e?.(),t()};this.eventHandler.on(`onAuthenticated`,n)}),r=document.querySelector(`dialog.session-expired-dialog`);if(r)await n;else{r=document.createElement(`dialog`),r.className=`session-expired-dialog`,r.style.display=`flex`,r.style.padding=`0`,r.style.left=`50%`,r.style.transform=`translateX(-50%)`;let e=`/login?ReturnUrl=%2fapi/sessionexpired/remove`;t===`RequireTwoFactor`?e=`/login?RequireTwoFactor=1&ReturnUrl=%2fapi/sessionexpired/remove`:await fetch(`/logout`,{method:`POST`}),r.innerHTML=`<iframe sandbox="allow-same-origin allow-scripts allow-modals allow-top-navigation-by-user-activation allow-forms" src="${e}" style="border:0;width:min(500px,100vw);height:min(700px, 100vh);"></iframe>`,document.body.append(r),r.showModal(),await n,r.remove()}}catch{window.location.href=`/login?ReturnUrl=${encodeURIComponent(window.location.pathname)}${encodeURIComponent(window.location.search)}`}}attachEvent(e,t){return this.eventHandler.on(e,t)}detachEvent(e,t){return this.eventHandler.off(e,t)}},r=class extends n{amDesignator=`a.m.`;dayNames=[`sunday`,`monday`,`tuesday`,`wednesday`,`thursday`,`friday`,`saturday`];dayNamesShort=[`sun`,`mon`,`tue`,`wed`,`thu`,`fri`,`sat`];decimalSeparator=`.`;domain=`OB`;email;formats;groupSeparator=null;integratedSecurity=!1;isDeveloper=!1;login=``;loginType;monthNames=[`january`,`february`,`march`,`april`,`may`,`june`,`july`,`august`,`september`,`october`,`november`,`december`,``];monthNamesShort=[`jan`,`feb`,`mar`,`apr`,`may`,`jun`,`jul`,`augt`,`sep`,`oct`,`nov`,`dec`,``];name;pmDesignator=`p.m.`;shortDateFormat=`dd.MM.yyyy`;culture=`en-GB`;uiculture=`en-GB`;constructor(e){super(),this.formats={},Object.assign(this,e)}};let i=window.af?.article?.id??window.window?.location.pathname.substring(1).split(`/`)[0];async function a(e,t={},n=0){try{let r=await fetch(`/api/logging/log-activity`,{method:`POST`,body:JSON.stringify({article:i,timeElapsed:n,action:e,parameters:{...t,_session:m()}}),headers:{"Content-Type":`application/json`,Accept:`application/json`}});if(!r.ok){if(r.headers.get(`Content-Type`)?.includes(`application/json`)){let e=await r.json();console.error(e.error)}else console.error(`${r.status} ${r.statusText}`)}}catch{}}function o(e,t={}){let n=performance.now();return(r={})=>a(e,{...t,...r},performance.now()-n)}async function s(e){let t=performance.now();return[await e(),performance.now()-t]}async function c(e){try{if(!e)return;let t=typeof e==`string`?{error:e}:typeof e==`object`?`message`in e?{error:e.message,stack:e.stack??null}:{error:e.toString()}:{error:`Unspecified error`};console.error(e);let n=await fetch(`/data/Logger/LogError`,{method:`POST`,body:JSON.stringify(t),headers:{"Content-Type":`application/json; charset=utf-8`}});if(n.ok)return await n.json();console.error(Error(`Failed to log error`))}catch{}}function l(){return crypto.randomUUID?.()}let u=Date.now(),d=l(),f=``,p=``;if(`document`in window){let e=()=>a(`AfSessionInit`,{"appframe-core":window.af?.common?.version,"appframe-data":window.af?.data?.version,"app-version":window.af?.article?.version});document.addEventListener(`DOMContentLoaded`,()=>{f=localStorage.getItem(`_afDeviceId`),p=sessionStorage.getItem(`_afSessionId`),f||(f=l(),localStorage.setItem(`_afDeviceId`,f)),p||(p=d,sessionStorage.setItem(`_afSessionId`,p)),e()}),document.addEventListener(`visibilitychange`,function(){document.visibilityState===`hidden`?navigator.sendBeacon(`/api/logging/log-activity`,JSON.stringify({article:i,action:`AfSessionEnd`,parameters:{_session:m()}})):e()})}function m(){return{browserSessionId:p,sessionStart:u,sessionLength:Date.now()-u,sessionId:d,deviceId:f}}window.window?.addEventListener(`error`,e=>{typeof e==`object`&&`error`in e?c(e.error):typeof e==`object`&&`message`in e&&c(e)});function ee(e){return[af?.article?.id||``,`common`,e].join(`.`)}var te=new class{isPersisted=()=>!0;getLocalStorageKey(e,t){return t?[`common`,e].join(`.`):ee(e)}get(e,t,n){let r=this.getLocalStorageKey(e,n),i=localStorage.getItem(r);return i===null?t:JSON.parse(i)}set(e,t,n){localStorage.setItem(this.getLocalStorageKey(e,n),JSON.stringify(t))}remove(e,t){let n=this.getLocalStorageKey(e,t);return localStorage.getItem(n)!==null&&(localStorage.removeItem(n),!0)}clear(){let e=ee(``);for(let t in localStorage)t.slice(0,e.length)===e&&localStorage.removeItem(t)}};function ne(e){return e?re(e).substring(0,10):null}function h(e,t=2){return String(e).padStart(t,`0`)}function re(e){return e?`${e.getFullYear()}-${h(e.getMonth()+1)}-${h(e.getDate())}T${h(e.getHours())}:${h(e.getMinutes())}:${h(e.getSeconds())}.${h(e.getMilliseconds(),3)}`:null}function ie(e){return e?e.toISOString().substring(0,16):``}function ae(e,t){return new Promise((n,r)=>{try{let r=URL.createObjectURL(e),i=document.body,a=document.createElement(`a`);a.setAttribute(`download`,t),a.href=r,i.append(a),a.click(),i.removeChild(a),setTimeout(()=>{URL.revokeObjectURL(r),n()},250)}catch(e){r(e)}})}function g(e,t){if(e)return;let n=typeof t==`function`?t():t;throw Error(n??`Invariant failed`)}async function oe(e,{fileName:t,signal:n,onProgress:r}){let i=0;r?.({status:`requested`});try{let n=await fetch(e);if(!n.ok||!n.body){if(n.headers.get(`content-type`)?.includes(`application/json`)){let e=await n.json();g(!e.error,e.error)}throw Error(`${n.status} ${n.statusText}`)}try{let e=n.body.getReader(),t=new ReadableStream({start:t=>{function n(){return e.read().then(e=>{if(e.done){t.close();return}return i+=e.value.length,r?.({bytesReceived:i,status:`downloading`}),t.enqueue(e.value),n()})}return n()}});n=new Response(t)}catch{}let a=await n.blob();r?.({bytesReceived:i,status:`downloaded`}),await ae(a,t),r?.({bytesReceived:i,status:`completed`})}catch(e){n?.aborted?r?.({status:`cancelled`}):r?.({error:e.message,status:`error`})}}let se=/^function(?:\s+([a-zA-Z$_][a-zA-Z0-9$_]*))?\s*\(((?:(?:\s*[a-zA-Z$_][a-zA-Z0-9$_]*)(?:\s*,\s*[a-zA-Z$_][a-zA-Z0-9$_]*)*)?)\s*\)\s*\{((?:.|\n|\r)*)\}$/,ce=/^(?:\(([^)]*)\)|([a-zA-Z$_][a-zA-Z0-9$_]*))\s*=>\s*\{([\s\S]*)\}$/,le=/^(?:\(([^)]*)\)|([a-zA-Z$_][a-zA-Z0-9$_]*))\s*=>\s*([\s\S]+)$/,_=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean);function v(e){let t=e.toString(),n=t.match(ce);if(n){let t=_(n[1]??n[2]??``);return{name:e.name,args:t,body:n[3]}}let r=t.match(le);if(r){let t=_(r[1]??r[2]??``);return{name:e.name,args:t,body:r[3]}}let i=t.match(se);return g(i,`Unable to parse function!`),{name:e.name??i[1],args:_(i[2]),body:i[3]}}function ue(){}ue.prototype=Object.create(null);function de(e,t){if(typeof e==`object`){if(typeof t==`string`)return de(e,t.split(`.`));if(Array.isArray(t)){let n=e;for(let e=0;e<t.length;e++)n=n[t[e]]=n[t[e]]||new ue;return n}}}function fe(e,t,n={}){if(Array.isArray(t))for(let n of t){let{name:t}=v(n);g(t,`Unable to detect name of function! Name it, or only supply one function and include name in first parameter.`),fe(e,n)}else{let r,i;if(typeof t==`function`&&(r=v(t).name),typeof e==`string`){let t=e.split(`.`);r||(r=t[t.length-1],t=t.slice(0,t.length-1)),i=de(window,t)}else r&&(typeof e==`object`||typeof e==`function`)?i=e:g(!1,`Invalid typeof parameter 'name', or unable to parse pValue!`);Object.hasOwn(i,r)&&n?.overwrite!==!0?console.warn(`${[e,r].join(`.`)} is already defined!`):i[r]=t}}async function pe(e){try{let t=await fetch(`/api/user/localize/new/${af.article.id}`,{body:JSON.stringify({text:e}),headers:{Accept:`application/json; */*`,"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`});if(t.ok)return await t.json()}catch{}return e}function y(e,t){if(typeof e==`string`&&e.trim().length===0)return e;if(e!==void 0&&e!==``&&e!==null){if(window.af?.article?.i18n!==void 0){if(!Object.hasOwn(af.article.i18n,e)){af.article.i18n[e]=e;let n=pe(e).then(t=>(af.article.i18n[e]=t,t));if(t)return n}return af.article.i18n[e]}return e}}let me=[`isnull`,`isnotnull`,`istrue`,`isfalse`,`isblank`,`isnotblank`],he=[`between`,`notbetween`,`datebetween`,`datenotbetween`],ge=[`inlist`,`notinlist`];function b(e){return me.includes(e)?`none`:he.includes(e)?`pair`:ge.includes(e)?`list`:`single`}let _e={equals:`Equal to`,notequals:`Not equal to`,greaterthan:`Greater than`,greaterthanorequal:`Greater than or equal to`,lessthan:`Less than`,lessthanorequal:`Less than or equal to`,beginswith:`Begins with`,notbeginswith:`Does not begin with`,endswith:`Ends with`,notendswith:`Does not end with`,contains:`Contains`,notcontains:`Does not contain`,like:`Like`,notlike:`Not like`,isnull:`Is null`,isnotnull:`Is not null`,isblank:`Is empty`,isnotblank:`Is not empty`,istrue:`Is true`,isfalse:`Is false`,inlist:`In list`,notinlist:`Not in list`,between:`Between`,notbetween:`Not between`,dateequals:`Equal to`,notdatequals:`Not equal to`,dategreaterthan:`After`,dategreaterthanorequal:`On or after`,datelessthan:`Before`,datelessthanorequal:`Up to`,datebetween:`Between`,datenotbetween:`Not between`},ve={greaterthan:`After`,greaterthanorequal:`On or after`,lessthan:`Before`,lessthanorequal:`Up to`};function ye(e,t){return y((t===`date`||t===`datetime`?ve[e]:void 0)??_e[e]??e)}let x=[`equals`,`notequals`],S=[`inlist`,`notinlist`],C=[`between`,`notbetween`],w=[`greaterthan`,`greaterthanorequal`,`lessthan`,`lessthanorequal`],be=[`contains`,`notcontains`,`beginswith`,`notbeginswith`,`endswith`,`notendswith`,`isblank`,`isnotblank`],xe={date:[...x,...S,...C,...w],datetime:[...x,...S,...C,...w],number:[...x,...S,...C,...w],boolean:[`istrue`,`isfalse`],string:[...x,...be,...S,...C,...w],uniqueidentifier:[...x,...be,...S,...C,...w]},Se={date:`equals`,datetime:`equals`,number:`equals`,boolean:`istrue`,string:`contains`,uniqueidentifier:`beginswith`};function Ce(e){let t=[...xe[e.type]??xe.string];return e.nullable&&e.type!==`boolean`&&t.push(`isnull`,`isnotnull`),t}function we(e){return Se[e.type]??`equals`}function T(e,t){if(b(t)===`none`)return`null`;switch(e.type){case`number`:return`number`;case`boolean`:return`boolean`;case`date`:case`datetime`:return`datetime`;case`uniqueidentifier`:return`uniqueidentifier`;default:return`string`}}let Te=[`Yesterday`,`Today`,`Tomorrow`,`ThisWeek`,`ThisMonth`,`ThisYear`,`LastWeek`,`LastMonth`,`LastYear`,`NextWeek`,`NextMonth`,`NextYear`],Ee={CurrentUser:`Current user`,Yesterday:`Yesterday`,Today:`Today`,Tomorrow:`Tomorrow`,ThisWeek:`This week`,ThisMonth:`This month`,ThisYear:`This year`,LastWeek:`Last week`,LastMonth:`Last month`,LastYear:`Last year`,NextWeek:`Next week`,NextMonth:`Next month`,NextYear:`Next year`,UserYesterday:`Yesterday`,UserToday:`Today`,UserTomorrow:`Tomorrow`,UserThisWeek:`This week`,UserThisMonth:`This month`,UserThisYear:`This year`,UserLastWeek:`Last week`,UserLastMonth:`Last month`,UserLastYear:`Last year`,UserNextWeek:`Next week`,UserNextMonth:`Next month`,UserNextYear:`Next year`};function De(e){return y(Ee[e]??e)}function Oe(e){return e.type===`date`||e.type===`datetime`?[...Te]:e.type===`string`?[`CurrentUser`]:[]}let ke={not:`notequals`,tweens:`notbetween`,notdate:`notdatequals`,notdateequals:`notdatequals`};function E(e){let t=e.toLowerCase().replace(/[\s,]/g,``);return ke[t]??t}function D(){return O(`and`)}function O(e=`and`){return{type:`group`,mode:e,items:[]}}function k(e){return e.type===`group`}function A(e){return e.type===`expression`}function Ae(e){return e?A(e)?{type:`group`,mode:`and`,items:[e]}:e:D()}function je(e){return j(e)===0}function j(e){return e?A(e)?1:e.items.reduce((e,t)=>e+j(t),0):0}function Me(e){if(!e)return null;if(A(e))return M(e)?{type:`group`,mode:`and`,items:[e]}:null;let t=e.items.map(e=>k(e)?Me(e):M(e)?e:null).filter(e=>e!==null);return t.length===0?null:{...e,items:t}}function M(e){if(k(e))return e.items.some(M);if(!e.column||!e.operator)return!1;let t=b(E(e.operator));return t===`none`?!0:e.value===null||e.value===void 0||e.value===``?!1:t===`pair`?Array.isArray(e.value)&&e.value.length===2&&e.value.every(e=>e!==``&&e!=null):t!==`list`||Array.isArray(e.value)&&e.value.length>0}function Ne(e,t){let n=t??we(e);return{type:`expression`,column:e.name,operator:n,value:Pe(n),valueType:T(e,n)}}function Pe(e){switch(b(e)){case`none`:return null;case`pair`:return[``,``];case`list`:return[];default:return``}}function Fe(e,t,n){let r=b(E(e.operator)),i=b(t),a=e.value;i!==r&&(a=Pe(t));let o=e.valueType===`special`&&i===r?`special`:T(n,t);return{...e,operator:t,value:a,valueType:o}}function Ie(e,t){let n=e;for(let e of t){if(!n||!k(n))return null;n=n.items[e]}return n??null}function N(e,t,n){if(t.length===0)return n(e)??e;if(!k(e))return e;let[r,...i]=t,a=e.items[r];if(!a)return e;let o=[...e.items];if(i.length===0){let e=n(a);e===null?o.splice(r,1):o[r]=e}else o[r]=N(a,i,n);return{...e,items:o}}function Le(e,t,n){return N(e,t,e=>k(e)?{...e,items:[...e.items,n]}:e)}function Re(e,t){return t.length===0?D():N(e,t,()=>null)}function ze(e,t,n){return N(e,t,e=>k(e)?{...e,mode:n}:e)}function Be(e,t=[]){let n=Ie(e,t);return Le(e,t,O(n&&k(n)&&n.mode===`and`?`or`:`and`))}async function Ve(e,t){let n=await fetch(`/api/filter/convert`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:t});if(!n.ok)throw Error(`Failed to convert filter: ${n.status} ${n.statusText}`);let r=await n.json();return{...r,filterObject:r.filterObject?Ae(r.filterObject):null}}function He(e,t={}){return e?Ue(e,new Map((t.fields??[]).map(e=>[e.name.toLowerCase(),e])),0):``}function Ue(e,t,n){if(A(e))return We(e,t);let r=e.items.map(e=>Ue(e,t,n+1)).filter(e=>e!==``);if(r.length===0)return``;if(r.length===1)return r[0];let i=e.mode===`or`?` OR `:` AND `,a=r.join(i);return n===0?a:`(${a})`}function We(e,t){if(!e.column||!e.operator)return``;let n=t.get(e.column.toLowerCase()),r=n?.caption??e.column,i=E(e.operator),a=ye(i,n?.type),o=b(i);return o===`none`?`[${r}] ${a}`:`[${r}] ${a} ${Ge(e,o)}`}function Ge(e,t){let{value:n,valueType:r}=e;if(r===`special`&&typeof n==`string`)return De(n);if(Array.isArray(n)){let e=n.map(e=>P(e,r));return t===`pair`?e.join(` - `):`(${e.join(`, `)})`}return P(n,r)}function P(e,t){return e==null?``:e instanceof Date?e.toISOString().slice(0,10):typeof e==`number`||typeof e==`boolean`||t===`number`||t===`boolean`?String(e):`'${String(e)}'`}let Ke=[`string`,`number`,`boolean`,`date`,`datetime`,`uniqueidentifier`];function F(e){let t=e?.trim().toLowerCase();return Ke.find(e=>e===t)??`string`}function I(e){return e===!0||e===1}function qe(e){return{name:e.FieldName??``,type:F(e.DataType),nullable:I(e.Nullable),excludeFromFilter:I(e.ExcludeFromFilter),valueListRecordSource:e.ValueListRecordSource||void 0}}function Je(e){return e.map(qe).filter(e=>e.name!==``&&!e.excludeFromFilter).sort((e,t)=>e.name.localeCompare(t.name))}function Ye(e){return!e||A(e)||e.mode!==`or`?!1:e.items.every(e=>k(e)&&e.mode===`and`&&e.items.every(A))}function Xe(e){if(!e)return{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:[]}]};if(A(e))return{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:[e]}]};if(e.mode===`or`){let t=e.items.map(e=>{let t=[];return L(e,t),{type:`group`,mode:`and`,items:t}});return{type:`group`,mode:`or`,items:t.length>0?t:[{type:`group`,mode:`and`,items:[]}]}}let t=[];return L(e,t),{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:t}]}}function L(e,t){if(A(e)){t.push(e);return}for(let n of e.items)L(n,t)}function Ze(e){return{filterId:e.FilterID??-1,primKey:e.PrimKey??``,name:e.FilterName??``,criteria:e.FilterCriteria??``,dbObjectId:e.DBObjectID??``,accessLevel:Qe(e.AccessLevel),createdByUser:R(e.CreatedByUser),createdBy:e.CreatedBy??``,domain:e.Domain??null,crossDomain:R(e.CrossDomain),isPersonallyShared:R(e.IsPersonallyShared),hideCriteria:R(e.HideFilterCriteria),headerText:e.OptionalHeaderText||null,comment:e.OptionalComment||null,parameters:e.Parameters||null,reportTitle:e.ReportTitle||null,created:$e(e.Created),updated:$e(e.Updated)}}function Qe(e){return e===`Manager`||e===`Editor`?e:`Reader`}function R(e){return typeof e==`string`?e.toLowerCase()===`true`:!!e}function $e(e){if(!e)return null;if(e instanceof Date)return e;let t=new Date(e);return Number.isNaN(t.getTime())?null:t}function et(e){return e.filter(e=>(e.FilterID??-1)!==-1).map(Ze).sort((e,t)=>e.name.localeCompare(t.name))}function tt(e){let t=[],n=[];for(let r of e)r.createdByUser?t.push(r):n.push(r);return{mine:t,shared:n}}function nt(e,t){if(t!=null)return e.find(e=>e.filterId===t)}function rt(e){return e.accessLevel===`Editor`||e.accessLevel===`Manager`}function it(e){return e.accessLevel===`Manager`}function z(e){return e.createdByUser}let at=z,ot=z,st={xs:64,sm:128,md:256,lg:512,xl:void 0};function ct(e,t,n,r=`xs`){if(e&&typeof e==`object`)return ct(e.primKey,e.login,e.hash,e.size);if(!e||!n)return``;let i=st[r];return`/api/data/blob/EmployeesLookup/${e}/Image/${encodeURIComponent(t??``)}${t?`.`:``}${encodeURIComponent(n)}.jpg${i?`?width=${i}`:``}`}function lt(e,...t){g(Array.isArray(e)&&e.length===t.length+1,`Method 'localize' must be used as a tag function`);let n=y(e.map((t,n)=>n===e.length-1?t:`${t}$${n}`).join(``));return t.forEach((e,t)=>{n=n.replace(`$${t}`,e)}),n}let ut={amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`};function B(e){return e.replace(/&(#x?[0-9a-f]+|[a-z]+);/gi,(e,t)=>t.startsWith(`#x`)||t.startsWith(`#X`)?String.fromCodePoint(Number.parseInt(t.slice(2),16)):t.startsWith(`#`)?String.fromCodePoint(Number.parseInt(t.slice(1),10)):ut[t.toLowerCase()]??e)}function V(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function H(e,t){let n=RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`).exec(e);if(!n)return null;let r=B(n[1]).trim();return r===``?null:r}function dt(e,t){return[...e.matchAll(RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`,`g`))].map(e=>B(e[1]).trim())}let ft={Byte:`number`,Decimal:`number`,Double:`number`,Int16:`number`,Int32:`number`,Int64:`number`,Single:`number`,Boolean:`boolean`,DateTime:`date`};function pt(e){let t=/<SelectColumns>([\s\S]*?)<\/SelectColumns>/.exec(e)?.[1]??``,n=[];for(let e of t.matchAll(/<afSelectColumn>([\s\S]*?)<\/afSelectColumn>/g)){let t=H(e[1],`Name`);t&&n.push({name:t,type:ft[H(e[1],`DataType`)??``]??`string`})}return n}function U(e){if(!e||!e.includes(`<afRecordSource`))return null;let t=H(e,`ViewName`);if(!t)return null;let n=H(e,`MaxRecords`);return{viewName:t,columns:pt(e),whereClause:H(e,`WhereClause`),filterString:H(e,`FilterString`),maxRecords:n===null||n===`0`?null:Number(n)}}let mt=[`String`,`Integer`,`Double`,`Date`,`Boolean`],ht=/^[a-z]stp_/i;function W(e){return typeof e==`string`&&ht.test(e.trim())}function gt(e){return e?e.split(/\r\n|\r|\n/).map(e=>e.trim()).filter(e=>e!==``):[]}function _t(e){return mt.find(t=>t.toLowerCase()===e?.trim().toLowerCase())??`String`}function vt(e,t,n){if(t)return`lookup`;if(n)return`select`;switch(e){case`Integer`:case`Double`:return`number`;case`Date`:return`date`;case`Boolean`:return`boolean`;default:return`text`}}function yt(e){let t=e.Name??``,n=_t(e.DataType),r=gt(e.Items),i=U(e.RecordSource),a=e.ValueMember??null;i&&!a&&(a=i.columns[0]?.name??null);let o=i?.columns.find(e=>e.name!==a)?.name??null,s=!!(i&&a);return{name:t,label:e.Label?.trim()||t,description:e.Description?.trim()||null,type:n,editor:vt(n,s,r.length>0),defaultValue:e.DefaultValue??null,items:r,recordSource:s?i:null,valueMember:s?a:null,displayMember:s?o:null,sortOrder:e.SortOrder??0,lookupWidth:e.LookupWidth??null,lookupHeight:e.LookupHeight??null}}function bt(e){return e.filter(e=>e.Name).map(yt).sort((e,t)=>e.sortOrder-t.sortOrder||e.label.localeCompare(t.label))}function G(e,t){if(t==null||t===``)return e.type!==`Boolean`&&null;switch(e.type){case`Boolean`:return typeof t==`boolean`?t:/^(true|1|ja|yes)$/i.test(String(t));case`Integer`:{let e=Number.parseInt(String(t),10);return Number.isNaN(e)?null:e}case`Double`:{let e=Number(String(t).replace(`,`,`.`));return Number.isNaN(e)?null:e}default:return String(t)}}function xt(e){let t={};for(let n of e)t[n.name]=W(n.defaultValue)?G(n,null):G(n,n.defaultValue);return t}function St(e,t){return t==null?``:typeof t==`boolean`?t?`True`:`False`:String(t)}function Ct(e,t){return`<Parameters Version="1">\n${e.map(e=>{let n=St(e,t[e.name]??null);return` <Parameter Name="${V(e.name)}" Type="${e.type}">${V(n)}</Parameter>`}).join(`
|
|
2
|
-
`)}\n</Parameters>`}function
|
|
1
|
+
this.af=this.af||{},this.af.common=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return{all:e||=/* @__PURE__ */ new Map,on:function(t,n){var r=e.get(t);r?r.push(n):e.set(t,[n])},off:function(t,n){var r=e.get(t);r&&(n?r.splice(r.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var r=e.get(t);r&&r.slice().map(function(e){e(n)}),(r=e.get(`*`))&&r.slice().map(function(e){e(t,n)})}}}var n=class{eventHandler=t();authenticated(){this.eventHandler.emit(`onAuthenticated`)}async expired(e,t){try{let n=new Promise(t=>{let n=()=>{this.eventHandler.off(`onAuthenticated`,n),e?.(),t()};this.eventHandler.on(`onAuthenticated`,n)}),r=document.querySelector(`dialog.session-expired-dialog`);if(r)await n;else{r=document.createElement(`dialog`),r.className=`session-expired-dialog`,r.style.display=`flex`,r.style.padding=`0`,r.style.left=`50%`,r.style.transform=`translateX(-50%)`;let e=`/login?ReturnUrl=%2fapi/sessionexpired/remove`;t===`RequireTwoFactor`?e=`/login?RequireTwoFactor=1&ReturnUrl=%2fapi/sessionexpired/remove`:await fetch(`/logout`,{method:`POST`}),r.innerHTML=`<iframe sandbox="allow-same-origin allow-scripts allow-modals allow-top-navigation-by-user-activation allow-forms" src="${e}" style="border:0;width:min(500px,100vw);height:min(700px, 100vh);"></iframe>`,document.body.append(r),r.showModal(),await n,r.remove()}}catch{window.location.href=`/login?ReturnUrl=${encodeURIComponent(window.location.pathname)}${encodeURIComponent(window.location.search)}`}}attachEvent(e,t){return this.eventHandler.on(e,t)}detachEvent(e,t){return this.eventHandler.off(e,t)}},r=class extends n{amDesignator=`a.m.`;dayNames=[`sunday`,`monday`,`tuesday`,`wednesday`,`thursday`,`friday`,`saturday`];dayNamesShort=[`sun`,`mon`,`tue`,`wed`,`thu`,`fri`,`sat`];decimalSeparator=`.`;domain=`OB`;email;formats;groupSeparator=null;integratedSecurity=!1;isDeveloper=!1;login=``;loginType;monthNames=[`january`,`february`,`march`,`april`,`may`,`june`,`july`,`august`,`september`,`october`,`november`,`december`,``];monthNamesShort=[`jan`,`feb`,`mar`,`apr`,`may`,`jun`,`jul`,`augt`,`sep`,`oct`,`nov`,`dec`,``];name;pmDesignator=`p.m.`;shortDateFormat=`dd.MM.yyyy`;culture=`en-GB`;uiculture=`en-GB`;constructor(e){super(),this.formats={},Object.assign(this,e)}};let i=window.af?.article?.id??window.window?.location.pathname.substring(1).split(`/`)[0];async function a(e,t={},n=0){try{let r=await fetch(`/api/logging/log-activity`,{method:`POST`,body:JSON.stringify({article:i,timeElapsed:n,action:e,parameters:{...t,_session:m()}}),headers:{"Content-Type":`application/json`,Accept:`application/json`}});if(!r.ok){if(r.headers.get(`Content-Type`)?.includes(`application/json`)){let e=await r.json();console.error(e.error)}else console.error(`${r.status} ${r.statusText}`)}}catch{}}function o(e,t={}){let n=performance.now();return(r={})=>a(e,{...t,...r},performance.now()-n)}async function s(e){let t=performance.now();return[await e(),performance.now()-t]}async function c(e){try{if(!e)return;let t=typeof e==`string`?{error:e}:typeof e==`object`?`message`in e?{error:e.message,stack:e.stack??null}:{error:e.toString()}:{error:`Unspecified error`};console.error(e);let n=await fetch(`/data/Logger/LogError`,{method:`POST`,body:JSON.stringify(t),headers:{"Content-Type":`application/json; charset=utf-8`}});if(n.ok)return await n.json();console.error(Error(`Failed to log error`))}catch{}}function l(){return crypto.randomUUID?.()}let u=Date.now(),d=l(),f=``,p=``;if(`document`in window){let e=()=>a(`AfSessionInit`,{"appframe-core":window.af?.common?.version,"appframe-data":window.af?.data?.version,"app-version":window.af?.article?.version});document.addEventListener(`DOMContentLoaded`,()=>{f=localStorage.getItem(`_afDeviceId`),p=sessionStorage.getItem(`_afSessionId`),f||(f=l(),localStorage.setItem(`_afDeviceId`,f)),p||(p=d,sessionStorage.setItem(`_afSessionId`,p)),e()}),document.addEventListener(`visibilitychange`,function(){document.visibilityState===`hidden`?navigator.sendBeacon(`/api/logging/log-activity`,JSON.stringify({article:i,action:`AfSessionEnd`,parameters:{_session:m()}})):e()})}function m(){return{browserSessionId:p,sessionStart:u,sessionLength:Date.now()-u,sessionId:d,deviceId:f}}window.window?.addEventListener(`error`,e=>{typeof e==`object`&&`error`in e?c(e.error):typeof e==`object`&&`message`in e&&c(e)});function ee(e){return[af?.article?.id||``,`common`,e].join(`.`)}var te=new class{isPersisted=()=>!0;getLocalStorageKey(e,t){return t?[`common`,e].join(`.`):ee(e)}get(e,t,n){let r=this.getLocalStorageKey(e,n),i=localStorage.getItem(r);return i===null?t:JSON.parse(i)}set(e,t,n){localStorage.setItem(this.getLocalStorageKey(e,n),JSON.stringify(t))}remove(e,t){let n=this.getLocalStorageKey(e,t);return localStorage.getItem(n)!==null&&(localStorage.removeItem(n),!0)}clear(){let e=ee(``);for(let t in localStorage)t.slice(0,e.length)===e&&localStorage.removeItem(t)}};function ne(e){return e?re(e).substring(0,10):null}function h(e,t=2){return String(e).padStart(t,`0`)}function re(e){return e?`${e.getFullYear()}-${h(e.getMonth()+1)}-${h(e.getDate())}T${h(e.getHours())}:${h(e.getMinutes())}:${h(e.getSeconds())}.${h(e.getMilliseconds(),3)}`:null}function ie(e){return e?e.toISOString().substring(0,16):``}function ae(e,t){return new Promise((n,r)=>{try{let r=URL.createObjectURL(e),i=document.body,a=document.createElement(`a`);a.setAttribute(`download`,t),a.href=r,i.append(a),a.click(),i.removeChild(a),setTimeout(()=>{URL.revokeObjectURL(r),n()},250)}catch(e){r(e)}})}function g(e,t){if(e)return;let n=typeof t==`function`?t():t;throw Error(n??`Invariant failed`)}async function oe(e,{fileName:t,signal:n,onProgress:r}){let i=0;r?.({status:`requested`});try{let n=await fetch(e);if(!n.ok||!n.body){if(n.headers.get(`content-type`)?.includes(`application/json`)){let e=await n.json();g(!e.error,e.error)}throw Error(`${n.status} ${n.statusText}`)}try{let e=n.body.getReader(),t=new ReadableStream({start:t=>{function n(){return e.read().then(e=>{if(e.done){t.close();return}return i+=e.value.length,r?.({bytesReceived:i,status:`downloading`}),t.enqueue(e.value),n()})}return n()}});n=new Response(t)}catch{}let a=await n.blob();r?.({bytesReceived:i,status:`downloaded`}),await ae(a,t),r?.({bytesReceived:i,status:`completed`})}catch(e){n?.aborted?r?.({status:`cancelled`}):r?.({error:e.message,status:`error`})}}let se=/^function(?:\s+([a-zA-Z$_][a-zA-Z0-9$_]*))?\s*\(((?:(?:\s*[a-zA-Z$_][a-zA-Z0-9$_]*)(?:\s*,\s*[a-zA-Z$_][a-zA-Z0-9$_]*)*)?)\s*\)\s*\{((?:.|\n|\r)*)\}$/,ce=/^(?:\(([^)]*)\)|([a-zA-Z$_][a-zA-Z0-9$_]*))\s*=>\s*\{([\s\S]*)\}$/,le=/^(?:\(([^)]*)\)|([a-zA-Z$_][a-zA-Z0-9$_]*))\s*=>\s*([\s\S]+)$/,_=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean);function v(e){let t=e.toString(),n=t.match(ce);if(n){let t=_(n[1]??n[2]??``);return{name:e.name,args:t,body:n[3]}}let r=t.match(le);if(r){let t=_(r[1]??r[2]??``);return{name:e.name,args:t,body:r[3]}}let i=t.match(se);return g(i,`Unable to parse function!`),{name:e.name??i[1],args:_(i[2]),body:i[3]}}function ue(){}ue.prototype=Object.create(null);function de(e,t){if(typeof e==`object`){if(typeof t==`string`)return de(e,t.split(`.`));if(Array.isArray(t)){let n=e;for(let e=0;e<t.length;e++)n=n[t[e]]=n[t[e]]||new ue;return n}}}function fe(e,t,n={}){if(Array.isArray(t))for(let n of t){let{name:t}=v(n);g(t,`Unable to detect name of function! Name it, or only supply one function and include name in first parameter.`),fe(e,n)}else{let r,i;if(typeof t==`function`&&(r=v(t).name),typeof e==`string`){let t=e.split(`.`);r||(r=t[t.length-1],t=t.slice(0,t.length-1)),i=de(window,t)}else r&&(typeof e==`object`||typeof e==`function`)?i=e:g(!1,`Invalid typeof parameter 'name', or unable to parse pValue!`);Object.hasOwn(i,r)&&n?.overwrite!==!0?console.warn(`${[e,r].join(`.`)} is already defined!`):i[r]=t}}async function pe(e,t){try{let n=await fetch(`/api/user/localize/new/${encodeURIComponent(t)}`,{body:JSON.stringify({text:e}),headers:{Accept:`application/json; */*`,"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`});if(n.ok)return await n.json()}catch{}return e}function me(e){let t=window.af;if(!t)return;if(e){let n=t.i18n?.[e];if(n)return{dictionary:n,harvestAs:e}}let n=t.article;if(n?.i18n)return{dictionary:n.i18n,harvestAs:n.id}}function y(e,t){if(typeof e==`string`&&e.trim().length===0)return e;if(e===void 0||e===``||e===null)return;let{project:n,wait:r}=typeof t==`object`?t:{wait:t},i=me(n);if(i===void 0)return e;let{dictionary:a,harvestAs:o}=i;if(!Object.hasOwn(a,e)){a[e]=e;let t=pe(e,o).then(t=>(a[e]=t,t));if(r)return t}return a[e]}function he(e){function t(t,n){return y(t,{project:e,wait:n})}function n(e,...n){let r=t(e.map((t,n)=>n===e.length-1?t:`${t}$${n}`).join(``));return n.forEach((e,t)=>{r=r.replace(`$${t}`,String(e))}),r}return{project:e,getLocalizedString:t,localize:n}}let ge=[`isnull`,`isnotnull`,`istrue`,`isfalse`,`isblank`,`isnotblank`],_e=[`between`,`notbetween`,`datebetween`,`datenotbetween`],ve=[`inlist`,`notinlist`];function b(e){return ge.includes(e)?`none`:_e.includes(e)?`pair`:ve.includes(e)?`list`:`single`}let ye={equals:`Equal to`,notequals:`Not equal to`,greaterthan:`Greater than`,greaterthanorequal:`Greater than or equal to`,lessthan:`Less than`,lessthanorequal:`Less than or equal to`,beginswith:`Begins with`,notbeginswith:`Does not begin with`,endswith:`Ends with`,notendswith:`Does not end with`,contains:`Contains`,notcontains:`Does not contain`,like:`Like`,notlike:`Not like`,isnull:`Is null`,isnotnull:`Is not null`,isblank:`Is empty`,isnotblank:`Is not empty`,istrue:`Is true`,isfalse:`Is false`,inlist:`In list`,notinlist:`Not in list`,between:`Between`,notbetween:`Not between`,dateequals:`Equal to`,notdatequals:`Not equal to`,dategreaterthan:`After`,dategreaterthanorequal:`On or after`,datelessthan:`Before`,datelessthanorequal:`Up to`,datebetween:`Between`,datenotbetween:`Not between`},be={greaterthan:`After`,greaterthanorequal:`On or after`,lessthan:`Before`,lessthanorequal:`Up to`};function xe(e,t){return y((t===`date`||t===`datetime`?be[e]:void 0)??ye[e]??e)}let x=[`equals`,`notequals`],S=[`inlist`,`notinlist`],C=[`between`,`notbetween`],w=[`greaterthan`,`greaterthanorequal`,`lessthan`,`lessthanorequal`],Se=[`contains`,`notcontains`,`beginswith`,`notbeginswith`,`endswith`,`notendswith`,`isblank`,`isnotblank`],Ce={date:[...x,...S,...C,...w],datetime:[...x,...S,...C,...w],number:[...x,...S,...C,...w],boolean:[`istrue`,`isfalse`],string:[...x,...Se,...S,...C,...w],uniqueidentifier:[...x,...Se,...S,...C,...w]},we={date:`equals`,datetime:`equals`,number:`equals`,boolean:`istrue`,string:`contains`,uniqueidentifier:`beginswith`};function Te(e){let t=[...Ce[e.type]??Ce.string];return e.nullable&&e.type!==`boolean`&&t.push(`isnull`,`isnotnull`),t}function Ee(e){return we[e.type]??`equals`}function T(e,t){if(b(t)===`none`)return`null`;switch(e.type){case`number`:return`number`;case`boolean`:return`boolean`;case`date`:case`datetime`:return`datetime`;case`uniqueidentifier`:return`uniqueidentifier`;default:return`string`}}let De=[`Yesterday`,`Today`,`Tomorrow`,`ThisWeek`,`ThisMonth`,`ThisYear`,`LastWeek`,`LastMonth`,`LastYear`,`NextWeek`,`NextMonth`,`NextYear`],Oe={CurrentUser:`Current user`,Yesterday:`Yesterday`,Today:`Today`,Tomorrow:`Tomorrow`,ThisWeek:`This week`,ThisMonth:`This month`,ThisYear:`This year`,LastWeek:`Last week`,LastMonth:`Last month`,LastYear:`Last year`,NextWeek:`Next week`,NextMonth:`Next month`,NextYear:`Next year`,UserYesterday:`Yesterday`,UserToday:`Today`,UserTomorrow:`Tomorrow`,UserThisWeek:`This week`,UserThisMonth:`This month`,UserThisYear:`This year`,UserLastWeek:`Last week`,UserLastMonth:`Last month`,UserLastYear:`Last year`,UserNextWeek:`Next week`,UserNextMonth:`Next month`,UserNextYear:`Next year`};function ke(e){return y(Oe[e]??e)}function Ae(e){return e.type===`date`||e.type===`datetime`?[...De]:e.type===`string`?[`CurrentUser`]:[]}let je={not:`notequals`,tweens:`notbetween`,notdate:`notdatequals`,notdateequals:`notdatequals`};function E(e){let t=e.toLowerCase().replace(/[\s,]/g,``);return je[t]??t}function D(){return O(`and`)}function O(e=`and`){return{type:`group`,mode:e,items:[]}}function k(e){return e.type===`group`}function A(e){return e.type===`expression`}function Me(e){return e?A(e)?{type:`group`,mode:`and`,items:[e]}:e:D()}function Ne(e){if(e.mode!==`or`||e.items.length!==1)return e;let[t]=e.items;return k(t)&&t.mode===`and`?t:e}function Pe(e){return j(e)===0}function j(e){return e?A(e)?1:e.items.reduce((e,t)=>e+j(t),0):0}function Fe(e){if(!e)return null;if(A(e))return M(e)?{type:`group`,mode:`and`,items:[e]}:null;let t=e.items.map(e=>k(e)?Fe(e):M(e)?e:null).filter(e=>e!==null);return t.length===0?null:{...e,items:t}}function M(e){if(k(e))return e.items.some(M);if(!e.column||!e.operator)return!1;let t=b(E(e.operator));return t===`none`?!0:e.value===null||e.value===void 0||e.value===``?!1:t===`pair`?Array.isArray(e.value)&&e.value.length===2&&e.value.every(e=>e!==``&&e!=null):t!==`list`||Array.isArray(e.value)&&e.value.length>0}function Ie(e,t){let n=t??Ee(e);return{type:`expression`,column:e.name,operator:n,value:Le(n),valueType:T(e,n)}}function Le(e){switch(b(e)){case`none`:return null;case`pair`:return[``,``];case`list`:return[];default:return``}}function Re(e,t,n){let r=b(E(e.operator)),i=b(t),a=e.value;i!==r&&(a=Le(t));let o=e.valueType===`special`&&i===r?`special`:T(n,t);return{...e,operator:t,value:a,valueType:o}}function ze(e,t){let n=e;for(let e of t){if(!n||!k(n))return null;n=n.items[e]}return n??null}function N(e,t,n){if(t.length===0)return n(e)??e;if(!k(e))return e;let[r,...i]=t,a=e.items[r];if(!a)return e;let o=[...e.items];if(i.length===0){let e=n(a);e===null?o.splice(r,1):o[r]=e}else o[r]=N(a,i,n);return{...e,items:o}}function Be(e,t,n){return N(e,t,e=>k(e)?{...e,items:[...e.items,n]}:e)}function Ve(e,t){return t.length===0?D():N(e,t,()=>null)}function He(e,t,n){return N(e,t,e=>k(e)?{...e,mode:n}:e)}function Ue(e,t=[]){let n=ze(e,t);return Be(e,t,O(n&&k(n)&&n.mode===`and`?`or`:`and`))}async function We(e,t){let n=await fetch(`/api/filter/convert`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:t});if(!n.ok)throw Error(`Failed to convert filter: ${n.status} ${n.statusText}`);let r=await n.json();return{...r,filterObject:r.filterObject?Me(r.filterObject):null}}function Ge(e,t={}){return e?Ke(e,new Map((t.fields??[]).map(e=>[e.name.toLowerCase(),e])),0):``}function Ke(e,t,n){if(A(e))return qe(e,t);let r=e.items.map(e=>Ke(e,t,n+1)).filter(e=>e!==``);if(r.length===0)return``;if(r.length===1)return r[0];let i=e.mode===`or`?` OR `:` AND `,a=r.join(i);return n===0?a:`(${a})`}function qe(e,t){if(!e.column||!e.operator)return``;let n=t.get(e.column.toLowerCase()),r=n?.caption??e.column,i=E(e.operator),a=xe(i,n?.type),o=b(i);return o===`none`?`[${r}] ${a}`:`[${r}] ${a} ${Je(e,o)}`}function Je(e,t){let{value:n,valueType:r}=e;if(r===`special`&&typeof n==`string`)return ke(n);if(Array.isArray(n)){let e=n.map(e=>P(e,r));return t===`pair`?e.join(` - `):`(${e.join(`, `)})`}return P(n,r)}function P(e,t){return e==null?``:e instanceof Date?e.toISOString().slice(0,10):typeof e==`number`||typeof e==`boolean`||t===`number`||t===`boolean`?String(e):`'${String(e)}'`}let Ye=[`string`,`number`,`boolean`,`date`,`datetime`,`uniqueidentifier`];function F(e){let t=e?.trim().toLowerCase();return Ye.find(e=>e===t)??`string`}function I(e){return e===!0||e===1}function Xe(e){return{name:e.FieldName??``,type:F(e.DataType),nullable:I(e.Nullable),excludeFromFilter:I(e.ExcludeFromFilter),valueListRecordSource:e.ValueListRecordSource||void 0}}function Ze(e){return e.map(Xe).filter(e=>e.name!==``&&!e.excludeFromFilter).sort((e,t)=>e.name.localeCompare(t.name))}function Qe(e){return!e||A(e)||e.mode!==`or`?!1:e.items.every(e=>k(e)&&e.mode===`and`&&e.items.every(A))}function $e(e){if(!e)return{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:[]}]};if(A(e))return{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:[e]}]};if(e.mode===`or`){let t=e.items.map(e=>{let t=[];return L(e,t),{type:`group`,mode:`and`,items:t}});return{type:`group`,mode:`or`,items:t.length>0?t:[{type:`group`,mode:`and`,items:[]}]}}let t=[];return L(e,t),{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:t}]}}function L(e,t){if(A(e)){t.push(e);return}for(let n of e.items)L(n,t)}function et(e){return{filterId:e.FilterID??-1,primKey:e.PrimKey??``,name:e.FilterName??``,criteria:e.FilterCriteria??``,dbObjectId:e.DBObjectID??``,accessLevel:tt(e.AccessLevel),createdByUser:R(e.CreatedByUser),createdBy:e.CreatedBy??``,domain:e.Domain??null,crossDomain:R(e.CrossDomain),isPersonallyShared:R(e.IsPersonallyShared),hideCriteria:R(e.HideFilterCriteria),headerText:e.OptionalHeaderText||null,comment:e.OptionalComment||null,parameters:e.Parameters||null,reportTitle:e.ReportTitle||null,created:nt(e.Created),updated:nt(e.Updated)}}function tt(e){return e===`Manager`||e===`Editor`?e:`Reader`}function R(e){return typeof e==`string`?e.toLowerCase()===`true`:!!e}function nt(e){if(!e)return null;if(e instanceof Date)return e;let t=new Date(e);return Number.isNaN(t.getTime())?null:t}function rt(e){return e.filter(e=>(e.FilterID??-1)!==-1).map(et).sort((e,t)=>e.name.localeCompare(t.name))}function it(e){let t=[],n=[];for(let r of e)r.createdByUser?t.push(r):n.push(r);return{mine:t,shared:n}}function at(e,t){if(t!=null)return e.find(e=>e.filterId===t)}function ot(e){return e.accessLevel===`Editor`||e.accessLevel===`Manager`}function st(e){return e.accessLevel===`Manager`}function z(e){return e.createdByUser}let ct=z,lt=z,ut={xs:64,sm:128,md:256,lg:512,xl:void 0};function dt(e,t,n,r=`xs`){if(e&&typeof e==`object`)return dt(e.primKey,e.login,e.hash,e.size);if(!e||!n)return``;let i=ut[r];return`/api/data/blob/EmployeesLookup/${e}/Image/${encodeURIComponent(t??``)}${t?`.`:``}${encodeURIComponent(n)}.jpg${i?`?width=${i}`:``}`}function ft(e,...t){g(Array.isArray(e)&&e.length===t.length+1,`Method 'localize' must be used as a tag function`);let n=y(e.map((t,n)=>n===e.length-1?t:`${t}$${n}`).join(``));return t.forEach((e,t)=>{n=n.replace(`$${t}`,e)}),n}let pt={amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`};function B(e){return e.replace(/&(#x?[0-9a-f]+|[a-z]+);/gi,(e,t)=>t.startsWith(`#x`)||t.startsWith(`#X`)?String.fromCodePoint(Number.parseInt(t.slice(2),16)):t.startsWith(`#`)?String.fromCodePoint(Number.parseInt(t.slice(1),10)):pt[t.toLowerCase()]??e)}function V(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function H(e,t){let n=RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`).exec(e);if(!n)return null;let r=B(n[1]).trim();return r===``?null:r}function mt(e,t){return[...e.matchAll(RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`,`g`))].map(e=>B(e[1]).trim())}let ht={Byte:`number`,Decimal:`number`,Double:`number`,Int16:`number`,Int32:`number`,Int64:`number`,Single:`number`,Boolean:`boolean`,DateTime:`date`};function gt(e){let t=/<SelectColumns>([\s\S]*?)<\/SelectColumns>/.exec(e)?.[1]??``,n=[];for(let e of t.matchAll(/<afSelectColumn>([\s\S]*?)<\/afSelectColumn>/g)){let t=H(e[1],`Name`);t&&n.push({name:t,type:ht[H(e[1],`DataType`)??``]??`string`})}return n}function U(e){if(!e||!e.includes(`<afRecordSource`))return null;let t=H(e,`ViewName`);if(!t)return null;let n=H(e,`MaxRecords`);return{viewName:t,columns:gt(e),whereClause:H(e,`WhereClause`),filterString:H(e,`FilterString`),maxRecords:n===null||n===`0`?null:Number(n)}}let _t=[`String`,`Integer`,`Double`,`Date`,`Boolean`],vt=/^[a-z]stp_/i;function W(e){return typeof e==`string`&&vt.test(e.trim())}function yt(e){return e?e.split(/\r\n|\r|\n/).map(e=>e.trim()).filter(e=>e!==``):[]}function bt(e){return _t.find(t=>t.toLowerCase()===e?.trim().toLowerCase())??`String`}function xt(e,t,n){if(t)return`lookup`;if(n)return`select`;switch(e){case`Integer`:case`Double`:return`number`;case`Date`:return`date`;case`Boolean`:return`boolean`;default:return`text`}}function St(e){let t=e.Name??``,n=bt(e.DataType),r=yt(e.Items),i=U(e.RecordSource),a=e.ValueMember??null;i&&!a&&(a=i.columns[0]?.name??null);let o=i?.columns.find(e=>e.name!==a)?.name??null,s=!!(i&&a);return{name:t,label:e.Label?.trim()||t,description:e.Description?.trim()||null,type:n,editor:xt(n,s,r.length>0),defaultValue:e.DefaultValue??null,items:r,recordSource:s?i:null,valueMember:s?a:null,displayMember:s?o:null,sortOrder:e.SortOrder??0,lookupWidth:e.LookupWidth??null,lookupHeight:e.LookupHeight??null}}function Ct(e){return e.filter(e=>e.Name).map(St).sort((e,t)=>e.sortOrder-t.sortOrder||e.label.localeCompare(t.label))}function G(e,t){if(t==null||t===``)return e.type!==`Boolean`&&null;switch(e.type){case`Boolean`:return typeof t==`boolean`?t:/^(true|1|ja|yes)$/i.test(String(t));case`Integer`:{let e=Number.parseInt(String(t),10);return Number.isNaN(e)?null:e}case`Double`:{let e=Number(String(t).replace(`,`,`.`));return Number.isNaN(e)?null:e}default:return String(t)}}function wt(e){let t={};for(let n of e)t[n.name]=W(n.defaultValue)?G(n,null):G(n,n.defaultValue);return t}function Tt(e,t){return t==null?``:typeof t==`boolean`?t?`True`:`False`:String(t)}function Et(e,t){return`<Parameters Version="1">\n${e.map(e=>{let n=Tt(e,t[e.name]??null);return` <Parameter Name="${V(e.name)}" Type="${e.type}">${V(n)}</Parameter>`}).join(`
|
|
2
|
+
`)}\n</Parameters>`}function Dt(e){if(!e)return{};let t={};for(let n of e.matchAll(/<Parameter\s+([^>]*?)\/?>(?:([\s\S]*?)<\/Parameter>)?/g)){let e=/Name\s*=\s*"([^"]*)"/.exec(n[1])?.[1];e&&(t[e]=H(n[0],`Parameter`)??``)}return t}function Ot(e,t){let n=Dt(t),r=wt(e);for(let t of e)t.name in n&&(r[t.name]=G(t,n[t.name]));return r}async function kt(e,t,n){if(!t.defaultValue||!W(t.defaultValue))return null;let r=await fetch(`/api/reporting/filters/${encodeURIComponent(e)}/GetParameterDefaultValue`,{body:JSON.stringify({parameterName:t.name}),credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`,signal:n});if(!r.ok)throw Error(`${r.status} ${r.statusText}`);return jt(await r.json())}async function At(e,t,n,r){let i=t.filter(e=>W(e.defaultValue??``));if(i.length===0)return n;let a=await Promise.all(i.map(async t=>{try{return[t.name,await kt(e,t,r)]}catch{return[t.name,null]}})),o={...n};for(let[e,t]of a)t!==null&&(o[e]=t);return o}function jt(e){let t=(Array.isArray(e)?e:Object.values(e).find(e=>Array.isArray(e)))?.[0];return t==null?null:Array.isArray(t)?t[0]??null:typeof t==`object`?Object.values(t)[0]??null:t}let Mt={CSV:`csv`,HTML:`html`,IMAGE:`xbm`,MHT:`mht`,PDF:`pdf`,RTF:`rtf`,TEXT:`txt`,XLS:`xls`,XLSX:`xlsx`},Nt={CSV:`text/csv`,HTML:`text/html`,IMAGE:`image/x-xbitmap`,MHT:`message/rfc822`,PDF:`application/pdf`,RTF:`text/enriched`,TEXT:`text/plain`,XLS:`application/vnd.ms-excel`,XLSX:`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`};function Pt(e){return Mt[e]}function K(e){return Nt[e]}let Ft=/[\\/:*?"<>|.#&+%\u0000-\u001f]/g;function q(e){let t=(e.fileName??e.reportId).trim().replace(Ft,`-`).replace(/-{2,}/g,`-`).replace(/^-|-$/g,``).trim();return`${t===``?e.reportId:t}.${Pt(e.format)}`}function It(e){let t=window.location?.href;return t?new URL(e,t).toString():e}function J(e){let{domain:t,filter:n,headerText:r,hideFilterString:i,parameters:a,reportId:o,signal:s,timezone:c}=e,l=q(e),u=`/api/report/${encodeURIComponent(o)}/${encodeURIComponent(l)}`,d=new URLSearchParams,f=zt(a),p=f.length>0||!!r||i===!0;if(t&&d.set(`Domain`,t),d.set(`timezone`,String(c??-(/* @__PURE__ */ new Date()).getTimezoneOffset()/60)),!p)return n&&d.set(`Filter`,n),new Request(It(`${u}?${d}`),{credentials:`same-origin`,signal:s});let m={filter:n??``,parameters:f};return r&&(m.optionalheader=r),i===!0&&(m.showfiltercriteria=`true`),new Request(It(`${u}?${d}`),{body:JSON.stringify(m),credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`,signal:s})}async function Y(e){let t=await fetch(J(e));if((t.headers.get(`content-type`)??``).includes(`application/json`)){let e=await t.json();throw Error(e.error??`Failed to render report`)}if(!t.ok)throw Error(`${t.status} ${t.statusText}`);return t.blob()}function Lt(e){return oe(J(e),{fileName:q(e),onProgress:e.onProgress,signal:e.signal})}async function X(e){let t=await Y(e),n=URL.createObjectURL(t.type?t:new Blob([t],{type:K(e.format)})),r=window.open(n,`_blank`);if(!r)throw URL.revokeObjectURL(n),Error(`The report could not be opened. Allow pop-ups for this site and try again.`);r.opener=null,window.setTimeout(()=>URL.revokeObjectURL(n),6e4)}async function Rt(e){let t=window.document;if(!t?.body)return X(e);let n=await Y(e),r=URL.createObjectURL(n.type?n:new Blob([n],{type:K(e.format)})),i=t.createElement(`iframe`);i.setAttribute(`aria-hidden`,`true`),i.style.cssText=`position:fixed;inset-block-start:0;inset-inline-start:0;inline-size:1px;block-size:1px;border:0;visibility:hidden`;let a=()=>{i.remove(),URL.revokeObjectURL(r)};try{await new Promise((e,n)=>{i.addEventListener(`load`,()=>e(),{once:!0}),i.addEventListener(`error`,()=>n(/* @__PURE__ */ Error(`The report could not be loaded for printing`)),{once:!0}),i.src=r,t.body.append(i)}),i.contentWindow?.focus(),i.contentWindow?.print()}catch{return a(),X(e)}window.setTimeout(a,6e4)}function zt(e){return e?Object.entries(e).filter(([,e])=>e!=null&&e!==``).map(([e,t])=>({name:e,value:typeof t==`boolean`?String(t):t})):[]}function Z(e){return e===!0||e===1}function Bt(e){let t=[];return Z(e.FormatPDF)&&t.push(`PDF`),Z(e.FormatCSV)&&t.push(`XLSX`,`XLS`,`CSV`),Z(e.FormatHTML)&&t.push(`HTML`),Z(e.FormatRTF)&&t.push(`RTF`),Z(e.FormatMHT)&&t.push(`MHT`),Z(e.FormatTEXT)&&t.push(`TEXT`),Z(e.FormatIMAGE)&&t.push(`IMAGE`),t}function Vt(e){let t=U(e.RecordSource);return{reportId:e.ReportID??``,shortId:e.ShortID??null,title:e.Title?.trim()||null,description:e.Description?.trim()||null,viewName:t?.viewName??null,initialFilter:t?.filterString??null,hasTitle:Z(e.HasTitle),hasHeader:Z(e.HasHeader),formats:Bt(e),timeout:e.Timeout??null}}function Ht(){if(document.querySelector(`#AlertDialogTemplate`))return;let e=document.createElement(`template`);e.id=`AlertDialogTemplate`,e.innerHTML=`
|
|
3
3
|
<dialog class="alert-dialog">
|
|
4
4
|
<form method="dialog">
|
|
5
5
|
<article></article>
|
|
@@ -8,5 +8,5 @@ this.af=this.af||{},this.af.common=(function(e){Object.defineProperty(e,Symbol.t
|
|
|
8
8
|
</footer>
|
|
9
9
|
</form>
|
|
10
10
|
</dialog>
|
|
11
|
-
`,document.body.append(e)}window.document&&(document.body?
|
|
11
|
+
`,document.body.append(e)}window.document&&(document.body?Ht():document.addEventListener(`DOMContentLoaded`,Ht,{once:!0}));function Ut(e,t=`No`){return new Promise(n=>{let r=new AbortController;e.addEventListener(`close`,()=>{n(e.returnValue),r.abort()},{signal:r.signal}),e.addEventListener(`cancel`,()=>{n(t),r.abort()},{signal:r.signal})})}let Q=/* @__PURE__ */ new Map;async function $({buttons:e,content:t,className:n,id:r,title:i}){if(r&&Q.has(r))return await Q.get(r);let a=document.querySelector(`#AlertDialogTemplate`);if(!a)throw Error(`No alert dialog template found`);let o=a.content.firstElementChild?.cloneNode(!0),s=o?.querySelector(`article`),c=o?.querySelector(`footer menu`);if(!o||!s||!c)throw Error(`Invalid alert dialog template`);if(n)for(let e of n.split(/\s+/))o?.classList.add(e);if(i){let e=document.createElement(`header`);e.append(i),s.parentNode?.insertBefore(e,s)}s.appendChild(typeof t==`string`?document.createTextNode(t):t);for(let{label:t,value:n,primary:r}of e){let e=document.createElement(`li`),i=document.createElement(`button`);i.value=n,r&&i.classList.add(`primary`),i.textContent=t,e.appendChild(i),c.appendChild(i)}document.body.appendChild(o),o.showModal();let l=Ut(o).then(e=>(r&&Q.has(r)&&Q.delete(r),o&&document.body.removeChild(o),e));return r&&Q.set(r,l),await l}let Wt=/* @__PURE__ */ function(e){return e[e.YesNo=0]=`YesNo`,e[e.OkCancel=1]=`OkCancel`,e}({});async function Gt(e,t={}){let{buttons:n=0,title:r}=t;return await $({content:e,buttons:n===1?[{label:y(`OK`),value:`yes`,primary:!0},{label:y(`Cancel`),value:`no`}]:[{label:y(`Yes`),value:`yes`,primary:!0},{label:y(`No`),value:`no`}],className:`alert-dialog-confirm`,title:r})===`yes`}async function Kt(e,t={}){await $({content:e,className:`alert-dialog-alert`,buttons:[{label:y(`OK`),value:`ok`,primary:!0}],...t})}function qt(e){return`${e??window.af?.article?.id??window.window?.location.pathname.substring(1).split(`/`)[0]}.${window.af?.userSession.login??`anonymous`}`}function Jt(e,t){if(!window.af?.userSession)return null;let n=qt(t),r=JSON.parse(localStorage.getItem(n)||`{}`);return e?r[e]||null:r}function Yt(e,t,n){if(!window.af?.userSession)return;let r=qt(n),i=JSON.parse(localStorage.getItem(r)||`{}`);t===void 0?i=e:i[e]=t,localStorage.setItem(r,JSON.stringify(i))}return e.ConfirmButtons=Wt,e.NO_FILTER_ID=-1,e.RELATIVE_DATE_VALUES=De,e.SessionHandler=n,e.UserSession=r,e.addGroupAtPath=Ue,e.alert=Kt,e.canDeleteSavedFilter=ct,e.canEditSavedFilter=ot,e.canRenameSavedFilter=z,e.canSetCrossDomain=lt,e.canShareSavedFilter=st,e.changeOperator=Re,e.coerceParameterValue=G,e.coerceToStandardLayout=$e,e.confirm=Gt,e.convertFilter=We,e.countExpressions=j,e.createEmptyFilter=D,e.createEmptyGroup=O,e.createExpression=Ie,e.createLocalizer=he,e.decodeXml=B,e.describeFilter=Ge,e.downloadBlob=ae,e.downloadReport=Lt,e.downloadRequest=oe,e.encodeXml=V,e.expose=fe,e.fetchParameterDefault=kt,e.findSavedFilter=at,e.getDefaultOperator=Ee,e.getDefaultParameterValues=wt,e.getDynamicValueLabel=ke,e.getDynamicValuesForField=Ae,e.getLocalizedString=y,e.getNodeAtPath=ze,e.getOperatorArity=b,e.getOperatorLabel=xe,e.getOperatorsForField=Te,e.getReportExtension=Pt,e.getReportFileName=q,e.getReportFormats=Bt,e.getReportMediaType=K,e.getReportRequest=J,e.getSessionData=m,e.getSettings=Jt,e.getUserImage=dt,e.getValueType=T,e.insertNodeAtPath=Be,e.invariant=g,e.isCompleteExpression=M,e.isEmptyFilter=Pe,e.isExpression=A,e.isGroup=k,e.isProcedureDefault=W,e.isStandardLayout=Qe,e.localStorage=te,e.localize=ft,e.logActivity=a,e.logError=c,e.mitt=t,e.normalizeOperator=E,e.openAlertDialog=$,e.openReport=X,e.parseParameterItems=yt,e.parseParameters=Dt,e.parseRecordSource=U,e.partitionSavedFilters=it,e.printReport=Rt,e.pruneFilter=Fe,e.readElement=H,e.readElements=mt,e.removeNodeAtPath=Ve,e.renderReport=Y,e.resolveParameterDefaults=At,e.restoreParameterValues=Ot,e.saveSettings=Yt,e.serializeParameters=Et,e.setGroupMode=He,e.startActivity=o,e.time=s,e.toFieldMetadata=Xe,e.toFieldMetadataList=Ze,e.toFilterFieldType=F,e.toFilterTree=Me,e.toLocalDateTime=ie,e.toLocalISODate=ne,e.toLocalISODateTime=re,e.toReport=Vt,e.toReportParameter=St,e.toReportParameters=Ct,e.toSavedFilter=et,e.toSavedFilters=rt,e.unwrapSingleAndGroup=Ne,e.updateNodeAtPath=N,e.version=`2.15.1`,e.waitForDialog=Ut,e})({});
|
|
12
12
|
//# sourceMappingURL=af.common.legacy.min.js.map
|