transform html templates into lui components
npm install lui-templateslui is quite simple to use -- as long as you are a JavaScript developer.
This tool lets you write lui components without writing JavaScript but via template files. 🎉
Here are some templating languages I think about supporting:
- [ ] pug
- [ ] Haml
- [x] Liquid (proof of concept)
- [ ] Handlebars
- [ ] Knockout
- [x] Plain HTML (for static templates without dynamic content)
- [x] Raw JSON (as intermediary format, see test/templates/greeting.json)
``sh`
npx lui-templates src/templates/greeting.liquid > src/components/greeting.js
`sh`
npx lui-templates src/templates/simple.html > src/components/simple.js
`sh`
npx lui-templates --help
`liquid`Hello {{ name }}!
`js
import { init, node } from 'lui';
import Greeting from './components/greeting.js';
init(() => {
return [
node(Greeting, { name: 'World' }),
];
});
`
`js
import lui_templates from 'lui-templates';
const code = await lui_templates('src/templates/greeting.liquid');
await fs.writeFile('src/components/greeting.js', code, 'utf8');
await bundleApp('src/main.js'); // or whatever
`
The generated component is looking like this:
`js
// generated by lui-templates
import { hook_dom } from "lui";
export default function Greeting({ name }) {
hook_dom("h1", {
innerText: Hello ${name}!,
});
return null;
}
`
You may have it in your .gitignore to prevent duplication.
... And did I mention that this file is generated? 🎉
For static templates without dynamic content, you can use plain HTML:
` This is a simple HTML test.html`
Hello World
`js
// generated by lui-templates
import {
hook_dom,
node_dom,
} from "lui";
export default function Simple() {
hook_dom("div");
return [
node_dom("h1[innerText=Hello World]"),
node_dom("p[innerText=This is a simple HTML test.]"),
];
}
`
The HTML parser supports all standard HTML elements and attributes but does not include dynamic content like variables or conditionals. For dynamic content, use the Liquid parser instead.
The template file to read. Can be in one of the supported formats, determined by its ending. If it is a directory, all contained templates will be read.
The name of the lui module to import from. Defaults to lui.
The name of the module to import unknown components from. Defaults to ./externs.js`.
The returned ES module imports the needed methods and exports the component(s).
For a single template file, the default export is the component.
For a directory, each component is exported by its name.