1<!DOCTYPE html> 2<html xmlns="http://www.w3.org/1999/xhtml" lang="pt-BR" xml:lang="pt-BR"><head> 3 4<meta charset="utf-8"> 5<meta name="generator" content="quarto-1.7.30"> 6 7<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> 8 9<meta name="author" content="Ricardo Sodré Andrade"> 10<meta name="description" content="Ricardo Sodré Andrade â Arquivista, pesquisador e coordenador de projetos em Arquivologia, Humanidades Digitais e IA aplicada a arquivos"> 11 12<title>Sobre â Ricardo Sodré Andrade</title> 13<style> 14code{white-space: pre-wrap;} 15span.smallcaps{font-variant: small-caps;} 16div.columns{display: flex; gap: min(4vw, 1.5em);} 17div.column{flex: auto; overflow-x: auto;} 18div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} 19ul.task-list{list-style: none;} 20ul.task-list li input[type="checkbox"] { 21 width: 0.8em; 22 margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 23 vertical-align: middle; 24} 25</style> 26 27
28<script src="site_libs/quarto-nav/quarto-nav.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 28
28
29<script src="site_libs/quarto-nav/headroom.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 29
29
30<script src="site_libs/clipboard/clipboard.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 30
30
31<script src="site_libs/quarto-search/autocomplete.umd.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 31
31
32<script src="site_libs/quarto-search/fuse.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 32
32
33<script src="site_libs/quarto-search/quarto-search.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
33 34<meta name="quarto:offset" content="./"> 35<link href="./files/images/favicon.svg" rel="icon" type="image/svg+xml">
36<script src="site_libs/quarto-html/quarto.js" type="108c8082abfc27108d2e4514-module"></script>
vendor: 1 bytes, line 36
36
37<script src="site_libs/quarto-html/tabsets/tabsets.js" type="108c8082abfc27108d2e4514-module"></script>
vendor: 1 bytes, line 37
37
38<script src="site_libs/quarto-html/popper.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 38
38
39<script src="site_libs/quarto-html/tippy.umd.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 39
39
40<script src="site_libs/quarto-html/anchor.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
40 41<link href="site_libs/quarto-html/tippy.css" rel="stylesheet"> 42<link href="site_libs/quarto-html/quarto-syntax-highlighting-de070a7b0ab54f8780927367ac907214.css" rel="stylesheet" id="quarto-text-highlighting-styles">
43<script src="site_libs/bootstrap/bootstrap.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
43 44<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> 45<link href="site_libs/bootstrap/bootstrap-64d7a16b0ddfb989e2d46c79f25fe6d2.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
46<script id="quarto-search-options" type="application/json">{ 47 "location": "navbar", 48 "copy-button": false, 49 "collapse-after": 3, 50 "panel-placement": "end", 51 "type": "textbox", 52 "limit": 50, 53 "keyboard-shortcut": [ 54 "f", 55 "/", 56 "s" 57 ], 58 "language": { 59 "search-no-results-text": "Nenhum resultado", 60 "search-matching-documents-text": "documentos correspondentes", 61 "search-copy-link-title": "Copiar link para a busca", 62 "search-hide-matches-text": "Esconder correspondências adicionais", 63 "search-more-match-text": "mais correspondência neste documento", 64 "search-more-matches-text": "mais correspondências neste documento", 65 "search-clear-button-title": "Limpar", 66 "search-text-placeholder": "", 67 "search-detached-cancel-button-title": "Cancelar", 68 "search-submit-button-title": "Enviar", 69 "search-label": "Procurar" 70 } 71}</script>
71 72 73<!-- 74Load Academicons v1: https://jpswalsh.github.io/academicons/ 75--> 76<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/jpswalsh/academicons@1/css/academicons.min.css"> 77 78<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> 79 80 81<!--- 82The following code are needed to show dimension citation and altmetrics. 83https://api.altmetric.com/embeds.html 84https://badge.dimensions.ai/ 85---> 86
87<script type="108c8082abfc27108d2e4514-text/javascript" src="https://d1bxh8uas1mnw7.cloudfront.net/assets/embed.js"></script>
87 88
89<script async="" src="https://badge.dimensions.ai/badge.js" charset="utf-8" type="108c8082abfc27108d2e4514-text/javascript"></script>
89 90
91<script type="108c8082abfc27108d2e4514-text/javascript" src="//cdn.plu.mx/widget-popup.js"></script>
91 92 93 94<link rel="stylesheet" href="styles.css"> 95<meta property="og:title" content="Sobre â Ricardo Sodré Andrade"> 96<meta property="og:description" content="Ricardo Sodré Andrade, arquivista, pesquisador e coordenador de projetos em Arquivologia, Humanidades Digitais e IA aplicada a arquivos"> 97<meta property="og:image" content="https://feudo.org/files/images/foto.png"> 98<meta property="og:site_name" content="Ricardo Sodré Andrade"> 99<meta property="og:image:height" content="610"> 100<meta property="og:image:width" content="1000"> 101<meta name="twitter:title" content="Sobre â Ricardo Sodré Andrade"> 102<meta name="twitter:description" content="Ricardo Sodré Andrade, arquivista, pesquisador e coordenador de projetos em Arquivologia, Humanidades Digitais e IA aplicada a arquivos"> 103<meta name="twitter:image" content="https://feudo.org/files/images/foto.png"> 104<meta name="twitter:image-height" content="610"> 105<meta name="twitter:image-width" content="1000"> 106<meta name="twitter:card" content="summary_large_image"> 107</head> 108 109<body class="nav-fixed quarto-light"> 110 111<div id="quarto-search-results"></div> 112 <header id="quarto-header" class="headroom fixed-top"> 113 <nav class="navbar navbar-expand-lg " data-bs-theme="dark"> 114 <div class="navbar-container container-fluid"> 115 <div class="navbar-brand-container mx-auto"> 116 <a class="navbar-brand" href="./index.html"> 117 <span class="navbar-title">Ricardo Sodré Andrade</span> 118 </a> 119 </div> 120 <div id="quarto-search" class="" title="Procurar"></div> 121 <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Alternar de navegação" onclick="if (!window.__cfRLUnblockHandlers) return false; if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }" data-cf-modified-108c8082abfc27108d2e4514-=""> 122 <span class="navbar-toggler-icon"></span> 123</button> 124 <div class="collapse navbar-collapse" id="navbarCollapse"> 125 <ul class="navbar-nav navbar-nav-scroll me-auto"> 126 <li class="nav-item dropdown "> 127 <a class="nav-link dropdown-toggle" href="#" id="nav-menu-sobre" role="link" data-bs-toggle="dropdown" aria-expanded="false"> 128 <span class="menu-text">Sobre</span> 129 </a> 130 <ul class="dropdown-menu" aria-labelledby="nav-menu-sobre"> 131 <li> 132 <a class="dropdown-item" href="./sobre.html"> 133 <span class="dropdown-text">Bio</span></a> 134 </li> 135 <li> 136 <a class="dropdown-item" href="./contato.html"> 137 <span class="dropdown-text">Contato</span></a> 138 </li> 139 </ul> 140 </li> 141 <li class="nav-item"> 142 <a class="nav-link" href="./trajetoria.html"> 143<span class="menu-text">Trajetória</span></a> 144 </li> 145 <li class="nav-item dropdown "> 146 <a class="nav-link dropdown-toggle" href="#" id="nav-menu-pesquisa" role="link" data-bs-toggle="dropdown" aria-expanded="false"> 147 <span class="menu-text">Pesquisa</span> 148 </a> 149 <ul class="dropdown-menu" aria-labelledby="nav-menu-pesquisa"> 150 <li> 151 <a class="dropdown-item" href="./labhdufba.html"> 152 <span class="dropdown-text">LABHDUFBA</span></a> 153 </li> 154 <li> 155 <a class="dropdown-item" href="./grupos-anteriores.html"> 156 <span class="dropdown-text">Grupos de Pesquisa</span></a> 157 </li> 158 <li> 159 <a class="dropdown-item" href="./publicacoes.html"> 160 <span class="dropdown-text">Publicações</span></a> 161 </li> 162 <li> 163 <a class="dropdown-item" href="./apresentacoes.html"> 164 <span class="dropdown-text">Apresentações</span></a> 165 </li> 166 </ul> 167 </li> 168 <li class="nav-item dropdown "> 169 <a class="nav-link dropdown-toggle" href="#" id="nav-menu-desenvolvimento" role="link" data-bs-toggle="dropdown" aria-expanded="false"> 170 <span class="menu-text">Desenvolvimento</span> 171 </a> 172 <ul class="dropdown-menu" aria-labelledby="nav-menu-desenvolvimento"> 173 <li> 174 <a class="dropdown-item" href="./farinha.html"> 175 <span class="dropdown-text">Farinha</span></a> 176 </li> 177 <li> 178 <a class="dropdown-item" href="./archives-world-map.html"> 179 <span class="dropdown-text">Archives World Map</span></a> 180 </li> 181 <li> 182 <a class="dropdown-item" href="./inteligencia-artificial.html"> 183 <span class="dropdown-text">Inteligência Artificial</span></a> 184 </li> 185 </ul> 186 </li> 187 <li class="nav-item dropdown "> 188 <a class="nav-link dropdown-toggle" href="#" id="nav-menu-textos" role="link" data-bs-toggle="dropdown" aria-expanded="false"> 189 <span class="menu-text">Textos</span> 190 </a> 191 <ul class="dropdown-menu" aria-labelledby="nav-menu-textos"> 192 <li> 193 <a class="dropdown-item" href="./textos.html#category=medium"> 194 <span class="dropdown-text">Medium</span></a> 195 </li> 196 <li> 197 <a class="dropdown-item" href="./textos.html#category=arquivista-net"> 198 <span class="dropdown-text">ricardo.arquivista.net</span></a> 199 </li> 200 </ul> 201 </li> 202</ul> 203 <ul class="navbar-nav navbar-nav-scroll ms-auto"> 204 <li class="nav-item compact"> 205 <a class="nav-link" href="https://github.com/rsandrade" target="_blank"> <i class="bi bi-github" role="img"> 206</i> 207<span class="menu-text"></span></a> 208 </li>
209 <li class="nav-item compact"> 210 <a class="nav-link" href="https://www.linkedin.com/in/rsandrade/" target="_blank"> <i class="bi bi-linkedin" role="img"> 211</i> 212<span class="menu-text"></span></a> 213 </li> 214 <li class="nav-item compact"> 215 <a class="nav-link" href="https://instagram.com/todosaquelesarquivos" target="_blank"> <i class="bi bi-instagram" role="img"> 216</i> 217<span class="menu-text"></span></a> 218 </li> 219 <li class="nav-item compact"> 220 <a class="nav-link" href="./posts.xml" target="_blank"> <i class="bi bi-rss" role="img"> 221</i> 222<span class="menu-text"></span></a> 223 </li> 224</ul> 225 </div> <!-- /navcollapse --> 226 <div class="quarto-navbar-tools"> 227</div> 228 </div> <!-- /container-fluid --> 229 </nav> 230</header> 231<!-- content --> 232<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar"> 233<!-- sidebar --> 234<!-- margin-sidebar --> 235 <div id="quarto-margin-sidebar" class="sidebar margin-sidebar"> 236 <nav id="TOC" role="doc-toc" class="toc-active"> 237 <h2 id="toc-title">Nesta página</h2> 238 239 <ul> 240 <li><a href="#bio" id="toc-bio" class="nav-link active" data-scroll-target="#bio">Bio</a></li> 241 <li><a href="#habilidades-técnicas" id="toc-habilidades-técnicas" class="nav-link" data-scroll-target="#habilidades-técnicas">Habilidades Técnicas</a></li> 242 </ul> 243</nav> 244 </div> 245<!-- main --> 246<main class="content" id="quarto-document-content"> 247 248<header id="title-block-header" class="quarto-title-block default"> 249<div class="quarto-title"> 250<h1 class="title">Sobre</h1> 251</div> 252 253<div> 254 <div class="description"> 255 Ricardo Sodré Andrade, arquivista, pesquisador e coordenador de projetos em Arquivologia, Humanidades Digitais e IA aplicada a arquivos 256 </div> 257</div> 258 259 260<div class="quarto-title-meta"> 261 262 263 264 265 </div> 266 267 268 269</header> 270 271
272<script type="108c8082abfc27108d2e4514-text/javascript">document.body.dataset.i18nPageTitle='page-about-title';document.body.dataset.i18nPageDesc='page-about-desc';</script>
272 273<section id="bio" class="level2" data-i18n="about-bio-title"> 274<h2 class="anchored" data-anchor-id="bio">Bio</h2> 275</section> 276<div data-i18n-html="about-bio-p1"> 277<p>Mestre em Ciência da Informação e bacharel em Arquivologia pela Universidade Federal da Bahia (UFBA). Atualmente exerce o cargo de <strong>Chefe do Escritório Regional Nordeste (ERE-NE) do Arquivo Nacional</strong> (2025â) e é servidor da UFBA, onde atua como arquivista, estando cedido ao Arquivo Nacional. Coordena os projetos <strong><a href="https://farinha.info">Farinha</a></strong>, software livre para criação de plataformas de acesso a acervos permanentes e memoriais, e <strong><a href="https://arquivos.ufba.br">Arquivos da UFBA</a></strong>, plataforma de integração e acesso aos arquivos e coleções da Universidade Federal da Bahia.</p> 278</div> 279<div data-i18n-html="about-bio-p2"> 280<p>Possui trajetória voltada à gestão de acervos, ao tratamento técnico da informação arquivÃstica e ao desenvolvimento de iniciativas de acesso, difusão e inovação. Tem experiência em descrição arquivÃstica, representação da informação e desenvolvimento de plataformas digitais voltadas ao acesso a acervos, incluindo iniciativas com uso de inteligência artificial (agentes e RAG).</p> 281</div> 282<div data-i18n-html="about-bio-p3"> 283<p>Desde 2024, atua no <strong><a href="https://labhd.ufba.br">LABHDUFBA</a></strong> (Laboratório de Humanidades Digitais da UFBA). Foi coordenador do <strong>CRIDI</strong> (Grupo de Estudos sobre Cultura, Representação e Informação Digitais) entre 2019 e 2026, grupo do qual é membro desde 2008. Passou também pelos grupos de pesquisa GEPICC (2003â2008) e GEPINDI (2004â2007).</p> 284</div> 285<div data-i18n-html="about-bio-p4"> 286<p>Sua atuação percorre as interfaces entre Arquivologia, Humanidades Digitais, acesso à informação, cultura hacker, software livre e tecnologias aplicadas aos arquivos, com pesquisa aplicada em IA e acervos documentais. à radioamador (PU6RIC), de nacionalidade brasileira e portuguesa, e foi delegado eleito para a I CNARQ e delegado designado para a II CNARQ (Conferência Nacional de Arquivos).</p> 287</div> 288<section id="habilidades-técnicas" class="level2" data-i18n="about-skills-title"> 289<h2 class="anchored" data-anchor-id="habilidades-técnicas">Habilidades Técnicas</h2> 290</section> 291<ul> 292<li><span data-i18n="skill-1">Gestão de documentos e arquivos</span></li> 293<li><span data-i18n="skill-2">Descrição arquivÃstica e representação da informação</span></li> 294<li><span data-i18n="skill-3">Humanidades Digitais</span></li> 295<li><span data-i18n="skill-4">Inteligência Artificial aplicada a arquivos (agentes e RAG)</span></li> 296<li><span data-i18n="skill-5">Desenvolvimento de sistemas para gestão arquivÃstica</span></li> 297<li><span data-i18n="skill-6">Gestão na administração pública</span></li> 298<li><span data-i18n="skill-7">Coordenação de projetos tecnológicos</span></li> 299<li><span data-i18n="skill-8">Liderança técnica (Tech Lead)</span></li> 300<li><span data-i18n="skill-9">Administração de sistemas e infraestrutura digital</span></li> 301<li><span data-i18n="skill-10">Preservação digital</span></li> 302<li><span data-i18n="skill-11">Software Livre e Ciência Aberta</span></li> 303<li><span data-i18n="skill-12">Certificado EMPRETEC</span></li> 304</ul> 305 306 307 308</main> <!-- /main --> 309<!-- feudo.org i18n: language detection + selector --> 310<!-- All styles inline to guarantee they override Bootstrap/Quarto --> 311<!-- NOTE: Quarto navbar always has data-bs-theme="dark" so we style for dark navbar context --> 312<style> 313.lang-selector { 314 display: flex !important; 315 gap: 0.3rem !important; 316 align-items: center !important; 317 flex-shrink: 0 !important; 318 padding: 0 0.5rem !important; 319} 320.lang-selector .lang-btn { 321 background: #3a5068 !important; 322 border: 1px solid rgba(255,255,255,0.3) !important; 323 border-radius: 3px !important; 324 color: #fff !important; 325 font-size: 0.72rem !important; 326 font-weight: 700 !important; 327 padding: 0.3rem 0.55rem !important; 328 cursor: pointer !important; 329 transition: all 0.15s ease !important; 330 letter-spacing: 0.04em !important; 331 line-height: 1.3 !important; 332 white-space: nowrap !important; 333 text-decoration: none !important; 334 display: inline-block !important; 335 opacity: 1 !important; 336 visibility: visible !important; 337} 338.lang-selector .lang-btn:hover { 339 background: #4a6278 !important; 340 border-color: rgba(255,255,255,0.5) !important; 341 transform: translateY(-1px); 342 box-shadow: 0 2px 4px rgba(0,0,0,0.2) !important; 343} 344.lang-selector .lang-btn-active { 345 background: #c0392b !important; 346 border-color: transparent !important; 347 color: #fff !important; 348 font-weight: 800 !important; 349 box-shadow: 0 1px 3px rgba(192,57,43,0.4) !important; 350} 351@media (max-width: 991.98px) { 352 .lang-selector { padding: 0.5rem 0 !important; gap: 0.4rem !important; justify-content: center !important; width: 100% !important; border-top: 1px solid rgba(255,255,255,0.1); } 353 .lang-selector .lang-btn { padding: 0.4rem 0.8rem !important; font-size: 0.9rem !important; } 354 .navbar-collapse .navbar-nav.ms-auto { display: flex !important; flex-direction: row !important; gap: 0.25rem !important; justify-content: center !important; width: 100% !important; } 355 .navbar-collapse .navbar-nav.ms-auto .nav-item.compact { margin: 0 !important; padding: 0 !important; } 356} 357</style>
358<script src="https://feudo.org/i18n/i18n.js?v=6" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 358
358
359<script id="quarto-html-after-body" type="108c8082abfc27108d2e4514-application/javascript"> 360 window.document.addEventListener("DOMContentLoaded", function (event) { 361 const icon = "î§"; 362 const anchorJS = new window.AnchorJS(); 363 anchorJS.options = { 364 placement: 'right', 365 icon: icon 366 }; 367 anchorJS.add('.anchored'); 368 const isCodeAnnotation = (el) => { 369 for (const clz of el.classList) { 370 if (clz.startsWith('code-annotation-')) { 371 return true; 372 } 373 } 374 return false; 375 } 376 const onCopySuccess = function(e) { 377 // button target 378 const button = e.trigger; 379 // don't keep focus 380 button.blur(); 381 // flash "checked" 382 button.classList.add('code-copy-button-checked'); 383 var currentTitle = button.getAttribute("title"); 384 button.setAttribute("title", "Copiada"); 385 let tooltip; 386 if (window.bootstrap) { 387 button.setAttribute("data-bs-toggle", "tooltip"); 388 button.setAttribute("data-bs-placement", "left"); 389 button.setAttribute("data-bs-title", "Copiada"); 390 tooltip = new bootstrap.Tooltip(button, 391 { trigger: "manual", 392 customClass: "code-copy-button-tooltip", 393 offset: [0, -8]}); 394 tooltip.show(); 395 } 396 setTimeout(function() { 397 if (tooltip) { 398 tooltip.hide(); 399 button.removeAttribute("data-bs-title"); 400 button.removeAttribute("data-bs-toggle"); 401 button.removeAttribute("data-bs-placement"); 402 } 403 button.setAttribute("title", currentTitle); 404 button.classList.remove('code-copy-button-checked'); 405 }, 1000); 406 // clear code selection 407 e.clearSelection(); 408 } 409 const getTextToCopy = function(trigger) { 410 const codeEl = trigger.previousElementSibling.cloneNode(true); 411 for (const childEl of codeEl.children) { 412 if (isCodeAnnotation(childEl)) { 413 childEl.remove(); 414 } 415 } 416 return codeEl.innerText; 417 } 418 const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', { 419 text: getTextToCopy 420 }); 421 clipboard.on('success', onCopySuccess); 422 if (window.document.getElementById('quarto-embedded-source-code-modal')) { 423 const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', { 424 text: getTextToCopy, 425 container: window.document.getElementById('quarto-embedded-source-code-modal') 426 }); 427 clipboardModal.on('success', onCopySuccess); 428 } 429 var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//); 430 var mailtoRegex = new RegExp(/^mailto:/); 431 var filterRegex = new RegExp("https:\/\/feudo\.org"); 432 var isInternal = (href) => { 433 return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); 434 } 435 // Inspect non-navigation links and adorn them if external 436 var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)'); 437 for (var i=0; i<links.length; i++) { 438 const link = links[i]; 439 if (!isInternal(link.href)) { 440 // undo the damage that might have been done by quarto-nav.js in the case of 441 // links that we want to consider external 442 if (link.dataset.originalHref !== undefined) { 443 link.href = link.dataset.originalHref; 444 } 445 // target, if specified 446 link.setAttribute("target", "_blank"); 447 if (link.getAttribute("rel") === null) { 448 link.setAttribute("rel", "noopener"); 449 } 450 } 451 } 452 function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { 453 const config = { 454 allowHTML: true, 455 maxWidth: 500, 456 delay: 100, 457 arrow: false, 458 appendTo: function(el) { 459 return el.parentElement; 460 }, 461 interactive: true, 462 interactiveBorder: 10, 463 theme: 'quarto', 464 placement: 'bottom-start', 465 }; 466 if (contentFn) { 467 config.content = contentFn; 468 } 469 if (onTriggerFn) { 470 config.onTrigger = onTriggerFn; 471 } 472 if (onUntriggerFn) { 473 config.onUntrigger = onUntriggerFn; 474 } 475 window.tippy(el, config); 476 } 477 const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); 478 for (var i=0; i<noterefs.length; i++) { 479 const ref = noterefs[i]; 480 tippyHover(ref, function() { 481 // use id or data attribute instead here 482 let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); 483 try { href = new URL(href).hash; } catch {} 484 const id = href.replace(/^#\/?/, ""); 485 const note = window.document.getElementById(id); 486 if (note) { 487 return note.innerHTML; 488 } else { 489 return ""; 490 } 491 }); 492 } 493 const xrefs = window.document.querySelectorAll('a.quarto-xref'); 494 const processXRef = (id, note) => { 495 // Strip column container classes 496 const stripColumnClz = (el) => { 497 el.classList.remove("page-full", "page-columns"); 498 if (el.children) { 499 for (const child of el.children) {
500 stripColumnClz(child); 501 } 502 } 503 } 504 stripColumnClz(note) 505 if (id === null || id.startsWith('sec-')) { 506 // Special case sections, only their first couple elements 507 const container = document.createElement("div"); 508 if (note.children && note.children.length > 2) { 509 container.appendChild(note.children[0].cloneNode(true)); 510 for (let i = 1; i < note.children.length; i++) { 511 const child = note.children[i]; 512 if (child.tagName === "P" && child.innerText === "") { 513 continue; 514 } else { 515 container.appendChild(child.cloneNode(true)); 516 break; 517 } 518 } 519 if (window.Quarto?.typesetMath) { 520 window.Quarto.typesetMath(container); 521 } 522 return container.innerHTML 523 } else { 524 if (window.Quarto?.typesetMath) { 525 window.Quarto.typesetMath(note); 526 } 527 return note.innerHTML; 528 } 529 } else { 530 // Remove any anchor links if they are present 531 const anchorLink = note.querySelector('a.anchorjs-link'); 532 if (anchorLink) { 533 anchorLink.remove(); 534 } 535 if (window.Quarto?.typesetMath) { 536 window.Quarto.typesetMath(note); 537 } 538 if (note.classList.contains("callout")) { 539 return note.outerHTML; 540 } else { 541 return note.innerHTML; 542 } 543 } 544 } 545 for (var i=0; i<xrefs.length; i++) { 546 const xref = xrefs[i]; 547 tippyHover(xref, undefined, function(instance) { 548 instance.disable(); 549 let url = xref.getAttribute('href'); 550 let hash = undefined; 551 if (url.startsWith('#')) { 552 hash = url; 553 } else { 554 try { hash = new URL(url).hash; } catch {} 555 } 556 if (hash) { 557 const id = hash.replace(/^#\/?/, ""); 558 const note = window.document.getElementById(id); 559 if (note !== null) { 560 try { 561 const html = processXRef(id, note.cloneNode(true)); 562 instance.setContent(html); 563 } finally { 564 instance.enable(); 565 instance.show(); 566 } 567 } else { 568 // See if we can fetch this 569 fetch(url.split('#')[0]) 570 .then(res => res.text()) 571 .then(html => { 572 const parser = new DOMParser(); 573 const htmlDoc = parser.parseFromString(html, "text/html"); 574 const note = htmlDoc.getElementById(id); 575 if (note !== null) { 576 const html = processXRef(id, note); 577 instance.setContent(html); 578 } 579 }).finally(() => { 580 instance.enable(); 581 instance.show(); 582 }); 583 } 584 } else { 585 // See if we can fetch a full url (with no hash to target) 586 // This is a special case and we should probably do some content thinning / targeting 587 fetch(url) 588 .then(res => res.text()) 589 .then(html => { 590 const parser = new DOMParser(); 591 const htmlDoc = parser.parseFromString(html, "text/html"); 592 const note = htmlDoc.querySelector('main.content'); 593 if (note !== null) { 594 // This should only happen for chapter cross references 595 // (since there is no id in the URL) 596 // remove the first header 597 if (note.children.length > 0 && note.children[0].tagName === "HEADER") { 598 note.children[0].remove(); 599 } 600 const html = processXRef(null, note); 601 instance.setContent(html); 602 } 603 }).finally(() => { 604 instance.enable(); 605 instance.show(); 606 }); 607 } 608 }, function(instance) { 609 }); 610 } 611 let selectedAnnoteEl; 612 const selectorForAnnotation = ( cell, annotation) => { 613 let cellAttr = 'data-code-cell="' + cell + '"'; 614 let lineAttr = 'data-code-annotation="' + annotation + '"'; 615 const selector = 'span[' + cellAttr + '][' + lineAttr + ']'; 616 return selector; 617 } 618 const selectCodeLines = (annoteEl) => { 619 const doc = window.document; 620 const targetCell = annoteEl.getAttribute("data-target-cell"); 621 const targetAnnotation = annoteEl.getAttribute("data-target-annotation"); 622 const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); 623 const lines = annoteSpan.getAttribute("data-code-lines").split(","); 624 const lineIds = lines.map((line) => { 625 return targetCell + "-" + line; 626 }) 627 let top = null; 628 let height = null; 629 let parent = null; 630 if (lineIds.length > 0) { 631 //compute the position of the single el (top and bottom and make a div) 632 const el = window.document.getElementById(lineIds[0]); 633 top = el.offsetTop; 634 height = el.offsetHeight; 635 parent = el.parentElement.parentElement; 636 if (lineIds.length > 1) { 637 const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]); 638 const bottom = lastEl.offsetTop + lastEl.offsetHeight; 639 height = bottom - top; 640 } 641 if (top !== null && height !== null && parent !== null) { 642 // cook up a div (if necessary) and position it 643 let div = window.document.getElementById("code-annotation-line-highlight"); 644 if (div === null) { 645 div = window.document.createElement("div"); 646 div.setAttribute("id", "code-annotation-line-highlight"); 647 div.style.position = 'absolute'; 648 parent.appendChild(div); 649 } 650 div.style.top = top - 2 + "px"; 651 div.style.height = height + 4 + "px"; 652 div.style.left = 0; 653 let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter"); 654 if (gutterDiv === null) { 655 gutterDiv = window.document.createElement("div"); 656 gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter"); 657 gutterDiv.style.position = 'absolute'; 658 const codeCell = window.document.getElementById(targetCell); 659 const gutter = codeCell.querySelector('.code-annotation-gutter'); 660 gutter.appendChild(gutterDiv); 661 } 662 gutterDiv.style.top = top - 2 + "px"; 663 gutterDiv.style.height = height + 4 + "px"; 664 } 665 selectedAnnoteEl = annoteEl; 666 } 667 }; 668 const unselectCodeLines = () => { 669 const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"]; 670 elementsIds.forEach((elId) => { 671 const div = window.document.getElementById(elId); 672 if (div) { 673 div.remove(); 674 } 675 }); 676 selectedAnnoteEl = undefined; 677 }; 678 // Handle positioning of the toggle 679 window.addEventListener( 680 "resize", 681 throttle(() => { 682 elRect = undefined; 683 if (selectedAnnoteEl) { 684 selectCodeLines(selectedAnnoteEl); 685 } 686 }, 10) 687 ); 688 function throttle(fn, ms) { 689 let throttle = false;
690 let timer; 691 return (...args) => { 692 if(!throttle) { // first call gets through 693 fn.apply(this, args); 694 throttle = true; 695 } else { // all the others get throttled 696 if(timer) clearTimeout(timer); // cancel #2 697 timer = setTimeout(() => { 698 fn.apply(this, args); 699 timer = throttle = false; 700 }, ms); 701 } 702 }; 703 } 704 // Attach click handler to the DT 705 const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); 706 for (const annoteDlNode of annoteDls) { 707 annoteDlNode.addEventListener('click', (event) => { 708 const clickedEl = event.target; 709 if (clickedEl !== selectedAnnoteEl) { 710 unselectCodeLines(); 711 const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active'); 712 if (activeEl) { 713 activeEl.classList.remove('code-annotation-active'); 714 } 715 selectCodeLines(clickedEl); 716 clickedEl.classList.add('code-annotation-active'); 717 } else { 718 // Unselect the line 719 unselectCodeLines(); 720 clickedEl.classList.remove('code-annotation-active'); 721 } 722 }); 723 } 724 const findCites = (el) => { 725 const parentEl = el.parentElement; 726 if (parentEl) { 727 const cites = parentEl.dataset.cites; 728 if (cites) { 729 return { 730 el, 731 cites: cites.split(' ') 732 }; 733 } else { 734 return findCites(el.parentElement) 735 } 736 } else { 737 return undefined; 738 } 739 }; 740 var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); 741 for (var i=0; i<bibliorefs.length; i++) { 742 const ref = bibliorefs[i]; 743 const citeInfo = findCites(ref); 744 if (citeInfo) { 745 tippyHover(citeInfo.el, function() { 746 var popup = window.document.createElement('div'); 747 citeInfo.cites.forEach(function(cite) { 748 var citeDiv = window.document.createElement('div'); 749 citeDiv.classList.add('hanging-indent'); 750 citeDiv.classList.add('csl-entry'); 751 var biblioDiv = window.document.getElementById('ref-' + cite); 752 if (biblioDiv) { 753 citeDiv.innerHTML = biblioDiv.innerHTML; 754 } 755 popup.appendChild(citeDiv); 756 }); 757 return popup.innerHTML; 758 }); 759 } 760 } 761 }); 762 </script>
762 763</div> <!-- /content --> 764<footer class="footer"> 765 <div class="nav-footer"> 766 <div class="nav-footer-left"> 767Ricardo Sodré Andrade ©
768<script type="108c8082abfc27108d2e4514-text/javascript">document.write(new Date().getFullYear())</script>
768 769</div> 770 <div class="nav-footer-center"> 771<p>ConstruÃdo com <a href="https://quarto.org">Quarto</a> · Template <a href="https://github.com/drganghe/quarto-academic-website-template">Dr. Gang He</a></p> 772</div> 773 <div class="nav-footer-right"> 774 <ul class="footer-items list-unstyled"> 775 <li class="nav-item compact"> 776 <a class="nav-link" href="https://github.com/rsandrade" target="_blank"> 777 <i class="bi bi-github" role="img"> 778</i> 779 </a> 780 </li> 781 <li class="nav-item compact"> 782 <a class="nav-link" href="./posts.xml" target="_blank"> 783 <i class="bi bi-rss" role="img"> 784</i> 785 </a> 786 </li> 787</ul> 788 </div> 789 </div> 790</footer>
vendor: 147 bytes, lines 790-795
790 791 792 793 794 795<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="108c8082abfc27108d2e4514-|49" defer></script>
795</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.