From 5fa0783df4a5a8be7a01fcf9e22c8c2e3a5eb803 Mon Sep 17 00:00:00 2001 From: Nicholas Jitkoff Date: Sun, 7 Aug 2022 13:27:01 -0700 Subject: [PATCH] Wakelock attempt --- docs/index.js | 35 ++++++++++++++++++++++++++++++++--- docs/render/recipe.js | 19 ++++++++++--------- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/docs/index.js b/docs/index.js index b93ac22..203b44b 100644 --- a/docs/index.js +++ b/docs/index.js @@ -108,14 +108,43 @@ let wakeLock; const getWakeLock = async () => { try { - wakeLock = await navigator.wakeLock.request(); - wakeLock.addEventListener('release', () => {}); - console.log('Keeping Screen Awake:', !wakeLock.released); + if (navigator.wakeLock) { + wakeLock = await navigator.wakeLock.request(); + wakeLock.addEventListener('release', () => {}); + console.log('Keeping Screen Awake:', !wakeLock.released); + } else { + // keepAwake(); + } } catch (err) { console.error(`${err.name}, ${err.message}`); } }; + function keepAwake() { + let ctx = new AudioContext(); + + let bufferSize = 2 * ctx.sampleRate, + emptyBuffer = ctx.createBuffer(1, bufferSize, ctx.sampleRate), + output = emptyBuffer.getChannelData(0); + + for(let i = 0; i < bufferSize; i++) output[i] = 0; + + let source = ctx.createBufferSource(); + source.buffer = emptyBuffer; + source.loop = true; + + let node = ctx.createMediaStreamDestination(); + source.connect(node); + + let audio = document.createElement("audio"); + audio.style.display = "none"; + document.body.appendChild(audio); + + audio.srcObject = node.stream; + audio.play(); + } + + const handleVisibilityChange = async () => { if (wakeLock !== null && document.visibilityState === 'visible') { await getWakeLock(); diff --git a/docs/render/recipe.js b/docs/render/recipe.js index 9dd4653..2bd23c0 100644 --- a/docs/render/recipe.js +++ b/docs/render/recipe.js @@ -532,7 +532,7 @@ function render() { // thumbnail.style.transform = `scale(1.1)`; setTimeout(() => thumbnail.style.opacity = 1.0, 0); if (window.scrollY == 0) setTimeout(() => { - const yOffset = -10; + const yOffset = -20; const element = document.querySelector('.recipe-content'); const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; window.scrollTo({top: y, behavior: 'smooth'}); @@ -554,7 +554,7 @@ function render() { ), m(".headerflex", m(".headerleft", - m("h1", title), + m("h1", {onclick:keepAwake}, title), m(".metadata", (recipeYield) ? m("div", m("span.yield", m(".icon.servings", {innerHTML:icons.servings}), recipeYield)) : null, json.totalTime ? m(".time", @@ -610,14 +610,9 @@ function render() { ) } -var path = window.script.substring(0, window.script.lastIndexOf(".")); -var cssURL = path + ".css"; -loadSyle(cssURL).then(render); - - - function keepAwake() { - let ctx = null; + let ctx = new AudioContext(); + let bufferSize = 2 * ctx.sampleRate, emptyBuffer = ctx.createBuffer(1, bufferSize, ctx.sampleRate), output = emptyBuffer.getChannelData(0); @@ -637,4 +632,10 @@ function keepAwake() { audio.srcObject = node.stream; audio.play(); + console.log("playing", audio) } + + +var path = window.script.substring(0, window.script.lastIndexOf(".")); +var cssURL = path + ".css"; +loadSyle(cssURL).then(render); \ No newline at end of file