====== Scraping der Piktogramme von anderen Seiten ======
Mit den folgenden Javascript Snippets können die Piktogramme runtergeladen und deren zugehörigen DokuWiki formatierten Tabellen generiert werden.
Auf welchen Webseiten diese Snippets ausführbar sind wird als Rätsel dem Leser überlassen.
=== Automatisches Runterladen aller Piktogramme ===
/**
* Diesen Codesnippet im Debugger auf der passenden BGHM Webseite ausführen und es werden alle Piktogramme automatisch runtergeladen.
*/
(() => {
let files = [], i = 0;
document.querySelector('#theContent').querySelectorAll('.ce-image').forEach(e => {
let img = e.querySelector('img');
if (img == null) return;
files.push(img.src);
i++;
});
let downloader = window.setInterval(() => {
if (files.length == 0) {
window.clearInterval(downloader);
return;
}
let file = files.pop();
let a = document.createElement('a');
a.setAttribute('href', file);
a.setAttribute('download', '');
a.setAttribute('target', '_blank');
console.log(`Downloading ${i - files.length}/${i}: `, file);
a.click();
}, 200);
})();
=== Generieren der Piktogrammtabellen ===
/**
* Diesen Codesnippet im Debugger auf der passenden BGHM Webseite ausführen und es wird ein String mit der generierten Tabelle im DokuWiki Format zurückgegeben.
*
* @param {string} domain - Der Namespace der zugehörigen Piktogramme auf dem Media-Server (':werkstatt:piktogramme:' wird vorangehangen)
* @param {number} res - Die maximale Höhe der Piktogramme in der Tabelle in Pixeln
* @param {number} cols - Die Anzahl der Spalten der Tabelle
*/
((domain, res, cols) => {
let entries = [], total = 0;
document.querySelector('#theContent').querySelectorAll('.ce-image').forEach(e => {
let img = e.querySelector('img');
if (img == null) return;
let desc = e.querySelector('.description').textContent.replaceAll(/\s+/g, ' ').replaceAll(/^\s+|\s+$/g, '');
let file = decodeURIComponent(img.src.substr(img.src.lastIndexOf('/') + 1)).replaceAll(' ', '_').toLowerCase();
entries.push(` {{ :werkstatt:piktogramme:${domain}:${file}?x${res} |${desc}}}**${desc}** `);
total++;
});
let table = '';
entries.forEach((entry, i) => {
table += '|' + entry;
if ((i + 1) % cols === 0) {
table += '|\n';
}
});
if (total % cols !== 0) {
table += '| '.repeat(cols - (total % cols));
table += '|\n';
}
return table;
})('verbote', 150, 4);