Set the card's fields from a textarea
This commit is contained in:
parent
e98e9e1de7
commit
b357d13e2c
1 changed files with 31 additions and 1 deletions
32
src/3x5.ts
32
src/3x5.ts
|
@ -1,7 +1,7 @@
|
|||
import { ALL as HTML } from "./lib/html";
|
||||
import { parse } from "./parser";
|
||||
import { runNoctl, Vm } from "./vm";
|
||||
import { AsHtml } from "./words";
|
||||
import { AsHtml, AsText, TextPiece } from "./words";
|
||||
|
||||
/**
|
||||
* Basic unit of information, also an "actor" in the programming system
|
||||
|
@ -15,6 +15,29 @@ type Card = {
|
|||
code: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* Updates a card's fields
|
||||
* @param state VM state
|
||||
* @param card
|
||||
* @param fields
|
||||
*/
|
||||
function parseFields(card: Card, fields: string) {
|
||||
const script = parse(fields);
|
||||
const newFields: Record<string, string> = {};
|
||||
if (script[0]) {
|
||||
script[1].forEach(([name, value = undefined]) => {
|
||||
if (name != undefined) {
|
||||
newFields[AsText(name as TextPiece)] = value
|
||||
? AsText(value as TextPiece)
|
||||
: "";
|
||||
}
|
||||
});
|
||||
card.fields = newFields;
|
||||
} else {
|
||||
console.error(script[1]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param state VM state
|
||||
* @param code Script to run
|
||||
|
@ -44,6 +67,12 @@ const TEXTAREA_STYLE: Partial<CSSStyleDeclaration> = {
|
|||
width: "100%",
|
||||
};
|
||||
|
||||
const fieldInput = document.createElement("textarea");
|
||||
Object.assign(fieldInput.style, TEXTAREA_STYLE, { height: "8em" });
|
||||
fieldInput.value = String.raw`
|
||||
title "Hello, World!"
|
||||
`.trim();
|
||||
|
||||
const codeInput = document.createElement("textarea");
|
||||
Object.assign(codeInput.style, TEXTAREA_STYLE, { height: "20em" });
|
||||
codeInput.value = String.raw`
|
||||
|
@ -96,6 +125,7 @@ const display = document.createElement("blockquote");
|
|||
const debugDisplay = document.createElement("pre");
|
||||
|
||||
function render() {
|
||||
parseFields(theCard, fieldInput.value);
|
||||
theCard.code = codeInput.value;
|
||||
|
||||
const vm: Vm = {
|
||||
|
|
Loading…
Reference in a new issue