All Projects → bem → bem-history

bem / bem-history

Licence: other
BEM wrap for History API

Programming Languages

javascript
184084 projects - #8 most used programming language
shell
77523 projects
CSS
56736 projects

bem-history

What is this?

BEM wrap for History API:

  • supports browsers with a native History API and hashchange event;
  • provides manipulations with url, browser location and history in the terms of BEM.

Components

  • uri__querystring – module for an url parsing;
  • history – module provides work with a browser History with two modificators:
  • provider_history-api – supports a native History API;
  • provider_hashchange – supports fallback on the hashchange event;
  • location – high-level module for a window.location change.

Scheme of library work

bem-history workflow

Usage

uri__querystring

modules.require(['uri__querystring'], function(Querystring) {

    // Parse url
    var u = Querystring.Uri.parse('http://example.org:8080/path?test=1&test=2&param2=22');

    // Change port
    u.setPort(80);

    // Change query params
    u.deleteParam('test', '2');
    u.replaceParam('param2', 2);

    // Serialize url
    u.toString(); // "http://example.org:80/path?test=1&param2=2"

});

history

modules.require(['history'], function(History) {

    // Create history instance
    var history = new History();

    // Push new or replace history state
    history.changeState('push', { title: 'Title', url: 'http://example.org:8080/path' });
    history.changeState('replace', { title: 'Title', url: 'http://example.org:8080/path?test=1' });

});

location

modules.require(['location'], function(location) {

    // Change `window.location` using a full url
    location.change({ url: 'http://example.org:8080/path' });

    // Change current location using only the new query params
    location.change({ params: { param1: [11,12], param2: 'ololo' } });
    window.location.href; // "http://example.org:8080/path?param1=11&param1=12&param2=ololo"

});
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].