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

bygone

v1.1.0

Published

Listen for navigation and stream HTML5 location history

Downloads

8

Readme

bygone

Listen for navigation and stream HTML5 history

Build Status npm install js-standard-style

Example

const bygone = require('bygone')

const locationStream = bygone()

locationStream.on('data', console.log(data))

locationStream.write('/path') // navigates browser and emits `/path`

When you call the bygone instance's install() method, it listens for any clicks on a elements, and treats those as pushState events so long as they are in your current host; for example:

<!-- snippet: test.html -->
<a href="/one">One</a>
<a href="/two">Two</a>
<a href="http://www.google.com/">Google</a>
const bygone = require('bygone')

const locationStream = bygone().install()

locationStream.on('data', data => console.log('data'))
  • User clicks on One, and /one is emitted and pushed onto the history state
  • User clicks on Two, and /two is emitted and pushed onto the history state
  • User clicks on Google and nothing is emmitted, and browser navigates to http://www.google.com/

Bygone also listens for popstate events, so forward/back button usage will be emitted as expected.

API

bygone() -> duplexStream

Instances have the following methods:

  • instance.install([opts]) -> instance: Installs the a element listeners, and returns the instance to allow chaining.
    • opts: (object) an optional configuration object. can have the following properties:
      • root: (string) the root URL to watch under; if root is /base/ only urls starting with /base/ will be hooked.
      • el: (domElement) the element onto which the listeners should be installed. Defaults to document.body
  • instance.uninstall() -> instance: Remove the a element listeners.

Advanced Usage

The instance.install method is intentionally simplistic, and available for convenience only. If you wanted something more complex, the tools are available to do this in a very composable fashion:

const through = require('through')
const events = require('dom-delegation-stream')
const cursor = require('object-cursor-stream')
const bygone = require('bygone')

events(document.body, 'click', 'a', {preventDefault: true, stopPropagation: true})
  .pipe(cursor('target.href'))
  .pipe(filterStream('/beep'))
  .pipe(bygone())
    .on('data', data => console.log(data))

function filterStream(base) {
  const stream = through(write)
  const props = ['protocol', 'hostname', 'port']

  return stream

  function write(data) {
    // if the string doesn't start with our base string, drop it
    if (data && data.indexOf(base) !== 0) {
      return
    }

    stream.queue(data)
  }
}

Now when you clicked on any link with a URL starting with /beep, it would be pushed into your history state via bygone, and logged to the console.

License

MIT. See LICENSE for details.