Security News
PyPI’s New Archival Feature Closes a Major Security Gap
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
js-html-renderer
Advanced tools
A JS DSL for rendering HTML on the client or the server.
The JS HTML Renderer provides a concise and intuitive syntax for writing HTML using JavaScript. You can use the Renderer in order to create a static Template
and inject dynamic content into it. JS Symbols are used in order to designate where dynamic content will be inserted.
The Renderer's syntax is intuitive and concise e.g.,
const template: Template = doctype()(
html()(
head()(
title()('The Title'),
// ⮴ The element collection may contain text nodes or other elements.
script({ src: 'script.js' })()
// ⮴ Attributes are defined using key-value pairs.
),
body()(
main({ id: 'main-content' })(
br(),
// ⮴ Void elements lack parens for a node collection.
p()(
$greetings // 🢤 `$greetings` is a JS Symbol.
// ⮴ Dynamic content may be injected wherever there is a Symbol.
)
)
)
)
);
npm install js-html-renderer
In this example you will create an HTML document that contains greetings in Esperanto and English.
import { Template, doctype, html, head, body, main, ul, li } from "js-html-renderer";
const $greetings = Symbol('greetings');
Template
.You will use the Symbol
created above in order to designate where dynamic content will be inserted.
const template: Template = doctype()(
html()(
head()(
),
body()(
main({ id: 'main-content' })(
$greetings
// ⮴ You will insert an unordered list of greetings here.
)
)
)
);
You use JavaScript and the Renderer's HTML elements in order to produce dynamic content. In this example we use Array.prototype.map
in order to map the elements of helloWorld
into a list of li
elements.
const helloWorld = ['Saluton, Mondo!', 'Hello, World!'];
const greetings = ul({ id: 'greetings' })(
helloWorld.map(
(greeting: string, index: number) => li({ id: `greeting-${index}` })(greeting)
// This is an HTML `li` element. ⮵
// Each `li` element will contain its respective `id` attribute.
)
);
greetings
HTML fragment looks like this:<ul id="greetings">
<li id="greeting-0">Saluton, Mondo!</li>
<li id="greeting-1">Hello, World!</li>
</ul>
You use template.render
in order to inject the unordered HTML list of greetings
created above into the Template
.
const htmlText = template.render(
{
[$greetings]: greetings
}
);
console.log(htmlText);
<!DOCTYPE html>
<html>
<head></head>
<body>
<main id="main-content">
<ul id="greetings">
<li id="greeting-0">Saluton, Mondo!</li>
<li id="greeting-1">Hello, World!</li>
</ul>
</main>
</body>
</html>
HTML is prerendered at the time the Template
is created. The HTML elements are concatenated into a string separated by just the Symbolic dynamic components of the Template
. For example, in the Template
below, all the HTML elements, including the footer
, are prerendered at the time of Template
creation. This means that the Template
may be reused without having to reconstruct the HTML elements that comprise it at each use.
The final render step, invoked using the template.render
method, involves just a final concatenation of the prerenderd HTML and the dynamic content.
const template: Template = doctype()(
html()(
head()(
),
body()(
main({ id: 'main-content' })(
$greetings
),
footer({id: 'footer'})()
)
)
);
Custom HTML tags can be created by binding the name of the tag to the first argument of the Renderer's sigil function. The resulting HTML tag can be used as a Custom Element.
import { $ } from "js-html-renderer";
const my_custom_element = $.bind(null, 'my-custom-element');
custom-element
and content "Hello, World!" and log it to the console.console.log(my_custom_element({ class: 'custom-element' })('Hello, World!').render());
<my-custom-element class="custom-element">Hello, World!</my-custom-element>
FAQs
A JS DSL for rendering HTML on the client or the server.
The npm package js-html-renderer receives a total of 12 weekly downloads. As such, js-html-renderer popularity was classified as not popular.
We found that js-html-renderer demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
Research
Security News
Malicious npm package postcss-optimizer delivers BeaverTail malware, targeting developer systems; similarities to past campaigns suggest a North Korean connection.
Security News
CISA's KEV data is now on GitHub, offering easier access, API integration, commit history tracking, and automated updates for security teams and researchers.