kanidm/server/web_ui/shared/static/shared.js

70 lines
2 KiB
JavaScript
Raw Normal View History

// This is easier to have in JS than in WASM
export function modal_hide_by_id(m) {
const elem = document.getElementById(m);
const modal = bootstrap.Modal.getInstance(elem);
modal.hide();
}
/**
* Replaces the node with a new node using new_tag, and copies all other attributes from node onto new node
* @param {Element} node
* @param {string} new_tag
* @return the new node
*/
function replace_tag(node, new_tag) {
const newNode = document.createElement(new_tag);
[...node.attributes].map(({ name, value }) => {
newNode.setAttribute(name, value);
});
while (node.firstChild) {
newNode.appendChild(node.firstChild);
}
node.parentNode.replaceChild(newNode, node);
return newNode;
}
/**
* Loads graphviz and then renders the graph
* @param {string} graph_src dot language graph source
*/
export function init_graphviz(graph_src) {
if (typeof Viz !== 'undefined') {
start_graphviz(graph_src);
} else {
let meta = document.querySelector("meta[src='/pkg/external/viz.js']");
if (meta) {
let script = replace_tag(meta, "script");
script.addEventListener('load', () => {
start_graphviz(graph_src);
});
} else {
console.error("viz.js not found");
}
}
}
/**
* Uses the graphviz library to show a graph
* @param {string} graph_src dot language graph source
*/
function start_graphviz(graph_src) {
Viz.instance().then(function(viz) {
const graphContainer = document.getElementById("graph-container");
if (graphContainer)
graphContainer.replaceChildren(viz.renderSVGElement(graph_src))
});
}
/**
* Opens a popup window `target=_blank` filled with `content`
* @param {string} content shown in the pre block
*/
export function open_blank(content) {
const windowDocument = window.open("", "_blank").document;
const pre2 = windowDocument.createElement("pre");
pre2.innerText = content;
windowDocument.body.appendChild(pre2);
}