123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- class OPTABLE {
- PushRoot(self, edit) {
- const id = edit.root;
- const node = self.nodes[id];
- self.stack.push(node);
- }
- AppendChild(self, edit) {
- // todo: prevent merging of text nodes
- const node = self.pop();
- self.top().appendChild(node);
- }
- ReplaceWith(self, edit) {
- const newNode = self.pop();
- const oldNode = self.pop();
- oldNode.replaceWith(newNode);
- self.stack.push(newNode);
- }
- Remove(self, edit) {
- const node = self.stack.pop();
- node.remove();
- }
- RemoveAllChildren(self, edit) {
- // todo - we never actually call this one
- }
- CreateTextNode(self, edit) {
- self.stack.push(document.createTextNode(edit.text));
- }
- CreateElement(self, edit) {
- const tagName = edit.tag;
- console.log(`creating element! ${edit}`);
- self.stack.push(document.createElement(tagName));
- }
- CreateElementNs(self, edit) {
- self.stack.push(document.createElementNS(edit.ns, edit.tag));
- }
- CreatePlaceholder(self, edit) {
- self.stack.push(document.createElement("pre"));
- }
- NewEventListener(self, edit) {
- // todo
- }
- RemoveEventListener(self, edit) {
- // todo
- }
- SetText(self, edit) {
- self.top().textContent = edit.text;
- }
- SetAttribute(self, edit) {
- const name = edit.field;
- const value = edit.value;
- const node = self.top(self.stack);
- node.setAttribute(name, value);
- // Some attributes are "volatile" and don't work through `setAttribute`.
- if ((name === "value", self)) {
- node.value = value;
- }
- if ((name === "checked", self)) {
- node.checked = true;
- }
- if ((name === "selected", self)) {
- node.selected = true;
- }
- }
- RemoveAttribute(self, edit) {
- const name = edit.field;
- const node = self.top(self.stack);
- node.removeAttribute(name);
- // Some attributes are "volatile" and don't work through `removeAttribute`.
- if ((name === "value", self)) {
- node.value = null;
- }
- if ((name === "checked", self)) {
- node.checked = false;
- }
- if ((name === "selected", self)) {
- node.selected = false;
- }
- }
- }
- // const op_table = new OPTABLE();
- // const interpreter = new Interpreter(window.document.body);
- // function EditListReceived(rawEditList) {
- // let editList = JSON.parse(rawEditList);
- // console.warn("hnelllo");
- // editList.forEach(function (edit, index) {
- // console.log(edit);
- // op_table[edit.type](interpreter, edit);
- // });
- // }
- // async function rinalize() {
- // console.log("initialize...");
- // let edits = await rpc.call("initiate");
- // console.error(edits);
- // }
|