bel
A simple library for composable DOM elements using tagged template strings.
If you're looking for a higher level front end framework, try yo-yo. Or even higher than that, try choo.
usage
For a more in depth tutorial on getting started, please check out the wiki.
A Simple Element
Create an element:
// list.jsvar bel = module { return bel`<ul> </ul>`}
Then pass data to it and add to the DOM:
// app.jsvar createList = var list = documentbody
Data Down, Actions Up
// list.jsvar bel = // The DOM is built by the data passed inmodule { { return bel`<ul> </ul>` } { return bel`<button onclick=></button>` } var element = return element}
// app.jsvar bel = var morphdom = var list = module { { // When a bear is selected, rerender with the newly selected item // This will use DOM diffing to render, sending the data back down again } { return bel`<div className="app"> <h1>Selected: </h1> </div>` } // On first render, we haven't selected anything var element = return element}
hyperx
use with/withouthyperx
is built into bel
but there may be times when you wish to use your
own version or implementation of hyperx
. Or if you prefer to create elements
using bel
without using tagged template literals:
var createElement = createElementvar hyperx = var bel = var element = bel`<div class="heading">Hello!</div>` // ... var sameElement =
use yo-yoify to build
Transform bel template strings into pure and fast document calls with browserify.
e.g. browserify entry.js -g yo-yoify -o bundle.js
note
Please use yo-yoify which will transform any Function.caller
into plain strings until an alternative solution to identify element creators is implemented.
yo-yoify can resolve the error like below:
TypeError: Function.caller used to retrieve strict caller
or
TypeError: access to strict mode caller function is censored
security
bel sets attributes with element.setAttribute()
and element.setAttributeNS()
, and creates text nodes with document.createTextNode()
. These approaches mitigate some Cross-Site Scripting (XSS) attacks. You should still code carefully every time you put content from users in the DOM.
unescaping
bel escapes ${values}
within template literals. Sometimes that is not desirable; for instance, when parsing a string with markdown, which returns HTML.
To unescape values, use the raw
method:
var bel = var raw = { var output = '<strong>hello there</strong>' return bel` <div></div> `}
Make sure that you are sticking to the security suggestions above, and sanitize any input for malicious code before using raw
.
similar projects
- vel minimal virtual-dom library
- base-element An element authoring library for creating standalone and performant elements
- virtual-dom A Virtual DOM and diffing algorithm
- hyperscript Create HyperText with JavaScript.
license
(c) 2016 Kyle Robinson Young. MIT License