word/edit: croppie js thumbnail selection interface
[sheet.git] / word / editor.js
index da403b2217ad31c75178ea6cb1cc958cf7f2d1f1..aeab4cc70bd6d14ecde326d4a40fd972bd5d2f07 100644 (file)
@@ -31,7 +31,9 @@ document.addEventListener('DOMContentLoaded', () => {
                                let transrow = document.getElementById('trans-la');
                                if (transrow && !transrow.value && wptext) {
                                        const binom = wptext.match(/ class="binomial">.*?<i>(.*?)<\/i>/);
-                                       transrow.value = binom[1]
+                                       if (binom) {
+                                               transrow.value = binom[1]
+                                       }
                                }
 
                                // translations from language links
@@ -105,23 +107,26 @@ document.addEventListener('DOMContentLoaded', () => {
        let thumbpreview = document.getElementById('convertpreview');
        if (thumbpreview && imgpreview) {
                thumbpreview.onclick = e => {
-                       let imgselect = imgpreview; /* TODO clone */
-                       imgselect.hidden = false;
-                       imgselect.classList.add('popup');
-                       imgselect.onmousemove = e => {
-                               let border = imgselect.getBoundingClientRect();
-                               let pos = [
-                                       Math.round(1000 * (e.clientX - border.x) / border.width),
-                                       Math.round(1000 * (e.clientY - border.y) / border.height)
-                               ];
-                               return pos;
-                       };
-                       imgselect.onclick = e => {
-                               let imgoption = document.getElementById('convert');
-                               imgoption.value += (imgoption.value && '-') + imgselect.onmousemove(e);
-                               imgselect.hidden = true;
-                               imgselect.classList.remove('popup');
-                       };
+                       const cropinput = document.getElementById('crop32');
+                       let border = { width: 600, height: 400 };
+                       let crop = new Croppie(thumbpreview, {
+                               boundary: { width: border.width * 1.3, height: border.height * 1.2 },
+                               viewport: border,
+                               update: e => {
+                                       cropinput.value = e.points.map((pos, axis) => {
+                                               Math.round(1000 * pos / (axis % 2 ? border.height : border.width))
+                                       }).join(',');
+                               },
+                       });
+                       crop.bind({
+                               url: imgpreview.src,
+                               points: cropinput.value.split(/[^0-9]/).map((rel, axis) => {
+                                       return rel * (axis % 2 ? border.height : border.width) / 1000
+                               }),
+                       });
+                       crop.elements.overlay.addEventListener('dblclick', e => {
+                               crop.destroy();
+                       });
                };
        }