PageSourceSearch

https://isithotrightnow.com/

html isithotrightnow.com collected 2026-09-26 06:16:07 UTC 107,706 bytes, 1,255 lines download raw bytes

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">=&gt;</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">=&gt;</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">=&gt;</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">&lt;div class="answer-icon-and-label"&gt;</span></span>
322<span id="cb7-15"><a href="#cb7-15" aria-hidden="true" tabindex="-1"></a><span class="vs">  &lt;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">;"&gt;</span></span>
323<span id="cb7-16"><a href="#cb7-16" aria-hidden="true" tabindex="-1"></a><span class="vs">  &lt;/span&gt;</span></span>
324<span id="cb7-17"><a href="#cb7-17" aria-hidden="true" tabindex="-1"></a><span class="vs">  &lt;span&gt;</span><span class="sc">${</span>statsPlace<span class="op">.</span><span class="at">isit_answer</span><span class="sc">}</span><span class="vs">&lt;/span&gt;</span></span>
325<span id="cb7-18"><a href="#cb7-18" aria-hidden="true" tabindex="-1"></a><span class="vs">&lt;/div&gt;`</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">&lt;div class="answer-icon-and-label"&gt;</span></span>
461<span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a><span class="vs">  &lt;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">;"&gt;&lt;/span&gt;</span></span>
462<span id="cb14-4"><a href="#cb14-4" aria-hidden="true" tabindex="-1"></a><span class="vs">  &lt;span&gt;</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&lt;/span&gt;</span></span>
463<span id="cb14-5"><a href="#cb14-5" aria-hidden="true" tabindex="-1"></a><span class="vs">&lt;/div&gt;`</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&lt;br&gt;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 class="sc">${</span>bucket_base <span class="op">+</span> <span class="st">"plots/timeseries/timeseries-"</span> <span class="op">+</span> stationId <span class="op">+</span> <span class="st">".png"</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>
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 class="sc">${</span>bucket_base <span class="op">+</span> <span class="st">"plots/distribution/distribution-"</span> <span class="op">+</span> stationId <span class="op">+</span> <span class="st">".png"</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>
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 class="sc">${</span>bucket_base <span class="op">+</span> <span class="st">"plots/heatmap/heatmap-"</span> <span class="op">+</span> stationId <span class="op">+</span> <span class="st">"-"</span> <span class="op">+</span> heatmapYear <span class="op">+</span> <span class="st">".png"</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>
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">&gt;=</span> <span class="dv">10</span> <span class="op">&amp;&amp;</span> nowHour <span class="op">&lt;=</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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 &gt; 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">=&gt;</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">&gt;</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">=&gt;</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">&gt;</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">=&gt;</span> (<span class="op">!</span>d<span class="op">.</span><span class="at">max_stale</span>) <span class="op">&amp;&amp;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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      &nbsp;
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.