0.0.1 • Published 5 years ago

wtc-history v0.0.1

Weekly downloads
4
License
MIT
Repository
github
Last release
5 years ago

wtc-history 0.0.1

A simple wrapper for the HTML History API

src/wtc-history.js

new History()

Class representing an abstraction of the history API.

Install

$ npm install wtc-history

Usage

Import it in your project.

import History from 'wtc-history';

The history class is a static class, so we call its methods directly on the class itself rather than instanciate it. First, however, we need to intialise the class:

History.init();

Then we can push history states to it:

History.push('/home'); // The URL is now http://domain.com/home
History.push('/about'); // The URL is now http://domain.com/about
History.push('/about/team'); // The URL is now http://domain.com/about/team

We can also push histroy states that contain a title

History.push('/work', 'Our Work'); // The URL is now http://domain.com/work and the page title is 'Our Work'

Finally, we can also push state data into the history stack. This session data is available using the property History.currentState

History.push('/admin', 'Admin section', {sessionID: 1234567}); // The URL is now http://domain.com/work and the page title is 'Our Work'

If you want to listen to the pop and push states of the History wrapper, just subscribe to WTCHistory-pop and WTCHistory-push on the document. For example:

document.addEventListener('WTCHistory-push', (e) => {
 console.log(e.detail);
});
WTCHistory.push('/home', 'This is the Homepage', {testing: false});
// This will log:
// {
//   historyStateURL: '/home',
//   historyStateTitle: 'This is the Homepage',
//   testing: false
// }

The History object will work with native browser history interactions as well as with programmatic interactions, these can be easily triggered using History.back() and History.forward()

Returns
  • Void

History.emitEvent(eventID, data)

Emits an event from the history object

Parameters
NameTypeDescription
eventIDstringthe event ID to emit 
dataobject= {} the data to include with the event 
Examples
let listener = function(e) {
  console.log(e.detail)
  e.target.removeEventListener(e.type, arguments.callee);
}
document.addEventListener("ajax-get-addedToDom", listener);
Returns
  • Void

History.init(devmode)

Initialises the History class. Nothing should be able to operate here unless this has run with a support = true.

Parameters
NameTypeDescription
devmodebooleanIndicated whether the object is running in dev mode (will log outputs to console) 
Returns
  • boolean Returns whether init ran or not

History.push(URL, title, stateObj)

Construct and push a URL state

Parameters
NameTypeDescription
URLstringThe URL to push, can be relative, absolute or full 
titlestringThe title to push. 
stateObjobjectA state to push to the stack. This will be popped when naviagting back 
Examples
AJAXObj.push('/dev/foo/bar', 'The title for the history object')
Returns
  • boolean Indicates whether the push succeeded

History.back()

Takes the user back to the previous state. Simply wraps the history object's back method.

Returns
  • Void

History.forward()

Takes the user forward to the next state. Simply wraps the history object's forward method.

Returns
  • Void

History._fixURL(URL, includeDocRoot, includeTrails) private method

Takes a provided URL and returns the version that is usable

Parameters
NameTypeDescription
URLstringThe URL to be passed 
includeDocRootboolean= true Whether to include the docroot on the passed URL 
includeTrailsboolean= true Whether to include found hashes and params 
Returns
  • string The passed and formatted URL

URLRegex()

URL Regex works like this:

        ^
        ([^:]+://           # HTTP(S) etc.
            ([^/]+)         # The URL (if available)
        )?
        (#{@documentRoot})? # The document root, which we want to get rid of
        (/)?                # check for the presence of a leading slash
        ([^\#\?]*)          # The URI - this is what we care about. Check for everything except for # and ?
        (\?[^\#]*)?         # any additional URL parameters (optional)
        (\#\!?.+)?          # Any hashbang trailers (optional)
Returns
  • Void

_popstate(e) private method

Listener for the popstate method

Parameters
NameTypeDescription
eobjectthe passed event object 
Returns
  • void

docrootRegex()

docrootRegex works like this:

         ^
         ([^:]+://       # HTTP(S) etc.
             ([^/]+)     # The hostname (if available)
         )?
         /?
         (.*(?=/))?      # the URI to use as the docroot less any available trailing slash
Returns
  • Void

Documentation generated with doxdox.

0.0.1

5 years ago