handlebars-helper-slugify
Version:
{{slugify}} handlebars helper. Uses the awesome underscore.string to transform text into a URL slug. Replaces whitespaces, accentuated and special characters with a dash.
55 lines (47 loc) • 1.52 kB
JavaScript
/*
* Copyright (c) 2014 Jon Schlinkert
* Licensed under the MIT license.
*
* The code for slugifying was sourced from underscore.string:
* https://github.com/epeli/underscore.string
*/
var nativeTrim = String.prototype.trim;
var escapeRegExp = function (str) {
if (str == null) {
return '';
}
return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
};
var defaultToWhiteSpace = function (characters) {
if (characters == null) {
return '\\s';
} else if (characters.source) {
return characters.source;
} else {
return '[' + escapeRegExp(characters) + ']';
}
};
var trim = function (str, characters) {
if (str == null) {return ''; }
if (!characters && nativeTrim) {
return nativeTrim.call(str);
}
characters = defaultToWhiteSpace(characters);
return String(str).replace(new RegExp('^' + characters + '+|' + characters + '+$', 'g'), '');
};
var dasherize = function(str){
return trim(str).replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase();
};
module.exports = function (str) {
if (str == null) {
return '';
}
var from = "ąàáäâãåæăćęèéëêìíïîłńòóöôõøśșțùúüûñçżź";
var to = "aaaaaaaaaceeeeeiiiilnoooooosstuuuunczz";
var regex = new RegExp(defaultToWhiteSpace(from), 'g');
str = String(str).toLowerCase().replace(regex, function (c) {
var index = from.indexOf(c);
return to.charAt(index) || '-';
});
return dasherize(str.replace(/[^\w\s-]/g, '')).replace(/^\W|\W$/g, '');
};