While wrestling with a relatively large data set, visualised with Bokeh in an IPython/Jupyter notebook, I needed a way to show some "copy-pastable" text dump when making a box selection on the graph. Some kind of popup or dialog seemed ideal for this.
I didn't want to spend too much custom code on it, let alone going down the overkill/overengineering path and add more libraries and dependencies to the mix. Jupyter as a webapp should have something like this under the hood somewhere, right?
It took me quite a bit to figure this out (especially how to do it from a Bokeh JavaScript callback), so here is a quick note on how I did it.
General
Jupyter indeed has an internal dialog module that can be leveraged
as show below.
Through RequireJs I load the internal
base/js/dialog
module and use the modal
function
to trigger a model with title and body.
require(
["base/js/dialog"],
function(dialog) {
dialog.modal({
title: 'Hello world',
body: 'Hi, lorem ipsum and such',
buttons: {
'kthxbye': {}
}
});
}
);
See it in action here:
In Bokeh
When doing this from a Bokeh callback, that didn't work immediately
because Bokeh seems to have its own, differently configured require
,
without access to base/js/dialog
directly. Luckily
there is apparently also an alias requirejs
that doesn't seem to
be shadowed by Bokeh. I'm not sure to what extent I am depending on
deprecated or fragile assumptions here, but this variation worked for
me:
requirejs(
["base/js/dialog"],
function(dialog) {
// ...
});