- commit
- cc5dc795aab71199b6a4e01ae518549dcac808f4
- parent
- e716e076f2caad416e3ccd7f65e180da3069d282
- author
- Dami <dami.etoile@gmail.com>
| M | app.mjs | 9 | +++++---- |
| M | home.mjs | 1 | + |
| M | perspective.html | 1 | + |
@@ -71,7 +71,7 @@ async function detect(){
7171 try{7272 const a=pixels(scaledCanvas(original,960)),start=performance.now();7373 const result=await rpc('detect',{...a},[a.pixels.buffer]);74- lines=result.lines;analysisSize={w:result.w,h:result.h};hasDetected=true;showLines=true;74+ lines=result.lines;analysisSize={w:result.w,h:result.h};hasDetected=true;showLines=true;$('show-lines').checked=true;7575 let v=0,h=0,rejected=0,other=0;7676 for(let i=4;i<lines.length;i+=6){const t=lines[i];if(!(t&1))other++;else if(!(t&4))rejected++;else if(t&2)v++;else h++;}7777 $('line-count').textContent=`${v+h} lines`;@@ -97,7 +97,8 @@ function scheduleRender(){updateLabels();clearTimeout(renderTimer);renderTimer=s
9797 9898 $('detect').onclick=detect;fitButtons.forEach(b=>b.onclick=()=>fit(Number(b.dataset.mode)));9999 $('rotation').oninput=scheduleRender;$('strength').oninput=scheduleRender;100-$('lines').onclick=()=>{showLines=!showLines;syncControls();drawOverlay();};100+function setLines(v){showLines=v;$('show-lines').checked=v;syncControls();drawOverlay();}101+$('lines').onclick=()=>setLines(!showLines);$('show-lines').onchange=()=>setLines($('show-lines').checked);101102 $('guides').onclick=()=>{showGuides=!showGuides;syncControls();drawOverlay();};102103 $('show-rejected').onchange=drawOverlay;103104 $('compare').onclick=()=>{showBefore=!showBefore;draw();};@@ -115,7 +116,7 @@ stage.addEventListener('dragleave',()=>zone.classList.remove('over'));
115116 stage.addEventListener('drop',e=>{e.preventDefault();zone.classList.remove('over');const file=e.dataTransfer.files[0];if(file)openFile(file);});116117 117118 // Sheets118-function sheet(id){const d=$(id);d.onclick=e=>{if(e.target===d||e.target.closest('[data-close]'))d.close();};return d;}119+function sheet(id){const d=$(id);for(const b of d.querySelectorAll('[data-close]'))b.onclick=()=>d.close();d.addEventListener('click',e=>{if(e.target===d)d.close();});return d;}119120 const cropSheet=sheet('crop-sheet'),saveSheet=sheet('save-sheet'),linesSheet=sheet('lines-sheet');120121 function syncCrop(){for(const b of cropSheet.querySelectorAll('[data-crop]'))b.setAttribute('aria-checked',String(b.dataset.crop===cropMode));}121122 $('crop').onclick=()=>cropSheet.showModal();@@ -152,6 +153,6 @@ async function save(format){
152153 }catch(e){status(e.message,true);}finally{setBusy(false);}153154 }154155 new ResizeObserver(drawOverlay).observe(canvas);155-if('serviceWorker'in navigator)navigator.serviceWorker.register('./sw.js').catch(()=>{});156+if('serviceWorker'in navigator){navigator.serviceWorker.register('./sw.js').catch(()=>{});let hadController=Boolean(navigator.serviceWorker.controller);navigator.serviceWorker.addEventListener('controllerchange',()=>{if(hadController&&!original)location.reload();hadController=true;});}156157 syncCrop();157158 try{await rpc('init');}catch(e){status(e.message,true);}finally{setBusy(false);}@@ -11,5 +11,6 @@ $('about').onclick=()=>$('info').showModal();
1111 $('close-info').onclick=()=>$('info').close();1212 $('info').onclick=e=>{if(e.target===$('info'))$('info').close();};1313 if('serviceWorker'in navigator){14+ let hadController=Boolean(navigator.serviceWorker.controller);navigator.serviceWorker.addEventListener('controllerchange',()=>{if(hadController)location.reload();hadController=true;});1415 navigator.serviceWorker.register('./sw.js').then(async()=>{await navigator.serviceWorker.ready;$('offline-status').textContent='Works offline.';}).catch(()=>{});1516 }@@ -88,6 +88,7 @@
8888 <div class="sheet-head"><h2 id="lines-title">Lines</h2><button class="sheet-close" data-close>Done</button></div>8989 <div class="counts" id="debug-counts"></div>9090 <div class="legend"><span><i class="lv"></i>Vertical, used</span><span><i class="lh"></i>Horizontal, used</span><span><i class="lr"></i>Vertical, rejected</span><span><i class="ly"></i>Horizontal, rejected</span><span><i class="lg"></i>Other edges</span></div>91+ <label class="switch-row"><span>Show lines</span><input id="show-lines" class="switch" type="checkbox" checked></label>9192 <label class="switch-row"><span>Show rejected</span><input id="show-rejected" class="switch" type="checkbox" checked></label>9293 </div>9394 </dialog>