Source code for sphinx_terminhtml.assets
import os
import tempfile
from pathlib import Path
import requests
from pydantic import BaseModel
from sphinx.application import Sphinx
from sphinx.util.fileutil import copy_asset
from terminhtml.main import TerminHTML, CommandResults
JS_BASE_URL = "https://unpkg.com/@terminhtml/bootstrap@1.x/dist/"
js_file_name = "@terminhtml-bootstrap.umd.js"
js_file_url = f"{JS_BASE_URL}{js_file_name}"
js_source_map_file_name = "@terminhtml-bootstrap.umd.js.map"
js_source_map_file_url = f"{JS_BASE_URL}{js_source_map_file_name}"
css_file_name = "ansi2html.css"
[docs]def download_and_copy_asset_files(app: Sphinx, exc):
if exc is not None:
# Build failed, don't copy assets
return
js_content = requests.get(js_file_url).text
js_source_map_content = requests.get(js_source_map_file_url).text
css_content = TerminHTML(command_results=CommandResults(results=[])).styles
with tempfile.TemporaryDirectory() as tmp_dir:
tmp_js_path = Path(tmp_dir) / js_file_name
tmp_js_path.write_text(js_content)
tmp_js_source_map_path = Path(tmp_dir) / js_source_map_file_name
tmp_js_source_map_path.write_text(js_source_map_content)
tmp_css_path = Path(tmp_dir) / css_file_name
tmp_css_path.write_text(css_content)
# Copy asset files
copy_asset(str(tmp_js_path), os.path.join(app.outdir, "_static"))
copy_asset(str(tmp_js_source_map_path), os.path.join(app.outdir, "_static"))
copy_asset(str(tmp_css_path), os.path.join(app.outdir, "_static"))
[docs]def register_assets(app: Sphinx):
app.connect("build-finished", download_and_copy_asset_files)
app.add_js_file(js_file_name)
app.add_js_file(js_source_map_file_name)
app.add_css_file(css_file_name)