Difference between revisions of "Widget:DataExporter"

From LINKS Community Center
Jump to: navigation, search
Line 22: Line 22:
  
 
                 // Check user.
 
                 // Check user.
                 const usrData = await fetch('/api.php?action=query&meta=userinfo&format=json').then(rsp => rsp.json());
+
                 const usrData = await fetch(
 +
                    '/api.php?action=query&meta=userinfo&format=json'
 +
                ).then(rsp => rsp.json());
 
                 if (!permittedUsers.includes(usrData?.query?.userinfo?.name)) {
 
                 if (!permittedUsers.includes(usrData?.query?.userinfo?.name)) {
 
                     output.innerHTML = '<span style="color:red; font-size:large">Access Denied</span>';
 
                     output.innerHTML = '<span style="color:red; font-size:large">Access Denied</span>';
Line 31: Line 33:
  
 
                 // Fetch schema and parse it into an export query.
 
                 // Fetch schema and parse it into an export query.
                 const schemaParams = new URLSearchParams();
+
                 const schemaXml = await fetch(
                schemaParams.set('action', 'raw');
+
                    '/index.php?&action=raw&title=Category:' + formData.get('library')
                schemaParams.set('title', 'Category:' + formData.get('library'));
+
                 ).then(rsp => rsp.text());
                 const schemaXml = await fetch('/index.php?' + schemaParams.toString()).then(rsp => rsp.text());
 
 
                 const schema = (new DOMParser).parseFromString(schemaXml, 'text/xml');
 
                 const schema = (new DOMParser).parseFromString(schemaXml, 'text/xml');
  
                 let exportUrl = '[[Category:' + formData.get('library').replaceAll('_', ' ') + ']]';
+
                 let exportUrl = encodeURIComponent(
 +
                    '[[Category:' + formData.get('library').replaceAll('_', ' ') + ']]'
 +
                ).replaceAll('%', '-');
  
 
                 for (const field of schema.querySelectorAll('Field')) {
 
                 for (const field of schema.querySelectorAll('Field')) {
Line 43: Line 46:
 
                         || field.getAttribute('name');
 
                         || field.getAttribute('name');
 
                     const label = field.querySelector('Label')?.textContent;
 
                     const label = field.querySelector('Label')?.textContent;
                     exportUrl += '|?' + prop;
+
                     exportUrl += encodeURIComponent('/?' + prop).replaceAll('%', '-');
                     if (!!label) exportUrl += '=' + label;
+
                     if (!!label) exportUrl += '%3D' + encodeURIComponent(label).replaceAll('%', '-');
                    // exportUrl += '<br>';
 
                    // output.innerHTML += prop + ' | ' + label + '<br>';
 
 
                 }
 
                 }
 +
 +
                exportUrl += '/format%3Dspreadsheet/fileformat%3D' + formData.get('fileformat');
 
                 output.innerHTML = exportUrl;
 
                 output.innerHTML = exportUrl;
  
                 const exportParams = new URLSearchParams();
+
                 // const exportParams = new URLSearchParams();
                 exportParams.set('action', 'ask');
+
                 // exportParams.set('action', 'ask');
                 exportParams.set('format', 'spreadsheet');
+
                 // exportParams.set('format', 'spreadsheet');
                 exportParams.set('fileformat', formData.get('fileformat'));
+
                 // exportParams.set('fileformat', formData.get('fileformat'));
                 exportParams.set('query', encodeURIComponent(exportUrl));
+
                 // exportParams.set('query', encodeURIComponent(exportUrl));
  
 
                 // fetch('/api.php?' + exportParams.toString());
 
                 // fetch('/api.php?' + exportParams.toString());
  
 
                 const dl = document.createElement('a');
 
                 const dl = document.createElement('a');
                 dl.href = '/api.php?' + exportParams.toString();
+
                 dl.href = '/index.php/Special:Ask/' + exportUrl;
 
                 dl.download = 'export.' + formData.get('fileformat');
 
                 dl.download = 'export.' + formData.get('fileformat');
 
                 document.body.appendChild(dl);
 
                 document.body.appendChild(dl);

Revision as of 13:18, 17 August 2023