typst-web-template/lib/states.typ
2026-06-17 22:12:31 +02:00

63 lines
2.2 KiB
Typst

// Pyscript
#let state-use-pyscript = state("state-use-pyscript", false)
#let state-pyscript-version = state("state-pyscript-version", none)
#let state-pyscript-data-list = state("state-pyscript-data-list", (:))
#let state-pyscript-interpreters = state("state-pyscript-interpreters", (:))
#let state-pyscript-default-interpreter = state("state-pyscript-default-interpreter", none)
#let state-pyscript-canvas-ids = state("state-pyscript-canvas-ids", ())
#let reset-pyscript-page-states() = {
state-use-pyscript.update(x => false)
state-pyscript-version.update(x => state-pyscript-version)
state-pyscript-data-list.update(x => (:))
state-pyscript-interpreters.update(x => (:))
state-pyscript-default-interpreter.update(x => none)
state-pyscript-canvas-ids.update(x => ())
}
// CSS / JS / misc tags
#let current-page-label = state("current-page-label", none)
#let css-list = state("css-list", ())
#let js-list = state("js-list", ())
#let additionnal-head-tags = state("additionnal-head-tags", ())
/// Add string `css` to `css-list` if not already present
#let add-css(css) = context {
css-list.update(x => if css in x { x } else { x + (css,) })
}
/// Add string `js` to `js-list` if not already present
#let add-js(js) = context {
js-list.update(x => if js in x { x } else { x + (js,) })
}
/// Add additionnal html tag to insert in <head>
#let add-tag-in-head(tag) = context {
additionnal-head-tags.update(x => if tag in x { x } else { x + (tag, ) })
}
/// Concatenate all css found in css-list at the end of the document
#let get-css(page-label) = context {
let end-page-label = label(str(page-label) + "-end")
if css-list.at(end-page-label) != () {
html.style(css-list.at(end-page-label).join("\n\n"))
} else {}
}
/// Concatenate all js found in js-list at the end of the document
#let get-js(page-label) = context {
let end-page-label = label(str(page-label) + "-end")
if js-list.at(end-page-label) != () {
html.script(js-list.at(end-page-label).join("\n\n"))
} else {}
}
#let reset-page-states() = {
current-page-label.update(x => none)
css-list.update(x => ())
js-list.update(x => ())
additionnal-head-tags.update(x => ())
reset-pyscript-page-states()
}