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

From version 9.2
edited by Veronika Kocher
on Tuesday, 01 Sep 2026 16:49
Change comment: Update property defaultLocale
To version 9.3
edited by Veronika Kocher
on Thursday, 03 Sep 2026 9:18
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -425,3 +425,237 @@
425 425  </div>
426 426  {{/html}}
427 427  
428 +{{html clean="false"}}
429 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_START -->
430 +<style data-sn-horizontal-box-harmonizer="1">
431 +[data-sn-equal-height-managed="1"]{box-sizing:border-box}
432 +@media(max-width:767px){
433 + [data-sn-equal-height-managed="1"]{min-height:0!important}
434 +}
435 +</style>
436 +<script data-sn-horizontal-box-harmonizer="1">
437 +(function(){
438 + "use strict";
439 +
440 + var MOBILE_MAX=767;
441 + var ROW_TOLERANCE=4;
442 + var MIN_W=150;
443 + var MIN_H=36;
444 +
445 + var root=
446 + document.getElementById("xwikicontent")||
447 + document.querySelector(".xwiki-rendering-content")||
448 + document.querySelector("main")||
449 + document.body;
450 +
451 + if(!root)return;
452 +
453 + var managed=new Set();
454 + var raf=0;
455 +
456 + function num(v){
457 + var n=parseFloat(v);
458 + return Number.isFinite(n)?n:0;
459 + }
460 +
461 + function visible(el){
462 + if(!el||el.nodeType!==1)return false;
463 + var s=getComputedStyle(el);
464 + if(s.display==="none"||s.visibility==="hidden"||Number(s.opacity)===0)return false;
465 + var r=el.getBoundingClientRect();
466 + return r.width>=MIN_W&&r.height>=MIN_H;
467 + }
468 +
469 + function excluded(el){
470 + return !el.matches||el.matches(
471 + "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]"
472 + );
473 + }
474 +
475 + function namedLikeBox(el){
476 + var c=typeof el.className==="string"?el.className:"";
477 + return /(^|[\s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([\s_-]|$)/i.test(c);
478 + }
479 +
480 + function boxLike(el){
481 + if(!visible(el)||excluded(el))return false;
482 + var s=getComputedStyle(el);
483 + var r=el.getBoundingClientRect();
484 + var border=
485 + num(s.borderTopWidth)+num(s.borderRightWidth)+
486 + num(s.borderBottomWidth)+num(s.borderLeftWidth);
487 + var radius=Math.max(
488 + num(s.borderTopLeftRadius),num(s.borderTopRightRadius),
489 + num(s.borderBottomLeftRadius),num(s.borderBottomRightRadius)
490 + );
491 + var bg=s.backgroundColor&&s.backgroundColor!=="rgba(0, 0, 0, 0)"&&s.backgroundColor!=="transparent";
492 + var shadow=s.boxShadow&&s.boxShadow!=="none";
493 + return namedLikeBox(el)||border>=1||(bg&&radius>=3)||(shadow&&r.width>=180);
494 + }
495 +
496 + function pickTarget(child){
497 + if(!visible(child))return null;
498 + if(boxLike(child))return child;
499 +
500 + var cr=child.getBoundingClientRect();
501 + var q=[];
502 + Array.from(child.children||[]).forEach(function(el){
503 + q.push({el:el,depth:1});
504 + });
505 +
506 + var best=null,bestScore=-1;
507 +
508 + while(q.length){
509 + var item=q.shift();
510 + var el=item.el;
511 + if(!visible(el))continue;
512 +
513 + var r=el.getBoundingClientRect();
514 +
515 + if(r.width>=cr.width*.72&&boxLike(el)){
516 + var widthFit=1-Math.min(1,Math.abs(cr.width-r.width)/Math.max(1,cr.width));
517 + var topFit=1-Math.min(1,Math.abs(cr.top-r.top)/80);
518 + var score=widthFit*5+topFit*2+Math.min(r.height,600)/600;
519 + if(score>bestScore){
520 + best=el;
521 + bestScore=score;
522 + }
523 + }
524 +
525 + if(item.depth<3){
526 + Array.from(el.children||[]).forEach(function(next){
527 + q.push({el:next,depth:item.depth+1});
528 + });
529 + }
530 + }
531 +
532 + return best;
533 + }
534 +
535 + function reset(){
536 + managed.forEach(function(el){
537 + el.style.removeProperty("min-height");
538 + el.removeAttribute("data-sn-equal-height-managed");
539 + });
540 + managed.clear();
541 + }
542 +
543 + function horizontalLayout(parent){
544 + if(!visible(parent))return false;
545 + var s=getComputedStyle(parent);
546 + if(s.display==="grid"||s.display==="inline-grid")return true;
547 + if(s.display==="flex"||s.display==="inline-flex"){
548 + return s.flexDirection==="row"||s.flexDirection==="row-reverse";
549 + }
550 + return false;
551 + }
552 +
553 + function rowGroups(entries){
554 + var groups=[];
555 + entries.slice().sort(function(a,b){
556 + return a.rect.top-b.rect.top||a.rect.left-b.rect.left;
557 + }).forEach(function(entry){
558 + var group=null;
559 + for(var i=0;i<groups.length;i++){
560 + if(Math.abs(groups[i].top-entry.rect.top)<=ROW_TOLERANCE){
561 + group=groups[i];
562 + break;
563 + }
564 + }
565 + if(!group){
566 + group={top:entry.rect.top,entries:[]};
567 + groups.push(group);
568 + }
569 + group.entries.push(entry);
570 + });
571 + return groups;
572 + }
573 +
574 + function run(){
575 + reset();
576 +
577 + if(window.innerWidth<=MOBILE_MAX)return;
578 +
579 + var parents=Array.from(root.querySelectorAll("*")).filter(function(el){
580 + return el.children&&el.children.length>=2&&horizontalLayout(el);
581 + });
582 +
583 + parents.forEach(function(parent){
584 + var entries=[];
585 +
586 + Array.from(parent.children).forEach(function(child){
587 + if(!visible(child))return;
588 + var target=pickTarget(child);
589 + if(!target)return;
590 + entries.push({
591 + target:target,
592 + rect:target.getBoundingClientRect()
593 + });
594 + });
595 +
596 + if(entries.length<2)return;
597 +
598 + rowGroups(entries).forEach(function(group){
599 + if(group.entries.length<2)return;
600 +
601 + var lefts=group.entries.map(function(e){return e.rect.left;}).sort(function(a,b){return a-b;});
602 + if(lefts[lefts.length-1]-lefts[0]<80)return;
603 +
604 + var targets=[];
605 + var seen=new Set();
606 +
607 + group.entries.forEach(function(e){
608 + if(!seen.has(e.target)){
609 + seen.add(e.target);
610 + targets.push(e.target);
611 + }
612 + });
613 +
614 + if(targets.length<2)return;
615 +
616 + var max=0;
617 + targets.forEach(function(el){
618 + max=Math.max(max,el.getBoundingClientRect().height);
619 + });
620 +
621 + max=Math.ceil(max);
622 + if(max<MIN_H)return;
623 +
624 + targets.forEach(function(el){
625 + el.style.setProperty("min-height",max+"px");
626 + el.setAttribute("data-sn-equal-height-managed","1");
627 + managed.add(el);
628 + });
629 + });
630 + });
631 + }
632 +
633 + function schedule(){
634 + if(raf)cancelAnimationFrame(raf);
635 + raf=requestAnimationFrame(function(){
636 + raf=requestAnimationFrame(function(){
637 + raf=0;
638 + run();
639 + });
640 + });
641 + }
642 +
643 + addEventListener("resize",schedule,{passive:true});
644 + addEventListener("load",schedule,{once:true});
645 +
646 + root.addEventListener("click",function(){
647 + setTimeout(schedule,0);
648 + },true);
649 +
650 + if(document.fonts&&document.fonts.ready){
651 + document.fonts.ready.then(schedule);
652 + }
653 +
654 + schedule();
655 + setTimeout(schedule,250);
656 + setTimeout(schedule,900);
657 +})();
658 +</script>
659 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_END -->
660 +{{/html}}
661 +