Wiki source code of Plan Your Data Management

Last modified by Veronika Kocher on Friday, 04 Sep 2026 14:45

Hide last authors
Veronika Kocher 4.6 1 {{html clean="false"}}
2 <!-- ARSN_FULL_PAGE_PLAN_DATA_MANAGEMENT_V1 -->
3 <style>
4 .dmp{max-width:1400px;margin:0 auto;color:#322f2b}.dmp *{box-sizing:border-box}
5 .dmp-card{border:1px solid #e3ded6;border-radius:11px;background:#fcfbf8;box-shadow:0 1px 3px rgba(0,0,0,.035)}
6 .dmp-eye{font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase}
7 .dmp-hero{height:125px;overflow:hidden;background:#f1eee9}.dmp-hero img{width:100%;height:100%;object-fit:cover;object-position:center 48%;display:block}
8 .dmp-sec{margin:0 0 30px}.dmp-sec h3{font-size:22px;margin:0 0 7px;color:#35312d}.dmp-sec>p{color:#6a655e;line-height:1.58;max-width:1180px}
9 .dmp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:14px}
10 .dmp-box{padding:15px 16px;border:1px solid #e3ded6;border-radius:9px;background:#fcfbf8}.dmp-box h4{font-size:17px;margin:0 0 6px;color:#35312d}.dmp-box p{margin:0;color:#625d56;line-height:1.5}.dmp-box ul{margin:8px 0 0 19px;padding:0;color:#625d56;line-height:1.5}
11 .dmp-check{position:relative;padding:12px 13px 12px 37px;border:1px solid #e3ded6;border-radius:8px;background:#fffdf9;color:#504a44;line-height:1.5}.dmp-check:before{content:"✓";position:absolute;left:13px;top:10px;color:#e94b13;font-weight:800}
12 .dmp-info{padding:15px 17px;border:1px solid #c7e5ed;border-left:5px solid #21b6d7;background:#eaf6f9;border-radius:8px;color:#365e68;line-height:1.55}.dmp-info strong{color:#2d5661}
13 .dmp-warn{padding:15px 17px;border:1px solid #efd9cc;border-left:5px solid #e94b13;background:#fff6f1;border-radius:8px;color:#67564e;line-height:1.55}.dmp-warn strong{color:#744531}
14 .dmp-rights{padding:15px 17px;border:1px solid #efdca7;border-left:5px solid #f0aa00;background:#fff9e9;border-radius:8px;color:#665a38;line-height:1.55}.dmp-rights strong{color:#6d571c}
15 .dmp-store{padding:15px 17px;border:1px solid #cfe8d8;border-left:5px solid #38b76a;background:#eff9f2;border-radius:8px;color:#45614e;line-height:1.55}.dmp-store strong{color:#35543f}
16 .dmp-tablewrap{overflow-x:auto;border-radius:9px}.dmp-tbl{width:100%;border-collapse:collapse;background:#fffdf9;min-width:820px}.dmp-tbl th,.dmp-tbl td{border:1px solid #e3ded6;padding:10px 11px;vertical-align:top;text-align:left;line-height:1.45}.dmp-tbl th{background:#f3efe8;color:#403b36}.dmp-tbl td{color:#56504a}
17 .dmp-step{padding:15px 16px;border:1px solid #e3ded6;border-top:4px solid #e94b13;border-radius:9px;background:#fcfbf8}.dmp-step .n{font-size:12px;font-weight:800;color:#8a4d36;letter-spacing:.06em}.dmp-step h4{font-size:17px;margin:3px 0 6px;color:#35312d}.dmp-step p{margin:0;color:#625d56;line-height:1.5}
18 .dmp-service{display:block;padding:14px 15px;border:1px solid #e3ded6;border-radius:9px;background:#fcfbf8;color:#322f2b;text-decoration:none}.dmp-service:hover,.dmp-service:focus{background:#fffdf9;text-decoration:none}.dmp-service strong{display:block;margin-bottom:4px}.dmp-service span{display:block;color:#625d56;line-height:1.45;font-weight:400}
19 .dmp-linkgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:8px}.dmp-navlink{display:block;padding:10px 11px;border:1px solid #e9e4dc;border-left:3px solid #e94b13;border-radius:6px;background:#fffdf9;color:#252321;text-decoration:none;font-weight:600;line-height:1.35}.dmp-navlink:hover,.dmp-navlink:focus{background:#fff7f1;text-decoration:none}
20 .dmp-chip{display:inline-block;padding:4px 8px;margin:3px 4px 3px 0;border-radius:14px;background:#f3efe8;border:1px solid #e3ded6;color:#5c5650;font-size:12px;text-decoration:none}
21 @media(max-width:680px){.dmp-hero{height:105px}.dmp-sec h3{font-size:20px}}
22 </style>
Veronika Kocher 2.1 23
Veronika Kocher 4.6 24 <div class="dmp">
Veronika Kocher 2.1 25
Veronika Kocher 4.6 26 <section class="dmp-card" style="margin-bottom:18px;overflow:hidden;border-left:6px solid #e94b13;">
27 <div class="dmp-hero"><img src="https://xwiki.uni-ak.ac.at/bin/download/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/WebHome/enable.png" alt="Planning research data, materials and outputs across the project lifecycle"></div>
28 <div style="padding:18px 21px 20px">
Veronika Kocher 4.13 29 <div class="dmp-eye" style="color:#8a4d36;margin-bottom:5px">PREPARE · DATA MANAGEMENT PLAN</div>
Veronika Kocher 4.6 30 <h2 style="font-size:27px;line-height:1.2;margin:0 0 8px;color:#2c2926">Turn data management into a working project routine — not a form you fill in once</h2>
31 <p style="margin:0;color:#5e5953;line-height:1.6;max-width:1160px">A practical Data Management Plan (DMP) records how your project will organise, store, protect, document, share, preserve or dispose of its data and materials. For artistic and arts-based research, this can include physical objects, audiovisual material, software, performances, process documentation and artistic outputs as well as conventional research data.</p>
32 </div>
33 </section>
Veronika Kocher 2.1 34
Veronika Kocher 4.6 35 <div class="dmp-info" style="margin-bottom:16px"><strong>Treat the DMP as a living working document.</strong> Start with what you know, record unresolved decisions, assign responsibility and update the plan when the project changes.</div>
Veronika Kocher 2.1 36
Veronika Kocher 4.6 37 <div class="dmp-rights" style="margin-bottom:16px"><strong>A DMP does not mean that everything must become open.</strong> It should make restrictions visible and explain why access, sharing or reuse may need to be limited because of personal data, consent, copyright, confidentiality, cultural sensitivity, contractual obligations, security or other legitimate constraints.</div>
Veronika Kocher 2.1 38
Veronika Kocher 4.6 39 <div class="dmp-store" style="margin-bottom:28px"><strong>Start from your material inventory.</strong> If you have not yet mapped the data, materials, documentation and outputs your project will create, collect or reuse, begin with <a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Identify%20Your%20Data%20%26%20Research%20Outputs/">Identify Your Data &amp; Research Outputs</a>.</div>
Veronika Kocher 2.1 40
Veronika Kocher 4.7 41 <!-- ARSN_DMP_TOOL_COMING_SOON_V1 -->
42 <section id="dmp-tool-coming-soon" class="dmp-card" style="margin-bottom:28px;overflow:hidden;border-left:6px solid #21b6d7;">
43 <div style="padding:17px 20px 18px">
44 <div class="dmp-eye" style="color:#3f6871;margin-bottom:5px">DMP TOOL <span style="display:inline-block;margin-left:6px;padding:3px 7px;border-radius:12px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:10px;letter-spacing:.06em;vertical-align:1px">COMING SOON</span></div>
45 <h3 style="font-size:21px;margin:0 0 7px;color:#35312d">Interactive Art &amp; Research DMP Tool</h3>
46 <p style="margin:0 0 11px;color:#625d56;line-height:1.55;max-width:1050px">A local form will connect the eleven core DMP questions with funder-specific requirements and export DMPs as PDF, JSON, YAML and Markdown. Funder profiles are maintained separately from the tool so that FWF, Horizon Europe, ERC or FFG requirements can be updated without reprogramming the form.</p>
47 <a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Plan%20Your%20Data%20Management/DMP%20Tool/" aria-disabled="true" onclick="return false;" style="display:inline-block;padding:8px 11px;border:1px solid #c7e5ed;border-radius:6px;background:#f4fbfc;color:#3f6871;text-decoration:none;font-weight:700;cursor:not-allowed">Open DMP Tool ↗</a>
48 <span style="display:inline-block;margin-left:8px;color:#8a4d36;font-size:12px;font-weight:700">COMING SOON</span>
49 </div>
50 </section>
51 <!-- ARSN_DMP_TOOL_COMING_SOON_END -->
52
Veronika Kocher 4.6 53 <section class="dmp-sec">
54 <div class="dmp-eye" style="color:#8a4d36;margin-bottom:4px">STEP 1 · DEFINE THE SCOPE</div>
55 <h3>Decide what your DMP needs to cover</h3>
56 <p>Your DMP should follow the real project, not an abstract template. Begin with the project structure, funding requirements and the material types you have already identified.</p>
Veronika Kocher 2.1 57
Veronika Kocher 4.6 58 <div class="dmp-grid">
59 <div class="dmp-box" style="border-top:4px solid #21b6d7">
60 <h4>Project &amp; plan identity</h4>
61 <p>Project title, lead, host unit, partners, funding programme, project dates, DMP owner, DMP version and last review date.</p>
62 </div>
63 <div class="dmp-box" style="border-top:4px solid #21b6d7">
64 <h4>Data, materials &amp; outputs</h4>
65 <p>What will be created, collected, commissioned or reused; expected formats, physical carriers, scale, dependencies and master versions.</p>
66 </div>
67 <div class="dmp-box" style="border-top:4px solid #e94b13">
68 <h4>Roles &amp; responsibilities</h4>
69 <p>Who creates, documents, stores, backs up, controls access, approves sharing, deposits outputs and completes handover.</p>
70 </div>
71 <div class="dmp-box" style="border-top:4px solid #38b76a">
72 <h4>Storage, backup &amp; access</h4>
73 <p>Working locations, authoritative copies, backup routine, recovery, access groups, account ownership and security requirements.</p>
74 </div>
75 <div class="dmp-box" style="border-top:4px solid #e94b13">
76 <h4>Organisation &amp; versioning</h4>
77 <p>Folder structure, naming, version conventions, master files, working copies, export formats and change control.</p>
78 </div>
79 <div class="dmp-box" style="border-top:4px solid #21b6d7">
80 <h4>Metadata, provenance &amp; documentation</h4>
81 <p>What information is needed to understand origin, creator, context, method, transformation, relationships, software and versions.</p>
82 </div>
83 <div class="dmp-box" style="border-top:4px solid #f0aa00">
84 <h4>Rights, ethics &amp; protection</h4>
85 <p>Copyright, licences, consent, personal data, confidentiality, contracts, community or cultural protocols and restrictions.</p>
86 </div>
87 <div class="dmp-box" style="border-top:4px solid #f0aa00">
88 <h4>Sharing, publication &amp; reuse</h4>
89 <p>What can be shared, with whom, when, under which licence, through which repository/platform and with what documentation.</p>
90 </div>
91 <div class="dmp-box" style="border-top:4px solid #38b76a">
92 <h4>Retention, preservation &amp; disposal</h4>
93 <p>What should remain after project end, what can be deleted, retention periods, preservation formats, repository/archive and handover.</p>
94 </div>
95 <div class="dmp-box" style="border-top:4px solid #e94b13">
96 <h4>Resources &amp; costs</h4>
97 <p>Storage, specialist software, digitisation, transcription, metadata work, repository fees, preservation, staff time and other data-management costs.</p>
98 </div>
99 </div>
100 </section>
Veronika Kocher 2.1 101
Veronika Kocher 4.6 102 <section class="dmp-sec">
103 <div class="dmp-eye" style="color:#8a4d36;margin-bottom:4px">STEP 2 · CREATE THE MINIMUM WORKING DMP</div>
104 <h3>Record decisions that the team can actually follow</h3>
105 <p>A useful first DMP can be short. The important thing is that it names responsibilities and turns assumptions into explicit decisions.</p>
Veronika Kocher 2.1 106
Veronika Kocher 4.6 107 <div class="dmp-tablewrap">
108 <table class="dmp-tbl">
109 <thead><tr><th>Question</th><th>Minimum decision to record</th><th>Responsible / review point</th></tr></thead>
110 <tbody>
111 <tr><td><strong>What are we managing?</strong></td><td>Material/data/output types, origin, formats, physical carriers, approximate quantity or expected growth.</td><td>Project lead + person closest to the material.</td></tr>
112 <tr><td><strong>Where is active work stored?</strong></td><td>Approved working location and location of the authoritative/master copy.</td><td>Data/documentation responsibility; review when infrastructure changes.</td></tr>
113 <tr><td><strong>How is it backed up?</strong></td><td>Backup location, frequency, responsibility and how recovery is checked.</td><td>Named owner; test before critical production/publication stages.</td></tr>
114 <tr><td><strong>Who can access what?</strong></td><td>Access groups, account ownership, restrictions and process for adding/removing people.</td><td>Project lead / system owner; review when staff or partners change.</td></tr>
115 <tr><td><strong>How are files and versions organised?</strong></td><td>Folder structure, file naming, version convention, master/working/derivative distinction.</td><td>Team-wide rule; review when workflows become unclear.</td></tr>
116 <tr><td><strong>What documentation is required?</strong></td><td>Minimum metadata, provenance, README/context documentation, technical dependencies and relationships.</td><td>Creator + documentation owner.</td></tr>
117 <tr><td><strong>What is sensitive or restricted?</strong></td><td>Personal/confidential/culturally sensitive material, consent status, legal or contractual restrictions and required protection.</td><td>Project lead with specialist advice where needed.</td></tr>
118 <tr><td><strong>What rights apply?</strong></td><td>Ownership, third-party material, licences, permissions and unresolved rights questions.</td><td>Project lead / rights responsibility; resolve before publication.</td></tr>
119 <tr><td><strong>What will be shared or published?</strong></td><td>Outputs/materials to share, access level, timing, licence, repository/platform and exceptions.</td><td>Project lead + output owner.</td></tr>
120 <tr><td><strong>What happens at project end?</strong></td><td>Keep, deposit, preserve, hand over or delete; final owner; access closure; retention period if applicable.</td><td>Named closure owner; confirm before final reporting.</td></tr>
121 <tr><td><strong>When is the DMP reviewed?</strong></td><td>Planned review dates plus event-based triggers.</td><td>DMP owner.</td></tr>
122 </tbody>
123 </table>
124 </div>
Veronika Kocher 2.1 125
Veronika Kocher 4.6 126 <div class="dmp-info" style="margin-top:14px"><strong>Simple rule:</strong> every important DMP statement should answer at least one of these: <em>what, where, who, how, when, under which conditions, and what happens at the end?</em></div>
127 </section>
Veronika Kocher 2.1 128
Veronika Kocher 4.6 129 <section class="dmp-sec">
130 <div class="dmp-eye" style="color:#8a4d36;margin-bottom:4px">STEP 3 · PLAN FOR CHANGE</div>
131 <h3>Review the DMP when a decision actually changes</h3>
132 <p>Do not update the plan only because a calendar reminder appears. Use scheduled reviews, but also connect reviews to concrete project events.</p>
Veronika Kocher 2.1 133
Veronika Kocher 4.6 134 <div class="dmp-grid">
135 <div class="dmp-step"><div class="n">REVIEW 1</div><h4>Proposal / award / project start</h4><p>Align the working plan with the submitted proposal, funder requirements, approved budget, staffing, partners and actual infrastructure.</p></div>
136 <div class="dmp-step"><div class="n">REVIEW 2</div><h4>New material or method</h4><p>Update the DMP when new datasets, media types, software, equipment, participants, collections or documentation workflows are introduced.</p></div>
137 <div class="dmp-step"><div class="n">REVIEW 3</div><h4>People or partner changes</h4><p>Recheck access, account ownership, responsibilities, handover, agreements and where authoritative copies are held.</p></div>
138 <div class="dmp-step"><div class="n">REVIEW 4</div><h4>Before publication / exhibition / sharing</h4><p>Confirm rights, consent, personal-data handling, metadata, file quality, access level, licence and repository/platform route.</p></div>
139 <div class="dmp-step"><div class="n">REVIEW 5</div><h4>Before project closure</h4><p>Decide what is retained, deposited, preserved, deleted or transferred; close obsolete access and document final responsibilities.</p></div>
140 </div>
141 </section>
Veronika Kocher 2.1 142
Veronika Kocher 4.6 143 <section class="dmp-sec">
Veronika Kocher 4.7 144 <!-- ARSN_DMP_FUNDER_LINKS_SPECIFIC_V2 -->
Veronika Kocher 4.6 145 <div class="dmp-eye" style="color:#8a4d36;margin-bottom:4px">FUNDER REQUIREMENTS</div>
Veronika Kocher 4.7 146 <h3>Work from the actual template, call and binding project conditions</h3>
147 <p>Your internal working DMP can be broader than the formal funder template. For a funded project, however, the current DMP template, the specific call or call guide, the funding agreement or Grant Agreement and the deadlines stated there are decisive. The links below therefore point directly to DMP-relevant documents or document areas.</p>
Veronika Kocher 2.1 148
Veronika Kocher 4.6 149 <div class="dmp-grid">
150 <div class="dmp-box" style="border-top:4px solid #e94b13">
151 <h4>FWF</h4>
Veronika Kocher 4.7 152 <p>For the relevant approved FWF projects, the DMP is required for project start, is submitted with the funding agreement, uses the same language as the proposal, is versioned throughout the project and is submitted in its final version with the final project report.</p>
153 <ul style="margin:10px 0 0 18px;padding:0;line-height:1.55">
154 <li><a href="https://www.fwf.ac.at/fileadmin/Website/Dokumente/Ueber_uns/Aufgaben_und_Aktivitaeten/Open_Science/fwf_dmp_guidelines_template.docx" target="_blank" rel="noopener"><strong>DMP – Guidelines and template (EN, DOCX) ↗</strong></a></li>
155 <li><a href="https://www.fwf.ac.at/fileadmin/Website/Dokumente/Ueber_uns/Aufgaben_und_Aktivitaeten/Open_Science/fwf_dmp_evaluierungsmatrix.pdf" target="_blank" rel="noopener">DMP evaluation matrix (PDF) ↗</a></li>
156 <li><a href="https://www.fwf.ac.at/en/about-us/what-we-do/open-science/open-access-policy/open-access-policy-for-research-data" target="_blank" rel="noopener">Open-Access Policy for Research Data ↗</a></li>
157 <li><a href="https://www.fwf.ac.at/en/about-us/what-we-do/open-science/research-data-management" target="_blank" rel="noopener">Research Data Management – workflow, funding &amp; contact ↗</a></li>
158 </ul>
Veronika Kocher 4.6 159 </div>
Veronika Kocher 4.5 160
Veronika Kocher 4.6 161 <div class="dmp-box" style="border-top:4px solid #21b6d7">
162 <h4>Horizon Europe</h4>
Veronika Kocher 4.7 163 <p>Research Data Management is a mandatory Open Science practice for projects generating or reusing research data. The detailed DMP is normally a deliverable by month 6 and is maintained as a living document.</p>
164 <ul style="margin:10px 0 0 18px;padding:0;line-height:1.55">
165 <li><a href="https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/how-to-participate/reference-documents;programCode=HORIZON" target="_blank" rel="noopener"><strong>DMP Reporting Template – Funding &amp; Tenders Reference Documents ↗</strong></a><br><small>Under “Templates &amp; Forms” → “Project reporting templates”.</small></li>
166 <li><a href="https://ec.europa.eu/info/funding-tenders/opportunities/docs/2021-2027/common/guidance/aga_en.pdf" target="_blank" rel="noopener">Annotated Grant Agreement – DMP and Open Science obligations ↗</a></li>
167 <li><a href="https://rea.ec.europa.eu/open-science_en" target="_blank" rel="noopener">REA Open Science Q&amp;A – DMP, repositories &amp; access restrictions ↗</a></li>
168 <li><a href="https://ec.europa.eu/info/funding-tenders/opportunities/docs/2021-2027/horizon/guidance/programme-guide_horizon_en.pdf" target="_blank" rel="noopener">Horizon Europe Programme Guide – Open Science / RDM ↗</a></li>
169 </ul>
Veronika Kocher 4.6 170 </div>
Veronika Kocher 2.1 171
Veronika Kocher 4.7 172 <div class="dmp-box" style="border-top:4px solid #21b6d7">
173 <h4>ERC · Horizon Europe</h4>
174 <p>Horizon Europe-funded ERC projects include Research Data Management as a work package. The DMP is due no later than the end of project month 6; the ERC guidance also addresses dissemination level, FAIR, resources and data security.</p>
175 <p style="margin-top:9px"><a href="https://erc.europa.eu/manage-your-project/open-science" target="_blank" rel="noopener"><strong>ERC – Open Science in ERC Projects: RDM work package, DMP deadline &amp; template ↗</strong></a></p>
176 </div>
177
Veronika Kocher 4.6 178 <div class="dmp-box" style="border-top:4px solid #f0aa00">
Veronika Kocher 4.7 179 <h4>FFG · always check the specific call</h4>
180 <p>For FFG funding, DMP rules are call- and instrument-specific. Record the URL of the actual call, the version/date of the guide and whether a DMP is mandatory at submission, mandatory during the project/reporting, recommended or not required.</p>
181 <p style="margin-top:9px"><a href="https://www.ffg.at/content/ausschreibungsdokumente-der-basisprogramme" target="_blank" rel="noopener"><strong>FFG – current Basisprogramme call documents 2025/26 ↗</strong></a></p>
182 <p style="margin-top:8px;color:#6a655e;font-size:13px">For other FFG programmes, always use the current programme/call page and the guide linked there.</p>
Veronika Kocher 4.6 183 </div>
184 </div>
Veronika Kocher 4.7 185
186 <div class="dmp-info" style="margin-top:14px"><strong>Other funders / partners:</strong> Do not record only the funder name. Store the <strong>exact URL of the binding requirement or template, its version/date and deadline</strong> in the DMP. For questions about the internal funding route or how funder requirements apply at the Angewandte: <a href="https://www.dieangewandte.at/universitaet/organisation/planung_service_und_verwaltung/support_kunst_und_forschung" target="_blank" rel="noopener">Support Kunst und Forschung ↗</a>.</div>
187 <!-- ARSN_DMP_FUNDER_LINKS_SPECIFIC_END -->
Veronika Kocher 4.6 188 </section>
Veronika Kocher 2.1 189
Veronika Kocher 4.6 190 <section class="dmp-sec">
191 <div class="dmp-eye" style="color:#8a4d36;margin-bottom:4px">STEP 4 · CONNECT THE DMP TO REAL WORKFLOWS</div>
192 <h3>A plan is useful only if it points to actual places, rules and people</h3>
Veronika Kocher 2.1 193
Veronika Kocher 4.6 194 <div class="dmp-grid">
195 <div class="dmp-check"><strong>Storage:</strong> name the actual working environment, not “university server”.</div>
196 <div class="dmp-check"><strong>Backup:</strong> state what is backed up, where, how often and by whom.</div>
197 <div class="dmp-check"><strong>Access:</strong> use named groups/roles and define what happens when someone leaves.</div>
198 <div class="dmp-check"><strong>Files:</strong> document folder, naming and version rules where the team can find them.</div>
199 <div class="dmp-check"><strong>Metadata:</strong> specify the fields or README information required for each important material type.</div>
200 <div class="dmp-check"><strong>Rights:</strong> link permissions, licences and consent records to the material they govern.</div>
201 <div class="dmp-check"><strong>Sharing:</strong> identify the target repository/platform before the final week of the project.</div>
202 <div class="dmp-check"><strong>Preservation:</strong> distinguish active storage, backup, repository deposit and long-term preservation.</div>
203 </div>
Veronika Kocher 2.1 204
Veronika Kocher 4.6 205 <div class="dmp-warn" style="margin-top:14px"><strong>Red flag:</strong> “We will decide at the end” is not a data-management strategy. Decisions that affect consent, rights, file formats, metadata, storage, documentation or preservation often have to be made while the material is being created.</div>
206 </section>
Veronika Kocher 2.1 207
Veronika Kocher 4.6 208 <section class="dmp-sec">
209 <div class="dmp-eye" style="color:#8a4d36;margin-bottom:4px">SERVICES &amp; SUPPORT</div>
210 <h3>Who to involve at the Angewandte</h3>
211 <p>Use specialist support where the DMP reveals a real requirement. Not every project needs every service.</p>
Veronika Kocher 4.1 212
Veronika Kocher 4.6 213 <div class="dmp-grid">
214 <a class="dmp-service" href="https://www.dieangewandte.at/university_library" target="_blank" rel="noopener"><strong>University Library · Research Data Management &amp; Support ↗</strong><span>For research-data management, metadata, repository and preservation-oriented questions. The Library currently lists Research Data Management &amp; Support as part of its team expertise.</span></a>
215
216 <a class="dmp-service" href="mailto:veronika.kocher@uni-ak.ac.at"><strong>Research Data Management &amp; Support</strong><span>Current University Library contact for RDM support: veronika.kocher@uni-ak.ac.at</span></a>
217
218 <a class="dmp-service" href="mailto:repositorium@uni-ak.ac.at"><strong>Angewandte Repository</strong><span>Repository questions and deposit planning: repositorium@uni-ak.ac.at</span></a>
219
220 <a class="dmp-service" href="https://www.dieangewandte.at/universitaet/organisation/planung_service_und_verwaltung/support_kunst_und_forschung" target="_blank" rel="noopener"><strong>Support Kunst und Forschung ↗</strong><span>For funded artistic/scientific research, funder requirements, proposal/project coordination and the administrative funding route.</span></a>
221
222 <a class="dmp-service" href="mailto:projektsupport@uni-ak.ac.at"><strong>Project Support ticket contact</strong><span>projektsupport@uni-ak.ac.at</span></a>
223
224 <a class="dmp-service" href="https://www.dieangewandte.at/en/data_protection" target="_blank" rel="noopener"><strong>Data Protection ↗</strong><span>For specialist review where personal-data processing, data sharing, external processors/platforms or privacy risks require clarification. Data Protection Officer: dsb@uni-ak.ac.at</span></a>
225 </div>
226 </section>
227
228 <section class="dmp-sec">
229 <div class="dmp-eye" style="color:#8a4d36;margin-bottom:4px">RELATED NAVIGATOR TOPICS</div>
230 <h3>Turn each DMP decision into the next practical step</h3>
231
232 <div class="dmp-linkgrid">
233 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Identify%20Your%20Data%20%26%20Research%20Outputs/">Identify Your Data &amp; Research Outputs</a>
234 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/File%20Organisation%20%26%20Naming/">File Organisation &amp; Naming</a>
235 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Storage%2C%20Backup%20%26%20Security/">Storage, Backup &amp; Security</a>
236 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Data%20Protection%20%26%20Ethics/">Data Protection &amp; Ethics</a>
237 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Copyright%2C%20Rights%20%26%20Licences/">Copyright, Rights &amp; Licences</a>
238 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Collaboration%20Setup/">Collaboration Setup</a>
239 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Work%20%26%20Manage/Document%20Metadata%20%26%20Provenance/">Document Processes, Metadata &amp; Provenance</a>
240 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Work%20%26%20Manage/Review%20Your%20Data%20Management/">Review Your Data Management</a>
241 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Publish%20%26%20Share/Decide%20What%20to%20Share/">Decide What to Share</a>
242 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Publish%20%26%20Share/FAIR%2C%20CARE%20%26%20Open%20Science/">FAIR, CARE &amp; Open Science</a>
243 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Publish%20%26%20Share/Choose%20a%20Repository%20or%20Publication%20Platform/">Choose a Repository or Publication Platform</a>
244 <a class="dmp-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Publish%20%26%20Share/Preserve%20Data%20%26%20Artistic%20Outputs/">Preserve Data &amp; Artistic Outputs</a>
245 </div>
246 </section>
247
248 <div class="dmp-info" style="margin-bottom:14px"><strong>Need help reviewing a DMP?</strong> Bring the current funder template or internal draft, your material/output inventory, planned storage locations, project partners and the main questions that are still unresolved. This makes support much faster and more concrete.</div>
249
Veronika Kocher 4.15 250 <!-- ARSN_TRAINING_WORKSHOPS_V2_START -->
251 <section class="arsn-training-workshops" data-arsn-training-workshops="v2" style="margin:27px 0 22px 0;">
252 <div style="padding:16px 18px;background:#eef8fa;border:1px solid #cfe8ef;border-left:5px solid #21b6d7;border-radius:9px;">
253 <div style="font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase;color:#3f6871;margin-bottom:5px;">TRAINING &amp; WORKSHOPS</div>
254 <h3 style="font-size:20px;line-height:1.3;margin:0 0 7px;color:#35312d;text-align:left;">Training, workshops &amp; consultation sessions</h3>
255 <p style="margin:0 0 10px;color:#5e5953;line-height:1.55;">Relevant opportunities for this topic will be shown here automatically from the central calendar.</p>
256 <span data-arsn-coming-soon="true" style="display:inline-block;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;line-height:1.2;">COMING SOON</span>
257 </div>
258 </section>
259 <!-- ARSN_TRAINING_WORKSHOPS_V2_END -->
Veronika Kocher 4.14 260
Veronika Kocher 4.15 261 <!-- ARSN_PRACTICAL_RESOURCES_V2_START -->
262 <section class="arsn-practical-resources" data-arsn-practical-resources="v2" style="margin:0 0 27px;">
263 <div style="font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase;color:#8a4d36;margin-bottom:4px;">USEFUL MATERIALS</div>
264 <h3 style="font-size:22px;line-height:1.25;margin:0 0 8px;color:#35312d;text-align:left;">Practical Resources</h3>
265 <p style="margin:0 0 12px;color:#5e5953;line-height:1.55;">Use practical resources when you need a concise overview, a step-by-step procedure or a ready-to-use project aid.</p>
266 <div class="arsn-resource-grid" style="display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;">
267 <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #21b6d7;border-radius:9px;"><strong>Info Sheets</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;">COMING SOON</span><div style="color:#625d56;line-height:1.45;">Short reference guides for common questions and decisions.</div></div>
268 <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #e94b13;border-radius:9px;"><strong>Tutorials</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;">COMING SOON</span><div style="color:#625d56;line-height:1.45;">Step-by-step guidance for specific tasks and workflows.</div></div>
269 <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #38b76a;border-radius:9px;"><strong>Checklists &amp; Templates</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;">COMING SOON</span><div style="color:#625d56;line-height:1.45;">Ready-to-use checklists and templates for planning, managing and closing projects.</div></div>
270 </div>
271 <style>@media(max-width:767px){.arsn-resource-grid{grid-template-columns:1fr!important}}</style>
272 </section>
273 <!-- ARSN_PRACTICAL_RESOURCES_V2_END -->
Veronika Kocher 4.14 274
Veronika Kocher 4.1 275 <!-- ARSN_SEARCH_TERMS_START -->
Veronika Kocher 4.6 276 <details style="margin-top:24px;padding-top:10px;border-top:1px solid #e3ded6">
277 <summary style="cursor:pointer;color:#6a655e;font-size:13px">Search terms &amp; related topics</summary>
278 <div style="margin-top:9px;color:#5c5650;font-size:12px;line-height:1.7">data management plan · DMP · research data management · RDM · data lifecycle · data stewardship · data inventory · research materials · artistic research data · data types · file formats · storage · backup · access control · file naming · versioning · metadata · provenance · documentation · personal data · data protection · ethics · consent · copyright · licences · sensitive data · data sharing · open data · FAIR · CARE · repository · preservation · retention · deletion · funder requirements · FWF DMP · Horizon Europe DMP · project closure · handover · Datenmanagementplan · Forschungsdatenmanagement</div>
Veronika Kocher 4.1 279 </details>
280 <!-- ARSN_SEARCH_TERMS_END -->
Veronika Kocher 4.6 281
282 </div>
Veronika Kocher 4.1 283 {{/html}}
Veronika Kocher 4.6 284
Veronika Kocher 4.11 285 {{html clean="false"}}
286 <!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START -->
Veronika Kocher 4.10 287
Veronika Kocher 4.11 288 <style data-sn-service-navigator-master="1">
289 /* =========================================================
290 MASTER TYPOGRAPHY
291 ========================================================= */
Veronika Kocher 4.10 292 #xwikicontent h1,
293 #xwikicontent h2,
294 #xwikicontent h3,
295 #xwikicontent h4,
296 #xwikicontent h5,
297 #xwikicontent h6,
298 #xwikicontent .box-title,
299 #xwikicontent [role="heading"],
300 #xwikicontent h1 a,
301 #xwikicontent h2 a,
302 #xwikicontent h3 a,
303 #xwikicontent h4 a,
304 #xwikicontent h5 a,
305 #xwikicontent h6 a,
306 #xwikicontent .box-title a,
307 #xwikicontent [role="heading"] a{
308 text-align:left!important;
309 text-justify:auto!important;
310 word-spacing:normal!important;
311 }
312
Veronika Kocher 4.11 313 /* =========================================================
314 COMING SOON / IN VORBEREITUNG
315 ========================================================= */
316 .sn-coming-soon-badge{
317 display:inline-block;
318 vertical-align:middle;
319 margin-left:10px;
320 padding:4px 8px;
321 border-radius:14px;
322 border:1px solid #efd9cc;
323 background:#fff4ee;
324 color:#8a4d36;
325 font-size:11px;
326 font-weight:700;
327 letter-spacing:.055em;
328 line-height:1.2;
329 white-space:nowrap;
330 }
331
332 /* =========================================================
333 NATIVE / DETAIL CALLOUT GEOMETRY
334 Preserve existing backgrounds.
335 ========================================================= */
336 #xwikicontent .arsn-info,
337 #xwikicontent .dmp-info,
338 #xwikicontent .ido-info,
339 #xwikicontent .pp-info,
340 #xwikicontent .infomessage{
Veronika Kocher 4.10 341 box-sizing:border-box!important;
Veronika Kocher 4.11 342 border-left:4px solid #21b6d7!important;
343 border-radius:8px;
Veronika Kocher 4.10 344 text-align:left!important;
345 word-spacing:normal!important;
346 }
347
Veronika Kocher 4.11 348 #xwikicontent .arsn-warn,
349 #xwikicontent .dmp-warn,
350 #xwikicontent .ido-warn,
351 #xwikicontent .pp-warn,
352 #xwikicontent .warn,
353 #xwikicontent .warning,
354 #xwikicontent .warningmessage,
Veronika Kocher 4.10 355 #xwikicontent .errormessage{
Veronika Kocher 4.11 356 box-sizing:border-box!important;
357 border-left:4px solid #e94b13!important;
358 border-radius:8px;
359 text-align:left!important;
360 word-spacing:normal!important;
Veronika Kocher 4.10 361 }
362
Veronika Kocher 4.11 363 [data-sn-master-equal-height],
364 [data-sn-master-first-row]{
Veronika Kocher 4.9 365 box-sizing:border-box;
Veronika Kocher 4.8 366 }
Veronika Kocher 4.12 367
368 /* =========================================================
369 FULL-WIDTH THREE-LINE NUMBER / TITLE / SUBTITLE BLOCKS
370 ========================================================= */
371 #xwikicontent .arsn-area-label[data-sn-three-line="1"]{
372 display:grid!important;
373 grid-template-columns:minmax(0,1fr)!important;
374 grid-auto-rows:auto!important;
375 width:100%!important;
376 max-width:none!important;
377 box-sizing:border-box!important;
378 justify-items:start!important;
379 align-items:start!important;
380 gap:2px!important;
381 text-align:left!important;
382 text-align-last:left!important;
383 text-justify:auto!important;
384 word-spacing:normal!important;
385 white-space:normal!important;
386 }
387 #xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-number,
388 #xwikicontent .arsn-area-label[data-sn-three-line="1"] > .sn-area-label-title,
389 #xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-action{
390 display:block!important;
391 width:100%!important;
392 margin:0!important;
393 text-align:left!important;
394 text-align-last:left!important;
395 text-justify:auto!important;
396 word-spacing:normal!important;
397 white-space:normal!important;
398 }
Veronika Kocher 4.8 399 </style>
Veronika Kocher 4.10 400
Veronika Kocher 4.11 401 <script data-sn-service-navigator-master="1">
Veronika Kocher 4.8 402 (function(){
403 "use strict";
404
Veronika Kocher 4.11 405 var PAGE_KIND="detail";
406 var PLACEHOLDER=false;
407 var PLACEHOLDER_LABEL="COMING SOON";
408
Veronika Kocher 4.8 409 var MOBILE_MAX=767;
Veronika Kocher 4.9 410 var ROW_TOLERANCE=6;
Veronika Kocher 4.10 411 var RESIZE_DEBOUNCE=220;
Veronika Kocher 4.8 412
413 var root=
414 document.getElementById("xwikicontent")||
415 document.querySelector(".xwiki-rendering-content")||
416 document.querySelector("main")||
417 document.body;
418
419 if(!root)return;
420
Veronika Kocher 4.11 421 var managedHeight=new Set();
422 var managedMargin=new Set();
423 var originalHeight=new WeakMap();
424 var originalMargin=new WeakMap();
Veronika Kocher 4.10 425
426 var resizeTimer=0;
Veronika Kocher 4.11 427 var running=false;
Veronika Kocher 4.10 428
Veronika Kocher 4.11 429 var THEMES=[
430 {
431 name:"BLUE",
432 accent:"#21b6d7",
433 bg:"#eaf7fb",
434 text:"#315d68",
435 labels:[
436 "HIER STARTEN",
437 "ENTSCHEIDEN",
438 "ÜBERPRÜFEN & ANPASSEN",
439 "START HERE",
440 "DECIDE",
441 "REVIEW & ADAPT"
442 ]
443 },
444 {
445 name:"RED",
446 accent:"#e94b13",
447 bg:"#fff1ec",
448 text:"#8a4d36",
449 labels:[
450 "PLANEN & ORGANISIEREN",
451 "ORGANISIEREN & DOKUMENTIEREN",
452 "PUBLIZIEREN & PRÄSENTIEREN",
453 "PLAN & ORGANISE",
454 "PLAN & ORGANIZE",
455 "ORGANISE & DOCUMENT",
456 "ORGANIZE & DOCUMENT",
457 "PUBLISH & PRESENT"
458 ]
459 },
460 {
461 name:"YELLOW",
462 accent:"#f0aa00",
463 bg:"#fff8e7",
464 text:"#785b17",
465 labels:[
466 "SCHÜTZEN & KLÄREN",
467 "STANDARDISIEREN & IDENTIFIZIEREN",
468 "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN",
469 "PROTECT & CLARIFY",
470 "STANDARDISE & IDENTIFY",
471 "STANDARDIZE & IDENTIFY",
472 "OPEN, REUSE & MAKE FINDABLE"
473 ]
474 },
475 {
476 name:"GREEN",
477 accent:"#38b76a",
478 bg:"#edf9f1",
479 text:"#3f7451",
480 labels:[
481 "INFRASTRUKTUR EINRICHTEN",
482 "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN",
483 "SPEICHERN & ZUGRIFF STEUERN",
484 "REPOSITORIUM, ERHALTEN & ÜBERGEBEN",
485 "SET UP INFRASTRUCTURE",
486 "SET UP INFRASTRUCTURE & COLLABORATION",
487 "STORE & CONTROL ACCESS",
488 "REPOSITORY, PRESERVE & HAND OVER"
489 ]
Veronika Kocher 4.9 490 }
Veronika Kocher 4.11 491 ];
Veronika Kocher 4.9 492
Veronika Kocher 4.11 493 function num(value){
494 var n=parseFloat(value);
495 return Number.isFinite(n)?n:0;
Veronika Kocher 4.8 496 }
497
Veronika Kocher 4.11 498 function norm(value){
499 return String(value||"")
Veronika Kocher 4.10 500 .replace(/\s+/g," ")
501 .trim()
502 .toUpperCase();
503 }
504
Veronika Kocher 4.11 505 function visible(el){
506 if(!el||el.nodeType!==1)return false;
Veronika Kocher 4.8 507
Veronika Kocher 4.11 508 var style=getComputedStyle(el);
509 var rect=el.getBoundingClientRect();
Veronika Kocher 4.10 510
511 return (
Veronika Kocher 4.11 512 style.display!=="none"&&
513 style.visibility!=="hidden"&&
514 rect.width>20&&
515 rect.height>4
Veronika Kocher 4.10 516 );
Veronika Kocher 4.8 517 }
518
Veronika Kocher 4.11 519 function saveStyle(el,map,property){
Veronika Kocher 4.9 520 if(map.has(el))return;
521
522 map.set(el,{
Veronika Kocher 4.11 523 value:el.style.getPropertyValue(property),
524 priority:el.style.getPropertyPriority(property)
Veronika Kocher 4.9 525 });
526 }
527
Veronika Kocher 4.11 528 function restoreStyle(el,map,property){
Veronika Kocher 4.9 529 var original=map.get(el);
530
531 if(original&&original.value){
532 el.style.setProperty(
533 property,
534 original.value,
535 original.priority||""
536 );
537 }else{
Veronika Kocher 4.11 538 el.style.removeProperty(property);
Veronika Kocher 4.9 539 }
540 }
541
Veronika Kocher 4.10 542 function resetRuntime(){
Veronika Kocher 4.11 543 managedHeight.forEach(function(el){
544 restoreStyle(
Veronika Kocher 4.9 545 el,
Veronika Kocher 4.11 546 originalHeight,
Veronika Kocher 4.9 547 "min-height"
548 );
549 el.removeAttribute(
Veronika Kocher 4.11 550 "data-sn-master-equal-height"
Veronika Kocher 4.9 551 );
552 });
553
Veronika Kocher 4.11 554 managedMargin.forEach(function(el){
555 restoreStyle(
Veronika Kocher 4.9 556 el,
Veronika Kocher 4.11 557 originalMargin,
Veronika Kocher 4.9 558 "margin-top"
559 );
560 el.removeAttribute(
Veronika Kocher 4.11 561 "data-sn-master-first-row"
Veronika Kocher 4.9 562 );
563 });
564
Veronika Kocher 4.11 565 managedHeight.clear();
566 managedMargin.clear();
567 }
Veronika Kocher 4.10 568
Veronika Kocher 4.11 569 function themeFor(text){
570 var value=norm(text);
Veronika Kocher 4.10 571
Veronika Kocher 4.11 572 for(var i=0;i<THEMES.length;i++){
573 for(var j=0;j<THEMES[i].labels.length;j++){
574 var label=THEMES[i].labels[j];
575
576 if(
577 value===label||
578 value.indexOf(label+" ")===0||
579 value.indexOf(label+" -")===0||
580 value.indexOf(label+" ·")===0
581 ){
582 return THEMES[i];
583 }
584 }
585 }
586
587 return null;
Veronika Kocher 4.9 588 }
589
Veronika Kocher 4.11 590 /* =======================================================
Veronika Kocher 4.12 591 BORDERLESS FILLED RED/ORANGE CTA BUTTONS
592 ======================================================= */
593
594 function colourDistance(a,b){
595 return Math.sqrt(
596 Math.pow(a[0]-b[0],2)+
597 Math.pow(a[1]-b[1],2)+
598 Math.pow(a[2]-b[2],2)
599 );
600 }
601
602 function makeFilledRedOrangeCTAsBorderless(){
603 var RED_ORANGE=[233,75,19];
604
605 Array.from(
606 root.querySelectorAll(
607 'a,button,[role="button"],input[type="submit"],input[type="button"]'
608 )
609 ).forEach(function(el){
610 if(!visible(el))return;
611
612 var style=getComputedStyle(el);
613 var rgb=parseRGB(style.backgroundColor);
614
615 if(!rgb)return;
616
617 if(
618 colourDistance(
619 rgb,
620 RED_ORANGE
621 )>55
622 ){
623 return;
624 }
625
626 var rect=el.getBoundingClientRect();
627
628 if(
629 rect.width<80||
630 rect.height<24
631 ){
632 return;
633 }
634
635 el.style.setProperty(
636 "border",
637 "none",
638 "important"
639 );
640
641 el.style.setProperty(
642 "border-left",
643 "none",
644 "important"
645 );
646
647 el.style.setProperty(
648 "border-top",
649 "none",
650 "important"
651 );
652
653 el.style.setProperty(
654 "border-right",
655 "none",
656 "important"
657 );
658
659 el.style.setProperty(
660 "border-bottom",
661 "none",
662 "important"
663 );
664
665 el.style.setProperty(
666 "box-shadow",
667 "none",
668 "important"
669 );
670 });
671 }
672
673 /* =======================================================
674 FULL-WIDTH THREE-LINE AREA LABELS
675 ======================================================= */
676
677 function compactText(value){
678 return String(value||"")
679 .replace(/\s+/g," ")
680 .trim();
681 }
682
683 function makeThreeLineAreaLabels(){
684 Array.from(
685 root.querySelectorAll(
686 ".arsn-area-label"
687 )
688 ).forEach(function(label){
689 if(
690 label.getAttribute(
691 "data-sn-three-line"
692 )==="1"
693 ){
694 return;
695 }
696
697 var number=
698 label.querySelector(
699 ":scope > .arsn-area-number"
700 );
701
702 var action=
703 label.querySelector(
704 ":scope > .arsn-area-action"
705 );
706
707 if(
708 !number||
709 !action
710 ){
711 return;
712 }
713
714 var clone=
715 label.cloneNode(true);
716
717 var cloneNumber=
718 clone.querySelector(
719 ":scope > .arsn-area-number"
720 );
721
722 var cloneAction=
723 clone.querySelector(
724 ":scope > .arsn-area-action"
725 );
726
727 if(cloneNumber){
728 cloneNumber.remove();
729 }
730
731 if(cloneAction){
732 cloneAction.remove();
733 }
734
735 var titleText=
736 compactText(
737 clone.textContent
738 );
739
740 if(!titleText){
741 return;
742 }
743
744 var numberNode=
745 number.cloneNode(true);
746
747 var actionNode=
748 action.cloneNode(true);
749
750 var titleNode=
751 document.createElement(
752 "span"
753 );
754
755 titleNode.className=
756 "sn-area-label-title";
757
758 titleNode.textContent=
759 titleText;
760
761 while(label.firstChild){
762 label.removeChild(
763 label.firstChild
764 );
765 }
766
767 label.appendChild(
768 numberNode
769 );
770
771 label.appendChild(
772 titleNode
773 );
774
775 label.appendChild(
776 actionNode
777 );
778
779 label.setAttribute(
780 "data-sn-three-line",
781 "1"
782 );
783
784 var head=
785 label.closest(
786 ".arsn-area-head"
787 );
788
789 if(head){
790 head.style.setProperty(
791 "width",
792 "100%",
793 "important"
794 );
795
796 head.style.setProperty(
797 "max-width",
798 "100%",
799 "important"
800 );
801
802 head.style.setProperty(
803 "box-sizing",
804 "border-box",
805 "important"
806 );
807 }
808 });
809 }
810
811 /* =======================================================
Veronika Kocher 4.11 812 PLACEHOLDER BADGE
813 ======================================================= */
Veronika Kocher 4.10 814
Veronika Kocher 4.11 815 function applyPlaceholderBadge(){
816 if(!PLACEHOLDER)return;
Veronika Kocher 4.10 817
818 if(
Veronika Kocher 4.11 819 document.querySelector(
820 ".sn-coming-soon-badge"
821 )
Veronika Kocher 4.10 822 ){
Veronika Kocher 4.11 823 return;
Veronika Kocher 4.10 824 }
825
Veronika Kocher 4.11 826 var title=
827 document.querySelector(
828 "#document-title"
829 )||
830 document.querySelector(
831 "h1"
832 );
Veronika Kocher 4.10 833
Veronika Kocher 4.11 834 if(!title)return;
Veronika Kocher 4.10 835
Veronika Kocher 4.11 836 var badge=
837 document.createElement(
838 "span"
839 );
840
841 badge.className=
842 "sn-coming-soon-badge";
843
844 badge.textContent=
845 PLACEHOLDER_LABEL;
846
847 badge.setAttribute(
848 "aria-label",
849 PLACEHOLDER_LABEL
Veronika Kocher 4.10 850 );
851
Veronika Kocher 4.11 852 title.appendChild(
853 badge
854 );
855 }
Veronika Kocher 4.10 856
Veronika Kocher 4.11 857 /* =======================================================
858 DETAIL PAGE OWN-ACCENT PROPAGATION
859 ======================================================= */
Veronika Kocher 4.10 860
Veronika Kocher 4.11 861 function parseRGB(value){
862 var match=String(value||"").match(
863 /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i
Veronika Kocher 4.10 864 );
Veronika Kocher 4.11 865
866 if(!match)return null;
867
868 return [
869 Number(match[1]),
870 Number(match[2]),
871 Number(match[3])
872 ];
Veronika Kocher 4.10 873 }
874
Veronika Kocher 4.11 875 function distance(a,b){
876 return Math.sqrt(
877 Math.pow(a[0]-b[0],2)+
878 Math.pow(a[1]-b[1],2)+
879 Math.pow(a[2]-b[2],2)
880 );
881 }
Veronika Kocher 4.8 882
Veronika Kocher 4.11 883 function paletteMatch(cssColor){
884 var rgb=parseRGB(cssColor);
Veronika Kocher 4.9 885
Veronika Kocher 4.11 886 if(!rgb)return null;
Veronika Kocher 4.9 887
Veronika Kocher 4.11 888 var palette=[
889 {hex:"#21b6d7",rgb:[33,182,215]},
890 {hex:"#e94b13",rgb:[233,75,19]},
891 {hex:"#f0aa00",rgb:[240,170,0]},
892 {hex:"#38b76a",rgb:[56,183,106]}
893 ];
Veronika Kocher 4.8 894
Veronika Kocher 4.9 895 var best=null;
Veronika Kocher 4.11 896 var bestDistance=Infinity;
Veronika Kocher 4.8 897
Veronika Kocher 4.11 898 palette.forEach(function(item){
899 var d=distance(rgb,item.rgb);
Veronika Kocher 4.8 900
Veronika Kocher 4.11 901 if(d<bestDistance){
902 best=item;
903 bestDistance=d;
904 }
905 });
Veronika Kocher 4.9 906
Veronika Kocher 4.11 907 return bestDistance<=30
908 ?best
909 :null;
910 }
Veronika Kocher 4.8 911
Veronika Kocher 4.11 912 function propagateDetailAccents(){
913 if(PAGE_KIND!=="detail")return;
914
915 Array.from(
916 root.querySelectorAll(
917 ".arsn-call,.dmp-call,.ido-call,.pp-call,"+
918 ".arsn-source,.dmp-source,.ido-source,.pp-source"
919 )
920 ).forEach(function(el){
921 if(!visible(el))return;
922
923 var style=getComputedStyle(el);
924
Veronika Kocher 4.9 925 if(
Veronika Kocher 4.11 926 num(style.borderTopWidth)>=2
Veronika Kocher 4.9 927 ){
Veronika Kocher 4.11 928 var match=
929 paletteMatch(
930 style.borderTopColor
Veronika Kocher 4.9 931 );
932
Veronika Kocher 4.11 933 if(match){
934 el.style.setProperty(
935 "border-left",
936 "4px solid "+match.hex,
937 "important"
Veronika Kocher 4.9 938 );
Veronika Kocher 4.8 939 }
940 }
Veronika Kocher 4.11 941 });
Veronika Kocher 4.8 942
Veronika Kocher 4.11 943 // Warning families: explicit safety override.
944 Array.from(
945 root.querySelectorAll(
946 ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+
947 ".warn,.warning,.warningmessage,.errormessage"
948 )
949 ).forEach(function(el){
950 if(!visible(el))return;
Veronika Kocher 4.8 951
Veronika Kocher 4.11 952 el.style.setProperty(
953 "border-left",
954 "4px solid #e94b13",
955 "important"
956 );
957 });
Veronika Kocher 4.8 958
Veronika Kocher 4.11 959 // Info families: explicit orientation override.
960 Array.from(
961 root.querySelectorAll(
962 ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage"
963 )
964 ).forEach(function(el){
965 if(!visible(el))return;
Veronika Kocher 4.9 966
Veronika Kocher 4.11 967 el.style.setProperty(
968 "border-left",
969 "4px solid #21b6d7",
970 "important"
971 );
972 });
973 }
Veronika Kocher 4.9 974
Veronika Kocher 4.11 975 /* =======================================================
976 OVERVIEW SEMANTIC THEME PALETTE
977 ======================================================= */
Veronika Kocher 4.9 978
Veronika Kocher 4.11 979 function smallestThemeHeaders(){
980 return Array.from(
981 root.querySelectorAll(
982 "div,span,p,strong,h3,h4,h5,h6"
983 )
984 ).filter(function(el){
985 if(!visible(el))return false;
986 if(!themeFor(el.textContent))return false;
Veronika Kocher 4.9 987
Veronika Kocher 4.11 988 return !Array.from(
989 el.children||[]
990 ).some(function(child){
991 return !!themeFor(
992 child.textContent
993 );
Veronika Kocher 4.9 994 });
Veronika Kocher 4.11 995 });
Veronika Kocher 4.8 996 }
997
Veronika Kocher 4.11 998 function findOverviewCard(header){
999 var node=header.parentElement;
1000 var candidates=[];
Veronika Kocher 4.9 1001
Veronika Kocher 4.11 1002 while(node&&node!==root){
1003 var rect=node.getBoundingClientRect();
1004 var style=getComputedStyle(node);
Veronika Kocher 4.9 1005
Veronika Kocher 4.11 1006 var border=
1007 num(style.borderTopWidth)+
1008 num(style.borderRightWidth)+
1009 num(style.borderBottomWidth)+
1010 num(style.borderLeftWidth);
Veronika Kocher 4.9 1011
Veronika Kocher 4.11 1012 if(
1013 rect.width>=220&&
1014 rect.width<=800&&
1015 rect.height>=120&&
1016 border>=1
1017 ){
1018 candidates.push(node);
1019 }
Veronika Kocher 4.9 1020
Veronika Kocher 4.11 1021 node=node.parentElement;
1022 }
Veronika Kocher 4.9 1023
Veronika Kocher 4.11 1024 if(!candidates.length)return null;
Veronika Kocher 4.9 1025
Veronika Kocher 4.11 1026 candidates.sort(function(a,b){
1027 return (
1028 b.getBoundingClientRect().height-
1029 a.getBoundingClientRect().height
Veronika Kocher 4.10 1030 );
Veronika Kocher 4.11 1031 });
Veronika Kocher 4.9 1032
Veronika Kocher 4.11 1033 return candidates[0];
Veronika Kocher 4.9 1034 }
1035
Veronika Kocher 4.11 1036 function rowCandidates(link,card){
1037 var result=[];
Veronika Kocher 4.10 1038 var cardRect=
1039 card.getBoundingClientRect();
Veronika Kocher 4.9 1040
Veronika Kocher 4.11 1041 var node=link;
Veronika Kocher 4.9 1042
Veronika Kocher 4.11 1043 while(node&&node!==card){
1044 if(visible(node)){
1045 var rect=
1046 node.getBoundingClientRect();
Veronika Kocher 4.9 1047
Veronika Kocher 4.11 1048 if(
1049 rect.height<=105&&
1050 rect.width>=
1051 cardRect.width*.50&&
1052 rect.width<=
1053 cardRect.width*1.03
1054 ){
1055 result.push(node);
1056 }
1057 }
Veronika Kocher 4.9 1058
Veronika Kocher 4.11 1059 node=node.parentElement;
1060 }
1061
1062 return result;
1063 }
1064
1065 function chooseOuterRow(
1066 candidates,
1067 link
1068 ){
1069 if(!candidates.length){
1070 return link;
1071 }
1072
1073 var bordered=
1074 candidates.filter(function(el){
Veronika Kocher 4.10 1075 return (
Veronika Kocher 4.11 1076 num(
1077 getComputedStyle(el)
1078 .borderLeftWidth
1079 )>=1
Veronika Kocher 4.10 1080 );
1081 });
Veronika Kocher 4.9 1082
Veronika Kocher 4.11 1083 var pool=
1084 bordered.length
1085 ?bordered
1086 :candidates;
Veronika Kocher 4.9 1087
Veronika Kocher 4.11 1088 pool.sort(function(a,b){
1089 var ar=
1090 a.getBoundingClientRect();
Veronika Kocher 4.9 1091
Veronika Kocher 4.11 1092 var br=
1093 b.getBoundingClientRect();
Veronika Kocher 4.9 1094
Veronika Kocher 4.11 1095 return (
1096 ar.left-br.left||
1097 br.width-ar.width
1098 );
1099 });
Veronika Kocher 4.9 1100
Veronika Kocher 4.11 1101 return pool[0]||link;
1102 }
Veronika Kocher 4.9 1103
Veronika Kocher 4.11 1104 function applyOverviewPalette(){
1105 if(PAGE_KIND!=="overview"){
1106 return [];
Veronika Kocher 4.10 1107 }
Veronika Kocher 4.9 1108
Veronika Kocher 4.11 1109 var headers=
1110 smallestThemeHeaders()
1111 .map(function(el){
1112 return {
1113 el:el,
1114 theme:
1115 themeFor(
1116 el.textContent
1117 ),
1118 card:
1119 findOverviewCard(
1120 el
1121 )
1122 };
Veronika Kocher 4.10 1123 })
Veronika Kocher 4.11 1124 .filter(function(row){
1125 return !!row.card;
1126 });
Veronika Kocher 4.9 1127
Veronika Kocher 4.11 1128 var unique=[];
1129 var seenHeaders=new Set();
Veronika Kocher 4.9 1130
Veronika Kocher 4.11 1131 headers.forEach(function(row){
1132 var key=
1133 row.theme.name+
1134 "|"+
1135 Math.round(
1136 row.card
1137 .getBoundingClientRect()
1138 .left
1139 )+
1140 "|"+
1141 Math.round(
1142 row.el
1143 .getBoundingClientRect()
1144 .top
1145 );
Veronika Kocher 4.9 1146
Veronika Kocher 4.11 1147 if(!seenHeaders.has(key)){
1148 seenHeaders.add(key);
1149 unique.push(row);
1150 }
1151 });
Veronika Kocher 4.9 1152
Veronika Kocher 4.11 1153 unique.forEach(function(row){
1154 var headerRect=
1155 row.el
1156 .getBoundingClientRect();
Veronika Kocher 4.9 1157
Veronika Kocher 4.11 1158 row.el.style.setProperty(
1159 "background",
1160 row.theme.bg,
1161 "important"
Veronika Kocher 4.10 1162 );
1163
Veronika Kocher 4.11 1164 row.el.style.setProperty(
1165 "color",
1166 row.theme.text,
1167 "important"
Veronika Kocher 4.10 1168 );
1169
Veronika Kocher 4.11 1170 row.el.style.setProperty(
1171 "text-align",
1172 "left",
1173 "important"
Veronika Kocher 4.10 1174 );
Veronika Kocher 4.9 1175
Veronika Kocher 4.11 1176 row.el.style.setProperty(
1177 "word-spacing",
1178 "normal",
1179 "important"
1180 );
Veronika Kocher 4.10 1181
Veronika Kocher 4.11 1182 var later=
1183 unique
1184 .filter(function(other){
1185 return (
1186 other.card===row.card&&
1187 other.el
1188 .getBoundingClientRect()
1189 .top>
1190 headerRect.top+2
1191 );
1192 })
1193 .sort(function(a,b){
1194 return (
1195 a.el
1196 .getBoundingClientRect()
1197 .top-
1198 b.el
1199 .getBoundingClientRect()
1200 .top
1201 );
1202 });
Veronika Kocher 4.10 1203
Veronika Kocher 4.11 1204 var stopTop=
1205 later.length
1206 ?later[0].el
1207 .getBoundingClientRect()
1208 .top
1209 :Infinity;
Veronika Kocher 4.10 1210
1211 Array.from(
Veronika Kocher 4.11 1212 row.card.querySelectorAll("a")
1213 ).forEach(function(link){
1214 if(!visible(link))return;
Veronika Kocher 4.10 1215
Veronika Kocher 4.11 1216 var rect=
1217 link.getBoundingClientRect();
Veronika Kocher 4.10 1218
Veronika Kocher 4.11 1219 if(
1220 rect.top<=
1221 headerRect.bottom-2||
1222 rect.top>=
1223 stopTop-2
1224 ){
1225 return;
1226 }
Veronika Kocher 4.10 1227
Veronika Kocher 4.11 1228 var candidates=
1229 rowCandidates(
1230 link,
1231 row.card
1232 );
1233
1234 var target=
1235 chooseOuterRow(
1236 candidates,
1237 link
1238 );
1239
1240 candidates.forEach(function(el){
1241 el.style.setProperty(
1242 "border-left",
1243 "0 solid transparent",
1244 "important"
1245 );
1246 });
1247
1248 target.style.setProperty(
1249 "border-left",
1250 "3px solid "+
1251 row.theme.accent,
1252 "important"
Veronika Kocher 4.10 1253 );
Veronika Kocher 4.11 1254
1255 target.style.setProperty(
1256 "box-sizing",
1257 "border-box",
1258 "important"
Veronika Kocher 4.10 1259 );
Veronika Kocher 4.9 1260 });
Veronika Kocher 4.11 1261 });
Veronika Kocher 4.9 1262
Veronika Kocher 4.11 1263 return unique;
Veronika Kocher 4.10 1264 }
Veronika Kocher 4.9 1265
Veronika Kocher 4.11 1266 /* =======================================================
1267 OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW
1268 ======================================================= */
Veronika Kocher 4.10 1269
Veronika Kocher 4.11 1270 function alignOverviewCards(headers){
1271 if(
1272 PAGE_KIND!=="overview"||
1273 window.innerWidth<=MOBILE_MAX
1274 ){
1275 return;
1276 }
Veronika Kocher 4.10 1277
Veronika Kocher 4.11 1278 var cards=[];
1279 var seen=new Set();
Veronika Kocher 4.10 1280
Veronika Kocher 4.11 1281 headers.forEach(function(row){
1282 if(!seen.has(row.card)){
1283 seen.add(row.card);
1284 cards.push(row.card);
1285 }
1286 });
Veronika Kocher 4.10 1287
Veronika Kocher 4.11 1288 if(cards.length<2){
1289 return;
1290 }
Veronika Kocher 4.10 1291
Veronika Kocher 4.11 1292 // Group cards by actual top position.
1293 var groups=[];
Veronika Kocher 4.10 1294
Veronika Kocher 4.11 1295 cards.forEach(function(card){
1296 var top=
1297 card.getBoundingClientRect().top;
Veronika Kocher 4.10 1298
Veronika Kocher 4.11 1299 var group=null;
Veronika Kocher 4.10 1300
Veronika Kocher 4.11 1301 for(var i=0;i<groups.length;i++){
Veronika Kocher 4.10 1302 if(
Veronika Kocher 4.11 1303 Math.abs(
1304 groups[i].top-top
1305 )<=ROW_TOLERANCE
Veronika Kocher 4.10 1306 ){
Veronika Kocher 4.11 1307 group=groups[i];
1308 break;
Veronika Kocher 4.10 1309 }
Veronika Kocher 4.11 1310 }
Veronika Kocher 4.10 1311
Veronika Kocher 4.11 1312 if(!group){
1313 group={
1314 top:top,
1315 cards:[]
1316 };
1317 groups.push(group);
1318 }
Veronika Kocher 4.10 1319
Veronika Kocher 4.11 1320 group.cards.push(card);
1321 });
Veronika Kocher 4.10 1322
Veronika Kocher 4.11 1323 groups.forEach(function(group){
1324 if(group.cards.length<2){
1325 return;
1326 }
Veronika Kocher 4.10 1327
Veronika Kocher 4.11 1328 var firstHeaders=
1329 group.cards.map(function(card){
1330 var candidates=
1331 headers
1332 .filter(function(row){
1333 return row.card===card;
1334 })
1335 .sort(function(a,b){
1336 return (
1337 a.el
1338 .getBoundingClientRect()
1339 .top-
1340 b.el
1341 .getBoundingClientRect()
1342 .top
1343 );
1344 });
Veronika Kocher 4.10 1345
Veronika Kocher 4.11 1346 return candidates.length
1347 ?candidates[0]
1348 :null;
1349 });
Veronika Kocher 4.10 1350
Veronika Kocher 4.11 1351 if(
1352 !firstHeaders.some(function(row){
1353 return !row;
1354 })
1355 ){
1356 var targetTop=
1357 Math.max.apply(
1358 Math,
1359 firstHeaders.map(function(row){
1360 return (
1361 row.el
1362 .getBoundingClientRect()
1363 .top-
1364 row.card
1365 .getBoundingClientRect()
1366 .top
1367 );
1368 })
1369 );
Veronika Kocher 4.8 1370
Veronika Kocher 4.11 1371 firstHeaders.forEach(function(row){
1372 var relativeTop=
1373 row.el
1374 .getBoundingClientRect()
1375 .top-
1376 row.card
1377 .getBoundingClientRect()
1378 .top;
Veronika Kocher 4.9 1379
Veronika Kocher 4.11 1380 var delta=
1381 targetTop-relativeTop;
Veronika Kocher 4.9 1382
Veronika Kocher 4.11 1383 if(delta>1){
1384 saveStyle(
1385 row.el,
1386 originalMargin,
1387 "margin-top"
1388 );
Veronika Kocher 4.10 1389
Veronika Kocher 4.11 1390 var current=
1391 num(
1392 getComputedStyle(
1393 row.el
1394 ).marginTop
1395 );
Veronika Kocher 4.9 1396
Veronika Kocher 4.11 1397 row.el.style.setProperty(
1398 "margin-top",
1399 (
1400 current+delta
1401 )+"px"
1402 );
Veronika Kocher 4.9 1403
Veronika Kocher 4.11 1404 row.el.setAttribute(
1405 "data-sn-master-first-row",
1406 "1"
1407 );
Veronika Kocher 4.9 1408
Veronika Kocher 4.11 1409 managedMargin.add(
1410 row.el
1411 );
1412 }
1413 });
1414 }
Veronika Kocher 4.9 1415
Veronika Kocher 4.11 1416 var maxHeight=0;
Veronika Kocher 4.9 1417
Veronika Kocher 4.11 1418 group.cards.forEach(function(card){
1419 maxHeight=
1420 Math.max(
1421 maxHeight,
1422 card
1423 .getBoundingClientRect()
1424 .height
1425 );
1426 });
Veronika Kocher 4.9 1427
Veronika Kocher 4.11 1428 maxHeight=
1429 Math.ceil(maxHeight);
Veronika Kocher 4.9 1430
Veronika Kocher 4.11 1431 group.cards.forEach(function(card){
1432 saveStyle(
1433 card,
1434 originalHeight,
1435 "min-height"
1436 );
Veronika Kocher 4.9 1437
Veronika Kocher 4.11 1438 card.style.setProperty(
1439 "min-height",
1440 maxHeight+"px"
Veronika Kocher 4.9 1441 );
1442
Veronika Kocher 4.11 1443 card.setAttribute(
1444 "data-sn-master-equal-height",
1445 "1"
1446 );
Veronika Kocher 4.9 1447
Veronika Kocher 4.11 1448 managedHeight.add(
1449 card
1450 );
1451 });
Veronika Kocher 4.9 1452 });
1453 }
1454
Veronika Kocher 4.11 1455 /* =======================================================
1456 DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY
1457 ======================================================= */
Veronika Kocher 4.9 1458
Veronika Kocher 4.11 1459 function equaliseDetailGrids(){
Veronika Kocher 4.10 1460 if(
Veronika Kocher 4.11 1461 PAGE_KIND!=="detail"||
1462 window.innerWidth<=MOBILE_MAX
Veronika Kocher 4.10 1463 ){
Veronika Kocher 4.11 1464 return;
Veronika Kocher 4.10 1465 }
Veronika Kocher 4.9 1466
Veronika Kocher 4.11 1467 var selectors=[
1468 ".arsn-grid",
1469 ".arsn-grid-2",
1470 ".arsn-grid-3",
1471 ".dmp-grid",
1472 ".ido-grid",
1473 ".pp-grid"
1474 ];
Veronika Kocher 4.9 1475
Veronika Kocher 4.11 1476 selectors.forEach(function(selector){
1477 Array.from(
1478 root.querySelectorAll(selector)
1479 ).forEach(function(grid){
1480 var children=
1481 Array.from(
1482 grid.children||[]
1483 ).filter(visible);
Veronika Kocher 4.9 1484
Veronika Kocher 4.11 1485 if(children.length<2){
1486 return;
1487 }
Veronika Kocher 4.9 1488
Veronika Kocher 4.11 1489 var groups=[];
Veronika Kocher 4.9 1490
Veronika Kocher 4.11 1491 children.forEach(function(child){
1492 var top=
1493 child
1494 .getBoundingClientRect()
1495 .top;
Veronika Kocher 4.9 1496
Veronika Kocher 4.11 1497 var group=null;
Veronika Kocher 4.9 1498
Veronika Kocher 4.11 1499 for(var i=0;i<groups.length;i++){
1500 if(
1501 Math.abs(
1502 groups[i].top-top
1503 )<=ROW_TOLERANCE
1504 ){
1505 group=groups[i];
1506 break;
1507 }
1508 }
Veronika Kocher 4.9 1509
Veronika Kocher 4.11 1510 if(!group){
1511 group={
1512 top:top,
1513 items:[]
1514 };
1515 groups.push(group);
1516 }
Veronika Kocher 4.9 1517
Veronika Kocher 4.11 1518 group.items.push(child);
1519 });
Veronika Kocher 4.9 1520
Veronika Kocher 4.11 1521 groups.forEach(function(group){
1522 if(group.items.length<2){
1523 return;
1524 }
Veronika Kocher 4.8 1525
Veronika Kocher 4.11 1526 var maxHeight=0;
Veronika Kocher 4.10 1527
Veronika Kocher 4.11 1528 group.items.forEach(function(item){
1529 maxHeight=
1530 Math.max(
1531 maxHeight,
1532 item
1533 .getBoundingClientRect()
1534 .height
1535 );
1536 });
Veronika Kocher 4.10 1537
Veronika Kocher 4.11 1538 maxHeight=
1539 Math.ceil(maxHeight);
Veronika Kocher 4.8 1540
Veronika Kocher 4.11 1541 group.items.forEach(function(item){
1542 saveStyle(
1543 item,
1544 originalHeight,
1545 "min-height"
1546 );
Veronika Kocher 4.8 1547
Veronika Kocher 4.11 1548 item.style.setProperty(
1549 "min-height",
1550 maxHeight+"px"
1551 );
Veronika Kocher 4.9 1552
Veronika Kocher 4.11 1553 item.setAttribute(
1554 "data-sn-master-equal-height",
1555 "1"
1556 );
Veronika Kocher 4.8 1557
Veronika Kocher 4.11 1558 managedHeight.add(item);
1559 });
Veronika Kocher 4.8 1560 });
Veronika Kocher 4.11 1561 });
1562 });
1563 }
Veronika Kocher 4.8 1564
Veronika Kocher 4.11 1565 /* =======================================================
1566 RUN / RESPONSIVE SCHEDULING
1567 ======================================================= */
Veronika Kocher 4.8 1568
Veronika Kocher 4.11 1569 function run(){
1570 if(running)return;
Veronika Kocher 4.8 1571
Veronika Kocher 4.11 1572 running=true;
Veronika Kocher 4.10 1573
Veronika Kocher 4.11 1574 try{
1575 resetRuntime();
1576 applyPlaceholderBadge();
1577 propagateDetailAccents();
Veronika Kocher 4.10 1578
Veronika Kocher 4.11 1579 var headers=
1580 applyOverviewPalette();
Veronika Kocher 4.10 1581
Veronika Kocher 4.12 1582 makeThreeLineAreaLabels();
1583 makeFilledRedOrangeCTAsBorderless();
1584
Veronika Kocher 4.11 1585 if(
1586 window.innerWidth>
1587 MOBILE_MAX
1588 ){
1589 alignOverviewCards(
1590 headers
1591 );
Veronika Kocher 4.8 1592
Veronika Kocher 4.11 1593 equaliseDetailGrids();
1594 }
Veronika Kocher 4.10 1595 }finally{
Veronika Kocher 4.11 1596 running=false;
Veronika Kocher 4.10 1597 }
Veronika Kocher 4.8 1598 }
1599
Veronika Kocher 4.11 1600 function onResize(){
Veronika Kocher 4.10 1601 if(resizeTimer){
1602 clearTimeout(
1603 resizeTimer
1604 );
1605 }
Veronika Kocher 4.9 1606
Veronika Kocher 4.10 1607 resizeTimer=
1608 setTimeout(
1609 function(){
1610 resizeTimer=0;
Veronika Kocher 4.11 1611 run();
Veronika Kocher 4.10 1612 },
1613 RESIZE_DEBOUNCE
1614 );
Veronika Kocher 4.8 1615 }
1616
Veronika Kocher 4.11 1617 async function waitForReady(){
1618 if(
1619 document.readyState!=="complete"
1620 ){
1621 await new Promise(function(resolve){
1622 window.addEventListener(
1623 "load",
1624 resolve,
1625 {once:true}
1626 );
1627 });
1628 }
1629
1630 if(
1631 document.fonts&&
1632 document.fonts.ready
1633 ){
1634 try{
1635 await document.fonts.ready;
1636 }catch(error){}
1637 }
1638
Veronika Kocher 4.10 1639 var images=
1640 Array.from(
1641 root.querySelectorAll("img")
1642 );
Veronika Kocher 4.8 1643
Veronika Kocher 4.11 1644 await Promise.all(
Veronika Kocher 4.10 1645 images.map(function(img){
1646 if(img.complete){
1647 return Promise.resolve();
1648 }
Veronika Kocher 4.8 1649
Veronika Kocher 4.10 1650 return new Promise(function(resolve){
1651 var done=function(){
1652 resolve();
1653 };
1654
1655 img.addEventListener(
1656 "load",
1657 done,
1658 {once:true}
1659 );
1660
1661 img.addEventListener(
1662 "error",
1663 done,
1664 {once:true}
1665 );
1666 });
1667 })
1668 );
1669
Veronika Kocher 4.11 1670 run();
Veronika Kocher 4.8 1671 }
1672
Veronika Kocher 4.11 1673 window.addEventListener(
Veronika Kocher 4.10 1674 "resize",
Veronika Kocher 4.11 1675 onResize,
Veronika Kocher 4.10 1676 {passive:true}
1677 );
1678
Veronika Kocher 4.11 1679 waitForReady();
Veronika Kocher 4.8 1680 })();
1681 </script>
Veronika Kocher 4.10 1682
Veronika Kocher 4.11 1683 <!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END -->
1684 {{/html}}
1685