Browse Source

Add softness; hide some options before loading; fix duplicate params

master
Fen Dweller 5 years ago
parent
commit
e92a71c604
3 changed files with 57 additions and 13 deletions
  1. +9
    -0
      xray.css
  2. +8
    -4
      xray.html
  3. +40
    -9
      xray.js

+ 9
- 0
xray.css View File

@@ -2,6 +2,10 @@ canvas {
position: absolute; position: absolute;
} }


canvas.hidden {
display: none;
}

img { img {
display: none; display: none;
} }
@@ -14,10 +18,15 @@ img {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
transition: 0.5s; transition: 0.5s;
flex-wrap: wrap;
} }


#menu.start input, #menu.start input,
#menu.start button, #menu.start button,
#menu.start label { #menu.start label {
font-size: 36pt; font-size: 36pt;
}

#menu.start .nostart {
display: none;
} }

+ 8
- 4
xray.html View File

@@ -23,15 +23,19 @@
<input type="text" id="overlay-url" placeholder="URL for overlay image"> <input type="text" id="overlay-url" placeholder="URL for overlay image">
</label> </label>
<button id="load-button">Load</button> <button id="load-button">Load</button>
<label>
<label class="nostart">
Radius: Radius:
<input type="number" id="radius" placeholder="200" value="200"> <input type="number" id="radius" placeholder="200" value="200">
</label> </label>
<button id="share-button">Share</button>
<label class="nostart">
Softness:
<input type="range" id="softness" min="0" max="100" value="25">
</label>
<button id="share-button" class="nostart">Share</button>
</div> </div>
<canvas id="overlay"></canvas>
<canvas id="base"></canvas>
<canvas class="hidden" id="overlay"></canvas>
<canvas class="hidden" id="base"></canvas>
<img id="overlay-img" src="overlay.png"> <img id="overlay-img" src="overlay.png">
<img id="base-img" src="base.png"> <img id="base-img" src="base.png">
</body> </body>

+ 40
- 9
xray.js View File

@@ -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;


Loading…
Cancel
Save