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

@gluon/router

v1.2.1

Published

A minimal router

Downloads

35

Readme

Gluon Router

Build Status NPM Latest version Code Style: prettier

An unopinionated javascript router. If enabled, it intercepts browser navigation to same-origin locations, and exposes a hook to attach callbacks for navigation events. This module implements the bare fundamentals required for frontend navigation, and is not intended to replace a full-featured router.

Includes a miniature polyfill for Event() and Event.prototype.composedPath() for IE11 and Edge.

Compatibility

| Chrome | Safari | Edge | Firefox | IE | | ------ | ------ | ---- | ------- | --- | | ✔ | ✔ | ✔* | ✔ | ✔* |

* Will activate some polyfills when link interception is enabled.

Installation

GluonRouter is available through npm as @gluon/router.

Example Usage

import { interceptLinks, onRouteChange } from '/node_modules/@gluon/router/gluon-router.js';

interceptLinks({
  include: [/^\/my\//, /^\/application\//, /^\/paths\//],
  exclude: [/^\/paths\/that\/should\/reload\//]
});

onRouteChange((path, query, hash) => {
  // Implement page navigation here
});

API

onRouteChange

Registers a callback that will be called whenever any browser navigation happens. The callback is called with the path, query, and hash components of the new location.

You can register as many callbacks as you want.

import { onRouteChange } from '/node_modules/@gluon/router/gluon-router.js';

onRouteChange((path, query, hash) => {
  console.log('PATH: ', path);
  console.log('QUERY: ', query);
  console.log('HASH: ', hash);
});

interceptLinks

Enables link interception. After calling this, the browser will no longer reload when the user clicks on a same-domain link. Instead, the new url will be added to the browser navigation history, and any onRouteChange callbacks are called.

This function has has an optional parameter with two options:

{
  include: <Array> of <RegExp> to paths that should be intercepted
  exclude: <Array> of <RegExp> to paths that should not be intercepted
}

This function may be called multiple times. Each call beyond the first adds the provided included and excluded expressions to the system.

Note: If the include parameter is not defined, all same-domain paths will be intercepted. Pass an empty array [] to avoid enabling interception on all same-domain paths.

import { interceptLinks } from '/node_modules/@gluon/router/gluon-router.js';

// Intercept any links to paths that begin with '/my/', '/application/', or '/paths/'
// But NOT links to paths that begin with '/paths/that/should/reload/'
interceptLinks({
  include: [/^\/my\//, /^\/application\//, /^\/paths\//],
  exclude: [/^\/paths\/that\/should\/reload\//]
});

changeRoute

Updates the browser location and triggers the onRouteChange event handler. This can be used to trigger onRouteChange event handlers from javascript.

import { changeRoute } from '/node_modules/@gluon/router/gluon-router.js';

// If the current url is https://example.com/path?query=value#hash
changeRoute('/new_path?query=new_value#new_hash');

window.location === 'https://example.com/new_path?query=new_value#new_hash';

currentPath

Returns the active path

import { currentPath } from '/node_modules/@gluon/router/gluon-router.js';

// If the current url is https://example.com/path?query=value#hash
currentPath() === '/path';

currentQuery

Returns the active query component

import { currentQuery } from '/node_modules/@gluon/router/gluon-router.js';

// If the current url is https://example.com/path?query=value#hash
currentQuery() === 'query=value';

currentHash

Returns the active hash

import { currentHash } from '/node_modules/@gluon/router/gluon-router.js';

// If the current url is https://example.com/path?query=value#hash
currentHash() === 'hash';

About Gluon

Gluon is a lightweight Web Component library designed for simplicity and speed. It borrows some ideas from Polymer, but is mostly based on platform features.