Files
Automaaval/dist/zacatraz/_internal/pyviz_comms/notebook.js
T
2026-03-14 21:48:05 +00:00

152 lines
4.9 KiB
JavaScript

var JS_MIME_TYPE = 'application/javascript';
var HTML_MIME_TYPE = 'text/html';
var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';
var CLASS_NAME = 'output';
/**
* Render data to the DOM node
*/
function render(props, node) {
var div = document.createElement("div");
var script = document.createElement("script");
node.appendChild(div);
node.appendChild(script);
}
/**
* Handle when a new output is added
*/
function handle_add_output(event, handle) {
var output_area = handle.output_area;
var output = handle.output;
if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {
return
}
var id = output.metadata[EXEC_MIME_TYPE]["id"];
var toinsert = output_area.element.find("." + CLASS_NAME.split(' ')[0]);
if (id !== undefined) {
var nchildren = toinsert.length;
var html_node = toinsert[nchildren-1].children[0];
html_node.innerHTML = output.data[HTML_MIME_TYPE];
var scripts = [];
var nodelist = html_node.querySelectorAll("script");
for (var i in nodelist) {
if (nodelist.hasOwnProperty(i)) {
scripts.push(nodelist[i])
}
}
scripts.forEach( function (oldScript) {
var newScript = document.createElement("script");
var attrs = [];
var nodemap = oldScript.attributes;
for (var j in nodemap) {
if (nodemap.hasOwnProperty(j)) {
attrs.push(nodemap[j])
}
}
attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });
newScript.appendChild(document.createTextNode(oldScript.innerHTML));
oldScript.parentNode.replaceChild(newScript, oldScript);
});
if (JS_MIME_TYPE in output.data) {
toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];
}
output_area._hv_plot_id = id;
if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {
window.PyViz.plot_index[id] = Bokeh.index[id];
} else {
window.PyViz.plot_index[id] = null;
}
} else if (output.metadata[EXEC_MIME_TYPE]["server_id"] !== undefined) {
var bk_div = document.createElement("div");
bk_div.innerHTML = output.data[HTML_MIME_TYPE];
var script_attrs = bk_div.children[0].attributes;
for (var i = 0; i < script_attrs.length; i++) {
toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);
}
// store reference to server id on output_area
output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE]["server_id"];
}
}
/**
* Handle when an output is cleared or removed
*/
function handle_clear_output(event, handle) {
var id = handle.cell.output_area._hv_plot_id;
var server_id = handle.cell.output_area._bokeh_server_id;
if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }
var comm = window.PyViz.comm_manager.get_client_comm("hv-extension-comm", "hv-extension-comm", function () {});
if (server_id !== null) {
comm.send({event_type: 'server_delete', 'id': server_id});
return;
} else if (comm !== null) {
comm.send({event_type: 'delete', 'id': id});
}
delete PyViz.plot_index[id];
if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {
var doc = window.Bokeh.index[id].model.document
doc.clear();
const i = window.Bokeh.documents.indexOf(doc);
if (i > -1) {
window.Bokeh.documents.splice(i, 1);
}
}
}
/**
* Handle kernel restart event
*/
function handle_kernel_cleanup(event, handle) {
delete PyViz.comms["hv-extension-comm"];
window.PyViz.plot_index = {}
}
/**
* Handle update_display_data messages
*/
function handle_update_output(event, handle) {
handle_clear_output(event, {cell: {output_area: handle.output_area}})
handle_add_output(event, handle)
}
function register_renderer(events, OutputArea) {
function append_mime(data, metadata, element) {
// create a DOM node to render to
var toinsert = this.create_output_subarea(
metadata,
CLASS_NAME,
EXEC_MIME_TYPE
);
this.keyboard_manager.register_events(toinsert);
// Render to node
var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};
render(props, toinsert[0]);
element.append(toinsert);
return toinsert
}
events.on('output_added.OutputArea', handle_add_output);
events.on('output_updated.OutputArea', handle_update_output);
events.on('clear_output.CodeCell', handle_clear_output);
events.on('delete.Cell', handle_clear_output);
events.on('kernel_ready.Kernel', handle_kernel_cleanup);
OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {
safe: true,
index: 0
});
}
if (window.Jupyter !== undefined) {
try {
var events = require('base/js/events');
var OutputArea = require('notebook/js/outputarea').OutputArea;
if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {
register_renderer(events, OutputArea);
}
} catch(err) {
}
}