1<!DOCTYPE html> 2<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> 3 4<meta charset="utf-8"> 5<meta name="generator" content="quarto-1.5.5"> 6 7<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> 8 9 10<title>Ist es heute zu heiÃ? â Licence - Ist es heute zu heiÃ</title> 11<style> 12code{white-space: pre-wrap;} 13span.smallcaps{font-variant: small-caps;} 14div.columns{display: flex; gap: min(4vw, 1.5em);} 15div.column{flex: auto; overflow-x: auto;} 16div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} 17ul.task-list{list-style: none;} 18ul.task-list li input[type="checkbox"] { 19 width: 0.8em; 20 margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 21 vertical-align: middle; 22} 23</style> 24 25
26<script src="../site_libs/quarto-nav/quarto-nav.js"></script>
vendor: 1 bytes, line 26
26
27<script src="../site_libs/quarto-nav/headroom.min.js"></script>
vendor: 1 bytes, line 27
27
28<script src="../site_libs/clipboard/clipboard.min.js"></script>
vendor: 1 bytes, line 28
28
29<script src="../site_libs/quarto-search/autocomplete.umd.js"></script>
vendor: 1 bytes, line 29
29
30<script src="../site_libs/quarto-search/fuse.min.js"></script>
vendor: 1 bytes, line 30
30
31<script src="../site_libs/quarto-search/quarto-search.js"></script>
31 32<meta name="quarto:offset" content="../"> 33<link href="..//assets/iihrn-favicon-96p.png" rel="icon" type="image/png">
34<script src="../site_libs/quarto-html/quarto.js"></script>
vendor: 1 bytes, line 34
34
35<script src="../site_libs/quarto-html/popper.min.js"></script>
vendor: 1 bytes, line 35
35
36<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
vendor: 1 bytes, line 36
36
37<script src="../site_libs/quarto-html/anchor.min.js"></script>
37 38<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet"> 39<link href="../site_libs/quarto-html/quarto-syntax-highlighting.css" rel="stylesheet" id="quarto-text-highlighting-styles">
40<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
40 41<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> 42<link href="../site_libs/bootstrap/bootstrap.min.css" rel="stylesheet" id="quarto-bootstrap" data-mode="light">
43<script id="quarto-search-options" type="application/json">{ 44 "location": "navbar", 45 "copy-button": false, 46 "collapse-after": 3, 47 "panel-placement": "end", 48 "type": "textbox", 49 "limit": 50, 50 "keyboard-shortcut": [ 51 "f", 52 "/", 53 "s" 54 ], 55 "language": { 56 "search-no-results-text": "No results", 57 "search-matching-documents-text": "matching documents", 58 "search-copy-link-title": "Copy link to search", 59 "search-hide-matches-text": "Hide additional matches", 60 "search-more-match-text": "more match in this document", 61 "search-more-matches-text": "more matches in this document", 62 "search-clear-button-title": "Clear", 63 "search-text-placeholder": "", 64 "search-detached-cancel-button-title": "Cancel", 65 "search-submit-button-title": "Submit", 66 "search-label": "Search" 67 } 68}</script>
vendor: 67 bytes, lines 68-69
68 69<script async="" src="https://www.googletagmanager.com/gtag/js?id=
69G-BDLC6Q8R79
vendor: 13 bytes, lines 69-70
69"></script> 70
71<script type="text/javascript"> 72
vendor: 127 bytes, lines 73-76
73window.dataLayer = window.dataLayer || []; 74function gtag(){dataLayer.push(arguments);} 75gtag('js', new Date()); 76gtag('config', '
76G-BDLC6Q8R79
vendor: 29 bytes, line 76
76', { 'anonymize_ip': true});
77</script>
77 78 79 80</head> 81 82<body class="nav-fixed fullcontent"> 83 84<div id="quarto-search-results"></div> 85 <header id="quarto-header" class="headroom fixed-top"> 86 <nav class="navbar navbar-expand " data-bs-theme="dark"> 87 <div class="navbar-container container-fluid"> 88 <div class="navbar-brand-container mx-auto"> 89 <a class='navbar-brand' href='/'> 90 <span class="navbar-title">Ist es heute zu hei�</span> 91 </a> 92 </div> 93 <div class="quarto-navbar-tools"> 94</div> 95 <div id="quarto-search" class="" title="Search"></div> 96 </div> <!-- /container-fluid --> 97 </nav> 98</header> 99<!-- content --> 100<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar"> 101<!-- sidebar --> 102<!-- margin-sidebar --> 103 104<!-- main --> 105<main class="content" id="quarto-document-content"> 106 107 108 109 110<section id="unsere-diagramme-und-statistiken-sind-für-die-nichtkommerzielle-nutzung-verfügbar." class="level1"> 111<h1>Unsere Diagramme und Statistiken sind für die nichtkommerzielle Nutzung verfügbar.</h1> 112<p>Formal sind sie verfügbar unter der <a href="https://creativecommons.org/licenses/by-nc/4.0">Creative Commons Attribution Non-Commercial 4.0</a> Lizenz.</p> 113 114 115</section> 116 117</main> <!-- /main -->
118<script id="quarto-html-after-body" type="application/javascript"> 119window.document.addEventListener("DOMContentLoaded", function (event) { 120 const toggleBodyColorMode = (bsSheetEl) => { 121 const mode = bsSheetEl.getAttribute("data-mode"); 122 const bodyEl = window.document.querySelector("body"); 123 if (mode === "dark") { 124 bodyEl.classList.add("quarto-dark"); 125 bodyEl.classList.remove("quarto-light"); 126 } else { 127 bodyEl.classList.add("quarto-light"); 128 bodyEl.classList.remove("quarto-dark"); 129 } 130 } 131 const toggleBodyColorPrimary = () => { 132 const bsSheetEl = window.document.querySelector("link#quarto-bootstrap"); 133 if (bsSheetEl) { 134 toggleBodyColorMode(bsSheetEl); 135 } 136 } 137 toggleBodyColorPrimary(); 138 const icon = "î§"; 139 const anchorJS = new window.AnchorJS(); 140 anchorJS.options = { 141 placement: 'right', 142 icon: icon 143 }; 144 anchorJS.add('.anchored'); 145 const isCodeAnnotation = (el) => { 146 for (const clz of el.classList) { 147 if (clz.startsWith('code-annotation-')) { 148 return true; 149 } 150 } 151 return false; 152 } 153 const clipboard = new window.ClipboardJS('.code-copy-button', { 154 text: function(trigger) { 155 const codeEl = trigger.previousElementSibling.cloneNode(true); 156 for (const childEl of codeEl.children) { 157 if (isCodeAnnotation(childEl)) { 158 childEl.remove(); 159 } 160 } 161 return codeEl.innerText; 162 } 163 }); 164 clipboard.on('success', function(e) { 165 // button target 166 const button = e.trigger; 167 // don't keep focus 168 button.blur(); 169 // flash "checked" 170 button.classList.add('code-copy-button-checked'); 171 var currentTitle = button.getAttribute("title"); 172 button.setAttribute("title", "Copied!"); 173 let tooltip; 174 if (window.bootstrap) { 175 button.setAttribute("data-bs-toggle", "tooltip"); 176 button.setAttribute("data-bs-placement", "left"); 177 button.setAttribute("data-bs-title", "Copied!"); 178 tooltip = new bootstrap.Tooltip(button, 179 { trigger: "manual", 180 customClass: "code-copy-button-tooltip", 181 offset: [0, -8]}); 182 tooltip.show(); 183 } 184 setTimeout(function() { 185 if (tooltip) { 186 tooltip.hide(); 187 button.removeAttribute("data-bs-title"); 188 button.removeAttribute("data-bs-toggle"); 189 button.removeAttribute("data-bs-placement"); 190 } 191 button.setAttribute("title", currentTitle); 192 button.classList.remove('code-copy-button-checked'); 193 }, 1000); 194 // clear code selection 195 e.clearSelection(); 196 }); 197 function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { 198 const config = { 199 allowHTML: true, 200 maxWidth: 500, 201 delay: 100, 202 arrow: false, 203 appendTo: function(el) { 204 return el.parentElement; 205 }, 206 interactive: true, 207 interactiveBorder: 10, 208 theme: 'quarto', 209 placement: 'bottom-start', 210 }; 211 if (contentFn) { 212 config.content = contentFn; 213 } 214 if (onTriggerFn) { 215 config.onTrigger = onTriggerFn; 216 } 217 if (onUntriggerFn) { 218 config.onUntrigger = onUntriggerFn; 219 } 220 window.tippy(el, config); 221 } 222 const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); 223 for (var i=0; i<noterefs.length; i++) { 224 const ref = noterefs[i]; 225 tippyHover(ref, function() { 226 // use id or data attribute instead here 227 let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); 228 try { href = new URL(href).hash; } catch {} 229 const id = href.replace(/^#\/?/, ""); 230 const note = window.document.getElementById(id); 231 return note.innerHTML; 232 }); 233 } 234 const xrefs = window.document.querySelectorAll('a.quarto-xref'); 235 const processXRef = (id, note) => { 236 // Strip column container classes 237 const stripColumnClz = (el) => { 238 el.classList.remove("page-full", "page-columns"); 239 if (el.children) { 240 for (const child of el.children) { 241 stripColumnClz(child); 242 } 243 } 244 } 245 stripColumnClz(note) 246 if (id === null || id.startsWith('sec-')) { 247 // Special case sections, only their first couple elements 248 const container = document.createElement("div"); 249 if (note.children && note.children.length > 2) { 250 container.appendChild(note.children[0].cloneNode(true)); 251 for (let i = 1; i < note.children.length; i++) { 252 const child = note.children[i]; 253 if (child.tagName === "P" && child.innerText === "") { 254 continue; 255 } else { 256 container.appendChild(child.cloneNode(true)); 257 break; 258 } 259 } 260 if (window.Quarto?.typesetMath) { 261 window.Quarto.typesetMath(container); 262 } 263 return container.innerHTML 264 } else { 265 if (window.Quarto?.typesetMath) { 266 window.Quarto.typesetMath(note); 267 } 268 return note.innerHTML; 269 } 270 } else { 271 // Remove any anchor links if they are present 272 const anchorLink = note.querySelector('a.anchorjs-link'); 273 if (anchorLink) { 274 anchorLink.remove(); 275 } 276 if (window.Quarto?.typesetMath) { 277 window.Quarto.typesetMath(note); 278 } 279 // TODO in 1.5, we should make sure this works without a callout special case 280 if (note.classList.contains("callout")) { 281 return note.outerHTML; 282 } else { 283 return note.innerHTML; 284 } 285 } 286 } 287 for (var i=0; i<xrefs.length; i++) { 288 const xref = xrefs[i]; 289 tippyHover(xref, undefined, function(instance) { 290 instance.disable(); 291 let url = xref.getAttribute('href'); 292 let hash = undefined; 293 if (url.startsWith('#')) { 294 hash = url; 295 } else { 296 try { hash = new URL(url).hash; } catch {} 297 } 298 if (hash) { 299 const id = hash.replace(/^#\/?/, ""); 300 const note = window.document.getElementById(id); 301 if (note !== null) { 302 try { 303 const html = processXRef(id, note.cloneNode(true)); 304 instance.setContent(html); 305 } finally { 306 instance.enable(); 307 instance.show(); 308 } 309 } else { 310 // See if we can fetch this 311 fetch(url.split('#')[0]) 312 .then(res => res.text()) 313 .then(html => { 314 const parser = new DOMParser(); 315 const htmlDoc = parser.parseFromString(html, "text/html"); 316 const note = htmlDoc.getElementById(id); 317 if (note !== null) { 318 const html = processXRef(id, note); 319 instance.setContent(html); 320 } 321 }).finally(() => { 322 instance.enable(); 323 instance.show(); 324 }); 325 } 326 } else { 327 // See if we can fetch a full url (with no hash to target)
328 // This is a special case and we should probably do some content thinning / targeting 329 fetch(url) 330 .then(res => res.text()) 331 .then(html => { 332 const parser = new DOMParser(); 333 const htmlDoc = parser.parseFromString(html, "text/html"); 334 const note = htmlDoc.querySelector('main.content'); 335 if (note !== null) { 336 // This should only happen for chapter cross references 337 // (since there is no id in the URL) 338 // remove the first header 339 if (note.children.length > 0 && note.children[0].tagName === "HEADER") { 340 note.children[0].remove(); 341 } 342 const html = processXRef(null, note); 343 instance.setContent(html); 344 } 345 }).finally(() => { 346 instance.enable(); 347 instance.show(); 348 }); 349 } 350 }, function(instance) { 351 }); 352 } 353 let selectedAnnoteEl; 354 const selectorForAnnotation = ( cell, annotation) => { 355 let cellAttr = 'data-code-cell="' + cell + '"'; 356 let lineAttr = 'data-code-annotation="' + annotation + '"'; 357 const selector = 'span[' + cellAttr + '][' + lineAttr + ']'; 358 return selector; 359 } 360 const selectCodeLines = (annoteEl) => { 361 const doc = window.document; 362 const targetCell = annoteEl.getAttribute("data-target-cell"); 363 const targetAnnotation = annoteEl.getAttribute("data-target-annotation"); 364 const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); 365 const lines = annoteSpan.getAttribute("data-code-lines").split(","); 366 const lineIds = lines.map((line) => { 367 return targetCell + "-" + line; 368 }) 369 let top = null; 370 let height = null; 371 let parent = null; 372 if (lineIds.length > 0) { 373 //compute the position of the single el (top and bottom and make a div) 374 const el = window.document.getElementById(lineIds[0]); 375 top = el.offsetTop; 376 height = el.offsetHeight; 377 parent = el.parentElement.parentElement; 378 if (lineIds.length > 1) { 379 const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]); 380 const bottom = lastEl.offsetTop + lastEl.offsetHeight; 381 height = bottom - top; 382 } 383 if (top !== null && height !== null && parent !== null) { 384 // cook up a div (if necessary) and position it 385 let div = window.document.getElementById("code-annotation-line-highlight"); 386 if (div === null) { 387 div = window.document.createElement("div"); 388 div.setAttribute("id", "code-annotation-line-highlight"); 389 div.style.position = 'absolute'; 390 parent.appendChild(div); 391 } 392 div.style.top = top - 2 + "px"; 393 div.style.height = height + 4 + "px"; 394 div.style.left = 0; 395 let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter"); 396 if (gutterDiv === null) { 397 gutterDiv = window.document.createElement("div"); 398 gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter"); 399 gutterDiv.style.position = 'absolute'; 400 const codeCell = window.document.getElementById(targetCell); 401 const gutter = codeCell.querySelector('.code-annotation-gutter'); 402 gutter.appendChild(gutterDiv); 403 } 404 gutterDiv.style.top = top - 2 + "px"; 405 gutterDiv.style.height = height + 4 + "px"; 406 } 407 selectedAnnoteEl = annoteEl; 408 } 409 }; 410 const unselectCodeLines = () => { 411 const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"]; 412 elementsIds.forEach((elId) => { 413 const div = window.document.getElementById(elId); 414 if (div) { 415 div.remove(); 416 } 417 }); 418 selectedAnnoteEl = undefined; 419 }; 420 // Handle positioning of the toggle 421 window.addEventListener( 422 "resize", 423 throttle(() => { 424 elRect = undefined; 425 if (selectedAnnoteEl) { 426 selectCodeLines(selectedAnnoteEl); 427 } 428 }, 10) 429 ); 430 function throttle(fn, ms) { 431 let throttle = false;
432 let timer; 433 return (...args) => { 434 if(!throttle) { // first call gets through 435 fn.apply(this, args); 436 throttle = true; 437 } else { // all the others get throttled 438 if(timer) clearTimeout(timer); // cancel #2 439 timer = setTimeout(() => { 440 fn.apply(this, args); 441 timer = throttle = false; 442 }, ms); 443 } 444 }; 445 } 446 // Attach click handler to the DT 447 const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); 448 for (const annoteDlNode of annoteDls) { 449 annoteDlNode.addEventListener('click', (event) => { 450 const clickedEl = event.target; 451 if (clickedEl !== selectedAnnoteEl) { 452 unselectCodeLines(); 453 const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active'); 454 if (activeEl) { 455 activeEl.classList.remove('code-annotation-active'); 456 } 457 selectCodeLines(clickedEl); 458 clickedEl.classList.add('code-annotation-active'); 459 } else { 460 // Unselect the line 461 unselectCodeLines(); 462 clickedEl.classList.remove('code-annotation-active'); 463 } 464 }); 465 } 466 const findCites = (el) => { 467 const parentEl = el.parentElement; 468 if (parentEl) { 469 const cites = parentEl.dataset.cites; 470 if (cites) { 471 return { 472 el, 473 cites: cites.split(' ') 474 }; 475 } else { 476 return findCites(el.parentElement) 477 } 478 } else { 479 return undefined; 480 } 481 }; 482 var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); 483 for (var i=0; i<bibliorefs.length; i++) { 484 const ref = bibliorefs[i]; 485 const citeInfo = findCites(ref); 486 if (citeInfo) { 487 tippyHover(citeInfo.el, function() { 488 var popup = window.document.createElement('div'); 489 citeInfo.cites.forEach(function(cite) { 490 var citeDiv = window.document.createElement('div'); 491 citeDiv.classList.add('hanging-indent'); 492 citeDiv.classList.add('csl-entry'); 493 var biblioDiv = window.document.getElementById('ref-' + cite); 494 if (biblioDiv) { 495 citeDiv.innerHTML = biblioDiv.innerHTML; 496 } 497 popup.appendChild(citeDiv); 498 }); 499 return popup.innerHTML; 500 }); 501 } 502 } 503}); 504</script>
504 505</div> <!-- /content --> 506<footer class="footer"> 507 <div class="nav-footer"> 508 <div class="nav-footer-left"> 509<p style="font-size: 1.5em;"> 510Vielen Dank an <a href="https://theurbanist.com.au/about">Mat Lipson</a>, <a href="https://steefancontractor.github.io/my_website/">Steefan Contractor</a> und <a href="https://jamesgoldie.dev">James Goldie</a> für die ursprüngliche Idee. 511</p> 512<p style="font-size: 1.5em;"> 513Implementierung für Deutschland von <a href="https://blog.neugartf.com">Fabian Neugart</a> 514</p> 515</div> 516 <div class="nav-footer-center"> 517 518 </div> 519 <div class="nav-footer-right"> 520<p> 521Unsere Daten stammen vom Deutschen Wetterdienst und deren <a href="https://www.dwd.de/DE/leistungen/opendata/opendata.html">OpenData Programm</a>. 522</p> 523<p> 524Unsere Grafiken sind für <a href="../licence">nicht-kommerzielle Zwecke frei zugänglich</a>. 525</p> 526<p><a href="https://creativecommons.org/licenses/by-nc/4.0/"><img src="https://mirrors.creativecommons.org/presskit/buttons/88x31/png/by-nc.png" alt="Creative Commons Attribution Non-Commercial 4.0 badge" style="width:80px"></a></p> 527</div> 528 </div> 529</footer> 530 531 532 533 534</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.