const DomTree1 = { ... } // the user is able to navigate between pages by making multiple dom trees and jumping between them. the framework has all information of all dom trees at runtime.
const DomTree2 = {
type: "root",
id: "root0",
h: 1000,
w: 1000,
x: 0,
y: 0,
children: [
{
// non-interactive elements
type: "div",
id: "div1",
h: 300,
w: 300,
x: 400,
y: 200,
// styles are manipulated by gui, not code
style: {
backgroundColor: "#fff",
// other styles
},
onUpdate: () => {}, // updates position
children: [
{
type: "button",
id: "button1",
h: 50,
w: 100,
x: 50, // i guess this is relative dims
y: 50,
style: {
backgroundColor: "#fff",
// other styles
},
onUpdate: () => {}, // this handles positioning
onEvent: () => {}, // this triggers on all events, and allows user to perform event handling
children: null, // this signifies that 'button' is a leaf node
},
],
},
],
};or if this were to be implemented as a chrome plugin (that merely manipulates js on a site). in this scenario, the 'manipulation' can be as extensive as creating an entire website from a root node.
const domTree = {
type: "root",
id: "root1",
};
// the framework now manages a mapping of ids
const idToPath = {
button1: ["children", 0, "children", 0],
// Add more entries as needed
};
// A function to get a node by its path
function getNodeByPath(root, path) {
let node = root;
for (let key of path) {
node = node[key];
}
return node;
}
// A function to handle an event
function handleEvent(event) {
// Get the ID of the target element
const id = event.target.id;
// Get the path of the target element
const path = idToPath[id];
// Get the target element
const target = getNodeByPath(webpage, path);
// Manipulate the target element
target.h = 500;
}perhaps the 'framework' stores a set of 'element creation procedures' (that have to be in order, in order to be able to avoid creating children elements on top of parent elements that have not yet been created), a sort of 'transactional element creation' if you will