@mattilsynet/design 3.0.3 → 3.0.5
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/mtds/app/app-observer.js +1 -1
- package/mtds/app/app-toggle.js +26 -10
- package/mtds/app/app-toggle.js.map +1 -1
- package/mtds/app/app-toggle2.js +10 -26
- package/mtds/app/app-toggle2.js.map +1 -1
- package/mtds/app/app.js +1 -1
- package/mtds/atlas/atlas-element.js +1 -1
- package/mtds/chart/chart-element.js +25 -26
- package/mtds/chart/chart-element.js.map +1 -1
- package/mtds/field/field.js +9 -1
- package/mtds/field/field.js.map +1 -1
- package/mtds/index.iife.js +11 -11
- package/mtds/law/law-helper.js +12 -12
- package/mtds/law/law-helper.js.map +1 -1
- package/mtds/package.json.js +1 -1
- package/mtds/styles.css +1 -1
- package/package.json +8 -8
package/mtds/law/law-helper.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { attr as g } from "../utils.js";
|
|
2
|
-
const
|
|
2
|
+
const I = /<[^>]+\bid="([^"]+)[^>]+>/gi, _ = /\([^)]{1,4}\).{1,9}\d+\/\d+/i, A = /<(h\d|[^>]+role="heading")[^>]*>(.*?)<\/?(h\d|br|div)/i, v = /kapittel-\d+-ledd-\d+/, L = /<button[^>]+>.*?<\/button>/g, x = /►m\d+/i, p = /<[^>]+>/g, O = /<dt([^>]*class="([^"]+)")?[^>]*>(.*?)<\/dt><dd[^>]*>(.*?)<\/dd>/gis, k = /<(\/?)(article|footer|section)/gi, R = /(src|href)="([^"]+)"/gi, y = /(<li[^>]*)>\s*<div([^>]*>)|<\/div>(<\/li>)/gi, G = /(<li[^>]+data-name="([^"]+)[^>]+>)(\s*<(ul|ol|div)[^>]+>)/gis, m = /(<[^>]+class="[^"]*\bnumberedLegalP\b[^>]+>\s*)(\d+\.)(.*?)(?=<\/?(ul|ol|div)|$)/gis, $ = "https://lovdata.no/", T = "https://www.mattilsynet.no/regelveiledning/?regelverk=", X = {
|
|
3
3
|
dokid: { label: "DokumentID", value: "" },
|
|
4
4
|
legacyid: { label: "Datokode", value: "" },
|
|
5
5
|
refid: { label: "RefID", value: "" },
|
|
@@ -27,31 +27,31 @@ const A = /<[^>]+\bid="([^"]+)[^>]+>/gi, $ = /\([^)]{1,4}\).{1,9}\d+\/\d+/i, v =
|
|
|
27
27
|
return E(n).map((e) => h(e, a)).filter((e) => !!e);
|
|
28
28
|
}, M = (n) => {
|
|
29
29
|
const t = n.slice(0, n.indexOf("</dl>")), a = { ...X };
|
|
30
|
-
for (const e of t.matchAll(
|
|
30
|
+
for (const e of t.matchAll(O)) {
|
|
31
31
|
const l = e[2].replace(/-/g, "").toLowerCase();
|
|
32
32
|
a[l] = { label: e[3], value: e[4] };
|
|
33
33
|
}
|
|
34
34
|
return a;
|
|
35
|
-
}, S = (n) => n.includes("<main") ? (n.split(/<\/?main[^>]*>/)[1] || "").replace(
|
|
36
|
-
const r =
|
|
35
|
+
}, S = (n) => n.includes("<main") ? (n.split(/<\/?main[^>]*>/)[1] || "").replace(k, "<$1div").replace(y, "$1$2$3").replace(R, (t, a, e) => `${a}="${e.includes(":") ? "" : $}${e}" ${a === "href" ? 'rel="noopener noreferrer" target="_blank"' : ""}`).replace(m, (t, a, e, l) => `${a}<span class="data-originalId">${e}</span><div class="legalP" id="${i("id", a)}-ledd-0">${l}</div>`).replace(G, (t, a, e, l) => `${a}<span class="data-originalId">${e}</span>${l}`).replace(I, (t, a, e, l) => {
|
|
36
|
+
const r = b(t, a, e, l);
|
|
37
37
|
return `${t}${r ? `<button type="button" role="checkbox" aria-label="${r}" value="${a}"></button>` : ""}`;
|
|
38
38
|
}) : n, h = (n, t) => {
|
|
39
|
-
const a =
|
|
39
|
+
const a = v.test(n), e = n.split("-").map(
|
|
40
40
|
(s, o, f) => o % 2 ? U(f.slice(0, o + 1).join("-"), t, a) : null
|
|
41
41
|
).filter((s) => !!s);
|
|
42
42
|
if (!e.length) return null;
|
|
43
|
-
const l = e.filter(({ guideUrl: s }) => s).pop()?.guideUrl, r = e.filter(({ url: s }) => s).pop(), c = e.filter((s) => s.className === "section" &&
|
|
43
|
+
const l = e.filter(({ guideUrl: s }) => s).pop()?.guideUrl, r = e.filter(({ url: s }) => s).pop(), c = e.filter((s) => s.className === "section" && _.test(s.label)).pop(), d = r ? `${$}${r.url}` : "", u = e.slice(e.indexOf(c || e[0])).map(({ label: s }) => s).join(", ");
|
|
44
44
|
return { ...e.slice(-1)[0], path: e, label: u, url: d, guideUrl: l };
|
|
45
45
|
}, U = (n, t, a) => {
|
|
46
|
-
const e = t.lastIndexOf("<", t.indexOf(` id="${n}"`)), l = t.slice(e, t.indexOf(">", e) + 1), r = i("class", l), c = i("data-lovdata-url", l), d =
|
|
46
|
+
const e = t.lastIndexOf("<", t.indexOf(` id="${n}"`)), l = t.slice(e, t.indexOf(">", e) + 1), r = i("class", l), c = i("data-lovdata-url", l), d = b(l, n, e, t), [u, s, o] = c.match(/(lov|forskrift)\/([^/]+)/) || [], f = `${s?.slice(0, 3).toUpperCase()}-${o}`;
|
|
47
47
|
return {
|
|
48
48
|
id: n,
|
|
49
49
|
className: r,
|
|
50
|
-
guideUrl: c && `${
|
|
50
|
+
guideUrl: c && `${T}${f}_${n}`,
|
|
51
51
|
// Recreate "chapterOrParagraphs" format stored in in mattilsynet.no Veiledning
|
|
52
52
|
html: D(n, t),
|
|
53
53
|
url: c,
|
|
54
|
-
label: !a && r === "section" && d?.match(
|
|
54
|
+
label: !a && r === "section" && d?.match(_)?.[0] || d
|
|
55
55
|
};
|
|
56
56
|
}, i = (n, t) => {
|
|
57
57
|
const a = ` ${n.toLowerCase()}="`, e = t.toLowerCase().indexOf(a), l = e + a.length;
|
|
@@ -63,10 +63,10 @@ const A = /<[^>]+\bid="([^"]+)[^>]+>/gi, $ = /\([^)]{1,4}\).{1,9}\d+\/\d+/i, v =
|
|
|
63
63
|
if (l = t.indexOf("<", l) + 1, t[l] !== "/") r++;
|
|
64
64
|
else if (--r < 0) break;
|
|
65
65
|
const c = t.indexOf(">", l) + 1;
|
|
66
|
-
return l ? t.slice(a, c).replace(
|
|
67
|
-
},
|
|
66
|
+
return l ? t.slice(a, c).replace(L, "") : "";
|
|
67
|
+
}, b = (n, t, a, e) => w[i("class", n)]?.(n, t, a, e) || "", w = {
|
|
68
68
|
numberedLegalP: (n) => `nr. ${i("data-numerator", n)}.`,
|
|
69
|
-
section: (n, t, a, e) => e.slice(a).match(
|
|
69
|
+
section: (n, t, a, e) => e.slice(a).match(A)?.[2]?.replace(p, "")?.replace(x, "").trim() || "",
|
|
70
70
|
legalArticle: (n, t, a, e) => {
|
|
71
71
|
const l = e.indexOf(">", e.indexOf("legalArticleValue", a));
|
|
72
72
|
return e.slice(l + 1, e.indexOf("</span>", l)).replace(p, "").replace("Artikkel", "artikkel");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"law-helper.js","sources":["../../designsystem/law/law-helper.ts"],"sourcesContent":["import { attr } from \"../utils\";\n\n// NOTE: The law format is documentet in https://api.lovdata.no/xmldocs\nconst REGEX_ID = /<[^>]+\\bid=\"([^\"]+)[^>]+>/gi;\nconst REGEX_FORORDNING = /\\([^)]{1,4}\\).{1,9}\\d+\\/\\d+/i; // Match (EU) 2016/2031, (EF) nr. 2020/1054, (EFF) ..., etc.\nconst REGEX_HEADING = /<(h\\d|[^>]+role=\"heading\")[^>]*>(.*?)<\\/?(h\\d|br|div)/i; // Can be both <h1>-<h6> and or <div> with role=\"heading\" if level 7+\nconst REGEX_KAPITTEL_LEDD = /kapittel-\\d+-ledd-\\d+/; // If ledd is direct child of kapittel, and not has a paragraph in between\nconst REGEX_STRIP_BUTTONS = /<button[^>]+>.*?<\\/button>/g;\nconst REGEX_STRIP_POINTER = /►m\\d+/i;\nconst REGEX_STRIP_TAGS = /<[^>]+>/g;\nconst REGEX_META =\n\t/<dt([^>]*class=\"([^\"]+)\")?[^>]*>(.*?)<\\/dt><dd[^>]*>(.*?)<\\/dd>/gis;\n\nconst REGEX_FIX_TAGS = /<(\\/?)(article|footer|section)/gi;\nconst REGEX_FIX_BASEURL = /(src|href)=\"([^\"]+)\"/gi;\nconst REGEX_FIX_LISTS = /(<li[^>]*)>\\s*<div([^>]*>)|<\\/div>(<\\/li>)/gi;\nconst REGEX_FIX_SPAN_ID =\n\t/(<li[^>]+data-name=\"([^\"]+)[^>]+>)(\\s*<(ul|ol|div)[^>]+>)/gis; // Only create span if no span exists\nconst REGEX_FIX_NUMBEREDLEGALP =\n\t/(<[^>]+class=\"[^\"]*\\bnumberedLegalP\\b[^>]+>\\s*)(\\d+\\.)(.*?)(?=<\\/?(ul|ol|div)|$)/gis;\n\nconst BASE_URL = \"https://lovdata.no/\";\nconst GUIDE_URL = \"https://www.mattilsynet.no/regelveiledning/?regelverk=\";\nconst META_DEFAULT: Record<\n\t\"legacyid\" | \"title\" | \"titleshort\" | \"url\" | (string & {}), // Ensure title and titleShort are always present\n\t{ label: string; value: string }\n> = {\n\tdokid: { label: \"DokumentID\", value: \"\" },\n\tlegacyid: { label: \"Datokode\", value: \"\" },\n\trefid: { label: \"RefID\", value: \"\" },\n\ttitle: { label: \"Tittel\", value: \"\" },\n\ttitleshort: { label: \"Korttittel\", value: \"\" },\n\turl: { label: \"Url\", value: \"\" },\n};\n\ntype Ids = string | string[] | HTMLButtonElement | HTMLButtonElement[];\nconst toIdArray = (ids: Ids): string[] =>\n\tArray.from(Array.isArray(ids) ? ids : [ids], (id) =>\n\t\tid instanceof HTMLButtonElement ? id.value : id,\n\t);\n\nexport const getLawChecked = (lawElement?: HTMLElement | null) =>\n\tArray.from(\n\t\tlawElement?.querySelectorAll(`button[aria-checked=\"true\"]`) || [],\n\t\t(btn) => (btn as HTMLButtonElement).value,\n\t);\n\nexport const toggleLawChecked = (ids: Ids, lawElement?: HTMLElement | null) => {\n\tconst idArray = toIdArray(ids);\n\tlawElement?.querySelectorAll(`button`).forEach((btn) => {\n\t\tif (idArray.includes(btn.value))\n\t\t\tattr(btn, \"aria-checked\", `${attr(btn, \"aria-checked\") !== \"true\"}`);\n\t});\n};\n\nexport const setLawChecked = (ids: Ids, lawElement?: HTMLElement | null) => {\n\tconst idArray = toIdArray(ids);\n\tlawElement?.querySelectorAll(\"button\").forEach((btn) => {\n\t\tattr(btn, \"aria-checked\", `${idArray.includes(btn.value) || false}`);\n\t});\n};\n\nexport const parseLawIds = (ids: string | string[], lawHtml: string) => {\n\tconst html = fixLawHtml(lawHtml);\n\treturn toIdArray(ids)\n\t\t.map((id) => parseLawId(id, html))\n\t\t.filter((unit) => !!unit);\n};\n\nexport const parseLawMeta = (lawHtml: string) => {\n\tconst html = lawHtml.slice(0, lawHtml.indexOf(\"</dl>\"));\n\tconst meta = { ...META_DEFAULT };\n\tfor (const m of html.matchAll(REGEX_META)) {\n\t\tconst key = m[2].replace(/-/g, \"\").toLowerCase();\n\t\tmeta[key] = { label: m[3], value: m[4] };\n\t}\n\treturn meta;\n};\n\nexport const fixLawHtml = (lawHtml: string) => {\n\tif (!lawHtml.includes(\"<main\")) return lawHtml; // Already rendered\n\treturn (lawHtml.split(/<\\/?main[^>]*>/)[1] || \"\") // Only need content in <main>\n\t\t.replace(REGEX_FIX_TAGS, \"<$1div\") // Better for accessibility, must run before other REGEX_FIX\n\t\t.replace(REGEX_FIX_LISTS, \"$1$2$3\") // Merge <li> with inner <div> to reduce unnecessary elements\n\t\t.replace(REGEX_FIX_BASEURL, (_, attr, url) => {\n\t\t\treturn `${attr}=\"${url.includes(\":\") ? \"\" : BASE_URL}${url}\" ${attr === \"href\" ? 'rel=\"noopener noreferrer\" target=\"_blank\"' : \"\"}`;\n\t\t})\n\t\t.replace(REGEX_FIX_NUMBEREDLEGALP, (_, tag, id, ledd) => {\n\t\t\treturn `${tag}<span class=\"data-originalId\">${id}</span><div class=\"legalP\" id=\"${getAttr(\"id\", tag)}-ledd-0\">${ledd}</div>`;\n\t\t})\n\t\t.replace(REGEX_FIX_SPAN_ID, (_, tag, id, child) => {\n\t\t\treturn `${tag}<span class=\"data-originalId\">${id}</span>${child}`;\n\t\t})\n\t\t.replace(REGEX_ID, (tag, id, idx, html) => {\n\t\t\tconst label = getLabel(tag, id, idx, html);\n\t\t\treturn `${tag}${label ? `<button type=\"button\" role=\"checkbox\" aria-label=\"${label}\" value=\"${id}\"></button>` : \"\"}`;\n\t\t});\n};\n\nconst parseLawId = (id: string, html: string) => {\n\tconst isKapitellLedd = REGEX_KAPITTEL_LEDD.test(id);\n\tconst path = id\n\t\t.split(\"-\")\n\t\t.map((_, i, all) =>\n\t\t\ti % 2\n\t\t\t\t? parseLawItem(all.slice(0, i + 1).join(\"-\"), html, isKapitellLedd)\n\t\t\t\t: null,\n\t\t)\n\t\t.filter((unit) => !!unit);\n\n\tif (!path.length) return null;\n\tconst guideUrl = path.filter(({ guideUrl }) => guideUrl).pop()?.guideUrl; // The closest units item might not have an guideUrl\n\tconst closestWithUrl = path.filter(({ url }) => url).pop(); // The closest units item might not have an URL, so we provide the last found URL\n\tconst closestForordning = path\n\t\t.filter((u) => u.className === \"section\" && REGEX_FORORDNING.test(u.label))\n\t\t.pop();\n\n\tconst url = closestWithUrl ? `${BASE_URL}${closestWithUrl.url}` : \"\";\n\tconst label = path\n\t\t.slice(path.indexOf(closestForordning || path[0]))\n\t\t.map(({ label }) => label)\n\t\t.join(\", \");\n\n\treturn { ...path.slice(-1)[0], path, label, url, guideUrl };\n};\n\nconst parseLawItem = (id: string, html: string, isKapitellLedd: boolean) => {\n\tconst idx = html.lastIndexOf(\"<\", html.indexOf(` id=\"${id}\"`));\n\tconst tag = html.slice(idx, html.indexOf(\">\", idx) + 1);\n\tconst className = getAttr(\"class\", tag);\n\tconst url = getAttr(\"data-lovdata-url\", tag);\n\tconst label = getLabel(tag, id, idx, html);\n\tconst [_, type, key] = url.match(/(lov|forskrift)\\/([^/]+)/) || [];\n\tconst legacyId = `${GUIDE_URL}${type?.slice(0, 3).toUpperCase()}-${key}`; // Recreate legacyId format from lovdata.no\n\n\treturn {\n\t\tid,\n\t\tclassName,\n\t\tguideUrl: url && `${GUIDE_URL}${legacyId}_${id}`, // Recreate \"chapterOrParagraphs\" format stored in in mattilsynet.no Veiledning\n\t\thtml: getOuterHTML(id, html),\n\t\turl,\n\t\tlabel:\n\t\t\t(!isKapitellLedd &&\n\t\t\t\tclassName === \"section\" &&\n\t\t\t\tlabel?.match(REGEX_FORORDNING)?.[0]) ||\n\t\t\tlabel,\n\t};\n};\n\nconst getAttr = (attr: string, html: string) => {\n\tconst query = ` ${attr.toLowerCase()}=\"`;\n\tconst idx = html.toLowerCase().indexOf(query); // Need to lowercase to sanitize html variations\n\tconst start = idx + query.length;\n\treturn idx === -1 ? \"\" : html.slice(start, html.indexOf('\"', start)); // Using slice for performance\n};\n\nconst getOuterHTML = (id: string, html: string) => {\n\tconst idx = html.lastIndexOf(\"<\", html.indexOf(` id=\"${id}\"`));\n\tconst max = html.length;\n\tlet i = idx + 1; // Using + 1 to get 0 if not found, and to ensure we start searching inside element\n\tlet depth = 0;\n\n\twhile (i && i < max) {\n\t\ti = html.indexOf(\"<\", i) + 1;\n\t\tif (html[i] !== \"/\") depth++;\n\t\telse if (--depth < 0) break;\n\t}\n\tconst end = html.indexOf(\">\", i) + 1;\n\treturn i ? html.slice(idx, end).replace(REGEX_STRIP_BUTTONS, \"\") : \"\";\n};\n\nconst getLabel = (tag: string, id: string, idx: number, html: string): string =>\n\tLABELS[getAttr(\"class\", tag)]?.(tag, id, idx, html) || \"\";\n\nconst LABELS: Record<string, typeof getLabel> = {\n\tnumberedLegalP: (tag) => `nr. ${getAttr(\"data-numerator\", tag)}.`,\n\tsection: (_tag, _id, idx, html) => {\n\t\tconst head = html.slice(idx).match(REGEX_HEADING)?.[2];\n\t\tconst clean = head?.replace(REGEX_STRIP_TAGS, \"\");\n\t\treturn clean?.replace(REGEX_STRIP_POINTER, \"\").trim() || \"\";\n\t},\n\tlegalArticle: (_tag, _id, idx, html) => {\n\t\tconst at = html.indexOf(\">\", html.indexOf(\"legalArticleValue\", idx));\n\t\tconst id = html.slice(at + 1, html.indexOf(\"</span>\", at)); // .legalArticleValue is always a <span>\n\t\treturn id.replace(REGEX_STRIP_TAGS, \"\").replace(\"Artikkel\", \"artikkel\");\n\t},\n\tlegalP: (_tag, id) => {\n\t\tconst [idx, type, _, parent] = id.split(\"-\").reverse(); // If placed inside numberedLegalP, parent is \"nummer\"\n\t\tconst count = type === \"nummer\" ? 1 : Number(idx); // If \"fake\" ledd 1 created by fixNumberedLegalP, type is \"number\"\n\t\treturn `avsnitt ${count + (parent === \"nummer\" ? 1 : 0)}`; // Adjust for numberedLegalP creating fake legalP starting at 1\n\t},\n\tlistArticle: (tag, id, idx, html) => {\n\t\tconst path = id.split(\"-\");\n\t\tconst parentTag = ` id=\"${path.slice(0, -2).join(\"-\")}\"`; // Since lists can be nested, we need to find parent law unit to get correct list\n\t\tconst parentIdx = html.lastIndexOf(parentTag, idx);\n\t\tconst list = html.slice(html.indexOf(\"<ol\", parentIdx), idx); // Find first <ol> after parent element opening tag\n\t\tconst name = getAttr(\"data-name\", tag) || \"-\"; // Name can be empty or dash so allways fallback to dash\n\t\tconst type = getAttr(\"type\", list) || \"-\";\n\n\t\tlet unit = \"punkt\";\n\t\tif (type === \"1\") unit = \"tall\";\n\t\tif (type === \"a\") unit = \"bokstav\";\n\t\tif (type === \"i\") unit = \"romtertall\";\n\t\treturn `${unit} ${name === \"-\" ? path.pop() : name.replace(REGEX_STRIP_TAGS, \"\")}`;\n\t},\n\tmarginIdArticle: (_tag, _id, idx, html) => {\n\t\tconst at = html.indexOf(\">\", html.indexOf(\"data-marginOriginalId\", idx));\n\t\tconst id = html.slice(at + 1, html.indexOf(\"</span>\", at));\n\t\treturn `nr. ${id.replace(REGEX_STRIP_TAGS, \"\")}`;\n\t},\n};\n"],"names":["REGEX_ID","REGEX_FORORDNING","REGEX_HEADING","REGEX_KAPITTEL_LEDD","REGEX_STRIP_BUTTONS","REGEX_STRIP_POINTER","REGEX_STRIP_TAGS","REGEX_META","REGEX_FIX_TAGS","REGEX_FIX_BASEURL","REGEX_FIX_LISTS","REGEX_FIX_SPAN_ID","REGEX_FIX_NUMBEREDLEGALP","BASE_URL","GUIDE_URL","META_DEFAULT","toIdArray","ids","id","getLawChecked","lawElement","btn","toggleLawChecked","idArray","attr","setLawChecked","parseLawIds","lawHtml","html","fixLawHtml","parseLawId","unit","parseLawMeta","meta","m","key","_","url","tag","ledd","getAttr","child","idx","label","getLabel","isKapitellLedd","path","i","all","parseLawItem","guideUrl","closestWithUrl","closestForordning","u","className","type","legacyId","getOuterHTML","query","start","max","depth","end","LABELS","_tag","_id","at","parent","parentTag","parentIdx","list","name"],"mappings":";AAGA,MAAMA,IAAW,+BACXC,IAAmB,gCACnBC,IAAgB,0DAChBC,IAAsB,yBACtBC,IAAsB,+BACtBC,IAAsB,UACtBC,IAAmB,YACnBC,IACL,sEAEKC,IAAiB,oCACjBC,IAAoB,0BACpBC,IAAkB,gDAClBC,IACL,gEACKC,IACL,uFAEKC,IAAW,uBACXC,IAAY,0DACZC,IAGF;AAAA,EACH,OAAO,EAAE,OAAO,cAAc,OAAO,GAAA;AAAA,EACrC,UAAU,EAAE,OAAO,YAAY,OAAO,GAAA;AAAA,EACtC,OAAO,EAAE,OAAO,SAAS,OAAO,GAAA;AAAA,EAChC,OAAO,EAAE,OAAO,UAAU,OAAO,GAAA;AAAA,EACjC,YAAY,EAAE,OAAO,cAAc,OAAO,GAAA;AAAA,EAC1C,KAAK,EAAE,OAAO,OAAO,OAAO,GAAA;AAC7B,GAGMC,IAAY,CAACC,MAClB,MAAM;AAAA,EAAK,MAAM,QAAQA,CAAG,IAAIA,IAAM,CAACA,CAAG;AAAA,EAAG,CAACC,MAC7CA,aAAc,oBAAoBA,EAAG,QAAQA;AAC9C,GAEYC,IAAgB,CAACC,MAC7B,MAAM;AAAA,EACLA,GAAY,iBAAiB,6BAA6B,KAAK,CAAA;AAAA,EAC/D,CAACC,MAASA,EAA0B;AACrC,GAEYC,IAAmB,CAACL,GAAUG,MAAoC;AAC9E,QAAMG,IAAUP,EAAUC,CAAG;AAC7B,EAAAG,GAAY,iBAAiB,QAAQ,EAAE,QAAQ,CAACC,MAAQ;AACvD,IAAIE,EAAQ,SAASF,EAAI,KAAK,KAC7BG,EAAKH,GAAK,gBAAgB,GAAGG,EAAKH,GAAK,cAAc,MAAM,MAAM,EAAE;AAAA,EACrE,CAAC;AACF,GAEaI,IAAgB,CAACR,GAAUG,MAAoC;AAC3E,QAAMG,IAAUP,EAAUC,CAAG;AAC7B,EAAAG,GAAY,iBAAiB,QAAQ,EAAE,QAAQ,CAACC,MAAQ;AACvD,IAAAG,EAAKH,GAAK,gBAAgB,GAAGE,EAAQ,SAASF,EAAI,KAAK,KAAK,EAAK,EAAE;AAAA,EACpE,CAAC;AACF,GAEaK,IAAc,CAACT,GAAwBU,MAAoB;AACvE,QAAMC,IAAOC,EAAWF,CAAO;AAC/B,SAAOX,EAAUC,CAAG,EAClB,IAAI,CAACC,MAAOY,EAAWZ,GAAIU,CAAI,CAAC,EAChC,OAAO,CAACG,MAAS,CAAC,CAACA,CAAI;AAC1B,GAEaC,IAAe,CAACL,MAAoB;AAChD,QAAMC,IAAOD,EAAQ,MAAM,GAAGA,EAAQ,QAAQ,OAAO,CAAC,GAChDM,IAAO,EAAE,GAAGlB,EAAA;AAClB,aAAWmB,KAAKN,EAAK,SAASrB,CAAU,GAAG;AAC1C,UAAM4B,IAAMD,EAAE,CAAC,EAAE,QAAQ,MAAM,EAAE,EAAE,YAAA;AACnC,IAAAD,EAAKE,CAAG,IAAI,EAAE,OAAOD,EAAE,CAAC,GAAG,OAAOA,EAAE,CAAC,EAAA;AAAA,EACtC;AACA,SAAOD;AACR,GAEaJ,IAAa,CAACF,MACrBA,EAAQ,SAAS,OAAO,KACrBA,EAAQ,MAAM,gBAAgB,EAAE,CAAC,KAAK,IAC5C,QAAQnB,GAAgB,QAAQ,EAChC,QAAQE,GAAiB,QAAQ,EACjC,QAAQD,GAAmB,CAAC2B,GAAGZ,GAAMa,MAC9B,GAAGb,CAAI,KAAKa,EAAI,SAAS,GAAG,IAAI,KAAKxB,CAAQ,GAAGwB,CAAG,KAAKb,MAAS,SAAS,8CAA8C,EAAE,EACjI,EACA,QAAQZ,GAA0B,CAACwB,GAAGE,GAAKpB,GAAIqB,MACxC,GAAGD,CAAG,iCAAiCpB,CAAE,kCAAkCsB,EAAQ,MAAMF,CAAG,CAAC,YAAYC,CAAI,QACpH,EACA,QAAQ5B,GAAmB,CAACyB,GAAGE,GAAKpB,GAAIuB,MACjC,GAAGH,CAAG,iCAAiCpB,CAAE,UAAUuB,CAAK,EAC/D,EACA,QAAQzC,GAAU,CAACsC,GAAKpB,GAAIwB,GAAKd,MAAS;AAC1C,QAAMe,IAAQC,EAASN,GAAKpB,GAAIwB,GAAKd,CAAI;AACzC,SAAO,GAAGU,CAAG,GAAGK,IAAQ,qDAAqDA,CAAK,YAAYzB,CAAE,gBAAgB,EAAE;AACnH,CAAC,IAhBqCS,GAmBlCG,IAAa,CAACZ,GAAYU,MAAiB;AAChD,QAAMiB,IAAiB1C,EAAoB,KAAKe,CAAE,GAC5C4B,IAAO5B,EACX,MAAM,GAAG,EACT;AAAA,IAAI,CAACkB,GAAGW,GAAGC,MACXD,IAAI,IACDE,EAAaD,EAAI,MAAM,GAAGD,IAAI,CAAC,EAAE,KAAK,GAAG,GAAGnB,GAAMiB,CAAc,IAChE;AAAA,EAAA,EAEH,OAAO,CAACd,MAAS,CAAC,CAACA,CAAI;AAEzB,MAAI,CAACe,EAAK,OAAQ,QAAO;AACzB,QAAMI,IAAWJ,EAAK,OAAO,CAAC,EAAE,UAAAI,EAAAA,MAAeA,CAAQ,EAAE,IAAA,GAAO,UAC1DC,IAAiBL,EAAK,OAAO,CAAC,EAAE,KAAAT,EAAAA,MAAUA,CAAG,EAAE,IAAA,GAC/Ce,IAAoBN,EACxB,OAAO,CAACO,MAAMA,EAAE,cAAc,aAAapD,EAAiB,KAAKoD,EAAE,KAAK,CAAC,EACzE,IAAA,GAEIhB,IAAMc,IAAiB,GAAGtC,CAAQ,GAAGsC,EAAe,GAAG,KAAK,IAC5DR,IAAQG,EACZ,MAAMA,EAAK,QAAQM,KAAqBN,EAAK,CAAC,CAAC,CAAC,EAChD,IAAI,CAAC,EAAE,OAAAH,EAAAA,MAAYA,CAAK,EACxB,KAAK,IAAI;AAEX,SAAO,EAAE,GAAGG,EAAK,MAAM,EAAE,EAAE,CAAC,GAAG,MAAAA,GAAM,OAAAH,GAAO,KAAAN,GAAK,UAAAa,EAAA;AAClD,GAEMD,IAAe,CAAC/B,GAAYU,GAAciB,MAA4B;AAC3E,QAAMH,IAAMd,EAAK,YAAY,KAAKA,EAAK,QAAQ,QAAQV,CAAE,GAAG,CAAC,GACvDoB,IAAMV,EAAK,MAAMc,GAAKd,EAAK,QAAQ,KAAKc,CAAG,IAAI,CAAC,GAChDY,IAAYd,EAAQ,SAASF,CAAG,GAChCD,IAAMG,EAAQ,oBAAoBF,CAAG,GACrCK,IAAQC,EAASN,GAAKpB,GAAIwB,GAAKd,CAAI,GACnC,CAACQ,GAAGmB,GAAMpB,CAAG,IAAIE,EAAI,MAAM,0BAA0B,KAAK,CAAA,GAC1DmB,IAAW,GAAG1C,CAAS,GAAGyC,GAAM,MAAM,GAAG,CAAC,EAAE,YAAA,CAAa,IAAIpB,CAAG;AAEtE,SAAO;AAAA,IACN,IAAAjB;AAAA,IACA,WAAAoC;AAAA,IACA,UAAUjB,KAAO,GAAGvB,CAAS,GAAG0C,CAAQ,IAAItC,CAAE;AAAA;AAAA,IAC9C,MAAMuC,EAAavC,GAAIU,CAAI;AAAA,IAC3B,KAAAS;AAAA,IACA,OACE,CAACQ,KACDS,MAAc,aACdX,GAAO,MAAM1C,CAAgB,IAAI,CAAC,KACnC0C;AAAA,EAAA;AAEH,GAEMH,IAAU,CAAChB,GAAcI,MAAiB;AAC/C,QAAM8B,IAAQ,IAAIlC,EAAK,YAAA,CAAa,MAC9BkB,IAAMd,EAAK,YAAA,EAAc,QAAQ8B,CAAK,GACtCC,IAAQjB,IAAMgB,EAAM;AAC1B,SAAOhB,MAAQ,KAAK,KAAKd,EAAK,MAAM+B,GAAO/B,EAAK,QAAQ,KAAK+B,CAAK,CAAC;AACpE,GAEMF,IAAe,CAACvC,GAAYU,MAAiB;AAClD,QAAMc,IAAMd,EAAK,YAAY,KAAKA,EAAK,QAAQ,QAAQV,CAAE,GAAG,CAAC,GACvD0C,IAAMhC,EAAK;AACjB,MAAImB,IAAIL,IAAM,GACVmB,IAAQ;AAEZ,SAAOd,KAAKA,IAAIa;AAEf,QADAb,IAAInB,EAAK,QAAQ,KAAKmB,CAAC,IAAI,GACvBnB,EAAKmB,CAAC,MAAM,IAAK,CAAAc;AAAA,aACZ,EAAEA,IAAQ,EAAG;AAEvB,QAAMC,IAAMlC,EAAK,QAAQ,KAAKmB,CAAC,IAAI;AACnC,SAAOA,IAAInB,EAAK,MAAMc,GAAKoB,CAAG,EAAE,QAAQ1D,GAAqB,EAAE,IAAI;AACpE,GAEMwC,IAAW,CAACN,GAAapB,GAAYwB,GAAad,MACvDmC,EAAOvB,EAAQ,SAASF,CAAG,CAAC,IAAIA,GAAKpB,GAAIwB,GAAKd,CAAI,KAAK,IAElDmC,IAA0C;AAAA,EAC/C,gBAAgB,CAACzB,MAAQ,OAAOE,EAAQ,kBAAkBF,CAAG,CAAC;AAAA,EAC9D,SAAS,CAAC0B,GAAMC,GAAKvB,GAAKd,MACZA,EAAK,MAAMc,CAAG,EAAE,MAAMxC,CAAa,IAAI,CAAC,GACjC,QAAQI,GAAkB,EAAE,GAClC,QAAQD,GAAqB,EAAE,EAAE,UAAU;AAAA,EAE1D,cAAc,CAAC2D,GAAMC,GAAKvB,GAAKd,MAAS;AACvC,UAAMsC,IAAKtC,EAAK,QAAQ,KAAKA,EAAK,QAAQ,qBAAqBc,CAAG,CAAC;AAEnE,WADWd,EAAK,MAAMsC,IAAK,GAAGtC,EAAK,QAAQ,WAAWsC,CAAE,CAAC,EAC/C,QAAQ5D,GAAkB,EAAE,EAAE,QAAQ,YAAY,UAAU;AAAA,EACvE;AAAA,EACA,QAAQ,CAAC0D,GAAM9C,MAAO;AACrB,UAAM,CAACwB,GAAKa,GAAMnB,GAAG+B,CAAM,IAAIjD,EAAG,MAAM,GAAG,EAAE,QAAA;AAE7C,WAAO,YADOqC,MAAS,WAAW,IAAI,OAAOb,CAAG,MACrByB,MAAW,WAAW,IAAI,EAAE;AAAA,EACxD;AAAA,EACA,aAAa,CAAC7B,GAAKpB,GAAIwB,GAAKd,MAAS;AACpC,UAAMkB,IAAO5B,EAAG,MAAM,GAAG,GACnBkD,IAAY,QAAQtB,EAAK,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,KAC/CuB,IAAYzC,EAAK,YAAYwC,GAAW1B,CAAG,GAC3C4B,IAAO1C,EAAK,MAAMA,EAAK,QAAQ,OAAOyC,CAAS,GAAG3B,CAAG,GACrD6B,IAAO/B,EAAQ,aAAaF,CAAG,KAAK,KACpCiB,IAAOf,EAAQ,QAAQ8B,CAAI,KAAK;AAEtC,QAAIvC,IAAO;AACX,WAAIwB,MAAS,QAAKxB,IAAO,SACrBwB,MAAS,QAAKxB,IAAO,YACrBwB,MAAS,QAAKxB,IAAO,eAClB,GAAGA,CAAI,IAAIwC,MAAS,MAAMzB,EAAK,IAAA,IAAQyB,EAAK,QAAQjE,GAAkB,EAAE,CAAC;AAAA,EACjF;AAAA,EACA,iBAAiB,CAAC0D,GAAMC,GAAKvB,GAAKd,MAAS;AAC1C,UAAMsC,IAAKtC,EAAK,QAAQ,KAAKA,EAAK,QAAQ,yBAAyBc,CAAG,CAAC;AAEvE,WAAO,OADId,EAAK,MAAMsC,IAAK,GAAGtC,EAAK,QAAQ,WAAWsC,CAAE,CAAC,EACxC,QAAQ5D,GAAkB,EAAE,CAAC;AAAA,EAC/C;AACD;"}
|
|
1
|
+
{"version":3,"file":"law-helper.js","sources":["../../designsystem/law/law-helper.ts"],"sourcesContent":["import { attr } from \"../utils\";\n\n// NOTE: The law format is documentet in https://api.lovdata.no/xmldocs\nconst REGEX_ID = /<[^>]+\\bid=\"([^\"]+)[^>]+>/gi;\nconst REGEX_FORORDNING = /\\([^)]{1,4}\\).{1,9}\\d+\\/\\d+/i; // Match (EU) 2016/2031, (EF) nr. 2020/1054, (EFF) ..., etc.\nconst REGEX_HEADING = /<(h\\d|[^>]+role=\"heading\")[^>]*>(.*?)<\\/?(h\\d|br|div)/i; // Can be both <h1>-<h6> and or <div> with role=\"heading\" if level 7+\nconst REGEX_KAPITTEL_LEDD = /kapittel-\\d+-ledd-\\d+/; // If ledd is direct child of kapittel, and not has a paragraph in between\nconst REGEX_STRIP_BUTTONS = /<button[^>]+>.*?<\\/button>/g;\nconst REGEX_STRIP_POINTER = /►m\\d+/i;\nconst REGEX_STRIP_TAGS = /<[^>]+>/g;\nconst REGEX_META =\n\t/<dt([^>]*class=\"([^\"]+)\")?[^>]*>(.*?)<\\/dt><dd[^>]*>(.*?)<\\/dd>/gis;\n\nconst REGEX_FIX_TAGS = /<(\\/?)(article|footer|section)/gi;\nconst REGEX_FIX_BASEURL = /(src|href)=\"([^\"]+)\"/gi;\nconst REGEX_FIX_LISTS = /(<li[^>]*)>\\s*<div([^>]*>)|<\\/div>(<\\/li>)/gi;\nconst REGEX_FIX_SPAN_ID =\n\t/(<li[^>]+data-name=\"([^\"]+)[^>]+>)(\\s*<(ul|ol|div)[^>]+>)/gis; // Only create span if no span exists\nconst REGEX_FIX_NUMBEREDLEGALP =\n\t/(<[^>]+class=\"[^\"]*\\bnumberedLegalP\\b[^>]+>\\s*)(\\d+\\.)(.*?)(?=<\\/?(ul|ol|div)|$)/gis;\n\nconst BASE_URL = \"https://lovdata.no/\";\nconst GUIDE_URL = \"https://www.mattilsynet.no/regelveiledning/?regelverk=\";\nconst META_DEFAULT: Record<\n\t\"legacyid\" | \"title\" | \"titleshort\" | \"url\" | (string & {}), // Ensure title and titleShort are always present\n\t{ label: string; value: string }\n> = {\n\tdokid: { label: \"DokumentID\", value: \"\" },\n\tlegacyid: { label: \"Datokode\", value: \"\" },\n\trefid: { label: \"RefID\", value: \"\" },\n\ttitle: { label: \"Tittel\", value: \"\" },\n\ttitleshort: { label: \"Korttittel\", value: \"\" },\n\turl: { label: \"Url\", value: \"\" },\n};\n\ntype Ids = string | string[] | HTMLButtonElement | HTMLButtonElement[];\nconst toIdArray = (ids: Ids): string[] =>\n\tArray.from(Array.isArray(ids) ? ids : [ids], (id) =>\n\t\tid instanceof HTMLButtonElement ? id.value : id,\n\t);\n\nexport const getLawChecked = (lawElement?: HTMLElement | null) =>\n\tArray.from(\n\t\tlawElement?.querySelectorAll(`button[aria-checked=\"true\"]`) || [],\n\t\t(btn) => (btn as HTMLButtonElement).value,\n\t);\n\nexport const toggleLawChecked = (ids: Ids, lawElement?: HTMLElement | null) => {\n\tconst idArray = toIdArray(ids);\n\tlawElement?.querySelectorAll(`button`).forEach((btn) => {\n\t\tif (idArray.includes(btn.value))\n\t\t\tattr(btn, \"aria-checked\", `${attr(btn, \"aria-checked\") !== \"true\"}`);\n\t});\n};\n\nexport const setLawChecked = (ids: Ids, lawElement?: HTMLElement | null) => {\n\tconst idArray = toIdArray(ids);\n\tlawElement?.querySelectorAll(\"button\").forEach((btn) => {\n\t\tattr(btn, \"aria-checked\", `${idArray.includes(btn.value) || false}`);\n\t});\n};\n\nexport const parseLawIds = (ids: string | string[], lawHtml: string) => {\n\tconst html = fixLawHtml(lawHtml);\n\treturn toIdArray(ids)\n\t\t.map((id) => parseLawId(id, html))\n\t\t.filter((unit) => !!unit);\n};\n\nexport const parseLawMeta = (lawHtml: string) => {\n\tconst html = lawHtml.slice(0, lawHtml.indexOf(\"</dl>\"));\n\tconst meta = { ...META_DEFAULT };\n\tfor (const m of html.matchAll(REGEX_META)) {\n\t\tconst key = m[2].replace(/-/g, \"\").toLowerCase();\n\t\tmeta[key] = { label: m[3], value: m[4] };\n\t}\n\treturn meta;\n};\n\nexport const fixLawHtml = (lawHtml: string) => {\n\tif (!lawHtml.includes(\"<main\")) return lawHtml; // Already rendered\n\treturn (lawHtml.split(/<\\/?main[^>]*>/)[1] || \"\") // Only need content in <main>\n\t\t.replace(REGEX_FIX_TAGS, \"<$1div\") // Better for accessibility, must run before other REGEX_FIX\n\t\t.replace(REGEX_FIX_LISTS, \"$1$2$3\") // Merge <li> with inner <div> to reduce unnecessary elements\n\t\t.replace(REGEX_FIX_BASEURL, (_, attr, url) => {\n\t\t\treturn `${attr}=\"${url.includes(\":\") ? \"\" : BASE_URL}${url}\" ${attr === \"href\" ? 'rel=\"noopener noreferrer\" target=\"_blank\"' : \"\"}`;\n\t\t})\n\t\t.replace(REGEX_FIX_NUMBEREDLEGALP, (_, tag, id, ledd) => {\n\t\t\treturn `${tag}<span class=\"data-originalId\">${id}</span><div class=\"legalP\" id=\"${getAttr(\"id\", tag)}-ledd-0\">${ledd}</div>`;\n\t\t})\n\t\t.replace(REGEX_FIX_SPAN_ID, (_, tag, id, child) => {\n\t\t\treturn `${tag}<span class=\"data-originalId\">${id}</span>${child}`;\n\t\t})\n\t\t.replace(REGEX_ID, (tag, id, idx, html) => {\n\t\t\tconst label = getLabel(tag, id, idx, html);\n\t\t\treturn `${tag}${label ? `<button type=\"button\" role=\"checkbox\" aria-label=\"${label}\" value=\"${id}\"></button>` : \"\"}`;\n\t\t});\n};\n\nconst parseLawId = (id: string, html: string) => {\n\tconst isKapitellLedd = REGEX_KAPITTEL_LEDD.test(id);\n\tconst path = id\n\t\t.split(\"-\")\n\t\t.map((_, i, all) =>\n\t\t\ti % 2\n\t\t\t\t? parseLawItem(all.slice(0, i + 1).join(\"-\"), html, isKapitellLedd)\n\t\t\t\t: null,\n\t\t)\n\t\t.filter((unit) => !!unit);\n\n\tif (!path.length) return null;\n\tconst guideUrl = path.filter(({ guideUrl }) => guideUrl).pop()?.guideUrl; // The closest units item might not have an guideUrl\n\tconst closestWithUrl = path.filter(({ url }) => url).pop(); // The closest units item might not have an URL, so we provide the last found URL\n\tconst closestForordning = path\n\t\t.filter((u) => u.className === \"section\" && REGEX_FORORDNING.test(u.label))\n\t\t.pop();\n\n\tconst url = closestWithUrl ? `${BASE_URL}${closestWithUrl.url}` : \"\";\n\tconst label = path\n\t\t.slice(path.indexOf(closestForordning || path[0]))\n\t\t.map(({ label }) => label)\n\t\t.join(\", \");\n\n\treturn { ...path.slice(-1)[0], path, label, url, guideUrl };\n};\n\nconst parseLawItem = (id: string, html: string, isKapitellLedd: boolean) => {\n\tconst idx = html.lastIndexOf(\"<\", html.indexOf(` id=\"${id}\"`));\n\tconst tag = html.slice(idx, html.indexOf(\">\", idx) + 1);\n\tconst className = getAttr(\"class\", tag);\n\tconst url = getAttr(\"data-lovdata-url\", tag);\n\tconst label = getLabel(tag, id, idx, html);\n\tconst [_, type, key] = url.match(/(lov|forskrift)\\/([^/]+)/) || [];\n\tconst legacyId = `${type?.slice(0, 3).toUpperCase()}-${key}`; // Recreate legacyId format from lovdata.no\n\n\treturn {\n\t\tid,\n\t\tclassName,\n\t\tguideUrl: url && `${GUIDE_URL}${legacyId}_${id}`, // Recreate \"chapterOrParagraphs\" format stored in in mattilsynet.no Veiledning\n\t\thtml: getOuterHTML(id, html),\n\t\turl,\n\t\tlabel:\n\t\t\t(!isKapitellLedd &&\n\t\t\t\tclassName === \"section\" &&\n\t\t\t\tlabel?.match(REGEX_FORORDNING)?.[0]) ||\n\t\t\tlabel,\n\t};\n};\n\nconst getAttr = (attr: string, html: string) => {\n\tconst query = ` ${attr.toLowerCase()}=\"`;\n\tconst idx = html.toLowerCase().indexOf(query); // Need to lowercase to sanitize html variations\n\tconst start = idx + query.length;\n\treturn idx === -1 ? \"\" : html.slice(start, html.indexOf('\"', start)); // Using slice for performance\n};\n\nconst getOuterHTML = (id: string, html: string) => {\n\tconst idx = html.lastIndexOf(\"<\", html.indexOf(` id=\"${id}\"`));\n\tconst max = html.length;\n\tlet i = idx + 1; // Using + 1 to get 0 if not found, and to ensure we start searching inside element\n\tlet depth = 0;\n\n\twhile (i && i < max) {\n\t\ti = html.indexOf(\"<\", i) + 1;\n\t\tif (html[i] !== \"/\") depth++;\n\t\telse if (--depth < 0) break;\n\t}\n\tconst end = html.indexOf(\">\", i) + 1;\n\treturn i ? html.slice(idx, end).replace(REGEX_STRIP_BUTTONS, \"\") : \"\";\n};\n\nconst getLabel = (tag: string, id: string, idx: number, html: string): string =>\n\tLABELS[getAttr(\"class\", tag)]?.(tag, id, idx, html) || \"\";\n\nconst LABELS: Record<string, typeof getLabel> = {\n\tnumberedLegalP: (tag) => `nr. ${getAttr(\"data-numerator\", tag)}.`,\n\tsection: (_tag, _id, idx, html) => {\n\t\tconst head = html.slice(idx).match(REGEX_HEADING)?.[2];\n\t\tconst clean = head?.replace(REGEX_STRIP_TAGS, \"\");\n\t\treturn clean?.replace(REGEX_STRIP_POINTER, \"\").trim() || \"\";\n\t},\n\tlegalArticle: (_tag, _id, idx, html) => {\n\t\tconst at = html.indexOf(\">\", html.indexOf(\"legalArticleValue\", idx));\n\t\tconst id = html.slice(at + 1, html.indexOf(\"</span>\", at)); // .legalArticleValue is always a <span>\n\t\treturn id.replace(REGEX_STRIP_TAGS, \"\").replace(\"Artikkel\", \"artikkel\");\n\t},\n\tlegalP: (_tag, id) => {\n\t\tconst [idx, type, _, parent] = id.split(\"-\").reverse(); // If placed inside numberedLegalP, parent is \"nummer\"\n\t\tconst count = type === \"nummer\" ? 1 : Number(idx); // If \"fake\" ledd 1 created by fixNumberedLegalP, type is \"number\"\n\t\treturn `avsnitt ${count + (parent === \"nummer\" ? 1 : 0)}`; // Adjust for numberedLegalP creating fake legalP starting at 1\n\t},\n\tlistArticle: (tag, id, idx, html) => {\n\t\tconst path = id.split(\"-\");\n\t\tconst parentTag = ` id=\"${path.slice(0, -2).join(\"-\")}\"`; // Since lists can be nested, we need to find parent law unit to get correct list\n\t\tconst parentIdx = html.lastIndexOf(parentTag, idx);\n\t\tconst list = html.slice(html.indexOf(\"<ol\", parentIdx), idx); // Find first <ol> after parent element opening tag\n\t\tconst name = getAttr(\"data-name\", tag) || \"-\"; // Name can be empty or dash so allways fallback to dash\n\t\tconst type = getAttr(\"type\", list) || \"-\";\n\n\t\tlet unit = \"punkt\";\n\t\tif (type === \"1\") unit = \"tall\";\n\t\tif (type === \"a\") unit = \"bokstav\";\n\t\tif (type === \"i\") unit = \"romtertall\";\n\t\treturn `${unit} ${name === \"-\" ? path.pop() : name.replace(REGEX_STRIP_TAGS, \"\")}`;\n\t},\n\tmarginIdArticle: (_tag, _id, idx, html) => {\n\t\tconst at = html.indexOf(\">\", html.indexOf(\"data-marginOriginalId\", idx));\n\t\tconst id = html.slice(at + 1, html.indexOf(\"</span>\", at));\n\t\treturn `nr. ${id.replace(REGEX_STRIP_TAGS, \"\")}`;\n\t},\n};\n"],"names":["REGEX_ID","REGEX_FORORDNING","REGEX_HEADING","REGEX_KAPITTEL_LEDD","REGEX_STRIP_BUTTONS","REGEX_STRIP_POINTER","REGEX_STRIP_TAGS","REGEX_META","REGEX_FIX_TAGS","REGEX_FIX_BASEURL","REGEX_FIX_LISTS","REGEX_FIX_SPAN_ID","REGEX_FIX_NUMBEREDLEGALP","BASE_URL","GUIDE_URL","META_DEFAULT","toIdArray","ids","id","getLawChecked","lawElement","btn","toggleLawChecked","idArray","attr","setLawChecked","parseLawIds","lawHtml","html","fixLawHtml","parseLawId","unit","parseLawMeta","meta","m","key","_","url","tag","ledd","getAttr","child","idx","label","getLabel","isKapitellLedd","path","i","all","parseLawItem","guideUrl","closestWithUrl","closestForordning","u","className","type","legacyId","getOuterHTML","query","start","max","depth","end","LABELS","_tag","_id","at","parent","parentTag","parentIdx","list","name"],"mappings":"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"}
|
package/mtds/package.json.js
CHANGED