Änderungen von Dokument Art & Research Services Navigator

Zuletzt geändert von Veronika Kocher am Freitag, 18 Sep. 2026 16:47

Von Version 9.3
bearbeitet von Veronika Kocher
am Donnerstag, 03 Sep. 2026 9:34
Änderungskommentar: Es gibt keinen Kommentar für diese Version
Auf Version 6.1
bearbeitet von Veronika Kocher
am Donnerstag, 03 Sep. 2026 8:57
Änderungskommentar: Es gibt keinen Kommentar für diese Version

Zusammenfassung

Details

Seiteneigenschaften
Inhalt
... ... @@ -2,12 +2,12 @@
2 2  
3 3  Der **Service-Navigator Kunst & Forschung** hilft dir, für jede Phase deines Projekts die passende Orientierung, Services und Ressourcen zu finden.
4 4  
5 -{{info title="Unterstützung für dein Projekt:"}}
5 +{{info title="Unterstützung für dein Projekt"}}
6 6  
7 -
7 +
8 8   **Support Kunst und Forschung (SKF)** begleitet Projekt- und Fördervorhaben und arbeitet je nach Bedarf mit den passenden Services der Universität zusammen.
9 9  
10 - Der Navigator führt dich entlang der Projektphasen zu den Angeboten und Ansprechstellen, die für dein Vorhaben relevant sind.
10 + Der Navigator führt dich entlang der Projektphasen zu den Angeboten und Ansprechstellen, die für dein Vorhaben relevant sind.
11 11  {{/info}}
12 12  
13 13  {{html clean="false"}}
... ... @@ -635,698 +635,3 @@
635 635  {{/info}}
636 636  )))
637 637  
638 -{{html clean="false"}}
639 -<!-- SN_HORIZONTAL_BOX_HARMONIZER_START -->
640 -<style data-sn-horizontal-box-harmonizer="4">
641 -[data-sn-equal-height-managed],
642 -[data-sn-first-section-aligned]{
643 - box-sizing:border-box;
644 -}
645 -</style>
646 -<script data-sn-horizontal-box-harmonizer="4">
647 -(function(){
648 - "use strict";
649 -
650 - var MOBILE_MAX=767;
651 - var ROW_TOLERANCE=6;
652 - var MIN_W=150;
653 - var MIN_H=36;
654 - var MAX_PARENT_CHILDREN=16;
655 - var SEARCH_DEPTH=5;
656 -
657 - var root=
658 - document.getElementById("xwikicontent")||
659 - document.querySelector(".xwiki-rendering-content")||
660 - document.querySelector("main")||
661 - document.body;
662 -
663 - if(!root)return;
664 -
665 - var heightManaged=new Set();
666 - var sectionManaged=new Set();
667 - var originalMinHeight=new WeakMap();
668 - var originalMarginTop=new WeakMap();
669 - var raf=0;
670 -
671 - function num(v){
672 - var n=parseFloat(v);
673 - return Number.isFinite(n)?n:0;
674 - }
675 -
676 - function visible(el,minW,minH){
677 - if(!el||el.nodeType!==1)return false;
678 -
679 - var s=getComputedStyle(el);
680 -
681 - if(
682 - s.display==="none"||
683 - s.visibility==="hidden"||
684 - Number(s.opacity)===0
685 - ){
686 - return false;
687 - }
688 -
689 - var r=el.getBoundingClientRect();
690 -
691 - return (
692 - r.width>=(minW||1)&&
693 - r.height>=(minH||1)
694 - );
695 - }
696 -
697 - function excluded(el){
698 - return (
699 - !el.matches||
700 - el.matches(
701 - "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]"
702 - )
703 - );
704 - }
705 -
706 - function namedLikeBox(el){
707 - var c=
708 - typeof el.className==="string"
709 - ? el.className
710 - : "";
711 -
712 - return /(^|[s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([s_-]|$)/i.test(c);
713 - }
714 -
715 - function boxLike(el){
716 - if(!visible(el,MIN_W,MIN_H)||excluded(el))return false;
717 -
718 - var s=getComputedStyle(el);
719 - var r=el.getBoundingClientRect();
720 -
721 - var border=
722 - num(s.borderTopWidth)+
723 - num(s.borderRightWidth)+
724 - num(s.borderBottomWidth)+
725 - num(s.borderLeftWidth);
726 -
727 - var radius=Math.max(
728 - num(s.borderTopLeftRadius),
729 - num(s.borderTopRightRadius),
730 - num(s.borderBottomLeftRadius),
731 - num(s.borderBottomRightRadius)
732 - );
733 -
734 - var bg=
735 - s.backgroundColor&&
736 - s.backgroundColor!=="rgba(0, 0, 0, 0)"&&
737 - s.backgroundColor!=="transparent";
738 -
739 - var shadow=
740 - s.boxShadow&&
741 - s.boxShadow!=="none";
742 -
743 - return (
744 - namedLikeBox(el)||
745 - border>=1||
746 - (bg&&radius>=3)||
747 - (shadow&&r.width>=180)
748 - );
749 - }
750 -
751 - function saveOriginal(el,map,property){
752 - if(map.has(el))return;
753 -
754 - map.set(el,{
755 - value:el.style.getPropertyValue(property),
756 - priority:el.style.getPropertyPriority(property)
757 - });
758 - }
759 -
760 - function restoreOriginal(el,map,property){
761 - var original=map.get(el);
762 -
763 - if(original&&original.value){
764 - el.style.setProperty(
765 - property,
766 - original.value,
767 - original.priority||""
768 - );
769 - }else{
770 - el.style.removeProperty(property);
771 - }
772 - }
773 -
774 - function reset(){
775 - heightManaged.forEach(function(el){
776 - restoreOriginal(
777 - el,
778 - originalMinHeight,
779 - "min-height"
780 - );
781 -
782 - el.removeAttribute(
783 - "data-sn-equal-height-managed"
784 - );
785 - });
786 -
787 - sectionManaged.forEach(function(el){
788 - restoreOriginal(
789 - el,
790 - originalMarginTop,
791 - "margin-top"
792 - );
793 -
794 - el.removeAttribute(
795 - "data-sn-first-section-aligned"
796 - );
797 - });
798 -
799 - heightManaged.clear();
800 - sectionManaged.clear();
801 - }
802 -
803 - function pickTarget(child){
804 - if(!visible(child,MIN_W,MIN_H))return null;
805 -
806 - if(boxLike(child)){
807 - return child;
808 - }
809 -
810 - var cr=child.getBoundingClientRect();
811 - var q=[];
812 -
813 - Array.from(child.children||[]).forEach(function(el){
814 - q.push({el:el,depth:1});
815 - });
816 -
817 - var best=null;
818 - var bestScore=-Infinity;
819 -
820 - while(q.length){
821 - var item=q.shift();
822 - var el=item.el;
823 -
824 - if(!visible(el,MIN_W,MIN_H))continue;
825 -
826 - var r=el.getBoundingClientRect();
827 -
828 - if(
829 - r.width>=cr.width*.68&&
830 - boxLike(el)
831 - ){
832 - var widthFit=
833 - 1-Math.min(
834 - 1,
835 - Math.abs(cr.width-r.width)/
836 - Math.max(1,cr.width)
837 - );
838 -
839 - var topFit=
840 - 1-Math.min(
841 - 1,
842 - Math.abs(cr.top-r.top)/100
843 - );
844 -
845 - var score=
846 - widthFit*6+
847 - topFit*3+
848 - Math.min(r.height,900)/450+
849 - Math.min(r.width*r.height,900000)/900000;
850 -
851 - if(score>bestScore){
852 - best=el;
853 - bestScore=score;
854 - }
855 - }
856 -
857 - if(item.depth<SEARCH_DEPTH){
858 - Array.from(el.children||[]).forEach(function(next){
859 - q.push({
860 - el:next,
861 - depth:item.depth+1
862 - });
863 - });
864 - }
865 - }
866 -
867 - return best;
868 - }
869 -
870 - function groupsByVisualRow(entries){
871 - var groups=[];
872 -
873 - entries
874 - .slice()
875 - .sort(function(a,b){
876 - return (
877 - a.rect.top-b.rect.top||
878 - a.rect.left-b.rect.left
879 - );
880 - })
881 - .forEach(function(entry){
882 - var group=null;
883 -
884 - for(var i=0;i<groups.length;i++){
885 - if(
886 - Math.abs(
887 - groups[i].top-
888 - entry.rect.top
889 - )<=ROW_TOLERANCE
890 - ){
891 - group=groups[i];
892 - break;
893 - }
894 - }
895 -
896 - if(!group){
897 - group={
898 - top:entry.rect.top,
899 - entries:[]
900 - };
901 - groups.push(group);
902 - }
903 -
904 - group.entries.push(entry);
905 - });
906 -
907 - return groups;
908 - }
909 -
910 - function validHorizontalGroup(group){
911 - if(group.entries.length<2)return false;
912 -
913 - var lefts=
914 - group.entries
915 - .map(function(e){return e.rect.left;})
916 - .sort(function(a,b){return a-b;});
917 -
918 - if(
919 - lefts[lefts.length-1]-
920 - lefts[0]<
921 - 80
922 - ){
923 - return false;
924 - }
925 -
926 - var widths=
927 - group.entries
928 - .map(function(e){return e.rect.width;})
929 - .filter(function(w){return w>0;});
930 -
931 - if(widths.length<2)return false;
932 -
933 - var minWidth=Math.min.apply(Math,widths);
934 - var maxWidth=Math.max.apply(Math,widths);
935 -
936 - return (
937 - maxWidth/
938 - Math.max(1,minWidth)<=
939 - 1.9
940 - );
941 - }
942 -
943 - function normalizeText(text){
944 - return String(text||"")
945 - .replace(/s+/g," ")
946 - .trim()
947 - .toUpperCase();
948 - }
949 -
950 - function exactKnownFirstSection(el){
951 - var text=normalizeText(el.textContent);
952 -
953 - return (
954 - text==="HIER STARTEN"||
955 - text==="ORGANISIEREN & DOKUMENTIEREN"||
956 - text==="ENTSCHEIDEN"||
957 - text==="START HERE"||
958 - text==="GET STARTED"||
959 - text==="ORGANISE & DOCUMENT"||
960 - text==="ORGANIZE & DOCUMENT"||
961 - text==="DECIDE"
962 - );
963 - }
964 -
965 - function visuallyFirstSectionBar(card){
966 - var cardRect=card.getBoundingClientRect();
967 - var candidates=[];
968 -
969 - Array.from(
970 - card.querySelectorAll(
971 - "div,p,span,strong,h3,h4,h5,h6"
972 - )
973 - ).forEach(function(el){
974 - if(!visible(el,20,6))return;
975 - if(excluded(el))return;
976 -
977 - var r=el.getBoundingClientRect();
978 - var relativeTop=r.top-cardRect.top;
979 -
980 - if(
981 - relativeTop<45||
982 - relativeTop>cardRect.height*.72
983 - ){
984 - return;
985 - }
986 -
987 - var widthRatio=
988 - r.width/
989 - Math.max(1,cardRect.width);
990 -
991 - if(
992 - widthRatio<.55||
993 - widthRatio>1.05||
994 - r.height>54
995 - ){
996 - return;
997 - }
998 -
999 - var text=normalizeText(el.textContent);
1000 -
1001 - if(
1002 - text.length<2||
1003 - text.length>90
1004 - ){
1005 - return;
1006 - }
1007 -
1008 - var style=getComputedStyle(el);
1009 -
1010 - var bg=
1011 - style.backgroundColor&&
1012 - style.backgroundColor!=="rgba(0, 0, 0, 0)"&&
1013 - style.backgroundColor!=="transparent";
1014 -
1015 - var border=
1016 - num(style.borderTopWidth)+
1017 - num(style.borderRightWidth)+
1018 - num(style.borderBottomWidth)+
1019 - num(style.borderLeftWidth);
1020 -
1021 - var mostlyUpper=
1022 - text.length>=3&&
1023 - text===text.toUpperCase();
1024 -
1025 - var exact=exactKnownFirstSection(el);
1026 -
1027 - var score=
1028 - (exact?20:0)+
1029 - (bg?6:0)+
1030 - (border>=1?2:0)+
1031 - (mostlyUpper?4:0)+
1032 - (num(style.fontWeight)>=600?1:0);
1033 -
1034 - if(score>=7){
1035 - candidates.push({
1036 - el:el,
1037 - relativeTop:relativeTop,
1038 - width:r.width,
1039 - score:score
1040 - });
1041 - }
1042 - });
1043 -
1044 - if(!candidates.length)return null;
1045 -
1046 - candidates.sort(function(a,b){
1047 - if(a.score!==b.score)return b.score-a.score;
1048 - if(Math.abs(a.relativeTop-b.relativeTop)>3){
1049 - return a.relativeTop-b.relativeTop;
1050 - }
1051 - return b.width-a.width;
1052 - });
1053 -
1054 - // For exact known labels always prefer the earliest exact match.
1055 - var exacts=candidates.filter(function(c){
1056 - return exactKnownFirstSection(c.el);
1057 - });
1058 -
1059 - if(exacts.length){
1060 - exacts.sort(function(a,b){
1061 - return a.relativeTop-b.relativeTop||b.width-a.width;
1062 - });
1063 - return exacts[0].el;
1064 - }
1065 -
1066 - // Generic fallback: earliest high-confidence bar.
1067 - candidates.sort(function(a,b){
1068 - return a.relativeTop-b.relativeTop||b.score-a.score||b.width-a.width;
1069 - });
1070 -
1071 - return candidates[0].el;
1072 - }
1073 -
1074 - function alignFirstSections(cards){
1075 - var rows=
1076 - cards.map(function(card){
1077 - var bar=
1078 - visuallyFirstSectionBar(card);
1079 -
1080 - if(!bar)return null;
1081 -
1082 - var cardRect=
1083 - card.getBoundingClientRect();
1084 -
1085 - var barRect=
1086 - bar.getBoundingClientRect();
1087 -
1088 - return {
1089 - card:card,
1090 - bar:bar,
1091 - relativeTop:
1092 - barRect.top-cardRect.top,
1093 - label:
1094 - normalizeText(bar.textContent)
1095 - };
1096 - });
1097 -
1098 - // Conservative: only align when every card in the horizontal row
1099 - // has a reliable first section bar.
1100 - if(
1101 - rows.some(function(row){
1102 - return !row;
1103 - })
1104 - ){
1105 - return null;
1106 - }
1107 -
1108 - var targetTop=
1109 - Math.max.apply(
1110 - Math,
1111 - rows.map(function(row){
1112 - return row.relativeTop;
1113 - })
1114 - );
1115 -
1116 - rows.forEach(function(row){
1117 - var delta=
1118 - targetTop-
1119 - row.relativeTop;
1120 -
1121 - if(delta<=1)return;
1122 -
1123 - saveOriginal(
1124 - row.bar,
1125 - originalMarginTop,
1126 - "margin-top"
1127 - );
1128 -
1129 - var currentMargin=
1130 - num(
1131 - getComputedStyle(
1132 - row.bar
1133 - ).marginTop
1134 - );
1135 -
1136 - row.bar.style.setProperty(
1137 - "margin-top",
1138 - (
1139 - currentMargin+
1140 - delta
1141 - )+"px"
1142 - );
1143 -
1144 - row.bar.setAttribute(
1145 - "data-sn-first-section-aligned",
1146 - "4"
1147 - );
1148 -
1149 - sectionManaged.add(row.bar);
1150 - });
1151 -
1152 - return {
1153 - labels:
1154 - rows.map(function(row){
1155 - return row.label;
1156 - }),
1157 - targetRelativeTop:
1158 - Math.round(targetTop)
1159 - };
1160 - }
1161 -
1162 - function applyGroup(group){
1163 - if(!validHorizontalGroup(group)){
1164 - return null;
1165 - }
1166 -
1167 - var cards=[];
1168 - var seen=new Set();
1169 -
1170 - group.entries.forEach(function(entry){
1171 - if(!seen.has(entry.target)){
1172 - seen.add(entry.target);
1173 - cards.push(entry.target);
1174 - }
1175 - });
1176 -
1177 - if(cards.length<2)return null;
1178 -
1179 - var firstSection=
1180 - alignFirstSections(cards);
1181 -
1182 - // The section alignment can change natural card heights.
1183 - // Measure only afterwards.
1184 - var maxHeight=0;
1185 -
1186 - cards.forEach(function(card){
1187 - maxHeight=Math.max(
1188 - maxHeight,
1189 - card.getBoundingClientRect().height
1190 - );
1191 - });
1192 -
1193 - maxHeight=Math.ceil(maxHeight);
1194 -
1195 - if(maxHeight<MIN_H)return null;
1196 -
1197 - cards.forEach(function(card){
1198 - saveOriginal(
1199 - card,
1200 - originalMinHeight,
1201 - "min-height"
1202 - );
1203 -
1204 - card.style.setProperty(
1205 - "min-height",
1206 - maxHeight+"px"
1207 - );
1208 -
1209 - card.setAttribute(
1210 - "data-sn-equal-height-managed",
1211 - "4"
1212 - );
1213 -
1214 - heightManaged.add(card);
1215 - });
1216 -
1217 - return {
1218 - cards:cards.length,
1219 - height:maxHeight,
1220 - firstSection:firstSection
1221 - };
1222 - }
1223 -
1224 - function run(){
1225 - reset();
1226 -
1227 - if(
1228 - window.innerWidth<=MOBILE_MAX
1229 - ){
1230 - return;
1231 - }
1232 -
1233 - var parents=
1234 - Array.from(
1235 - root.querySelectorAll("*")
1236 - ).filter(function(parent){
1237 - return (
1238 - visible(parent,MIN_W,MIN_H)&&
1239 - parent.children&&
1240 - parent.children.length>=2&&
1241 - parent.children.length<=MAX_PARENT_CHILDREN
1242 - );
1243 - });
1244 -
1245 - var touched=new Set();
1246 -
1247 - parents.forEach(function(parent){
1248 - var entries=[];
1249 -
1250 - Array.from(parent.children).forEach(function(child){
1251 - if(!visible(child,MIN_W,MIN_H))return;
1252 -
1253 - var target=pickTarget(child);
1254 - if(!target)return;
1255 -
1256 - entries.push({
1257 - target:target,
1258 - rect:target.getBoundingClientRect()
1259 - });
1260 - });
1261 -
1262 - if(entries.length<2)return;
1263 -
1264 - groupsByVisualRow(entries).forEach(function(group){
1265 - if(!validHorizontalGroup(group))return;
1266 -
1267 - var signature=
1268 - group.entries.map(function(entry){
1269 - return entry.target;
1270 - });
1271 -
1272 - if(
1273 - !signature.some(function(el){
1274 - return !touched.has(el);
1275 - })
1276 - ){
1277 - return;
1278 - }
1279 -
1280 - var applied=
1281 - applyGroup(group);
1282 -
1283 - if(applied){
1284 - signature.forEach(function(el){
1285 - touched.add(el);
1286 - });
1287 - }
1288 - });
1289 - });
1290 - }
1291 -
1292 - function schedule(){
1293 - if(raf)cancelAnimationFrame(raf);
1294 -
1295 - raf=requestAnimationFrame(function(){
1296 - raf=requestAnimationFrame(function(){
1297 - raf=0;
1298 - run();
1299 - });
1300 - });
1301 - }
1302 -
1303 - addEventListener("resize",schedule,{passive:true});
1304 - addEventListener("load",schedule,{once:true});
1305 -
1306 - root.addEventListener(
1307 - "click",
1308 - function(){
1309 - setTimeout(schedule,0);
1310 - },
1311 - true
1312 - );
1313 -
1314 - Array.from(root.querySelectorAll("img")).forEach(function(img){
1315 - if(!img.complete){
1316 - img.addEventListener("load",schedule,{once:true});
1317 - }
1318 - });
1319 -
1320 - if(document.fonts&&document.fonts.ready){
1321 - document.fonts.ready.then(schedule);
1322 - }
1323 -
1324 - schedule();
1325 - setTimeout(schedule,200);
1326 - setTimeout(schedule,650);
1327 - setTimeout(schedule,1400);
1328 -})();
1329 -</script>
1330 -<!-- SN_HORIZONTAL_BOX_HARMONIZER_END -->
1331 -{{/html}}
1332 -