'use strict' const web = {}; web._header = new Headers({ 'content-type' : 'application/json' }) web.frame = function () { const opts = { method : 'POST', headers : web._header }; fetch('/frame', opts) .then(res => { return res.json() }) .then(web.frameSuccess) .catch(err => { console.error('Error triggering frame') console.error(err) }); } web.frameSuccess = function (res) { document.getElementById('frame').blur(); console.log(`Frame ${res.dir ? 'forward' : 'backward'} took ${res.len}ms`) if (res.dir === true) { incCounter(1); } else { incCounter(-1); } }; web.setDir = function () { const dir = !document.getElementById('dir').checked; const opts = { method : 'POST', headers : web._header, body : JSON.stringify({ dir : dir }) }; fetch('/dir', opts) .then(res => { return res.json() }) .then(web.setDirSuccess) .catch(err => { console.error('Error setting direction') console.error(err); }); }; web.setDirSuccess = function (res) { STATE.dir = res.dir; setDirLabel(res.dir); console.log(`setDir to ${res.dir}`); }; web.getState = function () { const opts = { method : 'GET' } fetch('/status', opts) .then(res => { return res.json(); }) .then(setState) .catch(err => { console.error('Error getting state'); console.error(err); }); }; web.setExposure = function () { let exposure = document.getElementById('exposure').value; let scaledExposure; let opts if (exposure === '' || exposure === null) { exposure = 0; } scaledExposure = scaleTime(exposure, STATE.scale); opts = { method : 'POST', headers : web._header, body : JSON.stringify({ exposure : scaledExposure }) } fetch('/exposure', opts) .then(web.useJson) .then(web.setExposureSuccess) .catch(err => { console.error('Error setting exposure'); console.error(err); }); }; web.setExposureSuccess = function (res) { let exposure; if (res.exposure < BOLEX.expected) { res.exposure = BOLEX.expected; } STATE.exposure = res.exposure; exposure = shutter(STATE.exposure); document.getElementById('str').innerHTML = exposure.str; console.log(`setExposure to ${res.exposure}`); }; web.setDelay = function () { const delay = document.getElementById('delay').value; const scaledDelay = scaleTime(delay, STATE.delayScale) let opts = { method : 'POST', headers : web._header, body : JSON.stringify({ delay : scaledDelay }) } fetch('/delay', opts) .then(web.useJson) .then(web.setDelaySuccess) .catch(err => { console.error('Error setting delay'); console.error(err); }) }; web.setDelaySuccess = function (res) { STATE.delay = res.delay; console.log(`setDelay to ${res.delay}`); }; web.setCounter = function () { const counter = document.getElementById('counter').value; const change = prompt(`Change counter value?`, counter); if (change === null || !isNumeric(change)) return false; const opts = { method : 'POST', headers : web._header, body : JSON.stringify({ counter : change }) } fetch('/counter', opts) .then(web.useJson) .then(web.setCounterSuccess) .catch(err => { console.error('Error setting counter'); console.error(err); }) }; web.setCounterSuccess = function (res) { STATE.counter = res.counter; forceCounter(res.counter); console.log(`setCounter to ${res.counter}`); }; web.sequence = function () { const opts = { method : 'POST', headers : web._header, body : JSON.stringify({}) } fetch('/sequence', opts) .then(web.useJson) .then(web.sequenceSuccess) .catch(err => { console.error('Error getting /sequence'); console.error(err); }) }; web.sequenceSuccess = function (res) { if (res.started && res.started != false) { STATE.sequence = true; document.getElementById('seq').focus(); seqState(true); } else if (res.stopped) { STATE.sequence = false; document.getElementById('seq').blur(); seqState(false); mobile.getState(); } }; web.advanced = function () { const len = parseInt(document.getElementById('len').value); const multiple = parseInt(document.getElementById('multiple').value); const params = { len, multiple } const opts = { method : 'POST', headers : web._header, body : JSON.stringify(params) } if (!params.len) { return alert('You must set a total frame count.'); } if (!params.multiple) { return alert('You must set a frame multiple value.'); } fetch('/sequence', opts) .then(web.useJson) .then(web.advancedSuccess) .catch(err => { console.error('Error getting /sequence'); console.error(err); }) }; web.advancedSuccess = function (res) { if (res.started && res.started != false) { STATE.sequence = true; document.getElementById('seq').focus(); seqState(true); } else if (res.stopped) { STATE.sequence = false; document.getElementById('seq').blur(); seqState(false); getState(); } setTimeout(() => { console.log('Sequence complete'); getState(); setTimeout(() => { if (STATE.sequence) { seqState(true); } else { seqState(false); } }, 42); }, STATE.advanced + 1000); }; web.reset = function () { const opts = { method : 'POST', headers : web._header, body : JSON.stringify({}) } const proceed = confirm(`Reset INTVAL3 to default settings and clear counter?`); if (!proceed) return false fetch('/reset', opts) .then(web.useJson) .then(setState) .catch(err => { console.error('Error posting to /reset'); console.error(err); }) }; web.restart = function () { const opts = { method : 'POST', headers : web._header, body : JSON.stringify({}) } const proceed = confirm(`Restart the INTVAL3? You will be disconnected from it during this process.`); if (!proceed) return false; fetch('/restart', opts) .then(web.useJson) .then(web.restartSuccess) .catch(err => { console.error('Error posting to /restart'); console.error(err); }) }; web.restartSuccess = function (res) { console.dir(res) }; web.update = function () { const opts = { method : 'POST', headers : web._header, body : JSON.stringify({}) } const proceed = confirm(`Check for updates? You will be disconnected from the INTVAL3 during this process.`); if (!proceed) return false; fetch('/update', opts) .then(web.useJson) .then(web.updateSuccess) .catch(err => { console.error('Error posting to /update'); console.error(err); }) }; web.updateSuccess = function (res) { console.dir(res) }; web.useJson = function (res) { return res.json(); }; web.init = function () { window.frame = web.frame; window.getState = web.getState; window.setDir = web.setDir; window.setDelay = web.setDelay; window.setExposure = web.setExposure; window.setCounter = web.setCounter; window.sequence = web.sequence; window.reset = web.reset; window.restart = web.restart; window.update = web.update; window.advanced = web.advanced; console.log('started web') };