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

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

Summary

Details

Page properties
Content
... ... @@ -425,237 +425,3 @@
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 -