web/visualization.js
Matej Focko f779c349c3
feat: add tooltips to prepared scenarios
Signed-off-by: Matej Focko <mfocko@redhat.com>
2022-05-17 14:39:09 +02:00

105 lines
2.3 KiB
JavaScript

let recorder = new Recorder(
d3.select("#graph").graphviz(),
document.getElementById("comment"),
"graph"
);
let tree = new WAVLTree();
tree.recorder = recorder;
function operationCallback(method, id) {
let number = document.getElementById(id).value;
let value = parseInt(number);
if (number === "" || isNaN(value)) {
return false;
}
method(value);
document.getElementById(id).value = "";
return false;
}
function insertCallback() {
return operationCallback(tree.insert.bind(tree), "insertInput");
}
function deleteCallback() {
return operationCallback(tree.delete.bind(tree), "deleteInput");
}
function switchTree(TreeType) {
tree = new TreeType();
tree.recorder = recorder;
recorder.clear();
tree.record("");
}
// #region prepared scenarios
function prepareSingleRotationAfterDelete() {
let newTree = new WAVLTree();
for (let key of [0, 1, 2, -1]) {
newTree.insert(key);
}
document.getElementById("wavlTreeBtn").checked = true;
tree = newTree;
tree.recorder = recorder;
recorder.clear();
tree.record("Prepare tree");
document.getElementById("deleteInput").value = 2;
}
function prepareDoubleRotationAfterDelete() {
let newTree = new WAVLTree();
for (let key of [0, -7, 1, -1]) {
newTree.insert(key);
}
document.getElementById("wavlTreeBtn").checked = true;
tree = newTree;
tree.recorder = recorder;
recorder.clear();
tree.record("Prepare tree");
document.getElementById("deleteInput").value = 1;
}
function prepareDemotionOfBothNodesDuringDelete() {
let newTree = new WAVLTree();
for (let key of [0, 1, 2, 3, -2, -3, -1]) {
newTree.insert(key);
}
for (let key of [-2]) {
newTree.delete(key);
}
document.getElementById("wavlTreeBtn").checked = true;
tree = newTree;
tree.recorder = recorder;
recorder.clear();
tree.record("Prepare tree");
document.getElementById("deleteInput").value = 2;
}
// #endregion prepared scenarios
const tooltipTriggerList = document.querySelectorAll(
'[data-bs-toggle="tooltip"]'
);
const tooltipList = [...tooltipTriggerList].map(
(tooltipTriggerEl) => new bootstrap.Tooltip(tooltipTriggerEl)
);
function render() {
recorder.render();
setTimeout(render);
}
render();