sluggo

High-speed, unicode-aware, browser-friendly slug generator

Usage no npm install needed!

<script type="module">
  import sluggo from 'https://cdn.skypack.dev/sluggo';
</script>

README

sluggo

Made for ApostropheCMS

sluggo is a slug generator that:

  • Understands Unicode
  • Runs fast (much, much faster than a RegExp solution)
  • Replaces all runs of punctuation (in any language), control characters, whitespace, etc. with single dashes, with no leading or trailing dashes
  • Allows you to let one punctuation character through if you wish, such as a slash for pathnames
  • Allows you to change the separator character
  • Is small enough to include in your browser javascript (<10K), even with the Unicode data

Installation

npm install sluggo

Usage

var sluggo = require('sluggo');

var s = sluggo('@ monkey\'s are elab؉؉orate fools##');
console.log(s);

Outputs:

monkey-s-are-elab-orate-fools

Options

separator

Change the string separator by passing a string (usually one character) to separator.

const sluggo = require('sluggo');

const s = sluggo('monkey\'s are elaborate fools', {
  separator: ','
});
console.log(s);

Outputs:

monkey,s,are,elaborate,fools

allow

Set a single-character string to allow in returned strings. Otherwise all punctuation characters are replaced by the separator.

const sluggo = require('sluggo');

const s = sluggo('@ monkey\'s are elab؉؉orate fools##', {
  allow: '؉'
});
console.log(s);

Outputs:

monkey-s-are-elab؉؉orate-fools

In the Browser

You just want sluggo.js. Add that file to your frontend javascript world.

Now you can call the sluggo() function anywhere.

You do NOT need generator.js, which we will use when the next version of Unicode comes out to update this module.

About ApostropheCMS

sluggo was created at P'unk Avenue for use in ApostropheCMS, an open-source content management system built on Node.js. If you like sanitize-html you should definitely check out Apostrophe.

Support

Feel free to open issues on Github.

Changelog

0.3.1 - 2021-04-23

  • Accepts the empty string as a legitimate value for def, as was always intended, rather than forcing none in that situation. If def is not set at all none is still the fallback default.

0.3.0 - 2020-01-27

  • Updates package.json with new metadata
  • Updates README.

0.2.0

Whoops, the classic apostrophe slugify method accepted allow, not allowed. We just released this today, so I've switched to allow in sluggo as well. However I did bump to 0.2.0 to remain faithful to the semver standard.

0.1.2

Converts to lowercase properly.

0.1.1

Packaged correctly to work in either node or the browser.

0.1.0

Initial release.