npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

handlebars-inc

v0.0.3

Published

Render isomorphic Handlebars templates using incremental-dom on the client

Downloads

1

Readme

handlebars-inc

Handlebars Inc is a library for rendering Handlebars templates using the incremental-dom library. This enables isomorphic templates that can be rendered with good performance on both a Node server and a browser client. Incremental DOM was authored specifically for use as a backend for templates, and offers an excellent API for in-place updates to a page UI.

Handlebars Inc exposes a compatible Handlebars API by default, and can therefore be used as a drop-in replacement for Handlebars on the server. On the client, Handlebars Inc loads an instance of the Incremental DOM API as HandlebarsInc.idom, and also exposes HandlebarsInc.idom.patch() as HandlebarsInc.patch() for convenience.

Finally, template functions are augmented to accept a backend property in the options object that can take the value 'idom' for Incremental DOM rendering. This enables usage on the client along the lines of:

var searchPartial = HandlebarsInc.partials['search-main'];
HandlebarsInc.patch(
  document.getElementById('main'),
  searchPartial({ query: 'Node.js', results: [] }, { backend: 'idom' })
);

See https://github.com/jacobstern/handlebars-inc-demo for a full example application.

Technical Details

Handlebars Inc differs from previous Incremental DOM backends for Handlebars in that it forks several components of the Handlebars library to parse and interpret HTML fragments during code generation. As a result, many features of Handlebars are available "for free" and the same compiled template may be used to generate either templated text or Incremental DOM calls.

When the default 'text' backend is invoked, Handlebars Inc builds up a text buffer using a custom implementation of the Incremental DOM API. This has more overhead than the native Handlebars implementation which will have fewer buffer appends and fewer function calls, but I don't expect a serious performance difference in a Node environment. (This hasn't been measured with actual profiling yet.) The advantage of this approach is that code generation and custom helpers only need to implement one code path that targets Incremental DOM rather than always supporting both text and Incremental DOM backends separately.

Status

The project is very new and untested, and not ready for production use. Basic Handlebars functionality is covered in the test suite.

Major Backlog Items

  • [ ] Needs proper documentation #7
  • [ ] Missing TypeScript type definitions #6
  • [ ] Custom helper API unexplored, underdeveloped #8