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

sluri

v0.6.0

Published

AEM and Apache Sling client-side URI manipulation including support for selectors, suffixes, resourcePath and extentions.

Downloads

545

Readme

SLURI: Sling URI Manipulation Library for AEM and Apache Sling

SLURI Build Status GitHub version Bower version npm version Dependencies SLURI License

SLURI is a client-side URI/URL manipulation library for Adobe Experience Manager (AEM/CQ5) and Apache Sling. SLURI is an implementation of the URL API (see the Mozilla Developer Network: URL documentation) with considerations for the unique URL structure of AEM and Sling applications.

An AEM/Sling URI could look something like http://user:[email protected]/us/en/page.foo.bar.html/biz/baz?a=alpha&b=bravo#charlie. See the documentation for Apache Sling URL decomposition.

SLURI encodes the URL string according to RFC 3986.

Instead of writing repetitive and tedious string manipulation such as:

qs += (qs.indexOf('?') === -1 ? '?' : '&') + key + '=' + value;
url = path.split('.html')[0] + selectors + '.html';

SLURI allows you to write:

sluri.searchParams.append(key, value);
sluri.suffix = '/foo/bar';
sluri.selectors.append('foo');
sluri.selectors.delete('bar');
sluri.extension = 'json';

Using SLURI

SLURI can be be used in three ways: as a global, with AMD and an AMD loader such as RequireJS or Almond, or in CommonJS-like environments that support module.exports such as Node or Grunt.

Include the provided JavaScript and simply instantiate SLURI objects using the new keyword.

Bower

Install with Bower:

bower install sluri --save

NPM

Install with NPM (https://www.npmjs.com/package/sluri):

npm install sluri --save

Global

Include the minified distribution file /dist/sluri.min.js or the expanded development file /src/sluri.js in your project.

var sluri = new SLURI('http://www.nateyolles.com/us/page.foo.bar.html/alpha/bravo');

RequireJS

If required, setup your RequireJS config.js file with the SLURI dependency:

require.config({
    paths: {
        SLURI: 'bower_components/sluri/sluri'
    }
});
require(['sluri'], function(SLURI) {
    var sluri = new SLURI('http://www.nateyolles.com/us/page.foo.bar.html/alpha/bravo');
});

CommonJS

var SLURI = require('sluri');
var sluri = new SLURI('http://www.nateyolles.com/us/page.foo.bar.html/alpha/bravo');

Browser Compatibility

Even though the URL API is listed as experimental, SLURI does not depend on the browser's implementation of the API. SLURI works on all modern browsers and Internet Explorer 9+.

Building SLURI

Tests

SLURI tests are written with Jasmine and run on the PhantomJS headless browser. Tests are run with CircleCI's integration testing platform. Tests can be run locally with:

grunt test

Build

Build SLURI with:

grunt build

API

SLURI implements the URL API with a few additions and modification building upon the URL API to handle selectors, suffixes, resourcePath and extensions. SLURI respects all read-only property definitions. The only alteration in this version is that the implementation of the URLSearchParams interface returns arrays rather than Iterators.

given the following instantiated object for example:
var sluri = new SLURI('http://user:[email protected]:4502/us/en/page.biz.baz.html/foo/bar?alpha=bravo&charlie=delta&echo#foxtrot');

SLURI

SLURI(urlString [, baseURL])

The SLURI object must be instantiated with the new keyword. Throws TypeError if unable to construct a URL.

urlString

String to parse into a URL. Can also be a URL, SLURI, Location or HTMLAnchorElement object.

baseURL

String to use for the origin when parsing urlString into a URL. This parameter is optional but useful if urlString is a relative path. Can also be a URL, SLURI, Location or HTMLAnchorElement object.

SLURI.protocol

getter

sluri.protocol; // returns 'http:'

setter

sluri.protocol = 'https';

SLURI.username

getter

sluri.username; // returns 'user'

setter

sluri.username = 'newuser';

SLURI.password

getter

sluri.password; // returns 'pass'

setter

sluri.password = 'newpass';

SLURI.hostname

getter

sluri.hostname; // returns 'www.nateyolles.com'

setter

sluri.hostname = 'www.example.com';

SLURI.port

getter

sluri.port; // returns '4502'

setter

sluri.port = 4503;

SLURI.host

getter

sluri.host; // returns 'www.nateyolles.com:4502'

setter

sluri.host = 'www.example.com:4503';

SLURI.origin

getter

sluri.origin; // returns 'http://www.nateyolles.com:4502'

setter

read-only

SLURI.pathname

getter

sluri.pathname; // returns '/us/en/page.biz.baz.html'

setter

sluri.pathname = '/fr/fr/example.html';

SLURI.resourcePath

getter

sluri.resourcePath; // returns '/us/en/page'

setter

sluri.resourcePath = '/fr/fr/example';

SLURI.extension

getter

sluri.extension; // returns 'html'

setter

sluri.extension = 'json';

SLURI.selectorString

getter

sluri.selectorString; // returns 'biz.baz'

setter

sluri.selectorString = 'foo.bar';

SLURI.search

getter

sluri.search; // returns '?alpha=bravo&charlie=delta&echo'

getter

sluri.search = '?foo=bar';

SLURI.suffix

getter

sluri.suffix; // returns '/foo/bar'

setter

sluri.suffix = '/biz/baz';

SLURI.hash

getter

sluri.hash; // returns '#foxtrot'

setter

sluri.hash = 'foo';

SLURI.href

getter

sluri.href; // returns 'http://user:[email protected]:4502/us/en/page.biz.baz.html/foo/bar?alpha=bravo&charlie=delta&echo#foxtrot'

setter

sluri.href = 'http://www.example.com/fr/fr/foo.html/bar/biz';

SLURI.toString()

returns {string}

sluri.toString(); // returns 'http://user:[email protected]:4502/us/en/page.biz.baz.html/foo/bar?alpha=bravo&charlie=delta&echo#foxtrot'

SLURISelectors

SLURISelectors(selectorString)

Allows easy access to create, read, update and delete the selectors without having to resort to manual string manipulation.

Selectors are unique to Apache Sling and Adobe Experience Manager, as such there isn't an interface to implement. However, the SLURISelectors API matches the slURLSearchParams API and URLSearchParams interface as closely as possible.

selectorString

The selector string to be deconstructed and manipulated

SLURI.selectors

getter

sluri.selectors; // returns instanceof SLURISelectors

setter

read-only

SLURI.selectors.toString()

returns {string}

sluri.selectors.toString(); // returns 'biz.baz'

SLURI.selectors.has(selector)

selector

The string to check the SLURI object's selectors against

returns {boolean}

sluri.selectors.has('biz'); // returns true

SLURI.selectors.append(selector)

selector

The string to append to the SLURI object's selectors

sluri.selectors.append('qux'); // sluri.selectorString === 'biz.baz.qux'

SLURI.selectors.delete(selector)

selector

The string to delete from the SLURI object's selectors

sluri.selectors.delete('biz'); // sluri.selectorString === 'baz'

SLURI.selectors.values()

returns {array}

sluri.selectors.values(); // returns ['biz', 'baz']

SLURISearchParams

SLURISearchParams(searchString)

The SLURI implementation of the URLSearchParams interface.

Allows easy access to create, read, update and delete querystring parameters without having to resort to manual string manipulation.

Handles multiple values for a given key in the querystring. There are many ways different web frameworks handle this. SLURISearchParams takes the same approach as the SearchParams interface that it is implementing. An example of multiple values is: ?foo=red&bar=blue&foo=green. Calling the #get method will return the first occurrence, while calling the #getAll method will return an array of all values. Calling the #set method with remove all values and create the new one. Calling #delete will remove all values. The #append method is how multiple values can be added to the querystring.

searchString

The querystring to be deconstructed and manipulated

SLURI.searchParams

getter

sluri.searchParams; // returns instanceof SLURISearchParams

setter

read-only

SLURI.searchParams.toString()

returns {string}

sluri.searchParams.toString(); // returns 'alpha=bravo&charlie=delta&echo'

SLURI.searchParams.has(key)

key

The parameter key to check against the querystring to see if it exists

returns {boolean}

sluri.searchParams.has('alpha'); // returns true

SLURI.searchParams.get(key)

key

The parameter key to retrieve the querystring value

returns {string}

sluri.searchParams.get('alpha'); // returns 'bravo'

SLURI.searchParams.getAll(key)

key

The parameter key to retrieve the querystring values

returns {array}

sluri.searchParams.getAll('alpha'); // returns ['bravo']

SLURI.searchParams.keys()

returns {array}

sluri.searchParams.keys(); // returns ['alpha', 'charlie', 'echo']

SLURI.searchParams.values()

returns {array}

sluri.searchParams.values(); // returns ['bravo', 'delta', '']

SLURI.searchParams.set(key, value)

key

The parameter key to set in the querystring

value

The parameter value to set in the querystring for the key

sluri.searchParams.set('alpha', 'golf'); // sluri.search === '?alpha=golf&charlie=delta&echo='

SLURI.searchParams.delete(key)

key

The parameter key to delete from the querystring

sluri.searchParams.set('alpha'); // sluri.search === '?charlie=delta&echo='