const form = document.getElementById('fetchmedia_form'); function* flattenLinks(data) { yield* Object.entries(data).reduce((carry, [page, links]) => { const flatLinks = links.map(link => [page, link]); return carry.concat(flatLinks); }, []); } function decorateLiWithResult(page, link, res) { const selector = `td[data-id="${btoa(page + link)}"]`; const td = document.querySelector(selector); const STATUS_OK = 200; if (res.status === STATUS_OK) { td.innerHTML = ' OK ⬇✔️'; } else { td.innerHTML = ` ${res.status}: ${res.status_text} ❌`; } } function requestDownloadExternalFile(linkGen) { const { value, done } = linkGen.next(); if (done) { return; } const [page, link] = value; const selector = `td[data-id="${btoa(page + link)}"]`; const td = document.querySelector(selector); td.innerHTML = '⬇️'; const options = { method: 'POST', headers: new Headers({ 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' }), body: Object.entries({ call: 'plugin_fetchmedia_downloadExternalFile', page, link, }).map(([k, v]) => `${k}=${encodeURIComponent(v)}`).join('&'), credentials: 'include', }; fetch(`${DOKU_BASE}lib/exe/ajax.php`, options) .then(response => response.json()) .then((res) => { decorateLiWithResult(page, link, res); requestDownloadExternalFile(linkGen); }) .catch((res) => { console.error(res); requestDownloadExternalFile(linkGen); }); } form.addEventListener('submit', (event) => { event.preventDefault(); const body = { call: 'plugin_fetchmedia_getExternalMediaLinks', namespace: form.querySelector('input[name="namespace"]').value, type: form.querySelector('input[name="mediatypes"]:checked').value, sectok: form.querySelector('input[name="sectok"]').value, }; const query = Object.entries(body).map(([k, v]) => `${k}=${encodeURIComponent(v)}`).join('&'); const options = { method: 'GET', headers: new Headers({ 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' }), credentials: 'include', }; const waitingMessage = window.LANG.plugins.fetchmedia['message: waiting for response']; document.getElementById('fetchmedia_results').innerHTML = `
${waitingMessage}
${noLinksMsg}
${l10nTableHeadingPage} | ${l10nTableHeadingLinks} | ${l10nTableHeadingResults} |
---|---|---|
${pageLink} | ${firstUrl} | |
${url} |
${fetchError}