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.6.42"> 6 7<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> 8 9 10<title> Coe College Tree Archive â Coe College Tree Archive</title> 11<style> 12code{white-space: pre-wrap;} 13span.smallcaps{font-variant: small-caps;} 14div.columns{display: flex; gap: min(4vw, 1.5em);} 15div.column{flex: auto; overflow-x: auto;} 16div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} 17ul.task-list{list-style: none;} 18ul.task-list li input[type="checkbox"] { 19 width: 0.8em; 20 margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 21 vertical-align: middle; 22} 23</style> 24 25
26<script src="site_libs/quarto-nav/quarto-nav.js"></script>
vendor: 1 bytes, line 26
26
27<script src="site_libs/quarto-nav/headroom.min.js"></script>
vendor: 1 bytes, line 27
27
28<script src="site_libs/clipboard/clipboard.min.js"></script>
vendor: 1 bytes, line 28
28
29<script src="site_libs/quarto-search/autocomplete.umd.js"></script>
vendor: 1 bytes, line 29
29
30<script src="site_libs/quarto-search/fuse.min.js"></script>
vendor: 1 bytes, line 30
30
31<script src="site_libs/quarto-search/quarto-search.js"></script>
31 32<meta name="quarto:offset" content="./"> 33<link href="./images/logo.png" rel="icon" type="image/png">
34<script src="site_libs/quarto-html/quarto.js"></script>
vendor: 1 bytes, line 34
34
35<script src="site_libs/quarto-html/popper.min.js"></script>
vendor: 1 bytes, line 35
35
36<script src="site_libs/quarto-html/tippy.umd.min.js"></script>
vendor: 1 bytes, line 36
36
37<script src="site_libs/quarto-html/anchor.min.js"></script>
37 38<link href="site_libs/quarto-html/tippy.css" rel="stylesheet"> 39<link href="site_libs/quarto-html/quarto-syntax-highlighting-2f5df379a58b258e96c21c0638c20c03.css" rel="stylesheet" id="quarto-text-highlighting-styles">
40<script src="site_libs/bootstrap/bootstrap.min.js"></script>
40 41<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> 42<link href="site_libs/bootstrap/bootstrap-32318f9e09848cd3ad3b77093cd877d7.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
43<script id="quarto-search-options" type="application/json">{ 44 "location": "navbar", 45 "copy-button": false, 46 "collapse-after": 3, 47 "panel-placement": "end", 48 "type": "overlay", 49 "limit": 50, 50 "keyboard-shortcut": [ 51 "f", 52 "/", 53 "s" 54 ], 55 "show-item-context": false, 56 "language": { 57 "search-no-results-text": "No results", 58 "search-matching-documents-text": "matching documents", 59 "search-copy-link-title": "Copy link to search", 60 "search-hide-matches-text": "Hide additional matches", 61 "search-more-match-text": "more match in this document", 62 "search-more-matches-text": "more matches in this document", 63 "search-clear-button-title": "Clear", 64 "search-text-placeholder": "", 65 "search-detached-cancel-button-title": "Cancel", 66 "search-submit-button-title": "Submit", 67 "search-label": "Search" 68 } 69}</script>
vendor: 67 bytes, lines 69-70
69 70<script async="" src="https://www.googletagmanager.com/gtag/js?id=
70G-3XLB5C4Z3N
vendor: 13 bytes, lines 70-71
70"></script> 71
72<script type="text/javascript"> 73 74window.dataLayer = window.dataLayer || []; 75function gtag(){dataLayer.push(arguments);} 76gtag('js', new Date()); 77 78 gtag('consent', 'default', { 79 'ad_storage': 'denied', 80 'analytics_storage': 'denied' 81 }); 82gtag('config', 'G-3XLB5C4Z3N', { 'anonymize_ip': true}); 83</script>
83 84 85 86<link rel="stylesheet" href="styles.css"> 87<meta property="og:title" content=" Coe College Tree Archive â Coe College Tree Archive"> 88<meta property="og:description" content=""> 89<meta property="og:image" content="images/logo.png"> 90<meta property="og:site_name" content="Coe College Tree Archive"> 91</head> 92 93<body class="nav-fixed"> 94 95<div id="quarto-search-results"></div> 96 <header id="quarto-header" class="headroom fixed-top"> 97 <nav class="navbar navbar-expand-lg " data-bs-theme="dark"> 98 <div class="navbar-container container-fluid"> 99 <div class="navbar-brand-container mx-auto"> 100 <a href="./index.html" class="navbar-brand navbar-brand-logo"> 101 <img src="./images/logo.png" alt="" class="navbar-logo"> 102 </a> 103 <a class="navbar-brand" href="./index.html"> 104 <span class="navbar-title">Coe College Tree Archive</span> 105 </a> 106 </div> 107 <div id="quarto-search" class="" title="Search"></div> 108 <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> 109 <span class="navbar-toggler-icon"></span> 110</button> 111 <div class="collapse navbar-collapse" id="navbarCollapse"> 112 <ul class="navbar-nav navbar-nav-scroll me-auto"> 113 <li class="nav-item"> 114 <a class="nav-link active" href="./index.html" aria-current="page"> 115<span class="menu-text">About</span></a> 116 </li> 117 <li class="nav-item"> 118 <a class="nav-link" href="./tree-map.html"> 119<span class="menu-text">Tree Map</span></a> 120 </li> 121 <li class="nav-item"> 122 <a class="nav-link" href="./tree-profiles.html"> 123<span class="menu-text">Tree Profiles</span></a> 124 </li> 125 <li class="nav-item"> 126 <a class="nav-link" href="./data.html"> 127<span class="menu-text">Data</span></a> 128 </li> 129 <li class="nav-item"> 130 <a class="nav-link" href="./identification.html"> 131<span class="menu-text">Identification</span></a> 132 </li> 133 <li class="nav-item"> 134 <a class="nav-link" href="./contribute.html"> 135<span class="menu-text">Contribute</span></a> 136 </li> 137 <li class="nav-item"> 138 <a class="nav-link" href="./connect.html"> 139<span class="menu-text">Connect</span></a> 140 </li> 141</ul> 142 </div> <!-- /navcollapse --> 143 <div class="quarto-navbar-tools"> 144</div> 145 </div> <!-- /container-fluid --> 146 </nav> 147</header> 148<!-- content --> 149<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar"> 150<!-- sidebar --> 151<!-- margin-sidebar --> 152 <div id="quarto-margin-sidebar" class="sidebar margin-sidebar"> 153 <nav id="TOC" role="doc-toc" class="toc-active"> 154 <h2 id="toc-title">On this page</h2> 155 156 <ul> 157 <li><a href="#about" id="toc-about" class="nav-link active" data-scroll-target="#about"><strong>About</strong></a></li> 158 <li><a href="#how-to-use-the-archive" id="toc-how-to-use-the-archive" class="nav-link" data-scroll-target="#how-to-use-the-archive"><strong>How to Use the Archive</strong></a></li> 159 <li><a href="#guiding-principles" id="toc-guiding-principles" class="nav-link" data-scroll-target="#guiding-principles"><strong>Guiding Principles</strong></a> 160 <ul class="collapse"> 161 <li><a href="#trees-are-a-part-of-our-college-identity" id="toc-trees-are-a-part-of-our-college-identity" class="nav-link" data-scroll-target="#trees-are-a-part-of-our-college-identity"><strong>Trees are a Part of Our College Identity</strong></a></li> 162 <li><a href="#our-environment-is-mutable" id="toc-our-environment-is-mutable" class="nav-link" data-scroll-target="#our-environment-is-mutable"><strong>Our Environment is Mutable</strong></a></li> 163 <li><a href="#planting-trees-will-not-save-the-worldbut-it-can-benefit-someone" id="toc-planting-trees-will-not-save-the-worldbut-it-can-benefit-someone" class="nav-link" data-scroll-target="#planting-trees-will-not-save-the-worldbut-it-can-benefit-someone"><strong>Planting Trees Will Not Save the WorldâBut It Can Benefit Someone</strong></a></li> 164 </ul></li> 165 <li><a href="#project-background" id="toc-project-background" class="nav-link" data-scroll-target="#project-background"><strong>
165Project Background</strong></a></li> 166 </ul> 167</nav> 168 </div> 169<!-- main --> 170<main class="content page-columns page-full" id="quarto-document-content"> 171 172<header id="title-block-header" class="quarto-title-block default"> 173<div class="quarto-title"> 174<h1 class="title"><img src="images/logo.png" width="50" height="50"> <strong>Coe College Tree Archive</strong></h1> 175</div> 176 177 178 179<div class="quarto-title-meta"> 180 181 182 183 184 </div> 185 186 187 188</header> 189 190 191<section id="about" class="level2"> 192<h2 class="anchored" data-anchor-id="about"><strong>About</strong></h2> 193<p>The Coe College Tree Archive is an online record of trees on the west side of Coe Collegeâs campus. By creating an online archive, the project attempts to collect valuable environmental data, promote engagement with Coeâs urban forest, and ultimately shape how the Coe community views its trees. The online archive features interactive maps, profiles of Coeâs trees, environmental benefit estimates, tips for tree identification at Coe, and opportunities to contribute to the archive.</p> 194<p><br></p> 195</section> 196<section id="how-to-use-the-archive" class="level2"> 197<h2 class="anchored" data-anchor-id="how-to-use-the-archive"><strong>How to Use the Archive</strong></h2> 198<p><span style="color: #89b04c;"><strong>Explore</strong></span> Whether youâre interested in learning more about identifying local trees or are curious about just one tree, the Coe College Tree Archive offers several opportunities to engage with the trees around campus.</p> 199<ul> 200<li>Navigate the trees of Coe College using the <a href="https://coetreearchive.github.io/tree-map.html">campus tree map</a></li> 201<li>Search for trees by their ID number or species on the <a href="https://coetreearchive.github.io/tree-profiles.html">tree profiles</a> page</li> 202<li>Try identifying trees yourself with the help of the projectâs <a href="https://coetreearchive.github.io/identification.html">guide to tree identification</a></li> 203</ul> 204<p><span style="color: #89b04c;"><strong>Study</strong></span> Collecting and storing records on Coeâs urban forest are an integral part of the projectâs mission, and for those interested, the archive makes these records readily available.</p> 205<ul> 206<li><a href="https://coetreearchive.github.io/data.html#download-the-tree-data">Download the tree data</a> in convenient formats for analyzing and mapping</li> 207<li>View the data and code used to build the archive on <a href="https://github.com/CoeTreeArchive/CoeTreeArchive.github.io">the projectâs GitHub repository</a></li> 208<li>Read the <a href="https://coetreearchive.github.io/data.html#read-the-full-report">full tree reports</a> generated by i-Tree Eco</li> 209</ul> 210<p><span style="color: #89b04c;"><strong>Contribute</strong></span> The archive works better when everyone in the Coe community can participate in its development. Consider learning more about the ways that you can add to the archive yourself or get connected with local tree-centered causes.</p> 211<ul> 212<li>Send in observations, photos, stories, or whatever youâre willing to <a href="https://coetreearchive.github.io/contribute.html">add to the archive</a></li> 213<li>Learn more about opportunities to <a href="https://coetreearchive.github.io/connect.html">get connected</a> in local environmental efforts</li> 214</ul> 215<p><br></p> 216</section> 217<section id="guiding-principles" class="level2 page-columns page-full"> 218<h2 class="anchored" data-anchor-id="guiding-principles"><strong>Guiding Principles</strong></h2> 219<section id="trees-are-a-part-of-our-college-identity" class="level3"> 220<h3 class="anchored" data-anchor-id="trees-are-a-part-of-our-college-identity"><strong>Trees are a Part of Our College Identity</strong></h3> 221<p>Treesâparticularly Oak treesâhave long been an important part of the identity of Coe College. The Collegeâs yearbook, which ran from 1903 through 2007, was called <em>The Acorn</em>. Likewise, the Collegeâs sesquicentennial logo features an acorn and Oak leaves. The 2020 derecho reminded us of both the importance of our tree life on Coeâs campus and the fragility of our tree life in the face of elevated climate risks. Recognizing that trees are both vital to our community identity and under threat, the Coe College Tree Archive seeks to preserve records and stories of our trees. In doing so, the archive solidifies trees and our natural environment as an integral part of the Collegeâs identify by recognizing the history of our trees as worthy of archiving alongside other aspects of our history.</p> 222<div class="quarto-figure quarto-figure-center"> 223<figure class="figure"> 224<p><img src="images/home/old_logo.png" class="img-fluid figure-img"></p> 225<figcaption>Retired Coe logo circa 2001.</figcaption> 226</figure> 227</div> 228<p><br></p> 229</section> 230<section id="our-environment-is-mutable" class="level3 page-columns page-full"> 231<h3 class="anchored" data-anchor-id="our-environment-is-mutable"><strong>Our Environment is Mutable</strong></h3> 232<p>Humanity has demonstrated a remarkable ability to transform the planet. While we often see the ways people have used this power of transformation to cause environmental degradation, it is also important to highlight the ways that we all can use this power to give back to our environment. The Coe community has tremendous agency over the urban forest on campus. We should take comfort in the opportunities we have to give back to our communities through nature.</p> 233<p><br></p> 234<div class="page-columns page-full"> 235<div class="quarto-figure quarto-figure-center page-columns page-full"> 236<figure class="figure page-columns page-full"> 237<p class="page-columns page-full"><img src="images/home/academic_quad.png" class="img-fluid figure-img column-page"></p> 238<figcaption>This panoramic view of the academic quad circa the 1930s looks barren relative to the academic quad today. The trees seen today are no accident of nature. Rather, the trees we see on our campus are the result of very intentional effort from members of our communityâa reminder of the power we have as individuals and members of our close communities to affect our environment for the better.</figcaption> 239</figure> 240</div> 241</div> 242<p><br></p> 243</section> 244<section id="planting-trees-will-not-save-the-worldbut-it-can-benefit-someone" class="level3"> 245<h3 class="anchored" data-anchor-id="planting-trees-will-not-save-the-worldbut-it-can-benefit-someone"><strong>Planting Trees Will Not Save the WorldâBut It Can Benefit Someone</strong></h3> 246<p>Although we should not underestimate the power each of us has to change the world, we must also acknowledge that climate change, environmental injustice, and the degradation of the natural world are not issues any of us can resolve individually. We cannot plant enough trees to save the world.</p> 247<p>Still, trees provide tangible benefits to our local community. The project encourages all of us to find ways we can make piecemeal efforts to improve the quality of the environments we inhabit. Whether itâs by volunteering with environmental groups, sharing our financial resources, speaking up for environmental causes, or of course, planting trees, the efforts we make today to improve our local environment can benefit our community in meaningful ways for generations. The Coe College Tree Archive seeks to illustrate this point b
247y celebrating not only our trees but the staff, students, faculty, and alumni who have invested in the future of our campus by planting trees.</p> 248<p><br></p> 249</section> 250</section> 251<section id="project-background" class="level2 page-columns page-full"> 252<h2 class="anchored" data-anchor-id="project-background"><strong>Project Background</strong></h2> 253<p>The Coe College Tree Archive originated in Dr. Allison Carrâs Environmental Rhetoric class. Dr. Carr challenged students in her class to find creative ways they could connect with nature and environmentalism in everyday life. Although the original project focused on observing trees for purely the intrinsic benefit, the opportunity to preserve the record of the Collegeâs trees in an accessible format became more apparent as it progressed and motivated the Coe College Tree Archive. Similar efforts by others, like <a href="https://eeb.yale.edu/people/faculty-lecturer/marta-wells">Dr. Marta Wells</a> of <a href="https://naturewalk.yale.edu/about">Yale Nature Walk</a>, helped to push the effort into its current form. This project has benefited from the invaluable feedback of other students in Dr. Carrâs Fall 2022 Environmental Rhetoric class.</p> 254<p>The Coe College Tree Archive was created by <a href="https://perryevan.github.io/">Evan Perry</a> (Economics & Math, â23), a student in Dr. Carrâs Fall 2022 Environmental Rhetoric class. Evan is currently a PhD student studying Environmental Economics at the Yale School of the Environment. <strong>If you are interested in helping to maintain or expand the archive, please contact Evan by emailing <a href="mailto:[email protected]">[email protected]</a></strong> <strong>or <a href="mailto:[email protected]">[email protected]</a></strong>.</p> 255 256 257 258<div class="no-row-height column-margin column-container"><div class=""> 259<p><img src="images/home/evan_perry.png" align="left" width="100" hspace="20" vspace="20"></p> 260</div></div></section> 261 262</main> <!-- /main -->
263<script id="quarto-html-after-body" type="application/javascript"> 264window.document.addEventListener("DOMContentLoaded", function (event) { 265 const toggleBodyColorMode = (bsSheetEl) => { 266 const mode = bsSheetEl.getAttribute("data-mode"); 267 const bodyEl = window.document.querySelector("body"); 268 if (mode === "dark") { 269 bodyEl.classList.add("quarto-dark"); 270 bodyEl.classList.remove("quarto-light"); 271 } else { 272 bodyEl.classList.add("quarto-light"); 273 bodyEl.classList.remove("quarto-dark"); 274 } 275 } 276 const toggleBodyColorPrimary = () => { 277 const bsSheetEl = window.document.querySelector("link#quarto-bootstrap"); 278 if (bsSheetEl) { 279 toggleBodyColorMode(bsSheetEl); 280 } 281 } 282 toggleBodyColorPrimary(); 283 const icon = "î§"; 284 const anchorJS = new window.AnchorJS(); 285 anchorJS.options = { 286 placement: 'right', 287 icon: icon 288 }; 289 anchorJS.add('.anchored'); 290 const isCodeAnnotation = (el) => { 291 for (const clz of el.classList) { 292 if (clz.startsWith('code-annotation-')) { 293 return true; 294 } 295 } 296 return false; 297 } 298 const onCopySuccess = function(e) { 299 // button target 300 const button = e.trigger; 301 // don't keep focus 302 button.blur(); 303 // flash "checked" 304 button.classList.add('code-copy-button-checked'); 305 var currentTitle = button.getAttribute("title"); 306 button.setAttribute("title", "Copied!"); 307 let tooltip; 308 if (window.bootstrap) { 309 button.setAttribute("data-bs-toggle", "tooltip"); 310 button.setAttribute("data-bs-placement", "left"); 311 button.setAttribute("data-bs-title", "Copied!"); 312 tooltip = new bootstrap.Tooltip(button, 313 { trigger: "manual", 314 customClass: "code-copy-button-tooltip", 315 offset: [0, -8]}); 316 tooltip.show(); 317 } 318 setTimeout(function() { 319 if (tooltip) { 320 tooltip.hide(); 321 button.removeAttribute("data-bs-title"); 322 button.removeAttribute("data-bs-toggle"); 323 button.removeAttribute("data-bs-placement"); 324 } 325 button.setAttribute("title", currentTitle); 326 button.classList.remove('code-copy-button-checked'); 327 }, 1000); 328 // clear code selection 329 e.clearSelection(); 330 } 331 const getTextToCopy = function(trigger) { 332 const codeEl = trigger.previousElementSibling.cloneNode(true); 333 for (const childEl of codeEl.children) { 334 if (isCodeAnnotation(childEl)) { 335 childEl.remove(); 336 } 337 } 338 return codeEl.innerText; 339 } 340 const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', { 341 text: getTextToCopy 342 }); 343 clipboard.on('success', onCopySuccess); 344 if (window.document.getElementById('quarto-embedded-source-code-modal')) { 345 const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', { 346 text: getTextToCopy, 347 container: window.document.getElementById('quarto-embedded-source-code-modal') 348 }); 349 clipboardModal.on('success', onCopySuccess); 350 } 351 var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//); 352 var mailtoRegex = new RegExp(/^mailto:/); 353 var filterRegex = new RegExp('/' + window.location.host + '/'); 354 var isInternal = (href) => { 355 return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); 356 } 357 // Inspect non-navigation links and adorn them if external 358 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)'); 359 for (var i=0; i<links.length; i++) { 360 const link = links[i]; 361 if (!isInternal(link.href)) { 362 // undo the damage that might have been done by quarto-nav.js in the case of 363 // links that we want to consider external 364 if (link.dataset.originalHref !== undefined) { 365 link.href = link.dataset.originalHref; 366 } 367 } 368 } 369 function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { 370 const config = { 371 allowHTML: true, 372 maxWidth: 500, 373 delay: 100,
374 arrow: false, 375 appendTo: function(el) { 376 return el.parentElement; 377 }, 378 interactive: true, 379 interactiveBorder: 10, 380 theme: 'quarto', 381 placement: 'bottom-start', 382 }; 383 if (contentFn) { 384 config.content = contentFn; 385 } 386 if (onTriggerFn) { 387 config.onTrigger = onTriggerFn; 388 } 389 if (onUntriggerFn) { 390 config.onUntrigger = onUntriggerFn; 391 } 392 window.tippy(el, config); 393 } 394 const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); 395 for (var i=0; i<noterefs.length; i++) { 396 const ref = noterefs[i]; 397 tippyHover(ref, function() { 398 // use id or data attribute instead here 399 let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); 400 try { href = new URL(href).hash; } catch {} 401 const id = href.replace(/^#\/?/, ""); 402 const note = window.document.getElementById(id); 403 if (note) { 404 return note.innerHTML; 405 } else { 406 return ""; 407 } 408 }); 409 } 410 const xrefs = window.document.querySelectorAll('a.quarto-xref'); 411 const processXRef = (id, note) => { 412 // Strip column container classes 413 const stripColumnClz = (el) => { 414 el.classList.remove("page-full", "page-columns"); 415 if (el.children) { 416 for (const child of el.children) { 417 stripColumnClz(child); 418 } 419 } 420 } 421 stripColumnClz(note) 422 if (id === null || id.startsWith('sec-')) { 423 // Special case sections, only their first couple elements 424 const container = document.createElement("div"); 425 if (note.children && note.children.length > 2) { 426 container.appendChild(note.children[0].cloneNode(true)); 427 for (let i = 1; i < note.children.length; i++) { 428 const child = note.children[i]; 429 if (child.tagName === "P" && child.innerText === "") { 430 continue; 431 } else { 432 container.appendChild(child.cloneNode(true)); 433 break; 434 } 435 } 436 if (window.Quarto?.typesetMath) { 437 window.Quarto.typesetMath(container); 438 } 439 return container.innerHTML 440 } else { 441 if (window.Quarto?.typesetMath) { 442 window.Quarto.typesetMath(note); 443 } 444 return note.innerHTML; 445 } 446 } else { 447 // Remove any anchor links if they are present 448 const anchorLink = note.querySelector('a.anchorjs-link'); 449 if (anchorLink) { 450 anchorLink.remove(); 451 } 452 if (window.Quarto?.typesetMath) { 453 window.Quarto.typesetMath(note); 454 } 455 if (note.classList.contains("callout")) { 456 return note.outerHTML; 457 } else { 458 return note.innerHTML; 459 } 460 } 461 } 462 for (var i=0; i<xrefs.length; i++) { 463 const xref = xrefs[i]; 464 tippyHover(xref, undefined, function(instance) { 465 instance.disable(); 466 let url = xref.getAttribute('href'); 467 let hash = undefined; 468 if (url.startsWith('#')) { 469 hash = url; 470 } else { 471 try { hash = new URL(url).hash; } catch {} 472 } 473 if (hash) { 474 const id = hash.replace(/^#\/?/, ""); 475 const note = window.document.getElementById(id); 476 if (note !== null) { 477 try { 478 const html = processXRef(id, note.cloneNode(true)); 479 instance.setContent(html); 480 } finally { 481 instance.enable(); 482 instance.show(); 483 } 484 } else { 485 // See if we can fetch this 486 fetch(url.split('#')[0]) 487 .then(res => res.text()) 488 .then(html => { 489 const parser = new DOMParser(); 490 const htmlDoc = parser.parseFromString(html, "text/html"); 491 const note = htmlDoc.getElementById(id); 492 if (note !== null) { 493 const html = processXRef(id, note); 494 instance.setContent(html); 495 } 496 }).finally(() => { 497 instance.enable(); 498 instance.show(); 499 }); 500 } 501 } else { 502 // See if we can fetch a full url (with no hash to target)
503 // This is a special case and we should probably do some content thinning / targeting 504 fetch(url) 505 .then(res => res.text()) 506 .then(html => { 507 const parser = new DOMParser(); 508 const htmlDoc = parser.parseFromString(html, "text/html"); 509 const note = htmlDoc.querySelector('main.content'); 510 if (note !== null) { 511 // This should only happen for chapter cross references 512 // (since there is no id in the URL) 513 // remove the first header 514 if (note.children.length > 0 && note.children[0].tagName === "HEADER") { 515 note.children[0].remove(); 516 } 517 const html = processXRef(null, note); 518 instance.setContent(html); 519 } 520 }).finally(() => { 521 instance.enable(); 522 instance.show(); 523 }); 524 } 525 }, function(instance) { 526 }); 527 } 528 let selectedAnnoteEl; 529 const selectorForAnnotation = ( cell, annotation) => { 530 let cellAttr = 'data-code-cell="' + cell + '"'; 531 let lineAttr = 'data-code-annotation="' + annotation + '"'; 532 const selector = 'span[' + cellAttr + '][' + lineAttr + ']'; 533 return selector; 534 } 535 const selectCodeLines = (annoteEl) => { 536 const doc = window.document; 537 const targetCell = annoteEl.getAttribute("data-target-cell"); 538 const targetAnnotation = annoteEl.getAttribute("data-target-annotation"); 539 const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); 540 const lines = annoteSpan.getAttribute("data-code-lines").split(","); 541 const lineIds = lines.map((line) => { 542 return targetCell + "-" + line; 543 }) 544 let top = null; 545 let height = null; 546 let parent = null; 547 if (lineIds.length > 0) { 548 //compute the position of the single el (top and bottom and make a div) 549 const el = window.document.getElementById(lineIds[0]); 550 top = el.offsetTop; 551 height = el.offsetHeight; 552 parent = el.parentElement.parentElement; 553 if (lineIds.length > 1) { 554 const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]); 555 const bottom = lastEl.offsetTop + lastEl.offsetHeight; 556 height = bottom - top; 557 } 558 if (top !== null && height !== null && parent !== null) { 559 // cook up a div (if necessary) and position it 560 let div = window.document.getElementById("code-annotation-line-highlight"); 561 if (div === null) { 562 div = window.document.createElement("div"); 563 div.setAttribute("id", "code-annotation-line-highlight"); 564 div.style.position = 'absolute'; 565 parent.appendChild(div); 566 } 567 div.style.top = top - 2 + "px"; 568 div.style.height = height + 4 + "px"; 569 div.style.left = 0; 570 let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter"); 571 if (gutterDiv === null) { 572 gutterDiv = window.document.createElement("div"); 573 gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter"); 574 gutterDiv.style.position = 'absolute'; 575 const codeCell = window.document.getElementById(targetCell); 576 const gutter = codeCell.querySelector('.code-annotation-gutter'); 577 gutter.appendChild(gutterDiv); 578 } 579 gutterDiv.style.top = top - 2 + "px"; 580 gutterDiv.style.height = height + 4 + "px"; 581 } 582 selectedAnnoteEl = annoteEl; 583 } 584 }; 585 const unselectCodeLines = () => { 586 const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"]; 587 elementsIds.forEach((elId) => { 588 const div = window.document.getElementById(elId); 589 if (div) { 590 div.remove(); 591 } 592 }); 593 selectedAnnoteEl = undefined; 594 }; 595 // Handle positioning of the toggle 596 window.addEventListener( 597 "resize", 598 throttle(() => { 599 elRect = undefined; 600 if (selectedAnnoteEl) { 601 selectCodeLines(selectedAnnoteEl); 602 } 603 }, 10) 604 ); 605 function throttle(fn, ms) { 606 let throttle = false;
607 let timer; 608 return (...args) => { 609 if(!throttle) { // first call gets through 610 fn.apply(this, args); 611 throttle = true; 612 } else { // all the others get throttled 613 if(timer) clearTimeout(timer); // cancel #2 614 timer = setTimeout(() => { 615 fn.apply(this, args); 616 timer = throttle = false; 617 }, ms); 618 } 619 }; 620 } 621 // Attach click handler to the DT 622 const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); 623 for (const annoteDlNode of annoteDls) { 624 annoteDlNode.addEventListener('click', (event) => { 625 const clickedEl = event.target; 626 if (clickedEl !== selectedAnnoteEl) { 627 unselectCodeLines(); 628 const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active'); 629 if (activeEl) { 630 activeEl.classList.remove('code-annotation-active'); 631 } 632 selectCodeLines(clickedEl); 633 clickedEl.classList.add('code-annotation-active'); 634 } else { 635 // Unselect the line 636 unselectCodeLines(); 637 clickedEl.classList.remove('code-annotation-active'); 638 } 639 }); 640 } 641 const findCites = (el) => { 642 const parentEl = el.parentElement; 643 if (parentEl) { 644 const cites = parentEl.dataset.cites; 645 if (cites) { 646 return { 647 el, 648 cites: cites.split(' ') 649 }; 650 } else { 651 return findCites(el.parentElement) 652 } 653 } else { 654 return undefined; 655 } 656 }; 657 var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); 658 for (var i=0; i<bibliorefs.length; i++) { 659 const ref = bibliorefs[i]; 660 const citeInfo = findCites(ref); 661 if (citeInfo) { 662 tippyHover(citeInfo.el, function() { 663 var popup = window.document.createElement('div'); 664 citeInfo.cites.forEach(function(cite) { 665 var citeDiv = window.document.createElement('div'); 666 citeDiv.classList.add('hanging-indent'); 667 citeDiv.classList.add('csl-entry'); 668 var biblioDiv = window.document.getElementById('ref-' + cite); 669 if (biblioDiv) { 670 citeDiv.innerHTML = biblioDiv.innerHTML; 671 } 672 popup.appendChild(citeDiv); 673 }); 674 return popup.innerHTML; 675 }); 676 } 677 } 678}); 679</script>
679 680</div> <!-- /content --> 681 682 683 684 685</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.