Änderungen von Dokument Get Started
Zuletzt geändert von Veronika Kocher am Freitag, 04 Sep. 2026 14:45
Von Version 2.5
bearbeitet von Veronika Kocher
am Donnerstag, 03 Sep. 2026 9:18
am Donnerstag, 03 Sep. 2026 9:18
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Auf Version 2.10
bearbeitet von Veronika Kocher
am Freitag, 04 Sep. 2026 14:23
am Freitag, 04 Sep. 2026 14:23
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Zusammenfassung
-
Seiteneigenschaften (1 geändert, 0 hinzugefügt, 0 gelöscht)
Details
- Seiteneigenschaften
-
- Inhalt
-
... ... @@ -384,25 +384,145 @@ 384 384 <a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Project%20Planning%20%26%20Organisation/">Projektplanung & Organisation</a>, 385 385 <a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Funding%20%26%20Funder%20Requirements/">Förderung & Förderbedingungen</a> und <a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Plan%20Your%20Data%20Management/">Datenmanagement planen</a>. 386 386 </div> 387 + 388 +<!-- ARSN_TRAINING_WORKSHOPS_INCLUDE_V1_START --> 389 +{{include reference="Service Navigator.Art & Research Services Navigator.Code.TrainingWorkshopsBlock" author="target" /}} 390 +<!-- ARSN_TRAINING_WORKSHOPS_INCLUDE_V1_END --> 391 + 392 +<!-- ARSN_PRACTICAL_RESOURCES_FALLBACK_V1_START --> 393 +{{include reference="Service Navigator.Art & Research Services Navigator.Code.PracticalResourcesFallbackBlock" author="target" /}} 394 +<!-- ARSN_PRACTICAL_RESOURCES_FALLBACK_V1_END --> 395 + 387 387 </div> 388 388 {{/html}} 389 389 390 390 {{html clean="false"}} 391 -<!-- SN_HORIZONTAL_BOX_HARMONIZER_START --> 392 -<style data-sn-horizontal-box-harmonizer="1"> 393 -[data-sn-equal-height-managed="1"]{box-sizing:border-box} 394 -@media(max-width:767px){ 395 - [data-sn-equal-height-managed="1"]{min-height:0!important} 400 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START --> 401 + 402 +<style data-sn-service-navigator-master="1"> 403 +/* ========================================================= 404 + MASTER TYPOGRAPHY 405 + ========================================================= */ 406 +#xwikicontent h1, 407 +#xwikicontent h2, 408 +#xwikicontent h3, 409 +#xwikicontent h4, 410 +#xwikicontent h5, 411 +#xwikicontent h6, 412 +#xwikicontent .box-title, 413 +#xwikicontent [role="heading"], 414 +#xwikicontent h1 a, 415 +#xwikicontent h2 a, 416 +#xwikicontent h3 a, 417 +#xwikicontent h4 a, 418 +#xwikicontent h5 a, 419 +#xwikicontent h6 a, 420 +#xwikicontent .box-title a, 421 +#xwikicontent [role="heading"] a{ 422 + text-align:left!important; 423 + text-justify:auto!important; 424 + word-spacing:normal!important; 396 396 } 426 + 427 +/* ========================================================= 428 + COMING SOON / IN VORBEREITUNG 429 + ========================================================= */ 430 +.sn-coming-soon-badge{ 431 + display:inline-block; 432 + vertical-align:middle; 433 + margin-left:10px; 434 + padding:4px 8px; 435 + border-radius:14px; 436 + border:1px solid #efd9cc; 437 + background:#fff4ee; 438 + color:#8a4d36; 439 + font-size:11px; 440 + font-weight:700; 441 + letter-spacing:.055em; 442 + line-height:1.2; 443 + white-space:nowrap; 444 +} 445 + 446 +/* ========================================================= 447 + NATIVE / DETAIL CALLOUT GEOMETRY 448 + Preserve existing backgrounds. 449 + ========================================================= */ 450 +#xwikicontent .arsn-info, 451 +#xwikicontent .dmp-info, 452 +#xwikicontent .ido-info, 453 +#xwikicontent .pp-info, 454 +#xwikicontent .infomessage{ 455 + box-sizing:border-box!important; 456 + border-left:4px solid #21b6d7!important; 457 + border-radius:8px; 458 + text-align:left!important; 459 + word-spacing:normal!important; 460 +} 461 + 462 +#xwikicontent .arsn-warn, 463 +#xwikicontent .dmp-warn, 464 +#xwikicontent .ido-warn, 465 +#xwikicontent .pp-warn, 466 +#xwikicontent .warn, 467 +#xwikicontent .warning, 468 +#xwikicontent .warningmessage, 469 +#xwikicontent .errormessage{ 470 + box-sizing:border-box!important; 471 + border-left:4px solid #e94b13!important; 472 + border-radius:8px; 473 + text-align:left!important; 474 + word-spacing:normal!important; 475 +} 476 + 477 +[data-sn-master-equal-height], 478 +[data-sn-master-first-row]{ 479 + box-sizing:border-box; 480 +} 481 + 482 +/* ========================================================= 483 + FULL-WIDTH THREE-LINE NUMBER / TITLE / SUBTITLE BLOCKS 484 + ========================================================= */ 485 +#xwikicontent .arsn-area-label[data-sn-three-line="1"]{ 486 + display:grid!important; 487 + grid-template-columns:minmax(0,1fr)!important; 488 + grid-auto-rows:auto!important; 489 + width:100%!important; 490 + max-width:none!important; 491 + box-sizing:border-box!important; 492 + justify-items:start!important; 493 + align-items:start!important; 494 + gap:2px!important; 495 + text-align:left!important; 496 + text-align-last:left!important; 497 + text-justify:auto!important; 498 + word-spacing:normal!important; 499 + white-space:normal!important; 500 +} 501 +#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-number, 502 +#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .sn-area-label-title, 503 +#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-action{ 504 + display:block!important; 505 + width:100%!important; 506 + margin:0!important; 507 + text-align:left!important; 508 + text-align-last:left!important; 509 + text-justify:auto!important; 510 + word-spacing:normal!important; 511 + white-space:normal!important; 512 +} 397 397 </style> 398 -<script data-sn-horizontal-box-harmonizer="1"> 514 + 515 +<script data-sn-service-navigator-master="1"> 399 399 (function(){ 400 400 "use strict"; 401 401 519 + var PAGE_KIND="detail"; 520 + var PLACEHOLDER=false; 521 + var PLACEHOLDER_LABEL="IN VORBEREITUNG"; 522 + 402 402 var MOBILE_MAX=767; 403 - var ROW_TOLERANCE=4; 404 - var MIN_W=150; 405 - var MIN_H=36; 524 + var ROW_TOLERANCE=6; 525 + var RESIZE_DEBOUNCE=220; 406 406 407 407 var root= 408 408 document.getElementById("xwikicontent")|| ... ... @@ -412,212 +412,1268 @@ 412 412 413 413 if(!root)return; 414 414 415 - var managed=new Set(); 416 - var raf=0; 535 + var managedHeight=new Set(); 536 + var managedMargin=new Set(); 537 + var originalHeight=new WeakMap(); 538 + var originalMargin=new WeakMap(); 417 417 418 - function num(v){ 419 - var n=parseFloat(v); 540 + var resizeTimer=0; 541 + var running=false; 542 + 543 + var THEMES=[ 544 + { 545 + name:"BLUE", 546 + accent:"#21b6d7", 547 + bg:"#eaf7fb", 548 + text:"#315d68", 549 + labels:[ 550 + "HIER STARTEN", 551 + "ENTSCHEIDEN", 552 + "ÜBERPRÜFEN & ANPASSEN", 553 + "START HERE", 554 + "DECIDE", 555 + "REVIEW & ADAPT" 556 + ] 557 + }, 558 + { 559 + name:"RED", 560 + accent:"#e94b13", 561 + bg:"#fff1ec", 562 + text:"#8a4d36", 563 + labels:[ 564 + "PLANEN & ORGANISIEREN", 565 + "ORGANISIEREN & DOKUMENTIEREN", 566 + "PUBLIZIEREN & PRÄSENTIEREN", 567 + "PLAN & ORGANISE", 568 + "PLAN & ORGANIZE", 569 + "ORGANISE & DOCUMENT", 570 + "ORGANIZE & DOCUMENT", 571 + "PUBLISH & PRESENT" 572 + ] 573 + }, 574 + { 575 + name:"YELLOW", 576 + accent:"#f0aa00", 577 + bg:"#fff8e7", 578 + text:"#785b17", 579 + labels:[ 580 + "SCHÜTZEN & KLÄREN", 581 + "STANDARDISIEREN & IDENTIFIZIEREN", 582 + "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN", 583 + "PROTECT & CLARIFY", 584 + "STANDARDISE & IDENTIFY", 585 + "STANDARDIZE & IDENTIFY", 586 + "OPEN, REUSE & MAKE FINDABLE" 587 + ] 588 + }, 589 + { 590 + name:"GREEN", 591 + accent:"#38b76a", 592 + bg:"#edf9f1", 593 + text:"#3f7451", 594 + labels:[ 595 + "INFRASTRUKTUR EINRICHTEN", 596 + "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN", 597 + "SPEICHERN & ZUGRIFF STEUERN", 598 + "REPOSITORIUM, ERHALTEN & ÜBERGEBEN", 599 + "SET UP INFRASTRUCTURE", 600 + "SET UP INFRASTRUCTURE & COLLABORATION", 601 + "STORE & CONTROL ACCESS", 602 + "REPOSITORY, PRESERVE & HAND OVER" 603 + ] 604 + } 605 + ]; 606 + 607 + function num(value){ 608 + var n=parseFloat(value); 420 420 return Number.isFinite(n)?n:0; 421 421 } 422 422 612 + function norm(value){ 613 + return String(value||"") 614 + .replace(/\s+/g," ") 615 + .trim() 616 + .toUpperCase(); 617 + } 618 + 423 423 function visible(el){ 424 424 if(!el||el.nodeType!==1)return false; 425 - var s=getComputedStyle(el); 426 - if(s.display==="none"||s.visibility==="hidden"||Number(s.opacity)===0)return false; 427 - var r=el.getBoundingClientRect(); 428 - return r.width>=MIN_W&&r.height>=MIN_H; 621 + 622 + var style=getComputedStyle(el); 623 + var rect=el.getBoundingClientRect(); 624 + 625 + return ( 626 + style.display!=="none"&& 627 + style.visibility!=="hidden"&& 628 + rect.width>20&& 629 + rect.height>4 630 + ); 429 429 } 430 430 431 - function excluded(el){ 432 - return !el.matches||el.matches( 433 - "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]" 633 + function saveStyle(el,map,property){ 634 + if(map.has(el))return; 635 + 636 + map.set(el,{ 637 + value:el.style.getPropertyValue(property), 638 + priority:el.style.getPropertyPriority(property) 639 + }); 640 + } 641 + 642 + function restoreStyle(el,map,property){ 643 + var original=map.get(el); 644 + 645 + if(original&&original.value){ 646 + el.style.setProperty( 647 + property, 648 + original.value, 649 + original.priority||"" 650 + ); 651 + }else{ 652 + el.style.removeProperty(property); 653 + } 654 + } 655 + 656 + function resetRuntime(){ 657 + managedHeight.forEach(function(el){ 658 + restoreStyle( 659 + el, 660 + originalHeight, 661 + "min-height" 662 + ); 663 + el.removeAttribute( 664 + "data-sn-master-equal-height" 665 + ); 666 + }); 667 + 668 + managedMargin.forEach(function(el){ 669 + restoreStyle( 670 + el, 671 + originalMargin, 672 + "margin-top" 673 + ); 674 + el.removeAttribute( 675 + "data-sn-master-first-row" 676 + ); 677 + }); 678 + 679 + managedHeight.clear(); 680 + managedMargin.clear(); 681 + } 682 + 683 + function themeFor(text){ 684 + var value=norm(text); 685 + 686 + for(var i=0;i<THEMES.length;i++){ 687 + for(var j=0;j<THEMES[i].labels.length;j++){ 688 + var label=THEMES[i].labels[j]; 689 + 690 + if( 691 + value===label|| 692 + value.indexOf(label+" ")===0|| 693 + value.indexOf(label+" -")===0|| 694 + value.indexOf(label+" ·")===0 695 + ){ 696 + return THEMES[i]; 697 + } 698 + } 699 + } 700 + 701 + return null; 702 + } 703 + 704 + /* ======================================================= 705 + BORDERLESS FILLED RED/ORANGE CTA BUTTONS 706 + ======================================================= */ 707 + 708 + function colourDistance(a,b){ 709 + return Math.sqrt( 710 + Math.pow(a[0]-b[0],2)+ 711 + Math.pow(a[1]-b[1],2)+ 712 + Math.pow(a[2]-b[2],2) 434 434 ); 435 435 } 436 436 437 - function namedLikeBox(el){ 438 - var c=typeof el.className==="string"?el.className:""; 439 - return /(^|[\s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([\s_-]|$)/i.test(c); 716 + function makeFilledRedOrangeCTAsBorderless(){ 717 + var RED_ORANGE=[233,75,19]; 718 + 719 + Array.from( 720 + root.querySelectorAll( 721 + 'a,button,[role="button"],input[type="submit"],input[type="button"]' 722 + ) 723 + ).forEach(function(el){ 724 + if(!visible(el))return; 725 + 726 + var style=getComputedStyle(el); 727 + var rgb=parseRGB(style.backgroundColor); 728 + 729 + if(!rgb)return; 730 + 731 + if( 732 + colourDistance( 733 + rgb, 734 + RED_ORANGE 735 + )>55 736 + ){ 737 + return; 738 + } 739 + 740 + var rect=el.getBoundingClientRect(); 741 + 742 + if( 743 + rect.width<80|| 744 + rect.height<24 745 + ){ 746 + return; 747 + } 748 + 749 + el.style.setProperty( 750 + "border", 751 + "none", 752 + "important" 753 + ); 754 + 755 + el.style.setProperty( 756 + "border-left", 757 + "none", 758 + "important" 759 + ); 760 + 761 + el.style.setProperty( 762 + "border-top", 763 + "none", 764 + "important" 765 + ); 766 + 767 + el.style.setProperty( 768 + "border-right", 769 + "none", 770 + "important" 771 + ); 772 + 773 + el.style.setProperty( 774 + "border-bottom", 775 + "none", 776 + "important" 777 + ); 778 + 779 + el.style.setProperty( 780 + "box-shadow", 781 + "none", 782 + "important" 783 + ); 784 + }); 440 440 } 441 441 442 - function boxLike(el){ 443 - if(!visible(el)||excluded(el))return false; 444 - var s=getComputedStyle(el); 445 - var r=el.getBoundingClientRect(); 446 - var border= 447 - num(s.borderTopWidth)+num(s.borderRightWidth)+ 448 - num(s.borderBottomWidth)+num(s.borderLeftWidth); 449 - var radius=Math.max( 450 - num(s.borderTopLeftRadius),num(s.borderTopRightRadius), 451 - num(s.borderBottomLeftRadius),num(s.borderBottomRightRadius) 787 + /* ======================================================= 788 + FULL-WIDTH THREE-LINE AREA LABELS 789 + ======================================================= */ 790 + 791 + function compactText(value){ 792 + return String(value||"") 793 + .replace(/\s+/g," ") 794 + .trim(); 795 + } 796 + 797 + function makeThreeLineAreaLabels(){ 798 + Array.from( 799 + root.querySelectorAll( 800 + ".arsn-area-label" 801 + ) 802 + ).forEach(function(label){ 803 + if( 804 + label.getAttribute( 805 + "data-sn-three-line" 806 + )==="1" 807 + ){ 808 + return; 809 + } 810 + 811 + var number= 812 + label.querySelector( 813 + ":scope > .arsn-area-number" 814 + ); 815 + 816 + var action= 817 + label.querySelector( 818 + ":scope > .arsn-area-action" 819 + ); 820 + 821 + if( 822 + !number|| 823 + !action 824 + ){ 825 + return; 826 + } 827 + 828 + var clone= 829 + label.cloneNode(true); 830 + 831 + var cloneNumber= 832 + clone.querySelector( 833 + ":scope > .arsn-area-number" 834 + ); 835 + 836 + var cloneAction= 837 + clone.querySelector( 838 + ":scope > .arsn-area-action" 839 + ); 840 + 841 + if(cloneNumber){ 842 + cloneNumber.remove(); 843 + } 844 + 845 + if(cloneAction){ 846 + cloneAction.remove(); 847 + } 848 + 849 + var titleText= 850 + compactText( 851 + clone.textContent 852 + ); 853 + 854 + if(!titleText){ 855 + return; 856 + } 857 + 858 + var numberNode= 859 + number.cloneNode(true); 860 + 861 + var actionNode= 862 + action.cloneNode(true); 863 + 864 + var titleNode= 865 + document.createElement( 866 + "span" 867 + ); 868 + 869 + titleNode.className= 870 + "sn-area-label-title"; 871 + 872 + titleNode.textContent= 873 + titleText; 874 + 875 + while(label.firstChild){ 876 + label.removeChild( 877 + label.firstChild 878 + ); 879 + } 880 + 881 + label.appendChild( 882 + numberNode 883 + ); 884 + 885 + label.appendChild( 886 + titleNode 887 + ); 888 + 889 + label.appendChild( 890 + actionNode 891 + ); 892 + 893 + label.setAttribute( 894 + "data-sn-three-line", 895 + "1" 896 + ); 897 + 898 + var head= 899 + label.closest( 900 + ".arsn-area-head" 901 + ); 902 + 903 + if(head){ 904 + head.style.setProperty( 905 + "width", 906 + "100%", 907 + "important" 908 + ); 909 + 910 + head.style.setProperty( 911 + "max-width", 912 + "100%", 913 + "important" 914 + ); 915 + 916 + head.style.setProperty( 917 + "box-sizing", 918 + "border-box", 919 + "important" 920 + ); 921 + } 922 + }); 923 + } 924 + 925 + /* ======================================================= 926 + PLACEHOLDER BADGE 927 + ======================================================= */ 928 + 929 + function applyPlaceholderBadge(){ 930 + if(!PLACEHOLDER)return; 931 + 932 + if( 933 + document.querySelector( 934 + ".sn-coming-soon-badge" 935 + ) 936 + ){ 937 + return; 938 + } 939 + 940 + var title= 941 + document.querySelector( 942 + "#document-title" 943 + )|| 944 + document.querySelector( 945 + "h1" 946 + ); 947 + 948 + if(!title)return; 949 + 950 + var badge= 951 + document.createElement( 952 + "span" 953 + ); 954 + 955 + badge.className= 956 + "sn-coming-soon-badge"; 957 + 958 + badge.textContent= 959 + PLACEHOLDER_LABEL; 960 + 961 + badge.setAttribute( 962 + "aria-label", 963 + PLACEHOLDER_LABEL 452 452 ); 453 - var bg=s.backgroundColor&&s.backgroundColor!=="rgba(0, 0, 0, 0)"&&s.backgroundColor!=="transparent"; 454 - var shadow=s.boxShadow&&s.boxShadow!=="none"; 455 - return namedLikeBox(el)||border>=1||(bg&&radius>=3)||(shadow&&r.width>=180); 965 + 966 + title.appendChild( 967 + badge 968 + ); 456 456 } 457 457 458 - functionpickTarget(child){459 - if(!visible(child))returnnull;460 - if(boxLike(child))returnchild;971 + /* ======================================================= 972 + DETAIL PAGE OWN-ACCENT PROPAGATION 973 + ======================================================= */ 461 461 462 - var cr=child.getBoundingClientRect(); 463 - var q=[]; 464 - Array.from(child.children||[]).forEach(function(el){ 465 - q.push({el:el,depth:1}); 975 + function parseRGB(value){ 976 + var match=String(value||"").match( 977 + /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i 978 + ); 979 + 980 + if(!match)return null; 981 + 982 + return [ 983 + Number(match[1]), 984 + Number(match[2]), 985 + Number(match[3]) 986 + ]; 987 + } 988 + 989 + function distance(a,b){ 990 + return Math.sqrt( 991 + Math.pow(a[0]-b[0],2)+ 992 + Math.pow(a[1]-b[1],2)+ 993 + Math.pow(a[2]-b[2],2) 994 + ); 995 + } 996 + 997 + function paletteMatch(cssColor){ 998 + var rgb=parseRGB(cssColor); 999 + 1000 + if(!rgb)return null; 1001 + 1002 + var palette=[ 1003 + {hex:"#21b6d7",rgb:[33,182,215]}, 1004 + {hex:"#e94b13",rgb:[233,75,19]}, 1005 + {hex:"#f0aa00",rgb:[240,170,0]}, 1006 + {hex:"#38b76a",rgb:[56,183,106]} 1007 + ]; 1008 + 1009 + var best=null; 1010 + var bestDistance=Infinity; 1011 + 1012 + palette.forEach(function(item){ 1013 + var d=distance(rgb,item.rgb); 1014 + 1015 + if(d<bestDistance){ 1016 + best=item; 1017 + bestDistance=d; 1018 + } 466 466 }); 467 467 468 - var best=null,bestScore=-1; 1021 + return bestDistance<=30 1022 + ?best 1023 + :null; 1024 + } 469 469 470 - while(q.length){ 471 - var item=q.shift(); 472 - var el=item.el; 473 - if(!visible(el))continue; 1026 + function propagateDetailAccents(){ 1027 + if(PAGE_KIND!=="detail")return; 474 474 475 - var r=el.getBoundingClientRect(); 1029 + Array.from( 1030 + root.querySelectorAll( 1031 + ".arsn-call,.dmp-call,.ido-call,.pp-call,"+ 1032 + ".arsn-source,.dmp-source,.ido-source,.pp-source" 1033 + ) 1034 + ).forEach(function(el){ 1035 + if(!visible(el))return; 476 476 477 - if(r.width>=cr.width*.72&&boxLike(el)){ 478 - var widthFit=1-Math.min(1,Math.abs(cr.width-r.width)/Math.max(1,cr.width)); 479 - var topFit=1-Math.min(1,Math.abs(cr.top-r.top)/80); 480 - var score=widthFit*5+topFit*2+Math.min(r.height,600)/600; 481 - if(score>bestScore){ 482 - best=el; 483 - bestScore=score; 1037 + var style=getComputedStyle(el); 1038 + 1039 + if( 1040 + num(style.borderTopWidth)>=2 1041 + ){ 1042 + var match= 1043 + paletteMatch( 1044 + style.borderTopColor 1045 + ); 1046 + 1047 + if(match){ 1048 + el.style.setProperty( 1049 + "border-left", 1050 + "4px solid "+match.hex, 1051 + "important" 1052 + ); 484 484 } 485 485 } 1055 + }); 486 486 487 - if(item.depth<3){ 488 - Array.from(el.children||[]).forEach(function(next){ 489 - q.push({el:next,depth:item.depth+1}); 490 - }); 1057 + // Warning families: explicit safety override. 1058 + Array.from( 1059 + root.querySelectorAll( 1060 + ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+ 1061 + ".warn,.warning,.warningmessage,.errormessage" 1062 + ) 1063 + ).forEach(function(el){ 1064 + if(!visible(el))return; 1065 + 1066 + el.style.setProperty( 1067 + "border-left", 1068 + "4px solid #e94b13", 1069 + "important" 1070 + ); 1071 + }); 1072 + 1073 + // Info families: explicit orientation override. 1074 + Array.from( 1075 + root.querySelectorAll( 1076 + ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage" 1077 + ) 1078 + ).forEach(function(el){ 1079 + if(!visible(el))return; 1080 + 1081 + el.style.setProperty( 1082 + "border-left", 1083 + "4px solid #21b6d7", 1084 + "important" 1085 + ); 1086 + }); 1087 + } 1088 + 1089 + /* ======================================================= 1090 + OVERVIEW SEMANTIC THEME PALETTE 1091 + ======================================================= */ 1092 + 1093 + function smallestThemeHeaders(){ 1094 + return Array.from( 1095 + root.querySelectorAll( 1096 + "div,span,p,strong,h3,h4,h5,h6" 1097 + ) 1098 + ).filter(function(el){ 1099 + if(!visible(el))return false; 1100 + if(!themeFor(el.textContent))return false; 1101 + 1102 + return !Array.from( 1103 + el.children||[] 1104 + ).some(function(child){ 1105 + return !!themeFor( 1106 + child.textContent 1107 + ); 1108 + }); 1109 + }); 1110 + } 1111 + 1112 + function findOverviewCard(header){ 1113 + var node=header.parentElement; 1114 + var candidates=[]; 1115 + 1116 + while(node&&node!==root){ 1117 + var rect=node.getBoundingClientRect(); 1118 + var style=getComputedStyle(node); 1119 + 1120 + var border= 1121 + num(style.borderTopWidth)+ 1122 + num(style.borderRightWidth)+ 1123 + num(style.borderBottomWidth)+ 1124 + num(style.borderLeftWidth); 1125 + 1126 + if( 1127 + rect.width>=220&& 1128 + rect.width<=800&& 1129 + rect.height>=120&& 1130 + border>=1 1131 + ){ 1132 + candidates.push(node); 491 491 } 1134 + 1135 + node=node.parentElement; 492 492 } 493 493 494 - return best; 1138 + if(!candidates.length)return null; 1139 + 1140 + candidates.sort(function(a,b){ 1141 + return ( 1142 + b.getBoundingClientRect().height- 1143 + a.getBoundingClientRect().height 1144 + ); 1145 + }); 1146 + 1147 + return candidates[0]; 495 495 } 496 496 497 - function reset(){ 498 - managed.forEach(function(el){ 499 - el.style.removeProperty("min-height"); 500 - el.removeAttribute("data-sn-equal-height-managed"); 1150 + function rowCandidates(link,card){ 1151 + var result=[]; 1152 + var cardRect= 1153 + card.getBoundingClientRect(); 1154 + 1155 + var node=link; 1156 + 1157 + while(node&&node!==card){ 1158 + if(visible(node)){ 1159 + var rect= 1160 + node.getBoundingClientRect(); 1161 + 1162 + if( 1163 + rect.height<=105&& 1164 + rect.width>= 1165 + cardRect.width*.50&& 1166 + rect.width<= 1167 + cardRect.width*1.03 1168 + ){ 1169 + result.push(node); 1170 + } 1171 + } 1172 + 1173 + node=node.parentElement; 1174 + } 1175 + 1176 + return result; 1177 + } 1178 + 1179 + function chooseOuterRow( 1180 + candidates, 1181 + link 1182 + ){ 1183 + if(!candidates.length){ 1184 + return link; 1185 + } 1186 + 1187 + var bordered= 1188 + candidates.filter(function(el){ 1189 + return ( 1190 + num( 1191 + getComputedStyle(el) 1192 + .borderLeftWidth 1193 + )>=1 1194 + ); 1195 + }); 1196 + 1197 + var pool= 1198 + bordered.length 1199 + ?bordered 1200 + :candidates; 1201 + 1202 + pool.sort(function(a,b){ 1203 + var ar= 1204 + a.getBoundingClientRect(); 1205 + 1206 + var br= 1207 + b.getBoundingClientRect(); 1208 + 1209 + return ( 1210 + ar.left-br.left|| 1211 + br.width-ar.width 1212 + ); 501 501 }); 502 - managed.clear(); 1214 + 1215 + return pool[0]||link; 503 503 } 504 504 505 - function horizontalLayout(parent){ 506 - if(!visible(parent))return false; 507 - var s=getComputedStyle(parent); 508 - if(s.display==="grid"||s.display==="inline-grid")return true; 509 - if(s.display==="flex"||s.display==="inline-flex"){ 510 - return s.flexDirection==="row"||s.flexDirection==="row-reverse"; 1218 + function applyOverviewPalette(){ 1219 + if(PAGE_KIND!=="overview"){ 1220 + return []; 511 511 } 512 - return false; 1222 + 1223 + var headers= 1224 + smallestThemeHeaders() 1225 + .map(function(el){ 1226 + return { 1227 + el:el, 1228 + theme: 1229 + themeFor( 1230 + el.textContent 1231 + ), 1232 + card: 1233 + findOverviewCard( 1234 + el 1235 + ) 1236 + }; 1237 + }) 1238 + .filter(function(row){ 1239 + return !!row.card; 1240 + }); 1241 + 1242 + var unique=[]; 1243 + var seenHeaders=new Set(); 1244 + 1245 + headers.forEach(function(row){ 1246 + var key= 1247 + row.theme.name+ 1248 + "|"+ 1249 + Math.round( 1250 + row.card 1251 + .getBoundingClientRect() 1252 + .left 1253 + )+ 1254 + "|"+ 1255 + Math.round( 1256 + row.el 1257 + .getBoundingClientRect() 1258 + .top 1259 + ); 1260 + 1261 + if(!seenHeaders.has(key)){ 1262 + seenHeaders.add(key); 1263 + unique.push(row); 1264 + } 1265 + }); 1266 + 1267 + unique.forEach(function(row){ 1268 + var headerRect= 1269 + row.el 1270 + .getBoundingClientRect(); 1271 + 1272 + row.el.style.setProperty( 1273 + "background", 1274 + row.theme.bg, 1275 + "important" 1276 + ); 1277 + 1278 + row.el.style.setProperty( 1279 + "color", 1280 + row.theme.text, 1281 + "important" 1282 + ); 1283 + 1284 + row.el.style.setProperty( 1285 + "text-align", 1286 + "left", 1287 + "important" 1288 + ); 1289 + 1290 + row.el.style.setProperty( 1291 + "word-spacing", 1292 + "normal", 1293 + "important" 1294 + ); 1295 + 1296 + var later= 1297 + unique 1298 + .filter(function(other){ 1299 + return ( 1300 + other.card===row.card&& 1301 + other.el 1302 + .getBoundingClientRect() 1303 + .top> 1304 + headerRect.top+2 1305 + ); 1306 + }) 1307 + .sort(function(a,b){ 1308 + return ( 1309 + a.el 1310 + .getBoundingClientRect() 1311 + .top- 1312 + b.el 1313 + .getBoundingClientRect() 1314 + .top 1315 + ); 1316 + }); 1317 + 1318 + var stopTop= 1319 + later.length 1320 + ?later[0].el 1321 + .getBoundingClientRect() 1322 + .top 1323 + :Infinity; 1324 + 1325 + Array.from( 1326 + row.card.querySelectorAll("a") 1327 + ).forEach(function(link){ 1328 + if(!visible(link))return; 1329 + 1330 + var rect= 1331 + link.getBoundingClientRect(); 1332 + 1333 + if( 1334 + rect.top<= 1335 + headerRect.bottom-2|| 1336 + rect.top>= 1337 + stopTop-2 1338 + ){ 1339 + return; 1340 + } 1341 + 1342 + var candidates= 1343 + rowCandidates( 1344 + link, 1345 + row.card 1346 + ); 1347 + 1348 + var target= 1349 + chooseOuterRow( 1350 + candidates, 1351 + link 1352 + ); 1353 + 1354 + candidates.forEach(function(el){ 1355 + el.style.setProperty( 1356 + "border-left", 1357 + "0 solid transparent", 1358 + "important" 1359 + ); 1360 + }); 1361 + 1362 + target.style.setProperty( 1363 + "border-left", 1364 + "3px solid "+ 1365 + row.theme.accent, 1366 + "important" 1367 + ); 1368 + 1369 + target.style.setProperty( 1370 + "box-sizing", 1371 + "border-box", 1372 + "important" 1373 + ); 1374 + }); 1375 + }); 1376 + 1377 + return unique; 513 513 } 514 514 515 - function rowGroups(entries){ 1380 + /* ======================================================= 1381 + OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW 1382 + ======================================================= */ 1383 + 1384 + function alignOverviewCards(headers){ 1385 + if( 1386 + PAGE_KIND!=="overview"|| 1387 + window.innerWidth<=MOBILE_MAX 1388 + ){ 1389 + return; 1390 + } 1391 + 1392 + var cards=[]; 1393 + var seen=new Set(); 1394 + 1395 + headers.forEach(function(row){ 1396 + if(!seen.has(row.card)){ 1397 + seen.add(row.card); 1398 + cards.push(row.card); 1399 + } 1400 + }); 1401 + 1402 + if(cards.length<2){ 1403 + return; 1404 + } 1405 + 1406 + // Group cards by actual top position. 516 516 var groups=[]; 517 - entries.slice().sort(function(a,b){ 518 - return a.rect.top-b.rect.top||a.rect.left-b.rect.left; 519 - }).forEach(function(entry){ 1408 + 1409 + cards.forEach(function(card){ 1410 + var top= 1411 + card.getBoundingClientRect().top; 1412 + 520 520 var group=null; 1414 + 521 521 for(var i=0;i<groups.length;i++){ 522 - if(Math.abs(groups[i].top-entry.rect.top)<=ROW_TOLERANCE){ 1416 + if( 1417 + Math.abs( 1418 + groups[i].top-top 1419 + )<=ROW_TOLERANCE 1420 + ){ 523 523 group=groups[i]; 524 524 break; 525 525 } 526 526 } 1425 + 527 527 if(!group){ 528 - group={top:entry.rect.top,entries:[]}; 1427 + group={ 1428 + top:top, 1429 + cards:[] 1430 + }; 529 529 groups.push(group); 530 530 } 531 - group.entries.push(entry); 1433 + 1434 + group.cards.push(card); 532 532 }); 533 - return groups; 534 - } 535 535 536 - function run(){ 537 - reset(); 1437 + groups.forEach(function(group){ 1438 + if(group.cards.length<2){ 1439 + return; 1440 + } 538 538 539 - if(window.innerWidth<=MOBILE_MAX)return; 1442 + var firstHeaders= 1443 + group.cards.map(function(card){ 1444 + var candidates= 1445 + headers 1446 + .filter(function(row){ 1447 + return row.card===card; 1448 + }) 1449 + .sort(function(a,b){ 1450 + return ( 1451 + a.el 1452 + .getBoundingClientRect() 1453 + .top- 1454 + b.el 1455 + .getBoundingClientRect() 1456 + .top 1457 + ); 1458 + }); 540 540 541 - var parents=Array.from(root.querySelectorAll("*")).filter(function(el){ 542 - return el.children&&el.children.length>=2&&horizontalLayout(el); 543 - }); 1460 + return candidates.length 1461 + ?candidates[0] 1462 + :null; 1463 + }); 544 544 545 - parents.forEach(function(parent){ 546 - var entries=[]; 1465 + if( 1466 + !firstHeaders.some(function(row){ 1467 + return !row; 1468 + }) 1469 + ){ 1470 + var targetTop= 1471 + Math.max.apply( 1472 + Math, 1473 + firstHeaders.map(function(row){ 1474 + return ( 1475 + row.el 1476 + .getBoundingClientRect() 1477 + .top- 1478 + row.card 1479 + .getBoundingClientRect() 1480 + .top 1481 + ); 1482 + }) 1483 + ); 547 547 548 - Array.from(parent.children).forEach(function(child){ 549 - if(!visible(child))return; 550 - var target=pickTarget(child); 551 - if(!target)return; 552 - entries.push({ 553 - target:target, 554 - rect:target.getBoundingClientRect() 1485 + firstHeaders.forEach(function(row){ 1486 + var relativeTop= 1487 + row.el 1488 + .getBoundingClientRect() 1489 + .top- 1490 + row.card 1491 + .getBoundingClientRect() 1492 + .top; 1493 + 1494 + var delta= 1495 + targetTop-relativeTop; 1496 + 1497 + if(delta>1){ 1498 + saveStyle( 1499 + row.el, 1500 + originalMargin, 1501 + "margin-top" 1502 + ); 1503 + 1504 + var current= 1505 + num( 1506 + getComputedStyle( 1507 + row.el 1508 + ).marginTop 1509 + ); 1510 + 1511 + row.el.style.setProperty( 1512 + "margin-top", 1513 + ( 1514 + current+delta 1515 + )+"px" 1516 + ); 1517 + 1518 + row.el.setAttribute( 1519 + "data-sn-master-first-row", 1520 + "1" 1521 + ); 1522 + 1523 + managedMargin.add( 1524 + row.el 1525 + ); 1526 + } 555 555 }); 1528 + } 1529 + 1530 + var maxHeight=0; 1531 + 1532 + group.cards.forEach(function(card){ 1533 + maxHeight= 1534 + Math.max( 1535 + maxHeight, 1536 + card 1537 + .getBoundingClientRect() 1538 + .height 1539 + ); 556 556 }); 557 557 558 - if(entries.length<2)return; 1542 + maxHeight= 1543 + Math.ceil(maxHeight); 559 559 560 - rowGroups(entries).forEach(function(group){ 561 - if(group.entries.length<2)return; 1545 + group.cards.forEach(function(card){ 1546 + saveStyle( 1547 + card, 1548 + originalHeight, 1549 + "min-height" 1550 + ); 562 562 563 - var lefts=group.entries.map(function(e){return e.rect.left;}).sort(function(a,b){return a-b;}); 564 - if(lefts[lefts.length-1]-lefts[0]<80)return; 1552 + card.style.setProperty( 1553 + "min-height", 1554 + maxHeight+"px" 1555 + ); 565 565 566 - var targets=[]; 567 - var seen=new Set(); 1557 + card.setAttribute( 1558 + "data-sn-master-equal-height", 1559 + "1" 1560 + ); 568 568 569 - group.entries.forEach(function(e){ 570 - if(!seen.has(e.target)){ 571 - seen.add(e.target); 572 - targets.push(e.target); 1562 + managedHeight.add( 1563 + card 1564 + ); 1565 + }); 1566 + }); 1567 + } 1568 + 1569 + /* ======================================================= 1570 + DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY 1571 + ======================================================= */ 1572 + 1573 + function equaliseDetailGrids(){ 1574 + if( 1575 + PAGE_KIND!=="detail"|| 1576 + window.innerWidth<=MOBILE_MAX 1577 + ){ 1578 + return; 1579 + } 1580 + 1581 + var selectors=[ 1582 + ".arsn-grid", 1583 + ".arsn-grid-2", 1584 + ".arsn-grid-3", 1585 + ".dmp-grid", 1586 + ".ido-grid", 1587 + ".pp-grid" 1588 + ]; 1589 + 1590 + selectors.forEach(function(selector){ 1591 + Array.from( 1592 + root.querySelectorAll(selector) 1593 + ).forEach(function(grid){ 1594 + var children= 1595 + Array.from( 1596 + grid.children||[] 1597 + ).filter(visible); 1598 + 1599 + if(children.length<2){ 1600 + return; 1601 + } 1602 + 1603 + var groups=[]; 1604 + 1605 + children.forEach(function(child){ 1606 + var top= 1607 + child 1608 + .getBoundingClientRect() 1609 + .top; 1610 + 1611 + var group=null; 1612 + 1613 + for(var i=0;i<groups.length;i++){ 1614 + if( 1615 + Math.abs( 1616 + groups[i].top-top 1617 + )<=ROW_TOLERANCE 1618 + ){ 1619 + group=groups[i]; 1620 + break; 1621 + } 573 573 } 574 - }); 575 575 576 - if(targets.length<2)return; 1624 + if(!group){ 1625 + group={ 1626 + top:top, 1627 + items:[] 1628 + }; 1629 + groups.push(group); 1630 + } 577 577 578 - var max=0; 579 - targets.forEach(function(el){ 580 - max=Math.max(max,el.getBoundingClientRect().height); 1632 + group.items.push(child); 581 581 }); 582 582 583 - max=Math.ceil(max); 584 - if(max<MIN_H)return; 1635 + groups.forEach(function(group){ 1636 + if(group.items.length<2){ 1637 + return; 1638 + } 585 585 586 - targets.forEach(function(el){ 587 - el.style.setProperty("min-height",max+"px"); 588 - el.setAttribute("data-sn-equal-height-managed","1"); 589 - managed.add(el); 1640 + var maxHeight=0; 1641 + 1642 + group.items.forEach(function(item){ 1643 + maxHeight= 1644 + Math.max( 1645 + maxHeight, 1646 + item 1647 + .getBoundingClientRect() 1648 + .height 1649 + ); 1650 + }); 1651 + 1652 + maxHeight= 1653 + Math.ceil(maxHeight); 1654 + 1655 + group.items.forEach(function(item){ 1656 + saveStyle( 1657 + item, 1658 + originalHeight, 1659 + "min-height" 1660 + ); 1661 + 1662 + item.style.setProperty( 1663 + "min-height", 1664 + maxHeight+"px" 1665 + ); 1666 + 1667 + item.setAttribute( 1668 + "data-sn-master-equal-height", 1669 + "1" 1670 + ); 1671 + 1672 + managedHeight.add(item); 1673 + }); 590 590 }); 591 591 }); 592 592 }); 593 593 } 594 594 595 - function schedule(){ 596 - if(raf)cancelAnimationFrame(raf); 597 - raf=requestAnimationFrame(function(){ 598 - raf=requestAnimationFrame(function(){ 599 - raf=0; 600 - run(); 601 - }); 602 - }); 1679 + /* ======================================================= 1680 + RUN / RESPONSIVE SCHEDULING 1681 + ======================================================= */ 1682 + 1683 + function run(){ 1684 + if(running)return; 1685 + 1686 + running=true; 1687 + 1688 + try{ 1689 + resetRuntime(); 1690 + applyPlaceholderBadge(); 1691 + propagateDetailAccents(); 1692 + 1693 + var headers= 1694 + applyOverviewPalette(); 1695 + 1696 + makeThreeLineAreaLabels(); 1697 + makeFilledRedOrangeCTAsBorderless(); 1698 + 1699 + if( 1700 + window.innerWidth> 1701 + MOBILE_MAX 1702 + ){ 1703 + alignOverviewCards( 1704 + headers 1705 + ); 1706 + 1707 + equaliseDetailGrids(); 1708 + } 1709 + }finally{ 1710 + running=false; 1711 + } 603 603 } 604 604 605 - addEventListener("resize",schedule,{passive:true}); 606 - addEventListener("load",schedule,{once:true}); 1714 + function onResize(){ 1715 + if(resizeTimer){ 1716 + clearTimeout( 1717 + resizeTimer 1718 + ); 1719 + } 607 607 608 - root.addEventListener("click",function(){ 609 - setTimeout(schedule,0); 610 - },true); 1721 + resizeTimer= 1722 + setTimeout( 1723 + function(){ 1724 + resizeTimer=0; 1725 + run(); 1726 + }, 1727 + RESIZE_DEBOUNCE 1728 + ); 1729 + } 611 611 612 - if(document.fonts&&document.fonts.ready){ 613 - document.fonts.ready.then(schedule); 1731 + async function waitForReady(){ 1732 + if( 1733 + document.readyState!=="complete" 1734 + ){ 1735 + await new Promise(function(resolve){ 1736 + window.addEventListener( 1737 + "load", 1738 + resolve, 1739 + {once:true} 1740 + ); 1741 + }); 1742 + } 1743 + 1744 + if( 1745 + document.fonts&& 1746 + document.fonts.ready 1747 + ){ 1748 + try{ 1749 + await document.fonts.ready; 1750 + }catch(error){} 1751 + } 1752 + 1753 + var images= 1754 + Array.from( 1755 + root.querySelectorAll("img") 1756 + ); 1757 + 1758 + await Promise.all( 1759 + images.map(function(img){ 1760 + if(img.complete){ 1761 + return Promise.resolve(); 1762 + } 1763 + 1764 + return new Promise(function(resolve){ 1765 + var done=function(){ 1766 + resolve(); 1767 + }; 1768 + 1769 + img.addEventListener( 1770 + "load", 1771 + done, 1772 + {once:true} 1773 + ); 1774 + 1775 + img.addEventListener( 1776 + "error", 1777 + done, 1778 + {once:true} 1779 + ); 1780 + }); 1781 + }) 1782 + ); 1783 + 1784 + run(); 614 614 } 615 615 616 - schedule(); 617 - setTimeout(schedule,250); 618 - setTimeout(schedule,900); 1787 + window.addEventListener( 1788 + "resize", 1789 + onResize, 1790 + {passive:true} 1791 + ); 1792 + 1793 + waitForReady(); 619 619 })(); 620 620 </script> 621 -<!-- SN_HORIZONTAL_BOX_HARMONIZER_END --> 1796 + 1797 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END --> 622 622 {{/html}} 623 623