Wiki source code of Plan Your Data Management

Version 4.14 by Veronika Kocher on Friday, 04 Sep 2026 14:23

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.14 250 <!-- ARSN_TRAINING_WORKSHOPS_INCLUDE_V1_START -->
251 {{include reference="Service Navigator.Art & Research Services Navigator.Code.TrainingWorkshopsBlock" author="target" /}}
252 <!-- ARSN_TRAINING_WORKSHOPS_INCLUDE_V1_END -->
253
254 <!-- ARSN_PRACTICAL_RESOURCES_FALLBACK_V1_START -->
255 {{include reference="Service Navigator.Art & Research Services Navigator.Code.PracticalResourcesFallbackBlock" author="target" /}}
256 <!-- ARSN_PRACTICAL_RESOURCES_FALLBACK_V1_END -->
257
Veronika Kocher 4.1 258 <!-- ARSN_SEARCH_TERMS_START -->
Veronika Kocher 4.6 259 <details style="margin-top:24px;padding-top:10px;border-top:1px solid #e3ded6">
260 <summary style="cursor:pointer;color:#6a655e;font-size:13px">Search terms &amp; related topics</summary>
261 <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 262 </details>
263 <!-- ARSN_SEARCH_TERMS_END -->
Veronika Kocher 4.6 264
265 </div>
Veronika Kocher 4.1 266 {{/html}}
Veronika Kocher 4.6 267
Veronika Kocher 4.11 268 {{html clean="false"}}
269 <!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START -->
Veronika Kocher 4.10 270
Veronika Kocher 4.11 271 <style data-sn-service-navigator-master="1">
272 /* =========================================================
273 MASTER TYPOGRAPHY
274 ========================================================= */
Veronika Kocher 4.10 275 #xwikicontent h1,
276 #xwikicontent h2,
277 #xwikicontent h3,
278 #xwikicontent h4,
279 #xwikicontent h5,
280 #xwikicontent h6,
281 #xwikicontent .box-title,
282 #xwikicontent [role="heading"],
283 #xwikicontent h1 a,
284 #xwikicontent h2 a,
285 #xwikicontent h3 a,
286 #xwikicontent h4 a,
287 #xwikicontent h5 a,
288 #xwikicontent h6 a,
289 #xwikicontent .box-title a,
290 #xwikicontent [role="heading"] a{
291 text-align:left!important;
292 text-justify:auto!important;
293 word-spacing:normal!important;
294 }
295
Veronika Kocher 4.11 296 /* =========================================================
297 COMING SOON / IN VORBEREITUNG
298 ========================================================= */
299 .sn-coming-soon-badge{
300 display:inline-block;
301 vertical-align:middle;
302 margin-left:10px;
303 padding:4px 8px;
304 border-radius:14px;
305 border:1px solid #efd9cc;
306 background:#fff4ee;
307 color:#8a4d36;
308 font-size:11px;
309 font-weight:700;
310 letter-spacing:.055em;
311 line-height:1.2;
312 white-space:nowrap;
313 }
314
315 /* =========================================================
316 NATIVE / DETAIL CALLOUT GEOMETRY
317 Preserve existing backgrounds.
318 ========================================================= */
319 #xwikicontent .arsn-info,
320 #xwikicontent .dmp-info,
321 #xwikicontent .ido-info,
322 #xwikicontent .pp-info,
323 #xwikicontent .infomessage{
Veronika Kocher 4.10 324 box-sizing:border-box!important;
Veronika Kocher 4.11 325 border-left:4px solid #21b6d7!important;
326 border-radius:8px;
Veronika Kocher 4.10 327 text-align:left!important;
328 word-spacing:normal!important;
329 }
330
Veronika Kocher 4.11 331 #xwikicontent .arsn-warn,
332 #xwikicontent .dmp-warn,
333 #xwikicontent .ido-warn,
334 #xwikicontent .pp-warn,
335 #xwikicontent .warn,
336 #xwikicontent .warning,
337 #xwikicontent .warningmessage,
Veronika Kocher 4.10 338 #xwikicontent .errormessage{
Veronika Kocher 4.11 339 box-sizing:border-box!important;
340 border-left:4px solid #e94b13!important;
341 border-radius:8px;
342 text-align:left!important;
343 word-spacing:normal!important;
Veronika Kocher 4.10 344 }
345
Veronika Kocher 4.11 346 [data-sn-master-equal-height],
347 [data-sn-master-first-row]{
Veronika Kocher 4.9 348 box-sizing:border-box;
Veronika Kocher 4.8 349 }
Veronika Kocher 4.12 350
351 /* =========================================================
352 FULL-WIDTH THREE-LINE NUMBER / TITLE / SUBTITLE BLOCKS
353 ========================================================= */
354 #xwikicontent .arsn-area-label[data-sn-three-line="1"]{
355 display:grid!important;
356 grid-template-columns:minmax(0,1fr)!important;
357 grid-auto-rows:auto!important;
358 width:100%!important;
359 max-width:none!important;
360 box-sizing:border-box!important;
361 justify-items:start!important;
362 align-items:start!important;
363 gap:2px!important;
364 text-align:left!important;
365 text-align-last:left!important;
366 text-justify:auto!important;
367 word-spacing:normal!important;
368 white-space:normal!important;
369 }
370 #xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-number,
371 #xwikicontent .arsn-area-label[data-sn-three-line="1"] > .sn-area-label-title,
372 #xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-action{
373 display:block!important;
374 width:100%!important;
375 margin:0!important;
376 text-align:left!important;
377 text-align-last:left!important;
378 text-justify:auto!important;
379 word-spacing:normal!important;
380 white-space:normal!important;
381 }
Veronika Kocher 4.8 382 </style>
Veronika Kocher 4.10 383
Veronika Kocher 4.11 384 <script data-sn-service-navigator-master="1">
Veronika Kocher 4.8 385 (function(){
386 "use strict";
387
Veronika Kocher 4.11 388 var PAGE_KIND="detail";
389 var PLACEHOLDER=false;
390 var PLACEHOLDER_LABEL="COMING SOON";
391
Veronika Kocher 4.8 392 var MOBILE_MAX=767;
Veronika Kocher 4.9 393 var ROW_TOLERANCE=6;
Veronika Kocher 4.10 394 var RESIZE_DEBOUNCE=220;
Veronika Kocher 4.8 395
396 var root=
397 document.getElementById("xwikicontent")||
398 document.querySelector(".xwiki-rendering-content")||
399 document.querySelector("main")||
400 document.body;
401
402 if(!root)return;
403
Veronika Kocher 4.11 404 var managedHeight=new Set();
405 var managedMargin=new Set();
406 var originalHeight=new WeakMap();
407 var originalMargin=new WeakMap();
Veronika Kocher 4.10 408
409 var resizeTimer=0;
Veronika Kocher 4.11 410 var running=false;
Veronika Kocher 4.10 411
Veronika Kocher 4.11 412 var THEMES=[
413 {
414 name:"BLUE",
415 accent:"#21b6d7",
416 bg:"#eaf7fb",
417 text:"#315d68",
418 labels:[
419 "HIER STARTEN",
420 "ENTSCHEIDEN",
421 "ÜBERPRÜFEN & ANPASSEN",
422 "START HERE",
423 "DECIDE",
424 "REVIEW & ADAPT"
425 ]
426 },
427 {
428 name:"RED",
429 accent:"#e94b13",
430 bg:"#fff1ec",
431 text:"#8a4d36",
432 labels:[
433 "PLANEN & ORGANISIEREN",
434 "ORGANISIEREN & DOKUMENTIEREN",
435 "PUBLIZIEREN & PRÄSENTIEREN",
436 "PLAN & ORGANISE",
437 "PLAN & ORGANIZE",
438 "ORGANISE & DOCUMENT",
439 "ORGANIZE & DOCUMENT",
440 "PUBLISH & PRESENT"
441 ]
442 },
443 {
444 name:"YELLOW",
445 accent:"#f0aa00",
446 bg:"#fff8e7",
447 text:"#785b17",
448 labels:[
449 "SCHÜTZEN & KLÄREN",
450 "STANDARDISIEREN & IDENTIFIZIEREN",
451 "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN",
452 "PROTECT & CLARIFY",
453 "STANDARDISE & IDENTIFY",
454 "STANDARDIZE & IDENTIFY",
455 "OPEN, REUSE & MAKE FINDABLE"
456 ]
457 },
458 {
459 name:"GREEN",
460 accent:"#38b76a",
461 bg:"#edf9f1",
462 text:"#3f7451",
463 labels:[
464 "INFRASTRUKTUR EINRICHTEN",
465 "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN",
466 "SPEICHERN & ZUGRIFF STEUERN",
467 "REPOSITORIUM, ERHALTEN & ÜBERGEBEN",
468 "SET UP INFRASTRUCTURE",
469 "SET UP INFRASTRUCTURE & COLLABORATION",
470 "STORE & CONTROL ACCESS",
471 "REPOSITORY, PRESERVE & HAND OVER"
472 ]
Veronika Kocher 4.9 473 }
Veronika Kocher 4.11 474 ];
Veronika Kocher 4.9 475
Veronika Kocher 4.11 476 function num(value){
477 var n=parseFloat(value);
478 return Number.isFinite(n)?n:0;
Veronika Kocher 4.8 479 }
480
Veronika Kocher 4.11 481 function norm(value){
482 return String(value||"")
Veronika Kocher 4.10 483 .replace(/\s+/g," ")
484 .trim()
485 .toUpperCase();
486 }
487
Veronika Kocher 4.11 488 function visible(el){
489 if(!el||el.nodeType!==1)return false;
Veronika Kocher 4.8 490
Veronika Kocher 4.11 491 var style=getComputedStyle(el);
492 var rect=el.getBoundingClientRect();
Veronika Kocher 4.10 493
494 return (
Veronika Kocher 4.11 495 style.display!=="none"&&
496 style.visibility!=="hidden"&&
497 rect.width>20&&
498 rect.height>4
Veronika Kocher 4.10 499 );
Veronika Kocher 4.8 500 }
501
Veronika Kocher 4.11 502 function saveStyle(el,map,property){
Veronika Kocher 4.9 503 if(map.has(el))return;
504
505 map.set(el,{
Veronika Kocher 4.11 506 value:el.style.getPropertyValue(property),
507 priority:el.style.getPropertyPriority(property)
Veronika Kocher 4.9 508 });
509 }
510
Veronika Kocher 4.11 511 function restoreStyle(el,map,property){
Veronika Kocher 4.9 512 var original=map.get(el);
513
514 if(original&&original.value){
515 el.style.setProperty(
516 property,
517 original.value,
518 original.priority||""
519 );
520 }else{
Veronika Kocher 4.11 521 el.style.removeProperty(property);
Veronika Kocher 4.9 522 }
523 }
524
Veronika Kocher 4.10 525 function resetRuntime(){
Veronika Kocher 4.11 526 managedHeight.forEach(function(el){
527 restoreStyle(
Veronika Kocher 4.9 528 el,
Veronika Kocher 4.11 529 originalHeight,
Veronika Kocher 4.9 530 "min-height"
531 );
532 el.removeAttribute(
Veronika Kocher 4.11 533 "data-sn-master-equal-height"
Veronika Kocher 4.9 534 );
535 });
536
Veronika Kocher 4.11 537 managedMargin.forEach(function(el){
538 restoreStyle(
Veronika Kocher 4.9 539 el,
Veronika Kocher 4.11 540 originalMargin,
Veronika Kocher 4.9 541 "margin-top"
542 );
543 el.removeAttribute(
Veronika Kocher 4.11 544 "data-sn-master-first-row"
Veronika Kocher 4.9 545 );
546 });
547
Veronika Kocher 4.11 548 managedHeight.clear();
549 managedMargin.clear();
550 }
Veronika Kocher 4.10 551
Veronika Kocher 4.11 552 function themeFor(text){
553 var value=norm(text);
Veronika Kocher 4.10 554
Veronika Kocher 4.11 555 for(var i=0;i<THEMES.length;i++){
556 for(var j=0;j<THEMES[i].labels.length;j++){
557 var label=THEMES[i].labels[j];
558
559 if(
560 value===label||
561 value.indexOf(label+" ")===0||
562 value.indexOf(label+" -")===0||
563 value.indexOf(label+" ·")===0
564 ){
565 return THEMES[i];
566 }
567 }
568 }
569
570 return null;
Veronika Kocher 4.9 571 }
572
Veronika Kocher 4.11 573 /* =======================================================
Veronika Kocher 4.12 574 BORDERLESS FILLED RED/ORANGE CTA BUTTONS
575 ======================================================= */
576
577 function colourDistance(a,b){
578 return Math.sqrt(
579 Math.pow(a[0]-b[0],2)+
580 Math.pow(a[1]-b[1],2)+
581 Math.pow(a[2]-b[2],2)
582 );
583 }
584
585 function makeFilledRedOrangeCTAsBorderless(){
586 var RED_ORANGE=[233,75,19];
587
588 Array.from(
589 root.querySelectorAll(
590 'a,button,[role="button"],input[type="submit"],input[type="button"]'
591 )
592 ).forEach(function(el){
593 if(!visible(el))return;
594
595 var style=getComputedStyle(el);
596 var rgb=parseRGB(style.backgroundColor);
597
598 if(!rgb)return;
599
600 if(
601 colourDistance(
602 rgb,
603 RED_ORANGE
604 )>55
605 ){
606 return;
607 }
608
609 var rect=el.getBoundingClientRect();
610
611 if(
612 rect.width<80||
613 rect.height<24
614 ){
615 return;
616 }
617
618 el.style.setProperty(
619 "border",
620 "none",
621 "important"
622 );
623
624 el.style.setProperty(
625 "border-left",
626 "none",
627 "important"
628 );
629
630 el.style.setProperty(
631 "border-top",
632 "none",
633 "important"
634 );
635
636 el.style.setProperty(
637 "border-right",
638 "none",
639 "important"
640 );
641
642 el.style.setProperty(
643 "border-bottom",
644 "none",
645 "important"
646 );
647
648 el.style.setProperty(
649 "box-shadow",
650 "none",
651 "important"
652 );
653 });
654 }
655
656 /* =======================================================
657 FULL-WIDTH THREE-LINE AREA LABELS
658 ======================================================= */
659
660 function compactText(value){
661 return String(value||"")
662 .replace(/\s+/g," ")
663 .trim();
664 }
665
666 function makeThreeLineAreaLabels(){
667 Array.from(
668 root.querySelectorAll(
669 ".arsn-area-label"
670 )
671 ).forEach(function(label){
672 if(
673 label.getAttribute(
674 "data-sn-three-line"
675 )==="1"
676 ){
677 return;
678 }
679
680 var number=
681 label.querySelector(
682 ":scope > .arsn-area-number"
683 );
684
685 var action=
686 label.querySelector(
687 ":scope > .arsn-area-action"
688 );
689
690 if(
691 !number||
692 !action
693 ){
694 return;
695 }
696
697 var clone=
698 label.cloneNode(true);
699
700 var cloneNumber=
701 clone.querySelector(
702 ":scope > .arsn-area-number"
703 );
704
705 var cloneAction=
706 clone.querySelector(
707 ":scope > .arsn-area-action"
708 );
709
710 if(cloneNumber){
711 cloneNumber.remove();
712 }
713
714 if(cloneAction){
715 cloneAction.remove();
716 }
717
718 var titleText=
719 compactText(
720 clone.textContent
721 );
722
723 if(!titleText){
724 return;
725 }
726
727 var numberNode=
728 number.cloneNode(true);
729
730 var actionNode=
731 action.cloneNode(true);
732
733 var titleNode=
734 document.createElement(
735 "span"
736 );
737
738 titleNode.className=
739 "sn-area-label-title";
740
741 titleNode.textContent=
742 titleText;
743
744 while(label.firstChild){
745 label.removeChild(
746 label.firstChild
747 );
748 }
749
750 label.appendChild(
751 numberNode
752 );
753
754 label.appendChild(
755 titleNode
756 );
757
758 label.appendChild(
759 actionNode
760 );
761
762 label.setAttribute(
763 "data-sn-three-line",
764 "1"
765 );
766
767 var head=
768 label.closest(
769 ".arsn-area-head"
770 );
771
772 if(head){
773 head.style.setProperty(
774 "width",
775 "100%",
776 "important"
777 );
778
779 head.style.setProperty(
780 "max-width",
781 "100%",
782 "important"
783 );
784
785 head.style.setProperty(
786 "box-sizing",
787 "border-box",
788 "important"
789 );
790 }
791 });
792 }
793
794 /* =======================================================
Veronika Kocher 4.11 795 PLACEHOLDER BADGE
796 ======================================================= */
Veronika Kocher 4.10 797
Veronika Kocher 4.11 798 function applyPlaceholderBadge(){
799 if(!PLACEHOLDER)return;
Veronika Kocher 4.10 800
801 if(
Veronika Kocher 4.11 802 document.querySelector(
803 ".sn-coming-soon-badge"
804 )
Veronika Kocher 4.10 805 ){
Veronika Kocher 4.11 806 return;
Veronika Kocher 4.10 807 }
808
Veronika Kocher 4.11 809 var title=
810 document.querySelector(
811 "#document-title"
812 )||
813 document.querySelector(
814 "h1"
815 );
Veronika Kocher 4.10 816
Veronika Kocher 4.11 817 if(!title)return;
Veronika Kocher 4.10 818
Veronika Kocher 4.11 819 var badge=
820 document.createElement(
821 "span"
822 );
823
824 badge.className=
825 "sn-coming-soon-badge";
826
827 badge.textContent=
828 PLACEHOLDER_LABEL;
829
830 badge.setAttribute(
831 "aria-label",
832 PLACEHOLDER_LABEL
Veronika Kocher 4.10 833 );
834
Veronika Kocher 4.11 835 title.appendChild(
836 badge
837 );
838 }
Veronika Kocher 4.10 839
Veronika Kocher 4.11 840 /* =======================================================
841 DETAIL PAGE OWN-ACCENT PROPAGATION
842 ======================================================= */
Veronika Kocher 4.10 843
Veronika Kocher 4.11 844 function parseRGB(value){
845 var match=String(value||"").match(
846 /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i
Veronika Kocher 4.10 847 );
Veronika Kocher 4.11 848
849 if(!match)return null;
850
851 return [
852 Number(match[1]),
853 Number(match[2]),
854 Number(match[3])
855 ];
Veronika Kocher 4.10 856 }
857
Veronika Kocher 4.11 858 function distance(a,b){
859 return Math.sqrt(
860 Math.pow(a[0]-b[0],2)+
861 Math.pow(a[1]-b[1],2)+
862 Math.pow(a[2]-b[2],2)
863 );
864 }
Veronika Kocher 4.8 865
Veronika Kocher 4.11 866 function paletteMatch(cssColor){
867 var rgb=parseRGB(cssColor);
Veronika Kocher 4.9 868
Veronika Kocher 4.11 869 if(!rgb)return null;
Veronika Kocher 4.9 870
Veronika Kocher 4.11 871 var palette=[
872 {hex:"#21b6d7",rgb:[33,182,215]},
873 {hex:"#e94b13",rgb:[233,75,19]},
874 {hex:"#f0aa00",rgb:[240,170,0]},
875 {hex:"#38b76a",rgb:[56,183,106]}
876 ];
Veronika Kocher 4.8 877
Veronika Kocher 4.9 878 var best=null;
Veronika Kocher 4.11 879 var bestDistance=Infinity;
Veronika Kocher 4.8 880
Veronika Kocher 4.11 881 palette.forEach(function(item){
882 var d=distance(rgb,item.rgb);
Veronika Kocher 4.8 883
Veronika Kocher 4.11 884 if(d<bestDistance){
885 best=item;
886 bestDistance=d;
887 }
888 });
Veronika Kocher 4.9 889
Veronika Kocher 4.11 890 return bestDistance<=30
891 ?best
892 :null;
893 }
Veronika Kocher 4.8 894
Veronika Kocher 4.11 895 function propagateDetailAccents(){
896 if(PAGE_KIND!=="detail")return;
897
898 Array.from(
899 root.querySelectorAll(
900 ".arsn-call,.dmp-call,.ido-call,.pp-call,"+
901 ".arsn-source,.dmp-source,.ido-source,.pp-source"
902 )
903 ).forEach(function(el){
904 if(!visible(el))return;
905
906 var style=getComputedStyle(el);
907
Veronika Kocher 4.9 908 if(
Veronika Kocher 4.11 909 num(style.borderTopWidth)>=2
Veronika Kocher 4.9 910 ){
Veronika Kocher 4.11 911 var match=
912 paletteMatch(
913 style.borderTopColor
Veronika Kocher 4.9 914 );
915
Veronika Kocher 4.11 916 if(match){
917 el.style.setProperty(
918 "border-left",
919 "4px solid "+match.hex,
920 "important"
Veronika Kocher 4.9 921 );
Veronika Kocher 4.8 922 }
923 }
Veronika Kocher 4.11 924 });
Veronika Kocher 4.8 925
Veronika Kocher 4.11 926 // Warning families: explicit safety override.
927 Array.from(
928 root.querySelectorAll(
929 ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+
930 ".warn,.warning,.warningmessage,.errormessage"
931 )
932 ).forEach(function(el){
933 if(!visible(el))return;
Veronika Kocher 4.8 934
Veronika Kocher 4.11 935 el.style.setProperty(
936 "border-left",
937 "4px solid #e94b13",
938 "important"
939 );
940 });
Veronika Kocher 4.8 941
Veronika Kocher 4.11 942 // Info families: explicit orientation override.
943 Array.from(
944 root.querySelectorAll(
945 ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage"
946 )
947 ).forEach(function(el){
948 if(!visible(el))return;
Veronika Kocher 4.9 949
Veronika Kocher 4.11 950 el.style.setProperty(
951 "border-left",
952 "4px solid #21b6d7",
953 "important"
954 );
955 });
956 }
Veronika Kocher 4.9 957
Veronika Kocher 4.11 958 /* =======================================================
959 OVERVIEW SEMANTIC THEME PALETTE
960 ======================================================= */
Veronika Kocher 4.9 961
Veronika Kocher 4.11 962 function smallestThemeHeaders(){
963 return Array.from(
964 root.querySelectorAll(
965 "div,span,p,strong,h3,h4,h5,h6"
966 )
967 ).filter(function(el){
968 if(!visible(el))return false;
969 if(!themeFor(el.textContent))return false;
Veronika Kocher 4.9 970
Veronika Kocher 4.11 971 return !Array.from(
972 el.children||[]
973 ).some(function(child){
974 return !!themeFor(
975 child.textContent
976 );
Veronika Kocher 4.9 977 });
Veronika Kocher 4.11 978 });
Veronika Kocher 4.8 979 }
980
Veronika Kocher 4.11 981 function findOverviewCard(header){
982 var node=header.parentElement;
983 var candidates=[];
Veronika Kocher 4.9 984
Veronika Kocher 4.11 985 while(node&&node!==root){
986 var rect=node.getBoundingClientRect();
987 var style=getComputedStyle(node);
Veronika Kocher 4.9 988
Veronika Kocher 4.11 989 var border=
990 num(style.borderTopWidth)+
991 num(style.borderRightWidth)+
992 num(style.borderBottomWidth)+
993 num(style.borderLeftWidth);
Veronika Kocher 4.9 994
Veronika Kocher 4.11 995 if(
996 rect.width>=220&&
997 rect.width<=800&&
998 rect.height>=120&&
999 border>=1
1000 ){
1001 candidates.push(node);
1002 }
Veronika Kocher 4.9 1003
Veronika Kocher 4.11 1004 node=node.parentElement;
1005 }
Veronika Kocher 4.9 1006
Veronika Kocher 4.11 1007 if(!candidates.length)return null;
Veronika Kocher 4.9 1008
Veronika Kocher 4.11 1009 candidates.sort(function(a,b){
1010 return (
1011 b.getBoundingClientRect().height-
1012 a.getBoundingClientRect().height
Veronika Kocher 4.10 1013 );
Veronika Kocher 4.11 1014 });
Veronika Kocher 4.9 1015
Veronika Kocher 4.11 1016 return candidates[0];
Veronika Kocher 4.9 1017 }
1018
Veronika Kocher 4.11 1019 function rowCandidates(link,card){
1020 var result=[];
Veronika Kocher 4.10 1021 var cardRect=
1022 card.getBoundingClientRect();
Veronika Kocher 4.9 1023
Veronika Kocher 4.11 1024 var node=link;
Veronika Kocher 4.9 1025
Veronika Kocher 4.11 1026 while(node&&node!==card){
1027 if(visible(node)){
1028 var rect=
1029 node.getBoundingClientRect();
Veronika Kocher 4.9 1030
Veronika Kocher 4.11 1031 if(
1032 rect.height<=105&&
1033 rect.width>=
1034 cardRect.width*.50&&
1035 rect.width<=
1036 cardRect.width*1.03
1037 ){
1038 result.push(node);
1039 }
1040 }
Veronika Kocher 4.9 1041
Veronika Kocher 4.11 1042 node=node.parentElement;
1043 }
1044
1045 return result;
1046 }
1047
1048 function chooseOuterRow(
1049 candidates,
1050 link
1051 ){
1052 if(!candidates.length){
1053 return link;
1054 }
1055
1056 var bordered=
1057 candidates.filter(function(el){
Veronika Kocher 4.10 1058 return (
Veronika Kocher 4.11 1059 num(
1060 getComputedStyle(el)
1061 .borderLeftWidth
1062 )>=1
Veronika Kocher 4.10 1063 );
1064 });
Veronika Kocher 4.9 1065
Veronika Kocher 4.11 1066 var pool=
1067 bordered.length
1068 ?bordered
1069 :candidates;
Veronika Kocher 4.9 1070
Veronika Kocher 4.11 1071 pool.sort(function(a,b){
1072 var ar=
1073 a.getBoundingClientRect();
Veronika Kocher 4.9 1074
Veronika Kocher 4.11 1075 var br=
1076 b.getBoundingClientRect();
Veronika Kocher 4.9 1077
Veronika Kocher 4.11 1078 return (
1079 ar.left-br.left||
1080 br.width-ar.width
1081 );
1082 });
Veronika Kocher 4.9 1083
Veronika Kocher 4.11 1084 return pool[0]||link;
1085 }
Veronika Kocher 4.9 1086
Veronika Kocher 4.11 1087 function applyOverviewPalette(){
1088 if(PAGE_KIND!=="overview"){
1089 return [];
Veronika Kocher 4.10 1090 }
Veronika Kocher 4.9 1091
Veronika Kocher 4.11 1092 var headers=
1093 smallestThemeHeaders()
1094 .map(function(el){
1095 return {
1096 el:el,
1097 theme:
1098 themeFor(
1099 el.textContent
1100 ),
1101 card:
1102 findOverviewCard(
1103 el
1104 )
1105 };
Veronika Kocher 4.10 1106 })
Veronika Kocher 4.11 1107 .filter(function(row){
1108 return !!row.card;
1109 });
Veronika Kocher 4.9 1110
Veronika Kocher 4.11 1111 var unique=[];
1112 var seenHeaders=new Set();
Veronika Kocher 4.9 1113
Veronika Kocher 4.11 1114 headers.forEach(function(row){
1115 var key=
1116 row.theme.name+
1117 "|"+
1118 Math.round(
1119 row.card
1120 .getBoundingClientRect()
1121 .left
1122 )+
1123 "|"+
1124 Math.round(
1125 row.el
1126 .getBoundingClientRect()
1127 .top
1128 );
Veronika Kocher 4.9 1129
Veronika Kocher 4.11 1130 if(!seenHeaders.has(key)){
1131 seenHeaders.add(key);
1132 unique.push(row);
1133 }
1134 });
Veronika Kocher 4.9 1135
Veronika Kocher 4.11 1136 unique.forEach(function(row){
1137 var headerRect=
1138 row.el
1139 .getBoundingClientRect();
Veronika Kocher 4.9 1140
Veronika Kocher 4.11 1141 row.el.style.setProperty(
1142 "background",
1143 row.theme.bg,
1144 "important"
Veronika Kocher 4.10 1145 );
1146
Veronika Kocher 4.11 1147 row.el.style.setProperty(
1148 "color",
1149 row.theme.text,
1150 "important"
Veronika Kocher 4.10 1151 );
1152
Veronika Kocher 4.11 1153 row.el.style.setProperty(
1154 "text-align",
1155 "left",
1156 "important"
Veronika Kocher 4.10 1157 );
Veronika Kocher 4.9 1158
Veronika Kocher 4.11 1159 row.el.style.setProperty(
1160 "word-spacing",
1161 "normal",
1162 "important"
1163 );
Veronika Kocher 4.10 1164
Veronika Kocher 4.11 1165 var later=
1166 unique
1167 .filter(function(other){
1168 return (
1169 other.card===row.card&&
1170 other.el
1171 .getBoundingClientRect()
1172 .top>
1173 headerRect.top+2
1174 );
1175 })
1176 .sort(function(a,b){
1177 return (
1178 a.el
1179 .getBoundingClientRect()
1180 .top-
1181 b.el
1182 .getBoundingClientRect()
1183 .top
1184 );
1185 });
Veronika Kocher 4.10 1186
Veronika Kocher 4.11 1187 var stopTop=
1188 later.length
1189 ?later[0].el
1190 .getBoundingClientRect()
1191 .top
1192 :Infinity;
Veronika Kocher 4.10 1193
1194 Array.from(
Veronika Kocher 4.11 1195 row.card.querySelectorAll("a")
1196 ).forEach(function(link){
1197 if(!visible(link))return;
Veronika Kocher 4.10 1198
Veronika Kocher 4.11 1199 var rect=
1200 link.getBoundingClientRect();
Veronika Kocher 4.10 1201
Veronika Kocher 4.11 1202 if(
1203 rect.top<=
1204 headerRect.bottom-2||
1205 rect.top>=
1206 stopTop-2
1207 ){
1208 return;
1209 }
Veronika Kocher 4.10 1210
Veronika Kocher 4.11 1211 var candidates=
1212 rowCandidates(
1213 link,
1214 row.card
1215 );
1216
1217 var target=
1218 chooseOuterRow(
1219 candidates,
1220 link
1221 );
1222
1223 candidates.forEach(function(el){
1224 el.style.setProperty(
1225 "border-left",
1226 "0 solid transparent",
1227 "important"
1228 );
1229 });
1230
1231 target.style.setProperty(
1232 "border-left",
1233 "3px solid "+
1234 row.theme.accent,
1235 "important"
Veronika Kocher 4.10 1236 );
Veronika Kocher 4.11 1237
1238 target.style.setProperty(
1239 "box-sizing",
1240 "border-box",
1241 "important"
Veronika Kocher 4.10 1242 );
Veronika Kocher 4.9 1243 });
Veronika Kocher 4.11 1244 });
Veronika Kocher 4.9 1245
Veronika Kocher 4.11 1246 return unique;
Veronika Kocher 4.10 1247 }
Veronika Kocher 4.9 1248
Veronika Kocher 4.11 1249 /* =======================================================
1250 OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW
1251 ======================================================= */
Veronika Kocher 4.10 1252
Veronika Kocher 4.11 1253 function alignOverviewCards(headers){
1254 if(
1255 PAGE_KIND!=="overview"||
1256 window.innerWidth<=MOBILE_MAX
1257 ){
1258 return;
1259 }
Veronika Kocher 4.10 1260
Veronika Kocher 4.11 1261 var cards=[];
1262 var seen=new Set();
Veronika Kocher 4.10 1263
Veronika Kocher 4.11 1264 headers.forEach(function(row){
1265 if(!seen.has(row.card)){
1266 seen.add(row.card);
1267 cards.push(row.card);
1268 }
1269 });
Veronika Kocher 4.10 1270
Veronika Kocher 4.11 1271 if(cards.length<2){
1272 return;
1273 }
Veronika Kocher 4.10 1274
Veronika Kocher 4.11 1275 // Group cards by actual top position.
1276 var groups=[];
Veronika Kocher 4.10 1277
Veronika Kocher 4.11 1278 cards.forEach(function(card){
1279 var top=
1280 card.getBoundingClientRect().top;
Veronika Kocher 4.10 1281
Veronika Kocher 4.11 1282 var group=null;
Veronika Kocher 4.10 1283
Veronika Kocher 4.11 1284 for(var i=0;i<groups.length;i++){
Veronika Kocher 4.10 1285 if(
Veronika Kocher 4.11 1286 Math.abs(
1287 groups[i].top-top
1288 )<=ROW_TOLERANCE
Veronika Kocher 4.10 1289 ){
Veronika Kocher 4.11 1290 group=groups[i];
1291 break;
Veronika Kocher 4.10 1292 }
Veronika Kocher 4.11 1293 }
Veronika Kocher 4.10 1294
Veronika Kocher 4.11 1295 if(!group){
1296 group={
1297 top:top,
1298 cards:[]
1299 };
1300 groups.push(group);
1301 }
Veronika Kocher 4.10 1302
Veronika Kocher 4.11 1303 group.cards.push(card);
1304 });
Veronika Kocher 4.10 1305
Veronika Kocher 4.11 1306 groups.forEach(function(group){
1307 if(group.cards.length<2){
1308 return;
1309 }
Veronika Kocher 4.10 1310
Veronika Kocher 4.11 1311 var firstHeaders=
1312 group.cards.map(function(card){
1313 var candidates=
1314 headers
1315 .filter(function(row){
1316 return row.card===card;
1317 })
1318 .sort(function(a,b){
1319 return (
1320 a.el
1321 .getBoundingClientRect()
1322 .top-
1323 b.el
1324 .getBoundingClientRect()
1325 .top
1326 );
1327 });
Veronika Kocher 4.10 1328
Veronika Kocher 4.11 1329 return candidates.length
1330 ?candidates[0]
1331 :null;
1332 });
Veronika Kocher 4.10 1333
Veronika Kocher 4.11 1334 if(
1335 !firstHeaders.some(function(row){
1336 return !row;
1337 })
1338 ){
1339 var targetTop=
1340 Math.max.apply(
1341 Math,
1342 firstHeaders.map(function(row){
1343 return (
1344 row.el
1345 .getBoundingClientRect()
1346 .top-
1347 row.card
1348 .getBoundingClientRect()
1349 .top
1350 );
1351 })
1352 );
Veronika Kocher 4.8 1353
Veronika Kocher 4.11 1354 firstHeaders.forEach(function(row){
1355 var relativeTop=
1356 row.el
1357 .getBoundingClientRect()
1358 .top-
1359 row.card
1360 .getBoundingClientRect()
1361 .top;
Veronika Kocher 4.9 1362
Veronika Kocher 4.11 1363 var delta=
1364 targetTop-relativeTop;
Veronika Kocher 4.9 1365
Veronika Kocher 4.11 1366 if(delta>1){
1367 saveStyle(
1368 row.el,
1369 originalMargin,
1370 "margin-top"
1371 );
Veronika Kocher 4.10 1372
Veronika Kocher 4.11 1373 var current=
1374 num(
1375 getComputedStyle(
1376 row.el
1377 ).marginTop
1378 );
Veronika Kocher 4.9 1379
Veronika Kocher 4.11 1380 row.el.style.setProperty(
1381 "margin-top",
1382 (
1383 current+delta
1384 )+"px"
1385 );
Veronika Kocher 4.9 1386
Veronika Kocher 4.11 1387 row.el.setAttribute(
1388 "data-sn-master-first-row",
1389 "1"
1390 );
Veronika Kocher 4.9 1391
Veronika Kocher 4.11 1392 managedMargin.add(
1393 row.el
1394 );
1395 }
1396 });
1397 }
Veronika Kocher 4.9 1398
Veronika Kocher 4.11 1399 var maxHeight=0;
Veronika Kocher 4.9 1400
Veronika Kocher 4.11 1401 group.cards.forEach(function(card){
1402 maxHeight=
1403 Math.max(
1404 maxHeight,
1405 card
1406 .getBoundingClientRect()
1407 .height
1408 );
1409 });
Veronika Kocher 4.9 1410
Veronika Kocher 4.11 1411 maxHeight=
1412 Math.ceil(maxHeight);
Veronika Kocher 4.9 1413
Veronika Kocher 4.11 1414 group.cards.forEach(function(card){
1415 saveStyle(
1416 card,
1417 originalHeight,
1418 "min-height"
1419 );
Veronika Kocher 4.9 1420
Veronika Kocher 4.11 1421 card.style.setProperty(
1422 "min-height",
1423 maxHeight+"px"
Veronika Kocher 4.9 1424 );
1425
Veronika Kocher 4.11 1426 card.setAttribute(
1427 "data-sn-master-equal-height",
1428 "1"
1429 );
Veronika Kocher 4.9 1430
Veronika Kocher 4.11 1431 managedHeight.add(
1432 card
1433 );
1434 });
Veronika Kocher 4.9 1435 });
1436 }
1437
Veronika Kocher 4.11 1438 /* =======================================================
1439 DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY
1440 ======================================================= */
Veronika Kocher 4.9 1441
Veronika Kocher 4.11 1442 function equaliseDetailGrids(){
Veronika Kocher 4.10 1443 if(
Veronika Kocher 4.11 1444 PAGE_KIND!=="detail"||
1445 window.innerWidth<=MOBILE_MAX
Veronika Kocher 4.10 1446 ){
Veronika Kocher 4.11 1447 return;
Veronika Kocher 4.10 1448 }
Veronika Kocher 4.9 1449
Veronika Kocher 4.11 1450 var selectors=[
1451 ".arsn-grid",
1452 ".arsn-grid-2",
1453 ".arsn-grid-3",
1454 ".dmp-grid",
1455 ".ido-grid",
1456 ".pp-grid"
1457 ];
Veronika Kocher 4.9 1458
Veronika Kocher 4.11 1459 selectors.forEach(function(selector){
1460 Array.from(
1461 root.querySelectorAll(selector)
1462 ).forEach(function(grid){
1463 var children=
1464 Array.from(
1465 grid.children||[]
1466 ).filter(visible);
Veronika Kocher 4.9 1467
Veronika Kocher 4.11 1468 if(children.length<2){
1469 return;
1470 }
Veronika Kocher 4.9 1471
Veronika Kocher 4.11 1472 var groups=[];
Veronika Kocher 4.9 1473
Veronika Kocher 4.11 1474 children.forEach(function(child){
1475 var top=
1476 child
1477 .getBoundingClientRect()
1478 .top;
Veronika Kocher 4.9 1479
Veronika Kocher 4.11 1480 var group=null;
Veronika Kocher 4.9 1481
Veronika Kocher 4.11 1482 for(var i=0;i<groups.length;i++){
1483 if(
1484 Math.abs(
1485 groups[i].top-top
1486 )<=ROW_TOLERANCE
1487 ){
1488 group=groups[i];
1489 break;
1490 }
1491 }
Veronika Kocher 4.9 1492
Veronika Kocher 4.11 1493 if(!group){
1494 group={
1495 top:top,
1496 items:[]
1497 };
1498 groups.push(group);
1499 }
Veronika Kocher 4.9 1500
Veronika Kocher 4.11 1501 group.items.push(child);
1502 });
Veronika Kocher 4.9 1503
Veronika Kocher 4.11 1504 groups.forEach(function(group){
1505 if(group.items.length<2){
1506 return;
1507 }
Veronika Kocher 4.8 1508
Veronika Kocher 4.11 1509 var maxHeight=0;
Veronika Kocher 4.10 1510
Veronika Kocher 4.11 1511 group.items.forEach(function(item){
1512 maxHeight=
1513 Math.max(
1514 maxHeight,
1515 item
1516 .getBoundingClientRect()
1517 .height
1518 );
1519 });
Veronika Kocher 4.10 1520
Veronika Kocher 4.11 1521 maxHeight=
1522 Math.ceil(maxHeight);
Veronika Kocher 4.8 1523
Veronika Kocher 4.11 1524 group.items.forEach(function(item){
1525 saveStyle(
1526 item,
1527 originalHeight,
1528 "min-height"
1529 );
Veronika Kocher 4.8 1530
Veronika Kocher 4.11 1531 item.style.setProperty(
1532 "min-height",
1533 maxHeight+"px"
1534 );
Veronika Kocher 4.9 1535
Veronika Kocher 4.11 1536 item.setAttribute(
1537 "data-sn-master-equal-height",
1538 "1"
1539 );
Veronika Kocher 4.8 1540
Veronika Kocher 4.11 1541 managedHeight.add(item);
1542 });
Veronika Kocher 4.8 1543 });
Veronika Kocher 4.11 1544 });
1545 });
1546 }
Veronika Kocher 4.8 1547
Veronika Kocher 4.11 1548 /* =======================================================
1549 RUN / RESPONSIVE SCHEDULING
1550 ======================================================= */
Veronika Kocher 4.8 1551
Veronika Kocher 4.11 1552 function run(){
1553 if(running)return;
Veronika Kocher 4.8 1554
Veronika Kocher 4.11 1555 running=true;
Veronika Kocher 4.10 1556
Veronika Kocher 4.11 1557 try{
1558 resetRuntime();
1559 applyPlaceholderBadge();
1560 propagateDetailAccents();
Veronika Kocher 4.10 1561
Veronika Kocher 4.11 1562 var headers=
1563 applyOverviewPalette();
Veronika Kocher 4.10 1564
Veronika Kocher 4.12 1565 makeThreeLineAreaLabels();
1566 makeFilledRedOrangeCTAsBorderless();
1567
Veronika Kocher 4.11 1568 if(
1569 window.innerWidth>
1570 MOBILE_MAX
1571 ){
1572 alignOverviewCards(
1573 headers
1574 );
Veronika Kocher 4.8 1575
Veronika Kocher 4.11 1576 equaliseDetailGrids();
1577 }
Veronika Kocher 4.10 1578 }finally{
Veronika Kocher 4.11 1579 running=false;
Veronika Kocher 4.10 1580 }
Veronika Kocher 4.8 1581 }
1582
Veronika Kocher 4.11 1583 function onResize(){
Veronika Kocher 4.10 1584 if(resizeTimer){
1585 clearTimeout(
1586 resizeTimer
1587 );
1588 }
Veronika Kocher 4.9 1589
Veronika Kocher 4.10 1590 resizeTimer=
1591 setTimeout(
1592 function(){
1593 resizeTimer=0;
Veronika Kocher 4.11 1594 run();
Veronika Kocher 4.10 1595 },
1596 RESIZE_DEBOUNCE
1597 );
Veronika Kocher 4.8 1598 }
1599
Veronika Kocher 4.11 1600 async function waitForReady(){
1601 if(
1602 document.readyState!=="complete"
1603 ){
1604 await new Promise(function(resolve){
1605 window.addEventListener(
1606 "load",
1607 resolve,
1608 {once:true}
1609 );
1610 });
1611 }
1612
1613 if(
1614 document.fonts&&
1615 document.fonts.ready
1616 ){
1617 try{
1618 await document.fonts.ready;
1619 }catch(error){}
1620 }
1621
Veronika Kocher 4.10 1622 var images=
1623 Array.from(
1624 root.querySelectorAll("img")
1625 );
Veronika Kocher 4.8 1626
Veronika Kocher 4.11 1627 await Promise.all(
Veronika Kocher 4.10 1628 images.map(function(img){
1629 if(img.complete){
1630 return Promise.resolve();
1631 }
Veronika Kocher 4.8 1632
Veronika Kocher 4.10 1633 return new Promise(function(resolve){
1634 var done=function(){
1635 resolve();
1636 };
1637
1638 img.addEventListener(
1639 "load",
1640 done,
1641 {once:true}
1642 );
1643
1644 img.addEventListener(
1645 "error",
1646 done,
1647 {once:true}
1648 );
1649 });
1650 })
1651 );
1652
Veronika Kocher 4.11 1653 run();
Veronika Kocher 4.8 1654 }
1655
Veronika Kocher 4.11 1656 window.addEventListener(
Veronika Kocher 4.10 1657 "resize",
Veronika Kocher 4.11 1658 onResize,
Veronika Kocher 4.10 1659 {passive:true}
1660 );
1661
Veronika Kocher 4.11 1662 waitForReady();
Veronika Kocher 4.8 1663 })();
1664 </script>
Veronika Kocher 4.10 1665
Veronika Kocher 4.11 1666 <!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END -->
1667 {{/html}}
1668