window.formatters.set('description', (el, d) => { if (//.exec(d)) { /* Assume that the text is HTML iff it contains a
tag */ let parser = new DOMParser(); let doc = parser.parseFromString(d, 'text/html'); el.replaceChildren(doc.body); } else { /* Otherwise it should be plain(er) text, parse "all" links */ let rx = /https?:\/\/\S+/g let idx = 0; let children = [] for (let match of d.matchAll(rx)) { let anch = document.createElement('a') anch.href = match[0] anch.textContent = match[0] children.push(d.substring(idx, match.index)) children.push(anch) idx = match.index + match[0].length } children.push(d.substring(idx)) el.replaceChildren(...children); } }) /* This location formatter is generally not for general use. It holds a small lookup table of "all" locations at Linköping University, and makes location names from their calendar system clickable. To obtain salar.json, run scripts/fetch-liu-map-index.scm from calps source tree. */ window.salar = new Promise((resolve, reject) => fetch('/static/user/salar.json') .then(d => d.json()) .then(d => resolve(d))) window.formatters.set('location', async function(el, d) { let rx = /Lokal: (.*)/ let m = rx.exec(d) if (! m) { el.textContent = d; return; } let salar = await window.salar; 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}` } })