From 7fce46d22aa073feb92e0de50bae0f73917d3fa1 Mon Sep 17 00:00:00 2001 From: Tom Date: Sun, 16 Feb 2025 18:26:20 +0000 Subject: [PATCH] Squashed commit of the following: commit ddd4a9145fb903eba795f3dea9402268a099e651 Author: Tom Date: Sun Feb 16 18:26:06 2025 +0000 Make executable code snippets post --- ...in-docs-and-html-object-representations.md | 99 ++++++++++++++++++ _sass/base.scss | 53 +++++++--- _sass/code_style_github.scss | 38 +++++-- .../thumbnail.png | Bin 0 -> 26419 bytes 4 files changed, 165 insertions(+), 25 deletions(-) create mode 100644 _posts/2025-02-16-executable-code-snippets-in-docs-and-html-object-representations.md create mode 100644 assets/blog/executable-code-snippets-in-docs-and-html-object-representations/thumbnail.png diff --git a/_posts/2025-02-16-executable-code-snippets-in-docs-and-html-object-representations.md b/_posts/2025-02-16-executable-code-snippets-in-docs-and-html-object-representations.md new file mode 100644 index 0000000..4590568 --- /dev/null +++ b/_posts/2025-02-16-executable-code-snippets-in-docs-and-html-object-representations.md @@ -0,0 +1,99 @@ +--- +title: Executable code snippets in docs and HTML object representations +layout: post +excerpt: "It just looks so nice." + +assets: /assets/blog/executable-code-snippets-in-docs-and-html-object-representations +thumbnail: /assets/blog/executable-code-snippets-in-docs-and-html-object-representations/thumbnail.png +social_image: /assets/blog/executable-code-snippets-in-docs-and-html-object-representations/thumbnail.png +alt: +image_class: invertable + + +--- + +Just a quick one. Lately I've started writing the documention for [a new software project involving trees](https://qubed.readthedocs.io). + +While debugging that in a Jupyter notebook I made a small HTML representation of the tree that mimis the output of `tree` but using the HTML details tag so you can open and close the subtrees. + +This works using by giving the object a "_repr_html_" method that returns a HTML string. If it's present, Jupyter notebooks will use the output of that instead of `repr` to display a rich version of the object in a notebook. + +```python +class Title(): + def __init__(self, x): + self.x = x + def _repr_html_(self): + return f"

{self.x}

" +``` + +I then set up executable code snippets in these docs so I could give code examples and not have to paste the output in myself. I'm using MyST-NB in sphinx to do this, it gives you a nicely syntax highlighted code block along with the output evaluated against the actual code. Since the NB in Myst-NB stands for notebook, it's perhaps not so surprising that the HTML inline output also works! + +The overall effect looks a bit like the below but see it [in place](https://qubed.readthedocs.io) for a better idea of how it looks with proper CSS. + +```python +from qubed import Qube + +q = Qube.from_dict({ + "class=od" : { + "expver=0001": {"param=1":{}, "param=2":{}}, + "expver=0002": {"param=1":{}, "param=2":{}}, + }, + "class=rd" : { + "expver=0001": {"param=1":{}, "param=2":{}, "param=3":{}}, + "expver=0002": {"param=1":{}, "param=2":{}}, + }, +}) + +# depth controls how much of the tree is open when rendered as html. +q.html(depth=100) +``` +
+ +
root
├── class=od
│ ├── expver=0001│ │ ├── param=1│ │ └── param=2
│ └── expver=0002│ ├── param=1│ └── param=2
└── class=rd
├── expver=0001 │ ├── param=1 │ ├── param=2 │ └── param=3
└── expver=0002 ├── param=1 └── param=2
+ \ No newline at end of file diff --git a/_sass/base.scss b/_sass/base.scss index fc2b938..ad650ff 100644 --- a/_sass/base.scss +++ b/_sass/base.scss @@ -32,6 +32,7 @@ --theme-model-line-color: #222; --theme-model-bg-color: #fcfcfc; --theme-subtle-outline: oklch(90% 0 50); + --theme-subtle-background: rgba(128, 128, 128, 0.05); --theme-highlight-color: hsl(338, 75%, 60%); --theme-highlight-color-transparent: hsla(338, 75%, 60%, 33%); --theme-subtle-text-color: #606984; @@ -291,23 +292,42 @@ section.center { margin-bottom: 1em; } -div.CodeRay, -.wide-outside-parent { - // width: 100vw; - position: relative; - width: calc( - 100vw - var(--body-margin) - var(--main-margin-left) - - var(--main-padding-left) - var(--main-padding-right) - ); - pre { - white-space: pre-wrap; +div.CodeRay { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, + Courier New, Courier, monospace; + font-size: 12px; + line-height: 1.4; + padding: 1em; + background-color: var(--theme-subtle-background); + border-radius: 5px; + + // Override background colors from the theme. + span { + background-color: unset !important; } - .line-numbers { - // display: none; - margin-right: 1em; - opacity: 0.3; - a { - text-decoration: none; + + pre { + text-wrap: auto; + margin: 0; + } + + .wide-outside-parent { + // width: 100vw; + position: relative; + width: calc( + 100vw - var(--body-margin) - var(--main-margin-left) - + var(--main-padding-left) - var(--main-padding-right) + ); + pre { + white-space: pre-wrap; + } + .line-numbers { + // display: none; + margin-right: 1em; + opacity: 0.3; + a { + text-decoration: none; + } } } } @@ -389,6 +409,7 @@ svg { --theme-text-color: #fcfcfc; --theme-bg-color: #222; --theme-subtle-outline: oklch(50% 0 50); + --theme-subtle-background: rgba(255, 255, 255, 0.05); } // Two main image classes are "invertable" i.e look good inverted diff --git a/_sass/code_style_github.scss b/_sass/code_style_github.scss index 2af5601..6ede4b5 100644 --- a/_sass/code_style_github.scss +++ b/_sass/code_style_github.scss @@ -1,5 +1,16 @@ -.highlight table td { padding: 5px; } -.highlight table pre { margin: 0; } +.highlight { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, + Courier New, Courier, monospace; + font-size: 12px; + line-height: 1.4; +} + +.highlight table td { + padding: 5px; +} +.highlight table pre { + margin: 0; +} .highlight .cm { color: #999988; font-style: italic; @@ -17,7 +28,10 @@ font-weight: bold; font-style: italic; } -.highlight .c, .highlight .ch, .highlight .cd, .highlight .cpf { +.highlight .c, +.highlight .ch, +.highlight .cd, +.highlight .cpf { color: #999988; font-style: italic; } @@ -82,7 +96,8 @@ color: #445588; font-weight: bold; } -.highlight .k, .highlight .kv { +.highlight .k, +.highlight .kv { color: #000000; font-weight: bold; } @@ -101,7 +116,9 @@ .highlight .mo { color: #009999; } -.highlight .m, .highlight .mb, .highlight .mx { +.highlight .m, +.highlight .mb, +.highlight .mx { color: #009999; } .highlight .sa { @@ -141,7 +158,8 @@ .highlight .ss { color: #990073; } -.highlight .s, .highlight .dl { +.highlight .s, +.highlight .dl { color: #d14; } .highlight .na { @@ -151,7 +169,7 @@ color: #999999; } .highlight .nb { - color: #0086B3; + color: #0086b3; } .highlight .nc { color: #445588; @@ -171,7 +189,8 @@ color: #990000; font-weight: bold; } -.highlight .nf, .highlight .fm { +.highlight .nf, +.highlight .fm { color: #990000; font-weight: bold; } @@ -194,7 +213,8 @@ .highlight .vi { color: #008080; } -.highlight .nv, .highlight .vm { +.highlight .nv, +.highlight .vm { color: #008080; } .highlight .ow { diff --git a/assets/blog/executable-code-snippets-in-docs-and-html-object-representations/thumbnail.png b/assets/blog/executable-code-snippets-in-docs-and-html-object-representations/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..4b34b8aeccdf34a4fafd22b64907248f22e38370 GIT binary patch literal 26419 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 literal 0 HcmV?d00001