Last modified by Veronika Kocher on Friday, 04 Sep 2026 14:45

From version 5.8
edited by Veronika Kocher
on Thursday, 03 Sep 2026 9:18
Change comment: There is no comment for this version
To version 5.7
edited by Veronika Kocher
on Wednesday, 02 Sep 2026 13:13
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -261,237 +261,3 @@
261 261  </div>
262 262  {{/html}}
263 263  
264 -{{html clean="false"}}
265 -<!-- SN_HORIZONTAL_BOX_HARMONIZER_START -->
266 -<style data-sn-horizontal-box-harmonizer="1">
267 -[data-sn-equal-height-managed="1"]{box-sizing:border-box}
268 -@media(max-width:767px){
269 - [data-sn-equal-height-managed="1"]{min-height:0!important}
270 -}
271 -</style>
272 -<script data-sn-horizontal-box-harmonizer="1">
273 -(function(){
274 - "use strict";
275 -
276 - var MOBILE_MAX=767;
277 - var ROW_TOLERANCE=4;
278 - var MIN_W=150;
279 - var MIN_H=36;
280 -
281 - var root=
282 - document.getElementById("xwikicontent")||
283 - document.querySelector(".xwiki-rendering-content")||
284 - document.querySelector("main")||
285 - document.body;
286 -
287 - if(!root)return;
288 -
289 - var managed=new Set();
290 - var raf=0;
291 -
292 - function num(v){
293 - var n=parseFloat(v);
294 - return Number.isFinite(n)?n:0;
295 - }
296 -
297 - function visible(el){
298 - if(!el||el.nodeType!==1)return false;
299 - var s=getComputedStyle(el);
300 - if(s.display==="none"||s.visibility==="hidden"||Number(s.opacity)===0)return false;
301 - var r=el.getBoundingClientRect();
302 - return r.width>=MIN_W&&r.height>=MIN_H;
303 - }
304 -
305 - function excluded(el){
306 - return !el.matches||el.matches(
307 - "button,input,select,textarea,option,label,img,svg,canvas,table,thead,tbody,tfoot,tr,td,th,summary,script,style,noscript,template,.btn,.chip,[role=button]"
308 - );
309 - }
310 -
311 - function namedLikeBox(el){
312 - var c=typeof el.className==="string"?el.className:"";
313 - return /(^|[\s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([\s_-]|$)/i.test(c);
314 - }
315 -
316 - function boxLike(el){
317 - if(!visible(el)||excluded(el))return false;
318 - var s=getComputedStyle(el);
319 - var r=el.getBoundingClientRect();
320 - var border=
321 - num(s.borderTopWidth)+num(s.borderRightWidth)+
322 - num(s.borderBottomWidth)+num(s.borderLeftWidth);
323 - var radius=Math.max(
324 - num(s.borderTopLeftRadius),num(s.borderTopRightRadius),
325 - num(s.borderBottomLeftRadius),num(s.borderBottomRightRadius)
326 - );
327 - var bg=s.backgroundColor&&s.backgroundColor!=="rgba(0, 0, 0, 0)"&&s.backgroundColor!=="transparent";
328 - var shadow=s.boxShadow&&s.boxShadow!=="none";
329 - return namedLikeBox(el)||border>=1||(bg&&radius>=3)||(shadow&&r.width>=180);
330 - }
331 -
332 - function pickTarget(child){
333 - if(!visible(child))return null;
334 - if(boxLike(child))return child;
335 -
336 - var cr=child.getBoundingClientRect();
337 - var q=[];
338 - Array.from(child.children||[]).forEach(function(el){
339 - q.push({el:el,depth:1});
340 - });
341 -
342 - var best=null,bestScore=-1;
343 -
344 - while(q.length){
345 - var item=q.shift();
346 - var el=item.el;
347 - if(!visible(el))continue;
348 -
349 - var r=el.getBoundingClientRect();
350 -
351 - if(r.width>=cr.width*.72&&boxLike(el)){
352 - var widthFit=1-Math.min(1,Math.abs(cr.width-r.width)/Math.max(1,cr.width));
353 - var topFit=1-Math.min(1,Math.abs(cr.top-r.top)/80);
354 - var score=widthFit*5+topFit*2+Math.min(r.height,600)/600;
355 - if(score>bestScore){
356 - best=el;
357 - bestScore=score;
358 - }
359 - }
360 -
361 - if(item.depth<3){
362 - Array.from(el.children||[]).forEach(function(next){
363 - q.push({el:next,depth:item.depth+1});
364 - });
365 - }
366 - }
367 -
368 - return best;
369 - }
370 -
371 - function reset(){
372 - managed.forEach(function(el){
373 - el.style.removeProperty("min-height");
374 - el.removeAttribute("data-sn-equal-height-managed");
375 - });
376 - managed.clear();
377 - }
378 -
379 - function horizontalLayout(parent){
380 - if(!visible(parent))return false;
381 - var s=getComputedStyle(parent);
382 - if(s.display==="grid"||s.display==="inline-grid")return true;
383 - if(s.display==="flex"||s.display==="inline-flex"){
384 - return s.flexDirection==="row"||s.flexDirection==="row-reverse";
385 - }
386 - return false;
387 - }
388 -
389 - function rowGroups(entries){
390 - var groups=[];
391 - entries.slice().sort(function(a,b){
392 - return a.rect.top-b.rect.top||a.rect.left-b.rect.left;
393 - }).forEach(function(entry){
394 - var group=null;
395 - for(var i=0;i<groups.length;i++){
396 - if(Math.abs(groups[i].top-entry.rect.top)<=ROW_TOLERANCE){
397 - group=groups[i];
398 - break;
399 - }
400 - }
401 - if(!group){
402 - group={top:entry.rect.top,entries:[]};
403 - groups.push(group);
404 - }
405 - group.entries.push(entry);
406 - });
407 - return groups;
408 - }
409 -
410 - function run(){
411 - reset();
412 -
413 - if(window.innerWidth<=MOBILE_MAX)return;
414 -
415 - var parents=Array.from(root.querySelectorAll("*")).filter(function(el){
416 - return el.children&&el.children.length>=2&&horizontalLayout(el);
417 - });
418 -
419 - parents.forEach(function(parent){
420 - var entries=[];
421 -
422 - Array.from(parent.children).forEach(function(child){
423 - if(!visible(child))return;
424 - var target=pickTarget(child);
425 - if(!target)return;
426 - entries.push({
427 - target:target,
428 - rect:target.getBoundingClientRect()
429 - });
430 - });
431 -
432 - if(entries.length<2)return;
433 -
434 - rowGroups(entries).forEach(function(group){
435 - if(group.entries.length<2)return;
436 -
437 - var lefts=group.entries.map(function(e){return e.rect.left;}).sort(function(a,b){return a-b;});
438 - if(lefts[lefts.length-1]-lefts[0]<80)return;
439 -
440 - var targets=[];
441 - var seen=new Set();
442 -
443 - group.entries.forEach(function(e){
444 - if(!seen.has(e.target)){
445 - seen.add(e.target);
446 - targets.push(e.target);
447 - }
448 - });
449 -
450 - if(targets.length<2)return;
451 -
452 - var max=0;
453 - targets.forEach(function(el){
454 - max=Math.max(max,el.getBoundingClientRect().height);
455 - });
456 -
457 - max=Math.ceil(max);
458 - if(max<MIN_H)return;
459 -
460 - targets.forEach(function(el){
461 - el.style.setProperty("min-height",max+"px");
462 - el.setAttribute("data-sn-equal-height-managed","1");
463 - managed.add(el);
464 - });
465 - });
466 - });
467 - }
468 -
469 - function schedule(){
470 - if(raf)cancelAnimationFrame(raf);
471 - raf=requestAnimationFrame(function(){
472 - raf=requestAnimationFrame(function(){
473 - raf=0;
474 - run();
475 - });
476 - });
477 - }
478 -
479 - addEventListener("resize",schedule,{passive:true});
480 - addEventListener("load",schedule,{once:true});
481 -
482 - root.addEventListener("click",function(){
483 - setTimeout(schedule,0);
484 - },true);
485 -
486 - if(document.fonts&&document.fonts.ready){
487 - document.fonts.ready.then(schedule);
488 - }
489 -
490 - schedule();
491 - setTimeout(schedule,250);
492 - setTimeout(schedule,900);
493 -})();
494 -</script>
495 -<!-- SN_HORIZONTAL_BOX_HARMONIZER_END -->
496 -{{/html}}
497 -