Changes for page Get Started

Last modified by Veronika Kocher on Friday, 04 Sep 2026 15:32

From version 8.6
edited by Veronika Kocher
on Thursday, 03 Sep 2026 10:09
Change comment: There is no comment for this version
To version 5.2
edited by Veronika Kocher
on Tuesday, 01 Sep 2026 10:49
Change comment: Update property defaultLocale

Summary

Details

Page properties
Content
... ... @@ -434,1121 +434,3 @@
434 434  
435 435  </div>
436 436  {{/html}}
437 -
438 -\n\n
439 -\n\n{{html clean="false"}}
440 -<!-- SN_HORIZONTAL_BOX_HARMONIZER_START -->
441 -
442 -<style data-sn-horizontal-box-harmonizer="7">
443 -/* ---------- Typography: never justify headings ---------- */
444 -#xwikicontent h1,
445 -#xwikicontent h2,
446 -#xwikicontent h3,
447 -#xwikicontent h4,
448 -#xwikicontent h5,
449 -#xwikicontent h6,
450 -#xwikicontent .box-title,
451 -#xwikicontent [role="heading"],
452 -#xwikicontent h1 a,
453 -#xwikicontent h2 a,
454 -#xwikicontent h3 a,
455 -#xwikicontent h4 a,
456 -#xwikicontent h5 a,
457 -#xwikicontent h6 a,
458 -#xwikicontent .box-title a,
459 -#xwikicontent [role="heading"] a{
460 - text-align:left!important;
461 - text-justify:auto!important;
462 - word-spacing:normal!important;
463 -}
464 -
465 -/* ---------- Native XWiki semantic callouts ---------- */
466 -#xwikicontent .box.infomessage,
467 -#xwikicontent .infomessage,
468 -#xwikicontent .box.warningmessage,
469 -#xwikicontent .warningmessage,
470 -#xwikicontent .box.successmessage,
471 -#xwikicontent .successmessage,
472 -#xwikicontent .box.errormessage,
473 -#xwikicontent .errormessage,
474 -#xwikicontent [data-sn-callout-harmonized="1"]{
475 - box-sizing:border-box!important;
476 - border-radius:8px!important;
477 - border-top:1px solid rgba(0,0,0,.08)!important;
478 - border-right:1px solid rgba(0,0,0,.08)!important;
479 - border-bottom:1px solid rgba(0,0,0,.08)!important;
480 - border-left:4px solid var(--sn-callout-accent,#21b6d7)!important;
481 - padding:14px 16px!important;
482 - text-align:left!important;
483 - text-justify:auto!important;
484 - word-spacing:normal!important;
485 - box-shadow:none!important;
486 -}
487 -
488 -#xwikicontent .box.infomessage,
489 -#xwikicontent .infomessage{
490 - --sn-callout-accent:#21b6d7;
491 - background:#eaf7fb!important;
492 -}
493 -
494 -#xwikicontent .box.warningmessage,
495 -#xwikicontent .warningmessage{
496 - --sn-callout-accent:#f0aa00;
497 - background:#fff8e7!important;
498 -}
499 -
500 -#xwikicontent .box.successmessage,
501 -#xwikicontent .successmessage{
502 - --sn-callout-accent:#38b76a;
503 - background:#edf9f1!important;
504 -}
505 -
506 -#xwikicontent .box.errormessage,
507 -#xwikicontent .errormessage{
508 - --sn-callout-accent:#e94b13;
509 - background:#fff1ec!important;
510 -}
511 -
512 -#xwikicontent [data-sn-callout-harmonized="1"] > :first-child,
513 -#xwikicontent .infomessage > :first-child,
514 -#xwikicontent .warningmessage > :first-child,
515 -#xwikicontent .successmessage > :first-child,
516 -#xwikicontent .errormessage > :first-child{
517 - margin-top:0!important;
518 -}
519 -
520 -#xwikicontent [data-sn-callout-harmonized="1"] > :last-child,
521 -#xwikicontent .infomessage > :last-child,
522 -#xwikicontent .warningmessage > :last-child,
523 -#xwikicontent .successmessage > :last-child,
524 -#xwikicontent .errormessage > :last-child{
525 - margin-bottom:0!important;
526 -}
527 -
528 -#xwikicontent [data-sn-equal-height-managed],
529 -#xwikicontent [data-sn-first-section-aligned],
530 -#xwikicontent [data-sn-first-content-aligned]{
531 - box-sizing:border-box;
532 -}
533 -</style>
534 -
535 -<script data-sn-horizontal-box-harmonizer="7">
536 -(function(){
537 - "use strict";
538 -
539 - var MOBILE_MAX=767;
540 - var ROW_TOLERANCE=6;
541 - var MIN_W=150;
542 - var MIN_H=36;
543 - var MAX_PARENT_CHILDREN=18;
544 - var SEARCH_DEPTH=5;
545 - var RESIZE_DEBOUNCE=220;
546 - var MIN_WIDTH_CHANGE=2;
547 -
548 - var root=
549 - document.getElementById("xwikicontent")||
550 - document.querySelector(".xwiki-rendering-content")||
551 - document.querySelector("main")||
552 - document.body;
553 -
554 - if(!root)return;
555 -
556 - var heightManaged=new Set();
557 - var sectionManaged=new Set();
558 - var contentManaged=new Set();
559 -
560 - var originalMinHeight=new WeakMap();
561 - var originalMarginTop=new WeakMap();
562 -
563 - var resizeTimer=0;
564 - var lastWidth=-1;
565 - var hasApplied=false;
566 - var applying=false;
567 -
568 - function num(v){
569 - var n=parseFloat(v);
570 - return Number.isFinite(n)?n:0;
571 - }
572 -
573 - function visible(el,minW,minH){
574 - if(!el||el.nodeType!==1)return false;
575 -
576 - var s=getComputedStyle(el);
577 -
578 - if(
579 - s.display==="none"||
580 - s.visibility==="hidden"||
581 - Number(s.opacity)===0
582 - ){
583 - return false;
584 - }
585 -
586 - var r=el.getBoundingClientRect();
587 -
588 - return (
589 - r.width>=(minW||1)&&
590 - r.height>=(minH||1)
591 - );
592 - }
593 -
594 - function normalizeText(text){
595 - return String(text||"")
596 - .replace(/\s+/g," ")
597 - .trim()
598 - .toUpperCase();
599 - }
600 -
601 - function excluded(el){
602 - return (
603 - !el.matches||
604 - el.matches(
605 - "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]"
606 - )
607 - );
608 - }
609 -
610 - /* ---------- Custom coloured callouts ---------- */
611 -
612 - function nativeCallout(el){
613 - var c=
614 - typeof el.className==="string"
615 - ? el.className.toLowerCase()
616 - : "";
617 -
618 - return (
619 - /(^|\s)(infomessage|warningmessage|successmessage|errormessage)(\s|$)/.test(c)
620 - );
621 - }
622 -
623 - function customCallout(el){
624 - if(!visible(el,220,42)||excluded(el))return false;
625 -
626 - var r=el.getBoundingClientRect();
627 -
628 - if(r.height>520)return false;
629 -
630 - var s=getComputedStyle(el);
631 -
632 - var bg=
633 - s.backgroundColor&&
634 - s.backgroundColor!=="rgba(0, 0, 0, 0)"&&
635 - s.backgroundColor!=="transparent"&&
636 - s.backgroundColor!=="rgb(255, 255, 255)";
637 -
638 - var left=
639 - num(s.borderLeftWidth);
640 -
641 - return (
642 - bg&&
643 - left>=2
644 - );
645 - }
646 -
647 - function harmoniseCustomCallouts(){
648 - Array.from(
649 - root.querySelectorAll(
650 - "div,aside,section"
651 - )
652 - ).forEach(function(el){
653 - if(nativeCallout(el))return;
654 - if(!customCallout(el))return;
655 -
656 - var s=getComputedStyle(el);
657 -
658 - el.setAttribute(
659 - "data-sn-callout-harmonized",
660 - "1"
661 - );
662 -
663 - if(
664 - s.borderLeftColor
665 - ){
666 - el.style.setProperty(
667 - "--sn-callout-accent",
668 - s.borderLeftColor
669 - );
670 - }
671 - });
672 - }
673 -
674 - /* ---------- Restore only values V7 itself changed ---------- */
675 -
676 - function saveOriginal(el,map,property){
677 - if(map.has(el))return;
678 -
679 - map.set(el,{
680 - value:
681 - el.style.getPropertyValue(
682 - property
683 - ),
684 - priority:
685 - el.style.getPropertyPriority(
686 - property
687 - )
688 - });
689 - }
690 -
691 - function restoreOriginal(el,map,property){
692 - var original=map.get(el);
693 -
694 - if(original&&original.value){
695 - el.style.setProperty(
696 - property,
697 - original.value,
698 - original.priority||""
699 - );
700 - }else{
701 - el.style.removeProperty(
702 - property
703 - );
704 - }
705 - }
706 -
707 - function resetRuntime(){
708 - heightManaged.forEach(function(el){
709 - restoreOriginal(
710 - el,
711 - originalMinHeight,
712 - "min-height"
713 - );
714 -
715 - el.removeAttribute(
716 - "data-sn-equal-height-managed"
717 - );
718 - });
719 -
720 - sectionManaged.forEach(function(el){
721 - restoreOriginal(
722 - el,
723 - originalMarginTop,
724 - "margin-top"
725 - );
726 -
727 - el.removeAttribute(
728 - "data-sn-first-section-aligned"
729 - );
730 - });
731 -
732 - contentManaged.forEach(function(el){
733 - restoreOriginal(
734 - el,
735 - originalMarginTop,
736 - "margin-top"
737 - );
738 -
739 - el.removeAttribute(
740 - "data-sn-first-content-aligned"
741 - );
742 - });
743 -
744 - heightManaged.clear();
745 - sectionManaged.clear();
746 - contentManaged.clear();
747 - }
748 -
749 - /* ---------- Card detection ---------- */
750 -
751 - function namedLikeBox(el){
752 - var c=
753 - typeof el.className==="string"
754 - ? el.className
755 - : "";
756 -
757 - return /(^|[\s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([\s_-]|$)/i.test(c);
758 - }
759 -
760 - function boxLike(el){
761 - if(
762 - !visible(el,MIN_W,MIN_H)||
763 - excluded(el)
764 - ){
765 - return false;
766 - }
767 -
768 - var s=getComputedStyle(el);
769 - var r=el.getBoundingClientRect();
770 -
771 - var border=
772 - num(s.borderTopWidth)+
773 - num(s.borderRightWidth)+
774 - num(s.borderBottomWidth)+
775 - num(s.borderLeftWidth);
776 -
777 - var radius=Math.max(
778 - num(s.borderTopLeftRadius),
779 - num(s.borderTopRightRadius),
780 - num(s.borderBottomLeftRadius),
781 - num(s.borderBottomRightRadius)
782 - );
783 -
784 - var bg=
785 - s.backgroundColor&&
786 - s.backgroundColor!=="rgba(0, 0, 0, 0)"&&
787 - s.backgroundColor!=="transparent";
788 -
789 - var shadow=
790 - s.boxShadow&&
791 - s.boxShadow!=="none";
792 -
793 - return (
794 - namedLikeBox(el)||
795 - border>=1||
796 - (bg&&radius>=3)||
797 - (shadow&&r.width>=180)
798 - );
799 - }
800 -
801 - function pickTarget(child){
802 - if(!visible(child,MIN_W,MIN_H))return null;
803 -
804 - if(boxLike(child))return child;
805 -
806 - var cr=child.getBoundingClientRect();
807 - var q=[];
808 -
809 - Array.from(child.children||[]).forEach(function(el){
810 - q.push({el:el,depth:1});
811 - });
812 -
813 - var best=null;
814 - var bestScore=-Infinity;
815 -
816 - while(q.length){
817 - var item=q.shift();
818 - var el=item.el;
819 -
820 - if(!visible(el,MIN_W,MIN_H))continue;
821 -
822 - var r=el.getBoundingClientRect();
823 -
824 - if(
825 - r.width>=cr.width*.68&&
826 - boxLike(el)
827 - ){
828 - var widthFit=
829 - 1-Math.min(
830 - 1,
831 - Math.abs(cr.width-r.width)/
832 - Math.max(1,cr.width)
833 - );
834 -
835 - var topFit=
836 - 1-Math.min(
837 - 1,
838 - Math.abs(cr.top-r.top)/100
839 - );
840 -
841 - var score=
842 - widthFit*6+
843 - topFit*3+
844 - Math.min(r.height,900)/450+
845 - Math.min(r.width*r.height,900000)/900000;
846 -
847 - if(score>bestScore){
848 - best=el;
849 - bestScore=score;
850 - }
851 - }
852 -
853 - if(item.depth<SEARCH_DEPTH){
854 - Array.from(el.children||[]).forEach(function(next){
855 - q.push({
856 - el:next,
857 - depth:item.depth+1
858 - });
859 - });
860 - }
861 - }
862 -
863 - return best;
864 - }
865 -
866 - function groupRows(entries){
867 - var groups=[];
868 -
869 - entries
870 - .slice()
871 - .sort(function(a,b){
872 - return (
873 - a.rect.top-b.rect.top||
874 - a.rect.left-b.rect.left
875 - );
876 - })
877 - .forEach(function(entry){
878 - var group=null;
879 -
880 - for(var i=0;i<groups.length;i++){
881 - if(
882 - Math.abs(
883 - groups[i].top-
884 - entry.rect.top
885 - )<=ROW_TOLERANCE
886 - ){
887 - group=groups[i];
888 - break;
889 - }
890 - }
891 -
892 - if(!group){
893 - group={
894 - top:entry.rect.top,
895 - entries:[]
896 - };
897 - groups.push(group);
898 - }
899 -
900 - group.entries.push(entry);
901 - });
902 -
903 - return groups;
904 - }
905 -
906 - function validRow(group){
907 - if(group.entries.length<2)return false;
908 -
909 - var lefts=
910 - group.entries
911 - .map(function(e){return e.rect.left;})
912 - .sort(function(a,b){return a-b;});
913 -
914 - if(
915 - lefts[lefts.length-1]-
916 - lefts[0]<
917 - 80
918 - ){
919 - return false;
920 - }
921 -
922 - var widths=
923 - group.entries
924 - .map(function(e){return e.rect.width;})
925 - .filter(function(w){return w>0;});
926 -
927 - if(widths.length<2)return false;
928 -
929 - var minW=
930 - Math.min.apply(Math,widths);
931 -
932 - var maxW=
933 - Math.max.apply(Math,widths);
934 -
935 - return (
936 - maxW/
937 - Math.max(1,minW)<=
938 - 1.9
939 - );
940 - }
941 -
942 - /* ---------- Known ARSN first section bars ---------- */
943 -
944 - function knownBar(el){
945 - var text=
946 - normalizeText(
947 - el.textContent
948 - );
949 -
950 - return (
951 - text==="HIER STARTEN"||
952 - text==="ORGANISIEREN & DOKUMENTIEREN"||
953 - text==="ENTSCHEIDEN"||
954 - text==="START HERE"||
955 - text==="GET STARTED"||
956 - text==="ORGANISE & DOCUMENT"||
957 - text==="ORGANIZE & DOCUMENT"||
958 - text==="DECIDE"
959 - );
960 - }
961 -
962 - function findKnownBar(card){
963 - var cardRect=
964 - card.getBoundingClientRect();
965 -
966 - var rows=
967 - Array.from(
968 - card.querySelectorAll(
969 - "div,p,span,strong,h3,h4,h5,h6"
970 - )
971 - )
972 - .filter(function(el){
973 - if(!visible(el,20,6))return false;
974 - if(!knownBar(el))return false;
975 -
976 - var r=el.getBoundingClientRect();
977 -
978 - var rel=
979 - r.top-
980 - cardRect.top;
981 -
982 - return (
983 - rel>=35&&
984 - rel<=
985 - cardRect.height*.75
986 - );
987 - })
988 - .sort(function(a,b){
989 - return (
990 - a.getBoundingClientRect().top-
991 - b.getBoundingClientRect().top
992 - );
993 - });
994 -
995 - return rows[0]||null;
996 - }
997 -
998 - function alignKnownBars(cards){
999 - var rows=
1000 - cards.map(function(card){
1001 - var bar=
1002 - findKnownBar(card);
1003 -
1004 - if(!bar)return null;
1005 -
1006 - var cr=
1007 - card.getBoundingClientRect();
1008 -
1009 - var br=
1010 - bar.getBoundingClientRect();
1011 -
1012 - return {
1013 - bar:bar,
1014 - relativeTop:
1015 - br.top-
1016 - cr.top
1017 - };
1018 - });
1019 -
1020 - if(
1021 - rows.some(function(row){
1022 - return !row;
1023 - })
1024 - ){
1025 - return false;
1026 - }
1027 -
1028 - var target=
1029 - Math.max.apply(
1030 - Math,
1031 - rows.map(function(row){
1032 - return row.relativeTop;
1033 - })
1034 - );
1035 -
1036 - rows.forEach(function(row){
1037 - var delta=
1038 - target-
1039 - row.relativeTop;
1040 -
1041 - if(delta<=1)return;
1042 -
1043 - saveOriginal(
1044 - row.bar,
1045 - originalMarginTop,
1046 - "margin-top"
1047 - );
1048 -
1049 - var current=
1050 - num(
1051 - getComputedStyle(
1052 - row.bar
1053 - ).marginTop
1054 - );
1055 -
1056 - row.bar.style.setProperty(
1057 - "margin-top",
1058 - (
1059 - current+
1060 - delta
1061 - )+"px"
1062 - );
1063 -
1064 - row.bar.setAttribute(
1065 - "data-sn-first-section-aligned",
1066 - "7"
1067 - );
1068 -
1069 - sectionManaged.add(
1070 - row.bar
1071 - );
1072 - });
1073 -
1074 - return true;
1075 - }
1076 -
1077 - /* ---------- Generic first content after heading ---------- */
1078 -
1079 - function heading(card){
1080 - var cr=
1081 - card.getBoundingClientRect();
1082 -
1083 - var rows=
1084 - Array.from(
1085 - card.querySelectorAll(
1086 - "h1,h2,h3,h4,h5,h6,.box-title,[role=heading]"
1087 - )
1088 - )
1089 - .filter(function(el){
1090 - if(!visible(el,20,8))return false;
1091 -
1092 - var r=el.getBoundingClientRect();
1093 -
1094 - var rel=
1095 - r.top-
1096 - cr.top;
1097 -
1098 - return (
1099 - rel>=0&&
1100 - rel<=
1101 - Math.min(
1102 - 160,
1103 - cr.height*.45
1104 - )
1105 - );
1106 - })
1107 - .sort(function(a,b){
1108 - return (
1109 - a.getBoundingClientRect().top-
1110 - b.getBoundingClientRect().top
1111 - );
1112 - });
1113 -
1114 - return rows[0]||null;
1115 - }
1116 -
1117 - function firstContent(card,h){
1118 - if(!h)return null;
1119 -
1120 - var cr=
1121 - card.getBoundingClientRect();
1122 -
1123 - var hr=
1124 - h.getBoundingClientRect();
1125 -
1126 - var rows=
1127 - Array.from(
1128 - card.querySelectorAll(
1129 - "p,div,ul,ol,dl,blockquote"
1130 - )
1131 - )
1132 - .filter(function(el){
1133 - if(
1134 - el===h||
1135 - h.contains(el)||
1136 - el.contains(h)
1137 - ){
1138 - return false;
1139 - }
1140 -
1141 - if(!visible(el,30,8))return false;
1142 -
1143 - var text=
1144 - String(el.textContent||"")
1145 - .replace(/\s+/g," ")
1146 - .trim();
1147 -
1148 - if(text.length<3)return false;
1149 -
1150 - var r=el.getBoundingClientRect();
1151 -
1152 - if(
1153 - r.top<
1154 - hr.bottom-1
1155 - ){
1156 - return false;
1157 - }
1158 -
1159 - if(
1160 - r.top-cr.top>
1161 - Math.min(
1162 - 280,
1163 - cr.height*.65
1164 - )
1165 - ){
1166 - return false;
1167 - }
1168 -
1169 - if(
1170 - r.height>
1171 - cr.height*.58
1172 - ){
1173 - return false;
1174 - }
1175 -
1176 - return true;
1177 - })
1178 - .sort(function(a,b){
1179 - var ar=
1180 - a.getBoundingClientRect();
1181 -
1182 - var br=
1183 - b.getBoundingClientRect();
1184 -
1185 - return (
1186 - ar.top-br.top||
1187 - ar.height-br.height
1188 - );
1189 - });
1190 -
1191 - return rows[0]||null;
1192 - }
1193 -
1194 - function alignGeneric(cards){
1195 - var rows=
1196 - cards.map(function(card){
1197 - var h=
1198 - heading(card);
1199 -
1200 - var c=
1201 - firstContent(
1202 - card,
1203 - h
1204 - );
1205 -
1206 - if(!h||!c)return null;
1207 -
1208 - var cr=
1209 - card.getBoundingClientRect();
1210 -
1211 - var rr=
1212 - c.getBoundingClientRect();
1213 -
1214 - return {
1215 - content:c,
1216 - relativeTop:
1217 - rr.top-cr.top
1218 - };
1219 - });
1220 -
1221 - if(
1222 - rows.some(function(row){
1223 - return !row;
1224 - })
1225 - ){
1226 - return false;
1227 - }
1228 -
1229 - var target=
1230 - Math.max.apply(
1231 - Math,
1232 - rows.map(function(row){
1233 - return row.relativeTop;
1234 - })
1235 - );
1236 -
1237 - rows.forEach(function(row){
1238 - var delta=
1239 - target-
1240 - row.relativeTop;
1241 -
1242 - if(delta<=1)return;
1243 -
1244 - saveOriginal(
1245 - row.content,
1246 - originalMarginTop,
1247 - "margin-top"
1248 - );
1249 -
1250 - var current=
1251 - num(
1252 - getComputedStyle(
1253 - row.content
1254 - ).marginTop
1255 - );
1256 -
1257 - row.content.style.setProperty(
1258 - "margin-top",
1259 - (
1260 - current+
1261 - delta
1262 - )+"px"
1263 - );
1264 -
1265 - row.content.setAttribute(
1266 - "data-sn-first-content-aligned",
1267 - "7"
1268 - );
1269 -
1270 - contentManaged.add(
1271 - row.content
1272 - );
1273 - });
1274 -
1275 - return true;
1276 - }
1277 -
1278 - function applyRow(group){
1279 - if(!validRow(group))return false;
1280 -
1281 - var cards=[];
1282 - var seen=new Set();
1283 -
1284 - group.entries.forEach(function(entry){
1285 - if(!seen.has(entry.target)){
1286 - seen.add(entry.target);
1287 - cards.push(entry.target);
1288 - }
1289 - });
1290 -
1291 - if(cards.length<2)return false;
1292 -
1293 - if(
1294 - !alignKnownBars(cards)
1295 - ){
1296 - alignGeneric(cards);
1297 - }
1298 -
1299 - var maxHeight=0;
1300 -
1301 - cards.forEach(function(card){
1302 - maxHeight=
1303 - Math.max(
1304 - maxHeight,
1305 - card.getBoundingClientRect().height
1306 - );
1307 - });
1308 -
1309 - maxHeight=
1310 - Math.ceil(
1311 - maxHeight
1312 - );
1313 -
1314 - if(maxHeight<MIN_H)return false;
1315 -
1316 - cards.forEach(function(card){
1317 - saveOriginal(
1318 - card,
1319 - originalMinHeight,
1320 - "min-height"
1321 - );
1322 -
1323 - card.style.setProperty(
1324 - "min-height",
1325 - maxHeight+"px"
1326 - );
1327 -
1328 - card.setAttribute(
1329 - "data-sn-equal-height-managed",
1330 - "7"
1331 - );
1332 -
1333 - heightManaged.add(card);
1334 - });
1335 -
1336 - return true;
1337 - }
1338 -
1339 - function calculate(force){
1340 - if(applying)return;
1341 -
1342 - var width=
1343 - Math.round(
1344 - window.innerWidth
1345 - );
1346 -
1347 - var meaningful=
1348 - lastWidth<0||
1349 - Math.abs(
1350 - width-
1351 - lastWidth
1352 - )>=
1353 - MIN_WIDTH_CHANGE;
1354 -
1355 - if(
1356 - hasApplied&&
1357 - !force&&
1358 - !meaningful
1359 - ){
1360 - return;
1361 - }
1362 -
1363 - applying=true;
1364 -
1365 - try{
1366 - harmoniseCustomCallouts();
1367 -
1368 - if(width<=MOBILE_MAX){
1369 - if(hasApplied){
1370 - resetRuntime();
1371 - }
1372 -
1373 - hasApplied=false;
1374 - lastWidth=width;
1375 - return;
1376 - }
1377 -
1378 - if(hasApplied){
1379 - resetRuntime();
1380 - }
1381 -
1382 - var parents=
1383 - Array.from(
1384 - root.querySelectorAll("*")
1385 - )
1386 - .filter(function(parent){
1387 - return (
1388 - visible(
1389 - parent,
1390 - MIN_W,
1391 - MIN_H
1392 - )&&
1393 - parent.children&&
1394 - parent.children.length>=2&&
1395 - parent.children.length<=
1396 - MAX_PARENT_CHILDREN
1397 - );
1398 - });
1399 -
1400 - var touched=
1401 - new Set();
1402 -
1403 - parents.forEach(function(parent){
1404 - var entries=[];
1405 -
1406 - Array.from(
1407 - parent.children
1408 - ).forEach(function(child){
1409 - if(
1410 - !visible(
1411 - child,
1412 - MIN_W,
1413 - MIN_H
1414 - )
1415 - ){
1416 - return;
1417 - }
1418 -
1419 - var target=
1420 - pickTarget(child);
1421 -
1422 - if(!target)return;
1423 -
1424 - entries.push({
1425 - target:target,
1426 - rect:
1427 - target.getBoundingClientRect()
1428 - });
1429 - });
1430 -
1431 - groupRows(
1432 - entries
1433 - ).forEach(function(group){
1434 - if(!validRow(group))return;
1435 -
1436 - var targets=
1437 - group.entries.map(function(entry){
1438 - return entry.target;
1439 - });
1440 -
1441 - if(
1442 - !targets.some(function(el){
1443 - return !touched.has(el);
1444 - })
1445 - ){
1446 - return;
1447 - }
1448 -
1449 - if(applyRow(group)){
1450 - targets.forEach(function(el){
1451 - touched.add(el);
1452 - });
1453 - }
1454 - });
1455 - });
1456 -
1457 - lastWidth=width;
1458 - hasApplied=true;
1459 - }finally{
1460 - applying=false;
1461 - }
1462 - }
1463 -
1464 - function resize(){
1465 - if(resizeTimer){
1466 - clearTimeout(
1467 - resizeTimer
1468 - );
1469 - }
1470 -
1471 - resizeTimer=
1472 - setTimeout(
1473 - function(){
1474 - resizeTimer=0;
1475 - calculate(false);
1476 - },
1477 - RESIZE_DEBOUNCE
1478 - );
1479 - }
1480 -
1481 - function waitImages(){
1482 - var images=
1483 - Array.from(
1484 - root.querySelectorAll("img")
1485 - );
1486 -
1487 - return Promise.all(
1488 - images.map(function(img){
1489 - if(img.complete){
1490 - return Promise.resolve();
1491 - }
1492 -
1493 - return new Promise(function(resolve){
1494 - var done=function(){
1495 - resolve();
1496 - };
1497 -
1498 - img.addEventListener(
1499 - "load",
1500 - done,
1501 - {once:true}
1502 - );
1503 -
1504 - img.addEventListener(
1505 - "error",
1506 - done,
1507 - {once:true}
1508 - );
1509 - });
1510 - })
1511 - );
1512 - }
1513 -
1514 - async function initial(){
1515 - if(
1516 - document.readyState!==
1517 - "complete"
1518 - ){
1519 - await new Promise(function(resolve){
1520 - addEventListener(
1521 - "load",
1522 - resolve,
1523 - {once:true}
1524 - );
1525 - });
1526 - }
1527 -
1528 - if(
1529 - document.fonts&&
1530 - document.fonts.ready
1531 - ){
1532 - try{
1533 - await document.fonts.ready;
1534 - }catch(error){}
1535 - }
1536 -
1537 - await waitImages();
1538 -
1539 - // Exactly one initial layout calculation.
1540 - calculate(true);
1541 - }
1542 -
1543 - addEventListener(
1544 - "resize",
1545 - resize,
1546 - {passive:true}
1547 - );
1548 -
1549 - initial();
1550 -})();
1551 -</script>
1552 -
1553 -<!-- SN_HORIZONTAL_BOX_HARMONIZER_END -->
1554 -{{/html}}\n