Skip to content

Commit da4cbc8

Browse files
committed
Updated uhtml to v5
1 parent 9104224 commit da4cbc8

File tree

16 files changed

+505
-931
lines changed

16 files changed

+505
-931
lines changed

frameworks/keyed/uhtml/package-lock.json

Lines changed: 161 additions & 351 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frameworks/keyed/uhtml/package.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
{
22
"name": "js-framework-benchmark-uhtml",
3-
"version": "1.0.0",
43
"description": "uhtml demo",
5-
"main": "index.js",
64
"type": "module",
75
"js-framework-benchmark": {
86
"frameworkVersionFromPackage": "uhtml",
@@ -29,13 +27,12 @@
2927
},
3028
"homepage": "https://github.com/krausest/js-framework-benchmark#readme",
3129
"dependencies": {
32-
"js-framework-benchmark-utils": "^0.4.0",
33-
"uhtml": "^4.7.0"
30+
"uhtml": "^5.0.3"
3431
},
3532
"devDependencies": {
3633
"@rollup/plugin-node-resolve": "15.3.0",
3734
"@rollup/plugin-terser": "0.4.4",
3835
"rollup": "4.28.1",
39-
"rollup-plugin-html-literals": "1.1.8"
36+
"rollup-plugin-minify-template-literals": "^1.1.7"
4037
}
4138
}
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import minifyHTML from "rollup-plugin-html-literals";
1+
import minifyHTML from "rollup-plugin-minify-template-literals";
22
import { nodeResolve } from "@rollup/plugin-node-resolve";
33
import terser from "@rollup/plugin-terser";
44

@@ -7,19 +7,21 @@ const isProduction = process.env.BUILD === "production";
77
/** @type {import('rollup').RollupOptions} */
88
export default {
99
input: "src/index.js",
10-
output: {
11-
esModule: true,
12-
file: "dist/index.js",
13-
},
1410
plugins: [
1511
minifyHTML({
1612
options: {
1713
minifyOptions: {
14+
ignoreCustomComments: [/^!/],
1815
keepClosingSlash: true,
16+
caseSensitive: true,
1917
},
2018
},
2119
}),
2220
nodeResolve(),
2321
isProduction && terser(),
2422
],
23+
output: {
24+
esModule: true,
25+
file: "dist/index.js",
26+
},
2527
};

frameworks/keyed/uhtml/src/index.js

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
1-
import {State} from 'js-framework-benchmark-utils';
2-
import {html, htmlFor, render} from 'uhtml/keyed';
3-
4-
import Jumbotron from './jumbotron.js';
5-
import Table from './table.js';
6-
7-
const state = State(Table, false, htmlFor);
8-
9-
render(document.getElementById('container'), html`
10-
<div class="container">
11-
${Jumbotron(state)}
12-
${Table(state)}
13-
<span class="preloadicon glyphicon glyphicon-remove" aria-hidden="true" />
14-
</div>
15-
`);
1+
import { html, render, signal } from 'uhtml';
2+
3+
import Table from './table.js';
4+
import Jumbotron from '../../../non-keyed/uhtml/src/jumbotron.js';
5+
import { handle } from '../../../non-keyed/uhtml/src/utils.js';
6+
7+
const App = ({ title, data }) => html`
8+
<div class="container">
9+
<!-- direct, non reactive, component -->
10+
${Jumbotron({ title, data })}
11+
<!-- reactive component -->
12+
<${Table} ...${{ data, select: handle('select'), remove: handle('remove') }} />
13+
<span class="preloadicon glyphicon glyphicon-remove" aria-hidden="true" />
14+
</div>
15+
`;
16+
17+
render(document.getElementById('container'), App({
18+
title: 'µhtml keyed',
19+
data: signal([], { greedy: true })
20+
}));
21+

frameworks/keyed/uhtml/src/jumbotron.js

Lines changed: 0 additions & 39 deletions
This file was deleted.

frameworks/keyed/uhtml/src/table-delegate.js

Lines changed: 0 additions & 34 deletions
This file was deleted.

frameworks/keyed/uhtml/src/table-tr.js

Lines changed: 0 additions & 40 deletions
This file was deleted.

frameworks/keyed/uhtml/src/table.js

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
1-
import {htmlFor} from 'uhtml/keyed';
1+
import { html } from 'uhtml';
22

3-
export default (state) => {
4-
const {data, selected, selectRow, removeRow} = state;
5-
return htmlFor(state)`
6-
<table class="table table-hover table-striped test-data" .state=${state}>
7-
<tbody>${
8-
data.map(({id, label, html}) => html`
9-
<tr id=${id} class=${id === selected ? 'danger' : ''}>
10-
<td class="col-md-1">${id}</td>
11-
<td class="col-md-4">
12-
<a onclick=${selectRow}>${label}</a>
13-
</td>
14-
<td class="col-md-1">
15-
<a onclick=${removeRow}>
16-
<span class="glyphicon glyphicon-remove" aria-hidden="true" />
17-
</a>
18-
</td>
19-
<td class="col-md-6" />
20-
</tr>`
21-
)}</tbody>
22-
</table>
23-
`;
24-
};
3+
// Table component: it subscribes to the data signal
4+
// as it relies its array content to change and update rows
5+
export default ({ data, select, remove }) => html`
6+
<table class="table table-hover table-striped test-data">
7+
<tbody>${data.value.map(({ id, label, selected }) => html`
8+
<tr key=${id} id=${id} class=${id === selected ? 'danger' : ''}>
9+
<td class="col-md-1">${id}</td>
10+
<td class="col-md-4">
11+
<a onclick=${select}>${label}</a>
12+
</td>
13+
<td class="col-md-1">
14+
<a onclick=${remove}>
15+
<span class="glyphicon glyphicon-remove" aria-hidden="true" />
16+
</a>
17+
</td>
18+
<td class="col-md-6" />
19+
</tr>
20+
`)}</tbody>
21+
</table>
22+
`;

0 commit comments

Comments
 (0)