Changes for page Project Planning & Organisation
Last modified by Veronika Kocher on Friday, 04 Sep 2026 14:45
From 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
To 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
Summary
-
Page properties (2 modified, 0 added, 0 removed)
Details
- Page properties
-
- Default language
-
... ... @@ -1,0 +1,1 @@ 1 +en - 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 +