mirror of
https://github.com/roc-lang/roc.git
synced 2024-09-22 08:17:40 +03:00
virtual-dom: update host.ts to use enums for tag and attribute names
This commit is contained in:
parent
9db3a28b09
commit
2082889640
@ -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",
|
||||
];
|
||||
|
Loading…
Reference in New Issue
Block a user