|  |  | @@ -39,6 +39,7 @@ document.addEventListener("DOMContentLoaded", e => { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | overlayImg.src = overlayInput; | 
		
	
		
			
			|  |  |  | baseImg.src = baseInput; | 
		
	
		
			
			|  |  |  | setURL(); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | load(); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -84,6 +85,16 @@ document.addEventListener("DOMContentLoaded", e => { | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | document.querySelector("#radius-slider").addEventListener("change", e => { | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | radius = parseInt(e.target.value); | 
		
	
		
			
			|  |  |  | document.querySelector("#radius-input").value = radius; | 
		
	
		
			
			|  |  |  | } catch { | 
		
	
		
			
			|  |  |  | console.warn("That wasn't a valid radius: " + e.target.value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | setURL(); | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | document.querySelector("#radius-input").addEventListener("input", e => { | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | radius = parseInt(e.target.value); | 
		
	
	
		
			
				|  |  | @@ -93,6 +104,16 @@ document.addEventListener("DOMContentLoaded", e => { | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | document.querySelector("#radius-input").addEventListener("change", e => { | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | radius = parseInt(e.target.value); | 
		
	
		
			
			|  |  |  | document.querySelector("#radius-slider").value = radius; | 
		
	
		
			
			|  |  |  | } catch { | 
		
	
		
			
			|  |  |  | console.warn("That wasn't a valid radius: " + e.target.value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | setURL(); | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | document.querySelector("#softness-slider").addEventListener("input", e => { | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | softness = parseInt(e.target.value); | 
		
	
	
		
			
				|  |  | @@ -102,6 +123,16 @@ document.addEventListener("DOMContentLoaded", e => { | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | document.querySelector("#softness-slider").addEventListener("change", e => { | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | softness = parseInt(e.target.value); | 
		
	
		
			
			|  |  |  | document.querySelector("#softness-input").value = softness; | 
		
	
		
			
			|  |  |  | } catch { | 
		
	
		
			
			|  |  |  | console.warn("That wasn't a valid softness: " + e.target.value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | setURL(); | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | document.querySelector("#softness-input").addEventListener("input", e => { | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | softness = parseInt(e.target.value); | 
		
	
	
		
			
				|  |  | @@ -110,6 +141,16 @@ document.addEventListener("DOMContentLoaded", e => { | 
		
	
		
			
			|  |  |  | console.warn("That wasn't a valid softness: " + e.target.value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | document.querySelector("#softness-input").addEventListener("change", e => { | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | softness = parseInt(e.target.value); | 
		
	
		
			
			|  |  |  | document.querySelector("#softness-slider").value = softness; | 
		
	
		
			
			|  |  |  | } catch { | 
		
	
		
			
			|  |  |  | console.warn("That wasn't a valid softness: " + e.target.value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | setURL(); | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // see if we have params already; if so, use them! | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -159,30 +200,6 @@ document.addEventListener("DOMContentLoaded", e => { | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | document.querySelector("#share-button").addEventListener("click", e => { | 
		
	
		
			
			|  |  |  | let shareURL = new URL(window.location); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // for some reason, the parser gets confused by urlencoded urls... | 
		
	
		
			
			|  |  |  | // so, to get rid of all parameters, we do this | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | let keys = Array.from(shareURL.searchParams.keys()); | 
		
	
		
			
			|  |  |  | do { | 
		
	
		
			
			|  |  |  | keys = Array.from(shareURL.searchParams.keys()); | 
		
	
		
			
			|  |  |  | keys.forEach(key => { | 
		
	
		
			
			|  |  |  | shareURL.searchParams.delete(key); | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  | } while (keys.length > 0) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | shareURL.searchParams.append("base", baseImg.src); | 
		
	
		
			
			|  |  |  | shareURL.searchParams.append("overlay", overlayImg.src); | 
		
	
		
			
			|  |  |  | shareURL.searchParams.append("radius", radius); | 
		
	
		
			
			|  |  |  | shareURL.searchParams.append("softness", softness); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | console.log(shareURL); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | window.location = shareURL; | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function load() { | 
		
	
	
		
			
				|  |  | @@ -272,4 +289,28 @@ function updateOverlay(points) { | 
		
	
		
			
			|  |  |  | overlayCtx.drawImage(overlayImg, 0, 0); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | overlayCtx.restore(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function setURL() { | 
		
	
		
			
			|  |  |  | let shareURL = new URL(window.location); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // for some reason, the parser gets confused by urlencoded urls... | 
		
	
		
			
			|  |  |  | // so, to get rid of all parameters, we do this | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | let keys = Array.from(shareURL.searchParams.keys()); | 
		
	
		
			
			|  |  |  | do { | 
		
	
		
			
			|  |  |  | keys = Array.from(shareURL.searchParams.keys()); | 
		
	
		
			
			|  |  |  | keys.forEach(key => { | 
		
	
		
			
			|  |  |  | shareURL.searchParams.delete(key); | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  | } while (keys.length > 0) | 
		
	
		
			
			|  |  |  | const overlayImg = document.querySelector("#overlay-img"); | 
		
	
		
			
			|  |  |  | const baseImg = document.querySelector("#base-img"); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | shareURL.searchParams.append("base", baseImg.src); | 
		
	
		
			
			|  |  |  | shareURL.searchParams.append("overlay", overlayImg.src); | 
		
	
		
			
			|  |  |  | shareURL.searchParams.append("radius", radius); | 
		
	
		
			
			|  |  |  | shareURL.searchParams.append("softness", softness); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | window.history.replaceState(null, "X-Ray Viewer", shareURL); | 
		
	
		
			
			|  |  |  | } |