From 0b534672febf95e7384dec2797190b87406fce8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sun, 18 Sep 2022 23:05:09 +0200 Subject: Extend user-additions salar to handle multiple locations. --- static/user/user-additions.js | 44 +++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/static/user/user-additions.js b/static/user/user-additions.js index 909f85f2..3a2951e0 100644 --- a/static/user/user-additions.js +++ b/static/user/user-additions.js @@ -32,7 +32,7 @@ window.formatters.set('description', async (el, ev, d) => { idx = match.index + match[0].length } children.push(d.substring(idx)); - el.replaceChildren(...children); + el.replaceChildren(...children); } else if (/<\/?\w+( +\w+(=["']?\w+["']?)?)* *\/?>/.exec(d)) { /* Assume that the text is HTML if it contains something which looks like an HTML tag */ @@ -73,32 +73,36 @@ window.salar = new Promise((resolve, reject) => .catch(err => reject(err)) ) - window.formatters.set('location', async function(el, _, d) { - let rx = /Lokal: (.*)/ - let m = rx.exec(d) - if (! m) { - el.textContent = d; - return; - } + let salar; try { - let salar = await window.salar; + salar = await window.salar; } catch (e) { console.warn("Location formatter failed", e); return; } - let name = m[1] - let frag = salar[name]; - if (frag) { - let anch = document.createElement('a'); - anch.href = `https://old.liu.se/karta/${frag}` - anch.target = '_blank' - anch.textContent = name; - el.append('Lokal: '); - el.append(anch); - } else { - el.textContent = `Lokal: ${name}` + let rx = /Lokal: ([A-Za-z0-9]*)?/g + + let idx = 0; + let children = [] + for (let match of d.matchAll(rx)) { + children.push(d.substring(idx, match.index)) + let name = match[1] + let frag = salar[name.toUpperCase()]; + if (frag) { + let anch = document.createElement('a'); + anch.href = `https://old.liu.se/karta/${frag}` + anch.target = '_blank' + anch.textContent = name; + children.push('Lokal: '); + children.push(anch); + } else { + children.push(`Lokal: ${name}`) + } + idx = match.index + match[0].length } + children.push(d.substring(idx)); + el.replaceChildren(...children) }) -- cgit v1.2.3