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>Research â Marco Pelliccia</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</style> 30 31
32<script src="site_libs/quarto-nav/quarto-nav.js"></script>
vendor: 1 bytes, line 32
32
33<script src="site_libs/quarto-nav/headroom.min.js"></script>
vendor: 1 bytes, line 33
33
34<script src="site_libs/clipboard/clipboard.min.js"></script>
vendor: 1 bytes, line 34
34
35<script src="site_libs/quarto-search/autocomplete.umd.js"></script>
vendor: 1 bytes, line 35
35
36<script src="site_libs/quarto-search/fuse.min.js"></script>
vendor: 1 bytes, line 36
36
37<script src="site_libs/quarto-search/quarto-search.js"></script>
37 38<meta name="quarto:offset" content="./">
39<script src="site_libs/quarto-html/quarto.js" type="module"></script>
vendor: 1 bytes, line 39
39
40<script src="site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
vendor: 1 bytes, line 40
40
41<script src="site_libs/quarto-html/popper.min.js"></script>
vendor: 1 bytes, line 41
41
42<script src="site_libs/quarto-html/tippy.umd.min.js"></script>
vendor: 1 bytes, line 42
42
43<script src="site_libs/quarto-html/anchor.min.js"></script>
43 44<link href="site_libs/quarto-html/tippy.css" rel="stylesheet"> 45<link href="site_libs/quarto-html/quarto-syntax-highlighting-dark-b85bc7c33db8c58e0ec93c3465666fed.css" rel="stylesheet" id="quarto-text-highlighting-styles">
46<script src="site_libs/bootstrap/bootstrap.min.js"></script>
46 47<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> 48<link href="site_libs/bootstrap/bootstrap-9c0859bcc9b8a1b9af14519a9fc68dfa.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="dark">
49<script id="quarto-search-options" type="application/json">{ 50 "location": "navbar", 51 "copy-button": false, 52 "collapse-after": 3, 53 "panel-placement": "end", 54 "type": "overlay", 55 "limit": 50, 56 "keyboard-shortcut": [ 57 "f", 58 "/", 59 "s" 60 ], 61 "show-item-context": false, 62 "language": { 63 "search-no-results-text": "No results", 64 "search-matching-documents-text": "matching documents", 65 "search-copy-link-title": "Copy link to search", 66 "search-hide-matches-text": "Hide additional matches", 67 "search-more-match-text": "more match in this document", 68 "search-more-matches-text": "more matches in this document", 69 "search-clear-button-title": "Clear", 70 "search-text-placeholder": "", 71 "search-detached-cancel-button-title": "Cancel", 72 "search-submit-button-title": "Submit", 73 "search-label": "Search" 74 } 75}</script>
75 76 77 78<link rel="stylesheet" href="styles.css"> 79</head> 80 81<body class="nav-fixed quarto-light"> 82 83<div id="quarto-search-results"></div> 84 <header id="quarto-header" class="headroom fixed-top"> 85 <nav class="navbar navbar-expand-lg " data-bs-theme="dark"> 86 <div class="navbar-container container-fluid"> 87 <div class="navbar-brand-container mx-auto"> 88 <a class="navbar-brand" href="./index.html"> 89 <span class="navbar-title">Marco Pelliccia</span> 90 </a> 91 </div> 92 <div id="quarto-search" class="" title="Search"></div> 93 <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(); }"> 94 <span class="navbar-toggler-icon"></span> 95</button> 96 <div class="collapse navbar-collapse" id="navbarCollapse"> 97 <ul class="navbar-nav navbar-nav-scroll me-auto"> 98 <li class="nav-item"> 99 <a class="nav-link" href="./index.html"> 100<span class="menu-text">Home</span></a> 101 </li> 102 <li class="nav-item"> 103 <a class="nav-link active" href="./research.html" aria-current="page"> 104<span class="menu-text">Research</span></a> 105 </li> 106 <li class="nav-item"> 107 <a class="nav-link" href="./teaching.html"> 108<span class="menu-text">Teaching</span></a> 109 </li> 110 <li class="nav-item"> 111 <a class="nav-link" href="./projects.html"> 112<span class="menu-text">Projects</span></a> 113 </li> 114</ul> 115 </div> <!-- /navcollapse --> 116 <div class="quarto-navbar-tools"> 117</div> 118 </div> <!-- /container-fluid --> 119 </nav> 120</header> 121<!-- content --> 122<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-full page-navbar"> 123<!-- sidebar --> 124<!-- margin-sidebar --> 125 126<!-- main --> 127<main class="content column-page" id="quarto-document-content"> 128<style> 129#nav-network { 130 position: fixed; 131 top: 0; 132 left: 0; 133 width: 100%; 134 height: 60px; 135 z-index: 1; 136 overflow: hidden; 137} 138</style> 139<div id="nav-network"></div>
140<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.3/p5.min.js"></script>
vendor: 1 bytes, line 140
140
141<script> 142const NODES = 40; 143const LINK_DISTANCE = 110; 144const SPEED = 0.35; 145const NODE_SIZE = 2; 146const LINE_BASE_ALPHA = 120; 147const LINE_MAX_THICK = 1.6; 148const LINE_MIN_THICK = 0.3; 149const FG_COLOR = [255, 255, 255]; 150const BG_COLOR = [30, 30, 30]; 151const HEIGHT = 60; 152let nodes = []; 153let holder; 154let c; 155function setup() { 156 holder = document.getElementById('nav-network'); 157 c = createCanvas(windowWidth, HEIGHT); 158 c.parent(holder); 159 pixelDensity(1); 160 initNodes(); 161} 162function windowResized() { 163 resizeCanvas(windowWidth, HEIGHT); 164} 165function initNodes() { 166 nodes = []; 167 for (let i = 0; i < NODES; i++) { 168 nodes.push({ 169 x: random(width), 170 y: random(HEIGHT), 171 vx: random(-SPEED, SPEED), 172 vy: random(-SPEED, SPEED) 173 }); 174 } 175} 176function draw() { 177 background(BG_COLOR[0], BG_COLOR[1], BG_COLOR[2]); 178 for (let n of nodes) { 179 n.x += n.vx; 180 n.y += n.vy; 181 n.vx += random(-0.02, 0.02); 182 n.vy += random(-0.02, 0.02); 183 n.vx = constrain(n.vx, -SPEED, SPEED); 184 n.vy = constrain(n.vy, -SPEED, SPEED); 185 if (n.x < 0) n.x += width; 186 if (n.x > width) n.x -= width; 187 if (n.y < 0) n.y += HEIGHT; 188 if (n.y > HEIGHT) n.y -= HEIGHT; 189 } 190 for (let i = 0; i < nodes.length; i++) { 191 for (let j = i + 1; j < nodes.length; j++) { 192 const a = nodes[i], b = nodes[j]; 193 const d = dist(a.x, a.y, b.x, b.y); 194 if (d < LINK_DISTANCE) { 195 const t = 1 - d / LINK_DISTANCE; 196 const alpha = LINE_BASE_ALPHA * t; 197 const w = LINE_MIN_THICK + t * (LINE_MAX_THICK - LINE_MIN_THICK); 198 strokeWeight(w); 199 stroke(FG_COLOR[0], FG_COLOR[1], FG_COLOR[2], alpha); 200 line(a.x, a.y, b.x, b.y); 201 } 202 } 203 } 204 noStroke(); 205 fill(FG_COLOR[0], FG_COLOR[1], FG_COLOR[2]); 206 for (let n of nodes) circle(n.x, n.y, NODE_SIZE); 207} 208</script>
208 209 210<header id="title-block-header" class="quarto-title-block default"> 211<div class="quarto-title"> 212<h1 class="title">Research</h1> 213</div> 214 215 216 217<div class="quarto-title-meta column-page"> 218 219 220 221 222 </div> 223 224 225 226</header> 227 228 229<section id="working-papers" class="level2"> 230<h2 class="anchored" data-anchor-id="working-papers">Working Papers</h2> 231<p><strong>Incentive Design on Networks</strong> (with A. Daripa and S. Kapur) <br> We design a mechanism for network formation with privately known productivities that implements the socially optimal network through transfers based on opportunity costs, ensuring ex post incentive compatibility, pairwise stability, and budget balance. <br><a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4312506">[SSRN]</a></p> 232<hr> 233<p><strong>Network Structures and Credit Rating</strong> (with A. Daripa and S. Kapur) <br> We study whether productivity-consistent credit ratings can be inferred from endogenous network structure, showing that under suitable link costs equilibrium networks separate types and sustain ratings aligned with productivity. <br><a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3446432">[SSRN]</a></p> 234<hr> 235</section> 236<section id="published-papers" class="level2"> 237<h2 class="anchored" data-anchor-id="published-papers">Published Papers</h2> 238<p><strong>Too Much Finance: Mechanisms That Harm Growth and Policy Implications</strong> (with A. Daripa and S. Kapur), <em>The Manchester School</em>, 2026, 1â20. <br><a href="https://doi.org/10.1111/manc.70060">[DOI]</a></p> 239<hr> 240<p><strong>Decentralized Defence of a (Directed) Network Structure</strong>, <em>Defence and Peace Economics</em>, 2020. <br> I analyse how agents in a directed network allocate defence resources under external threats, showing that decentralised choices can be efficient with a strategic attacker but generally diverge from the social optimum under random attacks.</p> 241<hr> 242<p><strong>Centrality in Trade Networks and Investment in Security</strong> (with V. Bove and L. Elia), <em>Peace Economics, Peace Science and Public Policy</em>, 2016. <br> We show that a countryâs position in global trade networksâmeasured by network centralityâsystematically shapes and constrains its military spending decisions.</p> 243 244 245</section> 246 247</main> <!-- /main -->
248<script id="quarto-html-after-body" type="application/javascript"> 249 window.document.addEventListener("DOMContentLoaded", function (event) { 250 const icon = "î§"; 251 const anchorJS = new window.AnchorJS(); 252 anchorJS.options = { 253 placement: 'right', 254 icon: icon 255 }; 256 anchorJS.add('.anchored'); 257 const isCodeAnnotation = (el) => { 258 for (const clz of el.classList) { 259 if (clz.startsWith('code-annotation-')) { 260 return true; 261 } 262 } 263 return false; 264 } 265 const onCopySuccess = function(e) { 266 // button target 267 const button = e.trigger; 268 // don't keep focus 269 button.blur(); 270 // flash "checked" 271 button.classList.add('code-copy-button-checked'); 272 var currentTitle = button.getAttribute("title"); 273 button.setAttribute("title", "Copied!"); 274 let tooltip; 275 if (window.bootstrap) { 276 button.setAttribute("data-bs-toggle", "tooltip"); 277 button.setAttribute("data-bs-placement", "left"); 278 button.setAttribute("data-bs-title", "Copied!"); 279 tooltip = new bootstrap.Tooltip(button, 280 { trigger: "manual", 281 customClass: "code-copy-button-tooltip", 282 offset: [0, -8]}); 283 tooltip.show(); 284 } 285 setTimeout(function() { 286 if (tooltip) { 287 tooltip.hide(); 288 button.removeAttribute("data-bs-title"); 289 button.removeAttribute("data-bs-toggle"); 290 button.removeAttribute("data-bs-placement"); 291 } 292 button.setAttribute("title", currentTitle); 293 button.classList.remove('code-copy-button-checked'); 294 }, 1000); 295 // clear code selection 296 e.clearSelection(); 297 } 298 const getTextToCopy = function(trigger) { 299 const outerScaffold = trigger.parentElement.cloneNode(true); 300 const codeEl = outerScaffold.querySelector('code'); 301 for (const childEl of codeEl.children) { 302 if (isCodeAnnotation(childEl)) { 303 childEl.remove(); 304 } 305 } 306 return codeEl.innerText; 307 } 308 const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', { 309 text: getTextToCopy 310 }); 311 clipboard.on('success', onCopySuccess); 312 if (window.document.getElementById('quarto-embedded-source-code-modal')) { 313 const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', { 314 text: getTextToCopy, 315 container: window.document.getElementById('quarto-embedded-source-code-modal') 316 }); 317 clipboardModal.on('success', onCopySuccess); 318 } 319 var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//); 320 var mailtoRegex = new RegExp(/^mailto:/); 321 var filterRegex = new RegExp("https:\/\/marcopelliccia\.com"); 322 var isInternal = (href) => { 323 return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); 324 } 325 // Inspect non-navigation links and adorn them if external 326 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)'); 327 for (var i=0; i<links.length; i++) { 328 const link = links[i]; 329 if (!isInternal(link.href)) { 330 // undo the damage that might have been done by quarto-nav.js in the case of 331 // links that we want to consider external 332 if (link.dataset.originalHref !== undefined) { 333 link.href = link.dataset.originalHref; 334 } 335 } 336 } 337 function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { 338 const config = { 339 allowHTML: true, 340 maxWidth: 500, 341 delay: 100, 342 arrow: false, 343 appendTo: function(el) { 344 return el.parentElement; 345 }, 346 interactive: true, 347 interactiveBorder: 10, 348 theme: 'quarto', 349 placement: 'bottom-start', 350 }; 351 if (contentFn) { 352 config.content = contentFn; 353 } 354 if (onTriggerFn) { 355 config.onTrigger = onTriggerFn; 356 } 357 if (onUntriggerFn) { 358 config.onUntrigger = onUntriggerFn; 359 } 360 window.tippy(el, config); 361 } 362 const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); 363 for (var i=0; i<noterefs.length; i++) { 364 const ref = noterefs[i]; 365 tippyHover(ref, function() { 366 // use id or data attribute instead here 367 let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); 368 try { href = new URL(href).hash; } catch {} 369 const id = href.replace(/^#\/?/, ""); 370 const note = window.document.getElementById(id); 371 if (note) { 372 return note.innerHTML; 373 } else { 374 return ""; 375 } 376 }); 377 } 378 const xrefs = window.document.querySelectorAll('a.quarto-xref'); 379 const processXRef = (id, note) => { 380 // Strip column container classes 381 const stripColumnClz = (el) => { 382 el.classList.remove("page-full", "page-columns"); 383 if (el.children) { 384 for (const child of el.children) {
385 stripColumnClz(child); 386 } 387 } 388 } 389 stripColumnClz(note) 390 if (id === null || id.startsWith('sec-')) { 391 // Special case sections, only their first couple elements 392 const container = document.createElement("div"); 393 if (note.children && note.children.length > 2) { 394 container.appendChild(note.children[0].cloneNode(true)); 395 for (let i = 1; i < note.children.length; i++) { 396 const child = note.children[i]; 397 if (child.tagName === "P" && child.innerText === "") { 398 continue; 399 } else { 400 container.appendChild(child.cloneNode(true)); 401 break; 402 } 403 } 404 if (window.Quarto?.typesetMath) { 405 window.Quarto.typesetMath(container); 406 } 407 return container.innerHTML 408 } else { 409 if (window.Quarto?.typesetMath) { 410 window.Quarto.typesetMath(note); 411 } 412 return note.innerHTML; 413 } 414 } else { 415 // Remove any anchor links if they are present 416 const anchorLink = note.querySelector('a.anchorjs-link'); 417 if (anchorLink) { 418 anchorLink.remove(); 419 } 420 if (window.Quarto?.typesetMath) { 421 window.Quarto.typesetMath(note); 422 } 423 if (note.classList.contains("callout")) { 424 return note.outerHTML; 425 } else { 426 return note.innerHTML; 427 } 428 } 429 } 430 for (var i=0; i<xrefs.length; i++) { 431 const xref = xrefs[i]; 432 tippyHover(xref, undefined, function(instance) { 433 instance.disable(); 434 let url = xref.getAttribute('href'); 435 let hash = undefined; 436 if (url.startsWith('#')) { 437 hash = url; 438 } else { 439 try { hash = new URL(url).hash; } catch {} 440 } 441 if (hash) { 442 const id = hash.replace(/^#\/?/, ""); 443 const note = window.document.getElementById(id); 444 if (note !== null) { 445 try { 446 const html = processXRef(id, note.cloneNode(true)); 447 instance.setContent(html); 448 } finally { 449 instance.enable(); 450 instance.show(); 451 } 452 } else { 453 // See if we can fetch this 454 fetch(url.split('#')[0]) 455 .then(res => res.text()) 456 .then(html => { 457 const parser = new DOMParser(); 458 const htmlDoc = parser.parseFromString(html, "text/html"); 459 const note = htmlDoc.getElementById(id); 460 if (note !== null) { 461 const html = processXRef(id, note); 462 instance.setContent(html); 463 } 464 }).finally(() => { 465 instance.enable(); 466 instance.show(); 467 }); 468 } 469 } else { 470 // See if we can fetch a full url (with no hash to target) 471 // This is a special case and we should probably do some content thinning / targeting 472 fetch(url) 473 .then(res => res.text()) 474 .then(html => { 475 const parser = new DOMParser(); 476 const htmlDoc = parser.parseFromString(html, "text/html"); 477 const note = htmlDoc.querySelector('main.content'); 478 if (note !== null) { 479 // This should only happen for chapter cross references 480 // (since there is no id in the URL) 481 // remove the first header 482 if (note.children.length > 0 && note.children[0].tagName === "HEADER") { 483 note.children[0].remove(); 484 } 485 const html = processXRef(null, note); 486 instance.setContent(html); 487 } 488 }).finally(() => { 489 instance.enable(); 490 instance.show(); 491 }); 492 } 493 }, function(instance) { 494 }); 495 } 496 let selectedAnnoteEl; 497 const selectorForAnnotation = ( cell, annotation) => { 498 let cellAttr = 'data-code-cell="' + cell + '"'; 499 let lineAttr = 'data-code-annotation="' + annotation + '"'; 500 const selector = 'span[' + cellAttr + '][' + lineAttr + ']'; 501 return selector; 502 } 503 const selectCodeLines = (annoteEl) => { 504 const doc = window.document; 505 const targetCell = annoteEl.getAttribute("data-target-cell"); 506 const targetAnnotation = annoteEl.getAttribute("data-target-annotation"); 507 const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); 508 const lines = annoteSpan.getAttribute("data-code-lines").split(","); 509 const lineIds = lines.map((line) => { 510 return targetCell + "-" + line; 511 }) 512 let top = null; 513 let height = null; 514 let parent = null; 515 if (lineIds.length > 0) { 516 //compute the position of the single el (top and bottom and make a div) 517 const el = window.document.getElementById(lineIds[0]); 518 top = el.offsetTop; 519 height = el.offsetHeight; 520 parent = el.parentElement.parentElement; 521 if (lineIds.length > 1) { 522 const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]); 523 const bottom = lastEl.offsetTop + lastEl.offsetHeight; 524 height = bottom - top; 525 } 526 if (top !== null && height !== null && parent !== null) { 527 // cook up a div (if necessary) and position it 528 let div = window.document.getElementById("code-annotation-line-highlight"); 529 if (div === null) { 530 div = window.document.createElement("div"); 531 div.setAttribute("id", "code-annotation-line-highlight"); 532 div.style.position = 'absolute'; 533 parent.appendChild(div); 534 } 535 div.style.top = top - 2 + "px"; 536 div.style.height = height + 4 + "px"; 537 div.style.left = 0; 538 let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter"); 539 if (gutterDiv === null) { 540 gutterDiv = window.document.createElement("div"); 541 gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter"); 542 gutterDiv.style.position = 'absolute'; 543 const codeCell = window.document.getElementById(targetCell); 544 const gutter = codeCell.querySelector('.code-annotation-gutter'); 545 gutter.appendChild(gutterDiv); 546 } 547 gutterDiv.style.top = top - 2 + "px"; 548 gutterDiv.style.height = height + 4 + "px"; 549 } 550 selectedAnnoteEl = annoteEl; 551 } 552 }; 553 const unselectCodeLines = () => { 554 const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"]; 555 elementsIds.forEach((elId) => { 556 const div = window.document.getElementById(elId); 557 if (div) { 558 div.remove(); 559 } 560 }); 561 selectedAnnoteEl = undefined; 562 }; 563 // Handle positioning of the toggle 564 window.addEventListener( 565 "resize", 566 throttle(() => { 567 elRect = undefined; 568 if (selectedAnnoteEl) { 569 selectCodeLines(selectedAnnoteEl); 570 } 571 }, 10) 572 ); 573 function throttle(fn, ms) { 574 let throttle = false;
575 let timer; 576 return (...args) => { 577 if(!throttle) { // first call gets through 578 fn.apply(this, args); 579 throttle = true; 580 } else { // all the others get throttled 581 if(timer) clearTimeout(timer); // cancel #2 582 timer = setTimeout(() => { 583 fn.apply(this, args); 584 timer = throttle = false; 585 }, ms); 586 } 587 }; 588 } 589 // Attach click handler to the DT 590 const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); 591 for (const annoteDlNode of annoteDls) { 592 annoteDlNode.addEventListener('click', (event) => { 593 const clickedEl = event.target; 594 if (clickedEl !== selectedAnnoteEl) { 595 unselectCodeLines(); 596 const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active'); 597 if (activeEl) { 598 activeEl.classList.remove('code-annotation-active'); 599 } 600 selectCodeLines(clickedEl); 601 clickedEl.classList.add('code-annotation-active'); 602 } else { 603 // Unselect the line 604 unselectCodeLines(); 605 clickedEl.classList.remove('code-annotation-active'); 606 } 607 }); 608 } 609 const findCites = (el) => { 610 const parentEl = el.parentElement; 611 if (parentEl) { 612 const cites = parentEl.dataset.cites; 613 if (cites) { 614 return { 615 el, 616 cites: cites.split(' ') 617 }; 618 } else { 619 return findCites(el.parentElement) 620 } 621 } else { 622 return undefined; 623 } 624 }; 625 var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); 626 for (var i=0; i<bibliorefs.length; i++) { 627 const ref = bibliorefs[i]; 628 const citeInfo = findCites(ref); 629 if (citeInfo) { 630 tippyHover(citeInfo.el, function() { 631 var popup = window.document.createElement('div'); 632 citeInfo.cites.forEach(function(cite) { 633 var citeDiv = window.document.createElement('div'); 634 citeDiv.classList.add('hanging-indent'); 635 citeDiv.classList.add('csl-entry'); 636 var biblioDiv = window.document.getElementById('ref-' + cite); 637 if (biblioDiv) { 638 citeDiv.innerHTML = biblioDiv.innerHTML; 639 } 640 popup.appendChild(citeDiv); 641 }); 642 return popup.innerHTML; 643 }); 644 } 645 } 646 }); 647 </script>
647 648</div> <!-- /content --> 649<footer class="footer"> 650 <div class="nav-footer"> 651 <div class="nav-footer-left"> 652<p>© Marco Pelliccia</p> 653</div> 654 <div class="nav-footer-center"> 655 656 </div> 657 <div class="nav-footer-right"> 658 <ul class="footer-items list-unstyled"> 659 <li class="nav-item compact"> 660 <a class="nav-link" href="https://github.com"> 661 <i class="bi bi-github" role="img"> 662</i> 663 </a> 664 </li> 665 <li class="nav-item compact"> 666 <a class="nav-link" href="https://www.linkedin.com/in/marcopelliccia"> 667 <i class="bi bi-linkedin" role="img"> 668</i> 669 </a> 670 </li> 671 <li class="nav-item compact"> 672 <a class="nav-link" href="mailto:[email protected]"> 673 <i class="bi bi-envelope" role="img"> 674</i> 675 </a> 676 </li> 677</ul> 678 </div> 679 </div> 680</footer> 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.