Last modified by Veronika Kocher on Friday, 18 Sep 2026 16:47

From version 39.21
edited by Veronika Kocher
on Thursday, 03 Sep 2026 9:18
Change comment: There is no comment for this version
To version 39.20
edited by Veronika Kocher
on Wednesday, 02 Sep 2026 17:21
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -639,237 +639,3 @@
639 639  {{/info}}
640 640  )))
641 641  
642 -{{html clean="false"}}
643 -<!-- SN_HORIZONTAL_BOX_HARMONIZER_START -->
644 -<style data-sn-horizontal-box-harmonizer="1">
645 -[data-sn-equal-height-managed="1"]{box-sizing:border-box}
646 -@media(max-width:767px){
647 - [data-sn-equal-height-managed="1"]{min-height:0!important}
648 -}
649 -</style>
650 -<script data-sn-horizontal-box-harmonizer="1">
651 -(function(){
652 - "use strict";
653 -
654 - var MOBILE_MAX=767;
655 - var ROW_TOLERANCE=4;
656 - var MIN_W=150;
657 - var MIN_H=36;
658 -
659 - var root=
660 - document.getElementById("xwikicontent")||
661 - document.querySelector(".xwiki-rendering-content")||
662 - document.querySelector("main")||
663 - document.body;
664 -
665 - if(!root)return;
666 -
667 - var managed=new Set();
668 - var raf=0;
669 -
670 - function num(v){
671 - var n=parseFloat(v);
672 - return Number.isFinite(n)?n:0;
673 - }
674 -
675 - function visible(el){
676 - if(!el||el.nodeType!==1)return false;
677 - var s=getComputedStyle(el);
678 - if(s.display==="none"||s.visibility==="hidden"||Number(s.opacity)===0)return false;
679 - var r=el.getBoundingClientRect();
680 - return r.width>=MIN_W&&r.height>=MIN_H;
681 - }
682 -
683 - function excluded(el){
684 - return !el.matches||el.matches(
685 - "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]"
686 - );
687 - }
688 -
689 - function namedLikeBox(el){
690 - var c=typeof el.className==="string"?el.className:"";
691 - return /(^|[\s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([\s_-]|$)/i.test(c);
692 - }
693 -
694 - function boxLike(el){
695 - if(!visible(el)||excluded(el))return false;
696 - var s=getComputedStyle(el);
697 - var r=el.getBoundingClientRect();
698 - var border=
699 - num(s.borderTopWidth)+num(s.borderRightWidth)+
700 - num(s.borderBottomWidth)+num(s.borderLeftWidth);
701 - var radius=Math.max(
702 - num(s.borderTopLeftRadius),num(s.borderTopRightRadius),
703 - num(s.borderBottomLeftRadius),num(s.borderBottomRightRadius)
704 - );
705 - var bg=s.backgroundColor&&s.backgroundColor!=="rgba(0, 0, 0, 0)"&&s.backgroundColor!=="transparent";
706 - var shadow=s.boxShadow&&s.boxShadow!=="none";
707 - return namedLikeBox(el)||border>=1||(bg&&radius>=3)||(shadow&&r.width>=180);
708 - }
709 -
710 - function pickTarget(child){
711 - if(!visible(child))return null;
712 - if(boxLike(child))return child;
713 -
714 - var cr=child.getBoundingClientRect();
715 - var q=[];
716 - Array.from(child.children||[]).forEach(function(el){
717 - q.push({el:el,depth:1});
718 - });
719 -
720 - var best=null,bestScore=-1;
721 -
722 - while(q.length){
723 - var item=q.shift();
724 - var el=item.el;
725 - if(!visible(el))continue;
726 -
727 - var r=el.getBoundingClientRect();
728 -
729 - if(r.width>=cr.width*.72&&boxLike(el)){
730 - var widthFit=1-Math.min(1,Math.abs(cr.width-r.width)/Math.max(1,cr.width));
731 - var topFit=1-Math.min(1,Math.abs(cr.top-r.top)/80);
732 - var score=widthFit*5+topFit*2+Math.min(r.height,600)/600;
733 - if(score>bestScore){
734 - best=el;
735 - bestScore=score;
736 - }
737 - }
738 -
739 - if(item.depth<3){
740 - Array.from(el.children||[]).forEach(function(next){
741 - q.push({el:next,depth:item.depth+1});
742 - });
743 - }
744 - }
745 -
746 - return best;
747 - }
748 -
749 - function reset(){
750 - managed.forEach(function(el){
751 - el.style.removeProperty("min-height");
752 - el.removeAttribute("data-sn-equal-height-managed");
753 - });
754 - managed.clear();
755 - }
756 -
757 - function horizontalLayout(parent){
758 - if(!visible(parent))return false;
759 - var s=getComputedStyle(parent);
760 - if(s.display==="grid"||s.display==="inline-grid")return true;
761 - if(s.display==="flex"||s.display==="inline-flex"){
762 - return s.flexDirection==="row"||s.flexDirection==="row-reverse";
763 - }
764 - return false;
765 - }
766 -
767 - function rowGroups(entries){
768 - var groups=[];
769 - entries.slice().sort(function(a,b){
770 - return a.rect.top-b.rect.top||a.rect.left-b.rect.left;
771 - }).forEach(function(entry){
772 - var group=null;
773 - for(var i=0;i<groups.length;i++){
774 - if(Math.abs(groups[i].top-entry.rect.top)<=ROW_TOLERANCE){
775 - group=groups[i];
776 - break;
777 - }
778 - }
779 - if(!group){
780 - group={top:entry.rect.top,entries:[]};
781 - groups.push(group);
782 - }
783 - group.entries.push(entry);
784 - });
785 - return groups;
786 - }
787 -
788 - function run(){
789 - reset();
790 -
791 - if(window.innerWidth<=MOBILE_MAX)return;
792 -
793 - var parents=Array.from(root.querySelectorAll("*")).filter(function(el){
794 - return el.children&&el.children.length>=2&&horizontalLayout(el);
795 - });
796 -
797 - parents.forEach(function(parent){
798 - var entries=[];
799 -
800 - Array.from(parent.children).forEach(function(child){
801 - if(!visible(child))return;
802 - var target=pickTarget(child);
803 - if(!target)return;
804 - entries.push({
805 - target:target,
806 - rect:target.getBoundingClientRect()
807 - });
808 - });
809 -
810 - if(entries.length<2)return;
811 -
812 - rowGroups(entries).forEach(function(group){
813 - if(group.entries.length<2)return;
814 -
815 - var lefts=group.entries.map(function(e){return e.rect.left;}).sort(function(a,b){return a-b;});
816 - if(lefts[lefts.length-1]-lefts[0]<80)return;
817 -
818 - var targets=[];
819 - var seen=new Set();
820 -
821 - group.entries.forEach(function(e){
822 - if(!seen.has(e.target)){
823 - seen.add(e.target);
824 - targets.push(e.target);
825 - }
826 - });
827 -
828 - if(targets.length<2)return;
829 -
830 - var max=0;
831 - targets.forEach(function(el){
832 - max=Math.max(max,el.getBoundingClientRect().height);
833 - });
834 -
835 - max=Math.ceil(max);
836 - if(max<MIN_H)return;
837 -
838 - targets.forEach(function(el){
839 - el.style.setProperty("min-height",max+"px");
840 - el.setAttribute("data-sn-equal-height-managed","1");
841 - managed.add(el);
842 - });
843 - });
844 - });
845 - }
846 -
847 - function schedule(){
848 - if(raf)cancelAnimationFrame(raf);
849 - raf=requestAnimationFrame(function(){
850 - raf=requestAnimationFrame(function(){
851 - raf=0;
852 - run();
853 - });
854 - });
855 - }
856 -
857 - addEventListener("resize",schedule,{passive:true});
858 - addEventListener("load",schedule,{once:true});
859 -
860 - root.addEventListener("click",function(){
861 - setTimeout(schedule,0);
862 - },true);
863 -
864 - if(document.fonts&&document.fonts.ready){
865 - document.fonts.ready.then(schedule);
866 - }
867 -
868 - schedule();
869 - setTimeout(schedule,250);
870 - setTimeout(schedule,900);
871 -})();
872 -</script>
873 -<!-- SN_HORIZONTAL_BOX_HARMONIZER_END -->
874 -{{/html}}
875 -