From 2f2fd516074d3cc1bb38170112321d1adb9f4e44 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 10 Oct 2018 20:23:36 +0000 Subject: [PATCH] A simpler and better way to munge relative URLs --- theme/puzzle.html | 38 ++++++++++---------------------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/theme/puzzle.html b/theme/puzzle.html index 1dcf892..ed6a9e1 100644 --- a/theme/puzzle.html +++ b/theme/puzzle.html @@ -20,7 +20,6 @@ function init() { .then(function(resp) { return resp.json(); }).then(function(obj) { - document.getElementById("puzzle").innerHTML = obj.body; document.getElementById("authors").textContent = obj.authors.join(", "); if (obj.answers) { devel_addin(obj, document.getElementById("devel")); @@ -39,6 +38,16 @@ function init() { li.appendChild(a); document.getElementById("files").appendChild(li); } + + // Prefix `base` to relative URLs in the puzzle body + let doc = new DOMParser().parseFromString(obj.body, "text/html"); + for (let se of doc.querySelectorAll("[src,href]")) { + se.outerHTML = se.outerHTML.replace(/(src|href)="([^/]+)"/i, "$1=\"" + base + "$2\""); + } + + let puzzle = document.getElementById("puzzle"); + while (puzzle.firstChild) puzzle.firstChild.remove(); + for (let e of doc.body.childNodes) puzzle.appendChild(e); }).catch(function(err) { console.log("Error", err); }); @@ -47,33 +56,6 @@ function init() { document.querySelector("input[name=cat]").value = categoryName; document.querySelector("input[name=points]").value = points; - function mutated(mutationsList, observer) { - for (let mutation of mutationsList) { - if (mutation.type == 'childList') { - for (let e of mutation.addedNodes) { - //console.log(e); - if (! e.querySelectorAll) { continue; } - for (let se of e.querySelectorAll("[src],[href]")) { - se.outerHTML = se.outerHTML.replace(/(src|href)="([^/]+)"/i, "$1=\"" + base + "$2\"") - //console.log(se.outerHTML); - } - //console.log(e.querySelectorAll("[src]")); - } - //console.log(mutation.addedNodes); - } else { - console.log(mutation); - } - } - } - - let puzzle = document.getElementById("puzzle"); - let observerOptions = { - childList: true, - attributes: true, - subtree: true, - }; - window.observer = new MutationObserver(mutated); - observer.observe(puzzle, observerOptions); } document.addEventListener("DOMContentLoaded", init);