UNPKG

4.04 kBMarkdownView Raw
1# nanohtml
2[![npm version][2]][3] [![build status][4]][5]
3[![downloads][8]][9] [![js-standard-style][10]][11]
4
5HTML template strings for the Browser with support for Server Side
6Rendering in Node.
7
8## Installation
9```sh
10$ npm install nanohtml
11```
12
13## Usage
14### Browser
15```js
16var html = require('nanohtml')
17
18var el = html`
19 <body>
20 <h1>Hello planet</h1>
21 </body>
22`
23
24document.body.appendChild(el)
25```
26
27### Node
28Node doesn't have a DOM available. So in order to render HTML we use string
29concatenation instead. This has the fun benefit of being quite efficient, which
30in turn means it's great for server rendering!
31
32```js
33var html = require('nanohtml')
34
35var el = html`
36 <body>
37 <h1>Hello planet</h1>
38 </body>
39`
40
41console.log(el.toString())
42```
43
44### Interpolating unescaped HTML
45By default all content inside template strings is escaped. This is great for
46strings, but not ideal if you want to insert HTML that's been returned from
47another function (for example: a markdown renderer). Use `nanohtml/raw` for
48to interpolate HTML directly.
49
50```js
51var raw = require('nanohtml/raw')
52var html = require('nanohtml')
53
54var string = '<h1>This a regular string.</h1>'
55var el = html`
56 <body>
57 ${raw(string)}
58 </body>
59`
60
61document.body.appendChild(el)
62```
63
64### Attaching event listeners
65```js
66var html = require('nanohtml')
67
68var el = html`
69 <body>
70 <button onclick=${onclick}>
71 Click Me
72 </button>
73 </body>
74`
75
76document.body.appendChild(el)
77
78function onclick (e) {
79 console.log(`${e.target} was clicked`)
80}
81```
82
83## Static optimizations
84Parsing HTML has significant overhead. Being able to parse HTML statically,
85ahead of time can speed up rendering to be about twice as fast.
86
87### Browserify
88
89#### From the command line
90```sh
91$ browserify -t nanohtml index.js > bundle.js
92```
93
94#### Programmatically
95```js
96var browserify = require('browserify')
97var nanohtml = require('nanohtml')
98var path = require('path')
99
100var b = browserify(path.join(__dirname, 'index.js'))
101 .transform(nanohtml)
102
103b.bundle().pipe(process.stdout)
104```
105
106#### In package.json
107```json
108{
109 "name": "my-app",
110 "private": true,
111 "browserify": {
112 "transform": [
113 "nanohtml"
114 ]
115 },
116 "dependencies": {
117 "nanohtml": "^1.0.0"
118 }
119}
120```
121
122### Webpack
123At the time of writing there's no Webpack loader yet. We'd love a contribution!
124
125### Babel / Parcel
126
127Add nanohtml to your `.babelrc` config.
128
129Without options:
130
131```js
132{
133 "plugins": [
134 "nanohtml"
135 ]
136}
137```
138
139With options:
140
141```js
142{
143 "plugins": [
144 ["nanohtml", {
145 "useImport": true
146 }]
147 ]
148}
149```
150
151#### Options
152
153 - `useImport` - Set to true to use `import` statements for injected modules.
154 By default, `require` is used. Enable this if you're using Rollup.
155 - `appendChildModule` - Import path to a module that contains an `appendChild`
156 function. Defaults to `"nanohtml/lib/append-child"`.
157
158## Attributions
159Shout out to [Shama](https://github.com/shama) and
160[Shuhei](https://github.com/shuhei) for their contributions to
161[Bel](https://github.com/shama/bel),
162[yo-yoify](https://github.com/shama/yo-yoify) and
163[pelo](https://github.com/shuhei/pelo). This module is based on their work, and
164wouldn't have been possible otherwise!
165
166## See Also
167- [choojs/nanomorph](https://github.com/choojs/nanomorph)
168
169## License
170[MIT](./LICENSE)
171
172[0]: https://img.shields.io/badge/stability-experimental-orange.svg?style=flat-square
173[1]: https://nodejs.org/api/documentation.html#documentation_stability_index
174[2]: https://img.shields.io/npm/v/nanohtml.svg?style=flat-square
175[3]: https://npmjs.org/package/nanohtml
176[4]: https://img.shields.io/travis/choojs/nanohtml/master.svg?style=flat-square
177[5]: https://travis-ci.org/choojs/nanohtml
178[6]: https://img.shields.io/codecov/c/github/choojs/nanohtml/master.svg?style=flat-square
179[7]: https://codecov.io/github/choojs/nanohtml
180[8]: http://img.shields.io/npm/dt/nanohtml.svg?style=flat-square
181[9]: https://npmjs.org/package/nanohtml
182[10]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square
183[11]: https://github.com/feross/standard