Wiki broncode van Speler voor video's

Laatst gewijzigd door Jeeves de Butler op 09-10-2026 10:34

Show last authors
1 {{velocity}}
2 ## The standard video player of the Kennisbank (despite its name, for every video, not only Syntess Atrium): one
3 ## figure per Wardenburg.Code.AtriumClipClass object of the including page (sorted on positie), with an HTML5 player,
4 ## a clickable chapter list, optional subtitles (<video>.nl.vtt) and a collapsible transcript. The video itself is an
5 ## attachment of the including page, so it is only visible to people who may read that page.
6 ## Used through {{include reference="Wardenburg.Code.AtriumClips"/}}; the Syntess source line only shows for Syntess clips;
7 ## another source goes in the object property bron.
8 #set ($discard = $xwiki.ssx.use('Wardenburg.Code.AtriumClips'))
9 #set ($discard = $xwiki.jsx.use('Wardenburg.Code.AtriumClips'))
10 #set ($clips = [])
11 #foreach ($o in $doc.getObjects('Wardenburg.Code.AtriumClipClass'))
12 #set ($discard = $clips.add({
13 'positie': $mathtool.toInteger("$!o.getValue('positie')"),
14 'nummer': "$!o.getValue('nummer')",
15 'titel': "$!o.getValue('titel')",
16 'bijlage': "$!o.getValue('bijlage')",
17 'poster': "$!o.getValue('poster')",
18 'duur': "$!o.getValue('duur')",
19 'showcase': "$!o.getValue('vimeo_showcase')",
20 'geupload': "$!o.getValue('geupload')",
21 'hoofdstukken': "$!o.getValue('hoofdstukken')",
22 'gecontroleerd': "$!o.getValue('hoofdstukken_gecontroleerd')",
23 'tekst': "$!o.getValue('tekst')",
24 'bron': "$!o.getValue('bron')"
25 }))
26 #end
27 #foreach ($c in $collectiontool.sort($clips, 'positie'))
28
29 === $services.rendering.escape("$c.nummer $c.titel", $doc.syntax) ===
30
31 {{html clean="false"}}
32 <figure class="wb-clip" id="clip-$escapetool.xml($c.nummer)">
33 #if ("$!c.bijlage" != '' && $doc.getAttachment($c.bijlage))
34 ## Subtitles: an attachment <video name>.nl.vtt next to the video, off by default (CC button in the player)
35 #set ($vtt = $c.bijlage.replaceAll('\.mp4$', '.nl.vtt'))
36 <video controls preload="metadata" playsinline src="$doc.getAttachmentURL($c.bijlage)"#if ("$!c.poster" != '' && $doc.getAttachment($c.poster)) poster="$doc.getAttachmentURL($c.poster)"#{end}>#if ($vtt != $c.bijlage && $doc.getAttachment($vtt))<track kind="subtitles" srclang="nl" label="Nederlands" src="$doc.getAttachmentURL($vtt)">#{end}</video>
37 #else
38 <p class="wb-clip-ontbreekt">De video ontbreekt nog op deze pagina.</p>
39 #end
40 #set ($items = [])
41 #foreach ($raw in $c.hoofdstukken.split('\r?\n'))
42 #set ($line = $raw.trim())
43 #if ($line.matches('^\d{1,2}:\d{2}(:\d{2})?\s+.+$'))
44 #set ($tc = $line.replaceAll('^(\S+)\s+.*$', '$1'))
45 #set ($sec = 0)
46 #foreach ($p in $tc.split(':'))
47 #set ($sec = $sec * 60 + $mathtool.toInteger($p))
48 #end
49 #set ($label = $line.replaceAll('^\S+\s+', ''))
50 ## Optional reference after the label: "mm:ss Label >> Linktekst | adres" (adres: https://... or /...)
51 #set ($refText = '')
52 #set ($refUrl = '')
53 #set ($at = $label.indexOf(' >> '))
54 #if ($at > 0)
55 #set ($ref = $label.substring($at + 4).trim())
56 #set ($label = $label.substring(0, $at).trim())
57 #set ($bar = $ref.lastIndexOf(' | '))
58 #if ($bar > 0)
59 #set ($candidate = $ref.substring($bar + 3).trim())
60 #if ($candidate.matches('^(https://|/)[^\s"<>]+$'))
61 #set ($refText = $ref.substring(0, $bar).trim())
62 #set ($refUrl = $candidate)
63 #end
64 #end
65 #end
66 #set ($discard = $items.add({'t': $sec, 'tc': $tc, 'label': $label, 'refText': $refText, 'refUrl': $refUrl}))
67 #end
68 #end
69 #if ($items.size() > 0)
70 <ol class="wb-hoofdstukken" aria-label="Hoofdstukken">
71 #foreach ($i in $items)
72 <li><button type="button" data-t="$i.t"><span class="wb-t">$escapetool.xml($i.tc)</span><span class="wb-label">$escapetool.xml($i.label)</span></button>#if ("$!i.refUrl" != '')<a class="wb-ref" href="$escapetool.xml($i.refUrl)">$escapetool.xml($i.refText)</a>#{end}</li>
73 #end
74 </ol>
75 #end
76 <figcaption>
77 #if ("$!c.duur" != '')Duur $escapetool.xml($c.duur). #{end}
78 #if ("$!c.bron" != '')Bron: $escapetool.xml($c.bron).#elseif ("$!c.showcase" != '')Bron: Syntess Atrium Zelfstudie, <a href="https://vimeo.com/showcase/$escapetool.url($c.showcase)" target="_blank" rel="noopener">alle clips van deze paragraaf</a>.#{end}
79 #if ($items.size() > 0 && "$!c.gecontroleerd" != '1') <span class="wb-clip-let">Hoofdstukken nog niet gecontroleerd.</span>#{end}
80 </figcaption>
81 #if ("$!c.tekst" != '')
82 ## Transcript (field tekst, one line per sentence as "[mm:ss] text"); the field is searchable in the Kennisbank
83 <details class="wb-tekst">
84 <summary>Uitgeschreven tekst</summary>
85 <p class="wb-tekst-let">Automatisch uitgeschreven uit de gesproken tekst; er kunnen fouten in staan.</p>
86 <ol>
87 #foreach ($raw in $c.tekst.split('\r?\n'))
88 #set ($line = $raw.trim())
89 #if ($line.matches('^\[\d{1,2}:\d{2}\]\s*.+$'))
90 #set ($tc = $line.replaceAll('^\[(\d{1,2}:\d{2})\].*$', '$1'))
91 #set ($parts = $tc.split(':'))
92 #set ($sec = $mathtool.toInteger($parts[0]) * 60 + $mathtool.toInteger($parts[1]))
93 <li><button type="button" data-t="$sec">$escapetool.xml($tc)</button> $escapetool.xml($line.replaceAll('^\[\d{1,2}:\d{2}\]\s*', ''))</li>
94 #end
95 #end
96 </ol>
97 </details>
98 #end
99 </figure>
100 {{/html}}
101 #end
102 {{/velocity}}