Add asciinema support

This commit is contained in:
Jade Lovelace 2023-04-02 18:21:49 -07:00
parent 981b8ad067
commit 866fe408e4
9 changed files with 2930 additions and 12 deletions

View file

@ -0,0 +1,30 @@
{%- import "macros/colocated_asset.html" as colocated_asset -%}
{# Load an asciinema file and insert it into the page #}
{%- macro asciinema(path, colocated=false, preload=false) -%}
{%- set name = path | replace(from='.', to='-') | replace(from='/', to='-') -%}
{%- if not page.extra.use_asciinema -%}
{{ throw(message='Please set extra.use_asciinema in page front-matter') }}
{%- endif -%}
{%- if colocated == true -%}
{%- set path = colocated_asset::colocated_asset(path=path, get_url=true) | trim -%}
{%- endif -%}
<div id="asciinema-{{ name }}"></div>
<script>
(() => {
const script = document.getElementById('asciinema-player')
const el = document.getElementById('asciinema-{{ name }}')
const go = () => {
AsciinemaPlayer.create('{{ path | safe }}', el, {preload: {{ preload }} })
}
// the script could have already loaded
if (window.AsciinemaPlayer != null) {
go()
} else {
script.addEventListener('load', go)
}
})()
</script>
{%- endmacro asciinema -%}

View file

@ -1,10 +1,16 @@
<!--
Returns the file path of the colocated asset.
When Zola uses `resize_image` it looks relative to the `content` folder.
This means you have to reference the full page asset colocation path.
-->
{%- macro colocated_asset(path) -%}
{%- set page_url_components = page.relative_path | default(value=section.relative_path) | split(pat='/') -%}
{%- set page_base = page_url_components | slice(end=page_url_components | length - 1) | join(sep='/') -%}
{{ page_base ~ '/' ~ path }}
{#
Returns the file path of the colocated asset.
When Zola uses `resize_image` it looks relative to the `content` folder.
This means you have to reference the full page asset colocation path.
The get_url parameter specifies whether you want the URL or the file path.
#}
{%- macro colocated_asset(path, get_url=false) -%}
{%- if get_url -%}
{{ page.path ~ path }}
{%- else -%}
{%- set page_url_components = page.relative_path | default(value=section.relative_path) | split(pat='/') -%}
{%- set page_base = page_url_components | slice(end=page_url_components | length - 1) | join(sep='/') -%}
{{ page_base ~ '/' ~ path }}
{%- endif -%}
{%- endmacro colocated_asset -%}