word edit: delete empty entries if confirmed
[sheet.git] / writer.js
index e21b6849e2a59db9ef7b6d641bfff6a2a38077d5..80ba7b8969c27b59fed3f21eb68686e9a905ffec 100644 (file)
--- a/writer.js
+++ b/writer.js
@@ -1,40 +1,53 @@
 document.addEventListener('DOMContentLoaded', () => {
-       var wpinput = document.getElementById('wptitle');
-       var wpbutton = wpinput.parentNode.appendChild(document.createElement('button'));
-       wpbutton.type = 'button';
-       wpbutton.append('Copy');
-       wpbutton.onclick = () => {
-               let wptitle = wpinput.value || document.getElementById('form').value;
-               let wplang = document.getElementById('lang').value.substr(0, 2); // crude iso-639-3→2
-               let wpapi = `https://${wplang}.wikipedia.org/w/api.php`;
-               let wppage = wpapi+'?action=parse&format=json&origin=*&prop=text&page='+wptitle;
-               fetch(wppage).then(res => res.json()).then(json => {
-                       if (json.error) throw `error returned: ${json.error.info}`;
-                       wpinput.value = json.parse.title;
-                       let imginput = document.getElementById('source');
-                       if (imginput.value) return;
-                       let wpimages = json.parse.text['*'].match(/<img\s[^>]+>/g);
-                       let wpselect = wpinput.parentNode.appendChild(document.createElement('ul'));
-                       wpselect.className = 'popup';
-                       wpimages.forEach(img => {
-                               let selectitem = wpselect.appendChild(document.createElement('li'));
-                               selectitem.insertAdjacentHTML('beforeend', img);
-                               selectitem.onclick = e => {
-                                       let imgsrc = e.target.src
-                                               .replace(/^(?=\/\/)/, 'https:')
-                                               .replace(/\/thumb(\/.+)\/[^\/]+$/, '$1');
-                                       imginput.value = imgsrc;
-                                       wpselect.remove();
-                                       return false;
-                               };
-                       });
-               }).catch(error => alert(error));
-               return false;
-       };
+       let wpinput = document.getElementById('wptitle');
+       if (wpinput) {
+               let wpbutton = wpinput.parentNode.appendChild(document.createElement('button'));
+               wpbutton.type = 'button';
+               wpbutton.append('Download');
+               wpbutton.onclick = () => {
+                       let wptitle = wpinput.value || document.getElementById('form').value;
+                       let wplang = document.getElementById('lang').value;
+                       let wpapi = `https://${wplang}.wikipedia.org/w/api.php`;
+                       let wppage = wpapi+'?action=parse&format=json&origin=*&prop=text&page='+wptitle;
+                       fetch(wppage).then(res => res.json()).then(json => {
+                               if (json.error) throw `error returned: ${json.error.info}`;
+                               wpinput.value = json.parse.title;
+                               let imginput = document.getElementById('source');
+                               if (imginput.value) return;
+                               let wpimages = json.parse.text['*'].match(/<img\s[^>]+>/g);
+                               let wpselect = wpinput.parentNode.appendChild(document.createElement('ul'));
+                               wpselect.className = 'popup';
+                               wpimages.forEach(img => {
+                                       let selectitem = wpselect.appendChild(document.createElement('li'));
+                                       selectitem.insertAdjacentHTML('beforeend', img);
+                                       selectitem.onclick = e => {
+                                               let imgsrc = e.target.src
+                                                       .replace(/^(?=\/\/)/, 'https:')
+                                                       .replace(/\/thumb(\/.+)\/[^\/]+$/, '$1');
+                                               imginput.value = imgsrc;
+                                               wpselect.remove();
+                                               return false;
+                                       };
+                               });
+                       }).catch(error => alert(error));
+                       return false;
+               };
+               wpbutton = wpinput.parentNode.appendChild(document.createElement('button'));
+               wpbutton.type = 'button';
+               wpbutton.append('Visit');
+               wpbutton.onclick = () => {
+                       let wptitle = wpinput.value || document.getElementById('form').value;
+                       let wplang = document.getElementById('lang').value;
+                       let wpurl = `https://${wplang}.wikipedia.org/wiki/${wptitle}`;
+                       window.open(wpurl, 'sheet-wikipedia').focus();
+                       return false;
+               };
+       }
 
        let imgpreview = document.getElementById('sourcepreview');
        if (imgpreview) {
                let imginput = document.getElementById('source');
+               imginput.parentNode.parentNode.append(imgpreview); // separate row
                let previewbutton = imginput.parentNode.appendChild(document.createElement('button'));
                previewbutton.type = 'button';
                previewbutton.append('View');
@@ -43,4 +56,30 @@ document.addEventListener('DOMContentLoaded', () => {
                        imgpreview.hidden = !imgpreview.hidden;
                };
        }
+
+       let translist = document.getElementById('trans');
+       if (translist) {
+               let transadd = translist.appendChild(document.createElement('li'));
+               let transselect = transadd.appendChild(document.createElement('select'));
+               transselect.appendChild(document.createElement('option'));
+               for (let langoption of document.getElementById('lang').options) {
+                       if (document.getElementById('trans-'+langoption.value)) continue;
+                       let transoption = document.createElement('option');
+                       transoption.value = langoption.value;
+                       transoption.append(langoption.label);
+                       transselect.appendChild(transoption);
+               }
+               transselect.onchange = e => {
+                       let inputlang = e.target.selectedOptions[0];
+                       let transadded = translist.insertBefore(document.createElement('li'), transadd);
+                       let translabel = transadded.appendChild(document.createElement('label'));
+                       translabel.append(inputlang.label.replace(/ (.+)/, ' ')); //TODO title = $1
+                       let transinput = transadded.appendChild(document.createElement('input'));
+                       transinput.name = 'trans-'+inputlang.value;
+                       translabel.setAttribute('for', transinput.id = transinput.name);
+                       inputlang.remove();
+                       if (e.target.length <= 1) e.target.remove();
+                       transinput.focus();
+               };
+       }
 });