| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- var emoji = require('emoji-regex')
- module.exports = BananaSlug
- function BananaSlug () {
- var self = this
- if (!(self instanceof BananaSlug)) return new BananaSlug()
- self.reset()
- }
- /**
- * Generate a unique slug.
- * @param {string} value String of text to slugify
- * @param {boolean} [false] Keep the current case, otherwise make all lowercase
- * @return {string} A unique slug string
- */
- BananaSlug.prototype.slug = function (value, maintainCase) {
- maintainCase = maintainCase === true
- var self = this
- var slug = slugger(value, maintainCase)
- var occurrences = self.occurrences[slug]
- if (self.occurrences.hasOwnProperty(slug)) {
- occurrences++
- } else {
- occurrences = 0
- }
- self.occurrences[slug] = occurrences
- if (occurrences) {
- slug = slug + '-' + occurrences
- }
- return slug
- }
- /**
- * Reset - Forget all previous slugs
- * @return void
- */
- BananaSlug.prototype.reset = function () {
- this.occurrences = {}
- }
- var whitespace = /\s/g
- function lower (string) {
- return string.toLowerCase()
- }
- function slugger (string, maintainCase) {
- var re = /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g
- var replacement = '-'
- if (typeof string !== 'string') return ''
- if (!maintainCase) string = string.replace(/[A-Z]+/g, lower)
- return string.trim()
- .replace(re, '')
- .replace(emoji(), '')
- .replace(whitespace, replacement)
- }
|