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.40"> 6 7<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> 8 9 10<title>Contact â Neeldhara</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<script src="site_libs/quarto-html/quarto.js"></script>
vendor: 1 bytes, line 33
33
34<script src="site_libs/quarto-html/popper.min.js"></script>
vendor: 1 bytes, line 34
34
35<script src="site_libs/quarto-html/tippy.umd.min.js"></script>
vendor: 1 bytes, line 35
35
36<script src="site_libs/quarto-html/anchor.min.js"></script>
36 37<link href="site_libs/quarto-html/tippy.css" rel="stylesheet"> 38<link href="site_libs/quarto-html/quarto-syntax-highlighting-549806ee2085284f45b00abea8c6df48.css" rel="stylesheet" id="quarto-text-highlighting-styles">
39<script src="site_libs/bootstrap/bootstrap.min.js"></script>
39 40<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> 41<link href="site_libs/bootstrap/bootstrap-53d508deb6da4ff595675ebf964bed0d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
42<script id="quarto-search-options" type="application/json">{ 43 "location": "navbar", 44 "copy-button": false, 45 "collapse-after": 3, 46 "panel-placement": "end", 47 "type": "overlay", 48 "limit": 50, 49 "keyboard-shortcut": [ 50 "f", 51 "/", 52 "s" 53 ], 54 "show-item-context": false, 55 "language": { 56 "search-no-results-text": "No results", 57 "search-matching-documents-text": "matching documents", 58 "search-copy-link-title": "Copy link to search", 59 "search-hide-matches-text": "Hide additional matches", 60 "search-more-match-text": "more match in this document", 61 "search-more-matches-text": "more matches in this document", 62 "search-clear-button-title": "Clear", 63 "search-text-placeholder": "", 64 "search-detached-cancel-button-title": "Cancel", 65 "search-submit-button-title": "Submit", 66 "search-label": "Search" 67 } 68}</script>
68 69<style>html{ scroll-behavior: smooth; }</style>
70<script src="https://analytics.neeldhara.website/api/script.js" data-site-id="a31a3a742777" defer=""></script>
70 71 72 73<link rel="stylesheet" href="css/styles.css"> 74<link rel="stylesheet" href="./css/contact.css"> 75</head> 76 77<body class="nav-fixed"> 78 79<div id="quarto-search-results"></div> 80 <header id="quarto-header" class="headroom fixed-top"> 81 <nav class="navbar navbar-expand-lg " data-bs-theme="dark"> 82 <div class="navbar-container container-fluid"> 83 <div class="navbar-brand-container mx-auto"> 84 <a class='navbar-brand' href='/'> 85 <span class="navbar-title">Neeldhara</span> 86 </a> 87 </div> 88 <div id="quarto-search" class="" title="Search"></div> 89 <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(); }"> 90 <span class="navbar-toggler-icon"></span> 91</button> 92 <div class="collapse navbar-collapse" id="navbarCollapse"> 93 <ul class="navbar-nav navbar-nav-scroll me-auto"> 94 <li class="nav-item"> 95 <a class='nav-link' href='/about'> 96<span class="menu-text">About</span></a> 97 </li> 98 <li class="nav-item dropdown "> 99 <a class="nav-link dropdown-toggle" href="#" id="nav-menu-research" role="link" data-bs-toggle="dropdown" aria-expanded="false"> 100 <span class="menu-text">Research</span> 101 </a> 102 <ul class="dropdown-menu" aria-labelledby="nav-menu-research"> 103 <li> 104 <a class='dropdown-item' href='/research/overview'> 105 <span class="dropdown-text">Overview</span></a> 106 </li> 107 <li> 108 <a class='dropdown-item' href='/research/people'> 109 <span class="dropdown-text">People</span></a> 110 </li> 111 <li> 112 <a class='dropdown-item' href='/research/publications'> 113 <span class="dropdown-text">Publications</span></a> 114 </li> 115 <li> 116 <a class="dropdown-item" href="./research/surveys"> 117 <span class="dropdown-text">Surveys</span></a> 118 </li> 119 </ul> 120 </li> 121 <li class="nav-item dropdown "> 122 <a class="nav-link dropdown-toggle" href="#" id="nav-menu-teaching" role="link" data-bs-toggle="dropdown" aria-expanded="false"> 123 <span class="menu-text">Teaching</span> 124 </a> 125 <ul class="dropdown-menu" aria-labelledby="nav-menu-teaching"> 126 <li> 127 <a class='dropdown-item' href='/courses/'> 128 <span class="dropdown-text">Courses</span></a> 129 </li> 130 <li> 131 <a class='dropdown-item' href='/materials/'> 132 <span class="dropdown-text">Materials</span></a> 133 </li> 134 </ul> 135 </li> 136 <li class="nav-item dropdown "> 137 <a class="nav-link dropdown-toggle" href="#" id="nav-menu-lists" role="link" data-bs-toggle="dropdown" aria-expanded="false"> 138 <span class="menu-text">Lists</span> 139 </a> 140 <ul class="dropdown-menu" aria-labelledby="nav-menu-lists"> 141 <li> 142 <a class="dropdown-item" href="./tgif/"> 143 <span class="dropdown-text">Puzzles</span></a> 144 </li> 145 <li> 146 <a class="dropdown-item" href="./bookmarks/"> 147 <span class="dropdown-text">Bookmarks</span></a> 148 </li> 149 </ul> 150 </li> 151 <li class="nav-item dropdown "> 152 <a class="nav-link dropdown-toggle" href="#" id="nav-menu-exposition" role="link" data-bs-toggle="dropdown" aria-expanded="false"> 153 <span class="menu-text">Exposition</span> 154 </a> 155 <ul class="dropdown-menu" aria-labelledby="nav-menu-exposition"> 156 <li> 157 <a class="dropdown-item" href="./talks/"> 158 <span class="dropdown-text">Talks</span></a> 159 </li> 160 <li> 161 <a class="dropdown-item" href="./videos/"> 162 <span class="dropdown-text">Videos</span></a> 163 </li> 164 </ul> 165 </li> 166 <li class="nav-item"> 167 <a class="nav-link" href="./events/"> 168<span class="menu-text">Events</span></a> 169 </li> 170 <li class="nav-item"> 171 <a class='nav-link' href='/blog'> 172<span class="menu-text">Blog</span></a> 173 </li> 174</ul> 175 <ul class="navbar-nav navbar-nav-scroll ms-auto"> 176 <li class="nav-item compact"> 177 <a class="nav-link" href="https://www.youtube.com/c/NeeldharaMisra42"> <i class="bi bi-youtube" role="img"> 178</i> 179<span class="menu-text"></span></a> 180 </li>
181 <li class="nav-item compact"> 182 <a class="nav-link" href="https://www.linkedin.com/in/neeldhara-misra-a54b6920/"> <i class="bi bi-linkedin" role="img"> 183</i> 184<span class="menu-text"></span></a> 185 </li> 186 <li class="nav-item compact"> 187 <a class="nav-link" href="https://github.com/neeldhara"> <i class="bi bi-github" role="img"> 188</i> 189<span class="menu-text"></span></a> 190 </li> 191 <li class="nav-item compact"> 192 <a class="nav-link" href="https://mathstodon.xyz/@neeldhara"> <i class="bi bi-mastodon" role="img"> 193</i> 194<span class="menu-text"></span></a> 195 </li> 196 <li class="nav-item compact"> 197 <a class="nav-link" href="./blog.xml"> <i class="bi bi-rss" role="img"> 198</i> 199<span class="menu-text"></span></a> 200 </li> 201</ul> 202 </div> <!-- /navcollapse --> 203 <div class="quarto-navbar-tools"> 204</div> 205 </div> <!-- /container-fluid --> 206 </nav> 207</header> 208<!-- content --> 209<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-full page-navbar"> 210<!-- sidebar --> 211<!-- margin-sidebar --> 212 213<!-- main --> 214<main class="content column-body" id="quarto-document-content"> 215 216<header id="title-block-header" class="quarto-title-block default"> 217<div class="quarto-title"> 218<h1 class="title">Contact</h1> 219</div> 220 221 222 223<div class="quarto-title-meta column-body"> 224 225 226 227 228 </div> 229 230 231 232</header> 233 234 235<section id="contact" class="level1 {column-page-inset}"> 236<h1>Contact</h1> 237<hr> 238<h3 class="anchored" data-anchor-id="contact"> 239Address 240</h3> 241<p>Neeldhara Misra AB 4/305, <br> IIT Gandhinagar Palaj, <br> Gandhinagar 382055 <br> India</p> 242<h3 class="anchored"> 243Email 244</h3> 245<p><code>[email protected]</code> ⢠<code>[email protected]</code></p> 246<p> 247In case you have emailed me and have not heard back: it is typically my bad! 248</p> 249<p> 250I tend to respond either immediately or eventually, so donât hesitate to send a (n|gr)udging reminder if I have not responded to your email and your context is time-sensitive. My apologies! 251</p> 252<h3 class="anchored"> 253Phone 254</h3> 255+91 79 2395 2490 (Off) 256</section></main></div> 257 258 259 260 261 <!-- /main -->
262<script type="text/javascript" src="https://sdk.userbase.com/2/userbase.js"></script>
262 263
264<script src="https://cdn.usefathom.com/script.js" data-site="INVUSZCW" defer=""></script>
264 265
266<script async="" src="https://tally.so/widgets/embed.js"></script>
266 267
268<script type="text/javascript"> 269 var HYVOR_TALK_WEBSITE = 6210; 270 var HYVOR_TALK_CONFIG = { 271 url: false, 272 id: false 273 }; 274 var script = document.createElement("script"); 275 script.type = "text/javascript"; 276 script.src = "https://talk.hyvor.com/web-api/embed.js"; 277 document.body.appendChild(script); 278</script>
278 279<div id="hyvor-talk-view"></div> 280 281<div class="column-screen-inset"> 282 <hr class="about-sep"> 283 <div class="quarto-about-jolla column-body" style="margin-top:52px;"> 284 <p> © 2022 ⢠Neeldhara Misra ⢠<a href='/credits'>Credits</a> ⢠<i data-target="calvinmodal" data-toggle="modal" class="bi bi-emoji-smile-upside-down"></i> 285 </p> 286 <div class="collcontent"> 287 <img src="./images/calvin.webp" style="border-radius:25px;"> 288 <p> </p> 289 </div> 290 291 <p> Corrections? Please leave a comment here or a PR <a href="https://github.com/neeldhara/quartosite">in this repository</a>, thanks!</p> 292 293 294 <div class="slideshow-container"> 295 296 <div class="mySlides"> 297 <q>Iâd rather be a failure at something I love than a success at something I hate.</q> 298 <p class="author">George Burns</p> 299 </div> 300 301 <div class="mySlides"> 302 <q>You live and you learn â at any rate, you live.</q> 303 <p class="author">Douglas Adams</p> 304 </div> 305 306 <div class="mySlides"> 307 <q>A problem worthy of attack proves its worth by fighting back.</q> 308 <p class="author">Paul Erdos</p> 309 </div> 310 311 </div> 312 313 314 315 <div class="about-links"> 316 <a rel="me" href="https://mathstodon.xyz/@neeldhara" class="about-link"> 317 <i class="bi bi-mastodon"></i> 318 </a> 319 <a href="https://www.isibang.ac.in/~gm/" class="about-link"> 320 <i class="bi bi-heart-fill" style="color:red;"></i> 321 </a> 322 <a href="https://github.com/neeldhara" class="about-link"> 323 <i class="bi bi-github"></i> 324 </a> 325 </div> 326 </div> 327</div> 328 329 330 331 332<!-- The Modal --> 333<div id="calvinmodal" class="modal"> 334 <!-- Modal content --> 335 <div class="modal-content" style="width: 460px !important;"> 336 <span class="close" data-dismiss="modal">Ã</span> 337 <img src="./images/calvin.jpg" style="border-radius:25px;" width="420"> 338</div> 339
340<script type="text/javascript" src="./scripts.js"></script>
vendor: 1 bytes, line 340
340
341<script id="quarto-html-after-body" type="application/javascript"> 342window.document.addEventListener("DOMContentLoaded", function (event) { 343 const toggleBodyColorMode = (bsSheetEl) => { 344 const mode = bsSheetEl.getAttribute("data-mode"); 345 const bodyEl = window.document.querySelector("body"); 346 if (mode === "dark") { 347 bodyEl.classList.add("quarto-dark"); 348 bodyEl.classList.remove("quarto-light"); 349 } else { 350 bodyEl.classList.add("quarto-light"); 351 bodyEl.classList.remove("quarto-dark"); 352 } 353 } 354 const toggleBodyColorPrimary = () => { 355 const bsSheetEl = window.document.querySelector("link#quarto-bootstrap"); 356 if (bsSheetEl) { 357 toggleBodyColorMode(bsSheetEl); 358 } 359 } 360 toggleBodyColorPrimary(); 361 const icon = "î§"; 362 const anchorJS = new window.AnchorJS(); 363 anchorJS.options = { 364 placement: 'right', 365 icon: icon 366 }; 367 anchorJS.add('.anchored'); 368 const isCodeAnnotation = (el) => { 369 for (const clz of el.classList) { 370 if (clz.startsWith('code-annotation-')) { 371 return true; 372 } 373 } 374 return false; 375 } 376 const onCopySuccess = function(e) { 377 // button target 378 const button = e.trigger; 379 // don't keep focus 380 button.blur(); 381 // flash "checked" 382 button.classList.add('code-copy-button-checked'); 383 var currentTitle = button.getAttribute("title"); 384 button.setAttribute("title", "Copied!"); 385 let tooltip; 386 if (window.bootstrap) { 387 button.setAttribute("data-bs-toggle", "tooltip"); 388 button.setAttribute("data-bs-placement", "left"); 389 button.setAttribute("data-bs-title", "Copied!"); 390 tooltip = new bootstrap.Tooltip(button, 391 { trigger: "manual", 392 customClass: "code-copy-button-tooltip", 393 offset: [0, -8]}); 394 tooltip.show(); 395 } 396 setTimeout(function() { 397 if (tooltip) { 398 tooltip.hide(); 399 button.removeAttribute("data-bs-title"); 400 button.removeAttribute("data-bs-toggle"); 401 button.removeAttribute("data-bs-placement"); 402 } 403 button.setAttribute("title", currentTitle); 404 button.classList.remove('code-copy-button-checked'); 405 }, 1000); 406 // clear code selection 407 e.clearSelection(); 408 } 409 const getTextToCopy = function(trigger) { 410 const codeEl = trigger.previousElementSibling.cloneNode(true); 411 for (const childEl of codeEl.children) { 412 if (isCodeAnnotation(childEl)) { 413 childEl.remove(); 414 } 415 } 416 return codeEl.innerText; 417 } 418 const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', { 419 text: getTextToCopy 420 }); 421 clipboard.on('success', onCopySuccess); 422 if (window.document.getElementById('quarto-embedded-source-code-modal')) { 423 const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', { 424 text: getTextToCopy, 425 container: window.document.getElementById('quarto-embedded-source-code-modal') 426 }); 427 clipboardModal.on('success', onCopySuccess); 428 } 429 var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//); 430 var mailtoRegex = new RegExp(/^mailto:/); 431 var filterRegex = new RegExp("https:\/\/www\.neeldhara\.com"); 432 var isInternal = (href) => { 433 return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); 434 } 435 // Inspect non-navigation links and adorn them if external 436 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)'); 437 for (var i=0; i<links.length; i++) { 438 const link = links[i]; 439 if (!isInternal(link.href)) { 440 // undo the damage that might have been done by quarto-nav.js in the case of 441 // links that we want to consider external 442 if (link.dataset.originalHref !== undefined) { 443 link.href = link.dataset.originalHref; 444 } 445 } 446 } 447 function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { 448 const config = { 449 allowHTML: true, 450 maxWidth: 500, 451 delay: 100,
452 arrow: false, 453 appendTo: function(el) { 454 return el.parentElement; 455 }, 456 interactive: true, 457 interactiveBorder: 10, 458 theme: 'quarto', 459 placement: 'bottom-start', 460 }; 461 if (contentFn) { 462 config.content = contentFn; 463 } 464 if (onTriggerFn) { 465 config.onTrigger = onTriggerFn; 466 } 467 if (onUntriggerFn) { 468 config.onUntrigger = onUntriggerFn; 469 } 470 window.tippy(el, config); 471 } 472 const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); 473 for (var i=0; i<noterefs.length; i++) { 474 const ref = noterefs[i]; 475 tippyHover(ref, function() { 476 // use id or data attribute instead here 477 let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); 478 try { href = new URL(href).hash; } catch {} 479 const id = href.replace(/^#\/?/, ""); 480 const note = window.document.getElementById(id); 481 if (note) { 482 return note.innerHTML; 483 } else { 484 return ""; 485 } 486 }); 487 } 488 const xrefs = window.document.querySelectorAll('a.quarto-xref'); 489 const processXRef = (id, note) => { 490 // Strip column container classes 491 const stripColumnClz = (el) => { 492 el.classList.remove("page-full", "page-columns"); 493 if (el.children) { 494 for (const child of el.children) { 495 stripColumnClz(child); 496 } 497 } 498 } 499 stripColumnClz(note) 500 if (id === null || id.startsWith('sec-')) { 501 // Special case sections, only their first couple elements 502 const container = document.createElement("div"); 503 if (note.children && note.children.length > 2) { 504 container.appendChild(note.children[0].cloneNode(true)); 505 for (let i = 1; i < note.children.length; i++) { 506 const child = note.children[i]; 507 if (child.tagName === "P" && child.innerText === "") { 508 continue; 509 } else { 510 container.appendChild(child.cloneNode(true)); 511 break; 512 } 513 } 514 if (window.Quarto?.typesetMath) { 515 window.Quarto.typesetMath(container); 516 } 517 return container.innerHTML 518 } else { 519 if (window.Quarto?.typesetMath) { 520 window.Quarto.typesetMath(note); 521 } 522 return note.innerHTML; 523 } 524 } else { 525 // Remove any anchor links if they are present 526 const anchorLink = note.querySelector('a.anchorjs-link'); 527 if (anchorLink) { 528 anchorLink.remove(); 529 } 530 if (window.Quarto?.typesetMath) { 531 window.Quarto.typesetMath(note); 532 } 533 if (note.classList.contains("callout")) { 534 return note.outerHTML; 535 } else { 536 return note.innerHTML; 537 } 538 } 539 } 540 for (var i=0; i<xrefs.length; i++) { 541 const xref = xrefs[i]; 542 tippyHover(xref, undefined, function(instance) { 543 instance.disable(); 544 let url = xref.getAttribute('href'); 545 let hash = undefined; 546 if (url.startsWith('#')) { 547 hash = url; 548 } else { 549 try { hash = new URL(url).hash; } catch {} 550 } 551 if (hash) { 552 const id = hash.replace(/^#\/?/, ""); 553 const note = window.document.getElementById(id); 554 if (note !== null) { 555 try { 556 const html = processXRef(id, note.cloneNode(true)); 557 instance.setContent(html); 558 } finally { 559 instance.enable(); 560 instance.show(); 561 } 562 } else { 563 // See if we can fetch this 564 fetch(url.split('#')[0]) 565 .then(res => res.text()) 566 .then(html => { 567 const parser = new DOMParser(); 568 const htmlDoc = parser.parseFromString(html, "text/html"); 569 const note = htmlDoc.getElementById(id); 570 if (note !== null) { 571 const html = processXRef(id, note); 572 instance.setContent(html); 573 } 574 }).finally(() => { 575 instance.enable(); 576 instance.show(); 577 }); 578 } 579 } else { 580 // See if we can fetch a full url (with no hash to target)
581 // This is a special case and we should probably do some content thinning / targeting 582 fetch(url) 583 .then(res => res.text()) 584 .then(html => { 585 const parser = new DOMParser(); 586 const htmlDoc = parser.parseFromString(html, "text/html"); 587 const note = htmlDoc.querySelector('main.content'); 588 if (note !== null) { 589 // This should only happen for chapter cross references 590 // (since there is no id in the URL) 591 // remove the first header 592 if (note.children.length > 0 && note.children[0].tagName === "HEADER") { 593 note.children[0].remove(); 594 } 595 const html = processXRef(null, note); 596 instance.setContent(html); 597 } 598 }).finally(() => { 599 instance.enable(); 600 instance.show(); 601 }); 602 } 603 }, function(instance) { 604 }); 605 } 606 let selectedAnnoteEl; 607 const selectorForAnnotation = ( cell, annotation) => { 608 let cellAttr = 'data-code-cell="' + cell + '"'; 609 let lineAttr = 'data-code-annotation="' + annotation + '"'; 610 const selector = 'span[' + cellAttr + '][' + lineAttr + ']'; 611 return selector; 612 } 613 const selectCodeLines = (annoteEl) => { 614 const doc = window.document; 615 const targetCell = annoteEl.getAttribute("data-target-cell"); 616 const targetAnnotation = annoteEl.getAttribute("data-target-annotation"); 617 const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); 618 const lines = annoteSpan.getAttribute("data-code-lines").split(","); 619 const lineIds = lines.map((line) => { 620 return targetCell + "-" + line; 621 }) 622 let top = null; 623 let height = null; 624 let parent = null; 625 if (lineIds.length > 0) { 626 //compute the position of the single el (top and bottom and make a div) 627 const el = window.document.getElementById(lineIds[0]); 628 top = el.offsetTop; 629 height = el.offsetHeight; 630 parent = el.parentElement.parentElement; 631 if (lineIds.length > 1) { 632 const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]); 633 const bottom = lastEl.offsetTop + lastEl.offsetHeight; 634 height = bottom - top; 635 } 636 if (top !== null && height !== null && parent !== null) { 637 // cook up a div (if necessary) and position it 638 let div = window.document.getElementById("code-annotation-line-highlight"); 639 if (div === null) { 640 div = window.document.createElement("div"); 641 div.setAttribute("id", "code-annotation-line-highlight"); 642 div.style.position = 'absolute'; 643 parent.appendChild(div); 644 } 645 div.style.top = top - 2 + "px"; 646 div.style.height = height + 4 + "px"; 647 div.style.left = 0; 648 let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter"); 649 if (gutterDiv === null) { 650 gutterDiv = window.document.createElement("div"); 651 gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter"); 652 gutterDiv.style.position = 'absolute'; 653 const codeCell = window.document.getElementById(targetCell); 654 const gutter = codeCell.querySelector('.code-annotation-gutter'); 655 gutter.appendChild(gutterDiv); 656 } 657 gutterDiv.style.top = top - 2 + "px"; 658 gutterDiv.style.height = height + 4 + "px"; 659 } 660 selectedAnnoteEl = annoteEl; 661 } 662 }; 663 const unselectCodeLines = () => { 664 const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"]; 665 elementsIds.forEach((elId) => { 666 const div = window.document.getElementById(elId); 667 if (div) { 668 div.remove(); 669 } 670 }); 671 selectedAnnoteEl = undefined; 672 }; 673 // Handle positioning of the toggle 674 window.addEventListener( 675 "resize", 676 throttle(() => { 677 elRect = undefined; 678 if (selectedAnnoteEl) { 679 selectCodeLines(selectedAnnoteEl); 680 } 681 }, 10) 682 ); 683 function throttle(fn, ms) { 684 let throttle = false;
685 let timer; 686 return (...args) => { 687 if(!throttle) { // first call gets through 688 fn.apply(this, args); 689 throttle = true; 690 } else { // all the others get throttled 691 if(timer) clearTimeout(timer); // cancel #2 692 timer = setTimeout(() => { 693 fn.apply(this, args); 694 timer = throttle = false; 695 }, ms); 696 } 697 }; 698 } 699 // Attach click handler to the DT 700 const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); 701 for (const annoteDlNode of annoteDls) { 702 annoteDlNode.addEventListener('click', (event) => { 703 const clickedEl = event.target; 704 if (clickedEl !== selectedAnnoteEl) { 705 unselectCodeLines(); 706 const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active'); 707 if (activeEl) { 708 activeEl.classList.remove('code-annotation-active'); 709 } 710 selectCodeLines(clickedEl); 711 clickedEl.classList.add('code-annotation-active'); 712 } else { 713 // Unselect the line 714 unselectCodeLines(); 715 clickedEl.classList.remove('code-annotation-active'); 716 } 717 }); 718 } 719 const findCites = (el) => { 720 const parentEl = el.parentElement; 721 if (parentEl) { 722 const cites = parentEl.dataset.cites; 723 if (cites) { 724 return { 725 el, 726 cites: cites.split(' ') 727 }; 728 } else { 729 return findCites(el.parentElement) 730 } 731 } else { 732 return undefined; 733 } 734 }; 735 var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); 736 for (var i=0; i<bibliorefs.length; i++) { 737 const ref = bibliorefs[i]; 738 const citeInfo = findCites(ref); 739 if (citeInfo) { 740 tippyHover(citeInfo.el, function() { 741 var popup = window.document.createElement('div'); 742 citeInfo.cites.forEach(function(cite) { 743 var citeDiv = window.document.createElement('div'); 744 citeDiv.classList.add('hanging-indent'); 745 citeDiv.classList.add('csl-entry'); 746 var biblioDiv = window.document.getElementById('ref-' + cite); 747 if (biblioDiv) { 748 citeDiv.innerHTML = biblioDiv.innerHTML; 749 } 750 popup.appendChild(citeDiv); 751 }); 752 return popup.innerHTML; 753 }); 754 } 755 } 756}); 757</script>
757 758</div> <!-- /content --> 759 760 761 762
763<script src="site_libs/quarto-html/zenscroll-min.js"></script>
763 764</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.