@@ -0,0 +1,615 @@
<!DOCTYPE html>
< html
xmlns = "http://www.w3.org/1999/xhtml"
lang = "de"
xml:lang = "de"
>
< head >
< meta charset = "utf-8" / >
< meta name = "generator" content = "quarto-99.9.9" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0, user-scalable=yes" / >
< title > Julia für Numerik – nb-types< / title > < style >
code { white-space : pre-wrap ; }
span . smallcaps { font-variant : small-caps ; }
div . columns { display : flex ; gap : min ( 4 vw , 1.5 em ) ; }
div . column { flex : auto ; overflow-x : auto ; }
div . hanging-indent { margin-left : 1.5 em ; text-indent : -1.5 em ; }
ul . task-list { list-style : none ; }
ul . task-list li input [ type = "checkbox" ] {
width : 0.8 em ;
margin : 0 0.8 em 0.2 em -1 em ; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align : middle ;
}
/* CSS for syntax highlighting */
pre > code . sourceCode { white-space : pre ; position : relative ; }
pre > code . sourceCode > span { display : inline-block ; line-height : 1.25 ; }
pre > code . sourceCode > span : empty { height : 1.2 em ; }
. sourceCode { overflow : visible ; }
code . sourceCode > span { color : inherit ; text-decoration : inherit ; }
div . sourceCode { margin : 1 em 0 ; }
pre . sourceCode { margin : 0 ; }
@ media screen {
div . sourceCode { overflow : auto ; }
}
@ media print {
pre > code . sourceCode { white-space : pre-wrap ; }
pre > code . sourceCode > span { text-indent : -5 em ; padding-left : 5 em ; }
}
pre . numberSource code
{ counter-reset : source-line 0 ; }
pre . numberSource code > span
{ position : relative ; left : -4 em ; counter-increment : source-line ; }
pre . numberSource code > span > a : first-child :: before
{ content : counter ( source - line ) ;
position : relative ; left : -1 em ; text-align : right ; vertical-align : baseline ;
border : none ; display : inline-block ;
-webkit- touch-callout : none ; -webkit- user-select : none ;
-khtml- user-select : none ; -moz- user-select : none ;
-ms- user-select : none ; user-select : none ;
padding : 0 4 px ; width : 4 em ;
}
pre . numberSource { margin-left : 3 em ; padding-left : 4 px ; }
div . sourceCode
{ }
@ media screen {
pre > code . sourceCode > span > a : first-child :: before { text-decoration : underline ; }
}
< / style >
< style >
. quarto-embed-header {
height : 3 em ;
width : 100 % ;
display : flex ;
justify-content : space-between ;
align-items : center ;
border-bottom : solid 1 px ;
}
. quarto-embed-header h6 {
font-size : 1 em ;
padding-top : 0.6 em ;
margin-left : 1 em ;
margin-right : 1 em ;
font-weight : 300 ;
}
. quarto-embed-header a . quarto-download-embed {
font-size : 0.7 em ;
margin-top : 1 em ;
margin-bottom : 1 em ;
margin-left : 1 em ;
margin-right : 1 em ;
}
< / style >
<!-- htmldependencies:E3FAD763 -->
< script id = "quarto-search-options" type = "application/json" > {
"language" : {
"search-no-results-text" : "Keine Treffer" ,
"search-matching-documents-text" : "Treffer" ,
"search-copy-link-title" : "Link in die Suche kopieren" ,
"search-hide-matches-text" : "Zusätzliche Treffer verbergen" ,
"search-more-match-text" : "weitere Treffer in diesem Dokument" ,
"search-more-matches-text" : "weitere Treffer in diesem Dokument" ,
"search-clear-button-title" : "Zurücksetzen" ,
"search-detached-cancel-button-title" : "Abbrechen" ,
"search-submit-button-title" : "Abschicken"
}
} < / script >
< link rel = "stylesheet" href = "../css/styles.css" / >
< / head >
< body >
< div class = "quarto-embed-header" >
< h6 > < i class = "bi bi-journal-code" > < / i > nb-types.ipynb< / h6 >
< a
href = "../images/nb-types.ipynb"
class = "btn btn-primary quarto-download-embed"
data-noresolveinput = "true"
download = "nb-types.ipynb"
> Download Notebook< / a
>
< / div >
< div id = "quarto-search-results" > < / div >
< header id = "quarto-header" class = "headroom fixed-top" >
< nav class = "quarto-secondary-nav" >
< div class = "container-fluid d-flex" >
< button type = "button" class = "quarto-btn-toggle btn"
data-bs-toggle = "collapse" data-bs-target = "#quarto-sidebar,#quarto-sidebar-glass"
aria-controls = "quarto-sidebar" aria-expanded = "false" aria-label = "Seitenleiste umschalten"
onclick = "if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }" >
< i class = "bi bi-layout-text-sidebar-reverse" > < / i >
< / button >
< h1 class = "quarto-secondary-nav-title" > < / h1 >
< a class = "flex-grow-1" role = "button" data-bs-toggle = "collapse" data-bs-target = "#quarto-sidebar,#quarto-sidebar-glass"
aria-controls = "quarto-sidebar" aria-expanded = "false" aria-label = "Seitenleiste umschalten"
onclick = "if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }" >
< / a >
< / div >
< / nav >
< / header >
<!-- content -->
< div id = "quarto-content" class = "quarto-container page-columns page-rows-contents page-layout-article" >
<!-- sidebar -->
< nav id = "quarto-sidebar" class = "sidebar collapse collapse-horizontal sidebar-navigation floating overflow-auto" >
< div class = "pt-lg-2 mt-2 text-left sidebar-header sidebar-header-stacked" >
< a href = "/index.html" class = "sidebar-logo-link" >
< img src = "/images/julia-logo-color.svg" alt = "" class = "sidebar-logo py-0 d-lg-inline d-none" / >
< / a >
< div class = "sidebar-title mb-0 py-0" >
< a href = "/" >
Julia für Numerik
< / a >
< div class = "sidebar-tools-main tools-wide" >
< a href = "/Julia-f%C3%BCr-Numerik.pdf" title = "" class = "quarto-navigation-tool px-1" aria-label = "" > < i class = "bi bi-download" > < / i > < / a >
< a href = "/Julia-für-Numerik.pdf" title = "Download PDF" class = "quarto-navigation-tool px-1" aria-label = "Download PDF" > < i class = "bi bi-file-pdf" > < / i > < / a >
< a href = "" class = "quarto-color-scheme-toggle quarto-navigation-tool px-1" onclick = "window.quartoToggleColorScheme(); return false;" title = "Dunkelmodus umschalten" > < i class = "bi" > < / i > < / a >
< / div >
< / div >
< / div >
< div class = "sidebar-menu-container" >
< ul class = "list-unstyled mt-1" >
< li class = "sidebar-item" >
< div class = "sidebar-item-container" >
< a href = "/index.html" class = "sidebar-item-text sidebar-link" >
< span class = "menu-text" > Was ist Julia?< / span > < / a >
< / div >
< / li >
< li class = "sidebar-item" >
< div class = "sidebar-item-container" >
< a href = "/chapters/types.html" class = "sidebar-item-text sidebar-link" >
< span class = "menu-text" > < span class=' chapter-number' > 1< /span> < span class=' chapter-title' > Das Typsystem von Julia< /span> < / span > < / a >
< / div >
< / li >
< / ul >
< / div >
< / nav >
< div id = "quarto-sidebar-glass" data-bs-toggle = "collapse" data-bs-target = "#quarto-sidebar,#quarto-sidebar-glass" > < / div >
<!-- margin - sidebar -->
< div id = "quarto-margin-sidebar" class = "sidebar margin-sidebar" >
< div id = "quarto-toc-target" > < / div >
< / div >
<!-- main -->
< main class = "content" id = "quarto-document-content" > < div id = "nb1" class = "cell" data-execution_count = "1" >
< div class = "sourceCode" id = "cb1" > < pre class = "sourceCode julia cell-code" > < code class = "sourceCode julia" > < span id = "cb1-1" > < a href = "#cb1-1" aria-hidden = "true" tabindex = "-1" > < / a > < span class = "kw" > function< / span > < span class = "fu" > show_subtype_tree< / span > (T, i< span class = "op" > =< / span > < span class = "fl" > 0< / span > )< / span >
< span id = "cb1-2" > < a href = "#cb1-2" aria-hidden = "true" tabindex = "-1" > < / a > < span class = "fu" > println< / span > (< span class = "st" > " " < / span > < span class = "op" > ^< / span > i, T)< / span >
< span id = "cb1-3" > < a href = "#cb1-3" aria-hidden = "true" tabindex = "-1" > < / a > < span class = "cf" > for< / span > Ts < span class = "op" > ∈< / span > < span class = "fu" > subtypes< / span > (T)< / span >
< span id = "cb1-4" > < a href = "#cb1-4" aria-hidden = "true" tabindex = "-1" > < / a > < span class = "fu" > show_subtype_tree< / span > (Ts, i< span class = "op" > +< / span > < span class = "fl" > 1< / span > )< / span >
< span id = "cb1-5" > < a href = "#cb1-5" aria-hidden = "true" tabindex = "-1" > < / a > < span class = "cf" > end< / span > < / span >
< span id = "cb1-6" > < a href = "#cb1-6" aria-hidden = "true" tabindex = "-1" > < / a > < span class = "kw" > end< / span > < / span >
< span id = "cb1-7" > < a href = "#cb1-7" aria-hidden = "true" tabindex = "-1" > < / a > < / span >
< span id = "cb1-8" > < a href = "#cb1-8" aria-hidden = "true" tabindex = "-1" > < / a > < span class = "fu" > show_subtype_tree< / span > (< span class = "dt" > Number< / span > )< / span > < / code > < / pre > < / div >
< div class = "cell-output cell-output-stdout" >
< pre class = "" > < code class = " ansi" > Number
Complex
Real
AbstractFloat
BigFloat
Float16
Float32
Float64
AbstractIrrational
Irrational
Integer
Bool
Signed
BigInt
Int128
Int16
Int32
Int64
Int8
Unsigned
UInt128
UInt16
UInt32
UInt64
UInt8
Rational< / code > < / pre >
< / div >
< / div >
< div id = "nb2" class = "cell" data-execution_count = "2" >
< div class = "sourceCode" id = "cb2" > < pre class = "sourceCode julia cell-code" > < code class = "sourceCode julia" > < span id = "cb2-1" > < a href = "#cb2-1" aria-hidden = "true" tabindex = "-1" > < / a > < span class = "im" > using< / span > < span class = "bu" > AbstractTrees< / span > < / span >
< span id = "cb2-2" > < a href = "#cb2-2" aria-hidden = "true" tabindex = "-1" > < / a > < / span >
< span id = "cb2-3" > < a href = "#cb2-3" aria-hidden = "true" tabindex = "-1" > < / a > AbstractTrees.< span class = "fu" > children< / span > (x< span class = "op" > ::< / span > < span class = "dt" > Type< / span > ) < span class = "op" > =< / span > < span class = "fu" > subtypes< / span > (x)< / span >
< span id = "cb2-4" > < a href = "#cb2-4" aria-hidden = "true" tabindex = "-1" > < / a > < span class = "fu" > print_tree< / span > (< span class = "dt" > Number< / span > )< / span > < / code > < / pre > < / div >
< div class = "cell-output cell-output-stdout" >
< pre class = "" > < code class = " ansi" > Number
├─ Complex
└─ Real
├─ AbstractFloat
│ ├─ BigFloat
│ ├─ Float16
│ ├─ Float32
│ └─ Float64
├─ AbstractIrrational
│ └─ Irrational
├─ Integer
│ ├─ Bool
│ ├─ Signed
│ │ ├─ BigInt
│ │ ├─ Int128
│ │ ├─ Int16
│ │ ├─ Int32
│ │ ├─ Int64
│ │ └─ Int8
│ └─ Unsigned
│ ├─ UInt128
│ ├─ UInt16
│ ├─ UInt32
│ ├─ UInt64
│ └─ UInt8
└─ Rational< / code > < / pre >
< / div >
< / div >
< div id = "quarto-navigation-envelope" class = "hidden" >
< p > < span class = "hidden" data-render-id = "quarto-int-sidebar-title" > Julia für Numerik< / span > < span class = "hidden" data-render-id = "quarto-int-navbar-title" > Julia für Numerik< / span > < span class = "hidden" data-render-id = "quarto-int-sidebar:/index.html" > Was ist Julia?< / span > < span class = "hidden" data-render-id = "quarto-int-sidebar:/chapters/types.html" > < span class = "chapter-number" > 1< / span > < span class = "chapter-title" > Das Typsystem von Julia< / span > < / span > < span class = "hidden" data-render-id = "footer-left" > All content licenced under < a href = "https://creativecommons.org/licenses/by-nc-sa/4.0/" > CC BY-NC-SA 4.0< / a > .< / span > < span class = "hidden" data-render-id = "footer-right" > Created with < a href = "https://quarto.org/" > Quarto< / a > < br / >
< / span > < / p >
< / div >
< div id = "quarto-meta-markdown" class = "hidden" >
< p > < span class = "hidden" data-render-id = "quarto-twittercardtitle" > < / span > < span class = "hidden" data-render-id = "quarto-ogcardtitle" > < / span > < span class = "hidden" data-render-id = "quarto-metasitename" > Julia für Numerik< / span > < span class = "hidden" data-render-id = "quarto-twittercarddesc" > < / span > < span class = "hidden" data-render-id = "quarto-ogcardddesc" > < / span > < / p >
< / div >
< / main > <!-- /main --> < script id = "quarto-html-after-body" type = "application/javascript" >
window . document . addEventListener ( "DOMContentLoaded" , function ( event ) {
const toggleBodyColorMode = ( bsSheetEl ) => {
const mode = bsSheetEl . getAttribute ( "data-mode" ) ;
const bodyEl = window . document . querySelector ( "body" ) ;
if ( mode === "dark" ) {
bodyEl . classList . add ( "quarto-dark" ) ;
bodyEl . classList . remove ( "quarto-light" ) ;
} else {
bodyEl . classList . add ( "quarto-light" ) ;
bodyEl . classList . remove ( "quarto-dark" ) ;
}
}
const toggleBodyColorPrimary = ( ) => {
const bsSheetEl = window . document . querySelector ( "link#quarto-bootstrap" ) ;
if ( bsSheetEl ) {
toggleBodyColorMode ( bsSheetEl ) ;
}
}
toggleBodyColorPrimary ( ) ;
const disableStylesheet = ( stylesheets ) => {
for ( let i = 0 ; i < stylesheets . length ; i ++ ) {
const stylesheet = stylesheets [ i ] ;
stylesheet . rel = 'prefetch' ;
}
}
const enableStylesheet = ( stylesheets ) => {
for ( let i = 0 ; i < stylesheets . length ; i ++ ) {
const stylesheet = stylesheets [ i ] ;
stylesheet . rel = 'stylesheet' ;
}
}
const manageTransitions = ( selector , allowTransitions ) => {
const els = window . document . querySelectorAll ( selector ) ;
for ( let i = 0 ; i < els . length ; i ++ ) {
const el = els [ i ] ;
if ( allowTransitions ) {
el . classList . remove ( 'notransition' ) ;
} else {
el . classList . add ( 'notransition' ) ;
}
}
}
const toggleColorMode = ( alternate ) => {
// Switch the stylesheets
const alternateStylesheets = window . document . querySelectorAll ( 'link.quarto-color-scheme.quarto-color-alternate' ) ;
manageTransitions ( '#quarto-margin-sidebar .nav-link' , false ) ;
if ( alternate ) {
enableStylesheet ( alternateStylesheets ) ;
for ( const sheetNode of alternateStylesheets ) {
if ( sheetNode . id === "quarto-bootstrap" ) {
toggleBodyColorMode ( sheetNode ) ;
}
}
} else {
disableStylesheet ( alternateStylesheets ) ;
toggleBodyColorPrimary ( ) ;
}
manageTransitions ( '#quarto-margin-sidebar .nav-link' , true ) ;
// Switch the toggles
const toggles = window . document . querySelectorAll ( '.quarto-color-scheme-toggle' ) ;
for ( let i = 0 ; i < toggles . length ; i ++ ) {
const toggle = toggles [ i ] ;
if ( toggle ) {
if ( alternate ) {
toggle . classList . add ( "alternate" ) ;
} else {
toggle . classList . remove ( "alternate" ) ;
}
}
}
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if ( navigator . userAgent . indexOf ( 'Safari' ) > 0 && navigator . userAgent . indexOf ( 'Chrome' ) == - 1 ) {
manageTransitions ( "body" , false ) ;
window . scrollTo ( 0 , 1 ) ;
setTimeout ( ( ) => {
window . scrollTo ( 0 , 0 ) ;
manageTransitions ( "body" , true ) ;
} , 40 ) ;
}
}
const isFileUrl = ( ) => {
return window . location . protocol === 'file:' ;
}
const hasAlternateSentinel = ( ) => {
let styleSentinel = getColorSchemeSentinel ( ) ;
if ( styleSentinel !== null ) {
return styleSentinel === "alternate" ;
} else {
return false ;
}
}
const setStyleSentinel = ( alternate ) => {
const value = alternate ? "alternate" : "default" ;
if ( ! isFileUrl ( ) ) {
window . localStorage . setItem ( "quarto-color-scheme" , value ) ;
} else {
localAlternateSentinel = value ;
}
}
const getColorSchemeSentinel = ( ) => {
if ( ! isFileUrl ( ) ) {
const storageValue = window . localStorage . getItem ( "quarto-color-scheme" ) ;
return storageValue != null ? storageValue : localAlternateSentinel ;
} else {
return localAlternateSentinel ;
}
}
let localAlternateSentinel = 'default' ;
// Dark / light mode switch
window . quartoToggleColorScheme = ( ) => {
// Read the current dark / light value
let toAlternate = ! hasAlternateSentinel ( ) ;
toggleColorMode ( toAlternate ) ;
setStyleSentinel ( toAlternate ) ;
} ;
// Ensure there is a toggle, if there isn't float one in the top right
if ( window . document . querySelector ( '.quarto-color-scheme-toggle' ) === null ) {
const a = window . document . createElement ( 'a' ) ;
a . classList . add ( 'top-right' ) ;
a . classList . add ( 'quarto-color-scheme-toggle' ) ;
a . href = "" ;
a . onclick = function ( ) { try { window . quartoToggleColorScheme ( ) ; } catch { } return false ; } ;
const i = window . document . createElement ( "i" ) ;
i . classList . add ( 'bi' ) ;
a . appendChild ( i ) ;
window . document . body . appendChild ( a ) ;
}
// Switch to dark mode if need be
if ( hasAlternateSentinel ( ) ) {
toggleColorMode ( true ) ;
} else {
toggleColorMode ( false ) ;
}
const icon = "" ;
const anchorJS = new window . AnchorJS ( ) ;
anchorJS . options = {
placement : 'right' ,
icon : icon
} ;
anchorJS . add ( '.anchored' ) ;
const isCodeAnnotation = ( el ) => {
for ( const clz of el . classList ) {
if ( clz . startsWith ( 'code-annotation-' ) ) {
return true ;
}
}
return false ;
}
const clipboard = new window . ClipboardJS ( '.code-copy-button' , {
text : function ( trigger ) {
const codeEl = trigger . previousElementSibling . cloneNode ( true ) ;
for ( const childEl of codeEl . children ) {
if ( isCodeAnnotation ( childEl ) ) {
childEl . remove ( ) ;
}
}
return codeEl . innerText ;
}
} ) ;
clipboard . on ( 'success' , function ( e ) {
// button target
const button = e . trigger ;
// don't keep focus
button . blur ( ) ;
// flash "checked"
button . classList . add ( 'code-copy-button-checked' ) ;
var currentTitle = button . getAttribute ( "title" ) ;
button . setAttribute ( "title" , "Kopiert" ) ;
let tooltip ;
if ( window . bootstrap ) {
button . setAttribute ( "data-bs-toggle" , "tooltip" ) ;
button . setAttribute ( "data-bs-placement" , "left" ) ;
button . setAttribute ( "data-bs-title" , "Kopiert" ) ;
tooltip = new bootstrap . Tooltip ( button ,
{ trigger : "manual" ,
customClass : "code-copy-button-tooltip" ,
offset : [ 0 , - 8 ] } ) ;
tooltip . show ( ) ;
}
setTimeout ( function ( ) {
if ( tooltip ) {
tooltip . hide ( ) ;
button . removeAttribute ( "data-bs-title" ) ;
button . removeAttribute ( "data-bs-toggle" ) ;
button . removeAttribute ( "data-bs-placement" ) ;
}
button . setAttribute ( "title" , currentTitle ) ;
button . classList . remove ( 'code-copy-button-checked' ) ;
} , 1000 ) ;
// clear code selection
e . clearSelection ( ) ;
} ) ;
function tippyHover ( el , contentFn ) {
const config = {
allowHTML : true ,
content : contentFn ,
maxWidth : 500 ,
delay : 100 ,
arrow : false ,
appendTo : function ( el ) {
return el . parentElement ;
} ,
interactive : true ,
interactiveBorder : 10 ,
theme : 'quarto' ,
placement : 'bottom-start'
} ;
window . tippy ( el , config ) ;
}
const noterefs = window . document . querySelectorAll ( 'a[role="doc-noteref"]' ) ;
for ( var i = 0 ; i < noterefs . length ; i ++ ) {
const ref = noterefs [ i ] ;
tippyHover ( ref , function ( ) {
// use id or data attribute instead here
let href = ref . getAttribute ( 'data-footnote-href' ) || ref . getAttribute ( 'href' ) ;
try { href = new URL ( href ) . hash ; } catch { }
const id = href . replace ( /^#\/?/ , "" ) ;
const note = window . document . getElementById ( id ) ;
return note . innerHTML ;
} ) ;
}
let selectedAnnoteEl ;
const selectorForAnnotation = ( cell , annotation ) => {
let cellAttr = 'data-code-cell="' + cell + '"' ;
let lineAttr = 'data-code-annotation="' + annotation + '"' ;
const selector = 'span[' + cellAttr + '][' + lineAttr + ']' ;
return selector ;
}
const selectCodeLines = ( annoteEl ) => {
const doc = window . document ;
const targetCell = annoteEl . getAttribute ( "data-target-cell" ) ;
const targetAnnotation = annoteEl . getAttribute ( "data-target-annotation" ) ;
const annoteSpan = window . document . querySelector ( selectorForAnnotation ( targetCell , targetAnnotation ) ) ;
const lines = annoteSpan . getAttribute ( "data-code-lines" ) . split ( "," ) ;
const lineIds = lines . map ( ( line ) => {
return targetCell + "-" + line ;
} )
let top = null ;
let height = null ;
let parent = null ;
if ( lineIds . length > 0 ) {
//compute the position of the single el (top and bottom and make a div)
const el = window . document . getElementById ( lineIds [ 0 ] ) ;
top = el . offsetTop ;
height = el . offsetHeight ;
parent = el . parentElement . parentElement ;
if ( lineIds . length > 1 ) {
const lastEl = window . document . getElementById ( lineIds [ lineIds . length - 1 ] ) ;
const bottom = lastEl . offsetTop + lastEl . offsetHeight ;
height = bottom - top ;
}
if ( top !== null && height !== null && parent !== null ) {
// cook up a div (if necessary) and position it
let div = window . document . getElementById ( "code-annotation-line-highlight" ) ;
if ( div === null ) {
div = window . document . createElement ( "div" ) ;
div . setAttribute ( "id" , "code-annotation-line-highlight" ) ;
div . style . position = 'absolute' ;
parent . appendChild ( div ) ;
}
div . style . top = top - 2 + "px" ;
div . style . height = height + 4 + "px" ;
let gutterDiv = window . document . getElementById ( "code-annotation-line-highlight-gutter" ) ;
if ( gutterDiv === null ) {
gutterDiv = window . document . createElement ( "div" ) ;
gutterDiv . setAttribute ( "id" , "code-annotation-line-highlight-gutter" ) ;
gutterDiv . style . position = 'absolute' ;
const codeCell = window . document . getElementById ( targetCell ) ;
const gutter = codeCell . querySelector ( '.code-annotation-gutter' ) ;
gutter . appendChild ( gutterDiv ) ;
}
gutterDiv . style . top = top - 2 + "px" ;
gutterDiv . style . height = height + 4 + "px" ;
}
selectedAnnoteEl = annoteEl ;
}
} ;
const unselectCodeLines = ( ) => {
const elementsIds = [ "code-annotation-line-highlight" , "code-annotation-line-highlight-gutter" ] ;
elementsIds . forEach ( ( elId ) => {
const div = window . document . getElementById ( elId ) ;
if ( div ) {
div . remove ( ) ;
}
} ) ;
selectedAnnoteEl = undefined ;
} ;
// Attach click handler to the DT
const annoteDls = window . document . querySelectorAll ( 'dt[data-target-cell]' ) ;
for ( const annoteDlNode of annoteDls ) {
annoteDlNode . addEventListener ( 'click' , ( event ) => {
const clickedEl = event . target ;
if ( clickedEl !== selectedAnnoteEl ) {
unselectCodeLines ( ) ;
const activeEl = window . document . querySelector ( 'dt[data-target-cell].code-annotation-active' ) ;
if ( activeEl ) {
activeEl . classList . remove ( 'code-annotation-active' ) ;
}
selectCodeLines ( clickedEl ) ;
clickedEl . classList . add ( 'code-annotation-active' ) ;
} else {
// Unselect the line
unselectCodeLines ( ) ;
clickedEl . classList . remove ( 'code-annotation-active' ) ;
}
} ) ;
}
const findCites = ( el ) => {
const parentEl = el . parentElement ;
if ( parentEl ) {
const cites = parentEl . dataset . cites ;
if ( cites ) {
return {
el ,
cites : cites . split ( ' ' )
} ;
} else {
return findCites ( el . parentElement )
}
} else {
return undefined ;
}
} ;
var bibliorefs = window . document . querySelectorAll ( 'a[role="doc-biblioref"]' ) ;
for ( var i = 0 ; i < bibliorefs . length ; i ++ ) {
const ref = bibliorefs [ i ] ;
const citeInfo = findCites ( ref ) ;
if ( citeInfo ) {
tippyHover ( citeInfo . el , function ( ) {
var popup = window . document . createElement ( 'div' ) ;
citeInfo . cites . forEach ( function ( cite ) {
var citeDiv = window . document . createElement ( 'div' ) ;
citeDiv . classList . add ( 'hanging-indent' ) ;
citeDiv . classList . add ( 'csl-entry' ) ;
var biblioDiv = window . document . getElementById ( 'ref-' + cite ) ;
if ( biblioDiv ) {
citeDiv . innerHTML = biblioDiv . innerHTML ;
}
popup . appendChild ( citeDiv ) ;
} ) ;
return popup . innerHTML ;
} ) ;
}
}
} ) ;
< / script > < / div > <!-- /content -->
< footer class = "footer" >
< div class = "nav-footer" >
< div class = "nav-footer-left" >
< div class = 'footer-contents' > All content licenced under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/).
< / div >
< / div >
< div class = "nav-footer-center" >
< / div >
< div class = "nav-footer-right" >
< div class = 'footer-contents' > Created with [Quarto](https://quarto.org/)
< / div >
< / div >
< / div >
< / footer >
< / body >
< / html >