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.10.18"> 6 7<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> 8 9 10<title>Is it hot right now?</title> 11<style> 12/* Default styles provided by pandoc. 13** See https://pandoc.org/MANUAL.html#variables-for-html for config info. 14*/ 15span.smallcaps{font-variant: small-caps;} 16div.columns{display: flex; gap: 1.5em;} 17div.column{flex: auto;} 18@media screen { 19div.columns{gap: min(4vw, 1.5em);} 20div.column{overflow-x: auto;} 21} 22div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} 23ul.task-list{list-style: none;} 24ul.task-list li input[type="checkbox"] { 25 width: 0.8em; 26 margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 27 vertical-align: middle; 28} 29/* CSS for syntax highlighting */ 30html { -webkit-text-size-adjust: 100%; } 31pre > code.sourceCode { white-space: pre; position: relative; } 32pre > code.sourceCode > span { display: inline-block; line-height: 1.25; } 33pre > code.sourceCode > span:empty { height: 1.2em; } 34.sourceCode { overflow: visible; } 35code.sourceCode > span { color: inherit; text-decoration: inherit; } 36div.sourceCode { margin: 1em 0; } 37pre.sourceCode { margin: 0; } 38@media screen { 39div.sourceCode { overflow: auto; } 40} 41@media print { 42pre > code.sourceCode { white-space: pre-wrap; } 43pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; } 44} 45pre.numberSource code 46 { counter-reset: source-line 0; } 47pre.numberSource code > span 48 { position: relative; left: -4em; counter-increment: source-line; } 49pre.numberSource code > span > a:first-child::before 50 { content: counter(source-line); 51 position: relative; left: -1em; text-align: right; vertical-align: baseline; 52 border: none; display: inline-block; 53 -webkit-touch-callout: none; -webkit-user-select: none; 54 -khtml-user-select: none; -moz-user-select: none; 55 -ms-user-select: none; user-select: none; 56 padding: 0 4px; width: 4em; 57 } 58pre.numberSource { margin-left: 3em; padding-left: 4px; } 59div.sourceCode 60 { } 61@media screen { 62pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; } 63} 64</style> 65 66
67<script src="site_libs/quarto-nav/quarto-nav.js"></script>
vendor: 1 bytes, line 67
67
68<script src="site_libs/quarto-nav/headroom.min.js"></script>
vendor: 1 bytes, line 68
68
69<script src="site_libs/clipboard/clipboard.min.js"></script>
vendor: 1 bytes, line 69
69
70<script src="site_libs/quarto-search/autocomplete.umd.js"></script>
vendor: 1 bytes, line 70
70
71<script src="site_libs/quarto-search/fuse.min.js"></script>
vendor: 1 bytes, line 71
71
72<script src="site_libs/quarto-search/quarto-search.js"></script>
72 73<meta name="quarto:offset" content="./"> 74<link href=".//assets/iihrn-favicon-96p.png" rel="icon" type="image/png">
75<script src="site_libs/quarto-html/quarto.js" type="module"></script>
vendor: 1 bytes, line 75
75
76<script src="site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
vendor: 1 bytes, line 76
76
77<script src="site_libs/quarto-html/popper.min.js"></script>
vendor: 1 bytes, line 77
77
78<script src="site_libs/quarto-html/tippy.umd.min.js"></script>
vendor: 1 bytes, line 78
78
79<script src="site_libs/quarto-html/anchor.min.js"></script>
79 80<link href="site_libs/quarto-html/tippy.css" rel="stylesheet"> 81<link href="site_libs/quarto-html/quarto-syntax-highlighting-64a204ab8560d761af7679ceaba22944.css" rel="stylesheet" id="quarto-text-highlighting-styles">
82<script src="site_libs/bootstrap/bootstrap.min.js"></script>
82 83<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> 84<link href="site_libs/bootstrap/bootstrap-39222dd824f4fdced22034e5e62637d1.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
85<script id="quarto-search-options" type="application/json">{ 86 "location": "navbar", 87 "copy-button": false, 88 "collapse-after": 3, 89 "panel-placement": "end", 90 "type": "textbox", 91 "limit": 50, 92 "keyboard-shortcut": [ 93 "f", 94 "/", 95 "s" 96 ], 97 "language": { 98 "search-no-results-text": "No results", 99 "search-matching-documents-text": "matching documents", 100 "search-copy-link-title": "Copy link to search", 101 "search-hide-matches-text": "Hide additional matches", 102 "search-more-match-text": "more match in this document", 103 "search-more-matches-text": "more matches in this document", 104 "search-clear-button-title": "Clear", 105 "search-text-placeholder": "", 106 "search-detached-cancel-button-title": "Cancel", 107 "search-submit-button-title": "Submit", 108 "search-label": "Search" 109 } 110}</script>
vendor: 67 bytes, lines 110-111
110 111<script async="" src="https://www.googletagmanager.com/gtag/js?id=
111G-3EDWFZHK7Y
vendor: 13 bytes, lines 111-112
111"></script> 112
113<script type="text/javascript"> 114
vendor: 127 bytes, lines 115-118
115window.dataLayer = window.dataLayer || []; 116function gtag(){dataLayer.push(arguments);} 117gtag('js', new Date()); 118gtag('config', '
118G-3EDWFZHK7Y
vendor: 29 bytes, line 118
118', { 'anonymize_ip': true});
119</script>
vendor: 1 bytes, line 119
119
120<script type="module" src="site_libs/quarto-ojs/quarto-ojs-runtime.js"></script>
120 121<link href="site_libs/quarto-ojs/quarto-ojs.css" rel="stylesheet"> 122 123 124<meta property="og:title" content="Is it hot right now?"> 125<meta property="og:description" content="Is it hot right now, or does it just feel like it?"> 126<meta property="og:image" content="https://roaring-crostata-c66c31.netlify.app/assets/iihrn-social-card.png"> 127<meta property="og:site_name" content="Is it hot right now?"> 128<meta property="og:image:height" content="630"> 129<meta property="og:image:width" content="1200"> 130<meta name="twitter:title" content="Is it hot right now?"> 131<meta name="twitter:description" content="Is it hot right now, or does it just feel like it?"> 132<meta name="twitter:image" content="https://roaring-crostata-c66c31.netlify.app/assets/iihrn-social-card.png"> 133<meta name="twitter:site" content="isithotrightnow.com"> 134<meta name="twitter:card" content="summary"> 135<meta name="twitter:image-height" content="630"> 136<meta name="twitter:image-width" content="1200"> 137</head> 138 139<body class="nav-fixed fullcontent quarto-light"> 140 141<div id="quarto-search-results"></div> 142 <header id="quarto-header" class="headroom fixed-top"> 143 <nav class="navbar navbar-expand " data-bs-theme="dark"> 144 <div class="navbar-container container-fluid"> 145 <div class="navbar-brand-container mx-auto"> 146 <a class="navbar-brand" href="./index.html"> 147 <span class="navbar-title">Is it hot right now?</span> 148 </a> 149 </div> 150 <div class="quarto-navbar-tools tools-end"> 151</div> 152 <div id="quarto-search" class="" title="Search"></div> 153 </div> <!-- /container-fluid --> 154 </nav> 155</header> 156<!-- content --> 157<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar"> 158<!-- sidebar --> 159<!-- margin-sidebar --> 160 161<!-- main --> 162<main class="content page-columns page-full" id="quarto-document-content"><header id="title-block-header" class="quarto-title-block"><h1 class="title display-7">Hereâs how today comparesâ¦</h1></header> 163 164 165 166 167<div id="import-infra" class="cell"> 168<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" data-startfrom="12" data-source-offset="-0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 11;"><span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a><span class="im">import</span> { aq<span class="op">,</span> op } <span class="im">from</span> <span class="st">"@uwdata/arquero"</span></span> 169<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a></span> 170<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a>bucket_base <span class="op">=</span> <span class="st">"https://d33173dkfxwa5x.cloudfront.net/www/"</span></span> 171<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a></span> 172<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a>FA <span class="op">=</span> FileAttachment</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 173<div class="cell-output cell-output-display"> 174<div id="import-infra-1"> 175<div id="ojs-cell-1-1" data-nodetype="declaration"> 176 177</div> 178</div> 179</div> 180<div class="cell-output cell-output-display"> 181<div id="import-infra-2"> 182<div id="ojs-cell-1-2" data-nodetype="declaration"> 183 184</div> 185</div> 186</div> 187<div class="cell-output cell-output-display"> 188<div id="import-infra-3"> 189<div id="ojs-cell-1-3" data-nodetype="declaration"> 190 191</div> 192</div> 193</div> 194</div> 195<div id="watch-position" class="cell"> 196<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" data-startfrom="8" data-source-offset="-145"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 7;"><span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a>mutable myLocation <span class="op">=</span> <span class="kw">null</span></span> 197<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a>mutable geolocateStatus <span class="op">=</span> <span class="st">"default"</span></span> 198<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a></span> 199<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a>getLocation <span class="op">=</span> {</span> 200<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a> <span class="kw">yield</span> <span class="kw">null</span></span> 201<span id="cb2-13"><a href="#cb2-13" aria-hidden="true" tabindex="-1"></a></span> 202<span id="cb2-14"><a href="#cb2-14" aria-hidden="true" tabindex="-1"></a> <span class="kw">yield</span> <span class="bu">navigator</span><span class="op">.</span><span class="at">geolocation</span><span class="op">.</span><span class="fu">getCurrentPosition</span>(</span> 203<span id="cb2-15"><a href="#cb2-15" aria-hidden="true" tabindex="-1"></a> pos <span class="kw">=></span> {</span> 204<span id="cb2-16"><a href="#cb2-16" aria-hidden="true" tabindex="-1"></a> mutable myLocation <span class="op">=</span> {</span> 205<span id="cb2-17"><a href="#cb2-17" aria-hidden="true" tabindex="-1"></a>
205 <span class="dt">lat</span><span class="op">:</span> pos<span class="op">.</span><span class="at">coords</span><span class="op">.</span><span class="at">latitude</span><span class="op">,</span></span> 206<span id="cb2-18"><a href="#cb2-18" aria-hidden="true" tabindex="-1"></a> <span class="dt">lon</span><span class="op">:</span> pos<span class="op">.</span><span class="at">coords</span><span class="op">.</span><span class="at">longitude</span></span> 207<span id="cb2-19"><a href="#cb2-19" aria-hidden="true" tabindex="-1"></a> }</span> 208<span id="cb2-20"><a href="#cb2-20" aria-hidden="true" tabindex="-1"></a> mutable geolocateStatus <span class="op">=</span> <span class="st">"granted"</span></span> 209<span id="cb2-21"><a href="#cb2-21" aria-hidden="true" tabindex="-1"></a> }<span class="op">,</span></span> 210<span id="cb2-22"><a href="#cb2-22" aria-hidden="true" tabindex="-1"></a> e <span class="kw">=></span> {</span> 211<span id="cb2-23"><a href="#cb2-23" aria-hidden="true" tabindex="-1"></a>
211 <span class="bu">console</span><span class="op">.</span><span class="fu">log</span>(<span class="st">"Geolocation error"</span><span class="op">,</span> e)<span class="op">,</span></span> 212<span id="cb2-24"><a href="#cb2-24" aria-hidden="true" tabindex="-1"></a> mutable geolocateStatus <span class="op">=</span> <span class="st">"error"</span></span> 213<span id="cb2-25"><a href="#cb2-25" aria-hidden="true" tabindex="-1"></a> }<span class="op">,</span></span> 214<span id="cb2-26"><a href="#cb2-26" aria-hidden="true" tabindex="-1"></a> {</span> 215<span id="cb2-27"><a href="#cb2-27" aria-hidden="true" tabindex="-1"></a> <span class="dt">enableHighAccuracy</span><span class="op">:</span> <span class="kw">false</span></span> 216<span id="cb2-28"><a href="#cb2-28" aria-hidden="true" tabindex="-1"></a> })</span> 217<span id="cb2-29"><a href="#cb2-29" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 218<div class="cell-output cell-output-display"> 219<div id="watch-position-1"> 220<div id="ojs-cell-2-1" data-nodetype="declaration"> 221 222</div> 223</div> 224</div> 225<div class="cell-output cell-output-display"> 226<div id="watch-position-2"> 227<div id="ojs-cell-2-2" data-nodetype="declaration"> 228 229</div> 230</div> 231</div> 232<div class="cell-output cell-output-display"> 233<div id="watch-position-3"> 234<div id="ojs-cell-2-3" data-nodetype="declaration"> 235 236</div> 237</div> 238</div> 239</div> 240<div id="geolocate-debug" class="cell hidden"> 241<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" data-startfrom="3" data-source-offset="-1"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 2;"><span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a>geolocateStatus <span class="op">==</span> <span class="st">"default"</span> <span class="op">?</span></span> 242<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">md</span><span class="vs">`Allow location to see local station`</span> <span class="op">:</span></span> 243<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a> geolocateStatus <span class="op">==</span> <span class="st">"error"</span> <span class="op">?</span></span> 244<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a>
244 <span class="fu">md</span><span class="vs">`Problem getting location`</span> <span class="op">:</span></span> 245<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">md</span><span class="vs">``</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 246<div class="cell-output cell-output-display hidden"> 247<div id="geolocate-debug-1"> 248<div id="ojs-cell-3-1" data-nodetype="expression"> 249 250</div> 251</div> 252</div> 253<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" data-startfrom="9" data-source-offset="-158"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 8;"><span id="cb4-9"><a href="#cb4-9" aria-hidden="true" tabindex="-1"></a>myLocation <span class="op">!=</span> <span class="kw">null</span> <span class="op">?</span></span> 254<span id="cb4-10"><a href="#cb4-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">md</span><span class="vs">`Location is lat: </span><span class="sc">${</span>myLocation<span class="op">.</span><span class="at">lat</span><span class="sc">}</span><span class="vs">, lon: </span><span class="sc">${</span>myLocation<span class="op">.</span><span class="at">lon</span><span class="sc">}</span><span class="vs">`</span> <span class="op">:</span></span> 255<span id="cb4-11"><a href="#cb4-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">md</span><span class="vs">`Location permission not granted`</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 256<div class="cell-output cell-output-display hidden"> 257<div id="geolocate-debug-2"> 258<div id="ojs-cell-3-2" data-nodetype="expression"> 259 260</div> 261</div> 262</div> 263</div> 264<div class="cell"> 265<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code hidden" id="cb5" data-startfrom="1" data-source-offset="0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="co">// on the home page, get station id from:</span></span> 266<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="co">// * _geolocator.qmd's myLocation, plus</span></span> 267<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a><span class="co">// * _map.qmd's statsAll</span></span> 268<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a></span> 269<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a>stationId <span class="op">=</span> {</span> 270<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a> </span> 271<span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a> <span class="co">// fallback to sydney?</span></span> 272<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> (myLocation <span class="op">==</span> <span class="kw">null</span>) {</span> 273<span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="st">"023000"</span></span> 274<span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a> }</span> 275<span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a></span> 276<span id="cb5-12"><a href="#cb5-12" aria-hidden="true" tabindex="-1"></a> <span class="co">// otherwise, find closest station on statsAll</span></span> 277<span id="cb5-13"><a href="#cb5-13" aria-hidden="true" tabindex="-1"></a> <span class="kw">const</span> closestStation <span class="op">=</span> aq<span class="op">.</span><span class="fu">from</span>(statsAll)</span> 278<span id="cb5-14"><a href="#cb5-14" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span><span class="fu">params</span>({</span> 279<span id="cb5-15"><a href="#cb5-15" aria-hidden="true" tabindex="-1"></a>
279 <span class="dt">currentLat</span><span class="op">:</span> myLocation<span class="op">.</span><span class="at">lat</span><span class="op">,</span></span> 280<span id="cb5-16"><a href="#cb5-16" aria-hidden="true" tabindex="-1"></a> <span class="dt">currentLon</span><span class="op">:</span> myLocation<span class="op">.</span><span class="at">lon</span><span class="op">,</span></span> 281<span id="cb5-17"><a href="#cb5-17" aria-hidden="true" tabindex="-1"></a> })</span> 282<span id="cb5-18"><a href="#cb5-18" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span><span class="fu">derive</span>({</span> 283<span id="cb5-19"><a href="#cb5-19" aria-hidden="true" tabindex="-1"></a> <span class="dt">dist</span><span class="op">:</span> (d<span class="op">,</span> $) <span class="kw">=></span> <span class="bu">Math</span><span class="op">.</span><span class="fu">sqrt</span>(</span> 284<span id="cb5-20"><a href="#cb5-20" aria-hidden="true" tabindex="-1"></a> ($<span class="op">.</span><span class="at">currentLat</span> <span class="op">-</span> d<span class="op">.</span><span class="at">isit_lat</span>) <span class="op">**</span> <span class="dv">2</span> <span class="op">+</span> ($<span class="op">.</span><span class="at">currentLon</span> <span class="op">-</span> d<span class="op">.</span><span class="at">isit_lon</span>) <span class="op">**</span> <span class="dv">2</span>)</span> 285<span id="cb5-21"><a href="#cb5-21" aria-hidden="true" tabindex="-1"></a> })</span> 286<span id="cb5-22"><a href="#cb5-22" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span><span class="fu">orderby</span>(<span class="st">"dist"</span>)</span> 287<span id="cb5-23"><a href="#cb5-23" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span><span class="fu">slice</span>(<span class="dv">0</span><span class="op">,</span> <span class="dv">1</span>)</span> 288<span id="cb5-24"><a href="#cb5-24" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span><span class="fu">array</span>(<span class="st">"id"</span>)</span> 289<span id="cb5-25"><a href="#cb5-25" aria-hidden="true" tabindex="-1"></a></span> 290<span id="cb5-26"><a href="#cb5-26" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> closestStation[<span class="dv">0</span>]</span> 291<span id="cb5-27"><a href="#cb5-27" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 292<div id="get-station-name" class="cell-output cell-output-display"> 293<div id="ojs-cell-4" data-nodetype="declaration"> 294 295</div> 296</div> 297</div> 298<div class="cell"> 299<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code hidden" id="cb6" data-startfrom="1" data-source-offset="0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>statsPlace <span class="op">=</span> <span class="fu">FA</span>(bucket_base <span class="op">+</span> <span class="st">"stats/stats_"</span> <span class="op">+</span> stationId <span class="op">+</span> <span class="st">".json"</span>)<span class="op">.</span><span class="fu">json</span>()</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 300<div id="load-data" class="cell-output cell-output-display"> 301<div id="ojs-cell-5" data-nodetype="declaration"> 302 303</div> 304</div> 305</div> 306<div class="column-screen page-columns page-full" style="height: 95svh;"> 307<div class="iihrn-headlines column-body" style="display: flex; flex-flow: column nowrap; justify-content: space-around; text-align: center; font-weight: bold;"> 308<p>Is it hot in <span><span id="ojs-element-id-1"></span></span> right now?</p> 309<div id="answer" class="cell"> 310<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" data-startfrom="3" data-source-offset="-55"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 2;"><span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a>answers <span class="op">=</span> ({</span> 311<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a> <span class="st">"Hell no!"</span><span class="op">:</span> {<span class="dt">color</span><span class="op">:</span> <span class="st">"white"</span><span class="op">,</span> <span class="dt">fill1</span><span class="op">:</span> <span class="st">"#5287d1"</span><span class="op">,</span> <span class="dt">fill2</span><span class="op">:</span> <span class="st">"#2166ac"</span> }<span class="op">,</span></span> 312<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a> <span class="st">"No!"</span><span class="op">:</span> {<span class="dt">color</span><span class="op">:</span> <span class="st">"white"</span><span class="op">,</span> <span class="dt">fill1</span><span class="op">:</span> <span class="st">"#a2cdeb"</span><span class="op">,</span> <span class="dt">fill2</span><span class="op">:</span> <span class="st">"#67a9cf"</span> }<span class="op">,</span></span> 313<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a> <span class="st">"Nope"</span><span class="op">:</span> {<span class="dt">color</span><span class="op">:</span> <span class="st">"#333333"</span><span class="op">,</span> <span class="dt">fill1</span><span class="op">:</span> <span class="st">"#f5f8fa"</span><span class="op">,</span> <span class="dt">fill2</span><span class="op">:</span> <span class="st">"#d1e5f0"</span> }<span class="op">,</span></span> 314<span id="cb7-7"><a href="#cb7-7" aria-hidden="true" tabindex="-1"></a> <span class="st">"Not really"</span><span class="op">:</span> {<span class="dt">color</span><span class="op">:</span> <span class="st">"#333333"</span><span class="op">,</span> <span class="dt">fill1</span><span class="op">:</span> <span class="st">"#f7f7f7"</span><span class="op">,</span> <span class="dt">fill2</span><span class="op">:</span> <span class="st">"#ebebeb"</span> }<span class="op">,</span></span> 315<span id="cb7-8"><a href="#cb7-8" aria-hidden="true" tabindex="-1"></a> <span class="st">"Yup"</span><span class="op">:</span> {<span class="dt">color</span><span class="op">:</span> <span class="st">"#333333"</span><span class="op">,</span> <span class="dt">fill1</span><span class="op">:</span> <span class="st">"#fddcca"</span><span class="op">,</span> <span class="dt">fill2</span><span class="op">:</span> <span class="st">"#f7cfb7"</span> }<span class="op">,</span></span> 316<span id="cb7-9"><a href="#cb7-9" aria-hidden="true" tabindex="-1"></a> <span class="st">"Yeah!"</span><span class="op">:</span> {<span class="dt">color</span><span class="op">:</span> <span class="st">"white"</span><span class="op">,</span> <span class="dt">fill1</span><span class="op">:</span> <span class="st">"#de7b49"</span><span class="op">,</span> <span class="dt">fill2</span><span class="op">:</span> <span class="st">"#fc946a"</span> }<span class="op">,</span></span> 317<span id="cb7-10"><a href="#cb7-10" aria-hidden="true" tabindex="-1"></a> <span class="st">"Hell yeah!"</span><span class="op">:</span> {<span class="dt">color</span><span class="op">:</span> <span class="st">"white"</span><span class="op">,</span> <span class="dt">fill1</span><span class="op">:</span> <span class="st">"#d1231d"</span><span class="op">,</span> <span class="dt">fill2</span><span class="op">:</span> <span class="st">"#b2182b"</span> }</span> 318<span id="cb7-11"><a href="#cb7-11" aria-hidden="true" tabindex="-1"></a>})</span> 319<span id="cb7-12"><a href="#cb7-12" aria-hidden="true" tabindex="-1"></a></span> 320<span id="cb7-13"><a href="#cb7-13" aria-hidden="true" tabindex="-1"></a><span class="fu">html</span><span class="vs">`</span></span> 321<span id="cb7-14"><a href="#cb7-14" aria-hidden="true" tabindex="-1"></a><span class="vs"><div class="answer-icon-and-label"></span></span> 322<span id="cb7-15"><a href="#cb7-15" aria-hidden="true" tabindex="-1"></a><span class="vs"> <span class="answer-icon" style="background-color: </span><span class="sc">${</span>answers[statsPlace<span class="op">.</span><span class="at">isit_answer</span>]<span class="op">.</span><span class="at">fill2</span><span class="sc">}</span><span class="vs">;"></span></span> 323<span id="cb7-16"><a href="#cb7-16" aria-hidden="true" tabindex="-1"></a><span class="vs"> </span></span></span> 324<span id="cb7-17"><a href="#cb7-17" aria-hidden="true" tabindex="-1"></a><span class="vs"> <span></span><span class="sc">${</span>statsPlace<span class="op">.</span><span class="at">isit_answer</span><span class="sc">}</span><span class="vs"></span></span></span> 325<span id="cb7-18"><a href="#cb7-18" aria-hidden="true" tabindex="-1"></a><span class="vs"></div>`</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 326<div class="cell-output cell-output-display"> 327<div id="answer-1"> 328<div id="ojs-cell-6-1" data-nodetype="declaration"> 329 330</div> 331</div> 332</div> 333<div class="cell-output cell-output-display"> 334<div id="answer-2"> 335<div id="ojs-cell-6-2" data-nodetype="expression"> 336 337</div> 338</div> 339</div> 340</div> 341<div class="cell"> 342<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" data-startfrom="0" data-source-offset="0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line -1;"><span id="cb8-0"><a href="#cb8-0" aria-hidden="true" tabindex="-1"></a><span class="fu">md</span><span class="vs">`</span><span class="sc">${</span>statsPlace<span class="op">.</span><span class="at">isit_comment</span><span class="sc">}</span><span class="vs">`</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 343<div id="comment" class="cell-output cell-output-display"> 344<div id="ojs-cell-7" data-nodetype="expression"> 345 346</div> 347</div> 348</div> 349<a id="btn-digdeeper" href="#detail"> 350 <i class="bi bi-arrow-down-circle-fill"></i> 351</a> 352</div> 353</div> 354<div class="iihrn-section page-columns page-full" style="background: #eee"> 355<section id="detail" class="level1 column-page"> 356 357<div class="grid"> 358<div class="g-col-12 g-col-md-4" style="margin-block: auto;"> 359<div id="datetime-formatting" class="cell"> 360<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" data-startfrom="1" data-source-offset="-0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>datefns <span class="op">=</span> <span class="im">
360import</span>(<span class="st">"https://cdn.skypack.dev/[email protected]?min"</span>)</span> 361<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a>tmaxWhen <span class="op">=</span> <span class="kw">new</span> <span class="bu">Date</span>(<span class="bu">Date</span><span class="op">.</span><span class="fu">parse</span>(statsPlace<span class="op">.</span><span class="at">isit_maximum_dt</span> <span class="op">||</span> <span class="kw">null</span>))</span> 362<span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a>tminWhen <span class="op">=</span> <span class="kw">new</span> <span class="bu">Date</span>(<span class="bu">Date</span><span class="op">.</span><span class="fu">parse</span>(statsPlace<span class="op">.</span><span class="at">isit_minimum_dt</span> <span class="op">||</span> <span class="kw">null</span>))</span> 363<span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a></span> 364<span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a>tmaxWhenFriendly <span class="op">=</span> <span class="pp">isFinite</span>(tmaxWhen) <span class="op">?</span></span> 365<span id="cb9-6"><a href="#cb9-6" aria-hidden="true" tabindex="-1"></a> datefns<span class="op">.</span><span class="fu">formatRelative</span>(tmaxWhen<span class="op">,</span> <span class="kw">new</span> <span class="bu">Date</span>()) <span class="op">:</span> <span class="st">""</span></span> 366<span id="cb9-7"><a href="#cb9-7" aria-hidden="true" tabindex="-1"></a>tminWhenFriendly <span class="op">=</span> <span class="pp">isFinite</span>(tminWhen) <span class="op">?</span></span> 367<span id="cb9-8"><a href="#cb9-8" aria-hidden="true" tabindex="-1"></a> datefns<span class="op">.</span><span class="fu">formatRelative</span>(tminWhen<span class="op">,</span> <span class="kw">new</span> <span class="bu">Date</span>()) <span class="op">:</span> <span class="st">""</span></span> 368<span id="cb9-9"><a href="#cb9-9" aria-hidden="true" tabindex="-1"></a></span> 369<span id="cb9-10"><a href="#cb9-10" aria-hidden="true" tabindex="-1"></a>percentRating <span class="op">=</span> statsPlace<span class="op">.</span><span class="at">isit_average</span><span class="op">.</span><span class="fu">toFixed</span>(<span class="dv">1</span>) <span class="op">+</span> <span class="st">"%"</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 370<div class="cell-output cell-output-display"> 371<div id="datetime-formatting-1"> 372<div id="ojs-cell-8-1" data-nodetype="declaration"> 373 374</div> 375</div> 376</div> 377<div class="cell-output cell-output-display"> 378<div id="datetime-formatting-2"> 379<div id="ojs-cell-8-2" data-nodetype="declaration"> 380 381</div> 382</div> 383</div> 384<div class="cell-output cell-output-display"> 385<div id="datetime-formatting-3"> 386<div id="ojs-cell-8-3" data-nodetype="declaration"> 387 388</div> 389</div> 390</div> 391<div class="cell-output cell-output-display"> 392<div id="datetime-formatting-4"> 393<div id="ojs-cell-8-4" data-nodetype="declaration"> 394 395</div> 396</div> 397</div> 398<div class="cell-output cell-output-display"> 399<div id="datetime-formatting-5"> 400<div id="ojs-cell-8-5" data-nodetype="declaration"> 401 402</div> 403</div> 404</div> 405<div class="cell-output cell-output-display"> 406<div id="datetime-formatting-6"> 407<div id="ojs-cell-8-6" data-nodetype="declaration"> 408 409</div> 410</div> 411</div> 412</div> 413<div class="tmaxmin-block"> 414<div class="tmaxmin-chip"> 415<p><i class="bi bi-moon"></i></p> 416<div id="tmin" class="cell"> 417<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" data-startfrom="2" data-source-offset="-1"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 1;"><span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a><span class="fu">md</span><span class="vs">`</span><span class="sc">${</span>statsPlace<span class="op">.</span><span class="at">isit_minimum</span><span class="sc">}</span><span class="vs"> °C `</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 418<div class="cell-output cell-output-display"> 419<div id="tmin-1"> 420<div id="ojs-cell-9-1" data-nodetype="expression"> 421 422</div> 423</div> 424</div> 425<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" data-startfrom="3" data-source-offset="-37"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 2;"><span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a><span class="fu">md</span><span class="vs">`</span><span class="sc">${</span>tminWhenFriendly<span class="sc">}</span><span class="vs">`</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 426<div class="cell-output cell-output-display"> 427<div id="tmin-2"> 428<div id="ojs-cell-9-2" data-nodetype="expression"> 429 430</div> 431</div> 432</div> 433</div> 434</div> 435<div class="tmaxmin-chip"> 436<p><i class="bi bi-brightness-high"></i></p> 437<div id="tmax" class="cell"> 438<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" data-startfrom="2" data-source-offset="-1"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 1;"><span id="cb12-2"><a href="#cb12-2" aria-hidden="true" tabindex="-1"></a><span class="fu">md</span><span class="vs">`</span><span class="sc">${</span>statsPlace<span class="op">.</span><span class="at">isit_maximum</span><span class="sc">}</span><span class="vs"> °C `</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 439<div class="cell-output cell-output-display"> 440<div id="tmax-1"> 441<div id="ojs-cell-10-1" data-nodetype="expression"> 442 443</div> 444</div> 445</div> 446<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" data-startfrom="3" data-source-offset="-37"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 2;"><span id="cb13-3"><a href="#cb13-3" aria-hidden="true" tabindex="-1"></a><span class="fu">md</span><span class="vs">`</span><span class="sc">${</span>tmaxWhenFriendly<span class="sc">}</span><span class="vs">`</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 447<div class="cell-output cell-output-display"> 448<div id="tmax-2"> 449<div id="ojs-cell-10-2" data-nodetype="expression"> 450 451</div> 452</div> 453</div> 454</div> 455</div> 456</div> 457<div class="tavg-block"> 458<div id="tavg" class="cell"> 459<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb14" data-startfrom="1" data-source-offset="-0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="fu">html</span><span class="vs">`</span></span> 460<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a><span class="vs"><div class="answer-icon-and-label"></span></span> 461<span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a><span class="vs"> <span class="answer-icon" style="background-color: </span><span class="sc">${</span>answers[statsPlace<span class="op">.</span><span class="at">isit_answer</span>]<span class="op">.</span><span class="at">fill2</span><span class="sc">}</span><span class="vs">;"></span></span></span> 462<span id="cb14-4"><a href="#cb14-4" aria-hidden="true" tabindex="-1"></a><span class="vs"> <span></span><span class="sc">${</span>statsPlace<span class="op">.</span><span class="at">isit_current</span><span class="op">.</span><span class="fu">toFixed</span>(<span class="dv">1</span>)<span class="sc">}</span><span class="vs"> °C</span></span></span> 463<span id="cb14-5"><a href="#cb14-5" aria-hidden="true" tabindex="-1"></a><span class="vs"></div>`</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 464<div class="cell-output cell-output-display"> 465<div id="tavg-1"> 466<div id="ojs-cell-11-1" data-nodetype="expression"> 467 468</div> 469</div> 470</div> 471<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" data-startfrom="6" data-source-offset="-210"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 5;"><span id="cb15-6"><a href="#cb15-6" aria-hidden="true" tabindex="-1"></a><span class="fu">md</span><span class="vs">`Average so far<br>hotter than **</span><span class="sc">${</span>percentRating<span class="sc">}</span><span class="vs">** of days for this time of year.`</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 472<div class="cell-output cell-output-display"> 473<div id="tavg-2"> 474<div id="ojs-cell-11-2" data-nodetype="expression"> 475 476</div> 477</div> 478</div> 479</div> 480</div> 481</div> 482<div class="g-col-12 g-col-md-8"> 483<div class="cell iihrn-figure"> 484<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code hidden" id="cb16" data-startfrom="2" data-source-offset="0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 1;"><span id="cb16-2"><a href="#cb16-2" aria-hidden="true" tabindex="-1"></a><span class="fu">md</span><span class="vs">``</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 485<div id="ts" class="cell-output cell-output-display"> 486<div id="ojs-cell-12" data-nodetype="expression"> 487 488</div> 489</div> 490</div> 491</div> 492</div> 493<div class="grid" style="margin-top: 2rem;"> 494<div class="g-col-12 g-col-md-4" style="margin-block: auto;"> 495<p>This is the distribution of temperatures typical for this time of year, which weâve defined as a seven day window either side of today. Just like a bell curve, the plot is higher at more common temperatures and lower at rare temperatures.</p> 496</div> 497<div class="g-col-12 g-col-md-8"> 498<div class="cell iihrn-figure"> 499<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code hidden" id="cb17" data-startfrom="2" data-source-offset="0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 1;"><span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a><span class="fu">md</span><span class="vs">``</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 500<div id="dist" class="cell-output cell-output-display"> 501<div id="ojs-cell-13" data-nodetype="expression"> 502 503</div> 504</div> 505</div> 506</div> 507</div> 508</section> 509</div> 510<div class="iihrn-section page-columns page-full" style="background: #ddd;"> 511<section id="and-the-rest-of-the-year." class="level1 column-page container"> 512<h1>⦠and the rest of the year.</h1> 513<p>
513Weâve compared every day this year at <strong> <span><span id="ojs-element-id-2"></span></span></strong> to similar times of year in the past. Red days were hot compared to records; blue days were cold.</p> 514<div id="hw" class="cell iihrn-figure"> 515<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code hidden" id="cb18" data-startfrom="3" data-source-offset="-0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 2;"><span id="cb18-3"><a href="#cb18-3" aria-hidden="true" tabindex="-1"></a>heatmapYear <span class="op">=</span> (<span class="kw">new</span> <span class="bu">Date</span>())<span class="op">.</span><span class="fu">toLocaleString</span>(<span class="st">"en-US"</span><span class="op">,</span> {<span class="dt">timeZone</span><span class="op">:</span> <span class="st">"Australia/Melbourne"</span><span class="op">,</span> <span class="dt">year</span><span class="op">:</span> <span class="st">"numeric"</span>})</span> 516<span id="cb18-4"><a href="#cb18-4" aria-hidden="true" tabindex="-1"></a><span class="fu">md</span><span class="vs">``</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 517<div class="cell-output cell-output-display"> 518<div id="hw-1"> 519<div id="ojs-cell-14-1" data-nodetype="declaration"> 520 521</div> 522</div> 523</div> 524<div class="cell-output cell-output-display"> 525<div id="hw-2"> 526<div id="ojs-cell-14-2" data-nodetype="expression"> 527 528</div> 529</div> 530</div> 531</div> 532</section> 533</div> 534<div id="map-section" class="iihrn-section page-columns page-full"> 535<div class="column-page-inset grid"> 536<div class="g-col-12 g-col-md-4"> 537<section id="heres-how-the-rest-of-australia-looks-today-so-far." class="level1" style="display:flex; flex-direction: column; justify-content: center; text-align: center; height: 100%;"> 538<h1>Hereâs how the rest of Australia looks today so far.</h1> 539<div id="time-of-day-message" class="cell"> 540<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb19" data-startfrom="1" data-source-offset="-0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a>nowHour <span class="op">=</span> (<span class="kw">new</span> <span class="bu">Date</span>())<span class="op">.</span><span class="fu">getUTCHours</span>()</span> 541<span id="cb19-2"><a href="#cb19-2" aria-hidden="true" tabindex="-1"></a>nowHour <span class="op">>=</span> <span class="dv">10</span> <span class="op">&&</span> nowHour <span class="op"><=</span> <span class="dv">22</span> <span class="op">?</span></span> 542<span id="cb19-3"><a href="#cb19-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">md</span><span class="vs">`Some places may still be cooling off as the night continues.`</span> <span class="op">:</span></span> 543<span id="cb19-4"><a href="#cb19-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">md</span><span class="vs">`Some places may still be heating up as the day continues.`</span></span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 544<div class="cell-output cell-output-display"> 545<div id="time-of-day-message-1"> 546<div id="ojs-cell-15-1" data-nodetype="declaration"> 547 548</div> 549</div> 550</div> 551<div class="cell-output cell-output-display"> 552<div id="time-of-day-message-2"> 553<div id="ojs-cell-15-2" data-nodetype="expression"> 554 555</div> 556</div> 557</div> 558</div> 559</section> 560</div> 561<div class="g-col-12 g-col-md-8" style="display: flex; flex-direction: column; justify-content: center;"> 562<div id="load-map-data" class="cell" data-error="false"> 563<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code hidden" id="cb20" data-startfrom="4" data-source-offset="-1"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 3;"><span id="cb20-4"><a href="#cb20-4" aria-hidden="true" tabindex="-1"></a>statsAllRaw <span class="op">=</span> <span class="fu">FA</span>(bucket_base <span class="op">+</span> <span class="st">"stats/stats_all.json"</span>)<span class="op">.</span><span class="fu">json</span>()</span> 564<span id="cb20-5"><a href="#cb20-5" aria-hidden="true" tabindex="-1"></a></span> 565<span id="cb20-6"><a href="#cb20-6" aria-hidden="true" tabindex="-1"></a><span class="co">// statsAllRaw is an object with keys by station id, but we</span></span> 566<span id="cb20-7"><a href="#cb20-7" aria-hidden="true" tabindex="-1"></a><span class="co">// need an array with an id field. let's move the ids in</span></span> 567<span id="cb20-8"><a href="#cb20-8" aria-hidden="true" tabindex="-1"></a>statsAll <span class="op">=</span> {</span> 568<span id="cb20-9"><a href="#cb20-9" aria-hidden="true" tabindex="-1"></a> <span class="kw">const</span> statsArray <span class="op">=</span> []</span> 569<span id="cb20-10"><a href="#cb20-10" aria-hidden="true" tabindex="-1"></a> <span class="bu">Object</span><span class="op">.</span><span class="fu">keys</span>(statsAllRaw)<span class="op">.</span><span class="fu">map</span>(k <span class="kw">=></span> statsArray<span class="op">.</span><span class="fu">push</span>({<span class="op">...</span>statsAllRaw[k]<span class="op">,</span> <span class="dt">id</span><span class="op">:</span> k}))</span> 570<span id="cb20-11"><a href="#cb20-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">const</span> tidiedStats <span class="op">=</span> aq<span class="op">.</span><span class="fu">from</span>(statsArray)</span> 571<span id="cb20-12"><a href="#cb20-12" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span><span class="fu">derive</span>({</span> 572<span id="cb20-13"><a href="#cb20-13" aria-hidden="true" tabindex="-1"></a>
572 <span class="dt">lat</span><span class="op">:</span> d <span class="kw">=></span> op<span class="op">.</span><span class="fu">parse_float</span>(d<span class="op">.</span><span class="at">isit_lat</span>)<span class="op">,</span></span> 573<span id="cb20-14"><a href="#cb20-14" aria-hidden="true" tabindex="-1"></a> <span class="dt">lon</span><span class="op">:</span> d <span class="kw">=></span> op<span class="op">.</span><span class="fu">parse_float</span>(d<span class="op">.</span><span class="at">isit_lon</span>)<span class="op">,</span></span> 574<span id="cb20-15"><a href="#cb20-15" aria-hidden="true" tabindex="-1"></a> <span class="dt">isit_average</span><span class="op">:</span> d <span class="kw">=></span> op<span class="op">.</span><span class="fu">parse_float</span>(d<span class="op">.</span><span class="at">isit_average</span>)<span class="op">,</span></span> 575<span id="cb20-16"><a href="#cb20-16" aria-hidden="true" tabindex="-1"></a> <span class="co">// current? (that's the actual avg temp)</span></span> 576<span id="cb20-17"><a href="#cb20-17" aria-hidden="true" tabindex="-1"></a>
576 <span class="dt">isit_maximum</span><span class="op">:</span> d <span class="kw">=></span> op<span class="op">.</span><span class="fu">parse_float</span>(d<span class="op">.</span><span class="at">isit_maximum</span>)<span class="op">,</span></span> 577<span id="cb20-18"><a href="#cb20-18" aria-hidden="true" tabindex="-1"></a> <span class="dt">isit_minimum</span><span class="op">:</span> d <span class="kw">=></span> op<span class="op">.</span><span class="fu">parse_float</span>(d<span class="op">.</span><span class="at">isit_minimum</span>)<span class="op">,</span></span> 578<span id="cb20-19"><a href="#cb20-19" aria-hidden="true" tabindex="-1"></a> <span class="dt">max_when</span><span class="op">:</span> d <span class="kw">=></span> op<span class="op">.</span><span class="fu">parse_date</span>(d<span class="op">.</span><span class="at">isit_maximum_dt</span>)<span class="op">,</span></span> 579<span id="cb20-20"><a href="#cb20-20" aria-hidden="true" tabindex="-1"></a> <span class="dt">min_when</span><span class="op">:</span> d <span class="kw">=></span> op<span class="op">.</span><span class="fu">parse_date</span>(d<span class="op">.</span><span class="at">isit_minimum_dt</span>)<span class="op">,</span></span> 580<span id="cb20-21"><a href="#cb20-21" aria-hidden="true" tabindex="-1"></a>
580 <span class="dt">slug</span><span class="op">:</span> d <span class="kw">=></span></span> 581<span id="cb20-22"><a href="#cb20-22" aria-hidden="true" tabindex="-1"></a> op<span class="op">.</span><span class="fu">replace</span>(</span> 582<span id="cb20-23"><a href="#cb20-23" aria-hidden="true" tabindex="-1"></a> op<span class="op">.</span><span class="fu">replace</span>(</span> 583<span id="cb20-24"><a href="#cb20-24" aria-hidden="true" tabindex="-1"></a> op<span class="op">.</span><span class="fu">replace</span>(</span> 584<span id="cb20-25"><a href="#cb20-25" aria-hidden="true" tabindex="-1"></a> op<span class="op">.</span><span class="fu">lower</span>(d<span class="op">.</span><span class="at">isit_label</span>)<span class="op">,</span></span> 585<span id="cb20-26"><a href="#cb20-26" aria-hidden="true" tabindex="-1"></a> <span class="ss">/</span><span class="sc">\s</span><span class="ss">-</span><span class="sc">\s</span><span class="ss">/g</span><span class="op">,</span> <span class="st">"-"</span>)<span class="op">,</span></span> 586<span id="cb20-27"><a href="#cb20-27" aria-hidden="true" tabindex="-1"></a> <span class="ss">/</span><span class="sc">\s</span><span class="ss">/g</span><span class="op">,</span> <span class="st">"-"</span>)<span class="op">,</span></span> 587<span id="cb20-28"><a href="#cb20-28" aria-hidden="true" tabindex="-1"></a> <span class="ss">/</span><span class="sc">[()]</span><span class="ss">/g</span><span class="op">,</span> <span class="st">""</span>)</span> 588<span id="cb20-29"><a href="#cb20-29" aria-hidden="true" tabindex="-1"></a> })</span> 589<span id="cb20-30"><a href="#cb20-30" aria-hidden="true" tabindex="-1"></a> <span class="co">
589// mark as stale if latest obs are > 24 hours old</span></span> 590<span id="cb20-31"><a href="#cb20-31" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span><span class="fu">derive</span>({</span> 591<span id="cb20-32"><a href="#cb20-32" aria-hidden="true" tabindex="-1"></a> <span class="dt">max_stale</span><span class="op">:</span></span> 592<span id="cb20-33"><a href="#cb20-33" aria-hidden="true" tabindex="-1"></a> d <span class="kw">=></span> ((d<span class="op">.</span><span class="at">max_when</span> <span class="op">-</span> op<span class="op">.</span><span class="fu">now</span>()) <span class="op">/</span> (<span class="dv">1000</span> <span class="op">*</span> <span class="dv">60</span>)) <span class="op">/</span> (<span class="dv">24</span> <span class="op">*</span> <span class="dv">60</span>) <span class="op">></span> <span class="dv">1</span><span class="op">,</span></span> 593<span id="cb20-34"><a href="#cb20-34" aria-hidden="true" tabindex="-1"></a> <span class="dt">min_stale</span><span class="op">:</span></span> 594<span id="cb20-35"><a href="#cb20-35" aria-hidden="true" tabindex="-1"></a> d <span class="kw">=></span> ((d<span class="op">.</span><span class="at">min_when</span> <span class="op">-</span> op<span class="op">.</span><span class="fu">now</span>()) <span class="op">/</span> (<span class="dv">1000</span> <span class="op">*</span> <span class="dv">60</span>)) <span class="op">/</span> (<span class="dv">24</span> <span class="op">*</span> <span class="dv">60</span>) <span class="op">></span> <span class="dv">1</span></span> 595<span id="cb20-36"><a href="#cb20-36" aria-hidden="true" tabindex="-1"></a> })</span> 596<span id="cb20-37"><a href="#cb20-37" aria-hidden="true" tabindex="-1"></a> <span class="op">.</span><span class="fu">objects</span>()</span> 597<span id="cb20-38"><a href="#cb20-38" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span>(tidiedStats)</span> 598<span id="cb20-39"><a href="#cb20-39" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 599<div class="cell-output cell-output-display"> 600<div id="load-map-data-1"> 601<div id="ojs-cell-16-1" data-nodetype="declaration"> 602 603</div> 604</div> 605</div> 606<div class="cell-output cell-output-display"> 607<div id="load-map-data-2"> 608<div id="ojs-cell-16-2" data-nodetype="declaration"> 609 610</div> 611</div> 612</div> 613</div> 614<div id="filter-points" class="cell"> 615<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb21" data-startfrom="1" data-source-offset="-0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a>currentStats <span class="op">=</span> statsAll<span class="op">.</span><span class="fu">filter</span>(d <span class="kw">=></span> (<span class="op">!</span>d<span class="op">.</span><span class="at">max_stale</span>) <span class="op">&&</span> (<span class="op">!</span>d<span class="op">.</span><span class="at">min_stale</span>))</span> 616<span id="cb21-2"><a href="#cb21-2" aria-hidden="true" tabindex="-1"></a>staleStats <span class="op">=</span> statsAll<span class="op">.</span><span class="fu">filter</span>(d <span class="kw">=></span> d<span class="op">.</span><span class="at">max_stale</span> <span class="op">||</span> d<span class="op">.</span><span class="at">min_stale</span>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 617<div class="cell-output cell-output-display"> 618<div id="filter-points-1"> 619<div id="ojs-cell-17-1" data-nodetype="declaration"> 620 621</div> 622</div> 623</div> 624<div class="cell-output cell-output-display"> 625<div id="filter-points-2"> 626<div id="ojs-cell-17-2" data-nodetype="declaration"> 627 628</div> 629</div> 630</div> 631</div> 632<div id="draw-map" class="cell iihrn-map" data-error="false"> 633<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code hidden" id="cb22" data-startfrom="5" data-source-offset="-1"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line 4;"><span id="cb22-5"><a href="#cb22-5" aria-hidden="true" tabindex="-1"></a>australia <span class="op">=</span> <span class="fu">FileAttachment</span>(<span class="st">"/assets/australia.geojson"</span>)<span class="op">.</span><span class="fu">json</span>()</span> 634<span id="cb22-6"><a href="#cb22-6" aria-hidden="true" tabindex="-1"></a></span> 635<span id="cb22-7"><a href="#cb22-7" aria-hidden="true" tabindex="-1"></a>
635Plot <span class="op">=</span> <span class="im">import</span>(<span class="st">"https://esm.run/@observablehq/plot"</span>)</span> 636<span id="cb22-8"><a href="#cb22-8" aria-hidden="true" tabindex="-1"></a></span> 637<span id="cb22-9"><a href="#cb22-9" aria-hidden="true" tabindex="-1"></a>answer_domain <span class="op">=</span> [</span> 638<span id="cb22-10"><a href="#cb22-10" aria-hidden="true" tabindex="-1"></a> <span class="st">"Hell no!"</span><span class="op">,</span></span> 639<span id="cb22-11"><a href="#cb22-11" aria-hidden="true" tabindex="-1"></a> <span class="st">"No!"</span><span class="op">,</span></span> 640<span id="cb22-12"><a href="#cb22-12" aria-hidden="true" tabindex="-1"></a> <span class="st">"Nope"</span><span class="op">,</span></span> 641<span id="cb22-13"><a href="#cb22-13" aria-hidden="true" tabindex="-1"></a> <span class="st">"Not really"</span><span class="op">,</span></span> 642<span id="cb22-14"><a href="#cb22-14" aria-hidden="true" tabindex="-1"></a> <span class="st">"Yup"</span><span class="op">,</span></span> 643<span id="cb22-15"><a href="#cb22-15" aria-hidden="true" tabindex="-1"></a> <span class="st">"Yeah!"</span><span class="op">,</span></span> 644<span id="cb22-16"><a href="#cb22-16" aria-hidden="true" tabindex="-1"></a> <span class="st">"Hell yeah!"</span>]</span> 645<span id="cb22-17"><a href="#cb22-17" aria-hidden="true" tabindex="-1"></a></span> 646<span id="cb22-18"><a href="#cb22-18" aria-hidden="true" tabindex="-1"></a>Plot<span class="op">.</span><span class="fu">plot</span>({</span> 647<span id="cb22-19"><a href="#cb22-19" aria-hidden="true" tabindex="-1"></a> <span class="dt">projection</span><span class="op">:</span> {</span> 648<span id="cb22-20"><a href="#cb22-20" aria-hidden="true" tabindex="-1"></a> <span class="dt">type</span><span class="op">:</span> <span class="st">"equirectangular"</span><span class="op">,</span></span> 649<span id="cb22-21"><a href="#cb22-21" aria-hidden="true" tabindex="-1"></a> <span class="dt">rotate</span><span class="op">:</span> [<span class="op">-</span><span class="dv">133</span><span class="op">,</span> <span class="dv">28</span>]<span class="op">,</span></span> 650<span id="cb22-22"><a href="#cb22-22" aria-hidden="true" tabindex="-1"></a> <span class="dt">domain</span><span class="op">:</span> d3<span class="op">.</span><span class="fu">geoCircle</span>()<span class="op">.</span><span class="fu">center</span>([<span class="dv">133</span><span class="op">,</span> <span class="op">-</span><span class="dv">28</span>])<span class="op">.</span><span class="fu">radius</span>(<span class="dv">18</span>)()</span> 651<span id="cb22-23"><a href="#cb22-23" aria-hidden="true" tabindex="-1"></a> }<span class="op">,</span></span> 652<span id="cb22-24"><a href="#cb22-24" aria-hidden="true" tabindex="-1"></a> <span class="dt">marks</span><span class="op">:</span> [</span> 653<span id="cb22-25"><a href="#cb22-25" aria-hidden="true" tabindex="-1"></a> <span class="co">// Plot.graticule(),</span></span> 654<span id="cb22-26"><a href="#cb22-26" aria-hidden="true" tabindex="-1"></a> Plot<span class="op">.</span><span class="fu">geo</span>(australia<span class="op">,</span> {</span> 655<span id="cb22-27"><a href="#cb22-27" aria-hidden="true" tabindex="-1"></a>
655 <span class="dt">fill</span><span class="op">:</span> <span class="st">"#00000009"</span><span class="op">,</span></span> 656<span id="cb22-28"><a href="#cb22-28" aria-hidden="true" tabindex="-1"></a> <span class="dt">stroke</span><span class="op">:</span> <span class="st">"#dddddd"</span></span> 657<span id="cb22-29"><a href="#cb22-29" aria-hidden="true" tabindex="-1"></a> })<span class="op">,</span></span> 658<span id="cb22-30"><a href="#cb22-30" aria-hidden="true" tabindex="-1"></a> <span class="co">// replace stale locations with crosses</span></span> 659<span id="cb22-31"><a href="#cb22-31" aria-hidden="true" tabindex="-1"></a> Plot<span class="op">.</span><span class="fu">dot</span>(staleStats<span class="op">,</span> {</span> 660<span id="cb22-32"><a href="#cb22-32" aria-hidden="true" tabindex="-1"></a> <span class="dt">x</span><span class="op">:</span> <span class="st">"lon"</span><span class="op">,</span></span> 661<span id="cb22-33"><a href="#cb22-33" aria-hidden="true" tabindex="-1"></a> <span class="dt">y</span><span class="op">:</span> <span class="st">"lat"</span><span class="op">,</span></span> 662<span id="cb22-34"><a href="#cb22-34" aria-hidden="true" tabindex="-1"></a>
662 <span class="dt">stroke</span><span class="op">:</span> <span class="st">"lightgrey"</span><span class="op">,</span></span> 663<span id="cb22-35"><a href="#cb22-35" aria-hidden="true" tabindex="-1"></a> <span class="dt">r</span><span class="op">:</span> <span class="dv">6</span><span class="op">,</span></span> 664<span id="cb22-36"><a href="#cb22-36" aria-hidden="true" tabindex="-1"></a> <span class="dt">symbol</span><span class="op">:</span> <span class="st">"times"</span></span> 665<span id="cb22-37"><a href="#cb22-37" aria-hidden="true" tabindex="-1"></a> })<span class="op">,</span></span> 666<span id="cb22-38"><a href="#cb22-38" aria-hidden="true" tabindex="-1"></a> Plot<span class="op">.</span><span class="fu">dot</span>(currentStats<span class="op">,</span> {</span> 667<span id="cb22-39"><a href="#cb22-39" aria-hidden="true" tabindex="-1"></a> <span class="dt">x</span><span class="op">:</span> <span class="st">"lon"</span><span class="op">,</span></span> 668<span id="cb22-40"><a href="#cb22-40" aria-hidden="true" tabindex="-1"></a>
668 <span class="dt">y</span><span class="op">:</span> <span class="st">"lat"</span><span class="op">,</span></span> 669<span id="cb22-41"><a href="#cb22-41" aria-hidden="true" tabindex="-1"></a> <span class="dt">fill</span><span class="op">:</span> <span class="st">"isit_answer"</span><span class="op">,</span></span> 670<span id="cb22-42"><a href="#cb22-42" aria-hidden="true" tabindex="-1"></a> <span class="dt">stroke</span><span class="op">:</span> d <span class="kw">=></span></span> 671<span id="cb22-43"><a href="#cb22-43" aria-hidden="true" tabindex="-1"></a> d<span class="op">.</span><span class="at">isit_answer</span> <span class="op">==</span> <span class="st">"Hell no!"</span> <span class="op">||</span> d<span class="op">.</span><span class="at">isit_answer</span> <span class="op">==</span> <span class="st">"Hell yeah!"</span> <span class="op">?</span></span> 672<span id="cb22-44"><a href="#cb22-44" aria-hidden="true" tabindex="-1"></a> <span class="st">"black"</span> <span class="op">:</span></span> 673<span id="cb22-45"><a href="#cb22-45" aria-hidden="true" tabindex="-1"></a> <span class="st">"#00000099"</span><span class="op">,</span></span> 674<span id="cb22-46"><a href="#cb22-46" aria-hidden="true" tabindex="-1"></a>
674 <span class="dt">strokeWidth</span><span class="op">:</span> <span class="fl">0.75</span><span class="op">,</span></span> 675<span id="cb22-47"><a href="#cb22-47" aria-hidden="true" tabindex="-1"></a> <span class="dt">r</span><span class="op">:</span> <span class="dv">6</span><span class="op">,</span></span> 676<span id="cb22-48"><a href="#cb22-48" aria-hidden="true" tabindex="-1"></a> })<span class="op">,</span></span> 677<span id="cb22-49"><a href="#cb22-49" aria-hidden="true" tabindex="-1"></a> Plot<span class="op">.</span><span class="fu">tip</span>(currentStats<span class="op">,</span> tipTemplate)<span class="op">,</span></span> 678<span id="cb22-50"><a href="#cb22-50" aria-hidden="true" tabindex="-1"></a> <span class="co">// enlarge dot you're pointing to</span></span> 679<span id="cb22-51"><a href="#cb22-51" aria-hidden="true" tabindex="-1"></a> Plot<span class="op">.</span><span class="fu">dot</span>(currentStats<span class="op">,</span> Plot<span class="op">.</span><span class="fu">pointer</span>({</span> 680<span id="cb22-52"><a href="#cb22-52" aria-hidden="true" tabindex="-1"></a>
680 <span class="dt">x</span><span class="op">:</span> <span class="st">"lon"</span><span class="op">,</span></span> 681<span id="cb22-53"><a href="#cb22-53" aria-hidden="true" tabindex="-1"></a> <span class="dt">y</span><span class="op">:</span> <span class="st">"lat"</span><span class="op">,</span></span> 682<span id="cb22-54"><a href="#cb22-54" aria-hidden="true" tabindex="-1"></a> <span class="dt">fill</span><span class="op">:</span> <span class="st">"isit_answer"</span><span class="op">,</span></span> 683<span id="cb22-55"><a href="#cb22-55" aria-hidden="true" tabindex="-1"></a> <span class="dt">stroke</span><span class="op">:</span> d <span class="kw">=></span></span> 684<span id="cb22-56"><a href="#cb22-56" aria-hidden="true" tabindex="-1"></a> d<span class="op">.</span><span class="at">isit_answer</span> <span class="op">==</span> <span class="st">"Hell no!"</span> <span class="op">||</span> d<span class="op">.</span><span class="at">isit_answer</span> <span class="op">==</span> <span class="st">"Hell yeah!"</span> <span class="op">?</span></span> 685<span id="cb22-57"><a href="#cb22-57" aria-hidden="true" tabindex="-1"></a> <span class="st">"black"</span> <span class="op">:</span></span> 686<span id="cb22-58"><a href="#cb22-58" aria-hidden="true" tabindex="-1"></a> <span class="st">"#00000099"</span><span class="op">,</span></span> 687<span id="cb22-59"><a href="#cb22-59" aria-hidden="true" tabindex="-1"></a>
687 <span class="dt">strokeWidth</span><span class="op">:</span> <span class="fl">0.75</span><span class="op">,</span></span> 688<span id="cb22-60"><a href="#cb22-60" aria-hidden="true" tabindex="-1"></a> <span class="dt">r</span><span class="op">:</span> <span class="dv">12</span><span class="op">,</span></span> 689<span id="cb22-61"><a href="#cb22-61" aria-hidden="true" tabindex="-1"></a> }))<span class="op">,</span></span> 690<span id="cb22-62"><a href="#cb22-62" aria-hidden="true" tabindex="-1"></a> <span class="co">// enlargen clickable areas with invisible voronoi polys</span></span> 691<span id="cb22-63"><a href="#cb22-63" aria-hidden="true" tabindex="-1"></a> Plot<span class="op">.</span><span class="fu">voronoi</span>(currentStats<span class="op">,</span> {</span> 692<span id="cb22-64"><a href="#cb22-64" aria-hidden="true" tabindex="-1"></a> <span class="dt">x</span><span class="op">:</span> <span class="st">"lon"</span><span class="op">,</span></span> 693<span id="cb22-65"><a href="#cb22-65" aria-hidden="true" tabindex="-1"></a>
693 <span class="dt">y</span><span class="op">:</span> <span class="st">"lat"</span><span class="op">,</span></span> 694<span id="cb22-66"><a href="#cb22-66" aria-hidden="true" tabindex="-1"></a> <span class="dt">fill</span><span class="op">:</span> <span class="st">"transparent"</span><span class="op">,</span></span> 695<span id="cb22-67"><a href="#cb22-67" aria-hidden="true" tabindex="-1"></a> <span class="dt">stroke</span><span class="op">:</span> <span class="st">"transparent"</span><span class="op">,</span></span> 696<span id="cb22-68"><a href="#cb22-68" aria-hidden="true" tabindex="-1"></a> <span class="dt">href</span><span class="op">:</span> d <span class="kw">=></span> <span class="st">"/places/"</span> <span class="op">+</span> d<span class="op">.</span><span class="at">slug</span><span class="op">,</span></span> 697<span id="cb22-69"><a href="#cb22-69" aria-hidden="true" tabindex="-1"></a> })<span class="op">,</span></span> 698<span id="cb22-70"><a href="#cb22-70" aria-hidden="true" tabindex="-1"></a></span> 699<span id="cb22-71"><a href="#cb22-71" aria-hidden="true" tabindex="-1"></a> ]<span class="op">,</span></span> 700<span id="cb22-72"><a href="#cb22-72" aria-hidden="true" tabindex="-1"></a> <span class="dt">color</span><span class="op">:</span> {</span> 701<span id="cb22-73"><a href="#cb22-73" aria-hidden="true" tabindex="-1"></a> <span class="dt">type</span><span class="op">:</span> <span class="st">"ordinal"</span><span class="op">,</span></span> 702<span id="cb22-74"><a href="#cb22-74" aria-hidden="true" tabindex="-1"></a> <span class="dt">domain</span><span class="op">:</span> answer_domain<span class="op">,</span></span> 703<span id="cb22-75"><a href="#cb22-75" aria-hidden="true" tabindex="-1"></a> <span class="dt">range</span><span class="op">:</span> [<span class="st">"#2166acff"</span><span class="op">,</span></span> 704<span id="cb22-76"><a href="#cb22-76" aria-hidden="true" tabindex="-1"></a> <span class="st">"#67a9cfff"</span><span class="op">,</span></span> 705<span id="cb22-77"><a href="#cb22-77" aria-hidden="true" tabindex="-1"></a> <span class="st">"#d1e5f0ff"</span><span class="op">,</span></span> 706<span id="cb22-78"><a href="#cb22-78" aria-hidden="true" tabindex="-1"></a> <span class="st">"#f7f7f7ff"</span><span class="op">,</span></span> 707<span id="cb22-79"><a href="#cb22-79" aria-hidden="true" tabindex="-1"></a> <span class="st">"#fddbc7ff"</span><span class="op">,</span></span> 708<span id="cb22-80"><a href="#cb22-80" aria-hidden="true" tabindex="-1"></a> <span class="st">"#ef8a62ff"</span><span class="op">,</span></span> 709<span id="cb22-81"><a href="#cb22-81" aria-hidden="true" tabindex="-1"></a> <span class="st">"#b2182bff"</span>]</span> 710<span id="cb22-82"><a href="#cb22-82" aria-hidden="true" tabindex="-1"></a> }<span class="op">,</span></span> 711<span id="cb22-83"><a href="#cb22-83" aria-hidden="true" tabindex="-1"></a> <span class="dt">height</span><span class="op">:</span> <span class="dv">600</span></span> 712<span id="cb22-84"><a href="#cb22-84" aria-hidden="true" tabindex="-1"></a>})</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 713<div class="cell-output cell-output-display"> 714<div id="draw-map-1"> 715<div id="ojs-cell-18-1" data-nodetype="declaration"> 716 717</div> 718</div> 719</div> 720<div class="cell-output cell-output-display"> 721<div id="draw-map-2"> 722<div id="ojs-cell-18-2" data-nodetype="declaration"> 723 724</div> 725</div> 726</div> 727<div class="cell-output cell-output-display"> 728<div id="draw-map-3"> 729<div id="ojs-cell-18-3" data-nodetype="declaration"> 730 731</div> 732</div> 733</div> 734<div class="cell-output cell-output-display"> 735<div id="draw-map-4"> 736<div id="ojs-cell-18-4" data-nodetype="expression"> 737 738</div> 739</div> 740</div> 741</div> 742<div class="cell"> 743<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb23" data-startfrom="0" data-source-offset="0"><pre class="sourceCode js code-with-copy"><code class="sourceCode javascript" style="counter-reset: source-line -1;"><span id="cb23-0"><a href="#cb23-0" aria-hidden="true" tabindex="-1"></a><span class="co">// breaking out the pointer layer for readability</span></span> 744<span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a><span class="co">// (and in case we decide to customise it later)</span></span> 745<span id="cb23-2"><a href="#cb23-2" aria-hidden="true" tabindex="-1"></a>tipTemplate <span class="op">=</span> Plot<span class="op">.</span><span class="fu">pointer</span>({</span> 746<span id="cb23-3"><a href="#cb23-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">x</span><span class="op">:</span> <span class="st">"lon"</span><span class="op">,</span></span> 747<span id="cb23-4"><a href="#cb23-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">y</span><span class="op">:</span> <span class="st">"lat"</span><span class="op">,</span></span> 748<span id="cb23-5"><a href="#cb23-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">channels</span><span class="op">:</span> {</span> 749<span id="cb23-6"><a href="#cb23-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">place</span><span class="op">:</span> {</span> 750<span id="cb23-7"><a href="#cb23-7" aria-hidden="true" tabindex="-1"></a>
750 <span class="dt">label</span><span class="op">:</span> <span class="st">""</span><span class="op">,</span></span> 751<span id="cb23-8"><a href="#cb23-8" aria-hidden="true" tabindex="-1"></a> <span class="dt">value</span><span class="op">:</span> d <span class="kw">=></span> d<span class="op">.</span><span class="at">isit_label</span><span class="op">,</span></span> 752<span id="cb23-9"><a href="#cb23-9" aria-hidden="true" tabindex="-1"></a> }<span class="op">,</span></span> 753<span id="cb23-10"><a href="#cb23-10" aria-hidden="true" tabindex="-1"></a> <span class="dt">label</span><span class="op">:</span> {</span> 754<span id="cb23-11"><a href="#cb23-11" aria-hidden="true" tabindex="-1"></a> <span class="dt">label</span><span class="op">:</span> <span class="st">""</span><span class="op">,</span></span> 755<span id="cb23-12"><a href="#cb23-12" aria-hidden="true" tabindex="-1"></a> <span class="dt">value</span><span class="op">:</span> d <span class="kw">=></span> d<span class="op">.</span><span class="at">isit_comment</span></span> 756<span id="cb23-13"><a href="#cb23-13" aria-hidden="true" tabindex="-1"></a> }<span class="op">,</span></span> 757<span id="cb23-14"><a href="#cb23-14" aria-hidden="true" tabindex="-1"></a> <span class="dt">separator</span><span class="op">:</span> {</span> 758<span id="cb23-15"><a href="#cb23-15" aria-hidden="true" tabindex="-1"></a>
758 <span class="dt">label</span><span class="op">:</span> <span class="st">""</span><span class="op">,</span></span> 759<span id="cb23-16"><a href="#cb23-16" aria-hidden="true" tabindex="-1"></a> <span class="dt">value</span><span class="op">:</span> d <span class="kw">=></span> <span class="st">""</span></span> 760<span id="cb23-17"><a href="#cb23-17" aria-hidden="true" tabindex="-1"></a> }<span class="op">,</span></span> 761<span id="cb23-18"><a href="#cb23-18" aria-hidden="true" tabindex="-1"></a> <span class="dt">isit_maximum</span><span class="op">:</span> {</span> 762<span id="cb23-19"><a href="#cb23-19" aria-hidden="true" tabindex="-1"></a> <span class="dt">label</span><span class="op">:</span> <span class="st">"Max:"</span><span class="op">,</span></span> 763<span id="cb23-20"><a href="#cb23-20" aria-hidden="true" tabindex="-1"></a> <span class="dt">value</span><span class="op">:</span> d <span class="kw">=></span> d<span class="op">.</span><span class="at">isit_maximum</span> <span class="op">+</span> <span class="st">"°C"</span></span> 764<span id="cb23-21"><a href="#cb23-21" aria-hidden="true" tabindex="-1"></a> }<span class="op">,</span></span> 765<span id="cb23-22"><a href="#cb23-22" aria-hidden="true" tabindex="-1"></a> <span class="dt">isit_minimum</span><span class="op">:</span> {</span> 766<span id="cb23-23"><a href="#cb23-23" aria-hidden="true" tabindex="-1"></a>
766 <span class="dt">label</span><span class="op">:</span> <span class="st">"Min:"</span><span class="op">,</span></span> 767<span id="cb23-24"><a href="#cb23-24" aria-hidden="true" tabindex="-1"></a> <span class="dt">value</span><span class="op">:</span> d <span class="kw">=></span> d<span class="op">.</span><span class="at">isit_minimum</span> <span class="op">+</span> <span class="st">"°C"</span></span> 768<span id="cb23-25"><a href="#cb23-25" aria-hidden="true" tabindex="-1"></a> }</span> 769<span id="cb23-26"><a href="#cb23-26" aria-hidden="true" tabindex="-1"></a> }<span class="op">,</span></span> 770<span id="cb23-27"><a href="#cb23-27" aria-hidden="true" tabindex="-1"></a> <span class="dt">fontSize</span><span class="op">:</span> <span class="dv">20</span><span class="op">,</span></span> 771<span id="cb23-28"><a href="#cb23-28" aria-hidden="true" tabindex="-1"></a> <span class="dt">fontFamily</span><span class="op">:</span> <span class="st">"Roboto Condensed"</span><span class="op">,</span></span> 772<span id="cb23-29"><a href="#cb23-29" aria-hidden="true" tabindex="-1"></a> <span class="dt">format</span><span class="op">:</span> {</span> 773<span id="cb23-30"><a href="#cb23-30" aria-hidden="true" tabindex="-1"></a> <span class="dt">x</span><span class="op">:</span> <span class="kw">null</span><span class="op">,</span></span> 774<span id="cb23-31"><a href="#cb23-31" aria-hidden="true" tabindex="-1"></a> <span class="dt">y</span><span class="op">:</span> <span class="kw">null</span></span> 775<span id="cb23-32"><a href="#cb23-32" aria-hidden="true" tabindex="-1"></a> }<span class="op">,</span></span> 776<span id="cb23-33"><a href="#cb23-33" aria-hidden="true" tabindex="-1"></a> <span class="dt">lineWidth</span><span class="op">:</span> <span class="dv">20</span><span class="op">,</span></span> 777<span id="cb23-34"><a href="#cb23-34" aria-hidden="true" tabindex="-1"></a> <span class="dt">lineHeight</span><span class="op">:</span> <span class="fl">1.25</span><span class="op">,</span></span> 778<span id="cb23-35"><a href="#cb23-35" aria-hidden="true" tabindex="-1"></a> <span class="dt">pointerSize</span><span class="op">:</span> <span class="dv">0</span><span class="op">,</span></span> 779<span id="cb23-36"><a href="#cb23-36" aria-hidden="true" tabindex="-1"></a> <span class="dt">fillOpacity</span><span class="op">:</span> <span class="fl">0.8</span><span class="op">,</span></span> 780<span id="cb23-37"><a href="#cb23-37" aria-hidden="true" tabindex="-1"></a> <span class="dt">strokeOpacity</span><span class="op">:</span> <span class="dv">0</span></span> 781<span id="cb23-38"><a href="#cb23-38" aria-hidden="true" tabindex="-1"></a>})</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div> 782<div id="tip-template" class="cell-output cell-output-display"> 783<div id="ojs-cell-19" data-nodetype="declaration"> 784 785</div> 786</div> 787</div> 788</div> 789</div> 790</div> 791<div id="international-section" class="iihrn-section page-columns page-full"> 792<div class="column-body"> 793<p><span class="strong small">See websites from our international colleagues!</span></p> 794<div class="flags"> 795<ul> 796<li><a href="https://hoyextremo.com/"><img src="./assets/flags/es.svg" class="img-fluid" alt="Spain"> Hoy extremo?</a></li> 797<li><a href="https://esistwarm.jetzt"><img src="./assets/flags/de.svg" class="img-fluid" alt="Germany"> Es ist warm?</a></li> 798<li><a href="https://zuheissheute.de/"><img src="./assets/flags/de.svg" class="img-fluid" alt="Germany"> Zu heiss heute?</a></li> 799<li><a href="https://scp.geographie.rub.de/isithot/lmss"><img src="./assets/flags/bochum.svg" class="img-fluid" alt="Bochum"> Is Bochum hot right now?</a></li> 800<li><a href="https://istheukhotrightnow.com/"><img src="./assets/flags/gb.svg" class="img-fluid" alt="UK"> Is the UK hot right now?</a></li> 801<li><a href="https://podnebnik.org"><img src="./assets/flags/si.svg" class="img-fluid" alt="Slovenia"> Ali je danes vroÄe?</a></li> 802</ul> 803</div> 804</div> 805</div> 806 807 808<div class="ojs-auto-generated hidden">
809<script type="ojs-module-contents"> 810eyJjb250ZW50cyI6WyAgeyJtZXRob2ROYW1lIjoiaW50ZXJwcmV0IiwiaW5saW5lIjoidHJ1ZSIsInNvdXJjZSI6Imh0bC5odG1sYDxzcGFuPiR7c3RhdHNQbGFjZS5pc2l0X2xhYmVsfTwvc3Bhbj5gIiwgImNlbGxOYW1lIjoib2pzLWVsZW1lbnQtaWQtMSJ9LCAgeyJtZXRob2ROYW1lIjoiaW50ZXJwcmV0IiwiaW5saW5lIjoidHJ1ZSIsInNvdXJjZSI6Imh0bC5odG1sYDxzcGFuPiR7c3RhdHNQbGFjZS5pc2l0X2xhYmVsfTwvc3Bhbj5gIiwgImNlbGxOYW1lIjoib2pzLWVsZW1lbnQtaWQtMiJ9XX0= 811</script>
811 812</div> 813 814</main> <!-- /main -->
815<script type="ojs-module-contents"> 816eyJjb250ZW50cyI6W3sibWV0aG9kTmFtZSI6ImludGVycHJldCIsImNlbGxOYW1lIjoib2pzLWNlbGwtMSIsImlubGluZSI6ZmFsc2UsInNvdXJjZSI6ImltcG9ydCB7IGFxLCBvcCB9IGZyb20gXCJAdXdkYXRhL2FycXVlcm9cIlxuXG5idWNrZXRfYmFzZSA9IFwiaHR0cHM6Ly9kMzMxNzNka2Z4d2E1eC5jbG91ZGZyb250Lm5ldC93d3cvXCJcblxuRkEgPSBGaWxlQXR0YWNobWVudFxuIn0seyJtZXRob2ROYW1lIjoiaW50ZXJwcmV0IiwiY2VsbE5hbWUiOiJvanMtY2VsbC0yIiwiaW5saW5lIjpmYWxzZSwic291cmNlIjoiXG5cbi8vIGZhbGxiYWNrU3RhdGlvbiA9IFwiMDY2MjE0XCJcblxuLy8gY2hlY2sgaWYgcGVybWlzc2lvbnMgYXJlIGF2YWlsYWJsZSBhbmQgaGF2ZSBiZWVuIGdpdmVuXG4vLyBnZW9sb2NhdGlvbkF2YWlsYWJsZSA9IFwiZ2VvbG9jYXRpb25cIiBpbiBuYXZpZ2F0b3JcblxubXV0YWJsZSBteUxvY2F0aW9uID0gbnVsbFxubXV0YWJsZSBnZW9sb2NhdGVTdGF0dXMgPSBcImRlZmF1bHRcIlxuXG5nZXRMb2NhdGlvbiA9IHtcbiAgeWllbGQgbnVsbFxuXG4gIHlpZWxkIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oXG4gICAgcG9zID0+IHtcbiAgICAgIG11dGFibGUgbXlMb2NhdGlvbiA9IHtcbiAgICAgICAgbGF0OiBwb3MuY29vcmRzLmxhdGl0dWRlLFxuICAgICAgICBsb246IHBvcy5jb29yZHMubG9uZ2l0dWRlXG4gICAgICB9XG4gICAgICBtdXRhYmxlIGdlb2xvY2F0ZVN0YXR1cyA9IFwiZ3JhbnRlZFwiXG4gICAgfSxcbiAgICBlID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiR2VvbG9jYXRpb24gZXJyb3JcIiwgZSksXG4gICAgICBtdXRhYmxlIGdlb2xvY2F0ZVN0YXR1cyA9IFwiZXJyb3JcIlxuICAgIH0sXG4gICAge1xuICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiBmYWxzZVxuICAgIH0pXG59XG4ifSx7Im1ldGhvZE5hbWUiOiJpbnRlcnByZXQiLCJjZWxsTmFtZSI6Im9qcy1jZWxsLTMiLCJpbmxpbmUiOmZhbHNlLCJzb3VyY2UiOiJcbmdlb2xvY2F0ZVN0YXR1cyA9PSBcImRlZmF1bHRcIiA/XG4gIG1kYEFsbG93IGxvY2F0aW9uIHRvIHNlZSBsb2NhbCBzdGF0aW9uYCA6XG4gICAgZ2VvbG9jYXRlU3RhdHVzID09IFwiZXJyb3JcIiA/XG4gICAgICBtZGBQcm9ibGVtIGdldHRpbmcgbG9jYXRpb25gIDpcbiAgICAgIG1kYGBcblxubXlMb2NhdGlvbiAhPSBudWxsID9cbiAgbWRgTG9jYXRpb24gaXMgbGF0OiAke215TG9jYXRpb24ubGF0fSwgbG9uOiAke215TG9jYXRpb24ubG9ufWAgOlxuICBtZGBMb2NhdGlvbiBwZXJtaXNzaW9uIG5vdCBncmFudGVkYFxuIn0seyJtZXRob2ROYW1lIjoiaW50ZXJwcmV0IiwiY2VsbE5hbWUiOiJvanMtY2VsbC00IiwiaW5saW5lIjpmYWxzZSwic291cmNlIjoiXG4vLyBvbiB0aGUgaG9tZSBwYWdlLCBnZXQgc3RhdGlvbiBpZCBmcm9tOlxuLy8gICAqIF9nZW9sb2NhdG9yLnFtZCdzIG15TG9jYXRpb24sIHBsdXNcbi8vICAgKiBfbWFwLnFtZCdzIHN0YXRzQWxsXG5cbnN0YXRpb25JZCA9IHtcbiAgXG4gIC8vIGZhbGxiYWNrIHRvIHN5ZG5leT9cbiAgaWYgKG15TG9jYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiBcIjAyMzAwMFwiXG4gIH1cblxuICAvLyBvdGhlcndpc2UsIGZpbmQgY2xvc2VzdCBzdGF0aW9uIG9uIHN0YXRzQWxsXG4gIGNvbnN0IGNsb3Nlc3RTdGF0aW9uID0gYXEuZnJvbShzdGF0c0FsbClcbiAgICAucGFyYW1zKHtcbiAgICAgIGN1cnJlbnRMYXQ6IG15TG9jYXRpb24ubGF0LFxuICAgICAgY3VycmVudExvbjogbXlMb2NhdGlvbi5sb24sXG4gICAgfSlcbiAgICAuZGVyaXZlKHtcbiAgICAgIGRpc3Q6IChkLCAkKSA9PiBNYXRoLnNxcnQoXG4gICAgICAgICgkLmN1cnJlbnRMYXQgLSBkLmlzaXRfbGF0KSAqKiAyICsgKCQuY3VycmVudExvbiAtIGQuaXNpdF9sb24pICoqIDIpXG4gICAgfSlcbiAgICAub3JkZXJieShcImRpc3RcIilcbiAgICAuc2xpY2UoMCwgMSlcbiAgICAuYXJyYXkoXCJpZFwiKVxuXG4gIHJldHVybiBjbG9zZXN0U3RhdGlvblswXVxufVxuXG4ifSx7Im1ldGhvZE5hbWUiOiJpbnRlcnByZXQiLCJjZWxsTmFtZSI6Im9qcy1jZWxsLTUiLCJpbmxpbmUiOmZhbHNlLCJzb3VyY2UiOiJcbnN0YXRzUGxhY2UgPSBGQShidWNrZXRfYmFzZSArIFwic3RhdHMvc3RhdHNfXCIgKyBzdGF0aW9uSWQgKyBcIi5qc29uXCIpLmpzb24oKVxuIn0seyJtZXRob2ROYW1lIjoiaW50ZXJwcmV0IiwiY2VsbE5hbWUiOiJvanMtY2VsbC02IiwiaW5saW5lIjpmYWxzZSwic291cmNlIjoiXG4vLyBub3QgdXNpbmcgYmFja2dyb3VuZCBncmFkaWVudHMgYW55bW9yZSwganVzdCBmaWxsMlxuYW5zd2VycyA9ICh7XG4gIFwiSGVsbCBubyFcIjogICB7Y29sb3I6IFwid2hpdGVcIiwgICBmaWxsMTogXCIjNTI4N2QxXCIsIGZpbGwyOiBcIiMyMTY2YWNcIiB9LFxuICBcIk5vIVwiOiAgICAgICAge2NvbG9yOiBcIndoaXRlXCIsICAgZmlsbDE6IFwiI2EyY2RlYlwiLCBmaWxsMjogXCIjNjdhOWNmXCIgfSxcbiAgXCJOb3BlXCI6ICAgICAgIHtjb2xvcjogXCIjMzMzMzMzXCIsIGZpbGwxOiBcIiNmNWY4ZmFcIiwgZmlsbDI6IFwiI2QxZTVmMFwiIH0sXG4gIFwiTm90IHJlYWxseVwiOiB7Y29sb3I6IFwiIzMzMzMzM1wiLCBmaWxsMTogXCIjZjdmN2Y3XCIsIGZpbGwyOiBcIiNlYmViZWJcIiB9LFxuICBcIll1cFwiOiAgICAgICAge2NvbG9yOiBcIiMzMzMzMzNcIiwgZmlsbDE6IFwiI2ZkZGNjYVwiLCBmaWxsMjogXCIjZjdjZmI3XCIgfSxcbiAgXCJZZWFoIVwiOiAgICAgIHtjb2xvcjogXCJ3aGl0ZVwiLCAgIGZpbGwxOiBcIiNkZTdiNDlcIiwgZmlsbDI6IFwiI2ZjOTQ2YVwiIH0sXG4gIFwiSGVsbCB5ZWFoIVwiOiB7Y29sb3I6IFwid2hpdGVcIiwgICBmaWxsMTogXCIjZDEyMzFkXCIsIGZpbGwyOiBcIiNiMjE4MmJcIiB9XG59KVxuXG5odG1sYFxuPGRpdiBjbGFzcz1cImFuc3dlci1pY29uLWFuZC1sYWJlbFwiPlxuICA8c3BhbiBjbGFzcz1cImFuc3dlci1pY29uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAke2Fuc3dlcnNbc3RhdHNQbGFjZS5pc2l0X2Fuc3dlcl0uZmlsbDJ9O1wiPlxuICA8L3NwYW4+XG4gIDxzcGFuPiR7c3RhdHNQbGFjZS5pc2l0X2Fuc3dlcn08L3NwYW4+XG48L2Rpdj5gXG4ifSx7Im1ldGhvZE5hbWUiOiJpbnRlcnByZXQiLCJjZWxsTmFtZSI6Im9qcy1jZWxsLTciLCJpbmxpbmUiOmZhbHNlLCJzb3VyY2UiOiJtZGAke3N0YXRzUGxhY2UuaXNpdF9jb21tZW50fWBcbiJ9LHsibWV0aG9kTmFtZSI6ImludGVycHJldCIsImNlbGxOYW1lIjoib2pzLWNlbGwtOCIsImlubGluZSI6ZmFsc2UsInNvdXJjZSI6ImRhdGVmbnMgPSBpbXBvcnQoXCJodHRwczovL2Nkbi5za3lwYWNrLmRldi9kYXRlLWZuc0AzLjMuMT9taW5cIilcbnRtYXhXaGVuID0gbmV3IERhdGUoRGF0ZS5wYXJzZShzdGF0c1BsYWNlLmlzaXRfbWF4aW11bV9kdCB8fCBudWxsKSlcbnRtaW5XaGVuID0gbmV3IERhdGUoRGF0ZS5wYXJzZShzdGF0c1BsYWNlLmlzaXRfbWluaW11bV9kdCB8fCBudWxsKSlcblxudG1heFdoZW5GcmllbmRseSA9IGlzRmluaXRlKHRtYXhXaGVuKSA/XG4gIGRhdGVmbnMuZm9ybWF0UmVsYXRpdmUodG1heFdoZW4sIG5ldyBEYXRlKCkpIDogXCJcIlxudG1pbldoZW5GcmllbmRseSA9IGlzRmluaXRlKHRtaW5XaGVuKSA/XG4gIGRhdGVmbnMuZm9ybWF0UmVsYXRpdmUodG1pbldoZW4sIG5ldyBEYXRlKCkpIDogXCJcIlxuXG5wZXJjZW50UmF0aW5nID0gc3RhdHNQbGFjZS5pc2l0X2F2ZXJhZ2UudG9GaXhlZCgxKSArIFwiJVwiXG4ifSx7Im1ldGhvZE5hbWUiOiJpbnRlcnByZXQiLCJjZWxsTmFtZSI6Im9qcy1jZWxsLTkiLCJpbmxpbmUiOmZhbHNlLCJzb3VyY2UiOiJcbm1kYCR7c3RhdHNQbGFjZS5pc2l0X21pbmltdW19IMKwQyAgYFxubWRgJHt0bWluV2hlbkZyaWVuZGx5fWBcbiJ9LHsibWV0aG9kTmFtZSI6ImludGVycHJldCIsImNlbGxOYW1lIjoib2pzLWNlbGwtMTAiLCJpbmxpbmUiOmZhbHNlLCJzb3VyY2UiOiJcbm1kYCR7c3RhdHNQbGFjZS5pc2l0X21heGltdW19IMKwQyAgYFxubWRgJHt0bWF4V2hlbkZyaWVuZGx5fWBcbiJ9LHsibWV0aG9kTmFtZSI6ImludGVycHJldCIsImNlbGxOYW1lIjoib2pzLWNlbGwtMTEiLCJpbmxpbmUiOmZhbHNlLCJzb3VyY2UiOiJodG1sYFxuPGRpdiBjbGFzcz1cImFuc3dlci1pY29uLWFuZC1sYWJlbFwiPlxuICA8c3BhbiBjbGFzcz1cImFuc3dlci1pY29uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAke2Fuc3dlcnNbc3RhdHNQbGFjZS5pc2l0X2Fuc3dlcl0uZmlsbDJ9O1wiPjwvc3Bhbj5cbiAgPHNwYW4+JHtzdGF0c1BsYWNlLmlzaXRfY3VycmVudC50b0ZpeGVkKDEpfSDCsEM8L3NwYW4+XG48L2Rpdj5gXG5tZGBBdmVyYWdlIHNvIGZhcjxicj5ob3R0ZXIgdGhhbiAqKiR7cGVyY2VudFJhdGluZ30qKiBvZiBkYXlzIGZvciB0aGlzIHRpbWUgb2YgeWVhci5gXG4ifSx7Im1ldGhvZE5hbWUiOiJpbnRlcnByZXQiLCJjZWxsTmFtZSI6Im9qcy1jZWxsLT
816EyIiwiaW5saW5lIjpmYWxzZSwic291cmNlIjoibWRgIVtdKCR7YnVja2V0X2Jhc2UgKyBcInBsb3RzL3RpbWVzZXJpZXMvdGltZXNlcmllcy1cIiArIHN0YXRpb25JZCArIFwiLnBuZ1wifSlgXG4ifSx7Im1ldGhvZE5hbWUiOiJpbnRlcnByZXQiLCJjZWxsTmFtZSI6Im9qcy1jZWxsLTEzIiwiaW5saW5lIjpmYWxzZSwic291cmNlIjoibWRgIVtdKCR7YnVja2V0X2Jhc2UgKyBcInBsb3RzL2Rpc3RyaWJ1dGlvbi9kaXN0cmlidXRpb24tXCIgKyBzdGF0aW9uSWQgKyBcIi5wbmdcIn0pYFxuIn0seyJtZXRob2ROYW1lIjoiaW50ZXJwcmV0IiwiY2VsbE5hbWUiOiJvanMtY2VsbC0xNCIsImlubGluZSI6ZmFsc2UsInNvdXJjZSI6ImhlYXRtYXBZZWFyID0gKG5ldyBEYXRlKCkpLnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwge3RpbWVab25lOiBcIkF1c3RyYWxpYS9NZWxib3VybmVcIiwgeWVhcjogXCJudW1lcmljXCJ9KVxubWRgIVtdKCR7YnVja2V0X2Jhc2UgKyBcInBsb3RzL2hlYXRtYXAvaGVhdG1hcC1cIiArIHN0YXRpb25JZCArIFwiLVwiICsgaGVhdG1hcFllYXIgKyBcIi5wbmdcIn0pYFxuIn0seyJtZXRob2ROYW1lIjoiaW50ZXJwcmV0IiwiY2VsbE5hbWUiOiJvanMtY2VsbC0xNSIsImlubGluZSI6ZmFsc2UsInNvdXJjZSI6Im5vd0hvdXIgPSAobmV3IERhdGUoKSkuZ2V0VVRDSG91cnMoKVxubm93SG91ciA+PSAxMCAmJiBub3dIb3VyIDw9IDIyID9cbiAgbWRgU29tZSBwbGFjZXMgbWF5IHN0aWxsIGJlIGNvb2xpbmcgb2ZmIGFzIHRoZSBuaWdodCBjb250aW51ZXMuYCA6XG4gIG1kYFNvbWUgcGxhY2VzIG1heSBzdGlsbCBiZSBoZWF0aW5nIHVwIGFzIHRoZSBkYXkgY29udGludWVzLmBcbiJ9LHsibWV0aG9kTmFtZSI6ImludGVycHJldCIsImNlbGxOYW1lIjoib2pzLWNlbGwtMTYiLCJpbmxpbmUiOmZhbHNlLCJzb3VyY2UiOiJcbnN0YXRzQWxsUmF3ID0gRkEoYnVja2V0X2Jhc2UgKyBcInN0YXRzL3N0YXRzX2FsbC5qc29uXCIpLmpzb24oKVxuXG4vLyBzdGF0c0FsbFJhdyBpcyBhbiBvYmplY3Qgd2l0aCBrZXlzIGJ5IHN0YXRpb24gaWQsIGJ1dCB3ZVxuLy8gbmVlZCBhbiBhcnJheSB3aXRoIGFuIGlkIGZpZWxkLiBsZXQncyBtb3ZlIHRoZSBpZHMgaW5cbnN0YXRzQWxsID0ge1xuICBjb25zdCBzdGF0c0FycmF5ID0gW11cbiAgT2JqZWN0LmtleXMoc3RhdHNBbGxSYXcpLm1hcChrID0+IHN0YXRzQXJyYXkucHVzaCh7Li4uc3RhdHNBbGxSYXdba10sIGlkOiBrfSkpXG4gIGNvbnN0IHRpZGllZFN0YXRzID0gYXEuZnJvbShzdGF0c0FycmF5KVxuICAgIC5kZXJpdmUoe1xuICAgICAgbGF0OiBkID0+IG9wLnBhcnNlX2Zsb2F0KGQuaXNpdF9sYXQpLFxuICAgICAgbG9uOiBkID0+IG9wLnBhcnNlX2Zsb2F0KGQuaXNpdF9sb24pLFxuICAgICAgaXNpdF9hdmVyYWdlOiBkID0+IG9wLnBhcnNlX2Zsb2F0KGQuaXNpdF9hdmVyYWdlKSxcbiAgICAgIC8vIGN1cnJlbnQ/ICh0aGF0J3MgdGhlIGFjdHVhbCBhdmcgdGVtcClcbiAgICAgIGlzaXRfbWF4aW11bTogZCA9PiBvcC5wYXJzZV9mbG9hdChkLmlzaXRfbWF4aW11bSksXG4gICAgICBpc2l0X21pbmltdW06IGQgPT4gb3AucGFyc2VfZmxvYXQoZC5pc2l0X21pbmltdW0pLFxuICAgICAgbWF4X3doZW46IGQgPT4gb3AucGFyc2VfZGF0ZShkLmlzaXRfbWF4aW11bV9kdCksXG4gICAgICBtaW5fd2hlbjogZCA9PiBvcC5wYXJzZV9kYXRlKGQuaXNpdF9taW5pbXVtX2R0KSxcbiAgICAgIHNsdWc6IGQgPT5cbiAgICAgICAgb3AucmVwbGFjZShcbiAgICAgICAgICBvcC5yZXBsYWNlKFxuICAgICAgICAgICAgb3AucmVwbGFjZShcbiAgICAgICAgICAgICAgb3AubG93ZXIoZC5pc2l0X2xhYmVsKSxcbiAgICAgICAgICAgICAgL1xccy1cXHMvZywgXCItXCIpLFxuICAgICAgICAgICAgL1xccy9nLCBcIi1cIiksXG4gICAgICAgICAgL1soKV0vZywgXCJcIilcbiAgICB9KVxuICAgIC8vIG1hcmsgYXMgc3RhbGUgaWYgbGF0ZXN0IG9icyBhcmUgPiAyNCBob3VycyBvbGRcbiAgICAuZGVyaXZlKHtcbiAgICAgIG1heF9zdGFsZTpcbiAgICAgICAgZCA9PiAoKGQubWF4X3doZW4gLSBvcC5ub3coKSkgLyAoMTAwMCAqIDYwKSkgLyAoMjQgKiA2MCkgPiAxLFxuICAgICAgbWluX3N0YWxlOlxuICAgICAgICBkID0+ICgoZC5taW5fd2hlbiAtIG9wLm5vdygpKSAvICgxMDAwICogNjApKSAvICgyNCAqIDYwKSA+IDFcbiAgICB9KVxuICAgIC5vYmplY3RzKClcbiAgcmV0dXJuKHRpZGllZFN0YXRzKVxufVxuIn0seyJtZXRob2ROYW1lIjoiaW50ZXJwcmV0IiwiY2VsbE5hbWUiOiJvanMtY2VsbC0xNyIsImlubGluZSI6ZmFsc2UsInNvdXJjZSI6ImN1cnJlbnRTdGF0cyA9IHN0YXRzQWxsLmZpbHRlcihkID0+ICghZC5tYXhfc3RhbGUpICYmICghZC5taW5fc3RhbGUpKVxuc3RhbGVTdGF0cyA9IHN0YXRzQWxsLmZpbHRlcihkID0+IGQubWF4X3N0YWxlIHx8IGQubWluX3N0YWxlKVxuIn0seyJtZXRob2ROYW1lIjoiaW50ZXJwcmV0IiwiY2VsbE5hbWUiOiJvanMtY2VsbC0xOCIsImlubGluZSI6ZmFsc2UsInNvdXJjZSI6IlxuYXVzdHJhbGlhID0gRmlsZUF0dGFjaG1lbnQoXCIvYXNzZXRzL2F1c3RyYWxpYS5nZW9qc29uXCIpLmpzb24oKVxuXG5QbG90ID0gaW1wb3J0KFwiaHR0cHM6Ly9lc20ucnVuL0BvYnNlcnZhYmxlaHEvcGxvdFwiKVxuXG5hbnN3ZXJfZG9tYWluID0gW1xuICBcIkhlbGwgbm8hXCIsXG4gIFwiTm8hXCIsXG4gIFwiTm9wZVwiLFxuICBcIk5vdCByZWFsbHlcIixcbiAgXCJZdXBcIixcbiAgXCJZZWFoIVwiLFxuICBcIkhlbGwgeWVhaCFcIl1cblxuUGxvdC5wbG90KHtcbiAgcHJvamVjdGlvbjoge1xuICAgIHR5cGU6IFwiZXF1aXJlY3Rhbmd1bGFyXCIsXG4gICAgcm90YXRlOiBbLTEzMywgMjhdLFxuICAgIGRvbWFpbjogZDMuZ2VvQ2lyY2xlKCkuY2VudGVyKFsxMzMsIC0yOF0pLnJhZGl1cygxOCkoKVxuICB9LFxuICBtYXJrczogW1xuICAgIC8vIFBsb3QuZ3JhdGljdWxlKCksXG4gICAgUGxvdC5nZW8oYXVzdHJhbGlhLCB7XG4gICAgICBmaWxsOiBcIiMwMDAwMDAwOVwiLFxuICAgICAgc3Ryb2tlOiBcIiNkZGRkZGRcIlxuICAgIH0pLFxuICAgIC8vIHJlcGxhY2Ugc3RhbGUgbG9jYXRpb25zIHdpdGggY3Jvc3Nlc1xuICAgIFBsb3QuZG90KHN0YWxlU3Rh
816dHMsIHtcbiAgICAgIHg6IFwibG9uXCIsXG4gICAgICB5OiBcImxhdFwiLFxuICAgICAgc3Ryb2tlOiBcImxpZ2h0Z3JleVwiLFxuICAgICAgcjogNixcbiAgICAgIHN5bWJvbDogXCJ0aW1lc1wiXG4gICAgfSksXG4gICAgUGxvdC5kb3QoY3VycmVudFN0YXRzLCB7XG4gICAgICB4OiBcImxvblwiLFxuICAgICAgeTogXCJsYXRcIixcbiAgICAgIGZpbGw6IFwiaXNpdF9hbnN3ZXJcIixcbiAgICAgIHN0cm9rZTogZCA9PlxuICAgICAgICBkLmlzaXRfYW5zd2VyID09IFwiSGVsbCBubyFcIiB8fCBkLmlzaXRfYW5zd2VyID09IFwiSGVsbCB5ZWFoIVwiID9cbiAgICAgICAgXCJibGFja1wiIDpcbiAgICAgICAgXCIjMDAwMDAwOTlcIixcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjc1LFxuICAgICAgcjogNixcbiAgICB9KSxcbiAgICBQbG90LnRpcChjdXJyZW50U3RhdHMsIHRpcFRlbXBsYXRlKSxcbiAgICAvLyBlbmxhcmdlIGRvdCB5b3UncmUgcG9pbnRpbmcgdG9cbiAgICBQbG90LmRvdChjdXJyZW50U3RhdHMsIFBsb3QucG9pbnRlcih7XG4gICAgICB4OiBcImxvblwiLFxuICAgICAgeTogXCJsYXRcIixcbiAgICAgIGZpbGw6IFwiaXNpdF9hbnN3ZXJcIixcbiAgICAgIHN0cm9rZTogZCA9PlxuICAgICAgICBkLmlzaXRfYW5zd2VyID09IFwiSGVsbCBubyFcIiB8fCBkLmlzaXRfYW5zd2VyID09IFwiSGVsbCB5ZWFoIVwiID9cbiAgICAgICAgXCJibGFja1wiIDpcbiAgICAgICAgXCIjMDAwMDAwOTlcIixcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjc1LFxuICAgICAgcjogMTIsXG4gICAgfSkpLFxuICAgIC8vIGVubGFyZ2VuIGNsaWNrYWJsZSBhcmVhcyB3aXRoIGludmlzaWJsZSB2b3Jvbm9pIHBvbHlzXG4gICAgUGxvdC52b3Jvbm9pKGN1cnJlbnRTdGF0cywge1xuICAgICAgeDogXCJsb25cIixcbiAgICAgIHk6IFwibGF0XCIsXG4gICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICBzdHJva2U6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIGhyZWY6IGQgPT4gXCIvcGxhY2VzL1wiICsgZC5zbHVnLFxuICAgIH0pLFxuXG4gIF0sXG4gIGNvbG9yOiB7XG4gICAgdHlwZTogXCJvcmRpbmFsXCIsXG4gICAgZG9tYWluOiBhbnN3ZXJfZG9tYWluLFxuICAgIHJhbmdlOiBbXCIjMjE2NmFjZmZcIixcbiAgICAgICAgICAgIFwiIzY3YTljZmZmXCIsXG4gICAgICAgICAgICBcIiNkMWU1ZjBmZlwiLFxuICAgICAgICAgICAgXCIjZjdmN2Y3ZmZcIixcbiAgICAgICAgICAgIFwiI2ZkZGJjN2ZmXCIsXG4gICAgICAgICAgICBcIiNlZjhhNjJmZlwiLFxuICAgICAgICAgICAgXCIjYjIxODJiZmZcIl1cbiAgfSxcbiAgaGVpZ2h0OiA2MDBcbn0pXG5cbiJ9LHsibWV0aG9kTmFtZSI6ImludGVycHJldCIsImNlbGxOYW1lIjoib2pzLWNlbGwtMTkiLCJpbmxpbmUiOmZhbHNlLCJzb3VyY2UiOiIvLyBicmVha2luZyBvdXQgdGhlIHBvaW50ZXIgbGF5ZXIgZm9yIHJlYWRhYmlsaXR5XG4vLyAoYW5kIGluIGNhc2Ugd2UgZGVjaWRlIHRvIGN1c3RvbWlzZSBpdCBsYXRlcilcbnRpcFRlbXBsYXRlID0gUGxvdC5wb2ludGVyKHtcbiAgeDogXCJsb25cIixcbiAgeTogXCJsYXRcIixcbiAgY2hhbm5lbHM6IHtcbiAgICBwbGFjZToge1xuICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICB2YWx1ZTogZCA9PiBkLmlzaXRfbGFiZWwsXG4gICAgfSxcbiAgICBsYWJlbDoge1xuICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICB2YWx1ZTogZCA9PiBkLmlzaXRfY29tbWVudFxuICAgIH0sXG4gICAgc2VwYXJhdG9yOiB7XG4gICAgICBsYWJlbDogXCJcIixcbiAgICAgIHZhbHVlOiBkID0+IFwiXCJcbiAgICB9LFxuICAgIGlzaXRfbWF4aW11bToge1xuICAgICAgbGFiZWw6IFwiTWF4OlwiLFxuICAgICAgdmFsdWU6IGQgPT4gZC5pc2l0X21heGltdW0gKyBcIsKwQ1wiXG4gICAgfSxcbiAgICBpc2l0X21pbmltdW06IHtcbiAgICAgIGxhYmVsOiBcIk1pbjpcIixcbiAgICAgIHZhbHVlOiBkID0+IGQuaXNpdF9taW5pbXVtICsgXCLCsENcIlxuICAgIH1cbiAgfSxcbiAgZm9udFNpemU6IDIwLFxuICBmb250RmFtaWx5OiBcIlJvYm90byBDb25kZW5zZWRcIixcbiAgZm9ybWF0OiB7XG4gICAgeDogbnVsbCxcbiAgICB5OiBudWxsXG4gIH0sXG4gIGxpbmVXaWR0aDogMjAsXG4gIGxpbmVIZWlnaHQ6IDEuMjUsXG4gIHBvaW50ZXJTaXplOiAwLFxuICBmaWxsT3BhY2l0eTogMC44LF
816xuICBzdHJva2VPcGFjaXR5OiAwXG59KVxuIn1dfQ== 817</script>
vendor: 1 bytes, line 817
817
818<script type="module"> 819if (window.location.protocol === "file:") { alert("The OJS runtime does not work with file:// URLs. Please use a web server to view this document."); } 820window._ojs.paths.runtimeToDoc = "../.."; 821window._ojs.paths.runtimeToRoot = "../.."; 822window._ojs.paths.docToRoot = ""; 823window._ojs.selfContained = false; 824window._ojs.runtime.interpretFromScriptTags(); 825</script>
vendor: 1 bytes, line 825
825
826<script id="quarto-html-after-body" type="application/javascript"> 827 window.document.addEventListener("DOMContentLoaded", function (event) { 828 const icon = "î§"; 829 const anchorJS = new window.AnchorJS(); 830 anchorJS.options = { 831 placement: 'right', 832 icon: icon 833 }; 834 anchorJS.add('.anchored'); 835 const isCodeAnnotation = (el) => { 836 for (const clz of el.classList) { 837 if (clz.startsWith('code-annotation-')) { 838 return true; 839 } 840 } 841 return false; 842 } 843 const onCopySuccess = function(e) { 844 // button target 845 const button = e.trigger; 846 // don't keep focus 847 button.blur(); 848 // flash "checked" 849 button.classList.add('code-copy-button-checked'); 850 var currentTitle = button.getAttribute("title"); 851 button.setAttribute("title", "Copied!"); 852 let tooltip; 853 if (window.bootstrap) { 854 button.setAttribute("data-bs-toggle", "tooltip"); 855 button.setAttribute("data-bs-placement", "left"); 856 button.setAttribute("data-bs-title", "Copied!"); 857 tooltip = new bootstrap.Tooltip(button, 858 { trigger: "manual", 859 customClass: "code-copy-button-tooltip", 860 offset: [0, -8]}); 861 tooltip.show(); 862 } 863 setTimeout(function() { 864 if (tooltip) { 865 tooltip.hide(); 866 button.removeAttribute("data-bs-title"); 867 button.removeAttribute("data-bs-toggle"); 868 button.removeAttribute("data-bs-placement"); 869 } 870 button.setAttribute("title", currentTitle); 871 button.classList.remove('code-copy-button-checked'); 872 }, 1000); 873 // clear code selection 874 e.clearSelection(); 875 } 876 const getTextToCopy = function(trigger) { 877 const outerScaffold = trigger.parentElement.cloneNode(true); 878 const codeEl = outerScaffold.querySelector('code'); 879 for (const childEl of codeEl.children) { 880 if (isCodeAnnotation(childEl)) { 881 childEl.remove(); 882 } 883 } 884 return codeEl.innerText; 885 } 886 const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', { 887 text: getTextToCopy 888 }); 889 clipboard.on('success', onCopySuccess); 890 if (window.document.getElementById('quarto-embedded-source-code-modal')) { 891 const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', { 892 text: getTextToCopy, 893 container: window.document.getElementById('quarto-embedded-source-code-modal') 894 }); 895 clipboardModal.on('success', onCopySuccess); 896 } 897 var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//); 898 var mailtoRegex = new RegExp(/^mailto:/); 899 var filterRegex = new RegExp("https:\/\/roaring-crostata-c66c31\.netlify\.app"); 900 var isInternal = (href) => { 901 return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); 902 } 903 // Inspect non-navigation links and adorn them if external 904 var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)'); 905 for (var i=0; i<links.length; i++) { 906 const link = links[i]; 907 if (!isInternal(link.href)) { 908 // undo the damage that might have been done by quarto-nav.js in the case of 909 // links that we want to consider external 910 if (link.dataset.originalHref !== undefined) { 911 link.href = link.dataset.originalHref; 912 } 913 } 914 } 915 function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { 916 const config = { 917 allowHTML: true, 918 maxWidth: 500, 919 delay: 100, 920 arrow: false, 921 appendTo: function(el) { 922 return el.parentElement; 923 }, 924 interactive: true, 925 interactiveBorder: 10, 926 theme: 'quarto', 927 placement: 'bottom-start', 928 }; 929 if (contentFn) { 930 config.content = contentFn; 931 } 932 if (onTriggerFn) { 933 config.onTrigger = onTriggerFn; 934 } 935 if (onUntriggerFn) { 936 config.onUntrigger = onUntriggerFn; 937 } 938 window.tippy(el, config); 939 } 940 const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); 941 for (var i=0; i<noterefs.length; i++) { 942 const ref = noterefs[i]; 943 tippyHover(ref, function() { 944 // use id or data attribute instead here 945 let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); 946 try { href = new URL(href).hash; } catch {} 947 const id = href.replace(/^#\/?/, ""); 948 const note = window.document.getElementById(id); 949 if (note) { 950 return note.innerHTML; 951 } else { 952 return ""; 953 } 954 }); 955 } 956 const xrefs = window.document.querySelectorAll('a.quarto-xref'); 957 const processXRef = (id, note) => { 958 // Strip column container classes 959 const stripColumnClz = (el) => { 960 el.classList.remove("page-full", "page-columns"); 961 if (el.children) { 962 for (const child of el.children) {
963 stripColumnClz(child); 964 } 965 } 966 } 967 stripColumnClz(note) 968 if (id === null || id.startsWith('sec-')) { 969 // Special case sections, only their first couple elements 970 const container = document.createElement("div"); 971 if (note.children && note.children.length > 2) { 972 container.appendChild(note.children[0].cloneNode(true)); 973 for (let i = 1; i < note.children.length; i++) { 974 const child = note.children[i]; 975 if (child.tagName === "P" && child.innerText === "") { 976 continue; 977 } else { 978 container.appendChild(child.cloneNode(true)); 979 break; 980 } 981 } 982 if (window.Quarto?.typesetMath) { 983 window.Quarto.typesetMath(container); 984 } 985 return container.innerHTML 986 } else { 987 if (window.Quarto?.typesetMath) { 988 window.Quarto.typesetMath(note); 989 } 990 return note.innerHTML; 991 } 992 } else { 993 // Remove any anchor links if they are present 994 const anchorLink = note.querySelector('a.anchorjs-link'); 995 if (anchorLink) { 996 anchorLink.remove(); 997 } 998 if (window.Quarto?.typesetMath) { 999 window.Quarto.typesetMath(note); 1000 } 1001 if (note.classList.contains("callout")) { 1002 return note.outerHTML; 1003 } else { 1004 return note.innerHTML; 1005 } 1006 } 1007 } 1008 for (var i=0; i<xrefs.length; i++) { 1009 const xref = xrefs[i]; 1010 tippyHover(xref, undefined, function(instance) { 1011 instance.disable(); 1012 let url = xref.getAttribute('href'); 1013 let hash = undefined; 1014 if (url.startsWith('#')) { 1015 hash = url; 1016 } else { 1017 try { hash = new URL(url).hash; } catch {} 1018 } 1019 if (hash) { 1020 const id = hash.replace(/^#\/?/, ""); 1021 const note = window.document.getElementById(id); 1022 if (note !== null) { 1023 try { 1024 const html = processXRef(id, note.cloneNode(true)); 1025 instance.setContent(html); 1026 } finally { 1027 instance.enable(); 1028 instance.show(); 1029 } 1030 } else { 1031 // See if we can fetch this 1032 fetch(url.split('#')[0]) 1033 .then(res => res.text()) 1034 .then(html => { 1035 const parser = new DOMParser(); 1036 const htmlDoc = parser.parseFromString(html, "text/html"); 1037 const note = htmlDoc.getElementById(id); 1038 if (note !== null) { 1039 const html = processXRef(id, note); 1040 instance.setContent(html); 1041 } 1042 }).finally(() => { 1043 instance.enable(); 1044 instance.show(); 1045 }); 1046 } 1047 } else { 1048 // See if we can fetch a full url (with no hash to target) 1049 // This is a special case and we should probably do some content thinning / targeting 1050 fetch(url) 1051 .then(res => res.text()) 1052 .then(html => { 1053 const parser = new DOMParser(); 1054 const htmlDoc = parser.parseFromString(html, "text/html"); 1055 const note = htmlDoc.querySelector('main.content'); 1056 if (note !== null) { 1057 // This should only happen for chapter cross references 1058 // (since there is no id in the URL) 1059 // remove the first header 1060 if (note.children.length > 0 && note.children[0].tagName === "HEADER") { 1061 note.children[0].remove(); 1062 } 1063 const html = processXRef(null, note); 1064 instance.setContent(html); 1065 } 1066 }).finally(() => { 1067 instance.enable(); 1068 instance.show(); 1069 }); 1070 } 1071 }, function(instance) { 1072 }); 1073 } 1074 let selectedAnnoteEl; 1075 const selectorForAnnotation = ( cell, annotation) => { 1076 let cellAttr = 'data-code-cell="' + cell + '"'; 1077 let lineAttr = 'data-code-annotation="' + annotation + '"'; 1078 const selector = 'span[' + cellAttr + '][' + lineAttr + ']'; 1079 return selector; 1080 } 1081 const selectCodeLines = (annoteEl) => { 1082 const doc = window.document; 1083 const targetCell = annoteEl.getAttribute("data-target-cell"); 1084 const targetAnnotation = annoteEl.getAttribute("data-target-annotation"); 1085 const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); 1086 const lines = annoteSpan.getAttribute("data-code-lines").split(","); 1087 const lineIds = lines.map((line) => { 1088 return targetCell + "-" + line; 1089 }) 1090 let top = null; 1091 let height = null; 1092 let parent = null; 1093 if (lineIds.length > 0) { 1094 //compute the position of the single el (top and bottom and make a div) 1095 const el = window.document.getElementById(lineIds[0]); 1096 top = el.offsetTop; 1097 height = el.offsetHeight; 1098 parent = el.parentElement.parentElement; 1099 if (lineIds.length > 1) { 1100 const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]); 1101 const bottom = lastEl.offsetTop + lastEl.offsetHeight; 1102 height = bottom - top; 1103 } 1104 if (top !== null && height !== null && parent !== null) { 1105 // cook up a div (if necessary) and position it 1106 let div = window.document.getElementById("code-annotation-line-highlight"); 1107 if (div === null) { 1108 div = window.document.createElement("div"); 1109 div.setAttribute("id", "code-annotation-line-highlight"); 1110 div.style.position = 'absolute'; 1111 parent.appendChild(div); 1112 } 1113 div.style.top = top - 2 + "px"; 1114 div.style.height = height + 4 + "px"; 1115 div.style.left = 0; 1116 let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter"); 1117 if (gutterDiv === null) { 1118 gutterDiv = window.document.createElement("div"); 1119 gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter"); 1120 gutterDiv.style.position = 'absolute'; 1121 const codeCell = window.document.getElementById(targetCell); 1122 const gutter = codeCell.querySelector('.code-annotation-gutter'); 1123 gutter.appendChild(gutterDiv); 1124 } 1125 gutterDiv.style.top = top - 2 + "px"; 1126 gutterDiv.style.height = height + 4 + "px"; 1127 } 1128 selectedAnnoteEl = annoteEl; 1129 } 1130 }; 1131 const unselectCodeLines = () => { 1132 const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"]; 1133 elementsIds.forEach((elId) => { 1134 const div = window.document.getElementById(elId); 1135 if (div) { 1136 div.remove(); 1137 } 1138 }); 1139 selectedAnnoteEl = undefined; 1140 }; 1141 // Handle positioning of the toggle 1142 window.addEventListener( 1143 "resize", 1144 throttle(() => { 1145 elRect = undefined; 1146 if (selectedAnnoteEl) { 1147 selectCodeLines(selectedAnnoteEl); 1148 } 1149 }, 10) 1150 ); 1151 function throttle(fn, ms) { 1152 let throttle = false;
1153 let timer; 1154 return (...args) => { 1155 if(!throttle) { // first call gets through 1156 fn.apply(this, args); 1157 throttle = true; 1158 } else { // all the others get throttled 1159 if(timer) clearTimeout(timer); // cancel #2 1160 timer = setTimeout(() => { 1161 fn.apply(this, args); 1162 timer = throttle = false; 1163 }, ms); 1164 } 1165 }; 1166 } 1167 // Attach click handler to the DT 1168 const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); 1169 for (const annoteDlNode of annoteDls) { 1170 annoteDlNode.addEventListener('click', (event) => { 1171 const clickedEl = event.target; 1172 if (clickedEl !== selectedAnnoteEl) { 1173 unselectCodeLines(); 1174 const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active'); 1175 if (activeEl) { 1176 activeEl.classList.remove('code-annotation-active'); 1177 } 1178 selectCodeLines(clickedEl); 1179 clickedEl.classList.add('code-annotation-active'); 1180 } else { 1181 // Unselect the line 1182 unselectCodeLines(); 1183 clickedEl.classList.remove('code-annotation-active'); 1184 } 1185 }); 1186 } 1187 const findCites = (el) => { 1188 const parentEl = el.parentElement; 1189 if (parentEl) { 1190 const cites = parentEl.dataset.cites; 1191 if (cites) { 1192 return { 1193 el, 1194 cites: cites.split(' ') 1195 }; 1196 } else { 1197 return findCites(el.parentElement) 1198 } 1199 } else { 1200 return undefined; 1201 } 1202 }; 1203 var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); 1204 for (var i=0; i<bibliorefs.length; i++) { 1205 const ref = bibliorefs[i]; 1206 const citeInfo = findCites(ref); 1207 if (citeInfo) { 1208 tippyHover(citeInfo.el, function() { 1209 var popup = window.document.createElement('div'); 1210 citeInfo.cites.forEach(function(cite) { 1211 var citeDiv = window.document.createElement('div'); 1212 citeDiv.classList.add('hanging-indent'); 1213 citeDiv.classList.add('csl-entry'); 1214 var biblioDiv = window.document.getElementById('ref-' + cite); 1215 if (biblioDiv) { 1216 citeDiv.innerHTML = biblioDiv.innerHTML; 1217 } 1218 popup.appendChild(citeDiv); 1219 }); 1220 return popup.innerHTML; 1221 }); 1222 } 1223 } 1224 }); 1225 </script>
1225 1226</div> <!-- /content --> 1227<footer class="footer"> 1228 <div class="nav-footer"> 1229 <div class="nav-footer-left"> 1230<p style="font-size: 1.5em;"> 1231By <a href="https://theurbanist.com.au/about">Mat Lipson</a>, <a href="https://steefancontractor.github.io/my_website/">Steefan Contractor</a> and <a href="https://jamesgoldie.dev">James Goldie</a>. 1232</p> 1233<p style="font-size: 1.5em;"> 1234<a href="mailto:[email protected]">Get in touch!</a> 1235</p> 1236</div> 1237 <div class="nav-footer-center"> 1238 1239 </div> 1240 <div class="nav-footer-right"> 1241<p> 1242Our data comes from the Bureau of Meteorologyâs <a href="http://www.bom.gov.au/climate/change/acorn-sat/">ACORN-SAT</a> and latest XML feeds. 1243</p> 1244<p> 1245Our graphics are <a href="./licence">free to share for non-commercial purposes</a>. 1246</p> 1247<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> 1248</div> 1249 </div> 1250</footer> 1251 1252 1253 1254 1255</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.