Änderungen von Dokument Art & Research Services Navigator
Zuletzt geändert von Veronika Kocher am Freitag, 18 Sep. 2026 16:47
Von Version 9.1
bearbeitet von Veronika Kocher
am Donnerstag, 03 Sep. 2026 8:58
am Donnerstag, 03 Sep. 2026 8:58
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Auf Version 9.5
bearbeitet von Veronika Kocher
am Donnerstag, 03 Sep. 2026 13:04
am Donnerstag, 03 Sep. 2026 13:04
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Zusammenfassung
-
Seiteneigenschaften (1 geändert, 0 hinzugefügt, 0 gelöscht)
Details
- Seiteneigenschaften
-
- Inhalt
-
... ... @@ -635,3 +635,1148 @@ 635 635 {{/info}} 636 636 ))) 637 637 638 +{{html clean="false"}} 639 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START --> 640 + 641 +<style data-sn-service-navigator-master="1"> 642 +/* ========================================================= 643 + MASTER TYPOGRAPHY 644 + ========================================================= */ 645 +#xwikicontent h1, 646 +#xwikicontent h2, 647 +#xwikicontent h3, 648 +#xwikicontent h4, 649 +#xwikicontent h5, 650 +#xwikicontent h6, 651 +#xwikicontent .box-title, 652 +#xwikicontent [role="heading"], 653 +#xwikicontent h1 a, 654 +#xwikicontent h2 a, 655 +#xwikicontent h3 a, 656 +#xwikicontent h4 a, 657 +#xwikicontent h5 a, 658 +#xwikicontent h6 a, 659 +#xwikicontent .box-title a, 660 +#xwikicontent [role="heading"] a{ 661 + text-align:left!important; 662 + text-justify:auto!important; 663 + word-spacing:normal!important; 664 +} 665 + 666 +/* ========================================================= 667 + COMING SOON / IN VORBEREITUNG 668 + ========================================================= */ 669 +.sn-coming-soon-badge{ 670 + display:inline-block; 671 + vertical-align:middle; 672 + margin-left:10px; 673 + padding:4px 8px; 674 + border-radius:14px; 675 + border:1px solid #efd9cc; 676 + background:#fff4ee; 677 + color:#8a4d36; 678 + font-size:11px; 679 + font-weight:700; 680 + letter-spacing:.055em; 681 + line-height:1.2; 682 + white-space:nowrap; 683 +} 684 + 685 +/* ========================================================= 686 + NATIVE / DETAIL CALLOUT GEOMETRY 687 + Preserve existing backgrounds. 688 + ========================================================= */ 689 +#xwikicontent .arsn-info, 690 +#xwikicontent .dmp-info, 691 +#xwikicontent .ido-info, 692 +#xwikicontent .pp-info, 693 +#xwikicontent .infomessage{ 694 + box-sizing:border-box!important; 695 + border-left:4px solid #21b6d7!important; 696 + border-radius:8px; 697 + text-align:left!important; 698 + word-spacing:normal!important; 699 +} 700 + 701 +#xwikicontent .arsn-warn, 702 +#xwikicontent .dmp-warn, 703 +#xwikicontent .ido-warn, 704 +#xwikicontent .pp-warn, 705 +#xwikicontent .warn, 706 +#xwikicontent .warning, 707 +#xwikicontent .warningmessage, 708 +#xwikicontent .errormessage{ 709 + box-sizing:border-box!important; 710 + border-left:4px solid #e94b13!important; 711 + border-radius:8px; 712 + text-align:left!important; 713 + word-spacing:normal!important; 714 +} 715 + 716 +[data-sn-master-equal-height], 717 +[data-sn-master-first-row]{ 718 + box-sizing:border-box; 719 +} 720 +</style> 721 + 722 +<script data-sn-service-navigator-master="1"> 723 +(function(){ 724 + "use strict"; 725 + 726 + var PAGE_KIND="overview"; 727 + var PLACEHOLDER=false; 728 + var PLACEHOLDER_LABEL="IN VORBEREITUNG"; 729 + 730 + var MOBILE_MAX=767; 731 + var ROW_TOLERANCE=6; 732 + var RESIZE_DEBOUNCE=220; 733 + 734 + var root= 735 + document.getElementById("xwikicontent")|| 736 + document.querySelector(".xwiki-rendering-content")|| 737 + document.querySelector("main")|| 738 + document.body; 739 + 740 + if(!root)return; 741 + 742 + var managedHeight=new Set(); 743 + var managedMargin=new Set(); 744 + var originalHeight=new WeakMap(); 745 + var originalMargin=new WeakMap(); 746 + 747 + var resizeTimer=0; 748 + var running=false; 749 + 750 + var THEMES=[ 751 + { 752 + name:"BLUE", 753 + accent:"#21b6d7", 754 + bg:"#eaf7fb", 755 + text:"#315d68", 756 + labels:[ 757 + "HIER STARTEN", 758 + "ENTSCHEIDEN", 759 + "ÜBERPRÜFEN & ANPASSEN", 760 + "START HERE", 761 + "DECIDE", 762 + "REVIEW & ADAPT" 763 + ] 764 + }, 765 + { 766 + name:"RED", 767 + accent:"#e94b13", 768 + bg:"#fff1ec", 769 + text:"#8a4d36", 770 + labels:[ 771 + "PLANEN & ORGANISIEREN", 772 + "ORGANISIEREN & DOKUMENTIEREN", 773 + "PUBLIZIEREN & PRÄSENTIEREN", 774 + "PLAN & ORGANISE", 775 + "PLAN & ORGANIZE", 776 + "ORGANISE & DOCUMENT", 777 + "ORGANIZE & DOCUMENT", 778 + "PUBLISH & PRESENT" 779 + ] 780 + }, 781 + { 782 + name:"YELLOW", 783 + accent:"#f0aa00", 784 + bg:"#fff8e7", 785 + text:"#785b17", 786 + labels:[ 787 + "SCHÜTZEN & KLÄREN", 788 + "STANDARDISIEREN & IDENTIFIZIEREN", 789 + "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN", 790 + "PROTECT & CLARIFY", 791 + "STANDARDISE & IDENTIFY", 792 + "STANDARDIZE & IDENTIFY", 793 + "OPEN, REUSE & MAKE FINDABLE" 794 + ] 795 + }, 796 + { 797 + name:"GREEN", 798 + accent:"#38b76a", 799 + bg:"#edf9f1", 800 + text:"#3f7451", 801 + labels:[ 802 + "INFRASTRUKTUR EINRICHTEN", 803 + "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN", 804 + "SPEICHERN & ZUGRIFF STEUERN", 805 + "REPOSITORIUM, ERHALTEN & ÜBERGEBEN", 806 + "SET UP INFRASTRUCTURE", 807 + "SET UP INFRASTRUCTURE & COLLABORATION", 808 + "STORE & CONTROL ACCESS", 809 + "REPOSITORY, PRESERVE & HAND OVER" 810 + ] 811 + } 812 + ]; 813 + 814 + function num(value){ 815 + var n=parseFloat(value); 816 + return Number.isFinite(n)?n:0; 817 + } 818 + 819 + function norm(value){ 820 + return String(value||"") 821 + .replace(/\s+/g," ") 822 + .trim() 823 + .toUpperCase(); 824 + } 825 + 826 + function visible(el){ 827 + if(!el||el.nodeType!==1)return false; 828 + 829 + var style=getComputedStyle(el); 830 + var rect=el.getBoundingClientRect(); 831 + 832 + return ( 833 + style.display!=="none"&& 834 + style.visibility!=="hidden"&& 835 + rect.width>20&& 836 + rect.height>4 837 + ); 838 + } 839 + 840 + function saveStyle(el,map,property){ 841 + if(map.has(el))return; 842 + 843 + map.set(el,{ 844 + value:el.style.getPropertyValue(property), 845 + priority:el.style.getPropertyPriority(property) 846 + }); 847 + } 848 + 849 + function restoreStyle(el,map,property){ 850 + var original=map.get(el); 851 + 852 + if(original&&original.value){ 853 + el.style.setProperty( 854 + property, 855 + original.value, 856 + original.priority||"" 857 + ); 858 + }else{ 859 + el.style.removeProperty(property); 860 + } 861 + } 862 + 863 + function resetRuntime(){ 864 + managedHeight.forEach(function(el){ 865 + restoreStyle( 866 + el, 867 + originalHeight, 868 + "min-height" 869 + ); 870 + el.removeAttribute( 871 + "data-sn-master-equal-height" 872 + ); 873 + }); 874 + 875 + managedMargin.forEach(function(el){ 876 + restoreStyle( 877 + el, 878 + originalMargin, 879 + "margin-top" 880 + ); 881 + el.removeAttribute( 882 + "data-sn-master-first-row" 883 + ); 884 + }); 885 + 886 + managedHeight.clear(); 887 + managedMargin.clear(); 888 + } 889 + 890 + function themeFor(text){ 891 + var value=norm(text); 892 + 893 + for(var i=0;i<THEMES.length;i++){ 894 + for(var j=0;j<THEMES[i].labels.length;j++){ 895 + var label=THEMES[i].labels[j]; 896 + 897 + if( 898 + value===label|| 899 + value.indexOf(label+" ")===0|| 900 + value.indexOf(label+" -")===0|| 901 + value.indexOf(label+" ·")===0 902 + ){ 903 + return THEMES[i]; 904 + } 905 + } 906 + } 907 + 908 + return null; 909 + } 910 + 911 + /* ======================================================= 912 + PLACEHOLDER BADGE 913 + ======================================================= */ 914 + 915 + function applyPlaceholderBadge(){ 916 + if(!PLACEHOLDER)return; 917 + 918 + if( 919 + document.querySelector( 920 + ".sn-coming-soon-badge" 921 + ) 922 + ){ 923 + return; 924 + } 925 + 926 + var title= 927 + document.querySelector( 928 + "#document-title" 929 + )|| 930 + document.querySelector( 931 + "h1" 932 + ); 933 + 934 + if(!title)return; 935 + 936 + var badge= 937 + document.createElement( 938 + "span" 939 + ); 940 + 941 + badge.className= 942 + "sn-coming-soon-badge"; 943 + 944 + badge.textContent= 945 + PLACEHOLDER_LABEL; 946 + 947 + badge.setAttribute( 948 + "aria-label", 949 + PLACEHOLDER_LABEL 950 + ); 951 + 952 + title.appendChild( 953 + badge 954 + ); 955 + } 956 + 957 + /* ======================================================= 958 + DETAIL PAGE OWN-ACCENT PROPAGATION 959 + ======================================================= */ 960 + 961 + function parseRGB(value){ 962 + var match=String(value||"").match( 963 + /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i 964 + ); 965 + 966 + if(!match)return null; 967 + 968 + return [ 969 + Number(match[1]), 970 + Number(match[2]), 971 + Number(match[3]) 972 + ]; 973 + } 974 + 975 + function distance(a,b){ 976 + return Math.sqrt( 977 + Math.pow(a[0]-b[0],2)+ 978 + Math.pow(a[1]-b[1],2)+ 979 + Math.pow(a[2]-b[2],2) 980 + ); 981 + } 982 + 983 + function paletteMatch(cssColor){ 984 + var rgb=parseRGB(cssColor); 985 + 986 + if(!rgb)return null; 987 + 988 + var palette=[ 989 + {hex:"#21b6d7",rgb:[33,182,215]}, 990 + {hex:"#e94b13",rgb:[233,75,19]}, 991 + {hex:"#f0aa00",rgb:[240,170,0]}, 992 + {hex:"#38b76a",rgb:[56,183,106]} 993 + ]; 994 + 995 + var best=null; 996 + var bestDistance=Infinity; 997 + 998 + palette.forEach(function(item){ 999 + var d=distance(rgb,item.rgb); 1000 + 1001 + if(d<bestDistance){ 1002 + best=item; 1003 + bestDistance=d; 1004 + } 1005 + }); 1006 + 1007 + return bestDistance<=30 1008 + ?best 1009 + :null; 1010 + } 1011 + 1012 + function propagateDetailAccents(){ 1013 + if(PAGE_KIND!=="detail")return; 1014 + 1015 + Array.from( 1016 + root.querySelectorAll( 1017 + ".arsn-call,.dmp-call,.ido-call,.pp-call,"+ 1018 + ".arsn-source,.dmp-source,.ido-source,.pp-source" 1019 + ) 1020 + ).forEach(function(el){ 1021 + if(!visible(el))return; 1022 + 1023 + var style=getComputedStyle(el); 1024 + 1025 + if( 1026 + num(style.borderTopWidth)>=2 1027 + ){ 1028 + var match= 1029 + paletteMatch( 1030 + style.borderTopColor 1031 + ); 1032 + 1033 + if(match){ 1034 + el.style.setProperty( 1035 + "border-left", 1036 + "4px solid "+match.hex, 1037 + "important" 1038 + ); 1039 + } 1040 + } 1041 + }); 1042 + 1043 + // Warning families: explicit safety override. 1044 + Array.from( 1045 + root.querySelectorAll( 1046 + ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+ 1047 + ".warn,.warning,.warningmessage,.errormessage" 1048 + ) 1049 + ).forEach(function(el){ 1050 + if(!visible(el))return; 1051 + 1052 + el.style.setProperty( 1053 + "border-left", 1054 + "4px solid #e94b13", 1055 + "important" 1056 + ); 1057 + }); 1058 + 1059 + // Info families: explicit orientation override. 1060 + Array.from( 1061 + root.querySelectorAll( 1062 + ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage" 1063 + ) 1064 + ).forEach(function(el){ 1065 + if(!visible(el))return; 1066 + 1067 + el.style.setProperty( 1068 + "border-left", 1069 + "4px solid #21b6d7", 1070 + "important" 1071 + ); 1072 + }); 1073 + } 1074 + 1075 + /* ======================================================= 1076 + OVERVIEW SEMANTIC THEME PALETTE 1077 + ======================================================= */ 1078 + 1079 + function smallestThemeHeaders(){ 1080 + return Array.from( 1081 + root.querySelectorAll( 1082 + "div,span,p,strong,h3,h4,h5,h6" 1083 + ) 1084 + ).filter(function(el){ 1085 + if(!visible(el))return false; 1086 + if(!themeFor(el.textContent))return false; 1087 + 1088 + return !Array.from( 1089 + el.children||[] 1090 + ).some(function(child){ 1091 + return !!themeFor( 1092 + child.textContent 1093 + ); 1094 + }); 1095 + }); 1096 + } 1097 + 1098 + function findOverviewCard(header){ 1099 + var node=header.parentElement; 1100 + var candidates=[]; 1101 + 1102 + while(node&&node!==root){ 1103 + var rect=node.getBoundingClientRect(); 1104 + var style=getComputedStyle(node); 1105 + 1106 + var border= 1107 + num(style.borderTopWidth)+ 1108 + num(style.borderRightWidth)+ 1109 + num(style.borderBottomWidth)+ 1110 + num(style.borderLeftWidth); 1111 + 1112 + if( 1113 + rect.width>=220&& 1114 + rect.width<=800&& 1115 + rect.height>=120&& 1116 + border>=1 1117 + ){ 1118 + candidates.push(node); 1119 + } 1120 + 1121 + node=node.parentElement; 1122 + } 1123 + 1124 + if(!candidates.length)return null; 1125 + 1126 + candidates.sort(function(a,b){ 1127 + return ( 1128 + b.getBoundingClientRect().height- 1129 + a.getBoundingClientRect().height 1130 + ); 1131 + }); 1132 + 1133 + return candidates[0]; 1134 + } 1135 + 1136 + function rowCandidates(link,card){ 1137 + var result=[]; 1138 + var cardRect= 1139 + card.getBoundingClientRect(); 1140 + 1141 + var node=link; 1142 + 1143 + while(node&&node!==card){ 1144 + if(visible(node)){ 1145 + var rect= 1146 + node.getBoundingClientRect(); 1147 + 1148 + if( 1149 + rect.height<=105&& 1150 + rect.width>= 1151 + cardRect.width*.50&& 1152 + rect.width<= 1153 + cardRect.width*1.03 1154 + ){ 1155 + result.push(node); 1156 + } 1157 + } 1158 + 1159 + node=node.parentElement; 1160 + } 1161 + 1162 + return result; 1163 + } 1164 + 1165 + function chooseOuterRow( 1166 + candidates, 1167 + link 1168 + ){ 1169 + if(!candidates.length){ 1170 + return link; 1171 + } 1172 + 1173 + var bordered= 1174 + candidates.filter(function(el){ 1175 + return ( 1176 + num( 1177 + getComputedStyle(el) 1178 + .borderLeftWidth 1179 + )>=1 1180 + ); 1181 + }); 1182 + 1183 + var pool= 1184 + bordered.length 1185 + ?bordered 1186 + :candidates; 1187 + 1188 + pool.sort(function(a,b){ 1189 + var ar= 1190 + a.getBoundingClientRect(); 1191 + 1192 + var br= 1193 + b.getBoundingClientRect(); 1194 + 1195 + return ( 1196 + ar.left-br.left|| 1197 + br.width-ar.width 1198 + ); 1199 + }); 1200 + 1201 + return pool[0]||link; 1202 + } 1203 + 1204 + function applyOverviewPalette(){ 1205 + if(PAGE_KIND!=="overview"){ 1206 + return []; 1207 + } 1208 + 1209 + var headers= 1210 + smallestThemeHeaders() 1211 + .map(function(el){ 1212 + return { 1213 + el:el, 1214 + theme: 1215 + themeFor( 1216 + el.textContent 1217 + ), 1218 + card: 1219 + findOverviewCard( 1220 + el 1221 + ) 1222 + }; 1223 + }) 1224 + .filter(function(row){ 1225 + return !!row.card; 1226 + }); 1227 + 1228 + var unique=[]; 1229 + var seenHeaders=new Set(); 1230 + 1231 + headers.forEach(function(row){ 1232 + var key= 1233 + row.theme.name+ 1234 + "|"+ 1235 + Math.round( 1236 + row.card 1237 + .getBoundingClientRect() 1238 + .left 1239 + )+ 1240 + "|"+ 1241 + Math.round( 1242 + row.el 1243 + .getBoundingClientRect() 1244 + .top 1245 + ); 1246 + 1247 + if(!seenHeaders.has(key)){ 1248 + seenHeaders.add(key); 1249 + unique.push(row); 1250 + } 1251 + }); 1252 + 1253 + unique.forEach(function(row){ 1254 + var headerRect= 1255 + row.el 1256 + .getBoundingClientRect(); 1257 + 1258 + row.el.style.setProperty( 1259 + "background", 1260 + row.theme.bg, 1261 + "important" 1262 + ); 1263 + 1264 + row.el.style.setProperty( 1265 + "color", 1266 + row.theme.text, 1267 + "important" 1268 + ); 1269 + 1270 + row.el.style.setProperty( 1271 + "text-align", 1272 + "left", 1273 + "important" 1274 + ); 1275 + 1276 + row.el.style.setProperty( 1277 + "word-spacing", 1278 + "normal", 1279 + "important" 1280 + ); 1281 + 1282 + var later= 1283 + unique 1284 + .filter(function(other){ 1285 + return ( 1286 + other.card===row.card&& 1287 + other.el 1288 + .getBoundingClientRect() 1289 + .top> 1290 + headerRect.top+2 1291 + ); 1292 + }) 1293 + .sort(function(a,b){ 1294 + return ( 1295 + a.el 1296 + .getBoundingClientRect() 1297 + .top- 1298 + b.el 1299 + .getBoundingClientRect() 1300 + .top 1301 + ); 1302 + }); 1303 + 1304 + var stopTop= 1305 + later.length 1306 + ?later[0].el 1307 + .getBoundingClientRect() 1308 + .top 1309 + :Infinity; 1310 + 1311 + Array.from( 1312 + row.card.querySelectorAll("a") 1313 + ).forEach(function(link){ 1314 + if(!visible(link))return; 1315 + 1316 + var rect= 1317 + link.getBoundingClientRect(); 1318 + 1319 + if( 1320 + rect.top<= 1321 + headerRect.bottom-2|| 1322 + rect.top>= 1323 + stopTop-2 1324 + ){ 1325 + return; 1326 + } 1327 + 1328 + var candidates= 1329 + rowCandidates( 1330 + link, 1331 + row.card 1332 + ); 1333 + 1334 + var target= 1335 + chooseOuterRow( 1336 + candidates, 1337 + link 1338 + ); 1339 + 1340 + candidates.forEach(function(el){ 1341 + el.style.setProperty( 1342 + "border-left", 1343 + "0 solid transparent", 1344 + "important" 1345 + ); 1346 + }); 1347 + 1348 + target.style.setProperty( 1349 + "border-left", 1350 + "3px solid "+ 1351 + row.theme.accent, 1352 + "important" 1353 + ); 1354 + 1355 + target.style.setProperty( 1356 + "box-sizing", 1357 + "border-box", 1358 + "important" 1359 + ); 1360 + }); 1361 + }); 1362 + 1363 + return unique; 1364 + } 1365 + 1366 + /* ======================================================= 1367 + OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW 1368 + ======================================================= */ 1369 + 1370 + function alignOverviewCards(headers){ 1371 + if( 1372 + PAGE_KIND!=="overview"|| 1373 + window.innerWidth<=MOBILE_MAX 1374 + ){ 1375 + return; 1376 + } 1377 + 1378 + var cards=[]; 1379 + var seen=new Set(); 1380 + 1381 + headers.forEach(function(row){ 1382 + if(!seen.has(row.card)){ 1383 + seen.add(row.card); 1384 + cards.push(row.card); 1385 + } 1386 + }); 1387 + 1388 + if(cards.length<2){ 1389 + return; 1390 + } 1391 + 1392 + // Group cards by actual top position. 1393 + var groups=[]; 1394 + 1395 + cards.forEach(function(card){ 1396 + var top= 1397 + card.getBoundingClientRect().top; 1398 + 1399 + var group=null; 1400 + 1401 + for(var i=0;i<groups.length;i++){ 1402 + if( 1403 + Math.abs( 1404 + groups[i].top-top 1405 + )<=ROW_TOLERANCE 1406 + ){ 1407 + group=groups[i]; 1408 + break; 1409 + } 1410 + } 1411 + 1412 + if(!group){ 1413 + group={ 1414 + top:top, 1415 + cards:[] 1416 + }; 1417 + groups.push(group); 1418 + } 1419 + 1420 + group.cards.push(card); 1421 + }); 1422 + 1423 + groups.forEach(function(group){ 1424 + if(group.cards.length<2){ 1425 + return; 1426 + } 1427 + 1428 + var firstHeaders= 1429 + group.cards.map(function(card){ 1430 + var candidates= 1431 + headers 1432 + .filter(function(row){ 1433 + return row.card===card; 1434 + }) 1435 + .sort(function(a,b){ 1436 + return ( 1437 + a.el 1438 + .getBoundingClientRect() 1439 + .top- 1440 + b.el 1441 + .getBoundingClientRect() 1442 + .top 1443 + ); 1444 + }); 1445 + 1446 + return candidates.length 1447 + ?candidates[0] 1448 + :null; 1449 + }); 1450 + 1451 + if( 1452 + !firstHeaders.some(function(row){ 1453 + return !row; 1454 + }) 1455 + ){ 1456 + var targetTop= 1457 + Math.max.apply( 1458 + Math, 1459 + firstHeaders.map(function(row){ 1460 + return ( 1461 + row.el 1462 + .getBoundingClientRect() 1463 + .top- 1464 + row.card 1465 + .getBoundingClientRect() 1466 + .top 1467 + ); 1468 + }) 1469 + ); 1470 + 1471 + firstHeaders.forEach(function(row){ 1472 + var relativeTop= 1473 + row.el 1474 + .getBoundingClientRect() 1475 + .top- 1476 + row.card 1477 + .getBoundingClientRect() 1478 + .top; 1479 + 1480 + var delta= 1481 + targetTop-relativeTop; 1482 + 1483 + if(delta>1){ 1484 + saveStyle( 1485 + row.el, 1486 + originalMargin, 1487 + "margin-top" 1488 + ); 1489 + 1490 + var current= 1491 + num( 1492 + getComputedStyle( 1493 + row.el 1494 + ).marginTop 1495 + ); 1496 + 1497 + row.el.style.setProperty( 1498 + "margin-top", 1499 + ( 1500 + current+delta 1501 + )+"px" 1502 + ); 1503 + 1504 + row.el.setAttribute( 1505 + "data-sn-master-first-row", 1506 + "1" 1507 + ); 1508 + 1509 + managedMargin.add( 1510 + row.el 1511 + ); 1512 + } 1513 + }); 1514 + } 1515 + 1516 + var maxHeight=0; 1517 + 1518 + group.cards.forEach(function(card){ 1519 + maxHeight= 1520 + Math.max( 1521 + maxHeight, 1522 + card 1523 + .getBoundingClientRect() 1524 + .height 1525 + ); 1526 + }); 1527 + 1528 + maxHeight= 1529 + Math.ceil(maxHeight); 1530 + 1531 + group.cards.forEach(function(card){ 1532 + saveStyle( 1533 + card, 1534 + originalHeight, 1535 + "min-height" 1536 + ); 1537 + 1538 + card.style.setProperty( 1539 + "min-height", 1540 + maxHeight+"px" 1541 + ); 1542 + 1543 + card.setAttribute( 1544 + "data-sn-master-equal-height", 1545 + "1" 1546 + ); 1547 + 1548 + managedHeight.add( 1549 + card 1550 + ); 1551 + }); 1552 + }); 1553 + } 1554 + 1555 + /* ======================================================= 1556 + DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY 1557 + ======================================================= */ 1558 + 1559 + function equaliseDetailGrids(){ 1560 + if( 1561 + PAGE_KIND!=="detail"|| 1562 + window.innerWidth<=MOBILE_MAX 1563 + ){ 1564 + return; 1565 + } 1566 + 1567 + var selectors=[ 1568 + ".arsn-grid", 1569 + ".arsn-grid-2", 1570 + ".arsn-grid-3", 1571 + ".dmp-grid", 1572 + ".ido-grid", 1573 + ".pp-grid" 1574 + ]; 1575 + 1576 + selectors.forEach(function(selector){ 1577 + Array.from( 1578 + root.querySelectorAll(selector) 1579 + ).forEach(function(grid){ 1580 + var children= 1581 + Array.from( 1582 + grid.children||[] 1583 + ).filter(visible); 1584 + 1585 + if(children.length<2){ 1586 + return; 1587 + } 1588 + 1589 + var groups=[]; 1590 + 1591 + children.forEach(function(child){ 1592 + var top= 1593 + child 1594 + .getBoundingClientRect() 1595 + .top; 1596 + 1597 + var group=null; 1598 + 1599 + for(var i=0;i<groups.length;i++){ 1600 + if( 1601 + Math.abs( 1602 + groups[i].top-top 1603 + )<=ROW_TOLERANCE 1604 + ){ 1605 + group=groups[i]; 1606 + break; 1607 + } 1608 + } 1609 + 1610 + if(!group){ 1611 + group={ 1612 + top:top, 1613 + items:[] 1614 + }; 1615 + groups.push(group); 1616 + } 1617 + 1618 + group.items.push(child); 1619 + }); 1620 + 1621 + groups.forEach(function(group){ 1622 + if(group.items.length<2){ 1623 + return; 1624 + } 1625 + 1626 + var maxHeight=0; 1627 + 1628 + group.items.forEach(function(item){ 1629 + maxHeight= 1630 + Math.max( 1631 + maxHeight, 1632 + item 1633 + .getBoundingClientRect() 1634 + .height 1635 + ); 1636 + }); 1637 + 1638 + maxHeight= 1639 + Math.ceil(maxHeight); 1640 + 1641 + group.items.forEach(function(item){ 1642 + saveStyle( 1643 + item, 1644 + originalHeight, 1645 + "min-height" 1646 + ); 1647 + 1648 + item.style.setProperty( 1649 + "min-height", 1650 + maxHeight+"px" 1651 + ); 1652 + 1653 + item.setAttribute( 1654 + "data-sn-master-equal-height", 1655 + "1" 1656 + ); 1657 + 1658 + managedHeight.add(item); 1659 + }); 1660 + }); 1661 + }); 1662 + }); 1663 + } 1664 + 1665 + /* ======================================================= 1666 + RUN / RESPONSIVE SCHEDULING 1667 + ======================================================= */ 1668 + 1669 + function run(){ 1670 + if(running)return; 1671 + 1672 + running=true; 1673 + 1674 + try{ 1675 + resetRuntime(); 1676 + applyPlaceholderBadge(); 1677 + propagateDetailAccents(); 1678 + 1679 + var headers= 1680 + applyOverviewPalette(); 1681 + 1682 + if( 1683 + window.innerWidth> 1684 + MOBILE_MAX 1685 + ){ 1686 + alignOverviewCards( 1687 + headers 1688 + ); 1689 + 1690 + equaliseDetailGrids(); 1691 + } 1692 + }finally{ 1693 + running=false; 1694 + } 1695 + } 1696 + 1697 + function onResize(){ 1698 + if(resizeTimer){ 1699 + clearTimeout( 1700 + resizeTimer 1701 + ); 1702 + } 1703 + 1704 + resizeTimer= 1705 + setTimeout( 1706 + function(){ 1707 + resizeTimer=0; 1708 + run(); 1709 + }, 1710 + RESIZE_DEBOUNCE 1711 + ); 1712 + } 1713 + 1714 + async function waitForReady(){ 1715 + if( 1716 + document.readyState!=="complete" 1717 + ){ 1718 + await new Promise(function(resolve){ 1719 + window.addEventListener( 1720 + "load", 1721 + resolve, 1722 + {once:true} 1723 + ); 1724 + }); 1725 + } 1726 + 1727 + if( 1728 + document.fonts&& 1729 + document.fonts.ready 1730 + ){ 1731 + try{ 1732 + await document.fonts.ready; 1733 + }catch(error){} 1734 + } 1735 + 1736 + var images= 1737 + Array.from( 1738 + root.querySelectorAll("img") 1739 + ); 1740 + 1741 + await Promise.all( 1742 + images.map(function(img){ 1743 + if(img.complete){ 1744 + return Promise.resolve(); 1745 + } 1746 + 1747 + return new Promise(function(resolve){ 1748 + var done=function(){ 1749 + resolve(); 1750 + }; 1751 + 1752 + img.addEventListener( 1753 + "load", 1754 + done, 1755 + {once:true} 1756 + ); 1757 + 1758 + img.addEventListener( 1759 + "error", 1760 + done, 1761 + {once:true} 1762 + ); 1763 + }); 1764 + }) 1765 + ); 1766 + 1767 + run(); 1768 + } 1769 + 1770 + window.addEventListener( 1771 + "resize", 1772 + onResize, 1773 + {passive:true} 1774 + ); 1775 + 1776 + waitForReady(); 1777 +})(); 1778 +</script> 1779 + 1780 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END --> 1781 +{{/html}} 1782 +