moth/example-puzzles/example/5/helpers.js

92 lines
2.2 KiB
JavaScript
Raw Permalink Normal View History

2019-02-26 16:52:23 -07:00
// jshint asi:true
2019-02-24 15:51:40 -07:00
function helperUpdateAnswer(event) {
let e = event.currentTarget
let value = e.value
let inputs = e.querySelectorAll("input")
if (inputs.length > 0) {
// If there are child input nodes, join their values with commas
let values = []
for (let c of inputs) {
if (c.type == "checkbox") {
if (c.checked) {
values.push(c.value)
}
} else {
values.push(c.value)
}
}
if (e.classList.contains("sort")) {
values.sort()
}
let join = e.dataset.join
if (join === undefined) {
join = ","
}
value = values.join(join)
2019-02-24 15:51:40 -07:00
}
// First make any adjustments to the value
if (e.classList.contains("lower")) {
value = value.toLowerCase()
}
if (e.classList.contains("upper")) {
value = value.toUpperCase()
}
2019-02-26 16:52:23 -07:00
let answer = document.querySelector("#answer")
answer.value = value
answer.dispatchEvent(new InputEvent("input"))
2019-02-24 15:51:40 -07:00
}
function helperRemoveInput(e) {
let item = e.target.parentElement
2019-04-10 14:08:33 -06:00
let container = item.parentElement
item.remove()
2019-04-10 14:08:33 -06:00
var event = new Event("input")
container.dispatchEvent(event)
}
function helperExpandInputs(e) {
let item = e.target.parentElement
let container = item.parentElement
let template = container.firstElementChild
let newElement = template.cloneNode(true)
// Add remove button
let remove = document.createElement("button")
remove.innerText = ""
remove.title = "Remove this input"
remove.addEventListener("click", helperRemoveInput)
newElement.appendChild(remove)
// Zero it out, otherwise whatever's in first element is copied too
newElement.querySelector("input").value = ""
container.insertBefore(newElement, item)
2019-04-10 14:08:33 -06:00
var event = new Event("input")
container.dispatchEvent(event)
}
2019-02-24 15:51:40 -07:00
function helperActivate(e) {
e.addEventListener("input", helperUpdateAnswer)
for (let exp of e.querySelectorAll(".expand")) {
exp.addEventListener("click", helperExpandInputs)
}
2019-02-24 15:51:40 -07:00
}
function helperInit(event) {
for (let e of document.querySelectorAll(".answer")) {
helperActivate(e)
}
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", helperInit);
} else {
helperInit();
}