--- thebe-kernel: ir --- # Configuration (configure:selector)= ## Change the HTML selector to mark interactive cells By default, `sphinx-thebe` will be run on any cells with the `thebe` class. However, you can customize the HTML selector to use other classes, elements, etc. For example, if you wanted to convert **all code cells**, you could use the following selector: ```python thebe_config = { "selector": "div.highlight" } ``` ```{note} `sphinx-thebe` will subsequently look for any `pre` blocks inside of elements it finds with the `selector` configuration value. These are the blocks that will be converted to interactive with `thebe`. ``` ## Including outputs with your code If you'd like to include outputs in the *static* version of your page, and only overwrite them once the user has run that Thebe cell, you can configure `sphinx-thebe` to detect and keep the outputs associated with some code. To do so, use the `selector_output` configuration. This is a selector that is searched for *within* any items discovered by `selector`. If an output is found, it will be placed just after the code and Thebe will detect it. For example, the following code: ``````{tab-set} `````{tab-item} Myst Markdown ````{container} thebe ```{code-block} r print("hi") ``` ```{container} output "hi" ``` ```` ````` `````{tab-item} reStructuredText ```{code-block} rst .. container:: thebe .. code-block:: r print("hi") .. container:: output "hi" ``` ````` `````` Defines a *parent container* in which we'll put both code and the output of the code. We'll use a `code-block` for the code, and another `container` node with our `output` class for the output. `sphinx-gallery` will detect the parent container because it has a `thebe` class. It will detect the `pre` block inside the container as the code, and it will detect the `
` block with the `output` class as the output. The result is that initializing Thebe *retains* the output until the cell is executed, like so: ```{thebe-button} ``` ````{container} thebe ```{code-block} r print("hi") ``` ```{container} output "hi" ``` ```` ## Setting the Kernel You can set the kernel that Thebe uses on a page by adding metadata to your page. To do so, add the following metadata to the top of your page: ``` thebe-kernel: ``` For example, this page had the following metadata in it: ``` thebe-kernel: ir ``` In addition, this website is configured to use the [Binder R example repository](https://github.com/binder-examples/r) for its environment. As a result, we can now run R code interactively with Thebe: ```{thebe-button} Launch thebe in R ``` ```{code-block} :class: thebe, thebe-init # Load ggplot - this will be automatically-run library(ggplot2) ``` ```{code-block} :class: thebe, thebe-init # create factors with value labels mtcars$gear <- factor(mtcars$gear,levels=c(3,4,5), labels=c("3gears","4gears","5gears")) mtcars$am <- factor(mtcars$am,levels=c(0,1), labels=c("Automatic","Manual")) mtcars$cyl <- factor(mtcars$cyl,levels=c(4,6,8), labels=c("4cyl","6cyl","8cyl")) ``` ```{code-block} :class: thebe, thebe-init # Kernel density plots for mpg # grouped by number of gears (indicated by color) qplot(mpg, data=mtcars, geom="density", fill=gear, alpha=I(.5), main="Distribution of Gas Milage", xlab="Miles Per Gallon", ylab="Density") ``` ```{code-block} :class: thebe # Scatterplot of mpg vs. hp for each combination of gears and cylinders # in each facet, transmittion type is represented by shape and color qplot(hp, mpg, data=mtcars, shape=am, color=am, facets=gear~cyl, size=I(3), xlab="Horsepower", ylab="Miles per Gallon") ``` ## Automatically running some code You can tag code blocks to run as soon as the kernel is ready (i.e., without any user input) by adding the `thebe-init` class to the code blocks. For example: `````{tab-set} ````{tab-item} MyST Markdown ```{code-block} :class: thebe, thebe-init print("hi") ``` ```` ````{tab-item} reStructuredText ```rst .. code-block:: :class: thebe, thebe-init print("hi") ``` ```` ````` These code blocks will be run automatically once the kernel is ready, and their outputs will be displayed below. (add-custom-button)= ## Adding your own button to start Thebe By default, Thebe encourages users to use the `thebe-button` directive to insert a thebe button into their documentation. However, you can add your own buttons wherever you wish. Simply ensure that an HTML element has this attribute: ```js onclick="initThebe()" ``` and it will be able to initialize Thebe on that page on its own. For example, here is the HTML for the Thebe button generated by the `thebe-button` directive: ```html ``` ## Choose a codemirror theme You can customize `sphinx-thebe` to use the codemirror theme of your choice. To do so, use the following configuration: ```python thebe_config = { "codemirror-theme": "" } ``` See [the CodeMirror theme demo](https://codemirror.net/demo/theme.html) for a list of themes that you can use, and what they look like. ## Load `thebe` automatically on all pages By default, `sphinx-thebe` will lazily load the JS/CSS from `thebe` when the `sphinx-thebe` initialization button is pressed. This means that no Javascript is loaded until a person explicitly tries to start thebe, which reduces page load times. If you want `thebe` to be loaded on every page, in an "eager" fashion, you may do so with the following configuration: ```python thebe_config = { "always_load": True } ``` ## Configuration reference Here's a reference of all of the configuration values avialable to `sphinx-thebe`. Many of these eventually make their was into the `thebe` configuration. You can find a [reference for `thebe` configuration here](https://thebe.readthedocs.io/en/latest/config_reference.html). ```python thebe_config = { "always_load": bool (default True) "repository_url": "", "repository_branch": "", "selector": "", "selector_input": "", "selector_output": "", } ```