Spaces:
Sleeping
Sleeping
| (function () { | |
| "use strict"; | |
| const form = document.getElementById("study-form"); | |
| if (!form) return; | |
| const startedAt = performance.now(); | |
| const responseTime = document.getElementById("response-time-ms"); | |
| const audioPlayed = document.getElementById("audio-played-ms"); | |
| const audioCompleted = document.getElementById("audio-completed"); | |
| const audio = document.getElementById("answer-audio"); | |
| let playedMs = 0; | |
| let playStartedAt = null; | |
| if (audio) { | |
| audio.addEventListener("play", () => { playStartedAt = performance.now(); }); | |
| const accumulate = () => { | |
| if (playStartedAt !== null) { | |
| playedMs += performance.now() - playStartedAt; | |
| playStartedAt = null; | |
| audioPlayed.value = String(Math.round(playedMs)); | |
| } | |
| }; | |
| audio.addEventListener("pause", accumulate); | |
| audio.addEventListener("ended", () => { | |
| accumulate(); | |
| audioCompleted.value = "1"; | |
| }); | |
| } | |
| function wireScale(id, outputId) { | |
| const input = document.getElementById(id); | |
| const output = document.getElementById(outputId); | |
| const touched = document.getElementById(id + "-touched"); | |
| if (!input || !output) return; | |
| const activate = () => { | |
| if (touched) touched.value = "1"; | |
| output.value = input.value; | |
| }; | |
| input.addEventListener("pointerdown", activate, { once: true }); | |
| input.addEventListener("keydown", activate, { once: true }); | |
| input.addEventListener("input", () => { output.value = input.value; }); | |
| } | |
| wireScale("gate-confidence", "gate-confidence-output"); | |
| wireScale("responsiveness", "responsiveness-output"); | |
| wireScale("confidence", "confidence-output"); | |
| const eligible = new Set(["substantive_answer_attempt", "explicit_disclosure_boundary"]); | |
| const responsivenessSection = document.getElementById("responsiveness-section"); | |
| const deliverySection = document.getElementById("delivery-section"); | |
| const audioRevisionSection = document.getElementById("audio-revision-section"); | |
| document.querySelectorAll('input[name="gate"]').forEach((radio) => { | |
| radio.addEventListener("change", () => { | |
| const show = eligible.has(radio.value); | |
| responsivenessSection.classList.toggle("hidden", !show); | |
| deliverySection.classList.toggle("hidden", !show); | |
| if (audioRevisionSection) audioRevisionSection.classList.toggle("hidden", !show); | |
| }); | |
| }); | |
| const audibleEvent = document.getElementById("audible-event"); | |
| const audibleOther = document.getElementById("audible-event-other"); | |
| if (audibleEvent) { | |
| audibleEvent.addEventListener("change", () => { | |
| audibleOther.classList.toggle("hidden", audibleEvent.value !== "other"); | |
| }); | |
| } | |
| const flagToggle = document.getElementById("flag-toggle"); | |
| const flagPanel = document.getElementById("flag-panel"); | |
| flagToggle.addEventListener("click", () => flagPanel.classList.toggle("hidden")); | |
| form.addEventListener("submit", () => { | |
| if (playStartedAt !== null) { | |
| playedMs += performance.now() - playStartedAt; | |
| playStartedAt = performance.now(); | |
| } | |
| audioPlayed.value = String(Math.round(playedMs)); | |
| responseTime.value = String(Math.round(performance.now() - startedAt)); | |
| }); | |
| })(); | |