Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
703892b
WIP: do a lexing pass
gordonbrander Jul 15, 2024
fb206a9
Proof-of-concept lexing -> parsing
gordonbrander Jul 15, 2024
a254107
WIP: nest tags with blocks
gordonbrander Jul 15, 2024
2315fe8
Move vdom, hole, block, parser, into view
gordonbrander Jul 16, 2024
21db538
Rename var to binding
gordonbrander Jul 16, 2024
7ede002
Export block, etc from index
gordonbrander Jul 16, 2024
746d12f
Add test for block parsing
gordonbrander Jul 16, 2024
37ef017
Rename block to section
gordonbrander Jul 16, 2024
2466cb0
Include parsed path on binding and section
gordonbrander Jul 16, 2024
aafb5f8
Parse path with only .
gordonbrander Jul 16, 2024
8d41ffe
Factor out bindProps
gordonbrander Jul 16, 2024
10215d3
WIP
gordonbrander Jul 18, 2024
e586513
Fix example
gordonbrander Jul 19, 2024
ca4ba73
Add pathable
gordonbrander Jul 19, 2024
9230574
Fix strict null type errors
gordonbrander Jul 19, 2024
8586c1d
Add tests for path
gordonbrander Jul 19, 2024
9faf00f
Basic {{dotted.mustaches}} working
gordonbrander Jul 19, 2024
2049630
Scope on source and compose transform fns
gordonbrander Jul 20, 2024
f8f4d74
Base path on .key()
gordonbrander Jul 24, 2024
9ba28c1
Add cell / propagator
gordonbrander Jul 24, 2024
9de2162
Move render into reactive
gordonbrander Jul 24, 2024
f5567ac
Update HTML to use propagator cell
gordonbrander Jul 24, 2024
40fd992
Add lens type
gordonbrander Jul 24, 2024
48c9cdc
Fix lens accessor
gordonbrander Jul 24, 2024
511adcd
Add lift function that solves diamond problem
gordonbrander Jul 24, 2024
529dfa4
Perform update *before* rejecting same value
gordonbrander Jul 24, 2024
ec17135
Remove cell update, use mergeable interface
gordonbrander Jul 24, 2024
43b01f4
Factor propagators out into common-propagator
gordonbrander Jul 24, 2024
6a3b439
Merge remote-tracking branch 'origin/main' into 2024-07-15-mustache-b…
gordonbrander Jul 25, 2024
ae7cada
JSON logging
gordonbrander Jul 25, 2024
669f3f6
Add browser test for binding deep pathed variables
gordonbrander Jul 25, 2024
e5af4f9
Fix isMergeable for null case
gordonbrander Jul 25, 2024
6556109
Fix example
gordonbrander Jul 25, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 133 additions & 24 deletions typescript/package-lock.json

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions typescript/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"./packages/common-html:build",
"./packages/common-frp:build",
"./packages/common-frp-lit:build",
"./packages/common-propagator:build",
"./packages/common-ui:build",
"./packages/llm-client:build",
"./common/data:build",
Expand All @@ -62,6 +63,7 @@
"./packages/common-html:clean",
"./packages/common-frp:clean",
"./packages/common-frp-lit:clean",
"./packages/common-propagator:clean",
"./packages/common-ui:clean",
"./packages/llm-client:clean",
"./common/data:clean",
Expand Down
34 changes: 14 additions & 20 deletions typescript/packages/common-html/example/main.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,23 @@
import render, { setNodeSanitizer, setEventSanitizer } from "../src/render.js";
import { cell } from "@commontools/common-propagator";
import view from "../src/view.js";
import html from "../src/html.js";
import { state, stream } from "../src/state.js";
import render from "../src/render.js";
import { setDebug } from "../src/logger.js";

setDebug(true);

// setNodeSanitizer(...);
// setEventSanitizer(...);
const inputState = cell({ text: "Hello, world!" });
const inputEvents = cell<InputEvent | null>(null);

const text = state("Hello, world!");
const input = stream<InputEvent>();

input.sink((event) => {
console.log("input", event);
const target = event.target as HTMLInputElement | null;
const value = target?.value ?? null;
if (value !== null) {
text.send(value);
inputEvents.sink((event) => {
const target = event?.target as HTMLInputElement | null;
const value = target?.value;
if (value != null) {
inputState.send({ text: value });
}
});

const time = state(new Date().toLocaleTimeString());
const time = cell(new Date().toLocaleTimeString());

setInterval(() => {
time.send(new Date().toLocaleTimeString());
Expand All @@ -33,17 +29,15 @@ const timeView = view(`<div class="time">{{time}}</div>`, { time });
const titleGroup = view(
`
<div class="title-group">
<h1 class="title">{{text}}</h1>
<input type="text" oninput={{input}} value={{text}} />
<h1 class="title">{{input.text}}</h1>
<input type="text" oninput={{oninput}} value={{input.text}} />
</div>
`,
{ text, input },
{ input: inputState, oninput: inputEvents },
);

const container = html`
<div class="container">${timeView} ${titleGroup}</div>
`;

const dom = render(container);

document.body.appendChild(dom);
const _cancel = render(document.body, container);
10 changes: 6 additions & 4 deletions typescript/packages/common-html/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"test-browser": "npm run build && web-test-runner \"lib/test-browser/**/*.test.js\" --node-resolve",
"build": "wireit",
"clean": "wireit",
"dev": "vite example"
"dev": "npm run build && vite example"
},
"repository": {
"type": "git",
Expand All @@ -26,10 +26,10 @@
"./lib/index.js"
],
"dependencies": {
"htmlparser2": "^9.1.0",
"vite": "^5.3.3"
"htmlparser2": "^9.1.0"
},
"devDependencies": {
"vite": "^5.3.3",
"@types/mocha": "^10.0.7",
"@types/node": "^20.14.10",
"@types/sax": "^1.2.7",
Expand All @@ -41,7 +41,9 @@
},
"wireit": {
"build": {
"dependencies": [],
"dependencies": [
"../common-propagator:build"
],
"files": [
"./src/**/*"
],
Expand Down
54 changes: 0 additions & 54 deletions typescript/packages/common-html/src/hole.ts

This file was deleted.

9 changes: 4 additions & 5 deletions typescript/packages/common-html/src/html.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import * as hole from "./hole.js";
import * as logger from "./logger.js";
import cid from "./cid.js";
import { view, View } from "./view.js";
import tid from "./tid.js";
import { view, View, markupBinding } from "./view.js";

export const html = (
strings: TemplateStringsArray,
Expand All @@ -13,7 +12,7 @@ export const html = (

// Create pairs of name/value by generating name
const namedValues: Array<[string, unknown]> = values.map((value) => {
return [cid(), value];
return [tid(), value];
});

// Flatten template string
Expand All @@ -23,7 +22,7 @@ export const html = (
return result + string;
}
const [name] = namedValue;
return result + string + hole.markup(name);
return result + string + markupBinding(name);
}, "");

logger.debug("Flattened", markup);
Expand Down
18 changes: 13 additions & 5 deletions typescript/packages/common-html/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
export { view, View, Context } from "./view.js";
export {
view,
View,
Context,
parse,
ParseError,
vnode,
VNode,
binding,
Binding,
section,
Section,
} from "./view.js";
export { html } from "./html.js";
export { render, setNodeSanitizer, setEventSanitizer } from "./render.js";
export { VNode } from "./vnode.js";
export { Hole } from "./hole.js";
export { Reactive } from "./reactive.js";
export { setDebug } from "./logger.js";
export { cancel, Cancel } from "./cancel.js";
75 changes: 0 additions & 75 deletions typescript/packages/common-html/src/parser.ts

This file was deleted.

43 changes: 0 additions & 43 deletions typescript/packages/common-html/src/reactive.ts

This file was deleted.

Loading