virtual-dom: update host.ts to use enums for tag and attribute names

This commit is contained in:
Brian Carroll 2022-10-22 08:48:29 +01:00
parent 9db3a28b09
commit 2082889640
No known key found for this signature in database
GPG Key ID: 5C7B2EC4101703C0

View File

@ -5,9 +5,10 @@ let memory32 = new Uint32Array(memory8.buffer);
const utf8Decoder = new TextDecoder();
const utf8Encoder = new TextEncoder();
// TODO: make this actually work!
const app = new WebAssembly.Instance(
new WebAssembly.Module(new ArrayBuffer(1024))
); // TODO: make this actually work
);
type RocAlloc = (size: number, alignment: number) => number;
type RocDomEvent = (
@ -49,8 +50,8 @@ const insertNode = (node: Node): number => {
};
// createElement : Str -> Effect NodeId
const createElement = (tagNameAddr: number): number => {
const tagName = decodeRocStr(tagNameAddr);
const createElement = (tagId: number): number => {
const tagName = tagNames[tagId];
const node = document.createElement(tagName);
return insertNode(node);
};
@ -78,11 +79,11 @@ const removeNode = (id: number): void => {
// setAttribute : NodeId, Str, Str -> Effect {}
const setAttribute = (
nodeId: number,
nameAddr: number,
typeId: number,
valueAddr: number
): void => {
const node = nodes[nodeId] as Element;
const name = decodeRocStr(nameAddr);
const name = attrTypeNames[typeId];
const value = decodeRocStr(valueAddr);
node.setAttribute(name, value);
};
@ -193,3 +194,254 @@ const removeListener = (nodeId: number, handlerId: number): void => {
const [eventType, handler] = listeners[handlerId];
node.removeEventListener(eventType, handler);
};
// 'var' lets us keep this out of the way at the bottom of the file, but have it in scope everywhere.
var tagNames = [
"a",
"abbr",
"address",
"area",
"article",
"aside",
"audio",
"b",
"base",
"bdi",
"bdo",
"blockquote",
"body",
"br",
"button",
"canvas",
"caption",
"cite",
"code",
"col",
"colgroup",
"data",
"datalist",
"dd",
"del",
"details",
"dfn",
"dialog",
"div",
"dl",
"dt",
"em",
"embed",
"fieldset",
"figcaption",
"figure",
"footer",
"form",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"head",
"header",
"hr",
"html",
"i",
"iframe",
"img",
"input",
"ins",
"kbd",
"label",
"legend",
"li",
"link",
"main",
"map",
"mark",
"math",
"menu",
"meta",
"meter",
"nav",
"noscript",
"object",
"ol",
"optgroup",
"option",
"output",
"p",
"picture",
"portal",
"pre",
"progress",
"q",
"rp",
"rt",
"ruby",
"s",
"samp",
"script",
"section",
"select",
"slot",
"small",
"source",
"span",
"strong",
"style",
"sub",
"summary",
"sup",
"svg",
"table",
"tbody",
"td",
"template",
"textarea",
"tfoot",
"th",
"thead",
"time",
"title",
"tr",
"track",
"u",
"ul",
"var",
"video",
"wbr",
];
var attrTypeNames = [
"accept",
"accept-charset",
"accesskey",
"action",
"align",
"allow",
"alt",
"async",
"autocapitalize",
"autocomplete",
"autofocus",
"autoplay",
"background",
"bgcolor",
"border",
"buffered",
"capture",
"challenge",
"charset",
"checked",
"cite",
"class",
"code",
"codebase",
"color",
"cols",
"colspan",
"content",
"contenteditable",
"contextmenu",
"controls",
"coords",
"crossorigin",
"csp",
"data",
"datetime",
"decoding",
"default",
"defer",
"dir",
"dirname",
"disabled",
"download",
"draggable",
"enctype",
"enterkeyhint",
"for",
"form",
"formaction",
"formenctype",
"formmethod",
"formnovalidate",
"formtarget",
"headers",
"height",
"hidden",
"high",
"href",
"hreflang",
"http-equiv",
"icon",
"id",
"importance",
"integrity",
"intrinsicsize",
"inputmode",
"ismap",
"itemprop",
"keytype",
"kind",
"label",
"lang",
"language",
"loading",
"list",
"loop",
"low",
"manifest",
"max",
"maxlength",
"minlength",
"media",
"method",
"min",
"multiple",
"muted",
"name",
"novalidate",
"open",
"optimum",
"pattern",
"ping",
"placeholder",
"poster",
"preload",
"radiogroup",
"readonly",
"referrerpolicy",
"rel",
"required",
"reversed",
"role",
"rows",
"rowspan",
"sandbox",
"scope",
"scoped",
"selected",
"shape",
"size",
"sizes",
"slot",
"span",
"spellcheck",
"src",
"srcdoc",
"srclang",
"srcset",
"start",
"step",
"style",
"summary",
"tabindex",
"target",
"title",
"translate",
"type",
"usemap",
"value",
"width",
"wrap",
];