Changes for page Project Planning & Organisation
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
on Thursday, 03 Sep 2026 9:18
Change comment:
There is no comment for this version
To version 9.1
edited by Veronika Kocher
on Tuesday, 01 Sep 2026 10:25
on Tuesday, 01 Sep 2026 10:25
Change comment:
There is no comment for this version
Summary
-
Page properties (2 modified, 0 added, 0 removed)
Details
- Page properties
-
- Default language
-
... ... @@ -1,1 +1,0 @@ 1 -en - 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 -