thebe-core
Version:
Typescript based core functionality for Thebe
55 lines • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.stripWidgets = exports.placeholder = exports.isMimeBundle = exports.ensureString = exports.shortId = void 0;
const tslib_1 = require("tslib");
const nanoid_1 = require("nanoid");
const manager_1 = require("./manager");
const nanoid = (0, nanoid_1.customAlphabet)('1234567890abcdef', 8);
/**
* Creates a compact random id for use in runtime objects
*
* @returns string
*/
function shortId() {
return nanoid();
}
exports.shortId = shortId;
function ensureString(maybeString) {
if (Array.isArray(maybeString))
return maybeString.join('\n');
return maybeString;
}
exports.ensureString = ensureString;
function isMimeBundle({ output_type }) {
return output_type === 'display_data' || output_type === 'execute_result';
}
exports.isMimeBundle = isMimeBundle;
function placeholder(plainText) {
return `
<div class="thebe-ipywidgets-placeholder">
<div class="thebe-ipywidgets-placeholder-image"></div>
<div class="thebe-ipywidgets-placeholder-message"><code>ipywidgets</code> - a Jupyter kernel connection is required to fully display this output.</div>
${plainText && `<pre>${plainText}</pre>`}
</div>
`;
}
exports.placeholder = placeholder;
function stripWidgets(outputs, hideWidgets = true, placeholderFn = placeholder) {
return outputs.map((output) => {
if (!isMimeBundle(output))
return output;
const _a = output.data, _b = manager_1.WIDGET_MIMETYPE, widgets = _a[_b], others = tslib_1.__rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
if (!widgets)
return output;
let data = output.data;
if (hideWidgets)
data = Object.assign({}, others);
if (placeholderFn && !('text/html' in data))
// if there is not already an html bundle, add a placeholder to hide the plain/text field
data['text/html'] = placeholderFn(ensureString(data['text/plain']));
const stripped = Object.assign(Object.assign({}, output), { data });
return stripped;
});
}
exports.stripWidgets = stripWidgets;
//# sourceMappingURL=utils.js.map