Changes for page Service Navigator
Last modified by Veronika Kocher on Thursday, 03 Sep 2026 14:15
From version 22.10
edited by ZID Server
on Tuesday, 01 Sep 2026 10:21
on Tuesday, 01 Sep 2026 10:21
Change comment:
allow edit right for XWiki.p0010210
To version 22.16
edited by Veronika Kocher
on Thursday, 03 Sep 2026 13:04
on Thursday, 03 Sep 2026 13:04
Change comment:
There is no comment for this version
Summary
-
Page properties (2 modified, 0 added, 0 removed)
-
Objects (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. server1 +XWiki.p0009670 - Content
-
... ... @@ -114,7 +114,9 @@ 114 114 <div style="padding:18px 18px 14px 18px;flex:1;"> 115 115 <div style="display:inline-block;font-size:12px;font-weight:700;letter-spacing:.065em;color:#4f4a44;margin-bottom:8px;padding:4px 7px;background:#f3efe8;border-radius:4px;">ART & RESEARCH</div> 116 116 <h3 style="font-size:21px;line-height:1.25;margin:0 0 8px 0;color:#252321;">Art & Research Services</h3> 117 - <p style="color:#6a655e;margin:0 0 14px 0;">Plan, manage, publish, share and preserve artistic and research projects.</p> 117 + <p style="color:#6a655e;margin:0 0 8px 0;">Cross-unit guidance for planning, managing, publishing, sharing and preserving artistic and research projects.</p> 118 + <!-- ARSN_ROOT_SCOPE_ROUTING_V1 --> 119 + <div style="font-size:12px;color:#506168;line-height:1.45;margin:0 0 14px 0;padding:7px 9px;background:#eef7f9;border-radius:5px;"><strong>Central project & funding hub:</strong> Support Kunst und Forschung · specialist responsibilities remain with the relevant service units.</div> 118 118 119 119 <div style="font-weight:700;margin-bottom:6px;">I need to…</div> 120 120 <ul style="margin:0 0 14px 18px;padding:0;"> ... ... @@ -282,3 +282,1149 @@ 282 282 283 283 </div> 284 284 {{/html}} 287 + 288 +{{html clean="false"}} 289 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START --> 290 + 291 +<style data-sn-service-navigator-master="1"> 292 +/* ========================================================= 293 + MASTER TYPOGRAPHY 294 + ========================================================= */ 295 +#xwikicontent h1, 296 +#xwikicontent h2, 297 +#xwikicontent h3, 298 +#xwikicontent h4, 299 +#xwikicontent h5, 300 +#xwikicontent h6, 301 +#xwikicontent .box-title, 302 +#xwikicontent [role="heading"], 303 +#xwikicontent h1 a, 304 +#xwikicontent h2 a, 305 +#xwikicontent h3 a, 306 +#xwikicontent h4 a, 307 +#xwikicontent h5 a, 308 +#xwikicontent h6 a, 309 +#xwikicontent .box-title a, 310 +#xwikicontent [role="heading"] a{ 311 + text-align:left!important; 312 + text-justify:auto!important; 313 + word-spacing:normal!important; 314 +} 315 + 316 +/* ========================================================= 317 + COMING SOON / IN VORBEREITUNG 318 + ========================================================= */ 319 +.sn-coming-soon-badge{ 320 + display:inline-block; 321 + vertical-align:middle; 322 + margin-left:10px; 323 + padding:4px 8px; 324 + border-radius:14px; 325 + border:1px solid #efd9cc; 326 + background:#fff4ee; 327 + color:#8a4d36; 328 + font-size:11px; 329 + font-weight:700; 330 + letter-spacing:.055em; 331 + line-height:1.2; 332 + white-space:nowrap; 333 +} 334 + 335 +/* ========================================================= 336 + NATIVE / DETAIL CALLOUT GEOMETRY 337 + Preserve existing backgrounds. 338 + ========================================================= */ 339 +#xwikicontent .arsn-info, 340 +#xwikicontent .dmp-info, 341 +#xwikicontent .ido-info, 342 +#xwikicontent .pp-info, 343 +#xwikicontent .infomessage{ 344 + box-sizing:border-box!important; 345 + border-left:4px solid #21b6d7!important; 346 + border-radius:8px; 347 + text-align:left!important; 348 + word-spacing:normal!important; 349 +} 350 + 351 +#xwikicontent .arsn-warn, 352 +#xwikicontent .dmp-warn, 353 +#xwikicontent .ido-warn, 354 +#xwikicontent .pp-warn, 355 +#xwikicontent .warn, 356 +#xwikicontent .warning, 357 +#xwikicontent .warningmessage, 358 +#xwikicontent .errormessage{ 359 + box-sizing:border-box!important; 360 + border-left:4px solid #e94b13!important; 361 + border-radius:8px; 362 + text-align:left!important; 363 + word-spacing:normal!important; 364 +} 365 + 366 +[data-sn-master-equal-height], 367 +[data-sn-master-first-row]{ 368 + box-sizing:border-box; 369 +} 370 +</style> 371 + 372 +<script data-sn-service-navigator-master="1"> 373 +(function(){ 374 + "use strict"; 375 + 376 + var PAGE_KIND="overview"; 377 + var PLACEHOLDER=false; 378 + var PLACEHOLDER_LABEL="COMING SOON"; 379 + 380 + var MOBILE_MAX=767; 381 + var ROW_TOLERANCE=6; 382 + var RESIZE_DEBOUNCE=220; 383 + 384 + var root= 385 + document.getElementById("xwikicontent")|| 386 + document.querySelector(".xwiki-rendering-content")|| 387 + document.querySelector("main")|| 388 + document.body; 389 + 390 + if(!root)return; 391 + 392 + var managedHeight=new Set(); 393 + var managedMargin=new Set(); 394 + var originalHeight=new WeakMap(); 395 + var originalMargin=new WeakMap(); 396 + 397 + var resizeTimer=0; 398 + var running=false; 399 + 400 + var THEMES=[ 401 + { 402 + name:"BLUE", 403 + accent:"#21b6d7", 404 + bg:"#eaf7fb", 405 + text:"#315d68", 406 + labels:[ 407 + "HIER STARTEN", 408 + "ENTSCHEIDEN", 409 + "ÜBERPRÜFEN & ANPASSEN", 410 + "START HERE", 411 + "DECIDE", 412 + "REVIEW & ADAPT" 413 + ] 414 + }, 415 + { 416 + name:"RED", 417 + accent:"#e94b13", 418 + bg:"#fff1ec", 419 + text:"#8a4d36", 420 + labels:[ 421 + "PLANEN & ORGANISIEREN", 422 + "ORGANISIEREN & DOKUMENTIEREN", 423 + "PUBLIZIEREN & PRÄSENTIEREN", 424 + "PLAN & ORGANISE", 425 + "PLAN & ORGANIZE", 426 + "ORGANISE & DOCUMENT", 427 + "ORGANIZE & DOCUMENT", 428 + "PUBLISH & PRESENT" 429 + ] 430 + }, 431 + { 432 + name:"YELLOW", 433 + accent:"#f0aa00", 434 + bg:"#fff8e7", 435 + text:"#785b17", 436 + labels:[ 437 + "SCHÜTZEN & KLÄREN", 438 + "STANDARDISIEREN & IDENTIFIZIEREN", 439 + "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN", 440 + "PROTECT & CLARIFY", 441 + "STANDARDISE & IDENTIFY", 442 + "STANDARDIZE & IDENTIFY", 443 + "OPEN, REUSE & MAKE FINDABLE" 444 + ] 445 + }, 446 + { 447 + name:"GREEN", 448 + accent:"#38b76a", 449 + bg:"#edf9f1", 450 + text:"#3f7451", 451 + labels:[ 452 + "INFRASTRUKTUR EINRICHTEN", 453 + "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN", 454 + "SPEICHERN & ZUGRIFF STEUERN", 455 + "REPOSITORIUM, ERHALTEN & ÜBERGEBEN", 456 + "SET UP INFRASTRUCTURE", 457 + "SET UP INFRASTRUCTURE & COLLABORATION", 458 + "STORE & CONTROL ACCESS", 459 + "REPOSITORY, PRESERVE & HAND OVER" 460 + ] 461 + } 462 + ]; 463 + 464 + function num(value){ 465 + var n=parseFloat(value); 466 + return Number.isFinite(n)?n:0; 467 + } 468 + 469 + function norm(value){ 470 + return String(value||"") 471 + .replace(/\s+/g," ") 472 + .trim() 473 + .toUpperCase(); 474 + } 475 + 476 + function visible(el){ 477 + if(!el||el.nodeType!==1)return false; 478 + 479 + var style=getComputedStyle(el); 480 + var rect=el.getBoundingClientRect(); 481 + 482 + return ( 483 + style.display!=="none"&& 484 + style.visibility!=="hidden"&& 485 + rect.width>20&& 486 + rect.height>4 487 + ); 488 + } 489 + 490 + function saveStyle(el,map,property){ 491 + if(map.has(el))return; 492 + 493 + map.set(el,{ 494 + value:el.style.getPropertyValue(property), 495 + priority:el.style.getPropertyPriority(property) 496 + }); 497 + } 498 + 499 + function restoreStyle(el,map,property){ 500 + var original=map.get(el); 501 + 502 + if(original&&original.value){ 503 + el.style.setProperty( 504 + property, 505 + original.value, 506 + original.priority||"" 507 + ); 508 + }else{ 509 + el.style.removeProperty(property); 510 + } 511 + } 512 + 513 + function resetRuntime(){ 514 + managedHeight.forEach(function(el){ 515 + restoreStyle( 516 + el, 517 + originalHeight, 518 + "min-height" 519 + ); 520 + el.removeAttribute( 521 + "data-sn-master-equal-height" 522 + ); 523 + }); 524 + 525 + managedMargin.forEach(function(el){ 526 + restoreStyle( 527 + el, 528 + originalMargin, 529 + "margin-top" 530 + ); 531 + el.removeAttribute( 532 + "data-sn-master-first-row" 533 + ); 534 + }); 535 + 536 + managedHeight.clear(); 537 + managedMargin.clear(); 538 + } 539 + 540 + function themeFor(text){ 541 + var value=norm(text); 542 + 543 + for(var i=0;i<THEMES.length;i++){ 544 + for(var j=0;j<THEMES[i].labels.length;j++){ 545 + var label=THEMES[i].labels[j]; 546 + 547 + if( 548 + value===label|| 549 + value.indexOf(label+" ")===0|| 550 + value.indexOf(label+" -")===0|| 551 + value.indexOf(label+" ·")===0 552 + ){ 553 + return THEMES[i]; 554 + } 555 + } 556 + } 557 + 558 + return null; 559 + } 560 + 561 + /* ======================================================= 562 + PLACEHOLDER BADGE 563 + ======================================================= */ 564 + 565 + function applyPlaceholderBadge(){ 566 + if(!PLACEHOLDER)return; 567 + 568 + if( 569 + document.querySelector( 570 + ".sn-coming-soon-badge" 571 + ) 572 + ){ 573 + return; 574 + } 575 + 576 + var title= 577 + document.querySelector( 578 + "#document-title" 579 + )|| 580 + document.querySelector( 581 + "h1" 582 + ); 583 + 584 + if(!title)return; 585 + 586 + var badge= 587 + document.createElement( 588 + "span" 589 + ); 590 + 591 + badge.className= 592 + "sn-coming-soon-badge"; 593 + 594 + badge.textContent= 595 + PLACEHOLDER_LABEL; 596 + 597 + badge.setAttribute( 598 + "aria-label", 599 + PLACEHOLDER_LABEL 600 + ); 601 + 602 + title.appendChild( 603 + badge 604 + ); 605 + } 606 + 607 + /* ======================================================= 608 + DETAIL PAGE OWN-ACCENT PROPAGATION 609 + ======================================================= */ 610 + 611 + function parseRGB(value){ 612 + var match=String(value||"").match( 613 + /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i 614 + ); 615 + 616 + if(!match)return null; 617 + 618 + return [ 619 + Number(match[1]), 620 + Number(match[2]), 621 + Number(match[3]) 622 + ]; 623 + } 624 + 625 + function distance(a,b){ 626 + return Math.sqrt( 627 + Math.pow(a[0]-b[0],2)+ 628 + Math.pow(a[1]-b[1],2)+ 629 + Math.pow(a[2]-b[2],2) 630 + ); 631 + } 632 + 633 + function paletteMatch(cssColor){ 634 + var rgb=parseRGB(cssColor); 635 + 636 + if(!rgb)return null; 637 + 638 + var palette=[ 639 + {hex:"#21b6d7",rgb:[33,182,215]}, 640 + {hex:"#e94b13",rgb:[233,75,19]}, 641 + {hex:"#f0aa00",rgb:[240,170,0]}, 642 + {hex:"#38b76a",rgb:[56,183,106]} 643 + ]; 644 + 645 + var best=null; 646 + var bestDistance=Infinity; 647 + 648 + palette.forEach(function(item){ 649 + var d=distance(rgb,item.rgb); 650 + 651 + if(d<bestDistance){ 652 + best=item; 653 + bestDistance=d; 654 + } 655 + }); 656 + 657 + return bestDistance<=30 658 + ?best 659 + :null; 660 + } 661 + 662 + function propagateDetailAccents(){ 663 + if(PAGE_KIND!=="detail")return; 664 + 665 + Array.from( 666 + root.querySelectorAll( 667 + ".arsn-call,.dmp-call,.ido-call,.pp-call,"+ 668 + ".arsn-source,.dmp-source,.ido-source,.pp-source" 669 + ) 670 + ).forEach(function(el){ 671 + if(!visible(el))return; 672 + 673 + var style=getComputedStyle(el); 674 + 675 + if( 676 + num(style.borderTopWidth)>=2 677 + ){ 678 + var match= 679 + paletteMatch( 680 + style.borderTopColor 681 + ); 682 + 683 + if(match){ 684 + el.style.setProperty( 685 + "border-left", 686 + "4px solid "+match.hex, 687 + "important" 688 + ); 689 + } 690 + } 691 + }); 692 + 693 + // Warning families: explicit safety override. 694 + Array.from( 695 + root.querySelectorAll( 696 + ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+ 697 + ".warn,.warning,.warningmessage,.errormessage" 698 + ) 699 + ).forEach(function(el){ 700 + if(!visible(el))return; 701 + 702 + el.style.setProperty( 703 + "border-left", 704 + "4px solid #e94b13", 705 + "important" 706 + ); 707 + }); 708 + 709 + // Info families: explicit orientation override. 710 + Array.from( 711 + root.querySelectorAll( 712 + ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage" 713 + ) 714 + ).forEach(function(el){ 715 + if(!visible(el))return; 716 + 717 + el.style.setProperty( 718 + "border-left", 719 + "4px solid #21b6d7", 720 + "important" 721 + ); 722 + }); 723 + } 724 + 725 + /* ======================================================= 726 + OVERVIEW SEMANTIC THEME PALETTE 727 + ======================================================= */ 728 + 729 + function smallestThemeHeaders(){ 730 + return Array.from( 731 + root.querySelectorAll( 732 + "div,span,p,strong,h3,h4,h5,h6" 733 + ) 734 + ).filter(function(el){ 735 + if(!visible(el))return false; 736 + if(!themeFor(el.textContent))return false; 737 + 738 + return !Array.from( 739 + el.children||[] 740 + ).some(function(child){ 741 + return !!themeFor( 742 + child.textContent 743 + ); 744 + }); 745 + }); 746 + } 747 + 748 + function findOverviewCard(header){ 749 + var node=header.parentElement; 750 + var candidates=[]; 751 + 752 + while(node&&node!==root){ 753 + var rect=node.getBoundingClientRect(); 754 + var style=getComputedStyle(node); 755 + 756 + var border= 757 + num(style.borderTopWidth)+ 758 + num(style.borderRightWidth)+ 759 + num(style.borderBottomWidth)+ 760 + num(style.borderLeftWidth); 761 + 762 + if( 763 + rect.width>=220&& 764 + rect.width<=800&& 765 + rect.height>=120&& 766 + border>=1 767 + ){ 768 + candidates.push(node); 769 + } 770 + 771 + node=node.parentElement; 772 + } 773 + 774 + if(!candidates.length)return null; 775 + 776 + candidates.sort(function(a,b){ 777 + return ( 778 + b.getBoundingClientRect().height- 779 + a.getBoundingClientRect().height 780 + ); 781 + }); 782 + 783 + return candidates[0]; 784 + } 785 + 786 + function rowCandidates(link,card){ 787 + var result=[]; 788 + var cardRect= 789 + card.getBoundingClientRect(); 790 + 791 + var node=link; 792 + 793 + while(node&&node!==card){ 794 + if(visible(node)){ 795 + var rect= 796 + node.getBoundingClientRect(); 797 + 798 + if( 799 + rect.height<=105&& 800 + rect.width>= 801 + cardRect.width*.50&& 802 + rect.width<= 803 + cardRect.width*1.03 804 + ){ 805 + result.push(node); 806 + } 807 + } 808 + 809 + node=node.parentElement; 810 + } 811 + 812 + return result; 813 + } 814 + 815 + function chooseOuterRow( 816 + candidates, 817 + link 818 + ){ 819 + if(!candidates.length){ 820 + return link; 821 + } 822 + 823 + var bordered= 824 + candidates.filter(function(el){ 825 + return ( 826 + num( 827 + getComputedStyle(el) 828 + .borderLeftWidth 829 + )>=1 830 + ); 831 + }); 832 + 833 + var pool= 834 + bordered.length 835 + ?bordered 836 + :candidates; 837 + 838 + pool.sort(function(a,b){ 839 + var ar= 840 + a.getBoundingClientRect(); 841 + 842 + var br= 843 + b.getBoundingClientRect(); 844 + 845 + return ( 846 + ar.left-br.left|| 847 + br.width-ar.width 848 + ); 849 + }); 850 + 851 + return pool[0]||link; 852 + } 853 + 854 + function applyOverviewPalette(){ 855 + if(PAGE_KIND!=="overview"){ 856 + return []; 857 + } 858 + 859 + var headers= 860 + smallestThemeHeaders() 861 + .map(function(el){ 862 + return { 863 + el:el, 864 + theme: 865 + themeFor( 866 + el.textContent 867 + ), 868 + card: 869 + findOverviewCard( 870 + el 871 + ) 872 + }; 873 + }) 874 + .filter(function(row){ 875 + return !!row.card; 876 + }); 877 + 878 + var unique=[]; 879 + var seenHeaders=new Set(); 880 + 881 + headers.forEach(function(row){ 882 + var key= 883 + row.theme.name+ 884 + "|"+ 885 + Math.round( 886 + row.card 887 + .getBoundingClientRect() 888 + .left 889 + )+ 890 + "|"+ 891 + Math.round( 892 + row.el 893 + .getBoundingClientRect() 894 + .top 895 + ); 896 + 897 + if(!seenHeaders.has(key)){ 898 + seenHeaders.add(key); 899 + unique.push(row); 900 + } 901 + }); 902 + 903 + unique.forEach(function(row){ 904 + var headerRect= 905 + row.el 906 + .getBoundingClientRect(); 907 + 908 + row.el.style.setProperty( 909 + "background", 910 + row.theme.bg, 911 + "important" 912 + ); 913 + 914 + row.el.style.setProperty( 915 + "color", 916 + row.theme.text, 917 + "important" 918 + ); 919 + 920 + row.el.style.setProperty( 921 + "text-align", 922 + "left", 923 + "important" 924 + ); 925 + 926 + row.el.style.setProperty( 927 + "word-spacing", 928 + "normal", 929 + "important" 930 + ); 931 + 932 + var later= 933 + unique 934 + .filter(function(other){ 935 + return ( 936 + other.card===row.card&& 937 + other.el 938 + .getBoundingClientRect() 939 + .top> 940 + headerRect.top+2 941 + ); 942 + }) 943 + .sort(function(a,b){ 944 + return ( 945 + a.el 946 + .getBoundingClientRect() 947 + .top- 948 + b.el 949 + .getBoundingClientRect() 950 + .top 951 + ); 952 + }); 953 + 954 + var stopTop= 955 + later.length 956 + ?later[0].el 957 + .getBoundingClientRect() 958 + .top 959 + :Infinity; 960 + 961 + Array.from( 962 + row.card.querySelectorAll("a") 963 + ).forEach(function(link){ 964 + if(!visible(link))return; 965 + 966 + var rect= 967 + link.getBoundingClientRect(); 968 + 969 + if( 970 + rect.top<= 971 + headerRect.bottom-2|| 972 + rect.top>= 973 + stopTop-2 974 + ){ 975 + return; 976 + } 977 + 978 + var candidates= 979 + rowCandidates( 980 + link, 981 + row.card 982 + ); 983 + 984 + var target= 985 + chooseOuterRow( 986 + candidates, 987 + link 988 + ); 989 + 990 + candidates.forEach(function(el){ 991 + el.style.setProperty( 992 + "border-left", 993 + "0 solid transparent", 994 + "important" 995 + ); 996 + }); 997 + 998 + target.style.setProperty( 999 + "border-left", 1000 + "3px solid "+ 1001 + row.theme.accent, 1002 + "important" 1003 + ); 1004 + 1005 + target.style.setProperty( 1006 + "box-sizing", 1007 + "border-box", 1008 + "important" 1009 + ); 1010 + }); 1011 + }); 1012 + 1013 + return unique; 1014 + } 1015 + 1016 + /* ======================================================= 1017 + OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW 1018 + ======================================================= */ 1019 + 1020 + function alignOverviewCards(headers){ 1021 + if( 1022 + PAGE_KIND!=="overview"|| 1023 + window.innerWidth<=MOBILE_MAX 1024 + ){ 1025 + return; 1026 + } 1027 + 1028 + var cards=[]; 1029 + var seen=new Set(); 1030 + 1031 + headers.forEach(function(row){ 1032 + if(!seen.has(row.card)){ 1033 + seen.add(row.card); 1034 + cards.push(row.card); 1035 + } 1036 + }); 1037 + 1038 + if(cards.length<2){ 1039 + return; 1040 + } 1041 + 1042 + // Group cards by actual top position. 1043 + var groups=[]; 1044 + 1045 + cards.forEach(function(card){ 1046 + var top= 1047 + card.getBoundingClientRect().top; 1048 + 1049 + var group=null; 1050 + 1051 + for(var i=0;i<groups.length;i++){ 1052 + if( 1053 + Math.abs( 1054 + groups[i].top-top 1055 + )<=ROW_TOLERANCE 1056 + ){ 1057 + group=groups[i]; 1058 + break; 1059 + } 1060 + } 1061 + 1062 + if(!group){ 1063 + group={ 1064 + top:top, 1065 + cards:[] 1066 + }; 1067 + groups.push(group); 1068 + } 1069 + 1070 + group.cards.push(card); 1071 + }); 1072 + 1073 + groups.forEach(function(group){ 1074 + if(group.cards.length<2){ 1075 + return; 1076 + } 1077 + 1078 + var firstHeaders= 1079 + group.cards.map(function(card){ 1080 + var candidates= 1081 + headers 1082 + .filter(function(row){ 1083 + return row.card===card; 1084 + }) 1085 + .sort(function(a,b){ 1086 + return ( 1087 + a.el 1088 + .getBoundingClientRect() 1089 + .top- 1090 + b.el 1091 + .getBoundingClientRect() 1092 + .top 1093 + ); 1094 + }); 1095 + 1096 + return candidates.length 1097 + ?candidates[0] 1098 + :null; 1099 + }); 1100 + 1101 + if( 1102 + !firstHeaders.some(function(row){ 1103 + return !row; 1104 + }) 1105 + ){ 1106 + var targetTop= 1107 + Math.max.apply( 1108 + Math, 1109 + firstHeaders.map(function(row){ 1110 + return ( 1111 + row.el 1112 + .getBoundingClientRect() 1113 + .top- 1114 + row.card 1115 + .getBoundingClientRect() 1116 + .top 1117 + ); 1118 + }) 1119 + ); 1120 + 1121 + firstHeaders.forEach(function(row){ 1122 + var relativeTop= 1123 + row.el 1124 + .getBoundingClientRect() 1125 + .top- 1126 + row.card 1127 + .getBoundingClientRect() 1128 + .top; 1129 + 1130 + var delta= 1131 + targetTop-relativeTop; 1132 + 1133 + if(delta>1){ 1134 + saveStyle( 1135 + row.el, 1136 + originalMargin, 1137 + "margin-top" 1138 + ); 1139 + 1140 + var current= 1141 + num( 1142 + getComputedStyle( 1143 + row.el 1144 + ).marginTop 1145 + ); 1146 + 1147 + row.el.style.setProperty( 1148 + "margin-top", 1149 + ( 1150 + current+delta 1151 + )+"px" 1152 + ); 1153 + 1154 + row.el.setAttribute( 1155 + "data-sn-master-first-row", 1156 + "1" 1157 + ); 1158 + 1159 + managedMargin.add( 1160 + row.el 1161 + ); 1162 + } 1163 + }); 1164 + } 1165 + 1166 + var maxHeight=0; 1167 + 1168 + group.cards.forEach(function(card){ 1169 + maxHeight= 1170 + Math.max( 1171 + maxHeight, 1172 + card 1173 + .getBoundingClientRect() 1174 + .height 1175 + ); 1176 + }); 1177 + 1178 + maxHeight= 1179 + Math.ceil(maxHeight); 1180 + 1181 + group.cards.forEach(function(card){ 1182 + saveStyle( 1183 + card, 1184 + originalHeight, 1185 + "min-height" 1186 + ); 1187 + 1188 + card.style.setProperty( 1189 + "min-height", 1190 + maxHeight+"px" 1191 + ); 1192 + 1193 + card.setAttribute( 1194 + "data-sn-master-equal-height", 1195 + "1" 1196 + ); 1197 + 1198 + managedHeight.add( 1199 + card 1200 + ); 1201 + }); 1202 + }); 1203 + } 1204 + 1205 + /* ======================================================= 1206 + DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY 1207 + ======================================================= */ 1208 + 1209 + function equaliseDetailGrids(){ 1210 + if( 1211 + PAGE_KIND!=="detail"|| 1212 + window.innerWidth<=MOBILE_MAX 1213 + ){ 1214 + return; 1215 + } 1216 + 1217 + var selectors=[ 1218 + ".arsn-grid", 1219 + ".arsn-grid-2", 1220 + ".arsn-grid-3", 1221 + ".dmp-grid", 1222 + ".ido-grid", 1223 + ".pp-grid" 1224 + ]; 1225 + 1226 + selectors.forEach(function(selector){ 1227 + Array.from( 1228 + root.querySelectorAll(selector) 1229 + ).forEach(function(grid){ 1230 + var children= 1231 + Array.from( 1232 + grid.children||[] 1233 + ).filter(visible); 1234 + 1235 + if(children.length<2){ 1236 + return; 1237 + } 1238 + 1239 + var groups=[]; 1240 + 1241 + children.forEach(function(child){ 1242 + var top= 1243 + child 1244 + .getBoundingClientRect() 1245 + .top; 1246 + 1247 + var group=null; 1248 + 1249 + for(var i=0;i<groups.length;i++){ 1250 + if( 1251 + Math.abs( 1252 + groups[i].top-top 1253 + )<=ROW_TOLERANCE 1254 + ){ 1255 + group=groups[i]; 1256 + break; 1257 + } 1258 + } 1259 + 1260 + if(!group){ 1261 + group={ 1262 + top:top, 1263 + items:[] 1264 + }; 1265 + groups.push(group); 1266 + } 1267 + 1268 + group.items.push(child); 1269 + }); 1270 + 1271 + groups.forEach(function(group){ 1272 + if(group.items.length<2){ 1273 + return; 1274 + } 1275 + 1276 + var maxHeight=0; 1277 + 1278 + group.items.forEach(function(item){ 1279 + maxHeight= 1280 + Math.max( 1281 + maxHeight, 1282 + item 1283 + .getBoundingClientRect() 1284 + .height 1285 + ); 1286 + }); 1287 + 1288 + maxHeight= 1289 + Math.ceil(maxHeight); 1290 + 1291 + group.items.forEach(function(item){ 1292 + saveStyle( 1293 + item, 1294 + originalHeight, 1295 + "min-height" 1296 + ); 1297 + 1298 + item.style.setProperty( 1299 + "min-height", 1300 + maxHeight+"px" 1301 + ); 1302 + 1303 + item.setAttribute( 1304 + "data-sn-master-equal-height", 1305 + "1" 1306 + ); 1307 + 1308 + managedHeight.add(item); 1309 + }); 1310 + }); 1311 + }); 1312 + }); 1313 + } 1314 + 1315 + /* ======================================================= 1316 + RUN / RESPONSIVE SCHEDULING 1317 + ======================================================= */ 1318 + 1319 + function run(){ 1320 + if(running)return; 1321 + 1322 + running=true; 1323 + 1324 + try{ 1325 + resetRuntime(); 1326 + applyPlaceholderBadge(); 1327 + propagateDetailAccents(); 1328 + 1329 + var headers= 1330 + applyOverviewPalette(); 1331 + 1332 + if( 1333 + window.innerWidth> 1334 + MOBILE_MAX 1335 + ){ 1336 + alignOverviewCards( 1337 + headers 1338 + ); 1339 + 1340 + equaliseDetailGrids(); 1341 + } 1342 + }finally{ 1343 + running=false; 1344 + } 1345 + } 1346 + 1347 + function onResize(){ 1348 + if(resizeTimer){ 1349 + clearTimeout( 1350 + resizeTimer 1351 + ); 1352 + } 1353 + 1354 + resizeTimer= 1355 + setTimeout( 1356 + function(){ 1357 + resizeTimer=0; 1358 + run(); 1359 + }, 1360 + RESIZE_DEBOUNCE 1361 + ); 1362 + } 1363 + 1364 + async function waitForReady(){ 1365 + if( 1366 + document.readyState!=="complete" 1367 + ){ 1368 + await new Promise(function(resolve){ 1369 + window.addEventListener( 1370 + "load", 1371 + resolve, 1372 + {once:true} 1373 + ); 1374 + }); 1375 + } 1376 + 1377 + if( 1378 + document.fonts&& 1379 + document.fonts.ready 1380 + ){ 1381 + try{ 1382 + await document.fonts.ready; 1383 + }catch(error){} 1384 + } 1385 + 1386 + var images= 1387 + Array.from( 1388 + root.querySelectorAll("img") 1389 + ); 1390 + 1391 + await Promise.all( 1392 + images.map(function(img){ 1393 + if(img.complete){ 1394 + return Promise.resolve(); 1395 + } 1396 + 1397 + return new Promise(function(resolve){ 1398 + var done=function(){ 1399 + resolve(); 1400 + }; 1401 + 1402 + img.addEventListener( 1403 + "load", 1404 + done, 1405 + {once:true} 1406 + ); 1407 + 1408 + img.addEventListener( 1409 + "error", 1410 + done, 1411 + {once:true} 1412 + ); 1413 + }); 1414 + }) 1415 + ); 1416 + 1417 + run(); 1418 + } 1419 + 1420 + window.addEventListener( 1421 + "resize", 1422 + onResize, 1423 + {passive:true} 1424 + ); 1425 + 1426 + waitForReady(); 1427 +})(); 1428 +</script> 1429 + 1430 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END --> 1431 +{{/html}} 1432 +
- XWiki.XWikiRights[3]
-
- levels
-
... ... @@ -1,1 +1,1 @@ 1 -view,comment,edit 1 +view,comment,edit,script