You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
1.1 KiB
JavaScript

'use strict';
(function (factory) {
if (typeof module === 'object' && module.exports) {
module.exports = factory(require('xregexp'));
} else {
define('slugify', ['xregexp'], factory);
}
}(function (XRegExp) {
var invalidUnicodeChars = XRegExp('[^\\p{L}\\s\\d\\-_]', 'g');
var invalidLatinChars = /[^\w\s\d\-_]/g;
var trimRegex = /^\s+|\s+$/g;
var collapseWhitespace = /\s+/g;
var collapseDash = /-+/g;
var trimTrailingDash = /-$/g;
var trimLeadingDash = /^-/g;
var isLatin = /^[\w\d\s.,\-@]+$/;
// http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
return function slugify(str, preserveCase) {
if (!str) {
return '';
}
str = String(str).replace(trimRegex, '');
if (isLatin.test(str)) {
str = str.replace(invalidLatinChars, '-');
} else {
str = XRegExp.replace(str, invalidUnicodeChars, '-');
}
str = !preserveCase ? str.toLocaleLowerCase() : str;
str = str.replace(collapseWhitespace, '-');
str = str.replace(collapseDash, '-');
str = str.replace(trimTrailingDash, '');
str = str.replace(trimLeadingDash, '');
return str;
};
}));