Changes for page Prepare
Last modified by Veronika Kocher on Friday, 18 Sep 2026 16:47
From version 29.6
edited by Veronika Kocher
on Wednesday, 02 Sep 2026 16:48
on Wednesday, 02 Sep 2026 16:48
Change comment:
There is no comment for this version
To version 29.7
edited by Veronika Kocher
on Thursday, 03 Sep 2026 9:18
on Thursday, 03 Sep 2026 9:18
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -484,3 +484,238 @@ 484 484 485 485 </div> 486 486 {{/html}} 487 + 488 +{{html clean="false"}} 489 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_START --> 490 +<style data-sn-horizontal-box-harmonizer="1"> 491 +[data-sn-equal-height-managed="1"]{box-sizing:border-box} 492 +@media(max-width:767px){ 493 + [data-sn-equal-height-managed="1"]{min-height:0!important} 494 +} 495 +</style> 496 +<script data-sn-horizontal-box-harmonizer="1"> 497 +(function(){ 498 + "use strict"; 499 + 500 + var MOBILE_MAX=767; 501 + var ROW_TOLERANCE=4; 502 + var MIN_W=150; 503 + var MIN_H=36; 504 + 505 + var root= 506 + document.getElementById("xwikicontent")|| 507 + document.querySelector(".xwiki-rendering-content")|| 508 + document.querySelector("main")|| 509 + document.body; 510 + 511 + if(!root)return; 512 + 513 + var managed=new Set(); 514 + var raf=0; 515 + 516 + function num(v){ 517 + var n=parseFloat(v); 518 + return Number.isFinite(n)?n:0; 519 + } 520 + 521 + function visible(el){ 522 + if(!el||el.nodeType!==1)return false; 523 + var s=getComputedStyle(el); 524 + if(s.display==="none"||s.visibility==="hidden"||Number(s.opacity)===0)return false; 525 + var r=el.getBoundingClientRect(); 526 + return r.width>=MIN_W&&r.height>=MIN_H; 527 + } 528 + 529 + function excluded(el){ 530 + return !el.matches||el.matches( 531 + "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]" 532 + ); 533 + } 534 + 535 + function namedLikeBox(el){ 536 + var c=typeof el.className==="string"?el.className:""; 537 + return /(^|[\s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([\s_-]|$)/i.test(c); 538 + } 539 + 540 + function boxLike(el){ 541 + if(!visible(el)||excluded(el))return false; 542 + var s=getComputedStyle(el); 543 + var r=el.getBoundingClientRect(); 544 + var border= 545 + num(s.borderTopWidth)+num(s.borderRightWidth)+ 546 + num(s.borderBottomWidth)+num(s.borderLeftWidth); 547 + var radius=Math.max( 548 + num(s.borderTopLeftRadius),num(s.borderTopRightRadius), 549 + num(s.borderBottomLeftRadius),num(s.borderBottomRightRadius) 550 + ); 551 + var bg=s.backgroundColor&&s.backgroundColor!=="rgba(0, 0, 0, 0)"&&s.backgroundColor!=="transparent"; 552 + var shadow=s.boxShadow&&s.boxShadow!=="none"; 553 + return namedLikeBox(el)||border>=1||(bg&&radius>=3)||(shadow&&r.width>=180); 554 + } 555 + 556 + function pickTarget(child){ 557 + if(!visible(child))return null; 558 + if(boxLike(child))return child; 559 + 560 + var cr=child.getBoundingClientRect(); 561 + var q=[]; 562 + Array.from(child.children||[]).forEach(function(el){ 563 + q.push({el:el,depth:1}); 564 + }); 565 + 566 + var best=null,bestScore=-1; 567 + 568 + while(q.length){ 569 + var item=q.shift(); 570 + var el=item.el; 571 + if(!visible(el))continue; 572 + 573 + var r=el.getBoundingClientRect(); 574 + 575 + if(r.width>=cr.width*.72&&boxLike(el)){ 576 + var widthFit=1-Math.min(1,Math.abs(cr.width-r.width)/Math.max(1,cr.width)); 577 + var topFit=1-Math.min(1,Math.abs(cr.top-r.top)/80); 578 + var score=widthFit*5+topFit*2+Math.min(r.height,600)/600; 579 + if(score>bestScore){ 580 + best=el; 581 + bestScore=score; 582 + } 583 + } 584 + 585 + if(item.depth<3){ 586 + Array.from(el.children||[]).forEach(function(next){ 587 + q.push({el:next,depth:item.depth+1}); 588 + }); 589 + } 590 + } 591 + 592 + return best; 593 + } 594 + 595 + function reset(){ 596 + managed.forEach(function(el){ 597 + el.style.removeProperty("min-height"); 598 + el.removeAttribute("data-sn-equal-height-managed"); 599 + }); 600 + managed.clear(); 601 + } 602 + 603 + function horizontalLayout(parent){ 604 + if(!visible(parent))return false; 605 + var s=getComputedStyle(parent); 606 + if(s.display==="grid"||s.display==="inline-grid")return true; 607 + if(s.display==="flex"||s.display==="inline-flex"){ 608 + return s.flexDirection==="row"||s.flexDirection==="row-reverse"; 609 + } 610 + return false; 611 + } 612 + 613 + function rowGroups(entries){ 614 + var groups=[]; 615 + entries.slice().sort(function(a,b){ 616 + return a.rect.top-b.rect.top||a.rect.left-b.rect.left; 617 + }).forEach(function(entry){ 618 + var group=null; 619 + for(var i=0;i<groups.length;i++){ 620 + if(Math.abs(groups[i].top-entry.rect.top)<=ROW_TOLERANCE){ 621 + group=groups[i]; 622 + break; 623 + } 624 + } 625 + if(!group){ 626 + group={top:entry.rect.top,entries:[]}; 627 + groups.push(group); 628 + } 629 + group.entries.push(entry); 630 + }); 631 + return groups; 632 + } 633 + 634 + function run(){ 635 + reset(); 636 + 637 + if(window.innerWidth<=MOBILE_MAX)return; 638 + 639 + var parents=Array.from(root.querySelectorAll("*")).filter(function(el){ 640 + return el.children&&el.children.length>=2&&horizontalLayout(el); 641 + }); 642 + 643 + parents.forEach(function(parent){ 644 + var entries=[]; 645 + 646 + Array.from(parent.children).forEach(function(child){ 647 + if(!visible(child))return; 648 + var target=pickTarget(child); 649 + if(!target)return; 650 + entries.push({ 651 + target:target, 652 + rect:target.getBoundingClientRect() 653 + }); 654 + }); 655 + 656 + if(entries.length<2)return; 657 + 658 + rowGroups(entries).forEach(function(group){ 659 + if(group.entries.length<2)return; 660 + 661 + var lefts=group.entries.map(function(e){return e.rect.left;}).sort(function(a,b){return a-b;}); 662 + if(lefts[lefts.length-1]-lefts[0]<80)return; 663 + 664 + var targets=[]; 665 + var seen=new Set(); 666 + 667 + group.entries.forEach(function(e){ 668 + if(!seen.has(e.target)){ 669 + seen.add(e.target); 670 + targets.push(e.target); 671 + } 672 + }); 673 + 674 + if(targets.length<2)return; 675 + 676 + var max=0; 677 + targets.forEach(function(el){ 678 + max=Math.max(max,el.getBoundingClientRect().height); 679 + }); 680 + 681 + max=Math.ceil(max); 682 + if(max<MIN_H)return; 683 + 684 + targets.forEach(function(el){ 685 + el.style.setProperty("min-height",max+"px"); 686 + el.setAttribute("data-sn-equal-height-managed","1"); 687 + managed.add(el); 688 + }); 689 + }); 690 + }); 691 + } 692 + 693 + function schedule(){ 694 + if(raf)cancelAnimationFrame(raf); 695 + raf=requestAnimationFrame(function(){ 696 + raf=requestAnimationFrame(function(){ 697 + raf=0; 698 + run(); 699 + }); 700 + }); 701 + } 702 + 703 + addEventListener("resize",schedule,{passive:true}); 704 + addEventListener("load",schedule,{once:true}); 705 + 706 + root.addEventListener("click",function(){ 707 + setTimeout(schedule,0); 708 + },true); 709 + 710 + if(document.fonts&&document.fonts.ready){ 711 + document.fonts.ready.then(schedule); 712 + } 713 + 714 + schedule(); 715 + setTimeout(schedule,250); 716 + setTimeout(schedule,900); 717 +})(); 718 +</script> 719 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_END --> 720 +{{/html}} 721 +