@olenbetong/appframe-core 2.11.2 → 2.11.4

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.
@@ -111,12 +111,13 @@ var UserSession = class extends SessionHandler {
111
111
  };
112
112
 
113
113
  // src/log.ts
114
+ var article = window.af?.article?.id ?? window.window?.location.pathname.substring(1).split("/")[0];
114
115
  async function logActivity(activity, parameters = {}, timeElapsed = 0) {
115
116
  try {
116
117
  let response = await fetch("/api/logging/log-activity", {
117
118
  method: "POST",
118
119
  body: JSON.stringify({
119
- article: af.article.id,
120
+ article,
120
121
  timeElapsed,
121
122
  action: activity,
122
123
  parameters: {
@@ -178,9 +179,9 @@ var deviceId = "";
178
179
  var browserSessionId = "";
179
180
  if ("document" in window) {
180
181
  let startSession = () => logActivity("AfSessionInit", {
181
- "appframe-core": af.common.version,
182
- "appframe-data": af.data?.version,
183
- "app-version": af.article.version
182
+ "appframe-core": window.af?.common?.version,
183
+ "appframe-data": window.af?.data?.version,
184
+ "app-version": window.af?.article?.version
184
185
  });
185
186
  document.addEventListener("DOMContentLoaded", () => {
186
187
  deviceId = localStorage.getItem("_afDeviceId");
@@ -200,7 +201,7 @@ if ("document" in window) {
200
201
  navigator.sendBeacon(
201
202
  "/api/logging/log-activity",
202
203
  JSON.stringify({
203
- article: af.article.id,
204
+ article,
204
205
  action: "AfSessionEnd",
205
206
  parameters: {
206
207
  _session: getSessionData()
@@ -509,24 +510,24 @@ function localize(stringParts, ...args) {
509
510
  }
510
511
 
511
512
  // src/settings.ts
512
- function getKey(article) {
513
- const articleKey = article || af.article.id;
514
- return `${articleKey}.${af.userSession.login}`;
513
+ function getKey(article2) {
514
+ const articleKey = article2 ?? window.af?.article?.id ?? window.window?.location.pathname.substring(1).split("/")[0];
515
+ return `${articleKey}.${window.af?.userSession.login ?? "anonymous"}`;
515
516
  }
516
- function getSettings(setting, article) {
517
- if (!af?.userSession)
517
+ function getSettings(setting, article2) {
518
+ if (!window.af?.userSession)
518
519
  return null;
519
- const key = getKey(article);
520
+ const key = getKey(article2);
520
521
  const settings = JSON.parse(localStorage.getItem(key) || "{}");
521
522
  if (setting) {
522
523
  return settings[setting] || null;
523
524
  }
524
525
  return settings;
525
526
  }
526
- function saveSettings(setting, value, article) {
527
- if (!af?.userSession)
527
+ function saveSettings(setting, value, article2) {
528
+ if (!window.af?.userSession)
528
529
  return;
529
- const key = getKey(article);
530
+ const key = getKey(article2);
530
531
  let userSettings = JSON.parse(localStorage.getItem(key) || "{}");
531
532
  if (typeof value !== "undefined") {
532
533
  userSettings[setting] = value;
@@ -649,7 +650,7 @@ async function alert(prompt, options = {}) {
649
650
  }
650
651
 
651
652
  // src/index.ts
652
- var version = "2.11.2";
653
+ var version = "2.11.4";
653
654
  export {
654
655
  ConfirmButtons,
655
656
  SessionHandler,
@@ -137,13 +137,15 @@ var UserSession = class extends SessionHandler {
137
137
  };
138
138
 
139
139
  // src/log.ts
140
+ var _a, _b, _c, _d;
141
+ var article = (_d = (_b = (_a = window.af) == null ? void 0 : _a.article) == null ? void 0 : _b.id) != null ? _d : (_c = window.window) == null ? void 0 : _c.location.pathname.substring(1).split("/")[0];
140
142
  async function logActivity(activity, parameters = {}, timeElapsed = 0) {
141
- var _a2;
143
+ var _a3;
142
144
  try {
143
145
  let response = await fetch("/api/logging/log-activity", {
144
146
  method: "POST",
145
147
  body: JSON.stringify({
146
- article: af.article.id,
148
+ article,
147
149
  timeElapsed,
148
150
  action: activity,
149
151
  parameters: __spreadProps(__spreadValues({}, parameters), {
@@ -153,7 +155,7 @@ async function logActivity(activity, parameters = {}, timeElapsed = 0) {
153
155
  headers: { "Content-Type": "application/json", Accept: "application/json" }
154
156
  });
155
157
  if (!response.ok) {
156
- if ((_a2 = response.headers.get("Content-Type")) == null ? void 0 : _a2.includes("application/json")) {
158
+ if ((_a3 = response.headers.get("Content-Type")) == null ? void 0 : _a3.includes("application/json")) {
157
159
  let data = await response.json();
158
160
  console.error(data.error);
159
161
  } else {
@@ -173,13 +175,13 @@ async function time(callback) {
173
175
  return [returnValue, performance.now() - start];
174
176
  }
175
177
  async function logError(error) {
176
- var _a2;
178
+ var _a3;
177
179
  try {
178
180
  if (!error)
179
181
  return;
180
182
  let data = typeof error === "string" ? { error } : typeof error === "object" ? "message" in error ? {
181
183
  error: error.message,
182
- stack: (_a2 = error.stack) != null ? _a2 : null
184
+ stack: (_a3 = error.stack) != null ? _a3 : null
183
185
  } : { error: error.toString() } : { error: "Unspecified error" };
184
186
  console.error(error);
185
187
  let result = await fetch("/data/Logger/LogError", {
@@ -197,8 +199,8 @@ async function logError(error) {
197
199
  }
198
200
  }
199
201
  function getSessionId() {
200
- var _a2;
201
- return (_a2 = crypto.randomUUID) == null ? void 0 : _a2.call(crypto);
202
+ var _a3;
203
+ return (_a3 = crypto.randomUUID) == null ? void 0 : _a3.call(crypto);
202
204
  }
203
205
  var sessionStart = Date.now();
204
206
  var sessionId = getSessionId();
@@ -206,11 +208,11 @@ var deviceId = "";
206
208
  var browserSessionId = "";
207
209
  if ("document" in window) {
208
210
  let startSession = () => {
209
- var _a2;
211
+ var _a3, _b2, _c2, _d2, _e, _f;
210
212
  return logActivity("AfSessionInit", {
211
- "appframe-core": af.common.version,
212
- "appframe-data": (_a2 = af.data) == null ? void 0 : _a2.version,
213
- "app-version": af.article.version
213
+ "appframe-core": (_b2 = (_a3 = window.af) == null ? void 0 : _a3.common) == null ? void 0 : _b2.version,
214
+ "appframe-data": (_d2 = (_c2 = window.af) == null ? void 0 : _c2.data) == null ? void 0 : _d2.version,
215
+ "app-version": (_f = (_e = window.af) == null ? void 0 : _e.article) == null ? void 0 : _f.version
214
216
  });
215
217
  };
216
218
  document.addEventListener("DOMContentLoaded", () => {
@@ -231,7 +233,7 @@ if ("document" in window) {
231
233
  navigator.sendBeacon(
232
234
  "/api/logging/log-activity",
233
235
  JSON.stringify({
234
- article: af.article.id,
236
+ article,
235
237
  action: "AfSessionEnd",
236
238
  parameters: {
237
239
  _session: getSessionData()
@@ -254,9 +256,9 @@ function getSessionData() {
254
256
  }
255
257
 
256
258
  // src/errorHandler.ts
257
- var _a;
259
+ var _a2;
258
260
  if (true) {
259
- (_a = window.window) == null ? void 0 : _a.addEventListener("error", (event) => {
261
+ (_a2 = window.window) == null ? void 0 : _a2.addEventListener("error", (event) => {
260
262
  if (typeof event === "object" && "error" in event) {
261
263
  logError(event.error);
262
264
  } else if (typeof event === "object" && "message" in event) {
@@ -267,8 +269,8 @@ if (true) {
267
269
 
268
270
  // src/localStorage.ts
269
271
  function getLocalKey(key) {
270
- var _a2;
271
- return [((_a2 = af == null ? void 0 : af.article) == null ? void 0 : _a2.id) || "", "common", key].join(".");
272
+ var _a3;
273
+ return [((_a3 = af == null ? void 0 : af.article) == null ? void 0 : _a3.id) || "", "common", key].join(".");
272
274
  }
273
275
  var LocalStorage = class {
274
276
  constructor() {
@@ -354,13 +356,13 @@ function invariant(condition, message) {
354
356
 
355
357
  // src/downloadRequest.ts
356
358
  async function downloadRequest(request, { fileName, signal, onProgress }) {
357
- var _a2;
359
+ var _a3;
358
360
  let bytesReceived = 0;
359
361
  onProgress == null ? void 0 : onProgress({ status: "requested" });
360
362
  try {
361
363
  let response = await fetch(request);
362
364
  if (!response.ok || !response.body) {
363
- if ((_a2 = response.headers.get("content-type")) == null ? void 0 : _a2.includes("application/json")) {
365
+ if ((_a3 = response.headers.get("content-type")) == null ? void 0 : _a3.includes("application/json")) {
364
366
  let data = await response.json();
365
367
  invariant(!data.error, data.error);
366
368
  }
@@ -404,10 +406,10 @@ async function downloadRequest(request, { fileName, signal, onProgress }) {
404
406
  // src/parseFunc.ts
405
407
  var funcRegex = /^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)*)\}$/;
406
408
  function parseFunc(func) {
407
- var _a2;
409
+ var _a3;
408
410
  var match = func.toString().match(funcRegex);
409
411
  invariant(match, "Unable to parse function!");
410
- return { name: (_a2 = func.name) != null ? _a2 : match[1], args: match[2].split(",").map((a) => a.trim()), body: match[3] };
412
+ return { name: (_a3 = func.name) != null ? _a3 : match[1], args: match[2].split(",").map((a) => a.trim()), body: match[3] };
411
413
  }
412
414
 
413
415
  // src/Namespace.ts
@@ -508,14 +510,14 @@ async function fetchLocalizedString(text) {
508
510
  return text;
509
511
  }
510
512
  function getLocalizedString(string, wait) {
511
- var _a2, _b;
513
+ var _a3, _b2;
512
514
  if (typeof string === "string" && string.trim().length === 0) {
513
515
  return string;
514
516
  }
515
517
  if (string === void 0 || string === "" || string === null) {
516
518
  return;
517
519
  }
518
- if (((_b = (_a2 = window.af) == null ? void 0 : _a2.article) == null ? void 0 : _b.i18n) !== void 0) {
520
+ if (((_b2 = (_a3 = window.af) == null ? void 0 : _a3.article) == null ? void 0 : _b2.i18n) !== void 0) {
519
521
  if (!Object.hasOwn(af.article.i18n, string)) {
520
522
  af.article.i18n[string] = string;
521
523
  let promise = fetchLocalizedString(string).then((text) => {
@@ -547,24 +549,27 @@ function localize(stringParts, ...args) {
547
549
  }
548
550
 
549
551
  // src/settings.ts
550
- function getKey(article) {
551
- const articleKey = article || af.article.id;
552
- return "".concat(articleKey, ".").concat(af.userSession.login);
553
- }
554
- function getSettings(setting, article) {
555
- if (!(af == null ? void 0 : af.userSession))
552
+ function getKey(article2) {
553
+ var _a3, _b2, _c2, _d2, _e, _f;
554
+ const articleKey = (_d2 = article2 != null ? article2 : (_b2 = (_a3 = window.af) == null ? void 0 : _a3.article) == null ? void 0 : _b2.id) != null ? _d2 : (_c2 = window.window) == null ? void 0 : _c2.location.pathname.substring(1).split("/")[0];
555
+ return "".concat(articleKey, ".").concat((_f = (_e = window.af) == null ? void 0 : _e.userSession.login) != null ? _f : "anonymous");
556
+ }
557
+ function getSettings(setting, article2) {
558
+ var _a3;
559
+ if (!((_a3 = window.af) == null ? void 0 : _a3.userSession))
556
560
  return null;
557
- const key = getKey(article);
561
+ const key = getKey(article2);
558
562
  const settings = JSON.parse(localStorage.getItem(key) || "{}");
559
563
  if (setting) {
560
564
  return settings[setting] || null;
561
565
  }
562
566
  return settings;
563
567
  }
564
- function saveSettings(setting, value, article) {
565
- if (!(af == null ? void 0 : af.userSession))
568
+ function saveSettings(setting, value, article2) {
569
+ var _a3;
570
+ if (!((_a3 = window.af) == null ? void 0 : _a3.userSession))
566
571
  return;
567
- const key = getKey(article);
572
+ const key = getKey(article2);
568
573
  let userSettings = JSON.parse(localStorage.getItem(key) || "{}");
569
574
  if (typeof value !== "undefined") {
570
575
  userSettings[setting] = value;
@@ -605,14 +610,14 @@ function waitForDialog(dialog, cancelValue = "No") {
605
610
  }
606
611
  var alertDialogPromiseMap = /* @__PURE__ */ new Map();
607
612
  async function openAlertDialog({ buttons, content, className, id, title }) {
608
- var _a2, _b;
613
+ var _a3, _b2;
609
614
  if (id && alertDialogPromiseMap.has(id)) {
610
615
  return await alertDialogPromiseMap.get(id);
611
616
  }
612
617
  let $template = document.querySelector("#AlertDialogTemplate");
613
618
  if (!$template)
614
619
  throw Error("No alert dialog template found");
615
- let $dialog = (_a2 = $template.content.firstElementChild) == null ? void 0 : _a2.cloneNode(true);
620
+ let $dialog = (_a3 = $template.content.firstElementChild) == null ? void 0 : _a3.cloneNode(true);
616
621
  let $content = $dialog == null ? void 0 : $dialog.querySelector("article");
617
622
  let $menu = $dialog == null ? void 0 : $dialog.querySelector("footer menu");
618
623
  if (!$dialog || !$content || !$menu)
@@ -623,7 +628,7 @@ async function openAlertDialog({ buttons, content, className, id, title }) {
623
628
  if (title) {
624
629
  let $header = document.createElement("header");
625
630
  $header.append(title);
626
- (_b = $content.parentNode) == null ? void 0 : _b.insertBefore($header, $content);
631
+ (_b2 = $content.parentNode) == null ? void 0 : _b2.insertBefore($header, $content);
627
632
  }
628
633
  $content.appendChild(typeof content === "string" ? document.createTextNode(content) : content);
629
634
  for (let { label, value, primary } of buttons) {
@@ -678,7 +683,7 @@ async function alert(prompt, options = {}) {
678
683
  }
679
684
 
680
685
  // src/index.ts
681
- var version = "2.11.2";
686
+ var version = "2.11.4";
682
687
  export {
683
688
  ConfirmButtons,
684
689
  SessionHandler,
@@ -1,2 +1,2 @@
1
- var Q=Object.defineProperty,P=Object.defineProperties;var ee=Object.getOwnPropertyDescriptors;var $=Object.getOwnPropertySymbols;var te=Object.prototype.hasOwnProperty,ne=Object.prototype.propertyIsEnumerable;var A=(e,t,o)=>t in e?Q(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,m=(e,t)=>{for(var o in t||(t={}))te.call(t,o)&&A(e,o,t[o]);if($)for(var o of $(t))ne.call(t,o)&&A(e,o,t[o]);return e},C=(e,t)=>P(e,ee(t));var l=(e,t,o)=>(A(e,typeof t!="symbol"?t+"":t,o),o);function I(e){return{all:e=e||new Map,on:function(t,o){var n=e.get(t);n?n.push(o):e.set(t,[o])},off:function(t,o){var n=e.get(t);n&&(o?n.splice(n.indexOf(o)>>>0,1):e.set(t,[]))},emit:function(t,o){var n=e.get(t);n&&n.slice().map(function(r){r(o)}),(n=e.get("*"))&&n.slice().map(function(r){r(t,o)})}}}var p=class{constructor(){l(this,"eventHandler",I())}authenticated(){this.eventHandler.emit("onAuthenticated")}async expired(t,o){try{let n=new Promise(a=>{let i=()=>{this.eventHandler.off("onAuthenticated",i),t==null||t(),a()};this.eventHandler.on("onAuthenticated",i)}),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 a="/login?ReturnUrl=%2fapi/sessionexpired/remove";o!=="RequireTwoFactor"?await fetch("/logout",{method:"POST"}):a="/login?RequireTwoFactor=1&ReturnUrl=%2fapi/sessionexpired/remove",r.innerHTML='<iframe sandbox="allow-same-origin allow-scripts allow-modals allow-top-navigation-by-user-activation allow-forms" src="'.concat(a,'" style="border:0;width:min(500px,100vw);height:min(700px, 100vh);"></iframe>'),document.body.append(r),r.showModal(),await n,r.remove()}}catch(n){window.location.href="/login?ReturnUrl=".concat(encodeURIComponent(window.location.pathname)).concat(encodeURIComponent(window.location.search))}}attachEvent(t,o){return this.eventHandler.on(t,o)}detachEvent(t,o){return this.eventHandler.off(t,o)}};var L=class extends p{constructor(o){super();l(this,"amDesignator","a.m.");l(this,"dayNames",["sunday","monday","tuesday","wednesday","thursday","friday","saturday"]);l(this,"dayNamesShort",["sun","mon","tue","wed","thu","fri","sat"]);l(this,"decimalSeparator",".");l(this,"domain","OB");l(this,"email");l(this,"formats");l(this,"groupSeparator",null);l(this,"integratedSecurity",!1);l(this,"isDeveloper",!1);l(this,"login","");l(this,"loginType");l(this,"monthNames",["january","february","march","april","may","june","july","august","september","october","november","december",""]);l(this,"monthNamesShort",["jan","feb","mar","apr","may","jun","jul","augt","sep","oct","nov","dec",""]);l(this,"name");l(this,"pmDesignator","p.m.");l(this,"shortDateFormat","dd.MM.yyyy");l(this,"culture","en-GB");l(this,"uiculture","en-GB");this.formats={},Object.assign(this,o)}};async function E(e,t={},o=0){var n;try{let r=await fetch("/api/logging/log-activity",{method:"POST",body:JSON.stringify({article:af.article.id,timeElapsed:o,action:e,parameters:C(m({},t),{_session:T()})}),headers:{"Content-Type":"application/json",Accept:"application/json"}});if(!r.ok)if((n=r.headers.get("Content-Type"))!=null&&n.includes("application/json")){let a=await r.json();console.error(a.error)}else console.error("".concat(r.status," ").concat(r.statusText))}catch(r){}}function oe(e,t={}){let o=performance.now();return(n={})=>E(e,m(m({},t),n),performance.now()-o)}async function re(e){let t=performance.now();return[await e(),performance.now()-t]}async function D(e){var t;try{if(!e)return;let o=typeof e=="string"?{error:e}:typeof e=="object"?"message"in e?{error:e.message,stack:(t=e.stack)!=null?t:null}:{error:e.toString()}:{error:"Unspecified error"};console.error(e);let n=await fetch("/data/Logger/LogError",{method:"POST",body:JSON.stringify(o),headers:{"Content-Type":"application/json; charset=utf-8"}});if(n.ok)return await n.json();console.error(Error("Failed to log error"))}catch(o){}}function _(){var e;return(e=crypto.randomUUID)==null?void 0:e.call(crypto)}var U=Date.now(),H=_(),b="",x="";if("document"in window){let e=()=>{var t;return E("AfSessionInit",{"appframe-core":af.common.version,"appframe-data":(t=af.data)==null?void 0:t.version,"app-version":af.article.version})};document.addEventListener("DOMContentLoaded",()=>{b=localStorage.getItem("_afDeviceId"),x=sessionStorage.getItem("_afSessionId"),b||(b=_(),localStorage.setItem("_afDeviceId",b)),x||(x=H,sessionStorage.setItem("_afSessionId",x)),e()}),document.addEventListener("visibilitychange",function(){document.visibilityState==="hidden"?navigator.sendBeacon("/api/logging/log-activity",JSON.stringify({article:af.article.id,action:"AfSessionEnd",parameters:{_session:T()}})):e()})}function T(){return{browserSessionId:x,sessionStart:U,sessionLength:Date.now()-U,sessionId:H,deviceId:b}}var M;(M=window.window)==null||M.addEventListener("error",e=>{typeof e=="object"&&"error"in e?D(e.error):typeof e=="object"&&"message"in e&&D(e)});function q(e){var t;return[((t=af==null?void 0:af.article)==null?void 0:t.id)||"","common",e].join(".")}var z=class{constructor(){l(this,"isPersisted",()=>!0)}getLocalStorageKey(t,o){return o?["common",t].join("."):q(t)}get(t,o,n){let r=this.getLocalStorageKey(t,n),a=localStorage.getItem(r);return a!==null?JSON.parse(a):o}set(t,o,n){localStorage.setItem(this.getLocalStorageKey(t,n),JSON.stringify(o))}remove(t,o){let n=this.getLocalStorageKey(t,o);return localStorage.getItem(n)!==null?(localStorage.removeItem(n),!0):!1}clear(){let t=q("");for(let o in localStorage)o.slice(0,t.length)===t&&localStorage.removeItem(o)}},ie=new z;function ae(e){return e?k(e).substring(0,10):null}function g(e,t=2){return String(e).padStart(t,"0")}function k(e){return e?"".concat(e.getFullYear(),"-").concat(g(e.getMonth()+1),"-").concat(g(e.getDate()),"T").concat(g(e.getHours()),":").concat(g(e.getMinutes()),":").concat(g(e.getSeconds()),".").concat(g(e.getMilliseconds(),3)):null}function le(e){return e?e.toISOString().substring(0,16):""}function O(e,t){return new Promise(function(o,n){try{let r=URL.createObjectURL(e),a=document.body,i=document.createElement("a");i.setAttribute("download",t),i.href=r,a.append(i),i.click(),a.removeChild(i),setTimeout(function(){URL.revokeObjectURL(r),o()},250)}catch(r){n(r)}})}function c(e,t){if(e)return;let o=typeof t=="function"?t():t;throw new Error(o!=null?o:"Invariant failed")}async function se(e,{fileName:t,signal:o,onProgress:n}){var a;let r=0;n==null||n({status:"requested"});try{let i=await fetch(e);if(!i.ok||!i.body){if((a=i.headers.get("content-type"))!=null&&a.includes("application/json")){let d=await i.json();c(!d.error,d.error)}throw new Error("".concat(i.status," ").concat(i.statusText))}try{let d=i.body.getReader(),v=new ReadableStream({start:function(y){function S(){return d.read().then(function(s){if(s.done){y.close();return}return r+=s.value.length,n==null||n({bytesReceived:r,status:"downloading"}),y.enqueue(s.value),S()})}return S()}});i=new Response(v)}catch(d){}let f=await i.blob();n==null||n({bytesReceived:r,status:"downloaded"}),await O(f,t),n==null||n({bytesReceived:r,status:"completed"})}catch(i){o!=null&&o.aborted?n==null||n({status:"cancelled"}):n==null||n({error:i.message,status:"error"})}}var ce=/^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)*)\}$/;function j(e){var o;var t=e.toString().match(ce);return c(t,"Unable to parse function!"),{name:(o=e.name)!=null?o:t[1],args:t[2].split(",").map(n=>n.trim()),body:t[3]}}function B(){}B.prototype=Object.create(null);var F=B;function N(e,t){if(typeof e=="object"){if(typeof t=="string"){let o=t.split(".");return N(e,o)}else if(Array.isArray(t)){let o=e;for(let n=0;n<t.length;n++)o=o[t[n]]=o[t[n]]||new F;return o}}}function J(e,t,o={}){if(Array.isArray(t))for(let n of t){let{name:r}=j(n);c(r,"Unable to detect name of function! Name it, or only supply one function and include name in first parameter."),J(e,n)}else{let n,r;if(typeof t=="function"&&(n=j(t).name),typeof e=="string"){let a=e.split(".");n||(n=a[a.length-1],a=a.slice(0,a.length-1)),r=N(window,a)}else n&&(typeof e=="object"||typeof e=="function")?r=e:c(!1,"Invalid typeof parameter 'name', or unable to parse pValue!");Object.hasOwn(r,n)&&(o==null?void 0:o.overwrite)!==!0?console.warn([e,n].join(".")+" is already defined!"):r[n]=t}}var ue={xs:64,sm:128,md:256,lg:512,xl:void 0};function K(e,t,o,n="xs"){if(e&&typeof e=="object")return K(e.primKey,e.login,e.hash,e.size);if(!e||!o)return"";let r=ue[n];return"/api/data/blob/EmployeesLookup/".concat(e,"/Image/").concat(encodeURIComponent(t!=null?t:"")).concat(t?".":"").concat(encodeURIComponent(o),".jpg").concat(r?"?width=".concat(r):"")}async function de(e){try{let t=await fetch("/api/user/localize/new/".concat(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(t){}return e}function u(e,t){var o,n;if(typeof e=="string"&&e.trim().length===0)return e;if(!(e===void 0||e===""||e===null))if(((n=(o=window.af)==null?void 0:o.article)==null?void 0:n.i18n)!==void 0){if(!Object.hasOwn(af.article.i18n,e)){af.article.i18n[e]=e;let r=de(e).then(a=>(af.article.i18n[e]=a,a));if(t)return r}return af.article.i18n[e]}else return e}function fe(e,...t){c(Array.isArray(e)&&e.length===t.length+1,"Method 'localize' must be used as a tag function");let o=e.map((r,a)=>a===e.length-1?r:"".concat(r,"$").concat(a)).join(""),n=u(o);return t.forEach((r,a)=>{n=n.replace("$"+a,r)}),n}function V(e){let t=e||af.article.id;return"".concat(t,".").concat(af.userSession.login)}function me(e,t){if(!(af!=null&&af.userSession))return null;let o=V(t),n=JSON.parse(localStorage.getItem(o)||"{}");return e?n[e]||null:n}function pe(e,t,o){if(!(af!=null&&af.userSession))return;let n=V(o),r=JSON.parse(localStorage.getItem(n)||"{}");typeof t<"u"?r[e]=t:r=e,localStorage.setItem(n,JSON.stringify(r))}var ge='\n <dialog class="alert-dialog">\n <form method="dialog">\n <article></article>\n <footer>\n <menu></menu>\n </footer>\n </form>\n </dialog>\n';if(window.document&&!document.querySelector("#AlertDialogTemplate")){let e=document.createElement("template");e.id="AlertDialogTemplate",e.innerHTML=ge,document.body.append(e)}function Z(e,t="No"){return new Promise(o=>{let n=new AbortController;e.addEventListener("close",()=>{o(e.returnValue),n.abort()},{signal:n.signal}),e.addEventListener("cancel",()=>{o(t),n.abort()},{signal:n.signal})})}var w=new Map;async function R({buttons:e,content:t,className:o,id:n,title:r}){var y,S;if(n&&w.has(n))return await w.get(n);let a=document.querySelector("#AlertDialogTemplate");if(!a)throw Error("No alert dialog template found");let i=(y=a.content.firstElementChild)==null?void 0:y.cloneNode(!0),f=i==null?void 0:i.querySelector("article"),d=i==null?void 0:i.querySelector("footer menu");if(!i||!f||!d)throw Error("Invalid alert dialog template");if(o&&o.split(/\s+/).forEach(s=>i==null?void 0:i.classList.add(s)),r){let s=document.createElement("header");s.append(r),(S=f.parentNode)==null||S.insertBefore(s,f)}f.appendChild(typeof t=="string"?document.createTextNode(t):t);for(let{label:s,value:X,primary:G}of e){let W=document.createElement("li"),h=document.createElement("button");h.value=X,G&&h.classList.add("primary"),h.textContent=s,W.appendChild(h),d.appendChild(h)}document.body.appendChild(i),i.showModal();let v=Z(i).then(s=>(n&&w.has(n)&&w.delete(n),i&&document.body.removeChild(i),s));return n&&w.set(n,v),await v}var Y=(o=>(o[o.YesNo=0]="YesNo",o[o.OkCancel=1]="OkCancel",o))(Y||{});async function ye(e,t={}){let{buttons:o=0,title:n}=t,r=o===1?[{label:u("OK"),value:"yes",primary:!0},{label:u("Cancel"),value:"no"}]:[{label:u("Yes"),value:"yes",primary:!0},{label:u("No"),value:"no"}];return await R({content:e,buttons:r,className:"alert-dialog-confirm",title:n})==="yes"}async function Se(e,t={}){await R(m({content:e,className:"alert-dialog-alert",buttons:[{label:u("OK"),value:"ok",primary:!0}]},t))}var at="2.11.2";export{Y as ConfirmButtons,p as SessionHandler,L as UserSession,Se as alert,ye as confirm,O as downloadBlob,se as downloadRequest,J as expose,u as getLocalizedString,T as getSessionData,me as getSettings,K as getUserImage,c as invariant,ie as localStorage,fe as localize,E as logActivity,D as logError,I as mitt,R as openAlertDialog,pe as saveSettings,oe as startActivity,re as time,le as toLocalDateTime,ae as toLocalISODate,k as toLocalISODateTime,at as version,Z as waitForDialog};
1
+ var oe=Object.defineProperty,re=Object.defineProperties;var ie=Object.getOwnPropertyDescriptors;var $=Object.getOwnPropertySymbols;var ae=Object.prototype.hasOwnProperty,le=Object.prototype.propertyIsEnumerable;var A=(e,t,o)=>t in e?oe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,g=(e,t)=>{for(var o in t||(t={}))ae.call(t,o)&&A(e,o,t[o]);if($)for(var o of $(t))le.call(t,o)&&A(e,o,t[o]);return e},C=(e,t)=>re(e,ie(t));var l=(e,t,o)=>(A(e,typeof t!="symbol"?t+"":t,o),o);function I(e){return{all:e=e||new Map,on:function(t,o){var n=e.get(t);n?n.push(o):e.set(t,[o])},off:function(t,o){var n=e.get(t);n&&(o?n.splice(n.indexOf(o)>>>0,1):e.set(t,[]))},emit:function(t,o){var n=e.get(t);n&&n.slice().map(function(r){r(o)}),(n=e.get("*"))&&n.slice().map(function(r){r(t,o)})}}}var m=class{constructor(){l(this,"eventHandler",I())}authenticated(){this.eventHandler.emit("onAuthenticated")}async expired(t,o){try{let n=new Promise(i=>{let a=()=>{this.eventHandler.off("onAuthenticated",a),t==null||t(),i()};this.eventHandler.on("onAuthenticated",a)}),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 i="/login?ReturnUrl=%2fapi/sessionexpired/remove";o!=="RequireTwoFactor"?await fetch("/logout",{method:"POST"}):i="/login?RequireTwoFactor=1&ReturnUrl=%2fapi/sessionexpired/remove",r.innerHTML='<iframe sandbox="allow-same-origin allow-scripts allow-modals allow-top-navigation-by-user-activation allow-forms" src="'.concat(i,'" style="border:0;width:min(500px,100vw);height:min(700px, 100vh);"></iframe>'),document.body.append(r),r.showModal(),await n,r.remove()}}catch(n){window.location.href="/login?ReturnUrl=".concat(encodeURIComponent(window.location.pathname)).concat(encodeURIComponent(window.location.search))}}attachEvent(t,o){return this.eventHandler.on(t,o)}detachEvent(t,o){return this.eventHandler.off(t,o)}};var L=class extends m{constructor(o){super();l(this,"amDesignator","a.m.");l(this,"dayNames",["sunday","monday","tuesday","wednesday","thursday","friday","saturday"]);l(this,"dayNamesShort",["sun","mon","tue","wed","thu","fri","sat"]);l(this,"decimalSeparator",".");l(this,"domain","OB");l(this,"email");l(this,"formats");l(this,"groupSeparator",null);l(this,"integratedSecurity",!1);l(this,"isDeveloper",!1);l(this,"login","");l(this,"loginType");l(this,"monthNames",["january","february","march","april","may","june","july","august","september","october","november","december",""]);l(this,"monthNamesShort",["jan","feb","mar","apr","may","jun","jul","augt","sep","oct","nov","dec",""]);l(this,"name");l(this,"pmDesignator","p.m.");l(this,"shortDateFormat","dd.MM.yyyy");l(this,"culture","en-GB");l(this,"uiculture","en-GB");this.formats={},Object.assign(this,o)}};var _,H,M,q,k=(q=(H=(_=window.af)==null?void 0:_.article)==null?void 0:H.id)!=null?q:(M=window.window)==null?void 0:M.location.pathname.substring(1).split("/")[0];async function T(e,t={},o=0){var n;try{let r=await fetch("/api/logging/log-activity",{method:"POST",body:JSON.stringify({article:k,timeElapsed:o,action:e,parameters:C(g({},t),{_session:E()})}),headers:{"Content-Type":"application/json",Accept:"application/json"}});if(!r.ok)if((n=r.headers.get("Content-Type"))!=null&&n.includes("application/json")){let i=await r.json();console.error(i.error)}else console.error("".concat(r.status," ").concat(r.statusText))}catch(r){}}function se(e,t={}){let o=performance.now();return(n={})=>T(e,g(g({},t),n),performance.now()-o)}async function ce(e){let t=performance.now();return[await e(),performance.now()-t]}async function D(e){var t;try{if(!e)return;let o=typeof e=="string"?{error:e}:typeof e=="object"?"message"in e?{error:e.message,stack:(t=e.stack)!=null?t:null}:{error:e.toString()}:{error:"Unspecified error"};console.error(e);let n=await fetch("/data/Logger/LogError",{method:"POST",body:JSON.stringify(o),headers:{"Content-Type":"application/json; charset=utf-8"}});if(n.ok)return await n.json();console.error(Error("Failed to log error"))}catch(o){}}function B(){var e;return(e=crypto.randomUUID)==null?void 0:e.call(crypto)}var U=Date.now(),F=B(),S="",x="";if("document"in window){let e=()=>{var t,o,n,r,i,a;return T("AfSessionInit",{"appframe-core":(o=(t=window.af)==null?void 0:t.common)==null?void 0:o.version,"appframe-data":(r=(n=window.af)==null?void 0:n.data)==null?void 0:r.version,"app-version":(a=(i=window.af)==null?void 0:i.article)==null?void 0:a.version})};document.addEventListener("DOMContentLoaded",()=>{S=localStorage.getItem("_afDeviceId"),x=sessionStorage.getItem("_afSessionId"),S||(S=B(),localStorage.setItem("_afDeviceId",S)),x||(x=F,sessionStorage.setItem("_afSessionId",x)),e()}),document.addEventListener("visibilitychange",function(){document.visibilityState==="hidden"?navigator.sendBeacon("/api/logging/log-activity",JSON.stringify({article:k,action:"AfSessionEnd",parameters:{_session:E()}})):e()})}function E(){return{browserSessionId:x,sessionStart:U,sessionLength:Date.now()-U,sessionId:F,deviceId:S}}var J;(J=window.window)==null||J.addEventListener("error",e=>{typeof e=="object"&&"error"in e?D(e.error):typeof e=="object"&&"message"in e&&D(e)});function K(e){var t;return[((t=af==null?void 0:af.article)==null?void 0:t.id)||"","common",e].join(".")}var z=class{constructor(){l(this,"isPersisted",()=>!0)}getLocalStorageKey(t,o){return o?["common",t].join("."):K(t)}get(t,o,n){let r=this.getLocalStorageKey(t,n),i=localStorage.getItem(r);return i!==null?JSON.parse(i):o}set(t,o,n){localStorage.setItem(this.getLocalStorageKey(t,n),JSON.stringify(o))}remove(t,o){let n=this.getLocalStorageKey(t,o);return localStorage.getItem(n)!==null?(localStorage.removeItem(n),!0):!1}clear(){let t=K("");for(let o in localStorage)o.slice(0,t.length)===t&&localStorage.removeItem(o)}},ue=new z;function de(e){return e?V(e).substring(0,10):null}function p(e,t=2){return String(e).padStart(t,"0")}function V(e){return e?"".concat(e.getFullYear(),"-").concat(p(e.getMonth()+1),"-").concat(p(e.getDate()),"T").concat(p(e.getHours()),":").concat(p(e.getMinutes()),":").concat(p(e.getSeconds()),".").concat(p(e.getMilliseconds(),3)):null}function fe(e){return e?e.toISOString().substring(0,16):""}function O(e,t){return new Promise(function(o,n){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(function(){URL.revokeObjectURL(r),o()},250)}catch(r){n(r)}})}function c(e,t){if(e)return;let o=typeof t=="function"?t():t;throw new Error(o!=null?o:"Invariant failed")}async function ge(e,{fileName:t,signal:o,onProgress:n}){var i;let r=0;n==null||n({status:"requested"});try{let a=await fetch(e);if(!a.ok||!a.body){if((i=a.headers.get("content-type"))!=null&&i.includes("application/json")){let f=await a.json();c(!f.error,f.error)}throw new Error("".concat(a.status," ").concat(a.statusText))}try{let f=a.body.getReader(),v=new ReadableStream({start:function(y){function h(){return f.read().then(function(s){if(s.done){y.close();return}return r+=s.value.length,n==null||n({bytesReceived:r,status:"downloading"}),y.enqueue(s.value),h()})}return h()}});a=new Response(v)}catch(f){}let u=await a.blob();n==null||n({bytesReceived:r,status:"downloaded"}),await O(u,t),n==null||n({bytesReceived:r,status:"completed"})}catch(a){o!=null&&o.aborted?n==null||n({status:"cancelled"}):n==null||n({error:a.message,status:"error"})}}var me=/^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)*)\}$/;function j(e){var o;var t=e.toString().match(me);return c(t,"Unable to parse function!"),{name:(o=e.name)!=null?o:t[1],args:t[2].split(",").map(n=>n.trim()),body:t[3]}}function Z(){}Z.prototype=Object.create(null);var Y=Z;function N(e,t){if(typeof e=="object"){if(typeof t=="string"){let o=t.split(".");return N(e,o)}else if(Array.isArray(t)){let o=e;for(let n=0;n<t.length;n++)o=o[t[n]]=o[t[n]]||new Y;return o}}}function X(e,t,o={}){if(Array.isArray(t))for(let n of t){let{name:r}=j(n);c(r,"Unable to detect name of function! Name it, or only supply one function and include name in first parameter."),X(e,n)}else{let n,r;if(typeof t=="function"&&(n=j(t).name),typeof e=="string"){let i=e.split(".");n||(n=i[i.length-1],i=i.slice(0,i.length-1)),r=N(window,i)}else n&&(typeof e=="object"||typeof e=="function")?r=e:c(!1,"Invalid typeof parameter 'name', or unable to parse pValue!");Object.hasOwn(r,n)&&(o==null?void 0:o.overwrite)!==!0?console.warn([e,n].join(".")+" is already defined!"):r[n]=t}}var pe={xs:64,sm:128,md:256,lg:512,xl:void 0};function G(e,t,o,n="xs"){if(e&&typeof e=="object")return G(e.primKey,e.login,e.hash,e.size);if(!e||!o)return"";let r=pe[n];return"/api/data/blob/EmployeesLookup/".concat(e,"/Image/").concat(encodeURIComponent(t!=null?t:"")).concat(t?".":"").concat(encodeURIComponent(o),".jpg").concat(r?"?width=".concat(r):"")}async function ye(e){try{let t=await fetch("/api/user/localize/new/".concat(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(t){}return e}function d(e,t){var o,n;if(typeof e=="string"&&e.trim().length===0)return e;if(!(e===void 0||e===""||e===null))if(((n=(o=window.af)==null?void 0:o.article)==null?void 0:n.i18n)!==void 0){if(!Object.hasOwn(af.article.i18n,e)){af.article.i18n[e]=e;let r=ye(e).then(i=>(af.article.i18n[e]=i,i));if(t)return r}return af.article.i18n[e]}else return e}function he(e,...t){c(Array.isArray(e)&&e.length===t.length+1,"Method 'localize' must be used as a tag function");let o=e.map((r,i)=>i===e.length-1?r:"".concat(r,"$").concat(i)).join(""),n=d(o);return t.forEach((r,i)=>{n=n.replace("$"+i,r)}),n}function W(e){var o,n,r,i,a,u;let t=(i=e!=null?e:(n=(o=window.af)==null?void 0:o.article)==null?void 0:n.id)!=null?i:(r=window.window)==null?void 0:r.location.pathname.substring(1).split("/")[0];return"".concat(t,".").concat((u=(a=window.af)==null?void 0:a.userSession.login)!=null?u:"anonymous")}function be(e,t){var r;if(!((r=window.af)!=null&&r.userSession))return null;let o=W(t),n=JSON.parse(localStorage.getItem(o)||"{}");return e?n[e]||null:n}function Se(e,t,o){var i;if(!((i=window.af)!=null&&i.userSession))return;let n=W(o),r=JSON.parse(localStorage.getItem(n)||"{}");typeof t<"u"?r[e]=t:r=e,localStorage.setItem(n,JSON.stringify(r))}var xe='\n <dialog class="alert-dialog">\n <form method="dialog">\n <article></article>\n <footer>\n <menu></menu>\n </footer>\n </form>\n </dialog>\n';if(window.document&&!document.querySelector("#AlertDialogTemplate")){let e=document.createElement("template");e.id="AlertDialogTemplate",e.innerHTML=xe,document.body.append(e)}function Q(e,t="No"){return new Promise(o=>{let n=new AbortController;e.addEventListener("close",()=>{o(e.returnValue),n.abort()},{signal:n.signal}),e.addEventListener("cancel",()=>{o(t),n.abort()},{signal:n.signal})})}var w=new Map;async function R({buttons:e,content:t,className:o,id:n,title:r}){var y,h;if(n&&w.has(n))return await w.get(n);let i=document.querySelector("#AlertDialogTemplate");if(!i)throw Error("No alert dialog template found");let a=(y=i.content.firstElementChild)==null?void 0:y.cloneNode(!0),u=a==null?void 0:a.querySelector("article"),f=a==null?void 0:a.querySelector("footer menu");if(!a||!u||!f)throw Error("Invalid alert dialog template");if(o&&o.split(/\s+/).forEach(s=>a==null?void 0:a.classList.add(s)),r){let s=document.createElement("header");s.append(r),(h=u.parentNode)==null||h.insertBefore(s,u)}u.appendChild(typeof t=="string"?document.createTextNode(t):t);for(let{label:s,value:ee,primary:te}of e){let ne=document.createElement("li"),b=document.createElement("button");b.value=ee,te&&b.classList.add("primary"),b.textContent=s,ne.appendChild(b),f.appendChild(b)}document.body.appendChild(a),a.showModal();let v=Q(a).then(s=>(n&&w.has(n)&&w.delete(n),a&&document.body.removeChild(a),s));return n&&w.set(n,v),await v}var P=(o=>(o[o.YesNo=0]="YesNo",o[o.OkCancel=1]="OkCancel",o))(P||{});async function we(e,t={}){let{buttons:o=0,title:n}=t,r=o===1?[{label:d("OK"),value:"yes",primary:!0},{label:d("Cancel"),value:"no"}]:[{label:d("Yes"),value:"yes",primary:!0},{label:d("No"),value:"no"}];return await R({content:e,buttons:r,className:"alert-dialog-confirm",title:n})==="yes"}async function ve(e,t={}){await R(g({content:e,className:"alert-dialog-alert",buttons:[{label:d("OK"),value:"ok",primary:!0}]},t))}var dt="2.11.4";export{P as ConfirmButtons,m as SessionHandler,L as UserSession,ve as alert,we as confirm,O as downloadBlob,ge as downloadRequest,X as expose,d as getLocalizedString,E as getSessionData,be as getSettings,G as getUserImage,c as invariant,ue as localStorage,he as localize,T as logActivity,D as logError,I as mitt,R as openAlertDialog,Se as saveSettings,se as startActivity,ce as time,fe as toLocalDateTime,de as toLocalISODate,V as toLocalISODateTime,dt as version,Q as waitForDialog};
2
2
  //# sourceMappingURL=af.common.legacy.min.js.map