| // Underscore.string |
| // (c) 2010 Esa-Matti Suuronen <esa-matti aet suuronen dot org> |
| // Underscore.string is freely distributable under the terms of the MIT license. |
| // Documentation: https://github.com/epeli/underscore.string |
| // Some code is borrowed from MooTools and Alexandru Marasteanu. |
| // Version '3.2.3' |
| |
| 'use strict'; |
| |
| function s(value) { |
| /* jshint validthis: true */ |
| if (!(this instanceof s)) return new s(value); |
| this._wrapped = value; |
| } |
| |
| s.VERSION = '3.2.3'; |
| |
| s.isBlank = require('./isBlank'); |
| s.stripTags = require('./stripTags'); |
| s.capitalize = require('./capitalize'); |
| s.decapitalize = require('./decapitalize'); |
| s.chop = require('./chop'); |
| s.trim = require('./trim'); |
| s.clean = require('./clean'); |
| s.cleanDiacritics = require('./cleanDiacritics'); |
| s.count = require('./count'); |
| s.chars = require('./chars'); |
| s.swapCase = require('./swapCase'); |
| s.escapeHTML = require('./escapeHTML'); |
| s.unescapeHTML = require('./unescapeHTML'); |
| s.splice = require('./splice'); |
| s.insert = require('./insert'); |
| s.replaceAll = require('./replaceAll'); |
| s.include = require('./include'); |
| s.join = require('./join'); |
| s.lines = require('./lines'); |
| s.dedent = require('./dedent'); |
| s.reverse = require('./reverse'); |
| s.startsWith = require('./startsWith'); |
| s.endsWith = require('./endsWith'); |
| s.pred = require('./pred'); |
| s.succ = require('./succ'); |
| s.titleize = require('./titleize'); |
| s.camelize = require('./camelize'); |
| s.underscored = require('./underscored'); |
| s.dasherize = require('./dasherize'); |
| s.classify = require('./classify'); |
| s.humanize = require('./humanize'); |
| s.ltrim = require('./ltrim'); |
| s.rtrim = require('./rtrim'); |
| s.truncate = require('./truncate'); |
| s.prune = require('./prune'); |
| s.words = require('./words'); |
| s.pad = require('./pad'); |
| s.lpad = require('./lpad'); |
| s.rpad = require('./rpad'); |
| s.lrpad = require('./lrpad'); |
| s.sprintf = require('./sprintf'); |
| s.vsprintf = require('./vsprintf'); |
| s.toNumber = require('./toNumber'); |
| s.numberFormat = require('./numberFormat'); |
| s.strRight = require('./strRight'); |
| s.strRightBack = require('./strRightBack'); |
| s.strLeft = require('./strLeft'); |
| s.strLeftBack = require('./strLeftBack'); |
| s.toSentence = require('./toSentence'); |
| s.toSentenceSerial = require('./toSentenceSerial'); |
| s.slugify = require('./slugify'); |
| s.surround = require('./surround'); |
| s.quote = require('./quote'); |
| s.unquote = require('./unquote'); |
| s.repeat = require('./repeat'); |
| s.naturalCmp = require('./naturalCmp'); |
| s.levenshtein = require('./levenshtein'); |
| s.toBoolean = require('./toBoolean'); |
| s.exports = require('./exports'); |
| s.escapeRegExp = require('./helper/escapeRegExp'); |
| s.wrap = require('./wrap'); |
| s.map = require('./map'); |
| |
| // Aliases |
| s.strip = s.trim; |
| s.lstrip = s.ltrim; |
| s.rstrip = s.rtrim; |
| s.center = s.lrpad; |
| s.rjust = s.lpad; |
| s.ljust = s.rpad; |
| s.contains = s.include; |
| s.q = s.quote; |
| s.toBool = s.toBoolean; |
| s.camelcase = s.camelize; |
| s.mapChars = s.map; |
| |
| |
| // Implement chaining |
| s.prototype = { |
| value: function value() { |
| return this._wrapped; |
| } |
| }; |
| |
| function fn2method(key, fn) { |
| if (typeof fn !== "function") return; |
| s.prototype[key] = function() { |
| var args = [this._wrapped].concat(Array.prototype.slice.call(arguments)); |
| var res = fn.apply(null, args); |
| // if the result is non-string stop the chain and return the value |
| return typeof res === 'string' ? new s(res) : res; |
| }; |
| } |
| |
| // Copy functions to instance methods for chaining |
| for (var key in s) fn2method(key, s[key]); |
| |
| fn2method("tap", function tap(string, fn) { |
| return fn(string); |
| }); |
| |
| function prototype2method(methodName) { |
| fn2method(methodName, function(context) { |
| var args = Array.prototype.slice.call(arguments, 1); |
| return String.prototype[methodName].apply(context, args); |
| }); |
| } |
| |
| var prototypeMethods = [ |
| "toUpperCase", |
| "toLowerCase", |
| "split", |
| "replace", |
| "slice", |
| "substring", |
| "substr", |
| "concat" |
| ]; |
| |
| for (var method in prototypeMethods) prototype2method(prototypeMethods[method]); |
| |
| |
| module.exports = s; |