|
|
@@ -4,6 +4,7 @@ let overlayLoaded = false; |
|
|
let baseLoaded = false; |
|
|
let baseLoaded = false; |
|
|
|
|
|
|
|
|
let radius = 200; |
|
|
let radius = 200; |
|
|
|
|
|
let softness = 25; |
|
|
|
|
|
|
|
|
document.addEventListener("DOMContentLoaded", e => { |
|
|
document.addEventListener("DOMContentLoaded", e => { |
|
|
document.querySelector("#load-button").addEventListener("click", e => { |
|
|
document.querySelector("#load-button").addEventListener("click", e => { |
|
|
@@ -74,11 +75,21 @@ document.addEventListener("DOMContentLoaded", e => { |
|
|
console.warn("That wasn't a valid radius: " + e.target.value); |
|
|
console.warn("That wasn't a valid radius: " + e.target.value); |
|
|
} |
|
|
} |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
document.querySelector("#softness").addEventListener("change", e => { |
|
|
|
|
|
try { |
|
|
|
|
|
softness = parseInt(e.target.value); |
|
|
|
|
|
} catch { |
|
|
|
|
|
console.warn("That wasn't a valid softness: " + e.target.value); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
// see if we have params already; if so, use them! |
|
|
// see if we have params already; if so, use them! |
|
|
|
|
|
|
|
|
const overlayImg = document.querySelector("#overlay-img"); |
|
|
const overlayImg = document.querySelector("#overlay-img"); |
|
|
const baseImg = document.querySelector("#base-img"); |
|
|
const baseImg = document.querySelector("#base-img"); |
|
|
|
|
|
const baseInput = document.querySelector("#base-url"); |
|
|
|
|
|
const overlayInput = document.querySelector("#overlay-url"); |
|
|
|
|
|
|
|
|
if (url.searchParams.has("base") && url.searchParams.has("overlay")) { |
|
|
if (url.searchParams.has("base") && url.searchParams.has("overlay")) { |
|
|
let baseURL = url.searchParams.get("base"); |
|
|
let baseURL = url.searchParams.get("base"); |
|
|
@@ -87,10 +98,12 @@ document.addEventListener("DOMContentLoaded", e => { |
|
|
baseImg.src = baseURL; |
|
|
baseImg.src = baseURL; |
|
|
overlayImg.src = overlayURL; |
|
|
overlayImg.src = overlayURL; |
|
|
|
|
|
|
|
|
|
|
|
baseInput.value = baseURL; |
|
|
|
|
|
overlayInput.value = overlayURL; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
load(); |
|
|
load(); |
|
|
} else { |
|
|
} else { |
|
|
const baseInput = document.querySelector("#base-url"); |
|
|
|
|
|
const overlayInput = document.querySelector("#overlay-url"); |
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
try { |
|
|
baseInput.value = localStorage.getItem("base"); |
|
|
baseInput.value = localStorage.getItem("base"); |
|
|
@@ -107,19 +120,34 @@ document.addEventListener("DOMContentLoaded", e => { |
|
|
} catch { |
|
|
} catch { |
|
|
console.warn("That was a bogus radius..."); |
|
|
console.warn("That was a bogus radius..."); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (url.searchParams.has("softness")) { |
|
|
|
|
|
try { |
|
|
|
|
|
softness = parseInt(url.searchParams.get("softness")); |
|
|
|
|
|
document.querySelector("#softness").value = softness; |
|
|
|
|
|
} catch { |
|
|
|
|
|
console.warn("That was a bogus softness..."); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
document.querySelector("#share-button").addEventListener("click", e => { |
|
|
document.querySelector("#share-button").addEventListener("click", e => { |
|
|
let shareURL = new URL(window.location); |
|
|
let shareURL = new URL(window.location); |
|
|
|
|
|
|
|
|
for (var key of shareURL.searchParams.keys()) { |
|
|
|
|
|
shareURL.searchParams.delete(key); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 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("base", baseImg.src); |
|
|
shareURL.searchParams.append("overlay", overlayImg.src); |
|
|
shareURL.searchParams.append("overlay", overlayImg.src); |
|
|
shareURL.searchParams.append("radius", radius); |
|
|
shareURL.searchParams.append("radius", radius); |
|
|
|
|
|
shareURL.searchParams.append("softness", softness); |
|
|
|
|
|
|
|
|
console.log(shareURL); |
|
|
console.log(shareURL); |
|
|
|
|
|
|
|
|
@@ -159,6 +187,9 @@ function setup() { |
|
|
const overlay = document.querySelector("#overlay"); |
|
|
const overlay = document.querySelector("#overlay"); |
|
|
const base = document.querySelector("#base"); |
|
|
const base = document.querySelector("#base"); |
|
|
|
|
|
|
|
|
|
|
|
overlay.classList.remove("hidden"); |
|
|
|
|
|
base.classList.remove("hidden"); |
|
|
|
|
|
|
|
|
const overlayImg = document.querySelector("#overlay-img"); |
|
|
const overlayImg = document.querySelector("#overlay-img"); |
|
|
const baseImg = document.querySelector("#base-img"); |
|
|
const baseImg = document.querySelector("#base-img"); |
|
|
|
|
|
|
|
|
@@ -199,7 +230,7 @@ function updateOverlay(points) { |
|
|
overlayCtx.ellipse(x, y, radius, radius, 0, 0, 2 * Math.PI); |
|
|
overlayCtx.ellipse(x, y, radius, radius, 0, 0, 2 * Math.PI); |
|
|
|
|
|
|
|
|
const gradient = overlayCtx.createRadialGradient(x, y, 0, x, y, radius); |
|
|
const gradient = overlayCtx.createRadialGradient(x, y, 0, x, y, radius); |
|
|
gradient.addColorStop(0.75, '#000000FF'); |
|
|
|
|
|
|
|
|
gradient.addColorStop((100-softness)/100, '#000000FF'); |
|
|
gradient.addColorStop(1, '#00000000'); |
|
|
gradient.addColorStop(1, '#00000000'); |
|
|
overlayCtx.fillStyle = gradient; |
|
|
overlayCtx.fillStyle = gradient; |
|
|
|
|
|
|
|
|
|