word/edit: croppie js thumbnail selection interface
[sheet.git] / word / editor.js
index cee26ac1e9a4aafe01f06f0679719d2f4f62b452..aeab4cc70bd6d14ecde326d4a40fd972bd5d2f07 100644 (file)
@@ -107,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();
+                       });
                };
        }