@olenbetong/appframe-core 2.11.2 → 2.11.3

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
+ function getSettings(setting, article2) {
517
518
  if (!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
+ function saveSettings(setting, value, article2) {
527
528
  if (!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.3";
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;
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": (_a3 = window.af) == null ? void 0 : _a3.common.version,
214
+ "appframe-data": (_c2 = (_b2 = window.af) == null ? void 0 : _b2.data) == null ? void 0 : _c2.version,
215
+ "app-version": (_d2 = window.af) == null ? void 0 : _d2.article.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,25 @@ 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);
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");
553
556
  }
554
- function getSettings(setting, article) {
557
+ function getSettings(setting, article2) {
555
558
  if (!(af == null ? void 0 : af.userSession))
556
559
  return null;
557
- const key = getKey(article);
560
+ const key = getKey(article2);
558
561
  const settings = JSON.parse(localStorage.getItem(key) || "{}");
559
562
  if (setting) {
560
563
  return settings[setting] || null;
561
564
  }
562
565
  return settings;
563
566
  }
564
- function saveSettings(setting, value, article) {
567
+ function saveSettings(setting, value, article2) {
565
568
  if (!(af == null ? void 0 : af.userSession))
566
569
  return;
567
- const key = getKey(article);
570
+ const key = getKey(article2);
568
571
  let userSettings = JSON.parse(localStorage.getItem(key) || "{}");
569
572
  if (typeof value !== "undefined") {
570
573
  userSettings[setting] = value;
@@ -605,14 +608,14 @@ function waitForDialog(dialog, cancelValue = "No") {
605
608
  }
606
609
  var alertDialogPromiseMap = /* @__PURE__ */ new Map();
607
610
  async function openAlertDialog({ buttons, content, className, id, title }) {
608
- var _a2, _b;
611
+ var _a3, _b2;
609
612
  if (id && alertDialogPromiseMap.has(id)) {
610
613
  return await alertDialogPromiseMap.get(id);
611
614
  }
612
615
  let $template = document.querySelector("#AlertDialogTemplate");
613
616
  if (!$template)
614
617
  throw Error("No alert dialog template found");
615
- let $dialog = (_a2 = $template.content.firstElementChild) == null ? void 0 : _a2.cloneNode(true);
618
+ let $dialog = (_a3 = $template.content.firstElementChild) == null ? void 0 : _a3.cloneNode(true);
616
619
  let $content = $dialog == null ? void 0 : $dialog.querySelector("article");
617
620
  let $menu = $dialog == null ? void 0 : $dialog.querySelector("footer menu");
618
621
  if (!$dialog || !$content || !$menu)
@@ -623,7 +626,7 @@ async function openAlertDialog({ buttons, content, className, id, title }) {
623
626
  if (title) {
624
627
  let $header = document.createElement("header");
625
628
  $header.append(title);
626
- (_b = $content.parentNode) == null ? void 0 : _b.insertBefore($header, $content);
629
+ (_b2 = $content.parentNode) == null ? void 0 : _b2.insertBefore($header, $content);
627
630
  }
628
631
  $content.appendChild(typeof content === "string" ? document.createTextNode(content) : content);
629
632
  for (let { label, value, primary } of buttons) {
@@ -678,7 +681,7 @@ async function alert(prompt, options = {}) {
678
681
  }
679
682
 
680
683
  // src/index.ts
681
- var version = "2.11.2";
684
+ var version = "2.11.3";
682
685
  export {
683
686
  ConfirmButtons,
684
687
  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(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 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 a=await r.json();console.error(a.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;return T("AfSessionInit",{"appframe-core":(t=window.af)==null?void 0:t.common.version,"appframe-data":(n=(o=window.af)==null?void 0:o.data)==null?void 0:n.version,"app-version":(r=window.af)==null?void 0:r.article.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),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=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),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 ge(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 f=await i.json();c(!f.error,f.error)}throw new Error("".concat(i.status," ").concat(i.statusText))}try{let f=i.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()}});i=new Response(v)}catch(f){}let u=await i.blob();n==null||n({bytesReceived:r,status:"downloaded"}),await O(u,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 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 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 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(a=>(af.article.i18n[e]=a,a));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,a)=>a===e.length-1?r:"".concat(r,"$").concat(a)).join(""),n=d(o);return t.forEach((r,a)=>{n=n.replace("$"+a,r)}),n}function W(e){var o,n,r,a,i,u;let t=(a=e!=null?e:(n=(o=window.af)==null?void 0:o.article)==null?void 0:n.id)!=null?a:(r=window.window)==null?void 0:r.location.pathname.substring(1).split("/")[0];return"".concat(t,".").concat((u=(i=window.af)==null?void 0:i.userSession.login)!=null?u:"anonymous")}function be(e,t){if(!(af!=null&&af.userSession))return null;let o=W(t),n=JSON.parse(localStorage.getItem(o)||"{}");return e?n[e]||null:n}function Se(e,t,o){if(!(af!=null&&af.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 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),u=i==null?void 0:i.querySelector("article"),f=i==null?void 0:i.querySelector("footer menu");if(!i||!u||!f)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),(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(i),i.showModal();let v=Q(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 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.3";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