feat: #8734, add slugify module, deprecate utils.slugify

v1.18.x
Barış Soner Uşaklı 4 years ago
parent f16c8268cf
commit bddfcb5867

@ -0,0 +1,37 @@
'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;
};
}));

@ -330,6 +330,8 @@
return String(str).replace(new RegExp('<(\\/)?(' + (pattern || '[^\\s>]+') + ')(\\s+[^<>]*?)?\\s*(\\/)?>', 'gi'), '');
},
// TODO: remove XRegExp & all these in 1.16.0, they are moved to slugify module
invalidUnicodeChars: XRegExp('[^\\p{L}\\s\\d\\-_]', 'g'),
invalidLatinChars: /[^\w\s\d\-_]/g,
trimRegex: /^\s+|\s+$/g,
@ -338,10 +340,15 @@
trimTrailingDash: /-$/g,
trimLeadingDash: /^-/g,
isLatin: /^[\w\d\s.,\-@]+$/,
languageKeyRegex: /\[\[[\w]+:.+\]\]/,
// http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
slugify: function (str, preserveCase) {
if (typeof module === 'object' && module.exports) {
console.warn('[deprecated] utils.slugify deprecated. Use `require("slugify")` instead');
} else {
console.warn('[deprecated] utils.slugify deprecated. Use `require(["slugify"], function (slugify) { ... })` instead');
}
if (!str) {
return '';
}
@ -397,6 +404,7 @@
return !isNaN(parseFloat(n)) && isFinite(n);
},
languageKeyRegex: /\[\[[\w]+:.+\]\]/,
hasLanguageKey: function (input) {
return utils.languageKeyRegex.test(input);
},

@ -103,6 +103,7 @@ JS.scripts = {
'compare-versions.js': 'node_modules/compare-versions/index.js',
'timeago/locales': 'node_modules/timeago/locales',
'jquery-form.js': 'node_modules/jquery-form/dist/jquery.form.min.js',
'xregexp.js': 'node_modules/xregexp/xregexp-all.js',
},
};

@ -0,0 +1,3 @@
'use strict';
module.exports = require('../public/src/modules/slugify');
Loading…
Cancel
Save