word edit: delete empty entries if confirmed
[sheet.git] / writer.js
1 document.addEventListener('DOMContentLoaded', () => {
2         let wpinput = document.getElementById('wptitle');
3         if (wpinput) {
4                 let wpbutton = wpinput.parentNode.appendChild(document.createElement('button'));
5                 wpbutton.type = 'button';
6                 wpbutton.append('Download');
7                 wpbutton.onclick = () => {
8                         let wptitle = wpinput.value || document.getElementById('form').value;
9                         let wplang = document.getElementById('lang').value;
10                         let wpapi = `https://${wplang}.wikipedia.org/w/api.php`;
11                         let wppage = wpapi+'?action=parse&format=json&origin=*&prop=text&page='+wptitle;
12                         fetch(wppage).then(res => res.json()).then(json => {
13                                 if (json.error) throw `error returned: ${json.error.info}`;
14                                 wpinput.value = json.parse.title;
15                                 let imginput = document.getElementById('source');
16                                 if (imginput.value) return;
17                                 let wpimages = json.parse.text['*'].match(/<img\s[^>]+>/g);
18                                 let wpselect = wpinput.parentNode.appendChild(document.createElement('ul'));
19                                 wpselect.className = 'popup';
20                                 wpimages.forEach(img => {
21                                         let selectitem = wpselect.appendChild(document.createElement('li'));
22                                         selectitem.insertAdjacentHTML('beforeend', img);
23                                         selectitem.onclick = e => {
24                                                 let imgsrc = e.target.src
25                                                         .replace(/^(?=\/\/)/, 'https:')
26                                                         .replace(/\/thumb(\/.+)\/[^\/]+$/, '$1');
27                                                 imginput.value = imgsrc;
28                                                 wpselect.remove();
29                                                 return false;
30                                         };
31                                 });
32                         }).catch(error => alert(error));
33                         return false;
34                 };
35                 wpbutton = wpinput.parentNode.appendChild(document.createElement('button'));
36                 wpbutton.type = 'button';
37                 wpbutton.append('Visit');
38                 wpbutton.onclick = () => {
39                         let wptitle = wpinput.value || document.getElementById('form').value;
40                         let wplang = document.getElementById('lang').value;
41                         let wpurl = `https://${wplang}.wikipedia.org/wiki/${wptitle}`;
42                         window.open(wpurl, 'sheet-wikipedia').focus();
43                         return false;
44                 };
45         }
46
47         let imgpreview = document.getElementById('sourcepreview');
48         if (imgpreview) {
49                 let imginput = document.getElementById('source');
50                 imginput.parentNode.parentNode.append(imgpreview); // separate row
51                 let previewbutton = imginput.parentNode.appendChild(document.createElement('button'));
52                 previewbutton.type = 'button';
53                 previewbutton.append('View');
54                 previewbutton.onclick = () => {
55                         previewbutton.childNodes[0].nodeValue = imgpreview.hidden ? 'Hide' : 'View';
56                         imgpreview.hidden = !imgpreview.hidden;
57                 };
58         }
59
60         let translist = document.getElementById('trans');
61         if (translist) {
62                 let transadd = translist.appendChild(document.createElement('li'));
63                 let transselect = transadd.appendChild(document.createElement('select'));
64                 transselect.appendChild(document.createElement('option'));
65                 for (let langoption of document.getElementById('lang').options) {
66                         if (document.getElementById('trans-'+langoption.value)) continue;
67                         let transoption = document.createElement('option');
68                         transoption.value = langoption.value;
69                         transoption.append(langoption.label);
70                         transselect.appendChild(transoption);
71                 }
72                 transselect.onchange = e => {
73                         let inputlang = e.target.selectedOptions[0];
74                         let transadded = translist.insertBefore(document.createElement('li'), transadd);
75                         let translabel = transadded.appendChild(document.createElement('label'));
76                         translabel.append(inputlang.label.replace(/ (.+)/, ' ')); //TODO title = $1
77                         let transinput = transadded.appendChild(document.createElement('input'));
78                         transinput.name = 'trans-'+inputlang.value;
79                         translabel.setAttribute('for', transinput.id = transinput.name);
80                         inputlang.remove();
81                         if (e.target.length <= 1) e.target.remove();
82                         transinput.focus();
83                 };
84         }
85 });