<html><head> <meta charset="UTF-8"> <base href="$baseurl/$current_page" /> <meta http-equiv="Content-Security-Policy" content="$default_csp" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>$title</title> <link rel="alternate" type="application/rss+xml" title="RSS Feed" \ href="$home/timeline.rss" /> <link rel="stylesheet" href="$stylesheet_url" type="text/css" /> </head> <body class="$current_feature rpage-$requested_page cpage-$canonical_page"> <script nonce="$nonce"> if(window.localStorage && +window.localStorage.getItem('dark-mode')){ // do this early to try to lessen the effect of a FOUC when switching pages document.firstElementChild.classList.add('dark-mode'); } </script> <th1>set docBranch trunk if {[capexpr L]} { set docBranch ckout }</th1><style> @import url($<home>/doc/$<docBranch>/assets/fossil-doc.css) </style> <script src="$<home>/doc/$<docBranch>/assets/highlightjs/highlight-sqlite3.min.js"></script> <script nonce="$nonce"> window.addEventListener('DOMContentLoaded', function(){ "use strict"; /* Set up bright/dark mode toggle */ const eHtml = document.firstElementChild; const darkCssClass = 'dark-mode'; const ln = document.createElement('a'); ln.href = '#'; const localStorage = self.localStorage || self.sessionStorage || { setItem:()=>{}, getItem:()=>{} }; const updateThemeLink = function(doToggle=false){ if(doToggle) eHtml.classList.toggle(darkCssClass); const isDark = eHtml.classList.contains(darkCssClass); if(isDark) ln.innerText = "Bright Mode"; else ln.innerText = "Dark Mode"; localStorage.setItem(darkCssClass, isDark ? 1 : 0); }; updateThemeLink(); const eNavLinks = document.querySelector('nav#nav-links'); ln.addEventListener('click', (e)=>{ updateThemeLink(true); e.stopPropagation(); e.preventDefault(); return false; }, true); eNavLinks.appendChild(ln); if(document.body.classList.contains('doc')){ /* Init code specific to the /doc pages. */ const klassDSN = 'disable-section-numbers'; /** If the document has less than 2 H1 elements, disable section numbering. */ if(!document.body.classList.contains(klassDSN) && document.body.querySelectorAll('h1').length<2){ document.body.classList.add(klassDSN); } for(const klass of [ klassDSN ]) { /** For each CSS class name in this list, search for a SPAN element with that class. If found, delete the element and add that class name to the BODY element. These are used for CSS filters. */ const e = document.body.classList.contains(klass) ? false : document.body.querySelector('span.'+klass); if(e){ e.remove(); document.body.classList.add(klass); } } }/* body.doc-specific pieces */ }, true); </script><th1> if {"Documentation" eq "$title"} { # "Documentation" is the default title when /doc/...'ing non-document # files. Clear the title and we'll elide the corresponding H1 element # below. set title ""; # $current_page }</th1><header id='header-logo'> <a href='https://sqlite.org' class='nav-logo'><img src='$<home>/logo' alt='SQLite logo'/></a> <!-- maintenance reminder: ^^^^ use /logo instead of /doc/... or /raw/... to get cachable image, though cache time is relatively short. --> <span>WebAssembly & JavaScript</span> </header><nav class='mainmenu' id='nav-links'><th1> if {0} { # set the main menu contents using the /setup_config page set mainmenu { Home /doc/ckout/index.md L {} Home /doc/trunk/index.md !L {} {API Index} /doc/ckout/api-index.md L {} {API Index} /doc/trunk/api-index.md !L {} Timeline /timeline * {} Files /dir * {} Admin /setup {a s} {} Login /login !L {} Account /login L {} } } foreach {name url expr class} $mainmenu { if {![capexpr $expr]} continue if {[string match "/*" $url]} { if {[string match "/$current_page*" $url]} { set class "active $class" } set url $home$url } html "<a href='$url' class='$class'>$name</a>" } </th1></nav><th1> if { "x" ne "x$title" } { html "<h1>$title</h1>" }</th1>