Wijzigen voor document Huisstijl

Laatst gewijzigd door Jeeves de Butler op 07-10-2026 01:56

Van versie 7.1
gewijzigd door Jeeves de Butler
op 05-10-2026 02:49
Opmerking bij wijziging: Er is geen opmerking bij deze versie
Naar versie 8.1
gewijzigd door Jeeves de Butler
op 05-10-2026 02:49
Opmerking bij wijziging: Er is geen opmerking bij deze versie

Samenvatting

Details

XWiki.JavaScriptExtension[0]
cache
... ... @@ -1,0 +1,1 @@
1 +long
code
... ... @@ -1,0 +1,130 @@
1 +/* Wardenburg Kennisbank; presentatie van tegeltabellen (class "vgmtabel").
2 + Een tegeltabel is een rij met titels (kopcellen) met daaronder een rij met afbeeldingen die naar een pagina linken.
3 + Dit script toont dezelfde titels, afbeeldingen en links als een rustig kaartenraster. De pagina zelf verandert niet:
4 + de tabel blijft in de pagina staan en wordt alleen verborgen. Werkt alleen in de leesweergave. */
5 +(function () {
6 + 'use strict';
7 +
8 + function cellen(rij) {
9 + return rij ? Array.prototype.slice.call(rij.cells) : [];
10 + }
11 +
12 + function isKopRij(rij) {
13 + var c = cellen(rij);
14 + return c.length > 0 && c.every(function (cel) { return cel.tagName === 'TH'; });
15 + }
16 +
17 + function kaartenUitTabel(tabel) {
18 + var rijen = Array.prototype.slice.call(tabel.rows);
19 + var kaarten = [];
20 + for (var i = 0; i < rijen.length; i++) {
21 + var kop = rijen[i];
22 + if (!isKopRij(kop)) {
23 + continue;
24 + }
25 + var beeldRij = rijen[i + 1] && !isKopRij(rijen[i + 1]) ? rijen[i + 1] : null;
26 + var beeldCellen = cellen(beeldRij);
27 + cellen(kop).forEach(function (th, j) {
28 + var td = beeldCellen[j] || null;
29 + var titel = (th.textContent || '').replace(/\s+/g, ' ').trim();
30 + var img = (td && td.querySelector('img')) || th.querySelector('img');
31 + var link = (td && td.querySelector('a[href]')) || th.querySelector('a[href]');
32 + if (!titel && !img) {
33 + return;
34 + }
35 + kaarten.push({ titel: titel || (img && img.getAttribute('alt')) || '', img: img, link: link });
36 + });
37 + if (beeldRij) {
38 + i++;
39 + }
40 + }
41 + return kaarten;
42 + }
43 +
44 + function maakKaart(k) {
45 + var kaart = document.createElement(k.link ? 'a' : 'div');
46 + kaart.className = 'wb-kaart';
47 + if (k.link) {
48 + kaart.setAttribute('href', k.link.getAttribute('href'));
49 + if (k.link.getAttribute('target')) {
50 + kaart.setAttribute('target', k.link.getAttribute('target'));
51 + kaart.setAttribute('rel', 'noopener');
52 + }
53 + }
54 + var beeld = document.createElement('span');
55 + beeld.className = 'wb-kaart-beeld';
56 + if (k.img) {
57 + var img = document.createElement('img');
58 + img.src = k.img.currentSrc || k.img.src;
59 + img.alt = '';
60 + img.loading = 'lazy';
61 + img.decoding = 'async';
62 + var geenBeeld = function () {
63 + beeld.classList.add('wb-kaart-geenbeeld');
64 + img.remove();
65 + };
66 + img.addEventListener('error', geenBeeld);
67 + // Sommige externe sites geven bij een verdwenen afbeelding een leeg plaatje in plaats van een fout.
68 + img.addEventListener('load', function () {
69 + if (!img.naturalWidth || img.naturalWidth < 4) {
70 + geenBeeld();
71 + }
72 + });
73 + beeld.appendChild(img);
74 + } else {
75 + beeld.classList.add('wb-kaart-geenbeeld');
76 + }
77 + var titel = document.createElement('span');
78 + titel.className = 'wb-kaart-titel';
79 + titel.textContent = k.titel;
80 + kaart.appendChild(beeld);
81 + kaart.appendChild(titel);
82 + return kaart;
83 + }
84 +
85 + function verwerk(tabel) {
86 + if (tabel.classList.contains('wb-vervangen')) {
87 + return;
88 + }
89 + var kaarten = kaartenUitTabel(tabel);
90 + if (!kaarten.length) {
91 + return;
92 + }
93 + var raster = document.createElement('div');
94 + raster.className = 'wb-kaarten';
95 + kaarten.forEach(function (k) { raster.appendChild(maakKaart(k)); });
96 + tabel.parentNode.insertBefore(raster, tabel.nextSibling);
97 + tabel.classList.add('wb-vervangen');
98 + }
99 +
100 + function start() {
101 + var actie = (window.XWiki && window.XWiki.contextaction) || 'view';
102 + if (actie !== 'view') {
103 + return;
104 + }
105 + var tabellen = document.querySelectorAll('#xwikicontent table.vgmtabel');
106 + Array.prototype.forEach.call(tabellen, function (tabel) {
107 + try { verwerk(tabel); } catch (e) { /* bij een fout blijft de tabel gewoon zichtbaar */ }
108 + });
109 + }
110 +
111 + // Bij wijzigen op de pagina zelf: eerst de oorspronkelijke tabel terug, zodat de editor nooit de kaarten ziet.
112 + function herstel() {
113 + Array.prototype.forEach.call(document.querySelectorAll('#xwikicontent .wb-kaarten'), function (r) { r.remove(); });
114 + Array.prototype.forEach.call(document.querySelectorAll('#xwikicontent table.wb-vervangen'), function (t) { t.classList.remove('wb-vervangen'); });
115 + }
116 +
117 + if (typeof window.require === 'function') {
118 + window.require(['jquery'], function ($) {
119 + $(document).on('xwiki:actions:edit', herstel);
120 + $(document).on('xwiki:actions:view', function () { setTimeout(start, 0); });
121 + });
122 + }
123 +
124 + if (document.readyState === 'loading') {
125 + document.addEventListener('DOMContentLoaded', start);
126 + } else {
127 + start();
128 + }
129 +})();
130 +
name
... ... @@ -1,0 +1,1 @@
1 +Wardenburg tegels als kaarten
parse
... ... @@ -1,0 +1,1 @@
1 +Nee
use
... ... @@ -1,0 +1,1 @@
1 +always