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

nanohtml-node

v1.0.1

Published

Get a full DOM object back from nanohtml on the server side

Downloads

12

Readme

nanohtml-node

Get a full DOM object back from nanohtml on the server side.

npm travis standard conduct

About

Currently the nanohtml package returns a string when used in Node.js. The reason is to provide a performant server-rendering experience. What it doesn't allow is easy testing.

This package behaves a little like nanohtml did back when it was called bel. It uses domino, a Node.js implementation of the DOM, so that when using nanohtml it returns a DOM element.

This lets us test our nanohtml elements much more thoroughly than comparing strings. Returning a DOM element allows us to test attributes and event handlers without a bunch of hassle.

Install

npm install --save nanohtml-node

Usage

Here's a very simple example testing interaction with a button click handler:

const test = require('tape')
const html = require('nanohtml-node')

test('test that element', function (t) {
  t.plan(4)

  function onclick (e) {
    t.ok(typeof e === 'object')
    t.ok(e.target.childNodes.length === 1)
    const child = e.target.childNodes[0]
    t.ok(child.nodeValue === 'ok')
  }

  const result = html`<button onclick=${onclick}>ok</button>`
  t.ok(result.outerHTML === '<button>ok</button>')
  result.click()
})

You might not need this

This package is a simple wrapper around domino and nanohtml. You may find that you have slightly different needs than this package allows. The good news is that the code is very small and easy to copy/paste:

const domino = require('domino')
const nanohtml = require('nanohtml/lib/browser')

const dom = domino.createDOMImplementation()
global.document = dom.createHTMLDocument()

module.exports = nanohtml
module.exports.default = module.exports

You can use domino to create a document as part of the setup of your tests instead of relying on this package. Up to you!

Contributing

Contributions are welcome! Please read the contributing guidelines first.

Conduct

It's important that this project contributes to a friendly, safe, and welcoming environment for all, particularly for folks that are historically underrepresented in technology. Read this project's code of conduct

Change log

Read about the changes to this project in CHANGELOG.md. The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Contact

  • chat – You can chat about this project in the #choo irc channel on freenode
  • issues – Please open issues in the issues queue

License

ISC