1<!DOCTYPE html> 2 3<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang=""> 4 5<head> 6 <meta charset="utf-8"/> 7<!-- This site is hosted on Netlify. Anyone can build and deploy a site 8 like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=33bdcd31-d2cb-49bd-824c-28690047a37d 9 Netlify hosting facts for this site: static/SSR served via Netlify Edge. --> 10 <meta name="viewport" content="width=device-width, initial-scale=1"/> 11 <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/> 12 <meta name="generator" content="distill" /> 13 14 <style type="text/css"> 15 /* Hide doc at startup (prevent jankiness while JS renders/transforms) */ 16 body { 17 visibility: hidden; 18 } 19 </style> 20 21 <!--radix_placeholder_import_source--> 22 <!--/radix_placeholder_import_source--> 23 24<style type="text/css">code{white-space: pre;}</style> 25<style type="text/css" data-origin="pandoc"> 26pre > code.sourceCode { white-space: pre; position: relative; } 27pre > code.sourceCode > span { line-height: 1.25; } 28pre > code.sourceCode > span:empty { height: 1.2em; } 29.sourceCode { overflow: visible; } 30code.sourceCode > span { color: inherit; text-decoration: inherit; } 31div.sourceCode { margin: 1em 0; } 32pre.sourceCode { margin: 0; } 33@media screen { 34div.sourceCode { overflow: auto; } 35} 36@media print { 37pre > code.sourceCode { white-space: pre-wrap; } 38pre > code.sourceCode > span { display: inline-block; text-indent: -5em; padding-left: 5em; } 39} 40pre.numberSource code 41 { counter-reset: source-line 0; } 42pre.numberSource code > span 43 { position: relative; left: -4em; counter-increment: source-line; } 44pre.numberSource code > span > a:first-child::before 45 { content: counter(source-line); 46 position: relative; left: -1em; text-align: right; vertical-align: baseline; 47 border: none; display: inline-block; 48 -webkit-touch-callout: none; -webkit-user-select: none; 49 -khtml-user-select: none; -moz-user-select: none; 50 -ms-user-select: none; user-select: none; 51 padding: 0 4px; width: 4em; 52 color: #aaaaaa; 53 } 54pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; } 55div.sourceCode 56 { color: #00769e; background-color: #f1f3f5; } 57@media screen { 58pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; } 59} 60code span { color: #00769e; } /* Normal */ 61code span.al { color: #ad0000; } /* Alert */ 62code span.an { color: #5e5e5e; } /* Annotation */ 63code span.at { color: #657422; } /* Attribute */ 64code span.bn { color: #ad0000; } /* BaseN */ 65code span.bu { } /* BuiltIn */ 66code span.cf { color: #00769e; } /* ControlFlow */ 67code span.ch { color: #20794d; } /* Char */ 68code span.cn { color: #8f5902; } /* Constant */ 69code span.co { color: #5e5e5e; } /* Comment */ 70code span.cv { color: #5e5e5e; font-style: italic; } /* CommentVar */ 71code span.do { color: #5e5e5e; font-style: italic; } /* Documentation */ 72code span.dt { color: #ad0000; } /* DataType */ 73code span.dv { color: #ad0000; } /* DecVal */ 74code span.er { color: #ad0000; } /* Error */ 75code span.ex { } /* Extension */ 76code span.fl { color: #ad0000; } /* Float */ 77code span.fu { color: #4758ab; } /* Function */ 78code span.im { } /* Import */ 79code span.in { color: #5e5e5e; } /* Information */ 80code span.kw { color: #00769e; } /* Keyword */ 81code span.op { color: #5e5e5e; } /* Operator */ 82code span.ot { color: #00769e; } /* Other */ 83code span.pp { color: #ad0000; } /* Preprocessor */ 84code span.sc { color: #5e5e5e; } /* SpecialChar */ 85code span.ss { color: #20794d; } /* SpecialString */ 86code span.st { color: #20794d; } /* String */ 87code span.va { color: #111111; } /* Variable */ 88code span.vs { color: #20794d; } /* VerbatimString */ 89code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */ 90</style> 91 92 93 <!--radix_placeholder_meta_tags--> 94 <title>Euge: About</title> 95 96 <meta property="description" itemprop="description" content=""/> 97 98 <link rel="license" href="https://creativecommons.org/licenses/by/4.0/"/> 99 <link rel="icon" type="image/vnd.microsoft.icon" href="images/favicon.ico"/> 100 101 102 <!-- https://developers.facebook.com/docs/sharing/webmasters#markup --> 103 <meta property="og:title" content="Euge: About"/> 104 <meta property="og:type" content="article"/> 105 <meta property="og:description" content=""/> 106 <meta property="og:locale" content="en_US"/> 107 <meta property="og:site_name" content="Euge"/> 108 109 <!-- https://dev.twitter.com/cards/types/summary --> 110 <meta property="twitter:card" content="summary"/> 111 <meta property="twitter:title" content="Euge: About"/> 112 <meta property="twitter:description" content=""/> 113 <meta property="twitter:site" content="@eugene100hickey"/> 114 115 <!--/radix_placeholder_meta_tags--> 116 <!--radix_placeholder_rmarkdown_metadata--> 117 118
118<script type="text/json" id="radix-rmarkdown-metadata"> 119 {"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["title","description"]}},"value":[{"type":"character","attributes":{},"value":["About"]},{"type":"character","attributes":{},"value":[""]}]} 120 </script>
120 121 <!--/radix_placeholder_rmarkdown_metadata--> 122 <!--radix_placeholder_navigation_in_header--> 123 <meta name="distill:offset" content=""/> 124 125
125<script type="application/javascript"> 126 127 window.headroom_prevent_pin = false; 128 129 window.document.addEventListener("DOMContentLoaded", function (event) { 130 131 // initialize headroom for banner 132 var header = $('header').get(0); 133 var headerHeight = header.offsetHeight; 134 var headroom = new Headroom(header, { 135 tolerance: 5, 136 onPin : function() { 137 if (window.headroom_prevent_pin) { 138 window.headroom_prevent_pin = false; 139 headroom.unpin(); 140 } 141 } 142 }); 143 headroom.init(); 144 if(window.location.hash) 145 headroom.unpin(); 146 $(header).addClass('headroom--transition'); 147 148 // offset scroll location for banner on hash change 149 // (see: https://github.com/WickyNilliams/headroom.js/issues/38) 150 window.addEventListener("hashchange", function(event) { 151 window.scrollTo(0, window.pageYOffset - (headerHeight + 25)); 152 }); 153 154 // responsive menu 155 $('.distill-site-header').each(function(i, val) { 156 var topnav = $(this); 157 var toggle = topnav.find('.nav-toggle'); 158 toggle.on('click', function() { 159 topnav.toggleClass('responsive'); 160 }); 161 }); 162 163 // nav dropdowns 164 $('.nav-dropbtn').click(function(e) { 165 $(this).next('.nav-dropdown-content').toggleClass('nav-dropdown-active'); 166 $(this).parent().siblings('.nav-dropdown') 167 .children('.nav-dropdown-content').removeClass('nav-dropdown-active'); 168 }); 169 $("body").click(function(e){ 170 $('.nav-dropdown-content').removeClass('nav-dropdown-active'); 171 }); 172 $(".nav-dropdown").click(function(e){ 173 e.stopPropagation(); 174 }); 175 }); 176 </script>
176 177 178 <style type="text/css"> 179 180 /* Theme (user-documented overrideables for nav appearance) */ 181 182 .distill-site-nav { 183 color: rgba(255, 255, 255, 0.8); 184 background-color: #0F2E3D; 185 font-size: 15px; 186 font-weight: 300; 187 } 188 189 .distill-site-nav a { 190 color: inherit; 191 text-decoration: none; 192 } 193 194 .distill-site-nav a:hover { 195 color: white; 196 } 197 198 @media print { 199 .distill-site-nav { 200 display: none; 201 } 202 } 203 204 .distill-site-header { 205 206 } 207 208 .distill-site-footer { 209 210 } 211 212 213 /* Site Header */ 214 215 .distill-site-header { 216 width: 100%; 217 box-sizing: border-box; 218 z-index: 3; 219 } 220 221 .distill-site-header .nav-left { 222 display: inline-block; 223 margin-left: 8px; 224 } 225 226 @media screen and (max-width: 768px) { 227 .distill-site-header .nav-left { 228 margin-left: 0; 229 } 230 } 231 232 233 .distill-site-header .nav-right { 234 float: right; 235 margin-right: 8px; 236 } 237 238 .distill-site-header a, 239 .distill-site-header .title { 240 display: inline-block; 241 text-align: center; 242 padding: 14px 10px 14px 10px; 243 } 244 245 .distill-site-header .title { 246 font-size: 18px; 247 min-width: 150px; 248 } 249 250 .distill-site-header .logo { 251 padding: 0; 252 } 253 254 .distill-site-header .logo img { 255 display: none; 256 max-height: 20px; 257 width: auto; 258 margin-bottom: -4px; 259 } 260 261 .distill-site-header .nav-image img { 262 max-height: 18px; 263 width: auto; 264 display: inline-block; 265 margin-bottom: -3px; 266 } 267 268 269 270 @media screen and (min-width: 1000px) { 271 .distill-site-header .logo img { 272 display: inline-block; 273 } 274 .distill-site-header .nav-left { 275 margin-left: 20px; 276 } 277 .distill-site-header .nav-right { 278 margin-right: 20px; 279 } 280 .distill-site-header .title { 281 padding-left: 12px; 282 } 283 } 284 285 286 .distill-site-header .nav-toggle { 287 display: none; 288 } 289 290 .nav-dropdown { 291 display: inline-block; 292 position: relative; 293 } 294 295 .nav-dropdown .nav-dropbtn { 296 border: none; 297 outline: none; 298 color: rgba(255, 255, 255, 0.8); 299 padding: 16px 10px; 300 background-color: transparent; 301 font-family: inherit; 302 font-size: inherit; 303 font-weight: inherit; 304 margin: 0;
305 margin-top: 1px; 306 z-index: 2; 307 } 308 309 .nav-dropdown-content { 310 display: none; 311 position: absolute; 312 background-color: white; 313 min-width: 200px; 314 border: 1px solid rgba(0,0,0,0.15); 315 border-radius: 4px; 316 box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.1); 317 z-index: 1; 318 margin-top: 2px; 319 white-space: nowrap; 320 padding-top: 4px; 321 padding-bottom: 4px; 322 } 323 324 .nav-dropdown-content hr { 325 margin-top: 4px; 326 margin-bottom: 4px; 327 border: none; 328 border-bottom: 1px solid rgba(0, 0, 0, 0.1); 329 } 330 331 .nav-dropdown-active { 332 display: block; 333 } 334 335 .nav-dropdown-content a, .nav-dropdown-content .nav-dropdown-header { 336 color: black; 337 padding: 6px 24px; 338 text-decoration: none; 339 display: block; 340 text-align: left; 341 } 342 343 .nav-dropdown-content .nav-dropdown-header { 344 display: block; 345 padding: 5px 24px; 346 padding-bottom: 0; 347 text-transform: uppercase; 348 font-size: 14px; 349 color: #999999; 350 white-space: nowrap; 351 } 352 353 .nav-dropdown:hover .nav-dropbtn { 354 color: white; 355 } 356 357 .nav-dropdown-content a:hover { 358 background-color: #ddd; 359 color: black; 360 } 361 362 .nav-right .nav-dropdown-content { 363 margin-left: -45%; 364 right: 0; 365 } 366 367 @media screen and (max-width: 768px) { 368 .distill-site-header a, .distill-site-header .nav-dropdown {display: none;} 369 .distill-site-header a.nav-toggle { 370 float: right; 371 display: block; 372 } 373 .distill-site-header .title { 374 margin-left: 0; 375 } 376 .distill-site-header .nav-right { 377 margin-right: 0; 378 } 379 .distill-site-header { 380 overflow: hidden; 381 } 382 .nav-right .nav-dropdown-content { 383 margin-left: 0; 384 } 385 } 386 387 388 @media screen and (max-width: 768px) { 389 .distill-site-header.responsive {position: relative; min-height: 500px; } 390 .distill-site-header.responsive a.nav-toggle { 391 position: absolute; 392 right: 0; 393 top: 0; 394 } 395 .distill-site-header.responsive a, 396 .distill-site-header.responsive .nav-dropdown { 397 display: block; 398 text-align: left; 399 } 400 .distill-site-header.responsive .nav-left, 401 .distill-site-header.responsive .nav-right { 402 width: 100%; 403 } 404 .distill-site-header.responsive .nav-dropdown {float: none;} 405 .distill-site-header.responsive .nav-dropdown-content {position: relative;} 406 .distill-site-header.responsive .nav-dropdown .nav-dropbtn { 407 display: block; 408 width: 100%; 409 text-align: left; 410 } 411 } 412 413 /* Site Footer */ 414 415 .distill-site-footer { 416 width: 100%; 417 overflow: hidden; 418 box-sizing: border-box; 419 z-index: 3; 420 margin-top: 30px; 421 padding-top: 30px; 422 padding-bottom: 30px; 423 text-align: center; 424 } 425 426 /* Headroom */ 427 428 d-title { 429 padding-top: 6rem; 430 } 431 432 @media print { 433 d-title { 434 padding-top: 4rem; 435 } 436 } 437 438 .headroom { 439 z-index: 1000; 440 position: fixed; 441 top: 0; 442 left: 0; 443 right: 0; 444 } 445 446 .headroom--transition { 447 transition: all .4s ease-in-out; 448 } 449 450 .headroom--unpinned { 451 top: -100px; 452 } 453 454 .headroom--pinned { 455 top: 0; 456 } 457 458 /* adjust viewport for navbar height */ 459 /* helps vertically center bootstrap (non-distill) content */ 460 .min-vh-100 { 461 min-height: calc(100vh - 100px) !important; 462 } 463 464 </style> 465 466
466<script src="site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
466 467 <link href="site_libs/font-awesome-6.5.2/css/all.min.css" rel="stylesheet"/> 468 <link href="site_libs/font-awesome-6.5.2/css/v4-shims.min.css" rel="stylesheet"/> 469
469<script src="site_libs/headroom-0.9.4/headroom.min.js"></script>
469 470
470<script src="site_libs/autocomplete-0.37.1/autocomplete.min.js"></script>
470 471
471<script src="site_libs/fuse-6.4.1/fuse.min.js"></script>
471 472 473
473<script type="application/javascript"> 474 475 function getMeta(metaName) { 476 var metas = document.getElementsByTagName('meta'); 477 for (let i = 0; i < metas.length; i++) { 478 if (metas[i].getAttribute('name') === metaName) { 479 return metas[i].getAttribute('content'); 480 } 481 } 482 return ''; 483 } 484 485 function offsetURL(url) { 486 var offset = getMeta('distill:offset'); 487 return offset ? offset + '/' + url : url; 488 } 489 490 function createFuseIndex() { 491 492 // create fuse index 493 var options = { 494 keys: [ 495 { name: 'title', weight: 20 }, 496 { name: 'categories', weight: 15 }, 497 { name: 'description', weight: 10 }, 498 { name: 'contents', weight: 5 }, 499 ], 500 ignoreLocation: true, 501 threshold: 0 502 }; 503 var fuse = new window.Fuse([], options); 504 505 // fetch the main search.json 506 return fetch(offsetURL('search.json')) 507 .then(function(response) { 508 if (response.status == 200) { 509 return response.json().then(function(json) { 510 // index main articles 511 json.articles.forEach(function(article) { 512 fuse.add(article); 513 }); 514 // download collections and index their articles 515 return Promise.all(json.collections.map(function(collection) { 516 return fetch(offsetURL(collection)).then(function(response) { 517 if (response.status === 200) { 518 return response.json().then(function(articles) { 519 articles.forEach(function(article) { 520 fuse.add(article); 521 }); 522 }) 523 } else { 524 return Promise.reject( 525 new Error('Unexpected status from search index request: ' + 526 response.status) 527 ); 528 } 529 }); 530 })).then(function() { 531 return fuse; 532 }); 533 }); 534 535 } else { 536 return Promise.reject( 537 new Error('Unexpected status from search index request: ' + 538 response.status) 539 ); 540 } 541 }); 542 } 543 544 window.document.addEventListener("DOMContentLoaded", function (event) { 545 546 // get search element (bail if we don't have one) 547 var searchEl = window.document.getElementById('distill-search'); 548 if (!searchEl) 549 return; 550 551 createFuseIndex() 552 .then(function(fuse) { 553 554 // make search box visible 555 searchEl.classList.remove('hidden'); 556 557 // initialize autocomplete 558 var options = { 559 autoselect: true, 560 hint: false, 561 minLength: 2, 562 }; 563 window.autocomplete(searchEl, options, [{ 564 source: function(query, callback) { 565 const searchOptions = { 566 isCaseSensitive: false, 567 shouldSort: true, 568 minMatchCharLength: 2, 569 limit: 10, 570 }; 571 var results = fuse.search(query, searchOptions); 572 callback(results 573 .map(function(result) { return result.item; }) 574 ); 575 }, 576 templates: { 577 suggestion: function(suggestion) { 578 var img = suggestion.preview && Object.keys(suggestion.preview).length > 0 579 ? `<img src="${offsetURL(suggestion.preview)}"</img>` 580 : ''; 581 var html = ` 582 <div class="search-item"> 583 <h3>${suggestion.title}</h3> 584 <div class="search-item-description"> 585 ${suggestion.description || ''} 586 </div> 587 <div class="search-item-preview"> 588 ${img} 589 </div> 590 </div> 591 `; 592 return html; 593 } 594 } 595 }]).on('autocomplete:selected', function(event, suggestion) { 596 window.location.href = offsetURL(suggestion.path); 597 }); 598 // remove inline display style on autocompleter (we want to 599 // manage responsive display via css) 600 $('.algolia-autocomplete').css("display", ""); 601 }) 602 .catch(function(error) { 603 console.log(error); 604 }); 605 606 }); 607 608 </script>
608 609 610 <style type="text/css"> 611 612 .nav-search { 613 font-size: x-small; 614 } 615 616 /* Algolioa Autocomplete */ 617 618 .algolia-autocomplete { 619 display: inline-block; 620 margin-left: 10px; 621 vertical-align: sub; 622 background-color: white; 623 color: black; 624 padding: 6px; 625 padding-top: 8px; 626 padding-bottom: 0; 627 border-radius: 6px; 628 border: 1px #0F2E3D solid; 629 width: 180px; 630 } 631 632 633 @media screen and (max-width: 768px) { 634 .distill-site-nav .algolia-autocomplete { 635 display: none; 636 visibility: hidden; 637 } 638 .distill-site-nav.responsive .algolia-autocomplete { 639 display: inline-block; 640 visibility: visible; 641 } 642 .distill-site-nav.responsive .algolia-autocomplete .aa-dropdown-menu { 643 margin-left: 0; 644 width: 400px; 645 max-height: 400px; 646 } 647 } 648 649 .algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint { 650 width: 90%; 651 outline: none; 652 border: none; 653 } 654 655 .algolia-autocomplete .aa-hint { 656 color: #999; 657 } 658 .algolia-autocomplete .aa-dropdown-menu { 659 width: 550px; 660 max-height: 70vh; 661 overflow-x: visible; 662 overflow-y: scroll; 663 padding: 5px; 664 margin-top: 3px; 665 margin-left: -150px; 666 background-color: #fff; 667 border-radius: 5px; 668 border: 1px solid #999; 669 border-top: none; 670 } 671 672 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion { 673 cursor: pointer; 674 padding: 5px 4px; 675 border-bottom: 1px solid #eee; 676 } 677 678 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion:last-of-type { 679 border-bottom: none; 680 margin-bottom: 2px; 681 } 682 683 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item { 684 overflow: hidden; 685 font-size: 0.8em; 686 line-height: 1.4em; 687 } 688 689 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item h3 { 690 font-size: 1rem; 691 margin-block-start: 0; 692 margin-block-end: 5px; 693 } 694 695 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-description { 696 display: inline-block; 697 overflow: hidden; 698 height: 2.8em; 699 width: 80%; 700 margin-right: 4%; 701 } 702 703 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview { 704 display: inline-block; 705 width: 15%; 706 } 707 708 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img { 709 height: 3em; 710 width: auto; 711 display: none; 712 } 713 714 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img[src] { 715 display: initial; 716 } 717 718 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor { 719 background-color: #eee; 720 } 721 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion em { 722 font-weight: bold; 723 font-style: normal; 724 } 725 726 </style> 727 728 729 <!--/radix_placeholder_navigation_in_header--> 730 <!--radix_placeholder_distill--> 731 732 <style type="text/css"> 733 734 body { 735 background-color: white; 736 } 737 738 .pandoc-table { 739 width: 100%; 740 } 741 742 .pandoc-table>caption { 743 margin-bottom: 10px; 744 } 745 746 .pandoc-table th:not([align]) { 747 text-align: left; 748 } 749 750 .pagedtable-footer { 751 font-size: 15px; 752 } 753 754 d-byline .byline { 755 grid-template-columns: 2fr 2fr; 756 } 757 758 d-byline .byline h3 { 759 margin-block-start: 1.5em; 760 } 761 762 d-byline .byline .authors-affiliations h3 { 763 margin-block-start: 0.5em; 764 } 765 766 .authors-affiliations .orcid-id { 767 width: 16px; 768 height:16px; 769 margin-left: 4px; 770 margin-right: 4px; 771 vertical-align: middle; 772 padding-bottom: 2px; 773 } 774 775 d-title .dt-tags { 776 margin-top: 1em; 777 grid-column: text; 778 } 779 780 .dt-tags .dt-tag { 781 text-decoration: none; 782 display: inline-block; 783 color: rgba(0,0,0,0.6); 784 padding: 0em 0.4em; 785 margin-right: 0.5em; 786 margin-bottom: 0.4em; 787 font-size: 70%; 788 border: 1px solid rgba(0,0,0,0.2); 789 border-radius: 3px; 790 text-transform: uppercase; 791 font-weight: 500; 792 } 793 794 d-article table.gt_table td, 795 d-article table.gt_table th { 796 border-bottom: none; 797 font-size: 100%; 798 } 799 800 .html-widget { 801 margin-bottom: 2.0em; 802 } 803 804 .l-screen-inset { 805 padding-right: 16px; 806 } 807 808 .l-screen .caption { 809 margin-left: 10px; 810 } 811 812 .shaded { 813 background: rgb(247, 247, 247); 814 padding-top: 20px; 815 padding-bottom: 20px; 816 border-top: 1px solid rgba(0, 0, 0, 0.1); 817 border-bottom: 1px solid rgba(0, 0, 0, 0.1); 818 } 819 820 .shaded .html-widget { 821 margin-bottom: 0; 822 border: 1px solid rgba(0, 0, 0, 0.1); 823 } 824 825 .shaded .shaded-content { 826 background: white; 827 } 828 829 .text-output { 830 margin-top: 0; 831 line-height: 1.5em; 832 } 833 834 .hidden { 835 display: none !important; 836 } 837 838 hr.section-separator { 839 border: none; 840 border-top: 1px solid rgba(0, 0, 0, 0.1); 841 margin: 0px; 842 } 843 844 845 d-byline { 846 border-top: none; 847 } 848 849 d-article { 850 padding-top: 2.5rem; 851 padding-bottom: 30px; 852 border-top: none; 853 } 854 855 d-appendix { 856 padding-top: 30px; 857 } 858 859 d-article>p>img { 860 width: 100%; 861 } 862 863 d-article h2 { 864 margin: 1rem 0 1.5rem 0; 865 } 866 867 d-article h3 { 868 margin-top: 1.5rem; 869 } 870 871 d-article iframe { 872 border: 1px solid rgba(0, 0, 0, 0.1); 873 margin-bottom: 2.0em; 874 width: 100%; 875 } 876 877 /* Tweak code blocks */ 878 879 d-article div.sourceCode code, 880 d-article pre code {
881 font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 882 } 883 884 d-article pre, 885 d-article div.sourceCode, 886 d-article div.sourceCode pre { 887 overflow: auto; 888 } 889 890 d-article div.sourceCode { 891 background-color: white; 892 } 893 894 d-article div.sourceCode pre { 895 padding-left: 10px; 896 font-size: 12px; 897 border-left: 2px solid rgba(0,0,0,0.1); 898 } 899 900 d-article pre { 901 font-size: 12px; 902 color: black; 903 background: none; 904 margin-top: 0; 905 text-align: left; 906 white-space: pre; 907 word-spacing: normal; 908 word-break: normal; 909 word-wrap: normal; 910 line-height: 1.5; 911 912 -moz-tab-size: 4; 913 -o-tab-size: 4; 914 tab-size: 4; 915 916 -webkit-hyphens: none; 917 -moz-hyphens: none; 918 -ms-hyphens: none; 919 hyphens: none; 920 } 921 922 d-article pre a { 923 border-bottom: none; 924 } 925 926 d-article pre a:hover { 927 border-bottom: none; 928 text-decoration: underline; 929 } 930 931 d-article details { 932 grid-column: text; 933 margin-bottom: 0.8em; 934 } 935 936 @media(min-width: 768px) { 937 938 d-article pre, 939 d-article div.sourceCode, 940 d-article div.sourceCode pre { 941 overflow: visible !important; 942 } 943 944 d-article div.sourceCode pre { 945 padding-left: 18px; 946 font-size: 14px; 947 } 948 949 /* tweak for Pandoc numbered line within distill */ 950 d-article pre.numberSource code > span { 951 left: -2em; 952 } 953 954 d-article pre { 955 font-size: 14px; 956 } 957 958 } 959 960 figure img.external { 961 background: white; 962 border: 1px solid rgba(0, 0, 0, 0.1); 963 box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); 964 padding: 18px; 965 box-sizing: border-box; 966 } 967 968 /* CSS for d-contents */ 969 970 .d-contents { 971 grid-column: text; 972 color: rgba(0,0,0,0.8); 973 font-size: 0.9em; 974 padding-bottom: 1em; 975 margin-bottom: 1em; 976 padding-bottom: 0.5em; 977 margin-bottom: 1em; 978 padding-left: 0.25em; 979 justify-self: start; 980 } 981 982 @media(min-width: 1000px) { 983 .d-contents.d-contents-float { 984 height: 0; 985 grid-column-start: 1; 986 grid-column-end: 4; 987 justify-self: center; 988 padding-right: 3em; 989 padding-left: 2em; 990 } 991 } 992 993 .d-contents nav h3 { 994 font-size: 18px; 995 margin-top: 0; 996 margin-bottom: 1em; 997 } 998 999 .d-contents li { 1000 list-style-type: none 1001 } 1002 1003 .d-contents nav > ul { 1004 padding-left: 0; 1005 } 1006 1007 .d-contents ul { 1008 padding-left: 1em 1009 } 1010 1011 .d-contents nav ul li { 1012 margin-top: 0.6em; 1013 margin-bottom: 0.2em; 1014 } 1015 1016 .d-contents nav a { 1017 font-size: 13px; 1018 border-bottom: none; 1019 text-decoration: none 1020 color: rgba(0, 0, 0, 0.8); 1021 } 1022 1023 .d-contents nav a:hover { 1024 text-decoration: underline solid rgba(0, 0, 0, 0.6) 1025 } 1026 1027 .d-contents nav > ul > li > a { 1028 font-weight: 600; 1029 } 1030 1031 .d-contents nav > ul > li > ul { 1032 font-weight: inherit; 1033 } 1034 1035 .d-contents nav > ul > li > ul > li { 1036 margin-top: 0.2em; 1037 } 1038 1039 1040 .d-contents nav ul { 1041 margin-top: 0; 1042 margin-bottom: 0.25em; 1043 } 1044 1045 .d-article-with-toc h2:nth-child(2) { 1046 margin-top: 0; 1047 } 1048 1049 1050 /* Figure */ 1051 1052 .figure { 1053 position: relative; 1054 margin-bottom: 2.5em; 1055 margin-top: 1.5em; 1056 } 1057 1058 .figure .caption { 1059 color: rgba(0, 0, 0, 0.6); 1060 font-size: 12px; 1061 line-height: 1.5em; 1062 } 1063 1064 .figure img.external { 1065 background: white; 1066 border: 1px solid rgba(0, 0, 0, 0.1); 1067 box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); 1068 padding: 18px; 1069 box-sizing: border-box; 1070 } 1071 1072 .figure .caption a { 1073 color: rgba(0, 0, 0, 0.6); 1074 } 1075 1076 .figure .caption b, 1077 .figure .caption strong, { 1078 font-weight: 600; 1079 color: rgba(0, 0, 0, 1.0); 1080 } 1081 1082 /* Citations */ 1083 1084 d-article .citation { 1085 color: inherit; 1086 cursor: inherit; 1087 } 1088 1089 div.hanging-indent{ 1090 margin-left: 1em; text-indent: -1em; 1091 } 1092 1093 /* Citation hover box */ 1094 1095 .tippy-box[data-theme~=light-border] { 1096 background-color: rgba(250, 250, 250, 0.95); 1097 } 1098 1099 .tippy-content > p { 1100 margin-bottom: 0; 1101 padding: 2px; 1102 } 1103 1104 1105 /* Tweak 1000px media break to show more text */ 1106 1107 @media(min-width: 1000px) { 1108 .base-grid, 1109 distill-header, 1110 d-title, 1111 d-abstract, 1112 d-article, 1113 d-appendix, 1114 distill-appendix, 1115 d-byline, 1116 d-footnote-list, 1117 d-citation-list, 1118 distill-footer { 1119 grid-template-columns: [screen-start] 1fr [page-start kicker-start] 80px [middle-start] 50px [text-start kicker-end] 65px 65px 65px 65px 65px 65px 65px 65px [text-end gutter-start] 65px [middle-end] 65px [page-end gutter-end] 1fr [screen-end]; 1120 grid-column-gap: 16px; 1121 } 1122 1123 .grid { 1124 grid-column-gap: 16px; 1125 } 1126 1127 d-article { 1128 font-size: 1.06rem; 1129 line-height: 1.7em; 1130 } 1131 figure .caption, .figure .caption, figure figcaption { 1132 font-size: 13px; 1133 } 1134 } 1135 1136 @media(min-width: 1180px) { 1137 .base-grid, 1138 distill-header, 1139 d-title, 1140 d-abstract, 1141 d-article, 1142 d-appendix, 1143 distill-appendix, 1144 d-byline, 1145 d-footnote-list, 1146 d-citation-list, 1147 distill-footer { 1148 grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end]; 1149 grid-column-gap: 32px; 1150 } 1151 1152 .grid { 1153 grid-column-gap: 32px; 1154 } 1155 } 1156 1157 1158 /* Get the citation styles for the appendix (not auto-injected on render since 1159 we do our own rendering of the citation appendix) */ 1160 1161 d-appendix .citation-appendix, 1162 .d-appendix .citation-appendix { 1163 font-size: 11px; 1164 line-height: 15px; 1165 border-left: 1px solid rgba(0, 0, 0, 0.1); 1166 padding-left: 18px; 1167 border: 1px solid rgba(0,0,0,0.1); 1168 background: rgba(0, 0, 0, 0.02); 1169 padding: 10px 18px; 1170 border-radius: 3px; 1171 color: rgba(150, 150, 150, 1); 1172 overflow: hidden; 1173 margin-top: -12px; 1174 white-space: pre-wrap; 1175 word-wrap: break-word; 1176 } 1177 1178 /* Include appendix styles here so they can be overridden */ 1179 1180 d-appendix { 1181 contain: layout style; 1182 font-size: 0.8em; 1183 line-height: 1.7em; 1184 margin-top: 60px; 1185 margin-bottom: 0; 1186 border-top: 1px solid rgba(0, 0, 0, 0.1); 1187 color: rgba(0,0,0,0.5); 1188 padding-top: 60px; 1189 padding-bottom: 48px; 1190 } 1191 1192 d-appendix h3 { 1193 grid-column: page-start / text-start; 1194 font-size: 15px; 1195 font-weight: 500; 1196 margin-top: 1em; 1197 margin-bottom: 0; 1198 color: rgba(0,0,0,0.65); 1199 } 1200 1201 d-appendix h3 + * { 1202 margin-top: 1em; 1203 } 1204 1205 d-appendix ol { 1206 padding: 0 0 0 15px; 1207 } 1208 1209 @media (min-width: 768px) { 1210 d-appendix ol { 1211 padding: 0 0 0 30px; 1212 margin-left: -30px; 1213 } 1214 } 1215 1216 d-appendix li { 1217 margin-bottom: 1em; 1218 } 1219 1220 d-appendix a { 1221 color: rgba(0, 0, 0, 0.6); 1222 } 1223 1224 d-appendix > * { 1225 grid-column: text; 1226 } 1227 1228 d-appendix > d-footnote-list, 1229 d-appendix > d-citation-list, 1230 d-appendix > distill-appendix { 1231 grid-column: screen; 1232 } 1233 1234 /* Include footnote styles here so they can be overridden */ 1235 1236 d-footnote-list { 1237 contain: layout style; 1238 } 1239 1240 d-footnote-list > * { 1241 grid-column: text; 1242 } 1243
1244 d-footnote-list a.footnote-backlink { 1245 color: rgba(0,0,0,0.3); 1246 padding-left: 0.5em; 1247 } 1248 1249 1250 1251 /* Anchor.js */ 1252 1253 .anchorjs-link { 1254 /*transition: all .25s linear; */ 1255 text-decoration: none; 1256 border-bottom: none; 1257 } 1258 *:hover > .anchorjs-link { 1259 margin-left: -1.125em !important; 1260 text-decoration: none; 1261 border-bottom: none; 1262 } 1263 1264 /* Social footer */ 1265 1266 .social_footer { 1267 margin-top: 30px; 1268 margin-bottom: 0; 1269 color: rgba(0,0,0,0.67); 1270 } 1271 1272 .disqus-comments { 1273 margin-right: 30px; 1274 } 1275 1276 .disqus-comment-count { 1277 border-bottom: 1px solid rgba(0, 0, 0, 0.4); 1278 cursor: pointer; 1279 } 1280 1281 #disqus_thread { 1282 margin-top: 30px; 1283 } 1284 1285 .article-sharing a { 1286 border-bottom: none; 1287 margin-right: 8px; 1288 } 1289 1290 .article-sharing a:hover { 1291 border-bottom: none; 1292 } 1293 1294 .sidebar-section.subscribe { 1295 font-size: 12px; 1296 line-height: 1.6em; 1297 } 1298 1299 .subscribe p { 1300 margin-bottom: 0.5em; 1301 } 1302 1303 1304 .article-footer .subscribe { 1305 font-size: 15px; 1306 margin-top: 45px; 1307 } 1308 1309 1310 .sidebar-section.custom { 1311 font-size: 12px; 1312 line-height: 1.6em; 1313 } 1314 1315 .custom p { 1316 margin-bottom: 0.5em; 1317 } 1318 1319 /* Styles for listing layout (hide title) */ 1320 .layout-listing d-title, .layout-listing .d-title { 1321 display: none; 1322 } 1323 1324 /* Styles for posts lists (not auto-injected) */ 1325 1326 1327 .posts-with-sidebar { 1328 padding-left: 45px; 1329 padding-right: 45px; 1330 } 1331 1332 .posts-list .description h2, 1333 .posts-list .description p { 1334 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; 1335 } 1336 1337 .posts-list .description h2 { 1338 font-weight: 700; 1339 border-bottom: none; 1340 padding-bottom: 0; 1341 } 1342 1343 .posts-list h2.post-tag { 1344 border-bottom: 1px solid rgba(0, 0, 0, 0.2); 1345 padding-bottom: 12px; 1346 } 1347 .posts-list { 1348 margin-top: 60px; 1349 margin-bottom: 24px; 1350 } 1351 1352 .posts-list .post-preview { 1353 text-decoration: none; 1354 overflow: hidden; 1355 display: block; 1356 border-bottom: 1px solid rgba(0, 0, 0, 0.1); 1357 padding: 24px 0; 1358 } 1359 1360 .post-preview-last { 1361 border-bottom: none !important; 1362 } 1363 1364 .posts-list .posts-list-caption { 1365 grid-column: screen; 1366 font-weight: 400; 1367 } 1368 1369 .posts-list .post-preview h2 { 1370 margin: 0 0 6px 0; 1371 line-height: 1.2em; 1372 font-style: normal; 1373 font-size: 24px; 1374 } 1375 1376 .posts-list .post-preview p { 1377 margin: 0 0 12px 0; 1378 line-height: 1.4em; 1379 font-size: 16px; 1380 } 1381 1382 .posts-list .post-preview .thumbnail { 1383 box-sizing: border-box; 1384 margin-bottom: 24px; 1385 position: relative; 1386 max-width: 500px; 1387 } 1388 .posts-list .post-preview img { 1389 width: 100%; 1390 display: block; 1391 } 1392 1393 .posts-list .metadata { 1394 font-size: 12px; 1395 line-height: 1.4em; 1396 margin-bottom: 18px; 1397 } 1398 1399 .posts-list .metadata > * { 1400 display: inline-block; 1401 } 1402 1403 .posts-list .metadata .publishedDate { 1404 margin-right: 2em; 1405 } 1406 1407 .posts-list .metadata .dt-authors { 1408 display: block; 1409 margin-top: 0.3em; 1410 margin-right: 2em; 1411 } 1412 1413 .posts-list .dt-tags { 1414 display: block; 1415 line-height: 1em; 1416 } 1417 1418 .posts-list .dt-tags .dt-tag { 1419 display: inline-block; 1420 color: rgba(0,0,0,0.6); 1421 padding: 0.3em 0.4em; 1422 margin-right: 0.2em; 1423 margin-bottom: 0.4em; 1424 font-size: 60%; 1425 border: 1px solid rgba(0,0,0,0.2); 1426 border-radius: 3px; 1427 text-transform: uppercase; 1428 font-weight: 500; 1429 } 1430 1431 .posts-list img { 1432 opacity: 1; 1433 } 1434 1435 .posts-list img[data-src] { 1436 opacity: 0; 1437 } 1438 1439 .posts-more { 1440 clear: both; 1441 } 1442 1443 1444 .posts-sidebar { 1445 font-size: 16px; 1446 } 1447 1448 .posts-sidebar h3 { 1449 font-size: 16px; 1450 margin-top: 0; 1451 margin-bottom: 0.5em; 1452 font-weight: 400; 1453 text-transform: uppercase; 1454 } 1455 1456 .sidebar-section { 1457 margin-bottom: 30px; 1458 } 1459 1460 .categories ul { 1461 list-style-type: none; 1462 margin: 0; 1463 padding: 0; 1464 } 1465 1466 .categories li { 1467 color: rgba(0, 0, 0, 0.8); 1468 margin-bottom: 0; 1469 } 1470 1471 .categories li>a { 1472 border-bottom: none; 1473 } 1474 1475 .categories li>a:hover { 1476 border-bottom: 1px solid rgba(0, 0, 0, 0.4); 1477 } 1478 1479 .categories .active { 1480 font-weight: 600; 1481 } 1482 1483 .categories .category-count { 1484 color: rgba(0, 0, 0, 0.4); 1485 } 1486 1487 1488 @media(min-width: 768px) { 1489 .posts-list .post-preview h2 { 1490 font-size: 26px; 1491 } 1492 .posts-list .post-preview .thumbnail { 1493 float: right; 1494 width: 30%; 1495 margin-bottom: 0; 1496 } 1497 .posts-list .post-preview .description { 1498 float: left; 1499 width: 45%; 1500 } 1501 .posts-list .post-preview .metadata { 1502 float: left; 1503 width: 20%; 1504 margin-top: 8px; 1505 } 1506 .posts-list .post-preview p { 1507 margin: 0 0 12px 0; 1508 line-height: 1.5em; 1509 font-size: 16px; 1510 } 1511 .posts-with-sidebar .posts-list { 1512 float: left; 1513 width: 75%; 1514 } 1515 .posts-with-sidebar .posts-sidebar { 1516 float: right; 1517 width: 20%; 1518 margin-top: 60px; 1519 padding-top: 24px; 1520 padding-bottom: 24px; 1521 } 1522 } 1523 1524 1525 /* Improve display for browsers without grid (IE/Edge <= 15) */ 1526 1527 .downlevel { 1528 line-height: 1.6em; 1529 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; 1530 margin: 0; 1531 } 1532 1533 .downlevel .d-title { 1534 padding-top: 6rem; 1535 padding-bottom: 1.5rem; 1536 } 1537 1538 .downlevel .d-title h1 { 1539 font-size: 50px; 1540 font-weight: 700; 1541 line-height: 1.1em; 1542 margin: 0 0 0.5rem; 1543 } 1544 1545 .downlevel .d-title p { 1546 font-weight: 300; 1547 font-size: 1.2rem; 1548 line-height: 1.55em; 1549 margin-top: 0; 1550 } 1551 1552 .downlevel .d-byline { 1553 padding-top: 0.8em; 1554 padding-bottom: 0.8em; 1555 font-size: 0.8rem; 1556 line-height: 1.8em; 1557 } 1558 1559 .downlevel .section-separator { 1560 border: none; 1561 border-top: 1px solid rgba(0, 0, 0, 0.1); 1562 } 1563 1564 .downlevel .d-article { 1565 font-size: 1.06rem; 1566 line-height: 1.7em; 1567 padding-top: 1rem; 1568 padding-bottom: 2rem; 1569 } 1570 1571 1572 .downlevel .d-appendix { 1573 padding-left: 0; 1574 padding-right: 0; 1575 max-width: none; 1576 font-size: 0.8em; 1577 line-height: 1.7em; 1578 margin-bottom: 0; 1579 color: rgba(0,0,0,0.5); 1580 padding-top: 40px; 1581 padding-bottom: 48px; 1582 } 1583 1584 .downlevel .footnotes ol { 1585 padding-left: 13px; 1586 } 1587 1588 .downlevel .base-grid, 1589 .downlevel .distill-header, 1590 .downlevel .d-title, 1591 .downlevel .d-abstract, 1592 .downlevel .d-article, 1593 .downlevel .d-appendix, 1594 .downlevel .distill-appendix, 1595 .downlevel .d-byline, 1596 .downlevel .d-footnote-list, 1597 .downlevel .d-citation-list, 1598 .downlevel .distill-footer, 1599 .downlevel .appendix-bottom, 1600 .downlevel .posts-container { 1601 padding-left: 40px; 1602 padding-right: 40px; 1603 } 1604 1605 @media(min-width: 768px) { 1606 .downlevel .base-grid, 1607 .downlevel .distill-header, 1608 .downlevel .d-title, 1609 .downlevel .d-abstract, 1610 .downlevel .d-article, 1611 .downlevel .d-appendix, 1612 .downlevel .distill-appendix, 1613 .downlevel .d-byline, 1614 .downlevel .d-footnote-list, 1615 .downlevel .d-citation-list, 1616 .downlevel .distill-footer, 1617 .downlevel .appendix-bottom, 1618 .downlevel .posts-container { 1619 padding-left: 150px; 1620 padding-right: 150px; 1621 max-width: 900px; 1622 } 1623 } 1624 1625 .downlevel pre code { 1626 display: block; 1627 border-left: 2px solid rgba(0, 0, 0, .1); 1628 padding: 0 0 0 20px; 1629 font-size: 14px; 1630 } 1631 1632 .downlevel code, .downlevel pre { 1633 color: black; 1634 background: none;
1635 font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 1636 text-align: left; 1637 white-space: pre; 1638 word-spacing: normal; 1639 word-break: normal; 1640 word-wrap: normal; 1641 line-height: 1.5; 1642 1643 -moz-tab-size: 4; 1644 -o-tab-size: 4; 1645 tab-size: 4; 1646 1647 -webkit-hyphens: none; 1648 -moz-hyphens: none; 1649 -ms-hyphens: none; 1650 hyphens: none; 1651 } 1652 1653 .downlevel .posts-list .post-preview { 1654 color: inherit; 1655 } 1656 1657 1658 1659 </style> 1660 1661
1661<script type="application/javascript"> 1662 1663 function is_downlevel_browser() { 1664 if (bowser.isUnsupportedBrowser({ msie: "12", msedge: "16"}, 1665 window.navigator.userAgent)) { 1666 return true; 1667 } else { 1668 return window.load_distill_framework === undefined; 1669 } 1670 } 1671 1672 // show body when load is complete 1673 function on_load_complete() { 1674 1675 // add anchors 1676 if (window.anchors) { 1677 window.anchors.options.placement = 'left'; 1678 window.anchors.add('d-article > h2, d-article > h3, d-article > h4, d-article > h5'); 1679 } 1680 1681 1682 // set body to visible 1683 document.body.style.visibility = 'visible'; 1684 1685 // force redraw for leaflet widgets 1686 if (window.HTMLWidgets) { 1687 var maps = window.HTMLWidgets.findAll(".leaflet"); 1688 $.each(maps, function(i, el) { 1689 var map = this.getMap(); 1690 map.invalidateSize(); 1691 map.eachLayer(function(layer) { 1692 if (layer instanceof L.TileLayer) 1693 layer.redraw(); 1694 }); 1695 }); 1696 } 1697 1698 // trigger 'shown' so htmlwidgets resize 1699 $('d-article').trigger('shown'); 1700 } 1701 1702 function init_distill() { 1703 1704 init_common(); 1705 1706 // create front matter 1707 var front_matter = $('<d-front-matter></d-front-matter>'); 1708 $('#distill-front-matter').wrap(front_matter); 1709 1710 // create d-title 1711 $('.d-title').changeElementType('d-title'); 1712 1713 // separator 1714 var separator = '<hr class="section-separator" style="clear: both"/>'; 1715 // prepend separator above appendix 1716 $('.d-byline').before(separator); 1717 $('.d-article').before(separator); 1718 1719 // create d-byline 1720 var byline = $('<d-byline></d-byline>'); 1721 $('.d-byline').replaceWith(byline); 1722 1723 // create d-article 1724 var article = $('<d-article></d-article>'); 1725 $('.d-article').wrap(article).children().unwrap(); 1726 1727 // move posts container into article 1728 $('.posts-container').appendTo($('d-article')); 1729 1730 // create d-appendix 1731 $('.d-appendix').changeElementType('d-appendix'); 1732 1733 // flag indicating that we have appendix items 1734 var appendix = $('.appendix-bottom').children('h3').length > 0; 1735 1736 // replace footnotes with <d-footnote> 1737 $('.footnote-ref').each(function(i, val) { 1738 appendix = true; 1739 var href = $(this).attr('href'); 1740 var id = href.replace('#', ''); 1741 var fn = $('#' + id); 1742 var fn_p = $('#' + id + '>p'); 1743 fn_p.find('.footnote-back').remove(); 1744 var text = fn_p.html(); 1745 var dtfn = $('<d-footnote></d-footnote>'); 1746 dtfn.html(text); 1747 $(this).replaceWith(dtfn); 1748 }); 1749 // remove footnotes 1750 $('.footnotes').remove(); 1751 1752 // move refs into #references-listing 1753 $('#references-listing').replaceWith($('#refs')); 1754 1755 $('h1.appendix, h2.appendix').each(function(i, val) { 1756 $(this).changeElementType('h3'); 1757 }); 1758 $('h3.appendix').each(function(i, val) { 1759 var id = $(this).attr('id'); 1760 $('.d-contents a[href="#' + id + '"]').parent().remove(); 1761 appendix = true; 1762 $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('d-appendix')); 1763 }); 1764 1765 // show d-appendix if we have appendix content 1766 $("d-appendix").css('display', appendix ? 'grid' : 'none'); 1767 1768 // localize layout chunks to just output 1769 $('.layout-chunk').each(function(i, val) { 1770 1771 // capture layout 1772 var layout = $(this).attr('data-layout'); 1773 1774 // apply layout to markdown level block elements 1775 var elements = $(this).children().not('details, div.sourceCode, pre, script'); 1776 elements.each(function(i, el) { 1777 var layout_div = $('<div class="' + layout + '"></div>'); 1778 if (layout_div.hasClass('shaded')) { 1779 var shaded_content = $('<div class="shaded-content"></div>'); 1780 $(this).wrap(shaded_content); 1781 $(this).parent().wrap(layout_div); 1782 } else { 1783 $(this).wrap(layout_div); 1784 } 1785 }); 1786 1787 1788 // unwrap the layout-chunk div 1789 $(this).children().unwrap(); 1790 }); 1791 1792 // remove code block used to force highlighting css 1793 $('.distill-force-highlighting-css').parent().remove(); 1794 1795 // remove empty line numbers inserted by pandoc when using a 1796 // custom syntax highlighting theme, except when numbering line 1797 // in code chunk 1798 $('pre:not(.numberLines) code.sourceCode a:empty').remove(); 1799 1800 // load distill framework 1801 load_distill_framework(); 1802 1803 // wait for window.distillRunlevel == 4 to do post processing 1804 function distill_post_process() { 1805 1806 if (!window.distillRunlevel || window.distillRunlevel < 4) 1807 return; 1808 1809 // hide author/affiliations entirely if we have no authors 1810 var front_matter = JSON.parse($("#distill-front-matter").html()); 1811 var have_authors = front_matter.authors && front_matter.authors.length > 0; 1812 if (!have_authors) 1813 $('d-byline').addClass('hidden'); 1814 1815 // article with toc class 1816 $('.d-contents').parent().addClass('d-article-with-toc'); 1817 1818 // strip links that point to # 1819 $('.authors-affiliations').find('a[href="#"]').removeAttr('href'); 1820 1821 // add orcid ids 1822 $('.authors-affiliations').find('.author').each(function(i, el) {
1823 var orcid_id = front_matter.authors[i].orcidID; 1824 var author_name = front_matter.authors[i].author 1825 if (orcid_id) { 1826 var a = $('<a></a>'); 1827 a.attr('href', 'https://orcid.org/' + orcid_id); 1828 var img = $('<img></img>'); 1829 img.addClass('orcid-id'); 1830 img.attr('alt', author_name ? 'ORCID ID for ' + author_name : 'ORCID ID'); 1831 img.attr('src','data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=='); 1832 a.append(img); 1833 $(this).append(a); 1834 } 1835 }); 1836 1837 // hide elements of author/affiliations grid that have no value 1838 function hide_byline_column(caption) { 1839 $('d-byline').find('h3:contains("' + caption + '")').parent().css('visibility', 'hidden'); 1840 } 1841 1842 // affiliations 1843 var have_affiliations = false; 1844 for (var i = 0; i<front_matter.authors.length; ++i) { 1845 var author = front_matter.authors[i]; 1846 if (author.affiliation !== " ") { 1847 have_affiliations = true; 1848 break; 1849 } 1850 } 1851 if (!have_affiliations) 1852 $('d-byline').find('h3:contains("Affiliations")').css('visibility', 'hidden'); 1853 1854 // published date 1855 if (!front_matter.publishedDate) 1856 hide_byline_column("Published"); 1857 1858 // document object identifier 1859 var doi = $('d-byline').find('h3:contains("DOI")'); 1860 var doi_p = doi.next().empty(); 1861 if (!front_matter.doi) { 1862 // if we have a citation and valid citationText then link to that 1863 if ($('#citation').length > 0 && front_matter.citationText) { 1864 doi.html('Citation'); 1865 $('<a href="#citation"></a>') 1866 .text(front_matter.citationText) 1867 .appendTo(doi_p); 1868 } else { 1869 hide_byline_column("DOI"); 1870 } 1871 } else { 1872 $('<a></a>') 1873 .attr('href', "https://doi.org/" + front_matter.doi) 1874 .html(front_matter.doi) 1875 .appendTo(doi_p); 1876 } 1877 1878 // change plural form of authors/affiliations 1879 if (front_matter.authors.length === 1) { 1880 var grid = $('.authors-affiliations'); 1881 grid.children('h3:contains("Authors")').text('Author'); 1882 grid.children('h3:contains("Affiliations")').text('Affiliation'); 1883 } 1884 1885 // remove d-appendix and d-footnote-list local styles 1886 $('d-appendix > style:first-child').remove(); 1887 $('d-footnote-list > style:first-child').remove(); 1888 1889 // move appendix-bottom entries to the bottom 1890 $('.appendix-bottom').appendTo('d-appendix').children().unwrap(); 1891 $('.appendix-bottom').remove(); 1892 1893 // hoverable references 1894 $('span.citation[data-cites]').each(function() { 1895 const citeChild = $(this).children()[0]
1896 // Do not process if @xyz has been used without escaping and without bibliography activated 1897 // https://github.com/rstudio/distill/issues/466 1898 if (citeChild === undefined) return true 1899 1900 if (citeChild.nodeName == "D-FOOTNOTE") { 1901 var fn = citeChild 1902 $(this).html(fn.shadowRoot.querySelector("sup")) 1903 $(this).id = fn.id 1904 fn.remove() 1905 } 1906 var refs = $(this).attr('data-cites').split(" "); 1907 var refHtml = refs.map(function(ref) { 1908 // Could use CSS.escape too here, we insure backward compatibility in navigator 1909 return "<p>" + $('div[id="ref-' + ref + '"]').html() + "</p>"; 1910 }).join("\n"); 1911 window.tippy(this, { 1912 allowHTML: true, 1913 content: refHtml, 1914 maxWidth: 500, 1915 interactive: true, 1916 interactiveBorder: 10, 1917 theme: 'light-border', 1918 placement: 'bottom-start' 1919 }); 1920 }); 1921 1922 // fix footnotes in tables (#411) 1923 // replacing broken distill.pub feature 1924 $('table d-footnote').each(function() { 1925 // we replace internal showAtNode methode which is triggered when hovering a footnote 1926 this.hoverBox.showAtNode = function(node) { 1927 // ported from https://github.com/distillpub/template/pull/105/files 1928 calcOffset = function(elem) { 1929 let x = elem.offsetLeft; 1930 let y = elem.offsetTop; 1931 // Traverse upwards until an `absolute` element is found or `elem` 1932 // becomes null. 1933 while (elem = elem.offsetParent && elem.style.position != 'absolute') { 1934 x += elem.offsetLeft; 1935 y += elem.offsetTop; 1936 } 1937 1938 return { left: x, top: y }; 1939 } 1940 // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop 1941 const bbox = node.getBoundingClientRect(); 1942 const offset = calcOffset(node); 1943 this.show([offset.left + bbox.width, offset.top + bbox.height]); 1944 } 1945 }) 1946 1947 // clear polling timer 1948 clearInterval(tid); 1949 1950 // show body now that everything is ready 1951 on_load_complete(); 1952 } 1953 1954 var tid = setInterval(distill_post_process, 50); 1955 distill_post_process(); 1956 1957 } 1958 1959 function init_downlevel() { 1960 1961 init_common(); 1962 1963 // insert hr after d-title 1964 $('.d-title').after($('<hr class="section-separator"/>')); 1965 1966 // check if we have authors 1967 var front_matter = JSON.parse($("#distill-front-matter").html()); 1968 var have_authors = front_matter.authors && front_matter.authors.length > 0; 1969
1970 // manage byline/border 1971 if (!have_authors) 1972 $('.d-byline').remove(); 1973 $('.d-byline').after($('<hr class="section-separator"/>')); 1974 $('.d-byline a').remove(); 1975 1976 // remove toc 1977 $('.d-contents').remove(); 1978 1979 // move appendix elements 1980 $('h1.appendix, h2.appendix').each(function(i, val) { 1981 $(this).changeElementType('h3'); 1982 }); 1983 $('h3.appendix').each(function(i, val) { 1984 $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('.d-appendix')); 1985 }); 1986 1987 1988 // inject headers into references and footnotes 1989 var refs_header = $('<h3></h3>'); 1990 refs_header.text('References'); 1991 $('#refs').prepend(refs_header); 1992 1993 var footnotes_header = $('<h3></h3'); 1994 footnotes_header.text('Footnotes'); 1995 $('.footnotes').children('hr').first().replaceWith(footnotes_header); 1996 1997 // move appendix-bottom entries to the bottom 1998 $('.appendix-bottom').appendTo('.d-appendix').children().unwrap(); 1999 $('.appendix-bottom').remove(); 2000 2001 // remove appendix if it's empty 2002 if ($('.d-appendix').children().length === 0) 2003 $('.d-appendix').remove(); 2004 2005 // prepend separator above appendix 2006 $('.d-appendix').before($('<hr class="section-separator" style="clear: both"/>')); 2007 2008 // trim code 2009 $('pre>code').each(function(i, val) { 2010 $(this).html($.trim($(this).html())); 2011 }); 2012 2013 // move posts-container right before article 2014 $('.posts-container').insertBefore($('.d-article')); 2015 2016 $('body').addClass('downlevel'); 2017 2018 on_load_complete(); 2019 } 2020 2021 2022 function init_common() { 2023 2024 // jquery plugin to change element types 2025 (function($) { 2026 $.fn.changeElementType = function(newType) { 2027 var attrs = {}; 2028 2029 $.each(this[0].attributes, function(idx, attr) { 2030 attrs[attr.nodeName] = attr.nodeValue; 2031 }); 2032 2033 this.replaceWith(function() { 2034 return $("<" + newType + "/>", attrs).append($(this).contents()); 2035 }); 2036 }; 2037 })(jQuery); 2038 2039 // prevent underline for linked images 2040 $('a > img').parent().css({'border-bottom' : 'none'}); 2041 2042 // mark non-body figures created by knitr chunks as 100% width 2043 $('.layout-chunk').each(function(i, val) { 2044 var figures = $(this).find('img, .html-widget'); 2045 // ignore leaflet img layers (#106) 2046 figures = figures.filter(':not(img[class*="leaflet"])') 2047 if ($(this).attr('data-layout') !== "l-body") { 2048 figures.css('width', '100%'); 2049 } else { 2050 figures.css('max-width', '100%'); 2051 figures.filter("[width]").each(function(i, val) { 2052 var fig = $(this); 2053 fig.css('width', fig.attr('width') + 'px'); 2054 }); 2055 2056 } 2057 }); 2058 2059 // auto-append index.html to post-preview links in file: protocol 2060 // and in rstudio ide preview 2061 $('.post-preview').each(function(i, val) { 2062 if (window.location.protocol === "file:") 2063 $(this).attr('href', $(this).attr('href') + "index.html"); 2064 }); 2065 2066 // get rid of index.html references in header 2067 if (window.location.protocol !== "file:") { 2068 $('.distill-site-header a[href]').each(function(i,val) { 2069 $(this).attr('href', $(this).attr('href').replace(/^index[.]html/, "./")); 2070 }); 2071 } 2072 2073 // add class to pandoc style tables 2074 $('tr.header').parent('thead').parent('table').addClass('pandoc-table'); 2075 $('.kable-table').children('table').addClass('pandoc-table'); 2076 2077 // add figcaption style to table captions 2078 $('caption').parent('table').addClass("figcaption"); 2079 2080 // initialize posts list 2081 if (window.init_posts_list) 2082 window.init_posts_list(); 2083 2084 // implmement disqus comment link 2085 $('.disqus-comment-count').click(function() { 2086 window.headroom_prevent_pin = true; 2087 $('#disqus_thread').toggleClass('hidden'); 2088 if (!$('#disqus_thread').hasClass('hidden')) { 2089 var offset = $(this).offset(); 2090 $(window).resize(); 2091 $('html, body').animate({ 2092 scrollTop: offset.top - 35 2093 }); 2094 } 2095 }); 2096 } 2097 2098 document.addEventListener('DOMContentLoaded', function() { 2099 if (is_downlevel_browser()) 2100 init_downlevel(); 2101 else 2102 window.addEventListener('WebComponentsReady', init_distill); 2103 }); 2104 2105 </script>
2105 2106 2107 <style type="text/css"> 2108 /* base variables */ 2109 2110 /* Edit the CSS properties in this file to create a custom 2111 Distill theme. Only edit values in the right column 2112 for each row; values shown are the CSS defaults. 2113 To return any property to the default, 2114 you may set its value to: unset 2115 All rows must end with a semi-colon. */ 2116 2117 /* Optional: embed custom fonts here with `@import` */ 2118 /* This must remain at the top of this file. */ 2119 2120 2121 2122 html { 2123 /*-- Main font sizes --*/ 2124 --title-size: 50px; 2125 --body-size: 1.06rem; 2126 --code-size: 14px; 2127 --aside-size: 12px; 2128 --fig-cap-size: 13px; 2129 /*-- Main font colors --*/ 2130 --title-color: #000000; 2131 --header-color: rgba(0, 0, 0, 0.8); 2132 --body-color: rgba(0, 0, 0, 0.8); 2133 --aside-color: rgba(0, 0, 0, 0.6); 2134 --fig-cap-color: rgba(0, 0, 0, 0.6); 2135 /*-- Specify custom fonts ~~~ must be imported above --*/ 2136 --heading-font: sans-serif; 2137 --mono-font: monospace; 2138 --body-font: sans-serif; 2139 --navbar-font: sans-serif; /* websites + blogs only */ 2140 } 2141 2142 /*-- ARTICLE METADATA --*/ 2143 d-byline { 2144 --heading-size: 0.6rem; 2145 --heading-color: rgba(0, 0, 0, 0.5); 2146 --body-size: 0.8rem; 2147 --body-color: rgba(0, 0, 0, 0.8); 2148 } 2149 2150 /*-- ARTICLE TABLE OF CONTENTS --*/ 2151 .d-contents { 2152 --heading-size: 18px; 2153 --contents-size: 13px; 2154 } 2155 2156 /*-- ARTICLE APPENDIX --*/ 2157 d-appendix { 2158 --heading-size: 15px; 2159 --heading-color: rgba(0, 0, 0, 0.65); 2160 --text-size: 0.8em; 2161 --text-color: rgba(0, 0, 0, 0.5); 2162 } 2163 2164 /*-- WEBSITE HEADER + FOOTER --*/ 2165 /* These properties only apply to Distill sites and blogs */ 2166 2167 .distill-site-header { 2168 --title-size: 18px; 2169 --text-color: rgba(255, 255, 255, 0.8); 2170 --text-size: 15px; 2171 --hover-color: white; 2172 --bkgd-color: #0F2E3D; 2173 } 2174 2175 .distill-site-footer { 2176 --text-color: rgba(255, 255, 255, 0.8); 2177 --text-size: 15px; 2178 --hover-color: white; 2179 --bkgd-color: #0F2E3D; 2180 } 2181 2182 /*-- Additional custom styles --*/ 2183 /* Add any additional CSS rules below */ 2184 </style> 2185 <style type="text/css">@import url('https://fonts.googleapis.com/css2?family=Annie+Use+Your+Telescope&family=Fuzzy+Bubbles&family=Shizuru&display=swap'); 2186 2187 /* Edit the CSS properties in this file to create a custom 2188 Distill theme. Only edit values in the right column 2189 for each row; values shown are the CSS defaults. 2190 To return any property to the default, 2191 you may set its value to: unset 2192 All rows must end with a semi-colon. */ 2193 2194 /* Optional: embed custom fonts here with `@import` */ 2195 /* This must remain at the top of this file. */ 2196 2197 2198 2199 html { 2200 /*-- Main font sizes --*/ 2201 --title-size: 50px; 2202 --text-size: 20px; 2203 /* --body-size: 1.06rem; */ 2204 --code-size: 14px; 2205 --aside-size: 12px; 2206 --fig-cap-size: 13px; 2207 /*-- Main font colors --*/ 2208 --title-color: white; 2209 --header-color: rgba(0, 0, 0, 0.8); 2210 --body-color: rgba(0, 0, 0, 0.8); 2211 --aside-color: rgba(0, 0, 0, 0.6); 2212 --fig-cap-color: rgba(0, 0, 0, 0.6); 2213 /*-- Specify custom fonts ~~~ must be imported above --*/ 2214 --heading-font: Atma; 2215 --mono-font: monospace; 2216 --body-font: sans-serif; 2217 --navbar-font: "Annie Use Your Telescope", serif; 2218 } 2219 2220 .distill-site-header { 2221 --title-size: 50px; 2222 --text-color: #176940; 2223 --text-size: 22px; 2224 --hover-color: black; 2225 --bkgd-color: #eeeeee; 2226 } 2227 2228 /*-- Additional custom styles --*/ 2229 /* Add any additional CSS rules below */ 2230 2231 .distill-site-nav { /* shdow line under banner */ 2232 border-bottom: 2px solid #DECF40; 2233 -webkit-box-shadow: 1px 1px 18px #4d4d4d; 2234 -moz-box-shadow: 1px 1px 18px #4d4d4d; 2235 box-shadow: 1px 1px 18px #4d4d4d; 2236 } 2237 2238 .distill-site-header .logo img { /* logo size */ 2239 max-height: 50px; 2240 width: auto; 2241 margin-top: 10px; 2242 } 2243 2244 2245 .posts-list > h1 { 2246 color: black!important; /* prints "Test Blog" */ 2247 } 2248 2249 2250 p a { /* underlines links */ 2251 text-decoration: none; 2252 color: black; 2253 border-bottom: 3px solid #9ae28f; 2254 box-shadow: inset 0 -4px 0 #9ae28f; 2255 background: transparent; 2256 transition: background 150ms ease; 2257 font-style: italic; 2258 font-family: menu; 2259 font-stretch: extra-expanded; 2260 } 2261 2262 p a:hover { /* makes links go green on hover */ 2263 text-decoration: none; 2264 --bg-opacity: 1; 2265 background-color: #9ae28f; 2266 background-color: rgba(154, 226, 143, var(--bg-opacity)); 2267 } 2268 2269 2270 .thumbnail { 2271 padding: 0px!important; 2272 margin: 0px!important; 2273 max-width: 25%!important; 2274 height: 10%!important; 2275 vertical-align: text-top!important; 2276 }</style> 2277 <style type="text/css"> 2278 /* base style */ 2279 2280 /* FONT FAMILIES */ 2281 2282 :root { 2283 --heading-default: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
2284 --mono-default: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 2285 --body-default: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; 2286 } 2287 2288 body, 2289 .posts-list .post-preview p, 2290 .posts-list .description p { 2291 font-family: var(--body-font), var(--body-default); 2292 } 2293 2294 h1, h2, h3, h4, h5, h6, 2295 .posts-list .post-preview h2, 2296 .posts-list .description h2 { 2297 font-family: var(--heading-font), var(--heading-default); 2298 } 2299 2300 d-article div.sourceCode code, 2301 d-article pre code { 2302 font-family: var(--mono-font), var(--mono-default); 2303 } 2304 2305 2306 /*-- TITLE --*/ 2307 d-title h1, 2308 .posts-list > h1 { 2309 color: var(--title-color, black); 2310 } 2311 2312 d-title h1 { 2313 font-size: var(--title-size, 50px); 2314 } 2315 2316 /*-- HEADERS --*/ 2317 d-article h1, 2318 d-article h2, 2319 d-article h3, 2320 d-article h4, 2321 d-article h5, 2322 d-article h6 { 2323 color: var(--header-color, rgba(0, 0, 0, 0.8)); 2324 } 2325 2326 /*-- BODY --*/ 2327 d-article > p, /* only text inside of <p> tags */ 2328 d-article > ul, /* lists */ 2329 d-article > ol { 2330 color: var(--body-color, rgba(0, 0, 0, 0.8)); 2331 font-size: var(--body-size, 1.06rem); 2332 } 2333 2334 2335 /*-- CODE --*/ 2336 d-article div.sourceCode code, 2337 d-article pre code { 2338 font-size: var(--code-size, 14px); 2339 } 2340 2341 /*-- ASIDE --*/ 2342 d-article aside { 2343 font-size: var(--aside-size, 12px); 2344 color: var(--aside-color, rgba(0, 0, 0, 0.6)); 2345 } 2346 2347 /*-- FIGURE CAPTIONS --*/ 2348 figure .caption, 2349 figure figcaption, 2350 .figure .caption { 2351 font-size: var(--fig-cap-size, 13px); 2352 color: var(--fig-cap-color, rgba(0, 0, 0, 0.6)); 2353 } 2354 2355 /*-- METADATA --*/ 2356 d-byline h3 { 2357 font-size: var(--heading-size, 0.6rem); 2358 color: var(--heading-color, rgba(0, 0, 0, 0.5)); 2359 } 2360 2361 d-byline { 2362 font-size: var(--body-size, 0.8rem); 2363 color: var(--body-color, rgba(0, 0, 0, 0.8)); 2364 } 2365 2366 d-byline a, 2367 d-article d-byline a { 2368 color: var(--body-color, rgba(0, 0, 0, 0.8)); 2369 } 2370 2371 /*-- TABLE OF CONTENTS --*/ 2372 .d-contents nav h3 { 2373 font-size: var(--heading-size, 18px); 2374 } 2375 2376 .d-contents nav a { 2377 font-size: var(--contents-size, 13px); 2378 } 2379 2380 /*-- APPENDIX --*/ 2381 d-appendix h3 { 2382 font-size: var(--heading-size, 15px); 2383 color: var(--heading-color, rgba(0, 0, 0, 0.65)); 2384 } 2385 2386 d-appendix { 2387 font-size: var(--text-size, 0.8em); 2388 color: var(--text-color, rgba(0, 0, 0, 0.5)); 2389 } 2390 2391 d-appendix d-footnote-list a.footnote-backlink { 2392 color: var(--text-color, rgba(0, 0, 0, 0.5)); 2393 } 2394 2395 /*-- WEBSITE HEADER + FOOTER --*/ 2396 .distill-site-header .title { 2397 font-size: var(--title-size, 18px); 2398 font-family: var(--navbar-font), var(--heading-default); 2399 } 2400 2401 .distill-site-header a, 2402 .nav-dropdown .nav-dropbtn { 2403 font-family: var(--navbar-font), var(--heading-default); 2404 } 2405 2406 .nav-dropdown .nav-dropbtn { 2407 color: var(--text-color, rgba(255, 255, 255, 0.8)); 2408 font-size: var(--text-size, 15px); 2409 } 2410 2411 .distill-site-header a:hover, 2412 .nav-dropdown:hover .nav-dropbtn { 2413 color: var(--hover-color, white); 2414 } 2415 2416 .distill-site-header { 2417 font-size: var(--text-size, 15px); 2418 color: var(--text-color, rgba(255, 255, 255, 0.8)); 2419 background-color: var(--bkgd-color, #0F2E3D); 2420 } 2421 2422 .distill-site-footer { 2423 font-size: var(--text-size, 15px); 2424 color: var(--text-color, rgba(255, 255, 255, 0.8)); 2425 background-color: var(--bkgd-color, #0F2E3D); 2426 } 2427 2428 .distill-site-footer a:hover { 2429 color: var(--hover-color, white); 2430 }</style> 2431 <!--/radix_placeholder_distill--> 2432
2432<script src="site_libs/header-attrs-2.29/header-attrs.js"></script>
2432 2433
2433<script src="site_libs/popper-2.6.0/popper.min.js"></script>
2433 2434 <link href="site_libs/tippy-6.2.7/tippy.css" rel="stylesheet" /> 2435 <link href="site_libs/tippy-6.2.7/tippy-light-border.css" rel="stylesheet" /> 2436
2436<script src="site_libs/tippy-6.2.7/tippy.umd.min.js"></script>
2436 2437
2437<script src="site_libs/anchor-4.2.2/anchor.min.js"></script>
2437 2438
2438<script src="site_libs/bowser-1.9.3/bowser.min.js"></script>
2438 2439
2439<script src="site_libs/webcomponents-2.0.0/webcomponents.js"></script>
2439 2440
2440<script src="site_libs/distill-2.2.21/template.v2.js"></script>
2440 2441 <!--radix_placeholder_site_in_header--> 2442 <style type="text/css"> 2443 @import url('https://fonts.googleapis.com/css2?family=Annie+Use+Your+Telescope&family=Fuzzy+Bubbles&family=Shizuru&display=swap'); 2444 2445 /* Edit the CSS properties in this file to create a custom 2446 Distill theme. Only edit values in the right column 2447 for each row; values shown are the CSS defaults. 2448 To return any property to the default, 2449 you may set its value to: unset 2450 All rows must end with a semi-colon. */ 2451 2452 /* Optional: embed custom fonts here with `@import` */ 2453 /* This must remain at the top of this file. */ 2454 2455 2456 2457 html { 2458 /*-- Main font sizes --*/ 2459 --title-size: 50px; 2460 --text-size: 20px; 2461 /* --body-size: 1.06rem; */ 2462 --code-size: 14px; 2463 --aside-size: 12px; 2464 --fig-cap-size: 13px; 2465 /*-- Main font colors --*/ 2466 --title-color: white; 2467 --header-color: rgba(0, 0, 0, 0.8); 2468 --body-color: rgba(0, 0, 0, 0.8); 2469 --aside-color: rgba(0, 0, 0, 0.6); 2470 --fig-cap-color: rgba(0, 0, 0, 0.6); 2471 /*-- Specify custom fonts ~~~ must be imported above --*/ 2472 --heading-font: Atma; 2473 --mono-font: monospace; 2474 --body-font: sans-serif; 2475 --navbar-font: "Annie Use Your Telescope", serif; 2476 } 2477 2478 .distill-site-header { 2479 --title-size: 50px; 2480 --text-color: #176940; 2481 --text-size: 22px; 2482 --hover-color: black; 2483 --bkgd-color: #eeeeee; 2484 } 2485 2486 /*-- Additional custom styles --*/ 2487 /* Add any additional CSS rules below */ 2488 2489 .distill-site-nav { /* shdow line under banner */ 2490 border-bottom: 2px solid #DECF40; 2491 -webkit-box-shadow: 1px 1px 18px #4d4d4d; 2492 -moz-box-shadow: 1px 1px 18px #4d4d4d; 2493 box-shadow: 1px 1px 18px #4d4d4d; 2494 } 2495 2496 .distill-site-header .logo img { /* logo size */ 2497 max-height: 50px; 2498 width: auto; 2499 margin-top: 10px; 2500 } 2501 2502 2503 .posts-list > h1 { 2504 color: black!important; /* prints "Test Blog" */ 2505 } 2506 2507 2508 p a { /* underlines links */ 2509 text-decoration: none; 2510 color: black; 2511 border-bottom: 3px solid #9ae28f; 2512 box-shadow: inset 0 -4px 0 #9ae28f; 2513 background: transparent; 2514 transition: background 150ms ease; 2515 font-style: italic; 2516 font-family: menu; 2517 font-stretch: extra-expanded; 2518 } 2519 2520 p a:hover { /* makes links go green on hover */ 2521 text-decoration: none; 2522 --bg-opacity: 1; 2523 background-color: #9ae28f; 2524 background-color: rgba(154, 226, 143, var(--bg-opacity)); 2525 } 2526 2527 2528 .thumbnail { 2529 padding: 0px!important; 2530 margin: 0px!important; 2531 max-width: 25%!important; 2532 height: 10%!important; 2533 vertical-align: text-top!important; 2534 } 2535 </style> 2536 <!--/radix_placeholder_site_in_header--> 2537 2538 <link rel="stylesheet" href="theme.css" type="text/css"/> 2539 2540</head> 2541 2542<body> 2543 2544<!--radix_placeholder_front_matter--> 2545
2546<script id="distill-front-matter" type="text/json"> 2547{"title":"About","description":"","authors":[]} 2548</script>
2548 2549 2550<!--/radix_placeholder_front_matter--> 2551<!--radix_placeholder_navigation_before_body--> 2552<header class="header header--fixed" role="banner"> 2553<nav class="distill-site-nav distill-site-header"> 2554<div class="nav-left"> 2555<a class="logo" href="https://www.fizzics.ie/"> 2556<img src="images/atlantic.png" alt="Logo"/> 2557</a> 2558<a class='title' href='/'>Euge</a> 2559<a href='/'>Home</a> 2560<a href='/projects'>Projects</a> 2561<a href='/teaching'>Teaching</a> 2562<a href='/talks'>Talks</a> 2563<a href='/publications'>Publications</a> 2564<a href='/resources'>Resources</a> 2565<a href='/about'>About</a> 2566<input id="distill-search" class="nav-search hidden" type="text" placeholder="Search..."/> 2567</div> 2568<div class="nav-right"> 2569<a href="https://github.com/eugene100hickey"> 2570<i class="fab fa-github" aria-hidden="true"></i> 2571</a> 2572<a href="https://mastodon.social/@eugene100hickey"> 2573<i class="fab fa-mastodon" aria-hidden="true"></i> 2574</a> 2575<a href="https://www.linkedin.com/in/eugene100hickey/"> 2576<i class="fab fa-linkedin" aria-hidden="true"></i> 2577</a> 2578<a href="https://orcid.org/my-orcid?orcid=0000-0001-9813-9323"> 2579<i class="fab fa-orcid" aria-hidden="true"></i> 2580</a> 2581<a href="blog.xml"> 2582<i class="fa fa-rss" aria-hidden="true"></i> 2583</a> 2584<a href="javascript:void(0);" class="nav-toggle">☰</a> 2585</div> 2586</nav> 2587</header> 2588<!--/radix_placeholder_navigation_before_body--> 2589<!--radix_placeholder_site_before_body--> 2590<!--/radix_placeholder_site_before_body--> 2591 2592<div class="d-title"> 2593<h1>About</h1> 2594 2595<!--radix_placeholder_categories--> 2596<!--/radix_placeholder_categories--> 2597 2598</div> 2599 2600 2601<div class="d-article"> 2602<style> 2603d-title { 2604 display:none; 2605} 2606body { 2607 font-size: 18px; 2608 line-height: 1.4; 2609 font-family: var(--body-font), var(--body-default); 2610} 2611 2612@page{ 2613 size: letter portrait; 2614 margin: 1in 0.5in 1in 0.25in; 2615} 2616 2617a { 2618 color: #FFB6C1; 2619} 2620 2621*{ 2622 box-sizing: border-box; 2623} 2624 2625:root{ 2626 --page-width: 8.5in; 2627} 2628 2629 2630#canvas { 2631 max-width: var(--page-width); 2632 margin: auto; 2633} 2634 2635.distill-site-footer { 2636 --text-color: rgba(0, 0, 0, 1); 2637 --text-size: 15px; 2638 --hover-color: black; 2639 --bkgd-color: white; 2640} 2641 2642.profile-photo { 2643 vertical-align: middle; 2644 padding: 1.5rem!important; 2645 box-sizing: border-box; 2646} 2647 2648.profile-photo img { 2649 // border: 1px solid black; 2650 border-radius: 50%!important; 2651 width: 12rem!important; 2652} 2653 2654 2655/* --- github calender --- */ 2656 2657:root { 2658 --color-calendar-graph-day-bg: #dddbdb; 2659 --color-calendar-graph-day-L1-bg: #cd669b; 2660 --color-calendar-graph-day-L2-bg: #bd327a; 2661 --color-calendar-graph-day-L3-bg: #ad0059; 2662 --color-calendar-graph-day-L4-bg: #79003e; 2663} 2664 2665rect.ContributionCalendar-day[data-level='0'] { 2666 fill: var(--color-calendar-graph-day-bg); 2667} 2668 2669rect.ContributionCalendar-day[data-level='1'] { 2670 fill: var(--color-calendar-graph-day-L1-bg); 2671} 2672 2673rect.ContributionCalendar-day[data-level='2'] { 2674 fill: var(--color-calendar-graph-day-L2-bg); 2675} 2676 2677rect.ContributionCalendar-day[data-level='3'] { 2678 fill: var(--color-calendar-graph-day-L3-bg); 2679} 2680 2681rect.ContributionCalendar-day[data-level='4'] { 2682 fill: var(--color-calendar-graph-day-L4-bg); 2683} 2684 2685.calendar { 2686 width: 100%; 2687 background-color: white; 2688 font-family: Helvetica, arial; 2689 border: 1px solid #DDDDDD; 2690 border-radius: 3px; 2691 min-height: 243px; 2692 text-align: center; 2693 margin: 0 auto; 2694 padding: 10px; 2695 color: black; 2696} 2697 2698.js-calendar-graph-svg { 2699 width: 100%; 2700} 2701 2702.calendar-graph text.wday, 2703.calendar-graph text.month { 2704 font-size: 10px; 2705 fill: #aaa; 2706} 2707 2708.contrib-legend { 2709 text-align: right; 2710 padding: 0 10px 10px 0; 2711 display: inline-block; 2712 float: right; 2713} 2714 2715.contrib-legend .legend { 2716 display: inline-block; 2717 list-style: none; 2718 margin: 0 5px; 2719 position: relative; 2720 bottom: -1px; 2721 padding: 0; 2722} 2723 2724.contrib-legend .legend li { 2725 display: inline-block; 2726 width: 10px; 2727 height: 10px; 2728} 2729 2730.text-small { 2731 font-size: 12px; 2732 color: #767676; 2733} 2734 2735.calendar-graph { 2736 padding: 5px 0 0; 2737 text-align: center; 2738} 2739 2740.contrib-column { 2741 padding: 15px 0; 2742 text-align: center; 2743 border-left: 1px solid #ddd; 2744 border-top: 1px solid #ddd; 2745 font-size: 11px; 2746} 2747 2748.contrib-column-first { 2749 border-left: 0; 2750} 2751 2752.table-column { 2753 display: table-cell; 2754 width: 5%; 2755 padding-right: 10px; 2756 padding-left: 10px; 2757 vertical-align: top; 2758} 2759 2760.contrib-number { 2761 font-weight: 300; 2762 line-height: 1.3em; 2763 font-size: 24px; 2764 display: block; 2765 color: #333; 2766} 2767 2768.calendar img.spinner { 2769 width: 70px; 2770 margin-top: 50px; 2771 min-height: 70px; 2772} 2773 2774.ContributionCalendar-label { 2775 font-size: 8pt; 2776} 2777 2778.monospace { 2779 text-align: center; 2780 color: #000; 2781 font-family: monospace; 2782} 2783 2784.monospace a { 2785 color: #1D75AB; 2786 text-decoration: none; 2787} 2788 2789.contrib-footer { 2790 font-size: 11px; 2791 padding: 0 10px 12px; 2792 text-align: left; 2793 width: 100%; 2794 box-sizing: border-box;
2795 height: 26px; 2796} 2797 2798.left.text-muted { 2799 float: left; 2800 margin-left: 9px; 2801 color: #767676; 2802} 2803.left.text-muted a { 2804 color: #4078c0; 2805 text-decoration: none; 2806} 2807.left.text-muted a:hover, 2808.monospace a:hover { 2809 text-decoration: underline; 2810} 2811 2812h2.f4.text-normal.mb-3 { 2813 display: none; 2814} 2815 2816.float-left.text-gray { 2817 float: left; 2818} 2819#user-activity-overview{ 2820 display:none; 2821} 2822 2823.day-tooltip { 2824 white-space: nowrap; 2825 position: absolute; 2826 z-index: 99999; 2827 padding: 10px; 2828 font-size: 12px; 2829 color: #959da5; 2830 text-align: center; 2831 background: rgba(0,0,0,.85); 2832 border-radius: 3px; 2833 display: none; 2834 pointer-events: none; 2835} 2836.day-tooltip strong { 2837 color: #dfe2e5; 2838} 2839.day-tooltip.is-visible { 2840 display: block; 2841} 2842.day-tooltip:after { 2843 position: absolute; 2844 bottom: -10px; 2845 left: 50%; 2846 width: 5px; 2847 height: 5px; 2848 box-sizing: border-box; 2849 margin: 0 0 0 -5px; 2850 content: " "; 2851 border: 5px solid transparent; 2852 border-top-color: rgba(0,0,0,.85) 2853} 2854 2855 2856.navbar { 2857 display: none; 2858} 2859#navigation .navbar { 2860 display: block; 2861} 2862</style> 2863<div id="canvas"> 2864<p><br> 2865<br></p> 2866<div class="profile-photo"> 2867<p><img src="images/euge.JPG" alt="Profile photo"></p> 2868</div> 2869<p>I lecture in physics at the Technological University Dublin and Iâm a part of <a href="https://ml-labs.ie/">ML-Labs</a>. Research-wise, I work in data science, mostly astrophysics or neuroscience. My original background was in materials science, making new inter-metallic compounds based on uranium and looking at their structural and physical properties at temperatures down to 2.2K. I then spent some time as a medical physicist, developing teleradiology systems. But then discovered R programming about 2015 and havenât looked back since.</p> 2870<p>This blog is an eclectic mix of posts featuring stuff I find interesting. Iâve have a fondness for maps, and specifically coordinate transformations, and especially maps of my home turf of Donegal. Over the years, Iâve spent a lot of time on golf courses, volleyball courts, and tennis courts, so they feature here too. Iâm involved in politics. And of course there will be plenty of physics, and not just the astrophysics / neuroscience / bioinformatics stuff.</p>
2871<script 2872 src="https://unpkg.com/github-calendar@latest/dist/github-calendar.min.js"> 2873</script>
2873 2874<div class="l-body-outset"> 2875<a href="https://github.com/eugene100hickey"> 2876<div class="calendar"> 2877<p>Loading my github calendar data.</p> 2878</div> 2879<p></a></p> 2880</div>
2881<script> 2882GitHubCalendar(".calendar", "eugene100hickey", { responsive: true }); 2883</script>
2883 2884<h2 id="you-can-find-me-at">You can find me at â¦</h2> 2885<div class="layout-chunk" data-layout="l-body"> 2886<table> 2887<colgroup> 2888<col style="width: 27%" /> 2889<col style="width: 72%" /> 2890</colgroup> 2891<tbody> 2892<tr class="odd"> 2893<td style="text-align: left;"><i class="fab fa-twitter"></i></td> 2894<td style="text-align: left;"><a href="https://twitter.com/eugene100hickey">eugene100hickey</a></td> 2895</tr> 2896<tr class="even"> 2897<td style="text-align: left;"><i class="fab fa-github"></i></td> 2898<td style="text-align: left;"><a href="https://github.com/eugene100hickey">eugene100hickey</a></td> 2899</tr> 2900<tr class="odd"> 2901<td style="text-align: left;"><i class="fas fa-envelope"></i></td> 2902<td style="text-align: left;"><a href="[email protected]">[email protected]</a></td> 2903</tr> 2904<tr class="even"> 2905<td style="text-align: left;"><i class="fas fa-map-marker-alt"></i></td> 2906<td style="text-align: left;">Department of Applied Science<br>Technological University Dublin,<br>Tallaght<br>D24FKT9<br>Ireland</td> 2907</tr> 2908</tbody> 2909</table> 2910</div> 2911<iframe src="https://www.google.com/maps/d/u/0/embed?mid=1m4FhES89FKiwadPn0bu8Z2d5F6COe1rU&ehbc=2E312F&zoom=6" width="640" height="480"> 2912</iframe> 2913<p>You can also find me at various conferences and events. Iâm a regular at the <a href="https://nhsrcommunity.com/">NHSr Community Conferences</a>, involved with <a href="https://2021.whyr.pl/">WhyR!</a> and various <a href="https://www.meetup.com">meetups in Dublin</a> (or other chapters sometimes). And Iâm now using <a rel="me" href="https://mastodon.social/@eugene100hickey">Mastodon</a> quite a bit, rather than the other thing.</p> 2914</div> 2915<div class="sourceCode" id="cb1"><pre class="sourceCode r distill-force-highlighting-css"><code class="sourceCode r"></code></pre></div> 2916<!--radix_placeholder_article_footer--> 2917<!--/radix_placeholder_article_footer--> 2918</div> 2919 2920<div class="d-appendix"> 2921</div> 2922 2923 2924<!--radix_placeholder_site_after_body--> 2925<!--/radix_placeholder_site_after_body--> 2926<!--radix_placeholder_appendices--> 2927<div class="appendix-bottom"> 2928<h3 id="updates-and-corrections">Corrections</h3> 2929<p>If you see mistakes or want to suggest changes, please <a href="https://github.com/eugene100hickey/fizzics/issues/new">create an issue</a> on the source repository.</p> 2930<h3 id="reuse">Reuse</h3> 2931<p>Text and figures are licensed under Creative Commons Attribution <a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Source code is available at <a href="https://github.com/eugene100hickey/fizzics">https://github.com/eugene100hickey/fizzics</a>, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".</p> 2932</div> 2933<!--/radix_placeholder_appendices--> 2934<!--radix_placeholder_navigation_after_body--> 2935<!--/radix_placeholder_navigation_after_body--> 2936 2937</body> 2938 2939</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.