From 7b62d925309436138452573c99dee24bd7732f3c Mon Sep 17 00:00:00 2001 From: Golman Date: Thu, 17 Dec 2015 14:59:57 -0500 Subject: [PATCH 1/6] decamelize implemented, tested and documentation updated --- README.markdown | 11 +++ decamelize.js | 9 ++ dist/underscore.string.js | 168 ++++++++++++++++++++-------------- dist/underscore.string.min.js | 2 +- index.js | 1 + tests/decamelize.js | 14 +++ 6 files changed, 133 insertions(+), 72 deletions(-) create mode 100644 decamelize.js create mode 100644 tests/decamelize.js diff --git a/README.markdown b/README.markdown index dc444939..776b054f 100644 --- a/README.markdown +++ b/README.markdown @@ -418,6 +418,17 @@ camelize("Moz-transform"); camelize("-moz-transform", true); // => "mozTransform" ``` +#### decamelize(string, [seperator="_"]) => string + +Converts camelized string to a decamelized one. + +```javascript +decamelize("theDecamelizeStringMethod"); +// => "the_decamelize_string_method" + +decamelize("webkitTransform", "-"); +// => "webkit-transform" +``` #### classify(string) => string diff --git a/decamelize.js b/decamelize.js new file mode 100644 index 00000000..eeab79a1 --- /dev/null +++ b/decamelize.js @@ -0,0 +1,9 @@ +var decap = require('./decapitalize'); +var trim = require('./trim'); + +module.exports = function decamelize(string, separator) { + string = trim(string).split(/(?=[A-Z])/).map(function(word) { + return decap(word); + }); + return string.join(separator || '_'); +}; diff --git a/dist/underscore.string.js b/dist/underscore.string.js index 05556760..1f93dceb 100644 --- a/dist/underscore.string.js +++ b/dist/underscore.string.js @@ -16,7 +16,7 @@ module.exports = function camelize(str, decapitalize) { } }; -},{"./decapitalize":10,"./trim":62}],2:[function(_dereq_,module,exports){ +},{"./decapitalize":11,"./trim":64}],2:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function capitalize(str, lowercaseRest) { @@ -26,14 +26,14 @@ module.exports = function capitalize(str, lowercaseRest) { return str.charAt(0).toUpperCase() + remainingChars; }; -},{"./helper/makeString":21}],3:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],3:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function chars(str) { return makeString(str).split(''); }; -},{"./helper/makeString":21}],4:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],4:[function(_dereq_,module,exports){ module.exports = function chop(str, step) { if (str == null) return []; str = String(str); @@ -51,14 +51,14 @@ module.exports = function classify(str) { return capitalize(camelize(str.replace(/[\W_]/g, ' ')).replace(/\s/g, '')); }; -},{"./camelize":1,"./capitalize":2,"./helper/makeString":21}],6:[function(_dereq_,module,exports){ +},{"./camelize":1,"./capitalize":2,"./helper/makeString":22}],6:[function(_dereq_,module,exports){ var trim = _dereq_('./trim'); module.exports = function clean(str) { return trim(str).replace(/\s\s+/g, ' '); }; -},{"./trim":62}],7:[function(_dereq_,module,exports){ +},{"./trim":64}],7:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); @@ -82,7 +82,7 @@ module.exports = function cleanDiacritics(str) { }); }; -},{"./helper/makeString":21}],8:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],8:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function(str, substr) { @@ -94,14 +94,25 @@ module.exports = function(str, substr) { return str.split(substr).length - 1; }; -},{"./helper/makeString":21}],9:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],9:[function(_dereq_,module,exports){ var trim = _dereq_('./trim'); module.exports = function dasherize(str) { return trim(str).replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase(); }; -},{"./trim":62}],10:[function(_dereq_,module,exports){ +},{"./trim":64}],10:[function(_dereq_,module,exports){ +var decap = _dereq_('./decapitalize'); +var trim = _dereq_('./trim'); + +module.exports = function decamelize(string, separator) { + string = trim(string).split(/(?=[A-Z])/).map(function(word) { + return decap(word); + }); + return string.join(separator || '_'); +}; + +},{"./decapitalize":11,"./trim":64}],11:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function decapitalize(str) { @@ -109,7 +120,7 @@ module.exports = function decapitalize(str) { return str.charAt(0).toLowerCase() + str.slice(1); }; -},{"./helper/makeString":21}],11:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],12:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); function getIndent(str) { @@ -139,7 +150,7 @@ module.exports = function dedent(str, pattern) { return str.replace(reg, ''); }; -},{"./helper/makeString":21}],12:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],13:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); var toPositive = _dereq_('./helper/toPositive'); @@ -154,7 +165,7 @@ module.exports = function endsWith(str, ends, position) { return position >= 0 && str.indexOf(ends, position) === position; }; -},{"./helper/makeString":21,"./helper/toPositive":23}],13:[function(_dereq_,module,exports){ +},{"./helper/makeString":22,"./helper/toPositive":24}],14:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); var escapeChars = _dereq_('./helper/escapeChars'); var reversedEscapeChars = {}; @@ -174,19 +185,19 @@ module.exports = function escapeHTML(str) { }); }; -},{"./helper/escapeChars":18,"./helper/makeString":21}],14:[function(_dereq_,module,exports){ +},{"./helper/escapeChars":19,"./helper/makeString":22}],15:[function(_dereq_,module,exports){ module.exports = function() { var result = {}; for (var prop in this) { - if (!this.hasOwnProperty(prop) || prop.match(/^(?:include|contains|reverse|join)$/)) continue; + if (!this.hasOwnProperty(prop) || prop.match(/^(?:include|contains|reverse|join|map)$/)) continue; result[prop] = this[prop]; } return result; }; -},{}],15:[function(_dereq_,module,exports){ +},{}],16:[function(_dereq_,module,exports){ // Underscore.string // (c) 2010 Esa-Matti Suuronen // Underscore.string is freely distributable under the terms of the MIT license. @@ -231,6 +242,7 @@ s.pred = _dereq_('./pred'); s.succ = _dereq_('./succ'); s.titleize = _dereq_('./titleize'); s.camelize = _dereq_('./camelize'); +s.decamelize = _dereq_('./decamelize'); s.underscored = _dereq_('./underscored'); s.dasherize = _dereq_('./dasherize'); s.classify = _dereq_('./classify'); @@ -265,6 +277,7 @@ s.toBoolean = _dereq_('./toBoolean'); s.exports = _dereq_('./exports'); s.escapeRegExp = _dereq_('./helper/escapeRegExp'); s.wrap = _dereq_('./wrap'); +s.map = _dereq_('./map'); // Aliases s.strip = s.trim; @@ -277,6 +290,7 @@ s.contains = s.include; s.q = s.quote; s.toBool = s.toBoolean; s.camelcase = s.camelize; +s.mapChars = s.map; // Implement chaining @@ -326,7 +340,7 @@ for (var key in prototypeMethods) prototype2method(prototypeMethods[key]); module.exports = s; -},{"./camelize":1,"./capitalize":2,"./chars":3,"./chop":4,"./classify":5,"./clean":6,"./cleanDiacritics":7,"./count":8,"./dasherize":9,"./decapitalize":10,"./dedent":11,"./endsWith":12,"./escapeHTML":13,"./exports":14,"./helper/escapeRegExp":19,"./humanize":24,"./include":25,"./insert":26,"./isBlank":27,"./join":28,"./levenshtein":29,"./lines":30,"./lpad":31,"./lrpad":32,"./ltrim":33,"./naturalCmp":34,"./numberFormat":35,"./pad":36,"./pred":37,"./prune":38,"./quote":39,"./repeat":40,"./replaceAll":41,"./reverse":42,"./rpad":43,"./rtrim":44,"./slugify":45,"./splice":46,"./sprintf":47,"./startsWith":48,"./strLeft":49,"./strLeftBack":50,"./strRight":51,"./strRightBack":52,"./stripTags":53,"./succ":54,"./surround":55,"./swapCase":56,"./titleize":57,"./toBoolean":58,"./toNumber":59,"./toSentence":60,"./toSentenceSerial":61,"./trim":62,"./truncate":63,"./underscored":64,"./unescapeHTML":65,"./unquote":66,"./vsprintf":67,"./words":68,"./wrap":69}],16:[function(_dereq_,module,exports){ +},{"./camelize":1,"./capitalize":2,"./chars":3,"./chop":4,"./classify":5,"./clean":6,"./cleanDiacritics":7,"./count":8,"./dasherize":9,"./decamelize":10,"./decapitalize":11,"./dedent":12,"./endsWith":13,"./escapeHTML":14,"./exports":15,"./helper/escapeRegExp":20,"./humanize":25,"./include":26,"./insert":27,"./isBlank":28,"./join":29,"./levenshtein":30,"./lines":31,"./lpad":32,"./lrpad":33,"./ltrim":34,"./map":35,"./naturalCmp":36,"./numberFormat":37,"./pad":38,"./pred":39,"./prune":40,"./quote":41,"./repeat":42,"./replaceAll":43,"./reverse":44,"./rpad":45,"./rtrim":46,"./slugify":47,"./splice":48,"./sprintf":49,"./startsWith":50,"./strLeft":51,"./strLeftBack":52,"./strRight":53,"./strRightBack":54,"./stripTags":55,"./succ":56,"./surround":57,"./swapCase":58,"./titleize":59,"./toBoolean":60,"./toNumber":61,"./toSentence":62,"./toSentenceSerial":63,"./trim":64,"./truncate":65,"./underscored":66,"./unescapeHTML":67,"./unquote":68,"./vsprintf":69,"./words":70,"./wrap":71}],17:[function(_dereq_,module,exports){ var makeString = _dereq_('./makeString'); module.exports = function adjacent(str, direction) { @@ -337,7 +351,7 @@ module.exports = function adjacent(str, direction) { return str.slice(0, -1) + String.fromCharCode(str.charCodeAt(str.length - 1) + direction); }; -},{"./makeString":21}],17:[function(_dereq_,module,exports){ +},{"./makeString":22}],18:[function(_dereq_,module,exports){ var escapeRegExp = _dereq_('./escapeRegExp'); module.exports = function defaultToWhiteSpace(characters) { @@ -349,7 +363,7 @@ module.exports = function defaultToWhiteSpace(characters) { return '[' + escapeRegExp(characters) + ']'; }; -},{"./escapeRegExp":19}],18:[function(_dereq_,module,exports){ +},{"./escapeRegExp":20}],19:[function(_dereq_,module,exports){ /* We're explicitly defining the list of entities we want to escape. nbsp is an HTML entity, but we don't want to escape all space characters in a string, hence its omission in this map. @@ -370,14 +384,14 @@ var escapeChars = { module.exports = escapeChars; -},{}],19:[function(_dereq_,module,exports){ +},{}],20:[function(_dereq_,module,exports){ var makeString = _dereq_('./makeString'); module.exports = function escapeRegExp(str) { return makeString(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); }; -},{"./makeString":21}],20:[function(_dereq_,module,exports){ +},{"./makeString":22}],21:[function(_dereq_,module,exports){ /* We're explicitly defining the list of entities that might see in escape HTML strings */ @@ -398,7 +412,7 @@ var htmlEntities = { module.exports = htmlEntities; -},{}],21:[function(_dereq_,module,exports){ +},{}],22:[function(_dereq_,module,exports){ /** * Ensure some object is a coerced to a string **/ @@ -407,7 +421,7 @@ module.exports = function makeString(object) { return '' + object; }; -},{}],22:[function(_dereq_,module,exports){ +},{}],23:[function(_dereq_,module,exports){ module.exports = function strRepeat(str, qty){ if (qty < 1) return ''; var result = ''; @@ -418,12 +432,12 @@ module.exports = function strRepeat(str, qty){ return result; }; -},{}],23:[function(_dereq_,module,exports){ +},{}],24:[function(_dereq_,module,exports){ module.exports = function toPositive(number) { return number < 0 ? 0 : (+number || 0); }; -},{}],24:[function(_dereq_,module,exports){ +},{}],25:[function(_dereq_,module,exports){ var capitalize = _dereq_('./capitalize'); var underscored = _dereq_('./underscored'); var trim = _dereq_('./trim'); @@ -432,7 +446,7 @@ module.exports = function humanize(str) { return capitalize(trim(underscored(str).replace(/_id$/, '').replace(/_/g, ' '))); }; -},{"./capitalize":2,"./trim":62,"./underscored":64}],25:[function(_dereq_,module,exports){ +},{"./capitalize":2,"./trim":64,"./underscored":66}],26:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function include(str, needle) { @@ -440,21 +454,21 @@ module.exports = function include(str, needle) { return makeString(str).indexOf(needle) !== -1; }; -},{"./helper/makeString":21}],26:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],27:[function(_dereq_,module,exports){ var splice = _dereq_('./splice'); module.exports = function insert(str, i, substr) { return splice(str, i, 0, substr); }; -},{"./splice":46}],27:[function(_dereq_,module,exports){ +},{"./splice":48}],28:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function isBlank(str) { return (/^\s*$/).test(makeString(str)); }; -},{"./helper/makeString":21}],28:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],29:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); var slice = [].slice; @@ -465,7 +479,7 @@ module.exports = function join() { return args.join(makeString(separator)); }; -},{"./helper/makeString":21}],29:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],30:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); /** @@ -519,27 +533,27 @@ module.exports = function levenshtein(str1, str2) { return nextCol; }; -},{"./helper/makeString":21}],30:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],31:[function(_dereq_,module,exports){ module.exports = function lines(str) { if (str == null) return []; return String(str).split(/\r\n?|\n/); }; -},{}],31:[function(_dereq_,module,exports){ +},{}],32:[function(_dereq_,module,exports){ var pad = _dereq_('./pad'); module.exports = function lpad(str, length, padStr) { return pad(str, length, padStr); }; -},{"./pad":36}],32:[function(_dereq_,module,exports){ +},{"./pad":38}],33:[function(_dereq_,module,exports){ var pad = _dereq_('./pad'); module.exports = function lrpad(str, length, padStr) { return pad(str, length, padStr, 'both'); }; -},{"./pad":36}],33:[function(_dereq_,module,exports){ +},{"./pad":38}],34:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); var nativeTrimLeft = String.prototype.trimLeft; @@ -551,7 +565,18 @@ module.exports = function ltrim(str, characters) { return str.replace(new RegExp('^' + characters + '+'), ''); }; -},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],34:[function(_dereq_,module,exports){ +},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],35:[function(_dereq_,module,exports){ +var makeString = _dereq_('./helper/makeString'); + +module.exports = function(str, callback) { + str = makeString(str); + + if (str.length === 0 || typeof callback !== 'function') return str; + + return str.replace(/./g, callback); +}; + +},{"./helper/makeString":22}],36:[function(_dereq_,module,exports){ module.exports = function naturalCmp(str1, str2) { if (str1 == str2) return 0; if (!str1) return -1; @@ -582,7 +607,7 @@ module.exports = function naturalCmp(str1, str2) { return str1 < str2 ? -1 : 1; }; -},{}],35:[function(_dereq_,module,exports){ +},{}],37:[function(_dereq_,module,exports){ module.exports = function numberFormat(number, dec, dsep, tsep) { if (isNaN(number) || number == null) return ''; @@ -596,7 +621,7 @@ module.exports = function numberFormat(number, dec, dsep, tsep) { return fnums.replace(/(\d)(?=(?:\d{3})+$)/g, '$1' + tsep) + decimals; }; -},{}],36:[function(_dereq_,module,exports){ +},{}],38:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); var strRepeat = _dereq_('./helper/strRepeat'); @@ -624,14 +649,14 @@ module.exports = function pad(str, length, padStr, type) { } }; -},{"./helper/makeString":21,"./helper/strRepeat":22}],37:[function(_dereq_,module,exports){ +},{"./helper/makeString":22,"./helper/strRepeat":23}],39:[function(_dereq_,module,exports){ var adjacent = _dereq_('./helper/adjacent'); module.exports = function succ(str) { return adjacent(str, -1); }; -},{"./helper/adjacent":16}],38:[function(_dereq_,module,exports){ +},{"./helper/adjacent":17}],40:[function(_dereq_,module,exports){ /** * _s.prune: a more elegant version of truncate * prune extra chars, never leaving a half-chopped word. @@ -660,14 +685,14 @@ module.exports = function prune(str, length, pruneStr) { return (template + pruneStr).length > str.length ? str : str.slice(0, template.length) + pruneStr; }; -},{"./helper/makeString":21,"./rtrim":44}],39:[function(_dereq_,module,exports){ +},{"./helper/makeString":22,"./rtrim":46}],41:[function(_dereq_,module,exports){ var surround = _dereq_('./surround'); module.exports = function quote(str, quoteChar) { return surround(str, quoteChar || '"'); }; -},{"./surround":55}],40:[function(_dereq_,module,exports){ +},{"./surround":57}],42:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); var strRepeat = _dereq_('./helper/strRepeat'); @@ -684,7 +709,7 @@ module.exports = function repeat(str, qty, separator) { return repeat.join(separator); }; -},{"./helper/makeString":21,"./helper/strRepeat":22}],41:[function(_dereq_,module,exports){ +},{"./helper/makeString":22,"./helper/strRepeat":23}],43:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function replaceAll(str, find, replace, ignorecase) { @@ -694,21 +719,21 @@ module.exports = function replaceAll(str, find, replace, ignorecase) { return makeString(str).replace(reg, replace); }; -},{"./helper/makeString":21}],42:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],44:[function(_dereq_,module,exports){ var chars = _dereq_('./chars'); module.exports = function reverse(str) { return chars(str).reverse().join(''); }; -},{"./chars":3}],43:[function(_dereq_,module,exports){ +},{"./chars":3}],45:[function(_dereq_,module,exports){ var pad = _dereq_('./pad'); module.exports = function rpad(str, length, padStr) { return pad(str, length, padStr, 'right'); }; -},{"./pad":36}],44:[function(_dereq_,module,exports){ +},{"./pad":38}],46:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); var nativeTrimRight = String.prototype.trimRight; @@ -720,7 +745,7 @@ module.exports = function rtrim(str, characters) { return str.replace(new RegExp(characters + '+$'), ''); }; -},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],45:[function(_dereq_,module,exports){ +},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],47:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); var trim = _dereq_('./trim'); @@ -731,7 +756,7 @@ module.exports = function slugify(str) { return trim(dasherize(cleanDiacritics(str).replace(/[^\w\s-]/g, '-').toLowerCase()), '-'); }; -},{"./cleanDiacritics":7,"./dasherize":9,"./helper/defaultToWhiteSpace":17,"./helper/makeString":21,"./trim":62}],46:[function(_dereq_,module,exports){ +},{"./cleanDiacritics":7,"./dasherize":9,"./helper/defaultToWhiteSpace":18,"./helper/makeString":22,"./trim":64}],48:[function(_dereq_,module,exports){ var chars = _dereq_('./chars'); module.exports = function splice(str, i, howmany, substr) { @@ -740,7 +765,7 @@ module.exports = function splice(str, i, howmany, substr) { return arr.join(''); }; -},{"./chars":3}],47:[function(_dereq_,module,exports){ +},{"./chars":3}],49:[function(_dereq_,module,exports){ // sprintf() for JavaScript 0.7-beta1 // http://www.diveintojavascript.com/projects/javascript-sprintf // @@ -866,7 +891,7 @@ var sprintf = (function() { module.exports = sprintf; -},{"./helper/strRepeat":22}],48:[function(_dereq_,module,exports){ +},{"./helper/strRepeat":23}],50:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); var toPositive = _dereq_('./helper/toPositive'); @@ -877,7 +902,7 @@ module.exports = function startsWith(str, starts, position) { return str.lastIndexOf(starts, position) === position; }; -},{"./helper/makeString":21,"./helper/toPositive":23}],49:[function(_dereq_,module,exports){ +},{"./helper/makeString":22,"./helper/toPositive":24}],51:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function strLeft(str, sep) { @@ -887,7 +912,7 @@ module.exports = function strLeft(str, sep) { return~ pos ? str.slice(0, pos) : str; }; -},{"./helper/makeString":21}],50:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],52:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function strLeftBack(str, sep) { @@ -897,7 +922,7 @@ module.exports = function strLeftBack(str, sep) { return~ pos ? str.slice(0, pos) : str; }; -},{"./helper/makeString":21}],51:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],53:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function strRight(str, sep) { @@ -907,7 +932,7 @@ module.exports = function strRight(str, sep) { return~ pos ? str.slice(pos + sep.length, str.length) : str; }; -},{"./helper/makeString":21}],52:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],54:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function strRightBack(str, sep) { @@ -917,26 +942,26 @@ module.exports = function strRightBack(str, sep) { return~ pos ? str.slice(pos + sep.length, str.length) : str; }; -},{"./helper/makeString":21}],53:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],55:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function stripTags(str) { return makeString(str).replace(/<\/?[^>]+>/g, ''); }; -},{"./helper/makeString":21}],54:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],56:[function(_dereq_,module,exports){ var adjacent = _dereq_('./helper/adjacent'); module.exports = function succ(str) { return adjacent(str, 1); }; -},{"./helper/adjacent":16}],55:[function(_dereq_,module,exports){ +},{"./helper/adjacent":17}],57:[function(_dereq_,module,exports){ module.exports = function surround(str, wrapper) { return [wrapper, str, wrapper].join(''); }; -},{}],56:[function(_dereq_,module,exports){ +},{}],58:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function swapCase(str) { @@ -945,7 +970,7 @@ module.exports = function swapCase(str) { }); }; -},{"./helper/makeString":21}],57:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],59:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function titleize(str) { @@ -954,7 +979,7 @@ module.exports = function titleize(str) { }); }; -},{"./helper/makeString":21}],58:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],60:[function(_dereq_,module,exports){ var trim = _dereq_('./trim'); function boolMatch(s, matchers) { @@ -976,7 +1001,7 @@ module.exports = function toBoolean(str, trueValues, falseValues) { if (boolMatch(str, falseValues || ["false", "0"])) return false; }; -},{"./trim":62}],59:[function(_dereq_,module,exports){ +},{"./trim":64}],61:[function(_dereq_,module,exports){ var trim = _dereq_('./trim'); module.exports = function toNumber(num, precision) { @@ -985,7 +1010,7 @@ module.exports = function toNumber(num, precision) { return Math.round(num * factor) / factor; }; -},{"./trim":62}],60:[function(_dereq_,module,exports){ +},{"./trim":64}],62:[function(_dereq_,module,exports){ var rtrim = _dereq_('./rtrim'); module.exports = function toSentence(array, separator, lastSeparator, serial) { @@ -999,14 +1024,14 @@ module.exports = function toSentence(array, separator, lastSeparator, serial) { return a.length ? a.join(separator) + lastSeparator + lastMember : lastMember; }; -},{"./rtrim":44}],61:[function(_dereq_,module,exports){ +},{"./rtrim":46}],63:[function(_dereq_,module,exports){ var toSentence = _dereq_('./toSentence'); module.exports = function toSentenceSerial(array, sep, lastSep) { return toSentence(array, sep, lastSep, true); }; -},{"./toSentence":60}],62:[function(_dereq_,module,exports){ +},{"./toSentence":62}],64:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); var nativeTrim = String.prototype.trim; @@ -1018,7 +1043,7 @@ module.exports = function trim(str, characters) { return str.replace(new RegExp('^' + characters + '+|' + characters + '+$', 'g'), ''); }; -},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],63:[function(_dereq_,module,exports){ +},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],65:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); module.exports = function truncate(str, length, truncateStr) { @@ -1028,14 +1053,14 @@ module.exports = function truncate(str, length, truncateStr) { return str.length > length ? str.slice(0, length) + truncateStr : str; }; -},{"./helper/makeString":21}],64:[function(_dereq_,module,exports){ +},{"./helper/makeString":22}],66:[function(_dereq_,module,exports){ var trim = _dereq_('./trim'); module.exports = function underscored(str) { return trim(str).replace(/([a-z\d])([A-Z]+)/g, '$1_$2').replace(/[-\s]+/g, '_').toLowerCase(); }; -},{"./trim":62}],65:[function(_dereq_,module,exports){ +},{"./trim":64}],67:[function(_dereq_,module,exports){ var makeString = _dereq_('./helper/makeString'); var htmlEntities = _dereq_('./helper/htmlEntities'); @@ -1055,7 +1080,7 @@ module.exports = function unescapeHTML(str) { }); }; -},{"./helper/htmlEntities":20,"./helper/makeString":21}],66:[function(_dereq_,module,exports){ +},{"./helper/htmlEntities":21,"./helper/makeString":22}],68:[function(_dereq_,module,exports){ module.exports = function unquote(str, quoteChar) { quoteChar = quoteChar || '"'; if (str[0] === quoteChar && str[str.length - 1] === quoteChar) @@ -1063,7 +1088,7 @@ module.exports = function unquote(str, quoteChar) { else return str; }; -},{}],67:[function(_dereq_,module,exports){ +},{}],69:[function(_dereq_,module,exports){ var sprintf = _dereq_('./sprintf'); module.exports = function vsprintf(fmt, argv) { @@ -1071,7 +1096,7 @@ module.exports = function vsprintf(fmt, argv) { return sprintf.apply(null, argv); }; -},{"./sprintf":47}],68:[function(_dereq_,module,exports){ +},{"./sprintf":49}],70:[function(_dereq_,module,exports){ var isBlank = _dereq_('./isBlank'); var trim = _dereq_('./trim'); @@ -1080,11 +1105,11 @@ module.exports = function words(str, delimiter) { return trim(str, delimiter).split(delimiter || /\s+/); }; -},{"./isBlank":27,"./trim":62}],69:[function(_dereq_,module,exports){ +},{"./isBlank":28,"./trim":64}],71:[function(_dereq_,module,exports){ // Wrap // wraps a string by a certain width -makeString = _dereq_('./helper/makeString'); +var makeString = _dereq_('./helper/makeString'); module.exports = function wrap(str, options){ str = makeString(str); @@ -1181,6 +1206,7 @@ module.exports = function wrap(str, options){ return result; } }; -},{"./helper/makeString":21}]},{},[15]) -(15) + +},{"./helper/makeString":22}]},{},[16]) +(16) }); \ No newline at end of file diff --git a/dist/underscore.string.min.js b/dist/underscore.string.min.js index cba8286e..13218a00 100644 --- a/dist/underscore.string.min.js +++ b/dist/underscore.string.min.js @@ -1,3 +1,3 @@ /* underscore.string 3.2.2 | MIT licensed | http://epeli.github.com/underscore.string/ */ -!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var r;"undefined"!=typeof window?r=window:"undefined"!=typeof global?r=global:"undefined"!=typeof self&&(r=self),r.s=e()}}(function(){return function e(r,t,n){function i(o,u){if(!t[o]){if(!r[o]){var c="function"==typeof require&&require;if(!u&&c)return c(o,!0);if(a)return a(o,!0);throw new Error("Cannot find module '"+o+"'")}var p=t[o]={exports:{}};r[o][0].call(p.exports,function(e){var t=r[o][1][e];return i(t?t:e)},p,p.exports,e,r,t,n)}return t[o].exports}for(var a="function"==typeof require&&require,o=0;o0?e.match(new RegExp(".{1,"+r+"}","g")):[e])}},{}],5:[function(e,r){var t=e("./capitalize"),n=e("./camelize"),i=e("./helper/makeString");r.exports=function(e){return e=i(e),t(n(e.replace(/[\W_]/g," ")).replace(/\s/g,""))}},{"./camelize":1,"./capitalize":2,"./helper/makeString":21}],6:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/\s\s+/g," ")}},{"./trim":62}],7:[function(e,r){var t=e("./helper/makeString"),n="ąàáäâãåæăćčĉęèéëêĝĥìíïîĵłľńňòóöőôõðøśșšŝťțŭùúüűûñÿýçżźž",i="aaaaaaaaaccceeeeeghiiiijllnnoooooooossssttuuuuuunyyczzz";n+=n.toUpperCase(),i+=i.toUpperCase(),i=i.split(""),n+="ß",i.push("ss"),r.exports=function(e){return t(e).replace(/.{1}/g,function(e){var r=n.indexOf(e);return-1===r?e:i[r]})}},{"./helper/makeString":21}],8:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return e=t(e),r=t(r),0===e.length||0===r.length?0:e.split(r).length-1}},{"./helper/makeString":21}],9:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([A-Z])/g,"-$1").replace(/[-_\s]+/g,"-").toLowerCase()}},{"./trim":62}],10:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return e=t(e),e.charAt(0).toLowerCase()+e.slice(1)}},{"./helper/makeString":21}],11:[function(e,r){function t(e){for(var r=e.match(/^[\s\\t]*/gm),t=r[0].length,n=1;n=0&&e.indexOf(r,i)===i}},{"./helper/makeString":21,"./helper/toPositive":23}],13:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/escapeChars"),i="[";for(var a in n)i+=a;i+="]";var o=new RegExp(i,"g");r.exports=function(e){return t(e).replace(o,function(e){return"&"+n[e]+";"})}},{"./helper/escapeChars":18,"./helper/makeString":21}],14:[function(e,r){r.exports=function(){var e={};for(var r in this)this.hasOwnProperty(r)&&!r.match(/^(?:include|contains|reverse|join)$/)&&(e[r]=this[r]);return e}},{}],15:[function(e,r){"use strict";function t(e){return this instanceof t?void(this._wrapped=e):new t(e)}function n(e,r){"function"==typeof r&&(t.prototype[e]=function(){var e=[this._wrapped].concat(Array.prototype.slice.call(arguments)),n=r.apply(null,e);return"string"==typeof n?new t(n):n})}function i(e){n(e,function(r){var t=Array.prototype.slice.call(arguments,1);return String.prototype[e].apply(r,t)})}t.VERSION="3.2.2",t.isBlank=e("./isBlank"),t.stripTags=e("./stripTags"),t.capitalize=e("./capitalize"),t.decapitalize=e("./decapitalize"),t.chop=e("./chop"),t.trim=e("./trim"),t.clean=e("./clean"),t.cleanDiacritics=e("./cleanDiacritics"),t.count=e("./count"),t.chars=e("./chars"),t.swapCase=e("./swapCase"),t.escapeHTML=e("./escapeHTML"),t.unescapeHTML=e("./unescapeHTML"),t.splice=e("./splice"),t.insert=e("./insert"),t.replaceAll=e("./replaceAll"),t.include=e("./include"),t.join=e("./join"),t.lines=e("./lines"),t.dedent=e("./dedent"),t.reverse=e("./reverse"),t.startsWith=e("./startsWith"),t.endsWith=e("./endsWith"),t.pred=e("./pred"),t.succ=e("./succ"),t.titleize=e("./titleize"),t.camelize=e("./camelize"),t.underscored=e("./underscored"),t.dasherize=e("./dasherize"),t.classify=e("./classify"),t.humanize=e("./humanize"),t.ltrim=e("./ltrim"),t.rtrim=e("./rtrim"),t.truncate=e("./truncate"),t.prune=e("./prune"),t.words=e("./words"),t.pad=e("./pad"),t.lpad=e("./lpad"),t.rpad=e("./rpad"),t.lrpad=e("./lrpad"),t.sprintf=e("./sprintf"),t.vsprintf=e("./vsprintf"),t.toNumber=e("./toNumber"),t.numberFormat=e("./numberFormat"),t.strRight=e("./strRight"),t.strRightBack=e("./strRightBack"),t.strLeft=e("./strLeft"),t.strLeftBack=e("./strLeftBack"),t.toSentence=e("./toSentence"),t.toSentenceSerial=e("./toSentenceSerial"),t.slugify=e("./slugify"),t.surround=e("./surround"),t.quote=e("./quote"),t.unquote=e("./unquote"),t.repeat=e("./repeat"),t.naturalCmp=e("./naturalCmp"),t.levenshtein=e("./levenshtein"),t.toBoolean=e("./toBoolean"),t.exports=e("./exports"),t.escapeRegExp=e("./helper/escapeRegExp"),t.wrap=e("./wrap"),t.strip=t.trim,t.lstrip=t.ltrim,t.rstrip=t.rtrim,t.center=t.lrpad,t.rjust=t.lpad,t.ljust=t.rpad,t.contains=t.include,t.q=t.quote,t.toBool=t.toBoolean,t.camelcase=t.camelize,t.prototype={value:function(){return this._wrapped}};for(var a in t)n(a,t[a]);n("tap",function(e,r){return r(e)});var o=["toUpperCase","toLowerCase","split","replace","slice","substring","substr","concat"];for(var a in o)i(o[a]);r.exports=t},{"./camelize":1,"./capitalize":2,"./chars":3,"./chop":4,"./classify":5,"./clean":6,"./cleanDiacritics":7,"./count":8,"./dasherize":9,"./decapitalize":10,"./dedent":11,"./endsWith":12,"./escapeHTML":13,"./exports":14,"./helper/escapeRegExp":19,"./humanize":24,"./include":25,"./insert":26,"./isBlank":27,"./join":28,"./levenshtein":29,"./lines":30,"./lpad":31,"./lrpad":32,"./ltrim":33,"./naturalCmp":34,"./numberFormat":35,"./pad":36,"./pred":37,"./prune":38,"./quote":39,"./repeat":40,"./replaceAll":41,"./reverse":42,"./rpad":43,"./rtrim":44,"./slugify":45,"./splice":46,"./sprintf":47,"./startsWith":48,"./strLeft":49,"./strLeftBack":50,"./strRight":51,"./strRightBack":52,"./stripTags":53,"./succ":54,"./surround":55,"./swapCase":56,"./titleize":57,"./toBoolean":58,"./toNumber":59,"./toSentence":60,"./toSentenceSerial":61,"./trim":62,"./truncate":63,"./underscored":64,"./unescapeHTML":65,"./unquote":66,"./vsprintf":67,"./words":68,"./wrap":69}],16:[function(e,r){var t=e("./makeString");r.exports=function(e,r){return e=t(e),0===e.length?"":e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+r)}},{"./makeString":21}],17:[function(e,r){var t=e("./escapeRegExp");r.exports=function(e){return null==e?"\\s":e.source?e.source:"["+t(e)+"]"}},{"./escapeRegExp":19}],18:[function(e,r){var t={"¢":"cent","£":"pound","¥":"yen","€":"euro","©":"copy","®":"reg","<":"lt",">":"gt",'"':"quot","&":"amp","'":"#39"};r.exports=t},{}],19:[function(e,r){var t=e("./makeString");r.exports=function(e){return t(e).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}},{"./makeString":21}],20:[function(e,r){var t={nbsp:" ",cent:"¢",pound:"£",yen:"¥",euro:"€",copy:"©",reg:"®",lt:"<",gt:">",quot:'"',amp:"&",apos:"'"};r.exports=t},{}],21:[function(e,r){r.exports=function(e){return null==e?"":""+e}},{}],22:[function(e,r){r.exports=function(e,r){if(1>r)return"";for(var t="";r>0;)1&r&&(t+=e),r>>=1,e+=e;return t}},{}],23:[function(e,r){r.exports=function(e){return 0>e?0:+e||0}},{}],24:[function(e,r){var t=e("./capitalize"),n=e("./underscored"),i=e("./trim");r.exports=function(e){return t(i(n(e).replace(/_id$/,"").replace(/_/g," ")))}},{"./capitalize":2,"./trim":62,"./underscored":64}],25:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return""===r?!0:-1!==t(e).indexOf(r)}},{"./helper/makeString":21}],26:[function(e,r){var t=e("./splice");r.exports=function(e,r,n){return t(e,r,0,n)}},{"./splice":46}],27:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return/^\s*$/.test(t(e))}},{"./helper/makeString":21}],28:[function(e,r){var t=e("./helper/makeString"),n=[].slice;r.exports=function(){var e=n.call(arguments),r=e.shift();return e.join(t(r))}},{"./helper/makeString":21}],29:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){"use strict";if(e=t(e),r=t(r),e===r)return 0;if(!e||!r)return Math.max(e.length,r.length);for(var n=new Array(r.length+1),i=0;ic&&(a=c),c=n[o+1]+1,a>c&&(a=c),n[o]=u}n[o]=a}return a}},{"./helper/makeString":21}],30:[function(e,r){r.exports=function(e){return null==e?[]:String(e).split(/\r\n?|\n/)}},{}],31:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n)}},{"./pad":36}],32:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"both")}},{"./pad":36}],33:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimLeft;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+"),""))}},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],34:[function(e,r){r.exports=function(e,r){if(e==r)return 0;if(!e)return-1;if(!r)return 1;for(var t=/(\.\d+|\d+|\D+)/g,n=String(e).match(t),i=String(r).match(t),a=Math.min(n.length,i.length),o=0;a>o;o++){var u=n[o],c=i[o];if(u!==c){var p=+u,s=+c;return p===p&&s===s?p>s?1:-1:c>u?-1:1}}return n.length!=i.length?n.length-i.length:r>e?-1:1}},{}],35:[function(e,r){r.exports=function(e,r,t,n){if(isNaN(e)||null==e)return"";e=e.toFixed(~~r),n="string"==typeof n?n:",";var i=e.split("."),a=i[0],o=i[1]?(t||".")+i[1]:"";return a.replace(/(\d)(?=(?:\d{3})+$)/g,"$1"+n)+o}},{}],36:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function(e,r,i,a){e=t(e),r=~~r;var o=0;switch(i?i.length>1&&(i=i.charAt(0)):i=" ",a){case"right":return o=r-e.length,e+n(i,o);case"both":return o=r-e.length,n(i,Math.ceil(o/2))+e+n(i,Math.floor(o/2));default:return o=r-e.length,n(i,o)+e}}},{"./helper/makeString":21,"./helper/strRepeat":22}],37:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,-1)}},{"./helper/adjacent":16}],38:[function(e,r){var t=e("./helper/makeString"),n=e("./rtrim");r.exports=function(e,r,i){if(e=t(e),r=~~r,i=null!=i?String(i):"...",e.length<=r)return e;var a=function(e){return e.toUpperCase()!==e.toLowerCase()?"A":" "},o=e.slice(0,r+1).replace(/.(?=\W*\w*$)/g,a);return o=o.slice(o.length-2).match(/\w\w/)?o.replace(/\s*\S+$/,""):n(o.slice(0,o.length-1)),(o+i).length>e.length?e:e.slice(0,o.length)+i}},{"./helper/makeString":21,"./rtrim":44}],39:[function(e,r){var t=e("./surround");r.exports=function(e,r){return t(e,r||'"')}},{"./surround":55}],40:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function i(e,r,a){if(e=t(e),r=~~r,null==a)return n(e,r);for(var i=[];r>0;i[--r]=e);return i.join(a)}},{"./helper/makeString":21,"./helper/strRepeat":22}],41:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n,i){var a=i===!0?"gi":"g",o=new RegExp(r,a);return t(e).replace(o,n)}},{"./helper/makeString":21}],42:[function(e,r){var t=e("./chars");r.exports=function(e){return t(e).reverse().join("")}},{"./chars":3}],43:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"right")}},{"./pad":36}],44:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimRight;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp(r+"+$"),""))}},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],45:[function(e,r){var t=(e("./helper/makeString"),e("./helper/defaultToWhiteSpace"),e("./trim")),n=e("./dasherize"),i=e("./cleanDiacritics");r.exports=function(e){return t(n(i(e).replace(/[^\w\s-]/g,"-").toLowerCase()),"-")}},{"./cleanDiacritics":7,"./dasherize":9,"./helper/defaultToWhiteSpace":17,"./helper/makeString":21,"./trim":62}],46:[function(e,r){var t=e("./chars");r.exports=function(e,r,n,i){var a=t(e);return a.splice(~~r,~~n,i),a.join("")}},{"./chars":3}],47:[function(e,r){var t=e("./helper/strRepeat"),n=Object.prototype.toString,i=function(){function e(e){return n.call(e).slice(8,-1).toLowerCase()}var r=t,a=function(){return a.cache.hasOwnProperty(arguments[0])||(a.cache[arguments[0]]=a.parse(arguments[0])),a.format.call(null,a.cache[arguments[0]],arguments)};return a.format=function(t,n){var a,o,u,c,p,s,l,f=1,h=t.length,g="",m=[];for(o=0;h>o;o++)if(g=e(t[o]),"string"===g)m.push(t[o]);else if("array"===g){if(c=t[o],c[2])for(a=n[f],u=0;u=0?"+"+a:a,s=c[4]?"0"==c[4]?"0":c[4].charAt(1):" ",l=c[6]-String(a).length,p=c[6]?r(s,l):"",m.push(c[5]?a+p:p+a)}return m.join("")},a.cache={},a.parse=function(e){for(var r=e,t=[],n=[],i=0;r;){if(null!==(t=/^[^\x25]+/.exec(r)))n.push(t[0]);else if(null!==(t=/^\x25{2}/.exec(r)))n.push("%");else{if(null===(t=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(r)))throw new Error("[_.sprintf] huh?");if(t[2]){i|=1;var a=[],o=t[2],u=[];if(null===(u=/^([a-z_][a-z_\d]*)/i.exec(o)))throw new Error("[_.sprintf] huh?");for(a.push(u[1]);""!==(o=o.substring(u[0].length));)if(null!==(u=/^\.([a-z_][a-z_\d]*)/i.exec(o)))a.push(u[1]);else{if(null===(u=/^\[(\d+)\]/.exec(o)))throw new Error("[_.sprintf] huh?");a.push(u[1])}t[2]=a}else i|=2;if(3===i)throw new Error("[_.sprintf] mixing positional and named placeholders is not (yet) supported");n.push(t)}r=r.substring(t[0].length)}return n},a}();r.exports=i},{"./helper/strRepeat":22}],48:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/toPositive");r.exports=function(e,r,i){return e=t(e),r=""+r,i=null==i?0:Math.min(n(i),e.length),e.lastIndexOf(r,i)===i}},{"./helper/makeString":21,"./helper/toPositive":23}],49:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(0,n):e}},{"./helper/makeString":21}],50:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=e.lastIndexOf(r);return~n?e.slice(0,n):e}},{"./helper/makeString":21}],51:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":21}],52:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.lastIndexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":21}],53:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/<\/?[^>]+>/g,"")}},{"./helper/makeString":21}],54:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,1)}},{"./helper/adjacent":16}],55:[function(e,r){r.exports=function(e,r){return[r,e,r].join("")}},{}],56:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/\S/g,function(e){return e===e.toUpperCase()?e.toLowerCase():e.toUpperCase()})}},{"./helper/makeString":21}],57:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).toLowerCase().replace(/(?:^|\s|-)\S/g,function(e){return e.toUpperCase()})}},{"./helper/makeString":21}],58:[function(e,r){function t(e,r){var t,n,i=e.toLowerCase();for(r=[].concat(r),t=0;t2&&i&&(n=t(r)+n),a.length?a.join(r)+n+o:o}},{"./rtrim":44}],61:[function(e,r){var t=e("./toSentence");r.exports=function(e,r,n){return t(e,r,n,!0)}},{"./toSentence":60}],62:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trim;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+|"+r+"+$","g"),""))}},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],63:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n){return e=t(e),n=n||"...",r=~~r,e.length>r?e.slice(0,r)+n:e}},{"./helper/makeString":21}],64:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}},{"./trim":62}],65:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/htmlEntities");r.exports=function(e){return t(e).replace(/\&([^;]+);/g,function(e,r){var t;return r in n?n[r]:(t=r.match(/^#x([\da-fA-F]+)$/))?String.fromCharCode(parseInt(t[1],16)):(t=r.match(/^#(\d+)$/))?String.fromCharCode(~~t[1]):e})}},{"./helper/htmlEntities":20,"./helper/makeString":21}],66:[function(e,r){r.exports=function(e,r){return r=r||'"',e[0]===r&&e[e.length-1]===r?e.slice(1,e.length-1):e}},{}],67:[function(e,r){var t=e("./sprintf");r.exports=function(e,r){return r.unshift(e),t.apply(null,r)}},{"./sprintf":47}],68:[function(e,r){var t=e("./isBlank"),n=e("./trim");r.exports=function(e,r){return t(e)?[]:n(e,r).split(r||/\s+/)}},{"./isBlank":27,"./trim":62}],69:[function(e,r){makeString=e("./helper/makeString"),r.exports=function(e,r){if(e=makeString(e),r=r||{},width=r.width||75,seperator=r.seperator||"\n",cut=r.cut||!1,preserveSpaces=r.preserveSpaces||!1,trailingSpaces=r.trailingSpaces||!1,0>=width)return e;if(cut){for(index=0,result="";index0&&(result+=seperator),result+=e.charAt(index),index++;if(trailingSpaces)for(;index%width>0;)result+=" ",index++;return result}for(words=e.split(" "),result="",current_column=0;words.length>0;){if(1+words[0].length+current_column>width&¤t_column>0){if(preserveSpaces)result+=" ",current_column++;else if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;result+=seperator,current_column=0}current_column>0&&(result+=" ",current_column++),result+=words[0],current_column+=words[0].length,words.shift()}if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;return result}},{"./helper/makeString":21}]},{},[15])(15)}); \ No newline at end of file +!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var r;"undefined"!=typeof window?r=window:"undefined"!=typeof global?r=global:"undefined"!=typeof self&&(r=self),r.s=e()}}(function(){return function e(r,t,n){function i(o,u){if(!t[o]){if(!r[o]){var p="function"==typeof require&&require;if(!u&&p)return p(o,!0);if(a)return a(o,!0);throw new Error("Cannot find module '"+o+"'")}var c=t[o]={exports:{}};r[o][0].call(c.exports,function(e){var t=r[o][1][e];return i(t?t:e)},c,c.exports,e,r,t,n)}return t[o].exports}for(var a="function"==typeof require&&require,o=0;o0?e.match(new RegExp(".{1,"+r+"}","g")):[e])}},{}],5:[function(e,r){var t=e("./capitalize"),n=e("./camelize"),i=e("./helper/makeString");r.exports=function(e){return e=i(e),t(n(e.replace(/[\W_]/g," ")).replace(/\s/g,""))}},{"./camelize":1,"./capitalize":2,"./helper/makeString":22}],6:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/\s\s+/g," ")}},{"./trim":64}],7:[function(e,r){var t=e("./helper/makeString"),n="ąàáäâãåæăćčĉęèéëêĝĥìíïîĵłľńňòóöőôõðøśșšŝťțŭùúüűûñÿýçżźž",i="aaaaaaaaaccceeeeeghiiiijllnnoooooooossssttuuuuuunyyczzz";n+=n.toUpperCase(),i+=i.toUpperCase(),i=i.split(""),n+="ß",i.push("ss"),r.exports=function(e){return t(e).replace(/.{1}/g,function(e){var r=n.indexOf(e);return-1===r?e:i[r]})}},{"./helper/makeString":22}],8:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return e=t(e),r=t(r),0===e.length||0===r.length?0:e.split(r).length-1}},{"./helper/makeString":22}],9:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([A-Z])/g,"-$1").replace(/[-_\s]+/g,"-").toLowerCase()}},{"./trim":64}],10:[function(e,r){var t=e("./decapitalize"),n=e("./trim");r.exports=function(e,r){return e=n(e).split(/(?=[A-Z])/).map(function(e){return t(e)}),e.join(r||"_")}},{"./decapitalize":11,"./trim":64}],11:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return e=t(e),e.charAt(0).toLowerCase()+e.slice(1)}},{"./helper/makeString":22}],12:[function(e,r){function t(e){for(var r=e.match(/^[\s\\t]*/gm),t=r[0].length,n=1;n=0&&e.indexOf(r,i)===i}},{"./helper/makeString":22,"./helper/toPositive":24}],14:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/escapeChars"),i="[";for(var a in n)i+=a;i+="]";var o=new RegExp(i,"g");r.exports=function(e){return t(e).replace(o,function(e){return"&"+n[e]+";"})}},{"./helper/escapeChars":19,"./helper/makeString":22}],15:[function(e,r){r.exports=function(){var e={};for(var r in this)this.hasOwnProperty(r)&&!r.match(/^(?:include|contains|reverse|join|map)$/)&&(e[r]=this[r]);return e}},{}],16:[function(e,r){"use strict";function t(e){return this instanceof t?void(this._wrapped=e):new t(e)}function n(e,r){"function"==typeof r&&(t.prototype[e]=function(){var e=[this._wrapped].concat(Array.prototype.slice.call(arguments)),n=r.apply(null,e);return"string"==typeof n?new t(n):n})}function i(e){n(e,function(r){var t=Array.prototype.slice.call(arguments,1);return String.prototype[e].apply(r,t)})}t.VERSION="3.2.2",t.isBlank=e("./isBlank"),t.stripTags=e("./stripTags"),t.capitalize=e("./capitalize"),t.decapitalize=e("./decapitalize"),t.chop=e("./chop"),t.trim=e("./trim"),t.clean=e("./clean"),t.cleanDiacritics=e("./cleanDiacritics"),t.count=e("./count"),t.chars=e("./chars"),t.swapCase=e("./swapCase"),t.escapeHTML=e("./escapeHTML"),t.unescapeHTML=e("./unescapeHTML"),t.splice=e("./splice"),t.insert=e("./insert"),t.replaceAll=e("./replaceAll"),t.include=e("./include"),t.join=e("./join"),t.lines=e("./lines"),t.dedent=e("./dedent"),t.reverse=e("./reverse"),t.startsWith=e("./startsWith"),t.endsWith=e("./endsWith"),t.pred=e("./pred"),t.succ=e("./succ"),t.titleize=e("./titleize"),t.camelize=e("./camelize"),t.decamelize=e("./decamelize"),t.underscored=e("./underscored"),t.dasherize=e("./dasherize"),t.classify=e("./classify"),t.humanize=e("./humanize"),t.ltrim=e("./ltrim"),t.rtrim=e("./rtrim"),t.truncate=e("./truncate"),t.prune=e("./prune"),t.words=e("./words"),t.pad=e("./pad"),t.lpad=e("./lpad"),t.rpad=e("./rpad"),t.lrpad=e("./lrpad"),t.sprintf=e("./sprintf"),t.vsprintf=e("./vsprintf"),t.toNumber=e("./toNumber"),t.numberFormat=e("./numberFormat"),t.strRight=e("./strRight"),t.strRightBack=e("./strRightBack"),t.strLeft=e("./strLeft"),t.strLeftBack=e("./strLeftBack"),t.toSentence=e("./toSentence"),t.toSentenceSerial=e("./toSentenceSerial"),t.slugify=e("./slugify"),t.surround=e("./surround"),t.quote=e("./quote"),t.unquote=e("./unquote"),t.repeat=e("./repeat"),t.naturalCmp=e("./naturalCmp"),t.levenshtein=e("./levenshtein"),t.toBoolean=e("./toBoolean"),t.exports=e("./exports"),t.escapeRegExp=e("./helper/escapeRegExp"),t.wrap=e("./wrap"),t.map=e("./map"),t.strip=t.trim,t.lstrip=t.ltrim,t.rstrip=t.rtrim,t.center=t.lrpad,t.rjust=t.lpad,t.ljust=t.rpad,t.contains=t.include,t.q=t.quote,t.toBool=t.toBoolean,t.camelcase=t.camelize,t.mapChars=t.map,t.prototype={value:function(){return this._wrapped}};for(var a in t)n(a,t[a]);n("tap",function(e,r){return r(e)});var o=["toUpperCase","toLowerCase","split","replace","slice","substring","substr","concat"];for(var a in o)i(o[a]);r.exports=t},{"./camelize":1,"./capitalize":2,"./chars":3,"./chop":4,"./classify":5,"./clean":6,"./cleanDiacritics":7,"./count":8,"./dasherize":9,"./decamelize":10,"./decapitalize":11,"./dedent":12,"./endsWith":13,"./escapeHTML":14,"./exports":15,"./helper/escapeRegExp":20,"./humanize":25,"./include":26,"./insert":27,"./isBlank":28,"./join":29,"./levenshtein":30,"./lines":31,"./lpad":32,"./lrpad":33,"./ltrim":34,"./map":35,"./naturalCmp":36,"./numberFormat":37,"./pad":38,"./pred":39,"./prune":40,"./quote":41,"./repeat":42,"./replaceAll":43,"./reverse":44,"./rpad":45,"./rtrim":46,"./slugify":47,"./splice":48,"./sprintf":49,"./startsWith":50,"./strLeft":51,"./strLeftBack":52,"./strRight":53,"./strRightBack":54,"./stripTags":55,"./succ":56,"./surround":57,"./swapCase":58,"./titleize":59,"./toBoolean":60,"./toNumber":61,"./toSentence":62,"./toSentenceSerial":63,"./trim":64,"./truncate":65,"./underscored":66,"./unescapeHTML":67,"./unquote":68,"./vsprintf":69,"./words":70,"./wrap":71}],17:[function(e,r){var t=e("./makeString");r.exports=function(e,r){return e=t(e),0===e.length?"":e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+r)}},{"./makeString":22}],18:[function(e,r){var t=e("./escapeRegExp");r.exports=function(e){return null==e?"\\s":e.source?e.source:"["+t(e)+"]"}},{"./escapeRegExp":20}],19:[function(e,r){var t={"¢":"cent","£":"pound","¥":"yen","€":"euro","©":"copy","®":"reg","<":"lt",">":"gt",'"':"quot","&":"amp","'":"#39"};r.exports=t},{}],20:[function(e,r){var t=e("./makeString");r.exports=function(e){return t(e).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}},{"./makeString":22}],21:[function(e,r){var t={nbsp:" ",cent:"¢",pound:"£",yen:"¥",euro:"€",copy:"©",reg:"®",lt:"<",gt:">",quot:'"',amp:"&",apos:"'"};r.exports=t},{}],22:[function(e,r){r.exports=function(e){return null==e?"":""+e}},{}],23:[function(e,r){r.exports=function(e,r){if(1>r)return"";for(var t="";r>0;)1&r&&(t+=e),r>>=1,e+=e;return t}},{}],24:[function(e,r){r.exports=function(e){return 0>e?0:+e||0}},{}],25:[function(e,r){var t=e("./capitalize"),n=e("./underscored"),i=e("./trim");r.exports=function(e){return t(i(n(e).replace(/_id$/,"").replace(/_/g," ")))}},{"./capitalize":2,"./trim":64,"./underscored":66}],26:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return""===r?!0:-1!==t(e).indexOf(r)}},{"./helper/makeString":22}],27:[function(e,r){var t=e("./splice");r.exports=function(e,r,n){return t(e,r,0,n)}},{"./splice":48}],28:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return/^\s*$/.test(t(e))}},{"./helper/makeString":22}],29:[function(e,r){var t=e("./helper/makeString"),n=[].slice;r.exports=function(){var e=n.call(arguments),r=e.shift();return e.join(t(r))}},{"./helper/makeString":22}],30:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){"use strict";if(e=t(e),r=t(r),e===r)return 0;if(!e||!r)return Math.max(e.length,r.length);for(var n=new Array(r.length+1),i=0;ip&&(a=p),p=n[o+1]+1,a>p&&(a=p),n[o]=u}n[o]=a}return a}},{"./helper/makeString":22}],31:[function(e,r){r.exports=function(e){return null==e?[]:String(e).split(/\r\n?|\n/)}},{}],32:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n)}},{"./pad":38}],33:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"both")}},{"./pad":38}],34:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimLeft;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+"),""))}},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],35:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return e=t(e),0===e.length||"function"!=typeof r?e:e.replace(/./g,r)}},{"./helper/makeString":22}],36:[function(e,r){r.exports=function(e,r){if(e==r)return 0;if(!e)return-1;if(!r)return 1;for(var t=/(\.\d+|\d+|\D+)/g,n=String(e).match(t),i=String(r).match(t),a=Math.min(n.length,i.length),o=0;a>o;o++){var u=n[o],p=i[o];if(u!==p){var c=+u,s=+p;return c===c&&s===s?c>s?1:-1:p>u?-1:1}}return n.length!=i.length?n.length-i.length:r>e?-1:1}},{}],37:[function(e,r){r.exports=function(e,r,t,n){if(isNaN(e)||null==e)return"";e=e.toFixed(~~r),n="string"==typeof n?n:",";var i=e.split("."),a=i[0],o=i[1]?(t||".")+i[1]:"";return a.replace(/(\d)(?=(?:\d{3})+$)/g,"$1"+n)+o}},{}],38:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function(e,r,i,a){e=t(e),r=~~r;var o=0;switch(i?i.length>1&&(i=i.charAt(0)):i=" ",a){case"right":return o=r-e.length,e+n(i,o);case"both":return o=r-e.length,n(i,Math.ceil(o/2))+e+n(i,Math.floor(o/2));default:return o=r-e.length,n(i,o)+e}}},{"./helper/makeString":22,"./helper/strRepeat":23}],39:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,-1)}},{"./helper/adjacent":17}],40:[function(e,r){var t=e("./helper/makeString"),n=e("./rtrim");r.exports=function(e,r,i){if(e=t(e),r=~~r,i=null!=i?String(i):"...",e.length<=r)return e;var a=function(e){return e.toUpperCase()!==e.toLowerCase()?"A":" "},o=e.slice(0,r+1).replace(/.(?=\W*\w*$)/g,a);return o=o.slice(o.length-2).match(/\w\w/)?o.replace(/\s*\S+$/,""):n(o.slice(0,o.length-1)),(o+i).length>e.length?e:e.slice(0,o.length)+i}},{"./helper/makeString":22,"./rtrim":46}],41:[function(e,r){var t=e("./surround");r.exports=function(e,r){return t(e,r||'"')}},{"./surround":57}],42:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function i(e,r,a){if(e=t(e),r=~~r,null==a)return n(e,r);for(var i=[];r>0;i[--r]=e);return i.join(a)}},{"./helper/makeString":22,"./helper/strRepeat":23}],43:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n,i){var a=i===!0?"gi":"g",o=new RegExp(r,a);return t(e).replace(o,n)}},{"./helper/makeString":22}],44:[function(e,r){var t=e("./chars");r.exports=function(e){return t(e).reverse().join("")}},{"./chars":3}],45:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"right")}},{"./pad":38}],46:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimRight;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp(r+"+$"),""))}},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],47:[function(e,r){var t=(e("./helper/makeString"),e("./helper/defaultToWhiteSpace"),e("./trim")),n=e("./dasherize"),i=e("./cleanDiacritics");r.exports=function(e){return t(n(i(e).replace(/[^\w\s-]/g,"-").toLowerCase()),"-")}},{"./cleanDiacritics":7,"./dasherize":9,"./helper/defaultToWhiteSpace":18,"./helper/makeString":22,"./trim":64}],48:[function(e,r){var t=e("./chars");r.exports=function(e,r,n,i){var a=t(e);return a.splice(~~r,~~n,i),a.join("")}},{"./chars":3}],49:[function(e,r){var t=e("./helper/strRepeat"),n=Object.prototype.toString,i=function(){function e(e){return n.call(e).slice(8,-1).toLowerCase()}var r=t,a=function(){return a.cache.hasOwnProperty(arguments[0])||(a.cache[arguments[0]]=a.parse(arguments[0])),a.format.call(null,a.cache[arguments[0]],arguments)};return a.format=function(t,n){var a,o,u,p,c,s,l,f=1,h=t.length,g="",m=[];for(o=0;h>o;o++)if(g=e(t[o]),"string"===g)m.push(t[o]);else if("array"===g){if(p=t[o],p[2])for(a=n[f],u=0;u=0?"+"+a:a,s=p[4]?"0"==p[4]?"0":p[4].charAt(1):" ",l=p[6]-String(a).length,c=p[6]?r(s,l):"",m.push(p[5]?a+c:c+a)}return m.join("")},a.cache={},a.parse=function(e){for(var r=e,t=[],n=[],i=0;r;){if(null!==(t=/^[^\x25]+/.exec(r)))n.push(t[0]);else if(null!==(t=/^\x25{2}/.exec(r)))n.push("%");else{if(null===(t=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(r)))throw new Error("[_.sprintf] huh?");if(t[2]){i|=1;var a=[],o=t[2],u=[];if(null===(u=/^([a-z_][a-z_\d]*)/i.exec(o)))throw new Error("[_.sprintf] huh?");for(a.push(u[1]);""!==(o=o.substring(u[0].length));)if(null!==(u=/^\.([a-z_][a-z_\d]*)/i.exec(o)))a.push(u[1]);else{if(null===(u=/^\[(\d+)\]/.exec(o)))throw new Error("[_.sprintf] huh?");a.push(u[1])}t[2]=a}else i|=2;if(3===i)throw new Error("[_.sprintf] mixing positional and named placeholders is not (yet) supported");n.push(t)}r=r.substring(t[0].length)}return n},a}();r.exports=i},{"./helper/strRepeat":23}],50:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/toPositive");r.exports=function(e,r,i){return e=t(e),r=""+r,i=null==i?0:Math.min(n(i),e.length),e.lastIndexOf(r,i)===i}},{"./helper/makeString":22,"./helper/toPositive":24}],51:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(0,n):e}},{"./helper/makeString":22}],52:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=e.lastIndexOf(r);return~n?e.slice(0,n):e}},{"./helper/makeString":22}],53:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":22}],54:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.lastIndexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":22}],55:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/<\/?[^>]+>/g,"")}},{"./helper/makeString":22}],56:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,1)}},{"./helper/adjacent":17}],57:[function(e,r){r.exports=function(e,r){return[r,e,r].join("")}},{}],58:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/\S/g,function(e){return e===e.toUpperCase()?e.toLowerCase():e.toUpperCase()})}},{"./helper/makeString":22}],59:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).toLowerCase().replace(/(?:^|\s|-)\S/g,function(e){return e.toUpperCase()})}},{"./helper/makeString":22}],60:[function(e,r){function t(e,r){var t,n,i=e.toLowerCase();for(r=[].concat(r),t=0;t2&&i&&(n=t(r)+n),a.length?a.join(r)+n+o:o}},{"./rtrim":46}],63:[function(e,r){var t=e("./toSentence");r.exports=function(e,r,n){return t(e,r,n,!0)}},{"./toSentence":62}],64:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trim;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+|"+r+"+$","g"),""))}},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],65:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n){return e=t(e),n=n||"...",r=~~r,e.length>r?e.slice(0,r)+n:e}},{"./helper/makeString":22}],66:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}},{"./trim":64}],67:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/htmlEntities");r.exports=function(e){return t(e).replace(/\&([^;]+);/g,function(e,r){var t;return r in n?n[r]:(t=r.match(/^#x([\da-fA-F]+)$/))?String.fromCharCode(parseInt(t[1],16)):(t=r.match(/^#(\d+)$/))?String.fromCharCode(~~t[1]):e})}},{"./helper/htmlEntities":21,"./helper/makeString":22}],68:[function(e,r){r.exports=function(e,r){return r=r||'"',e[0]===r&&e[e.length-1]===r?e.slice(1,e.length-1):e}},{}],69:[function(e,r){var t=e("./sprintf");r.exports=function(e,r){return r.unshift(e),t.apply(null,r)}},{"./sprintf":49}],70:[function(e,r){var t=e("./isBlank"),n=e("./trim");r.exports=function(e,r){return t(e)?[]:n(e,r).split(r||/\s+/)}},{"./isBlank":28,"./trim":64}],71:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){if(e=t(e),r=r||{},width=r.width||75,seperator=r.seperator||"\n",cut=r.cut||!1,preserveSpaces=r.preserveSpaces||!1,trailingSpaces=r.trailingSpaces||!1,0>=width)return e;if(cut){for(index=0,result="";index0&&(result+=seperator),result+=e.charAt(index),index++;if(trailingSpaces)for(;index%width>0;)result+=" ",index++;return result}for(words=e.split(" "),result="",current_column=0;words.length>0;){if(1+words[0].length+current_column>width&¤t_column>0){if(preserveSpaces)result+=" ",current_column++;else if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;result+=seperator,current_column=0}current_column>0&&(result+=" ",current_column++),result+=words[0],current_column+=words[0].length,words.shift()}if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;return result}},{"./helper/makeString":22}]},{},[16])(16)}); \ No newline at end of file diff --git a/index.js b/index.js index 00e0690f..74e27f72 100644 --- a/index.js +++ b/index.js @@ -42,6 +42,7 @@ s.pred = require('./pred'); s.succ = require('./succ'); s.titleize = require('./titleize'); s.camelize = require('./camelize'); +s.decamelize = require('./decamelize'); s.underscored = require('./underscored'); s.dasherize = require('./dasherize'); s.classify = require('./classify'); diff --git a/tests/decamelize.js b/tests/decamelize.js new file mode 100644 index 00000000..47e13135 --- /dev/null +++ b/tests/decamelize.js @@ -0,0 +1,14 @@ +var equal = require('assert').equal; +var decamelize = require('../decamelize'); + + +test('#decamelize', function(){ + equal(decamelize('theDecamelizeStringMethod'), 'the_decamelize_string_method'); + equal(decamelize('webkitTransform', '-'), 'webkit-transform'); + equal(decamelize('TheDecamelizeStringMethod', '-'), 'the-decamelize-string-method'); + equal(decamelize(''), '', 'Decamelize empty string returns empty string'); + equal(decamelize(null), '', 'Decamelize null returns empty string'); + equal(decamelize(undefined), '', 'Decamelize undefined returns empty string'); + equal(decamelize(123), '123'); +}); + From dd1da260d24918aa028cc6040ac889dd117480df Mon Sep 17 00:00:00 2001 From: Golman Date: Thu, 17 Dec 2015 15:09:21 -0500 Subject: [PATCH 2/6] Removing dist artifact to follow pull request guidelines --- dist/underscore.string.js | 1212 ------------------------------------- 1 file changed, 1212 deletions(-) delete mode 100644 dist/underscore.string.js diff --git a/dist/underscore.string.js b/dist/underscore.string.js deleted file mode 100644 index 1f93dceb..00000000 --- a/dist/underscore.string.js +++ /dev/null @@ -1,1212 +0,0 @@ -/* underscore.string 3.2.2 | MIT licensed | http://epeli.github.com/underscore.string/ */ - -!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.s=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0 ? str.match(new RegExp('.{1,' + step + '}', 'g')) : [str]; -}; - -},{}],5:[function(_dereq_,module,exports){ -var capitalize = _dereq_('./capitalize'); -var camelize = _dereq_('./camelize'); -var makeString = _dereq_('./helper/makeString'); - -module.exports = function classify(str) { - str = makeString(str); - return capitalize(camelize(str.replace(/[\W_]/g, ' ')).replace(/\s/g, '')); -}; - -},{"./camelize":1,"./capitalize":2,"./helper/makeString":22}],6:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function clean(str) { - return trim(str).replace(/\s\s+/g, ' '); -}; - -},{"./trim":64}],7:[function(_dereq_,module,exports){ - -var makeString = _dereq_('./helper/makeString'); - -var from = "ąàáäâãåæăćčĉęèéëêĝĥìíïîĵłľńňòóöőôõðøśșšŝťțŭùúüűûñÿýçżźž", - to = "aaaaaaaaaccceeeeeghiiiijllnnoooooooossssttuuuuuunyyczzz"; - -from += from.toUpperCase(); -to += to.toUpperCase(); - -to = to.split(""); - -// for tokens requireing multitoken output -from += "ß"; -to.push('ss'); - - -module.exports = function cleanDiacritics(str) { - return makeString(str).replace(/.{1}/g, function(c){ - var index = from.indexOf(c); - return index === -1 ? c : to[index]; - }); -}; - -},{"./helper/makeString":22}],8:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function(str, substr) { - str = makeString(str); - substr = makeString(substr); - - if (str.length === 0 || substr.length === 0) return 0; - - return str.split(substr).length - 1; -}; - -},{"./helper/makeString":22}],9:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function dasherize(str) { - return trim(str).replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase(); -}; - -},{"./trim":64}],10:[function(_dereq_,module,exports){ -var decap = _dereq_('./decapitalize'); -var trim = _dereq_('./trim'); - -module.exports = function decamelize(string, separator) { - string = trim(string).split(/(?=[A-Z])/).map(function(word) { - return decap(word); - }); - return string.join(separator || '_'); -}; - -},{"./decapitalize":11,"./trim":64}],11:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function decapitalize(str) { - str = makeString(str); - return str.charAt(0).toLowerCase() + str.slice(1); -}; - -},{"./helper/makeString":22}],12:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -function getIndent(str) { - var matches = str.match(/^[\s\\t]*/gm); - var indent = matches[0].length; - - for (var i = 1; i < matches.length; i++) { - indent = Math.min(matches[i].length, indent); - } - - return indent; -} - -module.exports = function dedent(str, pattern) { - str = makeString(str); - var indent = getIndent(str); - var reg; - - if (indent === 0) return str; - - if (typeof pattern === 'string') { - reg = new RegExp('^' + pattern, 'gm'); - } else { - reg = new RegExp('^[ \\t]{' + indent + '}', 'gm'); - } - - return str.replace(reg, ''); -}; - -},{"./helper/makeString":22}],13:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var toPositive = _dereq_('./helper/toPositive'); - -module.exports = function endsWith(str, ends, position) { - str = makeString(str); - ends = '' + ends; - if (typeof position == 'undefined') { - position = str.length - ends.length; - } else { - position = Math.min(toPositive(position), str.length) - ends.length; - } - return position >= 0 && str.indexOf(ends, position) === position; -}; - -},{"./helper/makeString":22,"./helper/toPositive":24}],14:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var escapeChars = _dereq_('./helper/escapeChars'); -var reversedEscapeChars = {}; - -var regexString = "["; -for(var key in escapeChars) { - regexString += key; -} -regexString += "]"; - -var regex = new RegExp( regexString, 'g'); - -module.exports = function escapeHTML(str) { - - return makeString(str).replace(regex, function(m) { - return '&' + escapeChars[m] + ';'; - }); -}; - -},{"./helper/escapeChars":19,"./helper/makeString":22}],15:[function(_dereq_,module,exports){ -module.exports = function() { - var result = {}; - - for (var prop in this) { - if (!this.hasOwnProperty(prop) || prop.match(/^(?:include|contains|reverse|join|map)$/)) continue; - result[prop] = this[prop]; - } - - return result; -}; - -},{}],16:[function(_dereq_,module,exports){ -// Underscore.string -// (c) 2010 Esa-Matti Suuronen -// 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.2' - -'use strict'; - -function s(value) { - /* jshint validthis: true */ - if (!(this instanceof s)) return new s(value); - this._wrapped = value; -} - -s.VERSION = '3.2.2'; - -s.isBlank = _dereq_('./isBlank'); -s.stripTags = _dereq_('./stripTags'); -s.capitalize = _dereq_('./capitalize'); -s.decapitalize = _dereq_('./decapitalize'); -s.chop = _dereq_('./chop'); -s.trim = _dereq_('./trim'); -s.clean = _dereq_('./clean'); -s.cleanDiacritics = _dereq_('./cleanDiacritics'); -s.count = _dereq_('./count'); -s.chars = _dereq_('./chars'); -s.swapCase = _dereq_('./swapCase'); -s.escapeHTML = _dereq_('./escapeHTML'); -s.unescapeHTML = _dereq_('./unescapeHTML'); -s.splice = _dereq_('./splice'); -s.insert = _dereq_('./insert'); -s.replaceAll = _dereq_('./replaceAll'); -s.include = _dereq_('./include'); -s.join = _dereq_('./join'); -s.lines = _dereq_('./lines'); -s.dedent = _dereq_('./dedent'); -s.reverse = _dereq_('./reverse'); -s.startsWith = _dereq_('./startsWith'); -s.endsWith = _dereq_('./endsWith'); -s.pred = _dereq_('./pred'); -s.succ = _dereq_('./succ'); -s.titleize = _dereq_('./titleize'); -s.camelize = _dereq_('./camelize'); -s.decamelize = _dereq_('./decamelize'); -s.underscored = _dereq_('./underscored'); -s.dasherize = _dereq_('./dasherize'); -s.classify = _dereq_('./classify'); -s.humanize = _dereq_('./humanize'); -s.ltrim = _dereq_('./ltrim'); -s.rtrim = _dereq_('./rtrim'); -s.truncate = _dereq_('./truncate'); -s.prune = _dereq_('./prune'); -s.words = _dereq_('./words'); -s.pad = _dereq_('./pad'); -s.lpad = _dereq_('./lpad'); -s.rpad = _dereq_('./rpad'); -s.lrpad = _dereq_('./lrpad'); -s.sprintf = _dereq_('./sprintf'); -s.vsprintf = _dereq_('./vsprintf'); -s.toNumber = _dereq_('./toNumber'); -s.numberFormat = _dereq_('./numberFormat'); -s.strRight = _dereq_('./strRight'); -s.strRightBack = _dereq_('./strRightBack'); -s.strLeft = _dereq_('./strLeft'); -s.strLeftBack = _dereq_('./strLeftBack'); -s.toSentence = _dereq_('./toSentence'); -s.toSentenceSerial = _dereq_('./toSentenceSerial'); -s.slugify = _dereq_('./slugify'); -s.surround = _dereq_('./surround'); -s.quote = _dereq_('./quote'); -s.unquote = _dereq_('./unquote'); -s.repeat = _dereq_('./repeat'); -s.naturalCmp = _dereq_('./naturalCmp'); -s.levenshtein = _dereq_('./levenshtein'); -s.toBoolean = _dereq_('./toBoolean'); -s.exports = _dereq_('./exports'); -s.escapeRegExp = _dereq_('./helper/escapeRegExp'); -s.wrap = _dereq_('./wrap'); -s.map = _dereq_('./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 key in prototypeMethods) prototype2method(prototypeMethods[key]); - - -module.exports = s; - -},{"./camelize":1,"./capitalize":2,"./chars":3,"./chop":4,"./classify":5,"./clean":6,"./cleanDiacritics":7,"./count":8,"./dasherize":9,"./decamelize":10,"./decapitalize":11,"./dedent":12,"./endsWith":13,"./escapeHTML":14,"./exports":15,"./helper/escapeRegExp":20,"./humanize":25,"./include":26,"./insert":27,"./isBlank":28,"./join":29,"./levenshtein":30,"./lines":31,"./lpad":32,"./lrpad":33,"./ltrim":34,"./map":35,"./naturalCmp":36,"./numberFormat":37,"./pad":38,"./pred":39,"./prune":40,"./quote":41,"./repeat":42,"./replaceAll":43,"./reverse":44,"./rpad":45,"./rtrim":46,"./slugify":47,"./splice":48,"./sprintf":49,"./startsWith":50,"./strLeft":51,"./strLeftBack":52,"./strRight":53,"./strRightBack":54,"./stripTags":55,"./succ":56,"./surround":57,"./swapCase":58,"./titleize":59,"./toBoolean":60,"./toNumber":61,"./toSentence":62,"./toSentenceSerial":63,"./trim":64,"./truncate":65,"./underscored":66,"./unescapeHTML":67,"./unquote":68,"./vsprintf":69,"./words":70,"./wrap":71}],17:[function(_dereq_,module,exports){ -var makeString = _dereq_('./makeString'); - -module.exports = function adjacent(str, direction) { - str = makeString(str); - if (str.length === 0) { - return ''; - } - return str.slice(0, -1) + String.fromCharCode(str.charCodeAt(str.length - 1) + direction); -}; - -},{"./makeString":22}],18:[function(_dereq_,module,exports){ -var escapeRegExp = _dereq_('./escapeRegExp'); - -module.exports = function defaultToWhiteSpace(characters) { - if (characters == null) - return '\\s'; - else if (characters.source) - return characters.source; - else - return '[' + escapeRegExp(characters) + ']'; -}; - -},{"./escapeRegExp":20}],19:[function(_dereq_,module,exports){ -/* We're explicitly defining the list of entities we want to escape. -nbsp is an HTML entity, but we don't want to escape all space characters in a string, hence its omission in this map. - -*/ -var escapeChars = { - '¢' : 'cent', - '£' : 'pound', - '¥' : 'yen', - '€': 'euro', - '©' :'copy', - '®' : 'reg', - '<' : 'lt', - '>' : 'gt', - '"' : 'quot', - '&' : 'amp', - "'": '#39' -}; - -module.exports = escapeChars; - -},{}],20:[function(_dereq_,module,exports){ -var makeString = _dereq_('./makeString'); - -module.exports = function escapeRegExp(str) { - return makeString(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); -}; - -},{"./makeString":22}],21:[function(_dereq_,module,exports){ -/* -We're explicitly defining the list of entities that might see in escape HTML strings -*/ -var htmlEntities = { - nbsp: ' ', - cent: '¢', - pound: '£', - yen: '¥', - euro: '€', - copy: '©', - reg: '®', - lt: '<', - gt: '>', - quot: '"', - amp: '&', - apos: "'" -}; - -module.exports = htmlEntities; - -},{}],22:[function(_dereq_,module,exports){ -/** - * Ensure some object is a coerced to a string - **/ -module.exports = function makeString(object) { - if (object == null) return ''; - return '' + object; -}; - -},{}],23:[function(_dereq_,module,exports){ -module.exports = function strRepeat(str, qty){ - if (qty < 1) return ''; - var result = ''; - while (qty > 0) { - if (qty & 1) result += str; - qty >>= 1, str += str; - } - return result; -}; - -},{}],24:[function(_dereq_,module,exports){ -module.exports = function toPositive(number) { - return number < 0 ? 0 : (+number || 0); -}; - -},{}],25:[function(_dereq_,module,exports){ -var capitalize = _dereq_('./capitalize'); -var underscored = _dereq_('./underscored'); -var trim = _dereq_('./trim'); - -module.exports = function humanize(str) { - return capitalize(trim(underscored(str).replace(/_id$/, '').replace(/_/g, ' '))); -}; - -},{"./capitalize":2,"./trim":64,"./underscored":66}],26:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function include(str, needle) { - if (needle === '') return true; - return makeString(str).indexOf(needle) !== -1; -}; - -},{"./helper/makeString":22}],27:[function(_dereq_,module,exports){ -var splice = _dereq_('./splice'); - -module.exports = function insert(str, i, substr) { - return splice(str, i, 0, substr); -}; - -},{"./splice":48}],28:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function isBlank(str) { - return (/^\s*$/).test(makeString(str)); -}; - -},{"./helper/makeString":22}],29:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var slice = [].slice; - -module.exports = function join() { - var args = slice.call(arguments), - separator = args.shift(); - - return args.join(makeString(separator)); -}; - -},{"./helper/makeString":22}],30:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -/** - * Based on the implementation here: https://github.com/hiddentao/fast-levenshtein - */ -module.exports = function levenshtein(str1, str2) { - 'use strict'; - str1 = makeString(str1); - str2 = makeString(str2); - - // Short cut cases - if (str1 === str2) return 0; - if (!str1 || !str2) return Math.max(str1.length, str2.length); - - // two rows - var prevRow = new Array(str2.length + 1); - - // initialise previous row - for (var i = 0; i < prevRow.length; ++i) { - prevRow[i] = i; - } - - // calculate current row distance from previous row - for (i = 0; i < str1.length; ++i) { - var nextCol = i + 1; - - for (var j = 0; j < str2.length; ++j) { - var curCol = nextCol; - - // substution - nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 ); - // insertion - var tmp = curCol + 1; - if (nextCol > tmp) { - nextCol = tmp; - } - // deletion - tmp = prevRow[j + 1] + 1; - if (nextCol > tmp) { - nextCol = tmp; - } - - // copy current col value into previous (in preparation for next iteration) - prevRow[j] = curCol; - } - - // copy last col value into previous (in preparation for next iteration) - prevRow[j] = nextCol; - } - - return nextCol; -}; - -},{"./helper/makeString":22}],31:[function(_dereq_,module,exports){ -module.exports = function lines(str) { - if (str == null) return []; - return String(str).split(/\r\n?|\n/); -}; - -},{}],32:[function(_dereq_,module,exports){ -var pad = _dereq_('./pad'); - -module.exports = function lpad(str, length, padStr) { - return pad(str, length, padStr); -}; - -},{"./pad":38}],33:[function(_dereq_,module,exports){ -var pad = _dereq_('./pad'); - -module.exports = function lrpad(str, length, padStr) { - return pad(str, length, padStr, 'both'); -}; - -},{"./pad":38}],34:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var nativeTrimLeft = String.prototype.trimLeft; - -module.exports = function ltrim(str, characters) { - str = makeString(str); - if (!characters && nativeTrimLeft) return nativeTrimLeft.call(str); - characters = defaultToWhiteSpace(characters); - return str.replace(new RegExp('^' + characters + '+'), ''); -}; - -},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],35:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function(str, callback) { - str = makeString(str); - - if (str.length === 0 || typeof callback !== 'function') return str; - - return str.replace(/./g, callback); -}; - -},{"./helper/makeString":22}],36:[function(_dereq_,module,exports){ -module.exports = function naturalCmp(str1, str2) { - if (str1 == str2) return 0; - if (!str1) return -1; - if (!str2) return 1; - - var cmpRegex = /(\.\d+|\d+|\D+)/g, - tokens1 = String(str1).match(cmpRegex), - tokens2 = String(str2).match(cmpRegex), - count = Math.min(tokens1.length, tokens2.length); - - for (var i = 0; i < count; i++) { - var a = tokens1[i], - b = tokens2[i]; - - if (a !== b) { - var num1 = +a; - var num2 = +b; - if (num1 === num1 && num2 === num2) { - return num1 > num2 ? 1 : -1; - } - return a < b ? -1 : 1; - } - } - - if (tokens1.length != tokens2.length) - return tokens1.length - tokens2.length; - - return str1 < str2 ? -1 : 1; -}; - -},{}],37:[function(_dereq_,module,exports){ -module.exports = function numberFormat(number, dec, dsep, tsep) { - if (isNaN(number) || number == null) return ''; - - number = number.toFixed(~~dec); - tsep = typeof tsep == 'string' ? tsep : ','; - - var parts = number.split('.'), - fnums = parts[0], - decimals = parts[1] ? (dsep || '.') + parts[1] : ''; - - return fnums.replace(/(\d)(?=(?:\d{3})+$)/g, '$1' + tsep) + decimals; -}; - -},{}],38:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var strRepeat = _dereq_('./helper/strRepeat'); - -module.exports = function pad(str, length, padStr, type) { - str = makeString(str); - length = ~~length; - - var padlen = 0; - - if (!padStr) - padStr = ' '; - else if (padStr.length > 1) - padStr = padStr.charAt(0); - - switch (type) { - case 'right': - padlen = length - str.length; - return str + strRepeat(padStr, padlen); - case 'both': - padlen = length - str.length; - return strRepeat(padStr, Math.ceil(padlen / 2)) + str + strRepeat(padStr, Math.floor(padlen / 2)); - default: // 'left' - padlen = length - str.length; - return strRepeat(padStr, padlen) + str; - } -}; - -},{"./helper/makeString":22,"./helper/strRepeat":23}],39:[function(_dereq_,module,exports){ -var adjacent = _dereq_('./helper/adjacent'); - -module.exports = function succ(str) { - return adjacent(str, -1); -}; - -},{"./helper/adjacent":17}],40:[function(_dereq_,module,exports){ -/** - * _s.prune: a more elegant version of truncate - * prune extra chars, never leaving a half-chopped word. - * @author github.com/rwz - */ -var makeString = _dereq_('./helper/makeString'); -var rtrim = _dereq_('./rtrim'); - -module.exports = function prune(str, length, pruneStr) { - str = makeString(str); - length = ~~length; - pruneStr = pruneStr != null ? String(pruneStr) : '...'; - - if (str.length <= length) return str; - - var tmpl = function(c) { - return c.toUpperCase() !== c.toLowerCase() ? 'A' : ' '; - }, - template = str.slice(0, length + 1).replace(/.(?=\W*\w*$)/g, tmpl); // 'Hello, world' -> 'HellAA AAAAA' - - if (template.slice(template.length - 2).match(/\w\w/)) - template = template.replace(/\s*\S+$/, ''); - else - template = rtrim(template.slice(0, template.length - 1)); - - return (template + pruneStr).length > str.length ? str : str.slice(0, template.length) + pruneStr; -}; - -},{"./helper/makeString":22,"./rtrim":46}],41:[function(_dereq_,module,exports){ -var surround = _dereq_('./surround'); - -module.exports = function quote(str, quoteChar) { - return surround(str, quoteChar || '"'); -}; - -},{"./surround":57}],42:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var strRepeat = _dereq_('./helper/strRepeat'); - -module.exports = function repeat(str, qty, separator) { - str = makeString(str); - - qty = ~~qty; - - // using faster implementation if separator is not needed; - if (separator == null) return strRepeat(str, qty); - - // this one is about 300x slower in Google Chrome - for (var repeat = []; qty > 0; repeat[--qty] = str) {} - return repeat.join(separator); -}; - -},{"./helper/makeString":22,"./helper/strRepeat":23}],43:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function replaceAll(str, find, replace, ignorecase) { - var flags = (ignorecase === true)?'gi':'g'; - var reg = new RegExp(find, flags); - - return makeString(str).replace(reg, replace); -}; - -},{"./helper/makeString":22}],44:[function(_dereq_,module,exports){ -var chars = _dereq_('./chars'); - -module.exports = function reverse(str) { - return chars(str).reverse().join(''); -}; - -},{"./chars":3}],45:[function(_dereq_,module,exports){ -var pad = _dereq_('./pad'); - -module.exports = function rpad(str, length, padStr) { - return pad(str, length, padStr, 'right'); -}; - -},{"./pad":38}],46:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var nativeTrimRight = String.prototype.trimRight; - -module.exports = function rtrim(str, characters) { - str = makeString(str); - if (!characters && nativeTrimRight) return nativeTrimRight.call(str); - characters = defaultToWhiteSpace(characters); - return str.replace(new RegExp(characters + '+$'), ''); -}; - -},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],47:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var trim = _dereq_('./trim'); -var dasherize = _dereq_('./dasherize'); -var cleanDiacritics = _dereq_("./cleanDiacritics"); - -module.exports = function slugify(str) { - return trim(dasherize(cleanDiacritics(str).replace(/[^\w\s-]/g, '-').toLowerCase()), '-'); -}; - -},{"./cleanDiacritics":7,"./dasherize":9,"./helper/defaultToWhiteSpace":18,"./helper/makeString":22,"./trim":64}],48:[function(_dereq_,module,exports){ -var chars = _dereq_('./chars'); - -module.exports = function splice(str, i, howmany, substr) { - var arr = chars(str); - arr.splice(~~i, ~~howmany, substr); - return arr.join(''); -}; - -},{"./chars":3}],49:[function(_dereq_,module,exports){ -// sprintf() for JavaScript 0.7-beta1 -// http://www.diveintojavascript.com/projects/javascript-sprintf -// -// Copyright (c) Alexandru Marasteanu -// All rights reserved. -var strRepeat = _dereq_('./helper/strRepeat'); -var toString = Object.prototype.toString; -var sprintf = (function() { - function get_type(variable) { - return toString.call(variable).slice(8, -1).toLowerCase(); - } - - var str_repeat = strRepeat; - - var str_format = function() { - if (!str_format.cache.hasOwnProperty(arguments[0])) { - str_format.cache[arguments[0]] = str_format.parse(arguments[0]); - } - return str_format.format.call(null, str_format.cache[arguments[0]], arguments); - }; - - str_format.format = function(parse_tree, argv) { - var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length; - for (i = 0; i < tree_length; i++) { - node_type = get_type(parse_tree[i]); - if (node_type === 'string') { - output.push(parse_tree[i]); - } - else if (node_type === 'array') { - match = parse_tree[i]; // convenience purposes only - if (match[2]) { // keyword argument - arg = argv[cursor]; - for (k = 0; k < match[2].length; k++) { - if (!arg.hasOwnProperty(match[2][k])) { - throw new Error(sprintf('[_.sprintf] property "%s" does not exist', match[2][k])); - } - arg = arg[match[2][k]]; - } - } else if (match[1]) { // positional argument (explicit) - arg = argv[match[1]]; - } - else { // positional argument (implicit) - arg = argv[cursor++]; - } - - if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) { - throw new Error(sprintf('[_.sprintf] expecting number but found %s', get_type(arg))); - } - switch (match[8]) { - case 'b': arg = arg.toString(2); break; - case 'c': arg = String.fromCharCode(arg); break; - case 'd': arg = parseInt(arg, 10); break; - case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break; - case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break; - case 'o': arg = arg.toString(8); break; - case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break; - case 'u': arg = Math.abs(arg); break; - case 'x': arg = arg.toString(16); break; - case 'X': arg = arg.toString(16).toUpperCase(); break; - } - arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg); - pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' '; - pad_length = match[6] - String(arg).length; - pad = match[6] ? str_repeat(pad_character, pad_length) : ''; - output.push(match[5] ? arg + pad : pad + arg); - } - } - return output.join(''); - }; - - str_format.cache = {}; - - str_format.parse = function(fmt) { - var _fmt = fmt, match = [], parse_tree = [], arg_names = 0; - while (_fmt) { - if ((match = /^[^\x25]+/.exec(_fmt)) !== null) { - parse_tree.push(match[0]); - } - else if ((match = /^\x25{2}/.exec(_fmt)) !== null) { - parse_tree.push('%'); - } - else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) { - if (match[2]) { - arg_names |= 1; - var field_list = [], replacement_field = match[2], field_match = []; - if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') { - if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - } - else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - } - else { - throw new Error('[_.sprintf] huh?'); - } - } - } - else { - throw new Error('[_.sprintf] huh?'); - } - match[2] = field_list; - } - else { - arg_names |= 2; - } - if (arg_names === 3) { - throw new Error('[_.sprintf] mixing positional and named placeholders is not (yet) supported'); - } - parse_tree.push(match); - } - else { - throw new Error('[_.sprintf] huh?'); - } - _fmt = _fmt.substring(match[0].length); - } - return parse_tree; - }; - - return str_format; -})(); - -module.exports = sprintf; - -},{"./helper/strRepeat":23}],50:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var toPositive = _dereq_('./helper/toPositive'); - -module.exports = function startsWith(str, starts, position) { - str = makeString(str); - starts = '' + starts; - position = position == null ? 0 : Math.min(toPositive(position), str.length); - return str.lastIndexOf(starts, position) === position; -}; - -},{"./helper/makeString":22,"./helper/toPositive":24}],51:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strLeft(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = !sep ? -1 : str.indexOf(sep); - return~ pos ? str.slice(0, pos) : str; -}; - -},{"./helper/makeString":22}],52:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strLeftBack(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = str.lastIndexOf(sep); - return~ pos ? str.slice(0, pos) : str; -}; - -},{"./helper/makeString":22}],53:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strRight(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = !sep ? -1 : str.indexOf(sep); - return~ pos ? str.slice(pos + sep.length, str.length) : str; -}; - -},{"./helper/makeString":22}],54:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strRightBack(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = !sep ? -1 : str.lastIndexOf(sep); - return~ pos ? str.slice(pos + sep.length, str.length) : str; -}; - -},{"./helper/makeString":22}],55:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function stripTags(str) { - return makeString(str).replace(/<\/?[^>]+>/g, ''); -}; - -},{"./helper/makeString":22}],56:[function(_dereq_,module,exports){ -var adjacent = _dereq_('./helper/adjacent'); - -module.exports = function succ(str) { - return adjacent(str, 1); -}; - -},{"./helper/adjacent":17}],57:[function(_dereq_,module,exports){ -module.exports = function surround(str, wrapper) { - return [wrapper, str, wrapper].join(''); -}; - -},{}],58:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function swapCase(str) { - return makeString(str).replace(/\S/g, function(c) { - return c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase(); - }); -}; - -},{"./helper/makeString":22}],59:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function titleize(str) { - return makeString(str).toLowerCase().replace(/(?:^|\s|-)\S/g, function(c) { - return c.toUpperCase(); - }); -}; - -},{"./helper/makeString":22}],60:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -function boolMatch(s, matchers) { - var i, matcher, down = s.toLowerCase(); - matchers = [].concat(matchers); - for (i = 0; i < matchers.length; i += 1) { - matcher = matchers[i]; - if (!matcher) continue; - if (matcher.test && matcher.test(s)) return true; - if (matcher.toLowerCase() === down) return true; - } -} - -module.exports = function toBoolean(str, trueValues, falseValues) { - if (typeof str === "number") str = "" + str; - if (typeof str !== "string") return !!str; - str = trim(str); - if (boolMatch(str, trueValues || ["true", "1"])) return true; - if (boolMatch(str, falseValues || ["false", "0"])) return false; -}; - -},{"./trim":64}],61:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function toNumber(num, precision) { - if (num == null) return 0; - var factor = Math.pow(10, isFinite(precision) ? precision : 0); - return Math.round(num * factor) / factor; -}; - -},{"./trim":64}],62:[function(_dereq_,module,exports){ -var rtrim = _dereq_('./rtrim'); - -module.exports = function toSentence(array, separator, lastSeparator, serial) { - separator = separator || ', '; - lastSeparator = lastSeparator || ' and '; - var a = array.slice(), - lastMember = a.pop(); - - if (array.length > 2 && serial) lastSeparator = rtrim(separator) + lastSeparator; - - return a.length ? a.join(separator) + lastSeparator + lastMember : lastMember; -}; - -},{"./rtrim":46}],63:[function(_dereq_,module,exports){ -var toSentence = _dereq_('./toSentence'); - -module.exports = function toSentenceSerial(array, sep, lastSep) { - return toSentence(array, sep, lastSep, true); -}; - -},{"./toSentence":62}],64:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var nativeTrim = String.prototype.trim; - -module.exports = function trim(str, characters) { - str = makeString(str); - if (!characters && nativeTrim) return nativeTrim.call(str); - characters = defaultToWhiteSpace(characters); - return str.replace(new RegExp('^' + characters + '+|' + characters + '+$', 'g'), ''); -}; - -},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],65:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function truncate(str, length, truncateStr) { - str = makeString(str); - truncateStr = truncateStr || '...'; - length = ~~length; - return str.length > length ? str.slice(0, length) + truncateStr : str; -}; - -},{"./helper/makeString":22}],66:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function underscored(str) { - return trim(str).replace(/([a-z\d])([A-Z]+)/g, '$1_$2').replace(/[-\s]+/g, '_').toLowerCase(); -}; - -},{"./trim":64}],67:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var htmlEntities = _dereq_('./helper/htmlEntities'); - -module.exports = function unescapeHTML(str) { - return makeString(str).replace(/\&([^;]+);/g, function(entity, entityCode) { - var match; - - if (entityCode in htmlEntities) { - return htmlEntities[entityCode]; - } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) { - return String.fromCharCode(parseInt(match[1], 16)); - } else if (match = entityCode.match(/^#(\d+)$/)) { - return String.fromCharCode(~~match[1]); - } else { - return entity; - } - }); -}; - -},{"./helper/htmlEntities":21,"./helper/makeString":22}],68:[function(_dereq_,module,exports){ -module.exports = function unquote(str, quoteChar) { - quoteChar = quoteChar || '"'; - if (str[0] === quoteChar && str[str.length - 1] === quoteChar) - return str.slice(1, str.length - 1); - else return str; -}; - -},{}],69:[function(_dereq_,module,exports){ -var sprintf = _dereq_('./sprintf'); - -module.exports = function vsprintf(fmt, argv) { - argv.unshift(fmt); - return sprintf.apply(null, argv); -}; - -},{"./sprintf":49}],70:[function(_dereq_,module,exports){ -var isBlank = _dereq_('./isBlank'); -var trim = _dereq_('./trim'); - -module.exports = function words(str, delimiter) { - if (isBlank(str)) return []; - return trim(str, delimiter).split(delimiter || /\s+/); -}; - -},{"./isBlank":28,"./trim":64}],71:[function(_dereq_,module,exports){ -// Wrap -// wraps a string by a certain width - -var makeString = _dereq_('./helper/makeString'); - -module.exports = function wrap(str, options){ - str = makeString(str); - - options = options || {}; - - width = options.width || 75; - seperator = options.seperator || '\n'; - cut = options.cut || false; - preserveSpaces = options.preserveSpaces || false; - trailingSpaces = options.trailingSpaces || false; - - if(width <= 0){ - return str; - } - - else if(!cut){ - - words = str.split(" "); - result = ""; - current_column = 0; - - while(words.length > 0){ - - // if adding a space and the next word would cause this line to be longer than width... - if(1 + words[0].length + current_column > width){ - //start a new line if this line is not already empty - if(current_column > 0){ - // add a space at the end of the line is preserveSpaces is true - if (preserveSpaces){ - result += ' '; - current_column++; - } - // fill the rest of the line with spaces if trailingSpaces option is true - else if(trailingSpaces){ - while(current_column < width){ - result += ' '; - current_column++; - } - } - //start new line - result += seperator; - current_column = 0; - } - } - - // if not at the begining of the line, add a space in front of the word - if(current_column > 0){ - result += " "; - current_column++; - } - - // tack on the next word, update current column, a pop words array - result += words[0]; - current_column += words[0].length; - words.shift(); - - } - - // fill the rest of the line with spaces if trailingSpaces option is true - if(trailingSpaces){ - while(current_column < width){ - result += ' '; - current_column++; - } - } - - return result; - - } - - else { - - index = 0; - result = ""; - - // walk through each character and add seperators where appropriate - while(index < str.length){ - if(index % width == 0 && index > 0){ - result += seperator; - } - result += str.charAt(index); - index++; - } - - // fill the rest of the line with spaces if trailingSpaces option is true - if(trailingSpaces){ - while(index % width > 0){ - result += ' '; - index++; - } - } - - return result; - } -}; - -},{"./helper/makeString":22}]},{},[16]) -(16) -}); \ No newline at end of file From dc85c81219e724bd2c8f5b836acab77d829dc883 Mon Sep 17 00:00:00 2001 From: Golman Date: Fri, 18 Dec 2015 10:22:03 -0500 Subject: [PATCH 3/6] fixed empty string test fail --- decamelize.js | 5 ++++- tests/decamelize.js | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/decamelize.js b/decamelize.js index eeab79a1..55910ba4 100644 --- a/decamelize.js +++ b/decamelize.js @@ -5,5 +5,8 @@ module.exports = function decamelize(string, separator) { string = trim(string).split(/(?=[A-Z])/).map(function(word) { return decap(word); }); - return string.join(separator || '_'); + if (separator === undefined) { + separator = "_"; + } + return string.join(separator); }; diff --git a/tests/decamelize.js b/tests/decamelize.js index 47e13135..24ab5823 100644 --- a/tests/decamelize.js +++ b/tests/decamelize.js @@ -5,6 +5,7 @@ var decamelize = require('../decamelize'); test('#decamelize', function(){ equal(decamelize('theDecamelizeStringMethod'), 'the_decamelize_string_method'); equal(decamelize('webkitTransform', '-'), 'webkit-transform'); + equal(decamelize('theDecamelizeStringMethod_', ''), 'thedecamelizestringmethod_'); equal(decamelize('TheDecamelizeStringMethod', '-'), 'the-decamelize-string-method'); equal(decamelize(''), '', 'Decamelize empty string returns empty string'); equal(decamelize(null), '', 'Decamelize null returns empty string'); From 95918459b23420984a5afc56b85fe55045c1b22d Mon Sep 17 00:00:00 2001 From: Golman Date: Thu, 17 Dec 2015 14:59:57 -0500 Subject: [PATCH 4/6] decamelize implemented, tested and documentation updated Removing dist artifact to follow pull request guidelines fixed empty string test fail --- README.markdown | 11 + decamelize.js | 12 + dist/underscore.string.js | 1186 --------------------------------- dist/underscore.string.min.js | 2 +- index.js | 1 + tests/decamelize.js | 15 + 6 files changed, 40 insertions(+), 1187 deletions(-) create mode 100644 decamelize.js delete mode 100644 dist/underscore.string.js create mode 100644 tests/decamelize.js diff --git a/README.markdown b/README.markdown index dc444939..776b054f 100644 --- a/README.markdown +++ b/README.markdown @@ -418,6 +418,17 @@ camelize("Moz-transform"); camelize("-moz-transform", true); // => "mozTransform" ``` +#### decamelize(string, [seperator="_"]) => string + +Converts camelized string to a decamelized one. + +```javascript +decamelize("theDecamelizeStringMethod"); +// => "the_decamelize_string_method" + +decamelize("webkitTransform", "-"); +// => "webkit-transform" +``` #### classify(string) => string diff --git a/decamelize.js b/decamelize.js new file mode 100644 index 00000000..55910ba4 --- /dev/null +++ b/decamelize.js @@ -0,0 +1,12 @@ +var decap = require('./decapitalize'); +var trim = require('./trim'); + +module.exports = function decamelize(string, separator) { + string = trim(string).split(/(?=[A-Z])/).map(function(word) { + return decap(word); + }); + if (separator === undefined) { + separator = "_"; + } + return string.join(separator); +}; diff --git a/dist/underscore.string.js b/dist/underscore.string.js deleted file mode 100644 index 05556760..00000000 --- a/dist/underscore.string.js +++ /dev/null @@ -1,1186 +0,0 @@ -/* underscore.string 3.2.2 | MIT licensed | http://epeli.github.com/underscore.string/ */ - -!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.s=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0 ? str.match(new RegExp('.{1,' + step + '}', 'g')) : [str]; -}; - -},{}],5:[function(_dereq_,module,exports){ -var capitalize = _dereq_('./capitalize'); -var camelize = _dereq_('./camelize'); -var makeString = _dereq_('./helper/makeString'); - -module.exports = function classify(str) { - str = makeString(str); - return capitalize(camelize(str.replace(/[\W_]/g, ' ')).replace(/\s/g, '')); -}; - -},{"./camelize":1,"./capitalize":2,"./helper/makeString":21}],6:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function clean(str) { - return trim(str).replace(/\s\s+/g, ' '); -}; - -},{"./trim":62}],7:[function(_dereq_,module,exports){ - -var makeString = _dereq_('./helper/makeString'); - -var from = "ąàáäâãåæăćčĉęèéëêĝĥìíïîĵłľńňòóöőôõðøśșšŝťțŭùúüűûñÿýçżźž", - to = "aaaaaaaaaccceeeeeghiiiijllnnoooooooossssttuuuuuunyyczzz"; - -from += from.toUpperCase(); -to += to.toUpperCase(); - -to = to.split(""); - -// for tokens requireing multitoken output -from += "ß"; -to.push('ss'); - - -module.exports = function cleanDiacritics(str) { - return makeString(str).replace(/.{1}/g, function(c){ - var index = from.indexOf(c); - return index === -1 ? c : to[index]; - }); -}; - -},{"./helper/makeString":21}],8:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function(str, substr) { - str = makeString(str); - substr = makeString(substr); - - if (str.length === 0 || substr.length === 0) return 0; - - return str.split(substr).length - 1; -}; - -},{"./helper/makeString":21}],9:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function dasherize(str) { - return trim(str).replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase(); -}; - -},{"./trim":62}],10:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function decapitalize(str) { - str = makeString(str); - return str.charAt(0).toLowerCase() + str.slice(1); -}; - -},{"./helper/makeString":21}],11:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -function getIndent(str) { - var matches = str.match(/^[\s\\t]*/gm); - var indent = matches[0].length; - - for (var i = 1; i < matches.length; i++) { - indent = Math.min(matches[i].length, indent); - } - - return indent; -} - -module.exports = function dedent(str, pattern) { - str = makeString(str); - var indent = getIndent(str); - var reg; - - if (indent === 0) return str; - - if (typeof pattern === 'string') { - reg = new RegExp('^' + pattern, 'gm'); - } else { - reg = new RegExp('^[ \\t]{' + indent + '}', 'gm'); - } - - return str.replace(reg, ''); -}; - -},{"./helper/makeString":21}],12:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var toPositive = _dereq_('./helper/toPositive'); - -module.exports = function endsWith(str, ends, position) { - str = makeString(str); - ends = '' + ends; - if (typeof position == 'undefined') { - position = str.length - ends.length; - } else { - position = Math.min(toPositive(position), str.length) - ends.length; - } - return position >= 0 && str.indexOf(ends, position) === position; -}; - -},{"./helper/makeString":21,"./helper/toPositive":23}],13:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var escapeChars = _dereq_('./helper/escapeChars'); -var reversedEscapeChars = {}; - -var regexString = "["; -for(var key in escapeChars) { - regexString += key; -} -regexString += "]"; - -var regex = new RegExp( regexString, 'g'); - -module.exports = function escapeHTML(str) { - - return makeString(str).replace(regex, function(m) { - return '&' + escapeChars[m] + ';'; - }); -}; - -},{"./helper/escapeChars":18,"./helper/makeString":21}],14:[function(_dereq_,module,exports){ -module.exports = function() { - var result = {}; - - for (var prop in this) { - if (!this.hasOwnProperty(prop) || prop.match(/^(?:include|contains|reverse|join)$/)) continue; - result[prop] = this[prop]; - } - - return result; -}; - -},{}],15:[function(_dereq_,module,exports){ -// Underscore.string -// (c) 2010 Esa-Matti Suuronen -// 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.2' - -'use strict'; - -function s(value) { - /* jshint validthis: true */ - if (!(this instanceof s)) return new s(value); - this._wrapped = value; -} - -s.VERSION = '3.2.2'; - -s.isBlank = _dereq_('./isBlank'); -s.stripTags = _dereq_('./stripTags'); -s.capitalize = _dereq_('./capitalize'); -s.decapitalize = _dereq_('./decapitalize'); -s.chop = _dereq_('./chop'); -s.trim = _dereq_('./trim'); -s.clean = _dereq_('./clean'); -s.cleanDiacritics = _dereq_('./cleanDiacritics'); -s.count = _dereq_('./count'); -s.chars = _dereq_('./chars'); -s.swapCase = _dereq_('./swapCase'); -s.escapeHTML = _dereq_('./escapeHTML'); -s.unescapeHTML = _dereq_('./unescapeHTML'); -s.splice = _dereq_('./splice'); -s.insert = _dereq_('./insert'); -s.replaceAll = _dereq_('./replaceAll'); -s.include = _dereq_('./include'); -s.join = _dereq_('./join'); -s.lines = _dereq_('./lines'); -s.dedent = _dereq_('./dedent'); -s.reverse = _dereq_('./reverse'); -s.startsWith = _dereq_('./startsWith'); -s.endsWith = _dereq_('./endsWith'); -s.pred = _dereq_('./pred'); -s.succ = _dereq_('./succ'); -s.titleize = _dereq_('./titleize'); -s.camelize = _dereq_('./camelize'); -s.underscored = _dereq_('./underscored'); -s.dasherize = _dereq_('./dasherize'); -s.classify = _dereq_('./classify'); -s.humanize = _dereq_('./humanize'); -s.ltrim = _dereq_('./ltrim'); -s.rtrim = _dereq_('./rtrim'); -s.truncate = _dereq_('./truncate'); -s.prune = _dereq_('./prune'); -s.words = _dereq_('./words'); -s.pad = _dereq_('./pad'); -s.lpad = _dereq_('./lpad'); -s.rpad = _dereq_('./rpad'); -s.lrpad = _dereq_('./lrpad'); -s.sprintf = _dereq_('./sprintf'); -s.vsprintf = _dereq_('./vsprintf'); -s.toNumber = _dereq_('./toNumber'); -s.numberFormat = _dereq_('./numberFormat'); -s.strRight = _dereq_('./strRight'); -s.strRightBack = _dereq_('./strRightBack'); -s.strLeft = _dereq_('./strLeft'); -s.strLeftBack = _dereq_('./strLeftBack'); -s.toSentence = _dereq_('./toSentence'); -s.toSentenceSerial = _dereq_('./toSentenceSerial'); -s.slugify = _dereq_('./slugify'); -s.surround = _dereq_('./surround'); -s.quote = _dereq_('./quote'); -s.unquote = _dereq_('./unquote'); -s.repeat = _dereq_('./repeat'); -s.naturalCmp = _dereq_('./naturalCmp'); -s.levenshtein = _dereq_('./levenshtein'); -s.toBoolean = _dereq_('./toBoolean'); -s.exports = _dereq_('./exports'); -s.escapeRegExp = _dereq_('./helper/escapeRegExp'); -s.wrap = _dereq_('./wrap'); - -// 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; - - -// 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 key in prototypeMethods) prototype2method(prototypeMethods[key]); - - -module.exports = s; - -},{"./camelize":1,"./capitalize":2,"./chars":3,"./chop":4,"./classify":5,"./clean":6,"./cleanDiacritics":7,"./count":8,"./dasherize":9,"./decapitalize":10,"./dedent":11,"./endsWith":12,"./escapeHTML":13,"./exports":14,"./helper/escapeRegExp":19,"./humanize":24,"./include":25,"./insert":26,"./isBlank":27,"./join":28,"./levenshtein":29,"./lines":30,"./lpad":31,"./lrpad":32,"./ltrim":33,"./naturalCmp":34,"./numberFormat":35,"./pad":36,"./pred":37,"./prune":38,"./quote":39,"./repeat":40,"./replaceAll":41,"./reverse":42,"./rpad":43,"./rtrim":44,"./slugify":45,"./splice":46,"./sprintf":47,"./startsWith":48,"./strLeft":49,"./strLeftBack":50,"./strRight":51,"./strRightBack":52,"./stripTags":53,"./succ":54,"./surround":55,"./swapCase":56,"./titleize":57,"./toBoolean":58,"./toNumber":59,"./toSentence":60,"./toSentenceSerial":61,"./trim":62,"./truncate":63,"./underscored":64,"./unescapeHTML":65,"./unquote":66,"./vsprintf":67,"./words":68,"./wrap":69}],16:[function(_dereq_,module,exports){ -var makeString = _dereq_('./makeString'); - -module.exports = function adjacent(str, direction) { - str = makeString(str); - if (str.length === 0) { - return ''; - } - return str.slice(0, -1) + String.fromCharCode(str.charCodeAt(str.length - 1) + direction); -}; - -},{"./makeString":21}],17:[function(_dereq_,module,exports){ -var escapeRegExp = _dereq_('./escapeRegExp'); - -module.exports = function defaultToWhiteSpace(characters) { - if (characters == null) - return '\\s'; - else if (characters.source) - return characters.source; - else - return '[' + escapeRegExp(characters) + ']'; -}; - -},{"./escapeRegExp":19}],18:[function(_dereq_,module,exports){ -/* We're explicitly defining the list of entities we want to escape. -nbsp is an HTML entity, but we don't want to escape all space characters in a string, hence its omission in this map. - -*/ -var escapeChars = { - '¢' : 'cent', - '£' : 'pound', - '¥' : 'yen', - '€': 'euro', - '©' :'copy', - '®' : 'reg', - '<' : 'lt', - '>' : 'gt', - '"' : 'quot', - '&' : 'amp', - "'": '#39' -}; - -module.exports = escapeChars; - -},{}],19:[function(_dereq_,module,exports){ -var makeString = _dereq_('./makeString'); - -module.exports = function escapeRegExp(str) { - return makeString(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); -}; - -},{"./makeString":21}],20:[function(_dereq_,module,exports){ -/* -We're explicitly defining the list of entities that might see in escape HTML strings -*/ -var htmlEntities = { - nbsp: ' ', - cent: '¢', - pound: '£', - yen: '¥', - euro: '€', - copy: '©', - reg: '®', - lt: '<', - gt: '>', - quot: '"', - amp: '&', - apos: "'" -}; - -module.exports = htmlEntities; - -},{}],21:[function(_dereq_,module,exports){ -/** - * Ensure some object is a coerced to a string - **/ -module.exports = function makeString(object) { - if (object == null) return ''; - return '' + object; -}; - -},{}],22:[function(_dereq_,module,exports){ -module.exports = function strRepeat(str, qty){ - if (qty < 1) return ''; - var result = ''; - while (qty > 0) { - if (qty & 1) result += str; - qty >>= 1, str += str; - } - return result; -}; - -},{}],23:[function(_dereq_,module,exports){ -module.exports = function toPositive(number) { - return number < 0 ? 0 : (+number || 0); -}; - -},{}],24:[function(_dereq_,module,exports){ -var capitalize = _dereq_('./capitalize'); -var underscored = _dereq_('./underscored'); -var trim = _dereq_('./trim'); - -module.exports = function humanize(str) { - return capitalize(trim(underscored(str).replace(/_id$/, '').replace(/_/g, ' '))); -}; - -},{"./capitalize":2,"./trim":62,"./underscored":64}],25:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function include(str, needle) { - if (needle === '') return true; - return makeString(str).indexOf(needle) !== -1; -}; - -},{"./helper/makeString":21}],26:[function(_dereq_,module,exports){ -var splice = _dereq_('./splice'); - -module.exports = function insert(str, i, substr) { - return splice(str, i, 0, substr); -}; - -},{"./splice":46}],27:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function isBlank(str) { - return (/^\s*$/).test(makeString(str)); -}; - -},{"./helper/makeString":21}],28:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var slice = [].slice; - -module.exports = function join() { - var args = slice.call(arguments), - separator = args.shift(); - - return args.join(makeString(separator)); -}; - -},{"./helper/makeString":21}],29:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -/** - * Based on the implementation here: https://github.com/hiddentao/fast-levenshtein - */ -module.exports = function levenshtein(str1, str2) { - 'use strict'; - str1 = makeString(str1); - str2 = makeString(str2); - - // Short cut cases - if (str1 === str2) return 0; - if (!str1 || !str2) return Math.max(str1.length, str2.length); - - // two rows - var prevRow = new Array(str2.length + 1); - - // initialise previous row - for (var i = 0; i < prevRow.length; ++i) { - prevRow[i] = i; - } - - // calculate current row distance from previous row - for (i = 0; i < str1.length; ++i) { - var nextCol = i + 1; - - for (var j = 0; j < str2.length; ++j) { - var curCol = nextCol; - - // substution - nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 ); - // insertion - var tmp = curCol + 1; - if (nextCol > tmp) { - nextCol = tmp; - } - // deletion - tmp = prevRow[j + 1] + 1; - if (nextCol > tmp) { - nextCol = tmp; - } - - // copy current col value into previous (in preparation for next iteration) - prevRow[j] = curCol; - } - - // copy last col value into previous (in preparation for next iteration) - prevRow[j] = nextCol; - } - - return nextCol; -}; - -},{"./helper/makeString":21}],30:[function(_dereq_,module,exports){ -module.exports = function lines(str) { - if (str == null) return []; - return String(str).split(/\r\n?|\n/); -}; - -},{}],31:[function(_dereq_,module,exports){ -var pad = _dereq_('./pad'); - -module.exports = function lpad(str, length, padStr) { - return pad(str, length, padStr); -}; - -},{"./pad":36}],32:[function(_dereq_,module,exports){ -var pad = _dereq_('./pad'); - -module.exports = function lrpad(str, length, padStr) { - return pad(str, length, padStr, 'both'); -}; - -},{"./pad":36}],33:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var nativeTrimLeft = String.prototype.trimLeft; - -module.exports = function ltrim(str, characters) { - str = makeString(str); - if (!characters && nativeTrimLeft) return nativeTrimLeft.call(str); - characters = defaultToWhiteSpace(characters); - return str.replace(new RegExp('^' + characters + '+'), ''); -}; - -},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],34:[function(_dereq_,module,exports){ -module.exports = function naturalCmp(str1, str2) { - if (str1 == str2) return 0; - if (!str1) return -1; - if (!str2) return 1; - - var cmpRegex = /(\.\d+|\d+|\D+)/g, - tokens1 = String(str1).match(cmpRegex), - tokens2 = String(str2).match(cmpRegex), - count = Math.min(tokens1.length, tokens2.length); - - for (var i = 0; i < count; i++) { - var a = tokens1[i], - b = tokens2[i]; - - if (a !== b) { - var num1 = +a; - var num2 = +b; - if (num1 === num1 && num2 === num2) { - return num1 > num2 ? 1 : -1; - } - return a < b ? -1 : 1; - } - } - - if (tokens1.length != tokens2.length) - return tokens1.length - tokens2.length; - - return str1 < str2 ? -1 : 1; -}; - -},{}],35:[function(_dereq_,module,exports){ -module.exports = function numberFormat(number, dec, dsep, tsep) { - if (isNaN(number) || number == null) return ''; - - number = number.toFixed(~~dec); - tsep = typeof tsep == 'string' ? tsep : ','; - - var parts = number.split('.'), - fnums = parts[0], - decimals = parts[1] ? (dsep || '.') + parts[1] : ''; - - return fnums.replace(/(\d)(?=(?:\d{3})+$)/g, '$1' + tsep) + decimals; -}; - -},{}],36:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var strRepeat = _dereq_('./helper/strRepeat'); - -module.exports = function pad(str, length, padStr, type) { - str = makeString(str); - length = ~~length; - - var padlen = 0; - - if (!padStr) - padStr = ' '; - else if (padStr.length > 1) - padStr = padStr.charAt(0); - - switch (type) { - case 'right': - padlen = length - str.length; - return str + strRepeat(padStr, padlen); - case 'both': - padlen = length - str.length; - return strRepeat(padStr, Math.ceil(padlen / 2)) + str + strRepeat(padStr, Math.floor(padlen / 2)); - default: // 'left' - padlen = length - str.length; - return strRepeat(padStr, padlen) + str; - } -}; - -},{"./helper/makeString":21,"./helper/strRepeat":22}],37:[function(_dereq_,module,exports){ -var adjacent = _dereq_('./helper/adjacent'); - -module.exports = function succ(str) { - return adjacent(str, -1); -}; - -},{"./helper/adjacent":16}],38:[function(_dereq_,module,exports){ -/** - * _s.prune: a more elegant version of truncate - * prune extra chars, never leaving a half-chopped word. - * @author github.com/rwz - */ -var makeString = _dereq_('./helper/makeString'); -var rtrim = _dereq_('./rtrim'); - -module.exports = function prune(str, length, pruneStr) { - str = makeString(str); - length = ~~length; - pruneStr = pruneStr != null ? String(pruneStr) : '...'; - - if (str.length <= length) return str; - - var tmpl = function(c) { - return c.toUpperCase() !== c.toLowerCase() ? 'A' : ' '; - }, - template = str.slice(0, length + 1).replace(/.(?=\W*\w*$)/g, tmpl); // 'Hello, world' -> 'HellAA AAAAA' - - if (template.slice(template.length - 2).match(/\w\w/)) - template = template.replace(/\s*\S+$/, ''); - else - template = rtrim(template.slice(0, template.length - 1)); - - return (template + pruneStr).length > str.length ? str : str.slice(0, template.length) + pruneStr; -}; - -},{"./helper/makeString":21,"./rtrim":44}],39:[function(_dereq_,module,exports){ -var surround = _dereq_('./surround'); - -module.exports = function quote(str, quoteChar) { - return surround(str, quoteChar || '"'); -}; - -},{"./surround":55}],40:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var strRepeat = _dereq_('./helper/strRepeat'); - -module.exports = function repeat(str, qty, separator) { - str = makeString(str); - - qty = ~~qty; - - // using faster implementation if separator is not needed; - if (separator == null) return strRepeat(str, qty); - - // this one is about 300x slower in Google Chrome - for (var repeat = []; qty > 0; repeat[--qty] = str) {} - return repeat.join(separator); -}; - -},{"./helper/makeString":21,"./helper/strRepeat":22}],41:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function replaceAll(str, find, replace, ignorecase) { - var flags = (ignorecase === true)?'gi':'g'; - var reg = new RegExp(find, flags); - - return makeString(str).replace(reg, replace); -}; - -},{"./helper/makeString":21}],42:[function(_dereq_,module,exports){ -var chars = _dereq_('./chars'); - -module.exports = function reverse(str) { - return chars(str).reverse().join(''); -}; - -},{"./chars":3}],43:[function(_dereq_,module,exports){ -var pad = _dereq_('./pad'); - -module.exports = function rpad(str, length, padStr) { - return pad(str, length, padStr, 'right'); -}; - -},{"./pad":36}],44:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var nativeTrimRight = String.prototype.trimRight; - -module.exports = function rtrim(str, characters) { - str = makeString(str); - if (!characters && nativeTrimRight) return nativeTrimRight.call(str); - characters = defaultToWhiteSpace(characters); - return str.replace(new RegExp(characters + '+$'), ''); -}; - -},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],45:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var trim = _dereq_('./trim'); -var dasherize = _dereq_('./dasherize'); -var cleanDiacritics = _dereq_("./cleanDiacritics"); - -module.exports = function slugify(str) { - return trim(dasherize(cleanDiacritics(str).replace(/[^\w\s-]/g, '-').toLowerCase()), '-'); -}; - -},{"./cleanDiacritics":7,"./dasherize":9,"./helper/defaultToWhiteSpace":17,"./helper/makeString":21,"./trim":62}],46:[function(_dereq_,module,exports){ -var chars = _dereq_('./chars'); - -module.exports = function splice(str, i, howmany, substr) { - var arr = chars(str); - arr.splice(~~i, ~~howmany, substr); - return arr.join(''); -}; - -},{"./chars":3}],47:[function(_dereq_,module,exports){ -// sprintf() for JavaScript 0.7-beta1 -// http://www.diveintojavascript.com/projects/javascript-sprintf -// -// Copyright (c) Alexandru Marasteanu -// All rights reserved. -var strRepeat = _dereq_('./helper/strRepeat'); -var toString = Object.prototype.toString; -var sprintf = (function() { - function get_type(variable) { - return toString.call(variable).slice(8, -1).toLowerCase(); - } - - var str_repeat = strRepeat; - - var str_format = function() { - if (!str_format.cache.hasOwnProperty(arguments[0])) { - str_format.cache[arguments[0]] = str_format.parse(arguments[0]); - } - return str_format.format.call(null, str_format.cache[arguments[0]], arguments); - }; - - str_format.format = function(parse_tree, argv) { - var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length; - for (i = 0; i < tree_length; i++) { - node_type = get_type(parse_tree[i]); - if (node_type === 'string') { - output.push(parse_tree[i]); - } - else if (node_type === 'array') { - match = parse_tree[i]; // convenience purposes only - if (match[2]) { // keyword argument - arg = argv[cursor]; - for (k = 0; k < match[2].length; k++) { - if (!arg.hasOwnProperty(match[2][k])) { - throw new Error(sprintf('[_.sprintf] property "%s" does not exist', match[2][k])); - } - arg = arg[match[2][k]]; - } - } else if (match[1]) { // positional argument (explicit) - arg = argv[match[1]]; - } - else { // positional argument (implicit) - arg = argv[cursor++]; - } - - if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) { - throw new Error(sprintf('[_.sprintf] expecting number but found %s', get_type(arg))); - } - switch (match[8]) { - case 'b': arg = arg.toString(2); break; - case 'c': arg = String.fromCharCode(arg); break; - case 'd': arg = parseInt(arg, 10); break; - case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break; - case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break; - case 'o': arg = arg.toString(8); break; - case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break; - case 'u': arg = Math.abs(arg); break; - case 'x': arg = arg.toString(16); break; - case 'X': arg = arg.toString(16).toUpperCase(); break; - } - arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg); - pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' '; - pad_length = match[6] - String(arg).length; - pad = match[6] ? str_repeat(pad_character, pad_length) : ''; - output.push(match[5] ? arg + pad : pad + arg); - } - } - return output.join(''); - }; - - str_format.cache = {}; - - str_format.parse = function(fmt) { - var _fmt = fmt, match = [], parse_tree = [], arg_names = 0; - while (_fmt) { - if ((match = /^[^\x25]+/.exec(_fmt)) !== null) { - parse_tree.push(match[0]); - } - else if ((match = /^\x25{2}/.exec(_fmt)) !== null) { - parse_tree.push('%'); - } - else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) { - if (match[2]) { - arg_names |= 1; - var field_list = [], replacement_field = match[2], field_match = []; - if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') { - if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - } - else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - } - else { - throw new Error('[_.sprintf] huh?'); - } - } - } - else { - throw new Error('[_.sprintf] huh?'); - } - match[2] = field_list; - } - else { - arg_names |= 2; - } - if (arg_names === 3) { - throw new Error('[_.sprintf] mixing positional and named placeholders is not (yet) supported'); - } - parse_tree.push(match); - } - else { - throw new Error('[_.sprintf] huh?'); - } - _fmt = _fmt.substring(match[0].length); - } - return parse_tree; - }; - - return str_format; -})(); - -module.exports = sprintf; - -},{"./helper/strRepeat":22}],48:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var toPositive = _dereq_('./helper/toPositive'); - -module.exports = function startsWith(str, starts, position) { - str = makeString(str); - starts = '' + starts; - position = position == null ? 0 : Math.min(toPositive(position), str.length); - return str.lastIndexOf(starts, position) === position; -}; - -},{"./helper/makeString":21,"./helper/toPositive":23}],49:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strLeft(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = !sep ? -1 : str.indexOf(sep); - return~ pos ? str.slice(0, pos) : str; -}; - -},{"./helper/makeString":21}],50:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strLeftBack(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = str.lastIndexOf(sep); - return~ pos ? str.slice(0, pos) : str; -}; - -},{"./helper/makeString":21}],51:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strRight(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = !sep ? -1 : str.indexOf(sep); - return~ pos ? str.slice(pos + sep.length, str.length) : str; -}; - -},{"./helper/makeString":21}],52:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strRightBack(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = !sep ? -1 : str.lastIndexOf(sep); - return~ pos ? str.slice(pos + sep.length, str.length) : str; -}; - -},{"./helper/makeString":21}],53:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function stripTags(str) { - return makeString(str).replace(/<\/?[^>]+>/g, ''); -}; - -},{"./helper/makeString":21}],54:[function(_dereq_,module,exports){ -var adjacent = _dereq_('./helper/adjacent'); - -module.exports = function succ(str) { - return adjacent(str, 1); -}; - -},{"./helper/adjacent":16}],55:[function(_dereq_,module,exports){ -module.exports = function surround(str, wrapper) { - return [wrapper, str, wrapper].join(''); -}; - -},{}],56:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function swapCase(str) { - return makeString(str).replace(/\S/g, function(c) { - return c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase(); - }); -}; - -},{"./helper/makeString":21}],57:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function titleize(str) { - return makeString(str).toLowerCase().replace(/(?:^|\s|-)\S/g, function(c) { - return c.toUpperCase(); - }); -}; - -},{"./helper/makeString":21}],58:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -function boolMatch(s, matchers) { - var i, matcher, down = s.toLowerCase(); - matchers = [].concat(matchers); - for (i = 0; i < matchers.length; i += 1) { - matcher = matchers[i]; - if (!matcher) continue; - if (matcher.test && matcher.test(s)) return true; - if (matcher.toLowerCase() === down) return true; - } -} - -module.exports = function toBoolean(str, trueValues, falseValues) { - if (typeof str === "number") str = "" + str; - if (typeof str !== "string") return !!str; - str = trim(str); - if (boolMatch(str, trueValues || ["true", "1"])) return true; - if (boolMatch(str, falseValues || ["false", "0"])) return false; -}; - -},{"./trim":62}],59:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function toNumber(num, precision) { - if (num == null) return 0; - var factor = Math.pow(10, isFinite(precision) ? precision : 0); - return Math.round(num * factor) / factor; -}; - -},{"./trim":62}],60:[function(_dereq_,module,exports){ -var rtrim = _dereq_('./rtrim'); - -module.exports = function toSentence(array, separator, lastSeparator, serial) { - separator = separator || ', '; - lastSeparator = lastSeparator || ' and '; - var a = array.slice(), - lastMember = a.pop(); - - if (array.length > 2 && serial) lastSeparator = rtrim(separator) + lastSeparator; - - return a.length ? a.join(separator) + lastSeparator + lastMember : lastMember; -}; - -},{"./rtrim":44}],61:[function(_dereq_,module,exports){ -var toSentence = _dereq_('./toSentence'); - -module.exports = function toSentenceSerial(array, sep, lastSep) { - return toSentence(array, sep, lastSep, true); -}; - -},{"./toSentence":60}],62:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var nativeTrim = String.prototype.trim; - -module.exports = function trim(str, characters) { - str = makeString(str); - if (!characters && nativeTrim) return nativeTrim.call(str); - characters = defaultToWhiteSpace(characters); - return str.replace(new RegExp('^' + characters + '+|' + characters + '+$', 'g'), ''); -}; - -},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],63:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function truncate(str, length, truncateStr) { - str = makeString(str); - truncateStr = truncateStr || '...'; - length = ~~length; - return str.length > length ? str.slice(0, length) + truncateStr : str; -}; - -},{"./helper/makeString":21}],64:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function underscored(str) { - return trim(str).replace(/([a-z\d])([A-Z]+)/g, '$1_$2').replace(/[-\s]+/g, '_').toLowerCase(); -}; - -},{"./trim":62}],65:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var htmlEntities = _dereq_('./helper/htmlEntities'); - -module.exports = function unescapeHTML(str) { - return makeString(str).replace(/\&([^;]+);/g, function(entity, entityCode) { - var match; - - if (entityCode in htmlEntities) { - return htmlEntities[entityCode]; - } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) { - return String.fromCharCode(parseInt(match[1], 16)); - } else if (match = entityCode.match(/^#(\d+)$/)) { - return String.fromCharCode(~~match[1]); - } else { - return entity; - } - }); -}; - -},{"./helper/htmlEntities":20,"./helper/makeString":21}],66:[function(_dereq_,module,exports){ -module.exports = function unquote(str, quoteChar) { - quoteChar = quoteChar || '"'; - if (str[0] === quoteChar && str[str.length - 1] === quoteChar) - return str.slice(1, str.length - 1); - else return str; -}; - -},{}],67:[function(_dereq_,module,exports){ -var sprintf = _dereq_('./sprintf'); - -module.exports = function vsprintf(fmt, argv) { - argv.unshift(fmt); - return sprintf.apply(null, argv); -}; - -},{"./sprintf":47}],68:[function(_dereq_,module,exports){ -var isBlank = _dereq_('./isBlank'); -var trim = _dereq_('./trim'); - -module.exports = function words(str, delimiter) { - if (isBlank(str)) return []; - return trim(str, delimiter).split(delimiter || /\s+/); -}; - -},{"./isBlank":27,"./trim":62}],69:[function(_dereq_,module,exports){ -// Wrap -// wraps a string by a certain width - -makeString = _dereq_('./helper/makeString'); - -module.exports = function wrap(str, options){ - str = makeString(str); - - options = options || {}; - - width = options.width || 75; - seperator = options.seperator || '\n'; - cut = options.cut || false; - preserveSpaces = options.preserveSpaces || false; - trailingSpaces = options.trailingSpaces || false; - - if(width <= 0){ - return str; - } - - else if(!cut){ - - words = str.split(" "); - result = ""; - current_column = 0; - - while(words.length > 0){ - - // if adding a space and the next word would cause this line to be longer than width... - if(1 + words[0].length + current_column > width){ - //start a new line if this line is not already empty - if(current_column > 0){ - // add a space at the end of the line is preserveSpaces is true - if (preserveSpaces){ - result += ' '; - current_column++; - } - // fill the rest of the line with spaces if trailingSpaces option is true - else if(trailingSpaces){ - while(current_column < width){ - result += ' '; - current_column++; - } - } - //start new line - result += seperator; - current_column = 0; - } - } - - // if not at the begining of the line, add a space in front of the word - if(current_column > 0){ - result += " "; - current_column++; - } - - // tack on the next word, update current column, a pop words array - result += words[0]; - current_column += words[0].length; - words.shift(); - - } - - // fill the rest of the line with spaces if trailingSpaces option is true - if(trailingSpaces){ - while(current_column < width){ - result += ' '; - current_column++; - } - } - - return result; - - } - - else { - - index = 0; - result = ""; - - // walk through each character and add seperators where appropriate - while(index < str.length){ - if(index % width == 0 && index > 0){ - result += seperator; - } - result += str.charAt(index); - index++; - } - - // fill the rest of the line with spaces if trailingSpaces option is true - if(trailingSpaces){ - while(index % width > 0){ - result += ' '; - index++; - } - } - - return result; - } -}; -},{"./helper/makeString":21}]},{},[15]) -(15) -}); \ No newline at end of file diff --git a/dist/underscore.string.min.js b/dist/underscore.string.min.js index cba8286e..13218a00 100644 --- a/dist/underscore.string.min.js +++ b/dist/underscore.string.min.js @@ -1,3 +1,3 @@ /* underscore.string 3.2.2 | MIT licensed | http://epeli.github.com/underscore.string/ */ -!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var r;"undefined"!=typeof window?r=window:"undefined"!=typeof global?r=global:"undefined"!=typeof self&&(r=self),r.s=e()}}(function(){return function e(r,t,n){function i(o,u){if(!t[o]){if(!r[o]){var c="function"==typeof require&&require;if(!u&&c)return c(o,!0);if(a)return a(o,!0);throw new Error("Cannot find module '"+o+"'")}var p=t[o]={exports:{}};r[o][0].call(p.exports,function(e){var t=r[o][1][e];return i(t?t:e)},p,p.exports,e,r,t,n)}return t[o].exports}for(var a="function"==typeof require&&require,o=0;o0?e.match(new RegExp(".{1,"+r+"}","g")):[e])}},{}],5:[function(e,r){var t=e("./capitalize"),n=e("./camelize"),i=e("./helper/makeString");r.exports=function(e){return e=i(e),t(n(e.replace(/[\W_]/g," ")).replace(/\s/g,""))}},{"./camelize":1,"./capitalize":2,"./helper/makeString":21}],6:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/\s\s+/g," ")}},{"./trim":62}],7:[function(e,r){var t=e("./helper/makeString"),n="ąàáäâãåæăćčĉęèéëêĝĥìíïîĵłľńňòóöőôõðøśșšŝťțŭùúüűûñÿýçżźž",i="aaaaaaaaaccceeeeeghiiiijllnnoooooooossssttuuuuuunyyczzz";n+=n.toUpperCase(),i+=i.toUpperCase(),i=i.split(""),n+="ß",i.push("ss"),r.exports=function(e){return t(e).replace(/.{1}/g,function(e){var r=n.indexOf(e);return-1===r?e:i[r]})}},{"./helper/makeString":21}],8:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return e=t(e),r=t(r),0===e.length||0===r.length?0:e.split(r).length-1}},{"./helper/makeString":21}],9:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([A-Z])/g,"-$1").replace(/[-_\s]+/g,"-").toLowerCase()}},{"./trim":62}],10:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return e=t(e),e.charAt(0).toLowerCase()+e.slice(1)}},{"./helper/makeString":21}],11:[function(e,r){function t(e){for(var r=e.match(/^[\s\\t]*/gm),t=r[0].length,n=1;n=0&&e.indexOf(r,i)===i}},{"./helper/makeString":21,"./helper/toPositive":23}],13:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/escapeChars"),i="[";for(var a in n)i+=a;i+="]";var o=new RegExp(i,"g");r.exports=function(e){return t(e).replace(o,function(e){return"&"+n[e]+";"})}},{"./helper/escapeChars":18,"./helper/makeString":21}],14:[function(e,r){r.exports=function(){var e={};for(var r in this)this.hasOwnProperty(r)&&!r.match(/^(?:include|contains|reverse|join)$/)&&(e[r]=this[r]);return e}},{}],15:[function(e,r){"use strict";function t(e){return this instanceof t?void(this._wrapped=e):new t(e)}function n(e,r){"function"==typeof r&&(t.prototype[e]=function(){var e=[this._wrapped].concat(Array.prototype.slice.call(arguments)),n=r.apply(null,e);return"string"==typeof n?new t(n):n})}function i(e){n(e,function(r){var t=Array.prototype.slice.call(arguments,1);return String.prototype[e].apply(r,t)})}t.VERSION="3.2.2",t.isBlank=e("./isBlank"),t.stripTags=e("./stripTags"),t.capitalize=e("./capitalize"),t.decapitalize=e("./decapitalize"),t.chop=e("./chop"),t.trim=e("./trim"),t.clean=e("./clean"),t.cleanDiacritics=e("./cleanDiacritics"),t.count=e("./count"),t.chars=e("./chars"),t.swapCase=e("./swapCase"),t.escapeHTML=e("./escapeHTML"),t.unescapeHTML=e("./unescapeHTML"),t.splice=e("./splice"),t.insert=e("./insert"),t.replaceAll=e("./replaceAll"),t.include=e("./include"),t.join=e("./join"),t.lines=e("./lines"),t.dedent=e("./dedent"),t.reverse=e("./reverse"),t.startsWith=e("./startsWith"),t.endsWith=e("./endsWith"),t.pred=e("./pred"),t.succ=e("./succ"),t.titleize=e("./titleize"),t.camelize=e("./camelize"),t.underscored=e("./underscored"),t.dasherize=e("./dasherize"),t.classify=e("./classify"),t.humanize=e("./humanize"),t.ltrim=e("./ltrim"),t.rtrim=e("./rtrim"),t.truncate=e("./truncate"),t.prune=e("./prune"),t.words=e("./words"),t.pad=e("./pad"),t.lpad=e("./lpad"),t.rpad=e("./rpad"),t.lrpad=e("./lrpad"),t.sprintf=e("./sprintf"),t.vsprintf=e("./vsprintf"),t.toNumber=e("./toNumber"),t.numberFormat=e("./numberFormat"),t.strRight=e("./strRight"),t.strRightBack=e("./strRightBack"),t.strLeft=e("./strLeft"),t.strLeftBack=e("./strLeftBack"),t.toSentence=e("./toSentence"),t.toSentenceSerial=e("./toSentenceSerial"),t.slugify=e("./slugify"),t.surround=e("./surround"),t.quote=e("./quote"),t.unquote=e("./unquote"),t.repeat=e("./repeat"),t.naturalCmp=e("./naturalCmp"),t.levenshtein=e("./levenshtein"),t.toBoolean=e("./toBoolean"),t.exports=e("./exports"),t.escapeRegExp=e("./helper/escapeRegExp"),t.wrap=e("./wrap"),t.strip=t.trim,t.lstrip=t.ltrim,t.rstrip=t.rtrim,t.center=t.lrpad,t.rjust=t.lpad,t.ljust=t.rpad,t.contains=t.include,t.q=t.quote,t.toBool=t.toBoolean,t.camelcase=t.camelize,t.prototype={value:function(){return this._wrapped}};for(var a in t)n(a,t[a]);n("tap",function(e,r){return r(e)});var o=["toUpperCase","toLowerCase","split","replace","slice","substring","substr","concat"];for(var a in o)i(o[a]);r.exports=t},{"./camelize":1,"./capitalize":2,"./chars":3,"./chop":4,"./classify":5,"./clean":6,"./cleanDiacritics":7,"./count":8,"./dasherize":9,"./decapitalize":10,"./dedent":11,"./endsWith":12,"./escapeHTML":13,"./exports":14,"./helper/escapeRegExp":19,"./humanize":24,"./include":25,"./insert":26,"./isBlank":27,"./join":28,"./levenshtein":29,"./lines":30,"./lpad":31,"./lrpad":32,"./ltrim":33,"./naturalCmp":34,"./numberFormat":35,"./pad":36,"./pred":37,"./prune":38,"./quote":39,"./repeat":40,"./replaceAll":41,"./reverse":42,"./rpad":43,"./rtrim":44,"./slugify":45,"./splice":46,"./sprintf":47,"./startsWith":48,"./strLeft":49,"./strLeftBack":50,"./strRight":51,"./strRightBack":52,"./stripTags":53,"./succ":54,"./surround":55,"./swapCase":56,"./titleize":57,"./toBoolean":58,"./toNumber":59,"./toSentence":60,"./toSentenceSerial":61,"./trim":62,"./truncate":63,"./underscored":64,"./unescapeHTML":65,"./unquote":66,"./vsprintf":67,"./words":68,"./wrap":69}],16:[function(e,r){var t=e("./makeString");r.exports=function(e,r){return e=t(e),0===e.length?"":e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+r)}},{"./makeString":21}],17:[function(e,r){var t=e("./escapeRegExp");r.exports=function(e){return null==e?"\\s":e.source?e.source:"["+t(e)+"]"}},{"./escapeRegExp":19}],18:[function(e,r){var t={"¢":"cent","£":"pound","¥":"yen","€":"euro","©":"copy","®":"reg","<":"lt",">":"gt",'"':"quot","&":"amp","'":"#39"};r.exports=t},{}],19:[function(e,r){var t=e("./makeString");r.exports=function(e){return t(e).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}},{"./makeString":21}],20:[function(e,r){var t={nbsp:" ",cent:"¢",pound:"£",yen:"¥",euro:"€",copy:"©",reg:"®",lt:"<",gt:">",quot:'"',amp:"&",apos:"'"};r.exports=t},{}],21:[function(e,r){r.exports=function(e){return null==e?"":""+e}},{}],22:[function(e,r){r.exports=function(e,r){if(1>r)return"";for(var t="";r>0;)1&r&&(t+=e),r>>=1,e+=e;return t}},{}],23:[function(e,r){r.exports=function(e){return 0>e?0:+e||0}},{}],24:[function(e,r){var t=e("./capitalize"),n=e("./underscored"),i=e("./trim");r.exports=function(e){return t(i(n(e).replace(/_id$/,"").replace(/_/g," ")))}},{"./capitalize":2,"./trim":62,"./underscored":64}],25:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return""===r?!0:-1!==t(e).indexOf(r)}},{"./helper/makeString":21}],26:[function(e,r){var t=e("./splice");r.exports=function(e,r,n){return t(e,r,0,n)}},{"./splice":46}],27:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return/^\s*$/.test(t(e))}},{"./helper/makeString":21}],28:[function(e,r){var t=e("./helper/makeString"),n=[].slice;r.exports=function(){var e=n.call(arguments),r=e.shift();return e.join(t(r))}},{"./helper/makeString":21}],29:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){"use strict";if(e=t(e),r=t(r),e===r)return 0;if(!e||!r)return Math.max(e.length,r.length);for(var n=new Array(r.length+1),i=0;ic&&(a=c),c=n[o+1]+1,a>c&&(a=c),n[o]=u}n[o]=a}return a}},{"./helper/makeString":21}],30:[function(e,r){r.exports=function(e){return null==e?[]:String(e).split(/\r\n?|\n/)}},{}],31:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n)}},{"./pad":36}],32:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"both")}},{"./pad":36}],33:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimLeft;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+"),""))}},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],34:[function(e,r){r.exports=function(e,r){if(e==r)return 0;if(!e)return-1;if(!r)return 1;for(var t=/(\.\d+|\d+|\D+)/g,n=String(e).match(t),i=String(r).match(t),a=Math.min(n.length,i.length),o=0;a>o;o++){var u=n[o],c=i[o];if(u!==c){var p=+u,s=+c;return p===p&&s===s?p>s?1:-1:c>u?-1:1}}return n.length!=i.length?n.length-i.length:r>e?-1:1}},{}],35:[function(e,r){r.exports=function(e,r,t,n){if(isNaN(e)||null==e)return"";e=e.toFixed(~~r),n="string"==typeof n?n:",";var i=e.split("."),a=i[0],o=i[1]?(t||".")+i[1]:"";return a.replace(/(\d)(?=(?:\d{3})+$)/g,"$1"+n)+o}},{}],36:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function(e,r,i,a){e=t(e),r=~~r;var o=0;switch(i?i.length>1&&(i=i.charAt(0)):i=" ",a){case"right":return o=r-e.length,e+n(i,o);case"both":return o=r-e.length,n(i,Math.ceil(o/2))+e+n(i,Math.floor(o/2));default:return o=r-e.length,n(i,o)+e}}},{"./helper/makeString":21,"./helper/strRepeat":22}],37:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,-1)}},{"./helper/adjacent":16}],38:[function(e,r){var t=e("./helper/makeString"),n=e("./rtrim");r.exports=function(e,r,i){if(e=t(e),r=~~r,i=null!=i?String(i):"...",e.length<=r)return e;var a=function(e){return e.toUpperCase()!==e.toLowerCase()?"A":" "},o=e.slice(0,r+1).replace(/.(?=\W*\w*$)/g,a);return o=o.slice(o.length-2).match(/\w\w/)?o.replace(/\s*\S+$/,""):n(o.slice(0,o.length-1)),(o+i).length>e.length?e:e.slice(0,o.length)+i}},{"./helper/makeString":21,"./rtrim":44}],39:[function(e,r){var t=e("./surround");r.exports=function(e,r){return t(e,r||'"')}},{"./surround":55}],40:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function i(e,r,a){if(e=t(e),r=~~r,null==a)return n(e,r);for(var i=[];r>0;i[--r]=e);return i.join(a)}},{"./helper/makeString":21,"./helper/strRepeat":22}],41:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n,i){var a=i===!0?"gi":"g",o=new RegExp(r,a);return t(e).replace(o,n)}},{"./helper/makeString":21}],42:[function(e,r){var t=e("./chars");r.exports=function(e){return t(e).reverse().join("")}},{"./chars":3}],43:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"right")}},{"./pad":36}],44:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimRight;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp(r+"+$"),""))}},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],45:[function(e,r){var t=(e("./helper/makeString"),e("./helper/defaultToWhiteSpace"),e("./trim")),n=e("./dasherize"),i=e("./cleanDiacritics");r.exports=function(e){return t(n(i(e).replace(/[^\w\s-]/g,"-").toLowerCase()),"-")}},{"./cleanDiacritics":7,"./dasherize":9,"./helper/defaultToWhiteSpace":17,"./helper/makeString":21,"./trim":62}],46:[function(e,r){var t=e("./chars");r.exports=function(e,r,n,i){var a=t(e);return a.splice(~~r,~~n,i),a.join("")}},{"./chars":3}],47:[function(e,r){var t=e("./helper/strRepeat"),n=Object.prototype.toString,i=function(){function e(e){return n.call(e).slice(8,-1).toLowerCase()}var r=t,a=function(){return a.cache.hasOwnProperty(arguments[0])||(a.cache[arguments[0]]=a.parse(arguments[0])),a.format.call(null,a.cache[arguments[0]],arguments)};return a.format=function(t,n){var a,o,u,c,p,s,l,f=1,h=t.length,g="",m=[];for(o=0;h>o;o++)if(g=e(t[o]),"string"===g)m.push(t[o]);else if("array"===g){if(c=t[o],c[2])for(a=n[f],u=0;u=0?"+"+a:a,s=c[4]?"0"==c[4]?"0":c[4].charAt(1):" ",l=c[6]-String(a).length,p=c[6]?r(s,l):"",m.push(c[5]?a+p:p+a)}return m.join("")},a.cache={},a.parse=function(e){for(var r=e,t=[],n=[],i=0;r;){if(null!==(t=/^[^\x25]+/.exec(r)))n.push(t[0]);else if(null!==(t=/^\x25{2}/.exec(r)))n.push("%");else{if(null===(t=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(r)))throw new Error("[_.sprintf] huh?");if(t[2]){i|=1;var a=[],o=t[2],u=[];if(null===(u=/^([a-z_][a-z_\d]*)/i.exec(o)))throw new Error("[_.sprintf] huh?");for(a.push(u[1]);""!==(o=o.substring(u[0].length));)if(null!==(u=/^\.([a-z_][a-z_\d]*)/i.exec(o)))a.push(u[1]);else{if(null===(u=/^\[(\d+)\]/.exec(o)))throw new Error("[_.sprintf] huh?");a.push(u[1])}t[2]=a}else i|=2;if(3===i)throw new Error("[_.sprintf] mixing positional and named placeholders is not (yet) supported");n.push(t)}r=r.substring(t[0].length)}return n},a}();r.exports=i},{"./helper/strRepeat":22}],48:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/toPositive");r.exports=function(e,r,i){return e=t(e),r=""+r,i=null==i?0:Math.min(n(i),e.length),e.lastIndexOf(r,i)===i}},{"./helper/makeString":21,"./helper/toPositive":23}],49:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(0,n):e}},{"./helper/makeString":21}],50:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=e.lastIndexOf(r);return~n?e.slice(0,n):e}},{"./helper/makeString":21}],51:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":21}],52:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.lastIndexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":21}],53:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/<\/?[^>]+>/g,"")}},{"./helper/makeString":21}],54:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,1)}},{"./helper/adjacent":16}],55:[function(e,r){r.exports=function(e,r){return[r,e,r].join("")}},{}],56:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/\S/g,function(e){return e===e.toUpperCase()?e.toLowerCase():e.toUpperCase()})}},{"./helper/makeString":21}],57:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).toLowerCase().replace(/(?:^|\s|-)\S/g,function(e){return e.toUpperCase()})}},{"./helper/makeString":21}],58:[function(e,r){function t(e,r){var t,n,i=e.toLowerCase();for(r=[].concat(r),t=0;t2&&i&&(n=t(r)+n),a.length?a.join(r)+n+o:o}},{"./rtrim":44}],61:[function(e,r){var t=e("./toSentence");r.exports=function(e,r,n){return t(e,r,n,!0)}},{"./toSentence":60}],62:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trim;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+|"+r+"+$","g"),""))}},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],63:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n){return e=t(e),n=n||"...",r=~~r,e.length>r?e.slice(0,r)+n:e}},{"./helper/makeString":21}],64:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}},{"./trim":62}],65:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/htmlEntities");r.exports=function(e){return t(e).replace(/\&([^;]+);/g,function(e,r){var t;return r in n?n[r]:(t=r.match(/^#x([\da-fA-F]+)$/))?String.fromCharCode(parseInt(t[1],16)):(t=r.match(/^#(\d+)$/))?String.fromCharCode(~~t[1]):e})}},{"./helper/htmlEntities":20,"./helper/makeString":21}],66:[function(e,r){r.exports=function(e,r){return r=r||'"',e[0]===r&&e[e.length-1]===r?e.slice(1,e.length-1):e}},{}],67:[function(e,r){var t=e("./sprintf");r.exports=function(e,r){return r.unshift(e),t.apply(null,r)}},{"./sprintf":47}],68:[function(e,r){var t=e("./isBlank"),n=e("./trim");r.exports=function(e,r){return t(e)?[]:n(e,r).split(r||/\s+/)}},{"./isBlank":27,"./trim":62}],69:[function(e,r){makeString=e("./helper/makeString"),r.exports=function(e,r){if(e=makeString(e),r=r||{},width=r.width||75,seperator=r.seperator||"\n",cut=r.cut||!1,preserveSpaces=r.preserveSpaces||!1,trailingSpaces=r.trailingSpaces||!1,0>=width)return e;if(cut){for(index=0,result="";index0&&(result+=seperator),result+=e.charAt(index),index++;if(trailingSpaces)for(;index%width>0;)result+=" ",index++;return result}for(words=e.split(" "),result="",current_column=0;words.length>0;){if(1+words[0].length+current_column>width&¤t_column>0){if(preserveSpaces)result+=" ",current_column++;else if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;result+=seperator,current_column=0}current_column>0&&(result+=" ",current_column++),result+=words[0],current_column+=words[0].length,words.shift()}if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;return result}},{"./helper/makeString":21}]},{},[15])(15)}); \ No newline at end of file +!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var r;"undefined"!=typeof window?r=window:"undefined"!=typeof global?r=global:"undefined"!=typeof self&&(r=self),r.s=e()}}(function(){return function e(r,t,n){function i(o,u){if(!t[o]){if(!r[o]){var p="function"==typeof require&&require;if(!u&&p)return p(o,!0);if(a)return a(o,!0);throw new Error("Cannot find module '"+o+"'")}var c=t[o]={exports:{}};r[o][0].call(c.exports,function(e){var t=r[o][1][e];return i(t?t:e)},c,c.exports,e,r,t,n)}return t[o].exports}for(var a="function"==typeof require&&require,o=0;o0?e.match(new RegExp(".{1,"+r+"}","g")):[e])}},{}],5:[function(e,r){var t=e("./capitalize"),n=e("./camelize"),i=e("./helper/makeString");r.exports=function(e){return e=i(e),t(n(e.replace(/[\W_]/g," ")).replace(/\s/g,""))}},{"./camelize":1,"./capitalize":2,"./helper/makeString":22}],6:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/\s\s+/g," ")}},{"./trim":64}],7:[function(e,r){var t=e("./helper/makeString"),n="ąàáäâãåæăćčĉęèéëêĝĥìíïîĵłľńňòóöőôõðøśșšŝťțŭùúüűûñÿýçżźž",i="aaaaaaaaaccceeeeeghiiiijllnnoooooooossssttuuuuuunyyczzz";n+=n.toUpperCase(),i+=i.toUpperCase(),i=i.split(""),n+="ß",i.push("ss"),r.exports=function(e){return t(e).replace(/.{1}/g,function(e){var r=n.indexOf(e);return-1===r?e:i[r]})}},{"./helper/makeString":22}],8:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return e=t(e),r=t(r),0===e.length||0===r.length?0:e.split(r).length-1}},{"./helper/makeString":22}],9:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([A-Z])/g,"-$1").replace(/[-_\s]+/g,"-").toLowerCase()}},{"./trim":64}],10:[function(e,r){var t=e("./decapitalize"),n=e("./trim");r.exports=function(e,r){return e=n(e).split(/(?=[A-Z])/).map(function(e){return t(e)}),e.join(r||"_")}},{"./decapitalize":11,"./trim":64}],11:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return e=t(e),e.charAt(0).toLowerCase()+e.slice(1)}},{"./helper/makeString":22}],12:[function(e,r){function t(e){for(var r=e.match(/^[\s\\t]*/gm),t=r[0].length,n=1;n=0&&e.indexOf(r,i)===i}},{"./helper/makeString":22,"./helper/toPositive":24}],14:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/escapeChars"),i="[";for(var a in n)i+=a;i+="]";var o=new RegExp(i,"g");r.exports=function(e){return t(e).replace(o,function(e){return"&"+n[e]+";"})}},{"./helper/escapeChars":19,"./helper/makeString":22}],15:[function(e,r){r.exports=function(){var e={};for(var r in this)this.hasOwnProperty(r)&&!r.match(/^(?:include|contains|reverse|join|map)$/)&&(e[r]=this[r]);return e}},{}],16:[function(e,r){"use strict";function t(e){return this instanceof t?void(this._wrapped=e):new t(e)}function n(e,r){"function"==typeof r&&(t.prototype[e]=function(){var e=[this._wrapped].concat(Array.prototype.slice.call(arguments)),n=r.apply(null,e);return"string"==typeof n?new t(n):n})}function i(e){n(e,function(r){var t=Array.prototype.slice.call(arguments,1);return String.prototype[e].apply(r,t)})}t.VERSION="3.2.2",t.isBlank=e("./isBlank"),t.stripTags=e("./stripTags"),t.capitalize=e("./capitalize"),t.decapitalize=e("./decapitalize"),t.chop=e("./chop"),t.trim=e("./trim"),t.clean=e("./clean"),t.cleanDiacritics=e("./cleanDiacritics"),t.count=e("./count"),t.chars=e("./chars"),t.swapCase=e("./swapCase"),t.escapeHTML=e("./escapeHTML"),t.unescapeHTML=e("./unescapeHTML"),t.splice=e("./splice"),t.insert=e("./insert"),t.replaceAll=e("./replaceAll"),t.include=e("./include"),t.join=e("./join"),t.lines=e("./lines"),t.dedent=e("./dedent"),t.reverse=e("./reverse"),t.startsWith=e("./startsWith"),t.endsWith=e("./endsWith"),t.pred=e("./pred"),t.succ=e("./succ"),t.titleize=e("./titleize"),t.camelize=e("./camelize"),t.decamelize=e("./decamelize"),t.underscored=e("./underscored"),t.dasherize=e("./dasherize"),t.classify=e("./classify"),t.humanize=e("./humanize"),t.ltrim=e("./ltrim"),t.rtrim=e("./rtrim"),t.truncate=e("./truncate"),t.prune=e("./prune"),t.words=e("./words"),t.pad=e("./pad"),t.lpad=e("./lpad"),t.rpad=e("./rpad"),t.lrpad=e("./lrpad"),t.sprintf=e("./sprintf"),t.vsprintf=e("./vsprintf"),t.toNumber=e("./toNumber"),t.numberFormat=e("./numberFormat"),t.strRight=e("./strRight"),t.strRightBack=e("./strRightBack"),t.strLeft=e("./strLeft"),t.strLeftBack=e("./strLeftBack"),t.toSentence=e("./toSentence"),t.toSentenceSerial=e("./toSentenceSerial"),t.slugify=e("./slugify"),t.surround=e("./surround"),t.quote=e("./quote"),t.unquote=e("./unquote"),t.repeat=e("./repeat"),t.naturalCmp=e("./naturalCmp"),t.levenshtein=e("./levenshtein"),t.toBoolean=e("./toBoolean"),t.exports=e("./exports"),t.escapeRegExp=e("./helper/escapeRegExp"),t.wrap=e("./wrap"),t.map=e("./map"),t.strip=t.trim,t.lstrip=t.ltrim,t.rstrip=t.rtrim,t.center=t.lrpad,t.rjust=t.lpad,t.ljust=t.rpad,t.contains=t.include,t.q=t.quote,t.toBool=t.toBoolean,t.camelcase=t.camelize,t.mapChars=t.map,t.prototype={value:function(){return this._wrapped}};for(var a in t)n(a,t[a]);n("tap",function(e,r){return r(e)});var o=["toUpperCase","toLowerCase","split","replace","slice","substring","substr","concat"];for(var a in o)i(o[a]);r.exports=t},{"./camelize":1,"./capitalize":2,"./chars":3,"./chop":4,"./classify":5,"./clean":6,"./cleanDiacritics":7,"./count":8,"./dasherize":9,"./decamelize":10,"./decapitalize":11,"./dedent":12,"./endsWith":13,"./escapeHTML":14,"./exports":15,"./helper/escapeRegExp":20,"./humanize":25,"./include":26,"./insert":27,"./isBlank":28,"./join":29,"./levenshtein":30,"./lines":31,"./lpad":32,"./lrpad":33,"./ltrim":34,"./map":35,"./naturalCmp":36,"./numberFormat":37,"./pad":38,"./pred":39,"./prune":40,"./quote":41,"./repeat":42,"./replaceAll":43,"./reverse":44,"./rpad":45,"./rtrim":46,"./slugify":47,"./splice":48,"./sprintf":49,"./startsWith":50,"./strLeft":51,"./strLeftBack":52,"./strRight":53,"./strRightBack":54,"./stripTags":55,"./succ":56,"./surround":57,"./swapCase":58,"./titleize":59,"./toBoolean":60,"./toNumber":61,"./toSentence":62,"./toSentenceSerial":63,"./trim":64,"./truncate":65,"./underscored":66,"./unescapeHTML":67,"./unquote":68,"./vsprintf":69,"./words":70,"./wrap":71}],17:[function(e,r){var t=e("./makeString");r.exports=function(e,r){return e=t(e),0===e.length?"":e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+r)}},{"./makeString":22}],18:[function(e,r){var t=e("./escapeRegExp");r.exports=function(e){return null==e?"\\s":e.source?e.source:"["+t(e)+"]"}},{"./escapeRegExp":20}],19:[function(e,r){var t={"¢":"cent","£":"pound","¥":"yen","€":"euro","©":"copy","®":"reg","<":"lt",">":"gt",'"':"quot","&":"amp","'":"#39"};r.exports=t},{}],20:[function(e,r){var t=e("./makeString");r.exports=function(e){return t(e).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}},{"./makeString":22}],21:[function(e,r){var t={nbsp:" ",cent:"¢",pound:"£",yen:"¥",euro:"€",copy:"©",reg:"®",lt:"<",gt:">",quot:'"',amp:"&",apos:"'"};r.exports=t},{}],22:[function(e,r){r.exports=function(e){return null==e?"":""+e}},{}],23:[function(e,r){r.exports=function(e,r){if(1>r)return"";for(var t="";r>0;)1&r&&(t+=e),r>>=1,e+=e;return t}},{}],24:[function(e,r){r.exports=function(e){return 0>e?0:+e||0}},{}],25:[function(e,r){var t=e("./capitalize"),n=e("./underscored"),i=e("./trim");r.exports=function(e){return t(i(n(e).replace(/_id$/,"").replace(/_/g," ")))}},{"./capitalize":2,"./trim":64,"./underscored":66}],26:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return""===r?!0:-1!==t(e).indexOf(r)}},{"./helper/makeString":22}],27:[function(e,r){var t=e("./splice");r.exports=function(e,r,n){return t(e,r,0,n)}},{"./splice":48}],28:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return/^\s*$/.test(t(e))}},{"./helper/makeString":22}],29:[function(e,r){var t=e("./helper/makeString"),n=[].slice;r.exports=function(){var e=n.call(arguments),r=e.shift();return e.join(t(r))}},{"./helper/makeString":22}],30:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){"use strict";if(e=t(e),r=t(r),e===r)return 0;if(!e||!r)return Math.max(e.length,r.length);for(var n=new Array(r.length+1),i=0;ip&&(a=p),p=n[o+1]+1,a>p&&(a=p),n[o]=u}n[o]=a}return a}},{"./helper/makeString":22}],31:[function(e,r){r.exports=function(e){return null==e?[]:String(e).split(/\r\n?|\n/)}},{}],32:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n)}},{"./pad":38}],33:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"both")}},{"./pad":38}],34:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimLeft;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+"),""))}},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],35:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return e=t(e),0===e.length||"function"!=typeof r?e:e.replace(/./g,r)}},{"./helper/makeString":22}],36:[function(e,r){r.exports=function(e,r){if(e==r)return 0;if(!e)return-1;if(!r)return 1;for(var t=/(\.\d+|\d+|\D+)/g,n=String(e).match(t),i=String(r).match(t),a=Math.min(n.length,i.length),o=0;a>o;o++){var u=n[o],p=i[o];if(u!==p){var c=+u,s=+p;return c===c&&s===s?c>s?1:-1:p>u?-1:1}}return n.length!=i.length?n.length-i.length:r>e?-1:1}},{}],37:[function(e,r){r.exports=function(e,r,t,n){if(isNaN(e)||null==e)return"";e=e.toFixed(~~r),n="string"==typeof n?n:",";var i=e.split("."),a=i[0],o=i[1]?(t||".")+i[1]:"";return a.replace(/(\d)(?=(?:\d{3})+$)/g,"$1"+n)+o}},{}],38:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function(e,r,i,a){e=t(e),r=~~r;var o=0;switch(i?i.length>1&&(i=i.charAt(0)):i=" ",a){case"right":return o=r-e.length,e+n(i,o);case"both":return o=r-e.length,n(i,Math.ceil(o/2))+e+n(i,Math.floor(o/2));default:return o=r-e.length,n(i,o)+e}}},{"./helper/makeString":22,"./helper/strRepeat":23}],39:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,-1)}},{"./helper/adjacent":17}],40:[function(e,r){var t=e("./helper/makeString"),n=e("./rtrim");r.exports=function(e,r,i){if(e=t(e),r=~~r,i=null!=i?String(i):"...",e.length<=r)return e;var a=function(e){return e.toUpperCase()!==e.toLowerCase()?"A":" "},o=e.slice(0,r+1).replace(/.(?=\W*\w*$)/g,a);return o=o.slice(o.length-2).match(/\w\w/)?o.replace(/\s*\S+$/,""):n(o.slice(0,o.length-1)),(o+i).length>e.length?e:e.slice(0,o.length)+i}},{"./helper/makeString":22,"./rtrim":46}],41:[function(e,r){var t=e("./surround");r.exports=function(e,r){return t(e,r||'"')}},{"./surround":57}],42:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function i(e,r,a){if(e=t(e),r=~~r,null==a)return n(e,r);for(var i=[];r>0;i[--r]=e);return i.join(a)}},{"./helper/makeString":22,"./helper/strRepeat":23}],43:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n,i){var a=i===!0?"gi":"g",o=new RegExp(r,a);return t(e).replace(o,n)}},{"./helper/makeString":22}],44:[function(e,r){var t=e("./chars");r.exports=function(e){return t(e).reverse().join("")}},{"./chars":3}],45:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"right")}},{"./pad":38}],46:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimRight;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp(r+"+$"),""))}},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],47:[function(e,r){var t=(e("./helper/makeString"),e("./helper/defaultToWhiteSpace"),e("./trim")),n=e("./dasherize"),i=e("./cleanDiacritics");r.exports=function(e){return t(n(i(e).replace(/[^\w\s-]/g,"-").toLowerCase()),"-")}},{"./cleanDiacritics":7,"./dasherize":9,"./helper/defaultToWhiteSpace":18,"./helper/makeString":22,"./trim":64}],48:[function(e,r){var t=e("./chars");r.exports=function(e,r,n,i){var a=t(e);return a.splice(~~r,~~n,i),a.join("")}},{"./chars":3}],49:[function(e,r){var t=e("./helper/strRepeat"),n=Object.prototype.toString,i=function(){function e(e){return n.call(e).slice(8,-1).toLowerCase()}var r=t,a=function(){return a.cache.hasOwnProperty(arguments[0])||(a.cache[arguments[0]]=a.parse(arguments[0])),a.format.call(null,a.cache[arguments[0]],arguments)};return a.format=function(t,n){var a,o,u,p,c,s,l,f=1,h=t.length,g="",m=[];for(o=0;h>o;o++)if(g=e(t[o]),"string"===g)m.push(t[o]);else if("array"===g){if(p=t[o],p[2])for(a=n[f],u=0;u=0?"+"+a:a,s=p[4]?"0"==p[4]?"0":p[4].charAt(1):" ",l=p[6]-String(a).length,c=p[6]?r(s,l):"",m.push(p[5]?a+c:c+a)}return m.join("")},a.cache={},a.parse=function(e){for(var r=e,t=[],n=[],i=0;r;){if(null!==(t=/^[^\x25]+/.exec(r)))n.push(t[0]);else if(null!==(t=/^\x25{2}/.exec(r)))n.push("%");else{if(null===(t=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(r)))throw new Error("[_.sprintf] huh?");if(t[2]){i|=1;var a=[],o=t[2],u=[];if(null===(u=/^([a-z_][a-z_\d]*)/i.exec(o)))throw new Error("[_.sprintf] huh?");for(a.push(u[1]);""!==(o=o.substring(u[0].length));)if(null!==(u=/^\.([a-z_][a-z_\d]*)/i.exec(o)))a.push(u[1]);else{if(null===(u=/^\[(\d+)\]/.exec(o)))throw new Error("[_.sprintf] huh?");a.push(u[1])}t[2]=a}else i|=2;if(3===i)throw new Error("[_.sprintf] mixing positional and named placeholders is not (yet) supported");n.push(t)}r=r.substring(t[0].length)}return n},a}();r.exports=i},{"./helper/strRepeat":23}],50:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/toPositive");r.exports=function(e,r,i){return e=t(e),r=""+r,i=null==i?0:Math.min(n(i),e.length),e.lastIndexOf(r,i)===i}},{"./helper/makeString":22,"./helper/toPositive":24}],51:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(0,n):e}},{"./helper/makeString":22}],52:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=e.lastIndexOf(r);return~n?e.slice(0,n):e}},{"./helper/makeString":22}],53:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":22}],54:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.lastIndexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":22}],55:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/<\/?[^>]+>/g,"")}},{"./helper/makeString":22}],56:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,1)}},{"./helper/adjacent":17}],57:[function(e,r){r.exports=function(e,r){return[r,e,r].join("")}},{}],58:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/\S/g,function(e){return e===e.toUpperCase()?e.toLowerCase():e.toUpperCase()})}},{"./helper/makeString":22}],59:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).toLowerCase().replace(/(?:^|\s|-)\S/g,function(e){return e.toUpperCase()})}},{"./helper/makeString":22}],60:[function(e,r){function t(e,r){var t,n,i=e.toLowerCase();for(r=[].concat(r),t=0;t2&&i&&(n=t(r)+n),a.length?a.join(r)+n+o:o}},{"./rtrim":46}],63:[function(e,r){var t=e("./toSentence");r.exports=function(e,r,n){return t(e,r,n,!0)}},{"./toSentence":62}],64:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trim;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+|"+r+"+$","g"),""))}},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],65:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n){return e=t(e),n=n||"...",r=~~r,e.length>r?e.slice(0,r)+n:e}},{"./helper/makeString":22}],66:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}},{"./trim":64}],67:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/htmlEntities");r.exports=function(e){return t(e).replace(/\&([^;]+);/g,function(e,r){var t;return r in n?n[r]:(t=r.match(/^#x([\da-fA-F]+)$/))?String.fromCharCode(parseInt(t[1],16)):(t=r.match(/^#(\d+)$/))?String.fromCharCode(~~t[1]):e})}},{"./helper/htmlEntities":21,"./helper/makeString":22}],68:[function(e,r){r.exports=function(e,r){return r=r||'"',e[0]===r&&e[e.length-1]===r?e.slice(1,e.length-1):e}},{}],69:[function(e,r){var t=e("./sprintf");r.exports=function(e,r){return r.unshift(e),t.apply(null,r)}},{"./sprintf":49}],70:[function(e,r){var t=e("./isBlank"),n=e("./trim");r.exports=function(e,r){return t(e)?[]:n(e,r).split(r||/\s+/)}},{"./isBlank":28,"./trim":64}],71:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){if(e=t(e),r=r||{},width=r.width||75,seperator=r.seperator||"\n",cut=r.cut||!1,preserveSpaces=r.preserveSpaces||!1,trailingSpaces=r.trailingSpaces||!1,0>=width)return e;if(cut){for(index=0,result="";index0&&(result+=seperator),result+=e.charAt(index),index++;if(trailingSpaces)for(;index%width>0;)result+=" ",index++;return result}for(words=e.split(" "),result="",current_column=0;words.length>0;){if(1+words[0].length+current_column>width&¤t_column>0){if(preserveSpaces)result+=" ",current_column++;else if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;result+=seperator,current_column=0}current_column>0&&(result+=" ",current_column++),result+=words[0],current_column+=words[0].length,words.shift()}if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;return result}},{"./helper/makeString":22}]},{},[16])(16)}); \ No newline at end of file diff --git a/index.js b/index.js index 00e0690f..74e27f72 100644 --- a/index.js +++ b/index.js @@ -42,6 +42,7 @@ s.pred = require('./pred'); s.succ = require('./succ'); s.titleize = require('./titleize'); s.camelize = require('./camelize'); +s.decamelize = require('./decamelize'); s.underscored = require('./underscored'); s.dasherize = require('./dasherize'); s.classify = require('./classify'); diff --git a/tests/decamelize.js b/tests/decamelize.js new file mode 100644 index 00000000..24ab5823 --- /dev/null +++ b/tests/decamelize.js @@ -0,0 +1,15 @@ +var equal = require('assert').equal; +var decamelize = require('../decamelize'); + + +test('#decamelize', function(){ + equal(decamelize('theDecamelizeStringMethod'), 'the_decamelize_string_method'); + equal(decamelize('webkitTransform', '-'), 'webkit-transform'); + equal(decamelize('theDecamelizeStringMethod_', ''), 'thedecamelizestringmethod_'); + equal(decamelize('TheDecamelizeStringMethod', '-'), 'the-decamelize-string-method'); + equal(decamelize(''), '', 'Decamelize empty string returns empty string'); + equal(decamelize(null), '', 'Decamelize null returns empty string'); + equal(decamelize(undefined), '', 'Decamelize undefined returns empty string'); + equal(decamelize(123), '123'); +}); + From c5478fe3583e98e4039023a6cc99ec926c07c1dc Mon Sep 17 00:00:00 2001 From: Daniel Golman Date: Wed, 13 Jan 2016 05:13:42 -0500 Subject: [PATCH 5/6] removing dist folder --- dist/underscore.string.min.js | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 dist/underscore.string.min.js diff --git a/dist/underscore.string.min.js b/dist/underscore.string.min.js deleted file mode 100644 index 13218a00..00000000 --- a/dist/underscore.string.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* underscore.string 3.2.2 | MIT licensed | http://epeli.github.com/underscore.string/ */ - -!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var r;"undefined"!=typeof window?r=window:"undefined"!=typeof global?r=global:"undefined"!=typeof self&&(r=self),r.s=e()}}(function(){return function e(r,t,n){function i(o,u){if(!t[o]){if(!r[o]){var p="function"==typeof require&&require;if(!u&&p)return p(o,!0);if(a)return a(o,!0);throw new Error("Cannot find module '"+o+"'")}var c=t[o]={exports:{}};r[o][0].call(c.exports,function(e){var t=r[o][1][e];return i(t?t:e)},c,c.exports,e,r,t,n)}return t[o].exports}for(var a="function"==typeof require&&require,o=0;o0?e.match(new RegExp(".{1,"+r+"}","g")):[e])}},{}],5:[function(e,r){var t=e("./capitalize"),n=e("./camelize"),i=e("./helper/makeString");r.exports=function(e){return e=i(e),t(n(e.replace(/[\W_]/g," ")).replace(/\s/g,""))}},{"./camelize":1,"./capitalize":2,"./helper/makeString":22}],6:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/\s\s+/g," ")}},{"./trim":64}],7:[function(e,r){var t=e("./helper/makeString"),n="ąàáäâãåæăćčĉęèéëêĝĥìíïîĵłľńňòóöőôõðøśșšŝťțŭùúüűûñÿýçżźž",i="aaaaaaaaaccceeeeeghiiiijllnnoooooooossssttuuuuuunyyczzz";n+=n.toUpperCase(),i+=i.toUpperCase(),i=i.split(""),n+="ß",i.push("ss"),r.exports=function(e){return t(e).replace(/.{1}/g,function(e){var r=n.indexOf(e);return-1===r?e:i[r]})}},{"./helper/makeString":22}],8:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return e=t(e),r=t(r),0===e.length||0===r.length?0:e.split(r).length-1}},{"./helper/makeString":22}],9:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([A-Z])/g,"-$1").replace(/[-_\s]+/g,"-").toLowerCase()}},{"./trim":64}],10:[function(e,r){var t=e("./decapitalize"),n=e("./trim");r.exports=function(e,r){return e=n(e).split(/(?=[A-Z])/).map(function(e){return t(e)}),e.join(r||"_")}},{"./decapitalize":11,"./trim":64}],11:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return e=t(e),e.charAt(0).toLowerCase()+e.slice(1)}},{"./helper/makeString":22}],12:[function(e,r){function t(e){for(var r=e.match(/^[\s\\t]*/gm),t=r[0].length,n=1;n=0&&e.indexOf(r,i)===i}},{"./helper/makeString":22,"./helper/toPositive":24}],14:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/escapeChars"),i="[";for(var a in n)i+=a;i+="]";var o=new RegExp(i,"g");r.exports=function(e){return t(e).replace(o,function(e){return"&"+n[e]+";"})}},{"./helper/escapeChars":19,"./helper/makeString":22}],15:[function(e,r){r.exports=function(){var e={};for(var r in this)this.hasOwnProperty(r)&&!r.match(/^(?:include|contains|reverse|join|map)$/)&&(e[r]=this[r]);return e}},{}],16:[function(e,r){"use strict";function t(e){return this instanceof t?void(this._wrapped=e):new t(e)}function n(e,r){"function"==typeof r&&(t.prototype[e]=function(){var e=[this._wrapped].concat(Array.prototype.slice.call(arguments)),n=r.apply(null,e);return"string"==typeof n?new t(n):n})}function i(e){n(e,function(r){var t=Array.prototype.slice.call(arguments,1);return String.prototype[e].apply(r,t)})}t.VERSION="3.2.2",t.isBlank=e("./isBlank"),t.stripTags=e("./stripTags"),t.capitalize=e("./capitalize"),t.decapitalize=e("./decapitalize"),t.chop=e("./chop"),t.trim=e("./trim"),t.clean=e("./clean"),t.cleanDiacritics=e("./cleanDiacritics"),t.count=e("./count"),t.chars=e("./chars"),t.swapCase=e("./swapCase"),t.escapeHTML=e("./escapeHTML"),t.unescapeHTML=e("./unescapeHTML"),t.splice=e("./splice"),t.insert=e("./insert"),t.replaceAll=e("./replaceAll"),t.include=e("./include"),t.join=e("./join"),t.lines=e("./lines"),t.dedent=e("./dedent"),t.reverse=e("./reverse"),t.startsWith=e("./startsWith"),t.endsWith=e("./endsWith"),t.pred=e("./pred"),t.succ=e("./succ"),t.titleize=e("./titleize"),t.camelize=e("./camelize"),t.decamelize=e("./decamelize"),t.underscored=e("./underscored"),t.dasherize=e("./dasherize"),t.classify=e("./classify"),t.humanize=e("./humanize"),t.ltrim=e("./ltrim"),t.rtrim=e("./rtrim"),t.truncate=e("./truncate"),t.prune=e("./prune"),t.words=e("./words"),t.pad=e("./pad"),t.lpad=e("./lpad"),t.rpad=e("./rpad"),t.lrpad=e("./lrpad"),t.sprintf=e("./sprintf"),t.vsprintf=e("./vsprintf"),t.toNumber=e("./toNumber"),t.numberFormat=e("./numberFormat"),t.strRight=e("./strRight"),t.strRightBack=e("./strRightBack"),t.strLeft=e("./strLeft"),t.strLeftBack=e("./strLeftBack"),t.toSentence=e("./toSentence"),t.toSentenceSerial=e("./toSentenceSerial"),t.slugify=e("./slugify"),t.surround=e("./surround"),t.quote=e("./quote"),t.unquote=e("./unquote"),t.repeat=e("./repeat"),t.naturalCmp=e("./naturalCmp"),t.levenshtein=e("./levenshtein"),t.toBoolean=e("./toBoolean"),t.exports=e("./exports"),t.escapeRegExp=e("./helper/escapeRegExp"),t.wrap=e("./wrap"),t.map=e("./map"),t.strip=t.trim,t.lstrip=t.ltrim,t.rstrip=t.rtrim,t.center=t.lrpad,t.rjust=t.lpad,t.ljust=t.rpad,t.contains=t.include,t.q=t.quote,t.toBool=t.toBoolean,t.camelcase=t.camelize,t.mapChars=t.map,t.prototype={value:function(){return this._wrapped}};for(var a in t)n(a,t[a]);n("tap",function(e,r){return r(e)});var o=["toUpperCase","toLowerCase","split","replace","slice","substring","substr","concat"];for(var a in o)i(o[a]);r.exports=t},{"./camelize":1,"./capitalize":2,"./chars":3,"./chop":4,"./classify":5,"./clean":6,"./cleanDiacritics":7,"./count":8,"./dasherize":9,"./decamelize":10,"./decapitalize":11,"./dedent":12,"./endsWith":13,"./escapeHTML":14,"./exports":15,"./helper/escapeRegExp":20,"./humanize":25,"./include":26,"./insert":27,"./isBlank":28,"./join":29,"./levenshtein":30,"./lines":31,"./lpad":32,"./lrpad":33,"./ltrim":34,"./map":35,"./naturalCmp":36,"./numberFormat":37,"./pad":38,"./pred":39,"./prune":40,"./quote":41,"./repeat":42,"./replaceAll":43,"./reverse":44,"./rpad":45,"./rtrim":46,"./slugify":47,"./splice":48,"./sprintf":49,"./startsWith":50,"./strLeft":51,"./strLeftBack":52,"./strRight":53,"./strRightBack":54,"./stripTags":55,"./succ":56,"./surround":57,"./swapCase":58,"./titleize":59,"./toBoolean":60,"./toNumber":61,"./toSentence":62,"./toSentenceSerial":63,"./trim":64,"./truncate":65,"./underscored":66,"./unescapeHTML":67,"./unquote":68,"./vsprintf":69,"./words":70,"./wrap":71}],17:[function(e,r){var t=e("./makeString");r.exports=function(e,r){return e=t(e),0===e.length?"":e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+r)}},{"./makeString":22}],18:[function(e,r){var t=e("./escapeRegExp");r.exports=function(e){return null==e?"\\s":e.source?e.source:"["+t(e)+"]"}},{"./escapeRegExp":20}],19:[function(e,r){var t={"¢":"cent","£":"pound","¥":"yen","€":"euro","©":"copy","®":"reg","<":"lt",">":"gt",'"':"quot","&":"amp","'":"#39"};r.exports=t},{}],20:[function(e,r){var t=e("./makeString");r.exports=function(e){return t(e).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}},{"./makeString":22}],21:[function(e,r){var t={nbsp:" ",cent:"¢",pound:"£",yen:"¥",euro:"€",copy:"©",reg:"®",lt:"<",gt:">",quot:'"',amp:"&",apos:"'"};r.exports=t},{}],22:[function(e,r){r.exports=function(e){return null==e?"":""+e}},{}],23:[function(e,r){r.exports=function(e,r){if(1>r)return"";for(var t="";r>0;)1&r&&(t+=e),r>>=1,e+=e;return t}},{}],24:[function(e,r){r.exports=function(e){return 0>e?0:+e||0}},{}],25:[function(e,r){var t=e("./capitalize"),n=e("./underscored"),i=e("./trim");r.exports=function(e){return t(i(n(e).replace(/_id$/,"").replace(/_/g," ")))}},{"./capitalize":2,"./trim":64,"./underscored":66}],26:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return""===r?!0:-1!==t(e).indexOf(r)}},{"./helper/makeString":22}],27:[function(e,r){var t=e("./splice");r.exports=function(e,r,n){return t(e,r,0,n)}},{"./splice":48}],28:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return/^\s*$/.test(t(e))}},{"./helper/makeString":22}],29:[function(e,r){var t=e("./helper/makeString"),n=[].slice;r.exports=function(){var e=n.call(arguments),r=e.shift();return e.join(t(r))}},{"./helper/makeString":22}],30:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){"use strict";if(e=t(e),r=t(r),e===r)return 0;if(!e||!r)return Math.max(e.length,r.length);for(var n=new Array(r.length+1),i=0;ip&&(a=p),p=n[o+1]+1,a>p&&(a=p),n[o]=u}n[o]=a}return a}},{"./helper/makeString":22}],31:[function(e,r){r.exports=function(e){return null==e?[]:String(e).split(/\r\n?|\n/)}},{}],32:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n)}},{"./pad":38}],33:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"both")}},{"./pad":38}],34:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimLeft;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+"),""))}},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],35:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return e=t(e),0===e.length||"function"!=typeof r?e:e.replace(/./g,r)}},{"./helper/makeString":22}],36:[function(e,r){r.exports=function(e,r){if(e==r)return 0;if(!e)return-1;if(!r)return 1;for(var t=/(\.\d+|\d+|\D+)/g,n=String(e).match(t),i=String(r).match(t),a=Math.min(n.length,i.length),o=0;a>o;o++){var u=n[o],p=i[o];if(u!==p){var c=+u,s=+p;return c===c&&s===s?c>s?1:-1:p>u?-1:1}}return n.length!=i.length?n.length-i.length:r>e?-1:1}},{}],37:[function(e,r){r.exports=function(e,r,t,n){if(isNaN(e)||null==e)return"";e=e.toFixed(~~r),n="string"==typeof n?n:",";var i=e.split("."),a=i[0],o=i[1]?(t||".")+i[1]:"";return a.replace(/(\d)(?=(?:\d{3})+$)/g,"$1"+n)+o}},{}],38:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function(e,r,i,a){e=t(e),r=~~r;var o=0;switch(i?i.length>1&&(i=i.charAt(0)):i=" ",a){case"right":return o=r-e.length,e+n(i,o);case"both":return o=r-e.length,n(i,Math.ceil(o/2))+e+n(i,Math.floor(o/2));default:return o=r-e.length,n(i,o)+e}}},{"./helper/makeString":22,"./helper/strRepeat":23}],39:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,-1)}},{"./helper/adjacent":17}],40:[function(e,r){var t=e("./helper/makeString"),n=e("./rtrim");r.exports=function(e,r,i){if(e=t(e),r=~~r,i=null!=i?String(i):"...",e.length<=r)return e;var a=function(e){return e.toUpperCase()!==e.toLowerCase()?"A":" "},o=e.slice(0,r+1).replace(/.(?=\W*\w*$)/g,a);return o=o.slice(o.length-2).match(/\w\w/)?o.replace(/\s*\S+$/,""):n(o.slice(0,o.length-1)),(o+i).length>e.length?e:e.slice(0,o.length)+i}},{"./helper/makeString":22,"./rtrim":46}],41:[function(e,r){var t=e("./surround");r.exports=function(e,r){return t(e,r||'"')}},{"./surround":57}],42:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function i(e,r,a){if(e=t(e),r=~~r,null==a)return n(e,r);for(var i=[];r>0;i[--r]=e);return i.join(a)}},{"./helper/makeString":22,"./helper/strRepeat":23}],43:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n,i){var a=i===!0?"gi":"g",o=new RegExp(r,a);return t(e).replace(o,n)}},{"./helper/makeString":22}],44:[function(e,r){var t=e("./chars");r.exports=function(e){return t(e).reverse().join("")}},{"./chars":3}],45:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"right")}},{"./pad":38}],46:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimRight;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp(r+"+$"),""))}},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],47:[function(e,r){var t=(e("./helper/makeString"),e("./helper/defaultToWhiteSpace"),e("./trim")),n=e("./dasherize"),i=e("./cleanDiacritics");r.exports=function(e){return t(n(i(e).replace(/[^\w\s-]/g,"-").toLowerCase()),"-")}},{"./cleanDiacritics":7,"./dasherize":9,"./helper/defaultToWhiteSpace":18,"./helper/makeString":22,"./trim":64}],48:[function(e,r){var t=e("./chars");r.exports=function(e,r,n,i){var a=t(e);return a.splice(~~r,~~n,i),a.join("")}},{"./chars":3}],49:[function(e,r){var t=e("./helper/strRepeat"),n=Object.prototype.toString,i=function(){function e(e){return n.call(e).slice(8,-1).toLowerCase()}var r=t,a=function(){return a.cache.hasOwnProperty(arguments[0])||(a.cache[arguments[0]]=a.parse(arguments[0])),a.format.call(null,a.cache[arguments[0]],arguments)};return a.format=function(t,n){var a,o,u,p,c,s,l,f=1,h=t.length,g="",m=[];for(o=0;h>o;o++)if(g=e(t[o]),"string"===g)m.push(t[o]);else if("array"===g){if(p=t[o],p[2])for(a=n[f],u=0;u=0?"+"+a:a,s=p[4]?"0"==p[4]?"0":p[4].charAt(1):" ",l=p[6]-String(a).length,c=p[6]?r(s,l):"",m.push(p[5]?a+c:c+a)}return m.join("")},a.cache={},a.parse=function(e){for(var r=e,t=[],n=[],i=0;r;){if(null!==(t=/^[^\x25]+/.exec(r)))n.push(t[0]);else if(null!==(t=/^\x25{2}/.exec(r)))n.push("%");else{if(null===(t=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(r)))throw new Error("[_.sprintf] huh?");if(t[2]){i|=1;var a=[],o=t[2],u=[];if(null===(u=/^([a-z_][a-z_\d]*)/i.exec(o)))throw new Error("[_.sprintf] huh?");for(a.push(u[1]);""!==(o=o.substring(u[0].length));)if(null!==(u=/^\.([a-z_][a-z_\d]*)/i.exec(o)))a.push(u[1]);else{if(null===(u=/^\[(\d+)\]/.exec(o)))throw new Error("[_.sprintf] huh?");a.push(u[1])}t[2]=a}else i|=2;if(3===i)throw new Error("[_.sprintf] mixing positional and named placeholders is not (yet) supported");n.push(t)}r=r.substring(t[0].length)}return n},a}();r.exports=i},{"./helper/strRepeat":23}],50:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/toPositive");r.exports=function(e,r,i){return e=t(e),r=""+r,i=null==i?0:Math.min(n(i),e.length),e.lastIndexOf(r,i)===i}},{"./helper/makeString":22,"./helper/toPositive":24}],51:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(0,n):e}},{"./helper/makeString":22}],52:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=e.lastIndexOf(r);return~n?e.slice(0,n):e}},{"./helper/makeString":22}],53:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":22}],54:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.lastIndexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":22}],55:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/<\/?[^>]+>/g,"")}},{"./helper/makeString":22}],56:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,1)}},{"./helper/adjacent":17}],57:[function(e,r){r.exports=function(e,r){return[r,e,r].join("")}},{}],58:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/\S/g,function(e){return e===e.toUpperCase()?e.toLowerCase():e.toUpperCase()})}},{"./helper/makeString":22}],59:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).toLowerCase().replace(/(?:^|\s|-)\S/g,function(e){return e.toUpperCase()})}},{"./helper/makeString":22}],60:[function(e,r){function t(e,r){var t,n,i=e.toLowerCase();for(r=[].concat(r),t=0;t2&&i&&(n=t(r)+n),a.length?a.join(r)+n+o:o}},{"./rtrim":46}],63:[function(e,r){var t=e("./toSentence");r.exports=function(e,r,n){return t(e,r,n,!0)}},{"./toSentence":62}],64:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trim;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+|"+r+"+$","g"),""))}},{"./helper/defaultToWhiteSpace":18,"./helper/makeString":22}],65:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n){return e=t(e),n=n||"...",r=~~r,e.length>r?e.slice(0,r)+n:e}},{"./helper/makeString":22}],66:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}},{"./trim":64}],67:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/htmlEntities");r.exports=function(e){return t(e).replace(/\&([^;]+);/g,function(e,r){var t;return r in n?n[r]:(t=r.match(/^#x([\da-fA-F]+)$/))?String.fromCharCode(parseInt(t[1],16)):(t=r.match(/^#(\d+)$/))?String.fromCharCode(~~t[1]):e})}},{"./helper/htmlEntities":21,"./helper/makeString":22}],68:[function(e,r){r.exports=function(e,r){return r=r||'"',e[0]===r&&e[e.length-1]===r?e.slice(1,e.length-1):e}},{}],69:[function(e,r){var t=e("./sprintf");r.exports=function(e,r){return r.unshift(e),t.apply(null,r)}},{"./sprintf":49}],70:[function(e,r){var t=e("./isBlank"),n=e("./trim");r.exports=function(e,r){return t(e)?[]:n(e,r).split(r||/\s+/)}},{"./isBlank":28,"./trim":64}],71:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){if(e=t(e),r=r||{},width=r.width||75,seperator=r.seperator||"\n",cut=r.cut||!1,preserveSpaces=r.preserveSpaces||!1,trailingSpaces=r.trailingSpaces||!1,0>=width)return e;if(cut){for(index=0,result="";index0&&(result+=seperator),result+=e.charAt(index),index++;if(trailingSpaces)for(;index%width>0;)result+=" ",index++;return result}for(words=e.split(" "),result="",current_column=0;words.length>0;){if(1+words[0].length+current_column>width&¤t_column>0){if(preserveSpaces)result+=" ",current_column++;else if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;result+=seperator,current_column=0}current_column>0&&(result+=" ",current_column++),result+=words[0],current_column+=words[0].length,words.shift()}if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;return result}},{"./helper/makeString":22}]},{},[16])(16)}); \ No newline at end of file From 8ef9ffbf83ae2be9e2b8055efc8a45d0b5e77575 Mon Sep 17 00:00:00 2001 From: Golman Date: Thu, 17 Dec 2015 14:59:57 -0500 Subject: [PATCH 6/6] decamelize implemented, tested and documentation updated Removing dist artifact to follow pull request guidelines fixed empty string test fail decamelize implemented, tested and documentation updated Removing dist artifact to follow pull request guidelines fixed empty string test fail removing dist folder --- README.markdown | 11 + decamelize.js | 12 + dist/underscore.string.js | 1186 --------------------------------- dist/underscore.string.min.js | 3 - index.js | 1 + tests/decamelize.js | 15 + 6 files changed, 39 insertions(+), 1189 deletions(-) create mode 100644 decamelize.js delete mode 100644 dist/underscore.string.js delete mode 100644 dist/underscore.string.min.js create mode 100644 tests/decamelize.js diff --git a/README.markdown b/README.markdown index dc444939..776b054f 100644 --- a/README.markdown +++ b/README.markdown @@ -418,6 +418,17 @@ camelize("Moz-transform"); camelize("-moz-transform", true); // => "mozTransform" ``` +#### decamelize(string, [seperator="_"]) => string + +Converts camelized string to a decamelized one. + +```javascript +decamelize("theDecamelizeStringMethod"); +// => "the_decamelize_string_method" + +decamelize("webkitTransform", "-"); +// => "webkit-transform" +``` #### classify(string) => string diff --git a/decamelize.js b/decamelize.js new file mode 100644 index 00000000..55910ba4 --- /dev/null +++ b/decamelize.js @@ -0,0 +1,12 @@ +var decap = require('./decapitalize'); +var trim = require('./trim'); + +module.exports = function decamelize(string, separator) { + string = trim(string).split(/(?=[A-Z])/).map(function(word) { + return decap(word); + }); + if (separator === undefined) { + separator = "_"; + } + return string.join(separator); +}; diff --git a/dist/underscore.string.js b/dist/underscore.string.js deleted file mode 100644 index 05556760..00000000 --- a/dist/underscore.string.js +++ /dev/null @@ -1,1186 +0,0 @@ -/* underscore.string 3.2.2 | MIT licensed | http://epeli.github.com/underscore.string/ */ - -!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.s=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0 ? str.match(new RegExp('.{1,' + step + '}', 'g')) : [str]; -}; - -},{}],5:[function(_dereq_,module,exports){ -var capitalize = _dereq_('./capitalize'); -var camelize = _dereq_('./camelize'); -var makeString = _dereq_('./helper/makeString'); - -module.exports = function classify(str) { - str = makeString(str); - return capitalize(camelize(str.replace(/[\W_]/g, ' ')).replace(/\s/g, '')); -}; - -},{"./camelize":1,"./capitalize":2,"./helper/makeString":21}],6:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function clean(str) { - return trim(str).replace(/\s\s+/g, ' '); -}; - -},{"./trim":62}],7:[function(_dereq_,module,exports){ - -var makeString = _dereq_('./helper/makeString'); - -var from = "ąàáäâãåæăćčĉęèéëêĝĥìíïîĵłľńňòóöőôõðøśșšŝťțŭùúüűûñÿýçżźž", - to = "aaaaaaaaaccceeeeeghiiiijllnnoooooooossssttuuuuuunyyczzz"; - -from += from.toUpperCase(); -to += to.toUpperCase(); - -to = to.split(""); - -// for tokens requireing multitoken output -from += "ß"; -to.push('ss'); - - -module.exports = function cleanDiacritics(str) { - return makeString(str).replace(/.{1}/g, function(c){ - var index = from.indexOf(c); - return index === -1 ? c : to[index]; - }); -}; - -},{"./helper/makeString":21}],8:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function(str, substr) { - str = makeString(str); - substr = makeString(substr); - - if (str.length === 0 || substr.length === 0) return 0; - - return str.split(substr).length - 1; -}; - -},{"./helper/makeString":21}],9:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function dasherize(str) { - return trim(str).replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase(); -}; - -},{"./trim":62}],10:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function decapitalize(str) { - str = makeString(str); - return str.charAt(0).toLowerCase() + str.slice(1); -}; - -},{"./helper/makeString":21}],11:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -function getIndent(str) { - var matches = str.match(/^[\s\\t]*/gm); - var indent = matches[0].length; - - for (var i = 1; i < matches.length; i++) { - indent = Math.min(matches[i].length, indent); - } - - return indent; -} - -module.exports = function dedent(str, pattern) { - str = makeString(str); - var indent = getIndent(str); - var reg; - - if (indent === 0) return str; - - if (typeof pattern === 'string') { - reg = new RegExp('^' + pattern, 'gm'); - } else { - reg = new RegExp('^[ \\t]{' + indent + '}', 'gm'); - } - - return str.replace(reg, ''); -}; - -},{"./helper/makeString":21}],12:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var toPositive = _dereq_('./helper/toPositive'); - -module.exports = function endsWith(str, ends, position) { - str = makeString(str); - ends = '' + ends; - if (typeof position == 'undefined') { - position = str.length - ends.length; - } else { - position = Math.min(toPositive(position), str.length) - ends.length; - } - return position >= 0 && str.indexOf(ends, position) === position; -}; - -},{"./helper/makeString":21,"./helper/toPositive":23}],13:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var escapeChars = _dereq_('./helper/escapeChars'); -var reversedEscapeChars = {}; - -var regexString = "["; -for(var key in escapeChars) { - regexString += key; -} -regexString += "]"; - -var regex = new RegExp( regexString, 'g'); - -module.exports = function escapeHTML(str) { - - return makeString(str).replace(regex, function(m) { - return '&' + escapeChars[m] + ';'; - }); -}; - -},{"./helper/escapeChars":18,"./helper/makeString":21}],14:[function(_dereq_,module,exports){ -module.exports = function() { - var result = {}; - - for (var prop in this) { - if (!this.hasOwnProperty(prop) || prop.match(/^(?:include|contains|reverse|join)$/)) continue; - result[prop] = this[prop]; - } - - return result; -}; - -},{}],15:[function(_dereq_,module,exports){ -// Underscore.string -// (c) 2010 Esa-Matti Suuronen -// 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.2' - -'use strict'; - -function s(value) { - /* jshint validthis: true */ - if (!(this instanceof s)) return new s(value); - this._wrapped = value; -} - -s.VERSION = '3.2.2'; - -s.isBlank = _dereq_('./isBlank'); -s.stripTags = _dereq_('./stripTags'); -s.capitalize = _dereq_('./capitalize'); -s.decapitalize = _dereq_('./decapitalize'); -s.chop = _dereq_('./chop'); -s.trim = _dereq_('./trim'); -s.clean = _dereq_('./clean'); -s.cleanDiacritics = _dereq_('./cleanDiacritics'); -s.count = _dereq_('./count'); -s.chars = _dereq_('./chars'); -s.swapCase = _dereq_('./swapCase'); -s.escapeHTML = _dereq_('./escapeHTML'); -s.unescapeHTML = _dereq_('./unescapeHTML'); -s.splice = _dereq_('./splice'); -s.insert = _dereq_('./insert'); -s.replaceAll = _dereq_('./replaceAll'); -s.include = _dereq_('./include'); -s.join = _dereq_('./join'); -s.lines = _dereq_('./lines'); -s.dedent = _dereq_('./dedent'); -s.reverse = _dereq_('./reverse'); -s.startsWith = _dereq_('./startsWith'); -s.endsWith = _dereq_('./endsWith'); -s.pred = _dereq_('./pred'); -s.succ = _dereq_('./succ'); -s.titleize = _dereq_('./titleize'); -s.camelize = _dereq_('./camelize'); -s.underscored = _dereq_('./underscored'); -s.dasherize = _dereq_('./dasherize'); -s.classify = _dereq_('./classify'); -s.humanize = _dereq_('./humanize'); -s.ltrim = _dereq_('./ltrim'); -s.rtrim = _dereq_('./rtrim'); -s.truncate = _dereq_('./truncate'); -s.prune = _dereq_('./prune'); -s.words = _dereq_('./words'); -s.pad = _dereq_('./pad'); -s.lpad = _dereq_('./lpad'); -s.rpad = _dereq_('./rpad'); -s.lrpad = _dereq_('./lrpad'); -s.sprintf = _dereq_('./sprintf'); -s.vsprintf = _dereq_('./vsprintf'); -s.toNumber = _dereq_('./toNumber'); -s.numberFormat = _dereq_('./numberFormat'); -s.strRight = _dereq_('./strRight'); -s.strRightBack = _dereq_('./strRightBack'); -s.strLeft = _dereq_('./strLeft'); -s.strLeftBack = _dereq_('./strLeftBack'); -s.toSentence = _dereq_('./toSentence'); -s.toSentenceSerial = _dereq_('./toSentenceSerial'); -s.slugify = _dereq_('./slugify'); -s.surround = _dereq_('./surround'); -s.quote = _dereq_('./quote'); -s.unquote = _dereq_('./unquote'); -s.repeat = _dereq_('./repeat'); -s.naturalCmp = _dereq_('./naturalCmp'); -s.levenshtein = _dereq_('./levenshtein'); -s.toBoolean = _dereq_('./toBoolean'); -s.exports = _dereq_('./exports'); -s.escapeRegExp = _dereq_('./helper/escapeRegExp'); -s.wrap = _dereq_('./wrap'); - -// 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; - - -// 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 key in prototypeMethods) prototype2method(prototypeMethods[key]); - - -module.exports = s; - -},{"./camelize":1,"./capitalize":2,"./chars":3,"./chop":4,"./classify":5,"./clean":6,"./cleanDiacritics":7,"./count":8,"./dasherize":9,"./decapitalize":10,"./dedent":11,"./endsWith":12,"./escapeHTML":13,"./exports":14,"./helper/escapeRegExp":19,"./humanize":24,"./include":25,"./insert":26,"./isBlank":27,"./join":28,"./levenshtein":29,"./lines":30,"./lpad":31,"./lrpad":32,"./ltrim":33,"./naturalCmp":34,"./numberFormat":35,"./pad":36,"./pred":37,"./prune":38,"./quote":39,"./repeat":40,"./replaceAll":41,"./reverse":42,"./rpad":43,"./rtrim":44,"./slugify":45,"./splice":46,"./sprintf":47,"./startsWith":48,"./strLeft":49,"./strLeftBack":50,"./strRight":51,"./strRightBack":52,"./stripTags":53,"./succ":54,"./surround":55,"./swapCase":56,"./titleize":57,"./toBoolean":58,"./toNumber":59,"./toSentence":60,"./toSentenceSerial":61,"./trim":62,"./truncate":63,"./underscored":64,"./unescapeHTML":65,"./unquote":66,"./vsprintf":67,"./words":68,"./wrap":69}],16:[function(_dereq_,module,exports){ -var makeString = _dereq_('./makeString'); - -module.exports = function adjacent(str, direction) { - str = makeString(str); - if (str.length === 0) { - return ''; - } - return str.slice(0, -1) + String.fromCharCode(str.charCodeAt(str.length - 1) + direction); -}; - -},{"./makeString":21}],17:[function(_dereq_,module,exports){ -var escapeRegExp = _dereq_('./escapeRegExp'); - -module.exports = function defaultToWhiteSpace(characters) { - if (characters == null) - return '\\s'; - else if (characters.source) - return characters.source; - else - return '[' + escapeRegExp(characters) + ']'; -}; - -},{"./escapeRegExp":19}],18:[function(_dereq_,module,exports){ -/* We're explicitly defining the list of entities we want to escape. -nbsp is an HTML entity, but we don't want to escape all space characters in a string, hence its omission in this map. - -*/ -var escapeChars = { - '¢' : 'cent', - '£' : 'pound', - '¥' : 'yen', - '€': 'euro', - '©' :'copy', - '®' : 'reg', - '<' : 'lt', - '>' : 'gt', - '"' : 'quot', - '&' : 'amp', - "'": '#39' -}; - -module.exports = escapeChars; - -},{}],19:[function(_dereq_,module,exports){ -var makeString = _dereq_('./makeString'); - -module.exports = function escapeRegExp(str) { - return makeString(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); -}; - -},{"./makeString":21}],20:[function(_dereq_,module,exports){ -/* -We're explicitly defining the list of entities that might see in escape HTML strings -*/ -var htmlEntities = { - nbsp: ' ', - cent: '¢', - pound: '£', - yen: '¥', - euro: '€', - copy: '©', - reg: '®', - lt: '<', - gt: '>', - quot: '"', - amp: '&', - apos: "'" -}; - -module.exports = htmlEntities; - -},{}],21:[function(_dereq_,module,exports){ -/** - * Ensure some object is a coerced to a string - **/ -module.exports = function makeString(object) { - if (object == null) return ''; - return '' + object; -}; - -},{}],22:[function(_dereq_,module,exports){ -module.exports = function strRepeat(str, qty){ - if (qty < 1) return ''; - var result = ''; - while (qty > 0) { - if (qty & 1) result += str; - qty >>= 1, str += str; - } - return result; -}; - -},{}],23:[function(_dereq_,module,exports){ -module.exports = function toPositive(number) { - return number < 0 ? 0 : (+number || 0); -}; - -},{}],24:[function(_dereq_,module,exports){ -var capitalize = _dereq_('./capitalize'); -var underscored = _dereq_('./underscored'); -var trim = _dereq_('./trim'); - -module.exports = function humanize(str) { - return capitalize(trim(underscored(str).replace(/_id$/, '').replace(/_/g, ' '))); -}; - -},{"./capitalize":2,"./trim":62,"./underscored":64}],25:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function include(str, needle) { - if (needle === '') return true; - return makeString(str).indexOf(needle) !== -1; -}; - -},{"./helper/makeString":21}],26:[function(_dereq_,module,exports){ -var splice = _dereq_('./splice'); - -module.exports = function insert(str, i, substr) { - return splice(str, i, 0, substr); -}; - -},{"./splice":46}],27:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function isBlank(str) { - return (/^\s*$/).test(makeString(str)); -}; - -},{"./helper/makeString":21}],28:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var slice = [].slice; - -module.exports = function join() { - var args = slice.call(arguments), - separator = args.shift(); - - return args.join(makeString(separator)); -}; - -},{"./helper/makeString":21}],29:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -/** - * Based on the implementation here: https://github.com/hiddentao/fast-levenshtein - */ -module.exports = function levenshtein(str1, str2) { - 'use strict'; - str1 = makeString(str1); - str2 = makeString(str2); - - // Short cut cases - if (str1 === str2) return 0; - if (!str1 || !str2) return Math.max(str1.length, str2.length); - - // two rows - var prevRow = new Array(str2.length + 1); - - // initialise previous row - for (var i = 0; i < prevRow.length; ++i) { - prevRow[i] = i; - } - - // calculate current row distance from previous row - for (i = 0; i < str1.length; ++i) { - var nextCol = i + 1; - - for (var j = 0; j < str2.length; ++j) { - var curCol = nextCol; - - // substution - nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 ); - // insertion - var tmp = curCol + 1; - if (nextCol > tmp) { - nextCol = tmp; - } - // deletion - tmp = prevRow[j + 1] + 1; - if (nextCol > tmp) { - nextCol = tmp; - } - - // copy current col value into previous (in preparation for next iteration) - prevRow[j] = curCol; - } - - // copy last col value into previous (in preparation for next iteration) - prevRow[j] = nextCol; - } - - return nextCol; -}; - -},{"./helper/makeString":21}],30:[function(_dereq_,module,exports){ -module.exports = function lines(str) { - if (str == null) return []; - return String(str).split(/\r\n?|\n/); -}; - -},{}],31:[function(_dereq_,module,exports){ -var pad = _dereq_('./pad'); - -module.exports = function lpad(str, length, padStr) { - return pad(str, length, padStr); -}; - -},{"./pad":36}],32:[function(_dereq_,module,exports){ -var pad = _dereq_('./pad'); - -module.exports = function lrpad(str, length, padStr) { - return pad(str, length, padStr, 'both'); -}; - -},{"./pad":36}],33:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var nativeTrimLeft = String.prototype.trimLeft; - -module.exports = function ltrim(str, characters) { - str = makeString(str); - if (!characters && nativeTrimLeft) return nativeTrimLeft.call(str); - characters = defaultToWhiteSpace(characters); - return str.replace(new RegExp('^' + characters + '+'), ''); -}; - -},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],34:[function(_dereq_,module,exports){ -module.exports = function naturalCmp(str1, str2) { - if (str1 == str2) return 0; - if (!str1) return -1; - if (!str2) return 1; - - var cmpRegex = /(\.\d+|\d+|\D+)/g, - tokens1 = String(str1).match(cmpRegex), - tokens2 = String(str2).match(cmpRegex), - count = Math.min(tokens1.length, tokens2.length); - - for (var i = 0; i < count; i++) { - var a = tokens1[i], - b = tokens2[i]; - - if (a !== b) { - var num1 = +a; - var num2 = +b; - if (num1 === num1 && num2 === num2) { - return num1 > num2 ? 1 : -1; - } - return a < b ? -1 : 1; - } - } - - if (tokens1.length != tokens2.length) - return tokens1.length - tokens2.length; - - return str1 < str2 ? -1 : 1; -}; - -},{}],35:[function(_dereq_,module,exports){ -module.exports = function numberFormat(number, dec, dsep, tsep) { - if (isNaN(number) || number == null) return ''; - - number = number.toFixed(~~dec); - tsep = typeof tsep == 'string' ? tsep : ','; - - var parts = number.split('.'), - fnums = parts[0], - decimals = parts[1] ? (dsep || '.') + parts[1] : ''; - - return fnums.replace(/(\d)(?=(?:\d{3})+$)/g, '$1' + tsep) + decimals; -}; - -},{}],36:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var strRepeat = _dereq_('./helper/strRepeat'); - -module.exports = function pad(str, length, padStr, type) { - str = makeString(str); - length = ~~length; - - var padlen = 0; - - if (!padStr) - padStr = ' '; - else if (padStr.length > 1) - padStr = padStr.charAt(0); - - switch (type) { - case 'right': - padlen = length - str.length; - return str + strRepeat(padStr, padlen); - case 'both': - padlen = length - str.length; - return strRepeat(padStr, Math.ceil(padlen / 2)) + str + strRepeat(padStr, Math.floor(padlen / 2)); - default: // 'left' - padlen = length - str.length; - return strRepeat(padStr, padlen) + str; - } -}; - -},{"./helper/makeString":21,"./helper/strRepeat":22}],37:[function(_dereq_,module,exports){ -var adjacent = _dereq_('./helper/adjacent'); - -module.exports = function succ(str) { - return adjacent(str, -1); -}; - -},{"./helper/adjacent":16}],38:[function(_dereq_,module,exports){ -/** - * _s.prune: a more elegant version of truncate - * prune extra chars, never leaving a half-chopped word. - * @author github.com/rwz - */ -var makeString = _dereq_('./helper/makeString'); -var rtrim = _dereq_('./rtrim'); - -module.exports = function prune(str, length, pruneStr) { - str = makeString(str); - length = ~~length; - pruneStr = pruneStr != null ? String(pruneStr) : '...'; - - if (str.length <= length) return str; - - var tmpl = function(c) { - return c.toUpperCase() !== c.toLowerCase() ? 'A' : ' '; - }, - template = str.slice(0, length + 1).replace(/.(?=\W*\w*$)/g, tmpl); // 'Hello, world' -> 'HellAA AAAAA' - - if (template.slice(template.length - 2).match(/\w\w/)) - template = template.replace(/\s*\S+$/, ''); - else - template = rtrim(template.slice(0, template.length - 1)); - - return (template + pruneStr).length > str.length ? str : str.slice(0, template.length) + pruneStr; -}; - -},{"./helper/makeString":21,"./rtrim":44}],39:[function(_dereq_,module,exports){ -var surround = _dereq_('./surround'); - -module.exports = function quote(str, quoteChar) { - return surround(str, quoteChar || '"'); -}; - -},{"./surround":55}],40:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var strRepeat = _dereq_('./helper/strRepeat'); - -module.exports = function repeat(str, qty, separator) { - str = makeString(str); - - qty = ~~qty; - - // using faster implementation if separator is not needed; - if (separator == null) return strRepeat(str, qty); - - // this one is about 300x slower in Google Chrome - for (var repeat = []; qty > 0; repeat[--qty] = str) {} - return repeat.join(separator); -}; - -},{"./helper/makeString":21,"./helper/strRepeat":22}],41:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function replaceAll(str, find, replace, ignorecase) { - var flags = (ignorecase === true)?'gi':'g'; - var reg = new RegExp(find, flags); - - return makeString(str).replace(reg, replace); -}; - -},{"./helper/makeString":21}],42:[function(_dereq_,module,exports){ -var chars = _dereq_('./chars'); - -module.exports = function reverse(str) { - return chars(str).reverse().join(''); -}; - -},{"./chars":3}],43:[function(_dereq_,module,exports){ -var pad = _dereq_('./pad'); - -module.exports = function rpad(str, length, padStr) { - return pad(str, length, padStr, 'right'); -}; - -},{"./pad":36}],44:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var nativeTrimRight = String.prototype.trimRight; - -module.exports = function rtrim(str, characters) { - str = makeString(str); - if (!characters && nativeTrimRight) return nativeTrimRight.call(str); - characters = defaultToWhiteSpace(characters); - return str.replace(new RegExp(characters + '+$'), ''); -}; - -},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],45:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var trim = _dereq_('./trim'); -var dasherize = _dereq_('./dasherize'); -var cleanDiacritics = _dereq_("./cleanDiacritics"); - -module.exports = function slugify(str) { - return trim(dasherize(cleanDiacritics(str).replace(/[^\w\s-]/g, '-').toLowerCase()), '-'); -}; - -},{"./cleanDiacritics":7,"./dasherize":9,"./helper/defaultToWhiteSpace":17,"./helper/makeString":21,"./trim":62}],46:[function(_dereq_,module,exports){ -var chars = _dereq_('./chars'); - -module.exports = function splice(str, i, howmany, substr) { - var arr = chars(str); - arr.splice(~~i, ~~howmany, substr); - return arr.join(''); -}; - -},{"./chars":3}],47:[function(_dereq_,module,exports){ -// sprintf() for JavaScript 0.7-beta1 -// http://www.diveintojavascript.com/projects/javascript-sprintf -// -// Copyright (c) Alexandru Marasteanu -// All rights reserved. -var strRepeat = _dereq_('./helper/strRepeat'); -var toString = Object.prototype.toString; -var sprintf = (function() { - function get_type(variable) { - return toString.call(variable).slice(8, -1).toLowerCase(); - } - - var str_repeat = strRepeat; - - var str_format = function() { - if (!str_format.cache.hasOwnProperty(arguments[0])) { - str_format.cache[arguments[0]] = str_format.parse(arguments[0]); - } - return str_format.format.call(null, str_format.cache[arguments[0]], arguments); - }; - - str_format.format = function(parse_tree, argv) { - var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length; - for (i = 0; i < tree_length; i++) { - node_type = get_type(parse_tree[i]); - if (node_type === 'string') { - output.push(parse_tree[i]); - } - else if (node_type === 'array') { - match = parse_tree[i]; // convenience purposes only - if (match[2]) { // keyword argument - arg = argv[cursor]; - for (k = 0; k < match[2].length; k++) { - if (!arg.hasOwnProperty(match[2][k])) { - throw new Error(sprintf('[_.sprintf] property "%s" does not exist', match[2][k])); - } - arg = arg[match[2][k]]; - } - } else if (match[1]) { // positional argument (explicit) - arg = argv[match[1]]; - } - else { // positional argument (implicit) - arg = argv[cursor++]; - } - - if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) { - throw new Error(sprintf('[_.sprintf] expecting number but found %s', get_type(arg))); - } - switch (match[8]) { - case 'b': arg = arg.toString(2); break; - case 'c': arg = String.fromCharCode(arg); break; - case 'd': arg = parseInt(arg, 10); break; - case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break; - case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break; - case 'o': arg = arg.toString(8); break; - case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break; - case 'u': arg = Math.abs(arg); break; - case 'x': arg = arg.toString(16); break; - case 'X': arg = arg.toString(16).toUpperCase(); break; - } - arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg); - pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' '; - pad_length = match[6] - String(arg).length; - pad = match[6] ? str_repeat(pad_character, pad_length) : ''; - output.push(match[5] ? arg + pad : pad + arg); - } - } - return output.join(''); - }; - - str_format.cache = {}; - - str_format.parse = function(fmt) { - var _fmt = fmt, match = [], parse_tree = [], arg_names = 0; - while (_fmt) { - if ((match = /^[^\x25]+/.exec(_fmt)) !== null) { - parse_tree.push(match[0]); - } - else if ((match = /^\x25{2}/.exec(_fmt)) !== null) { - parse_tree.push('%'); - } - else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) { - if (match[2]) { - arg_names |= 1; - var field_list = [], replacement_field = match[2], field_match = []; - if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') { - if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - } - else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) { - field_list.push(field_match[1]); - } - else { - throw new Error('[_.sprintf] huh?'); - } - } - } - else { - throw new Error('[_.sprintf] huh?'); - } - match[2] = field_list; - } - else { - arg_names |= 2; - } - if (arg_names === 3) { - throw new Error('[_.sprintf] mixing positional and named placeholders is not (yet) supported'); - } - parse_tree.push(match); - } - else { - throw new Error('[_.sprintf] huh?'); - } - _fmt = _fmt.substring(match[0].length); - } - return parse_tree; - }; - - return str_format; -})(); - -module.exports = sprintf; - -},{"./helper/strRepeat":22}],48:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var toPositive = _dereq_('./helper/toPositive'); - -module.exports = function startsWith(str, starts, position) { - str = makeString(str); - starts = '' + starts; - position = position == null ? 0 : Math.min(toPositive(position), str.length); - return str.lastIndexOf(starts, position) === position; -}; - -},{"./helper/makeString":21,"./helper/toPositive":23}],49:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strLeft(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = !sep ? -1 : str.indexOf(sep); - return~ pos ? str.slice(0, pos) : str; -}; - -},{"./helper/makeString":21}],50:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strLeftBack(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = str.lastIndexOf(sep); - return~ pos ? str.slice(0, pos) : str; -}; - -},{"./helper/makeString":21}],51:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strRight(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = !sep ? -1 : str.indexOf(sep); - return~ pos ? str.slice(pos + sep.length, str.length) : str; -}; - -},{"./helper/makeString":21}],52:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function strRightBack(str, sep) { - str = makeString(str); - sep = makeString(sep); - var pos = !sep ? -1 : str.lastIndexOf(sep); - return~ pos ? str.slice(pos + sep.length, str.length) : str; -}; - -},{"./helper/makeString":21}],53:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function stripTags(str) { - return makeString(str).replace(/<\/?[^>]+>/g, ''); -}; - -},{"./helper/makeString":21}],54:[function(_dereq_,module,exports){ -var adjacent = _dereq_('./helper/adjacent'); - -module.exports = function succ(str) { - return adjacent(str, 1); -}; - -},{"./helper/adjacent":16}],55:[function(_dereq_,module,exports){ -module.exports = function surround(str, wrapper) { - return [wrapper, str, wrapper].join(''); -}; - -},{}],56:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function swapCase(str) { - return makeString(str).replace(/\S/g, function(c) { - return c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase(); - }); -}; - -},{"./helper/makeString":21}],57:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function titleize(str) { - return makeString(str).toLowerCase().replace(/(?:^|\s|-)\S/g, function(c) { - return c.toUpperCase(); - }); -}; - -},{"./helper/makeString":21}],58:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -function boolMatch(s, matchers) { - var i, matcher, down = s.toLowerCase(); - matchers = [].concat(matchers); - for (i = 0; i < matchers.length; i += 1) { - matcher = matchers[i]; - if (!matcher) continue; - if (matcher.test && matcher.test(s)) return true; - if (matcher.toLowerCase() === down) return true; - } -} - -module.exports = function toBoolean(str, trueValues, falseValues) { - if (typeof str === "number") str = "" + str; - if (typeof str !== "string") return !!str; - str = trim(str); - if (boolMatch(str, trueValues || ["true", "1"])) return true; - if (boolMatch(str, falseValues || ["false", "0"])) return false; -}; - -},{"./trim":62}],59:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function toNumber(num, precision) { - if (num == null) return 0; - var factor = Math.pow(10, isFinite(precision) ? precision : 0); - return Math.round(num * factor) / factor; -}; - -},{"./trim":62}],60:[function(_dereq_,module,exports){ -var rtrim = _dereq_('./rtrim'); - -module.exports = function toSentence(array, separator, lastSeparator, serial) { - separator = separator || ', '; - lastSeparator = lastSeparator || ' and '; - var a = array.slice(), - lastMember = a.pop(); - - if (array.length > 2 && serial) lastSeparator = rtrim(separator) + lastSeparator; - - return a.length ? a.join(separator) + lastSeparator + lastMember : lastMember; -}; - -},{"./rtrim":44}],61:[function(_dereq_,module,exports){ -var toSentence = _dereq_('./toSentence'); - -module.exports = function toSentenceSerial(array, sep, lastSep) { - return toSentence(array, sep, lastSep, true); -}; - -},{"./toSentence":60}],62:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var defaultToWhiteSpace = _dereq_('./helper/defaultToWhiteSpace'); -var nativeTrim = String.prototype.trim; - -module.exports = function trim(str, characters) { - str = makeString(str); - if (!characters && nativeTrim) return nativeTrim.call(str); - characters = defaultToWhiteSpace(characters); - return str.replace(new RegExp('^' + characters + '+|' + characters + '+$', 'g'), ''); -}; - -},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],63:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); - -module.exports = function truncate(str, length, truncateStr) { - str = makeString(str); - truncateStr = truncateStr || '...'; - length = ~~length; - return str.length > length ? str.slice(0, length) + truncateStr : str; -}; - -},{"./helper/makeString":21}],64:[function(_dereq_,module,exports){ -var trim = _dereq_('./trim'); - -module.exports = function underscored(str) { - return trim(str).replace(/([a-z\d])([A-Z]+)/g, '$1_$2').replace(/[-\s]+/g, '_').toLowerCase(); -}; - -},{"./trim":62}],65:[function(_dereq_,module,exports){ -var makeString = _dereq_('./helper/makeString'); -var htmlEntities = _dereq_('./helper/htmlEntities'); - -module.exports = function unescapeHTML(str) { - return makeString(str).replace(/\&([^;]+);/g, function(entity, entityCode) { - var match; - - if (entityCode in htmlEntities) { - return htmlEntities[entityCode]; - } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) { - return String.fromCharCode(parseInt(match[1], 16)); - } else if (match = entityCode.match(/^#(\d+)$/)) { - return String.fromCharCode(~~match[1]); - } else { - return entity; - } - }); -}; - -},{"./helper/htmlEntities":20,"./helper/makeString":21}],66:[function(_dereq_,module,exports){ -module.exports = function unquote(str, quoteChar) { - quoteChar = quoteChar || '"'; - if (str[0] === quoteChar && str[str.length - 1] === quoteChar) - return str.slice(1, str.length - 1); - else return str; -}; - -},{}],67:[function(_dereq_,module,exports){ -var sprintf = _dereq_('./sprintf'); - -module.exports = function vsprintf(fmt, argv) { - argv.unshift(fmt); - return sprintf.apply(null, argv); -}; - -},{"./sprintf":47}],68:[function(_dereq_,module,exports){ -var isBlank = _dereq_('./isBlank'); -var trim = _dereq_('./trim'); - -module.exports = function words(str, delimiter) { - if (isBlank(str)) return []; - return trim(str, delimiter).split(delimiter || /\s+/); -}; - -},{"./isBlank":27,"./trim":62}],69:[function(_dereq_,module,exports){ -// Wrap -// wraps a string by a certain width - -makeString = _dereq_('./helper/makeString'); - -module.exports = function wrap(str, options){ - str = makeString(str); - - options = options || {}; - - width = options.width || 75; - seperator = options.seperator || '\n'; - cut = options.cut || false; - preserveSpaces = options.preserveSpaces || false; - trailingSpaces = options.trailingSpaces || false; - - if(width <= 0){ - return str; - } - - else if(!cut){ - - words = str.split(" "); - result = ""; - current_column = 0; - - while(words.length > 0){ - - // if adding a space and the next word would cause this line to be longer than width... - if(1 + words[0].length + current_column > width){ - //start a new line if this line is not already empty - if(current_column > 0){ - // add a space at the end of the line is preserveSpaces is true - if (preserveSpaces){ - result += ' '; - current_column++; - } - // fill the rest of the line with spaces if trailingSpaces option is true - else if(trailingSpaces){ - while(current_column < width){ - result += ' '; - current_column++; - } - } - //start new line - result += seperator; - current_column = 0; - } - } - - // if not at the begining of the line, add a space in front of the word - if(current_column > 0){ - result += " "; - current_column++; - } - - // tack on the next word, update current column, a pop words array - result += words[0]; - current_column += words[0].length; - words.shift(); - - } - - // fill the rest of the line with spaces if trailingSpaces option is true - if(trailingSpaces){ - while(current_column < width){ - result += ' '; - current_column++; - } - } - - return result; - - } - - else { - - index = 0; - result = ""; - - // walk through each character and add seperators where appropriate - while(index < str.length){ - if(index % width == 0 && index > 0){ - result += seperator; - } - result += str.charAt(index); - index++; - } - - // fill the rest of the line with spaces if trailingSpaces option is true - if(trailingSpaces){ - while(index % width > 0){ - result += ' '; - index++; - } - } - - return result; - } -}; -},{"./helper/makeString":21}]},{},[15]) -(15) -}); \ No newline at end of file diff --git a/dist/underscore.string.min.js b/dist/underscore.string.min.js deleted file mode 100644 index cba8286e..00000000 --- a/dist/underscore.string.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* underscore.string 3.2.2 | MIT licensed | http://epeli.github.com/underscore.string/ */ - -!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var r;"undefined"!=typeof window?r=window:"undefined"!=typeof global?r=global:"undefined"!=typeof self&&(r=self),r.s=e()}}(function(){return function e(r,t,n){function i(o,u){if(!t[o]){if(!r[o]){var c="function"==typeof require&&require;if(!u&&c)return c(o,!0);if(a)return a(o,!0);throw new Error("Cannot find module '"+o+"'")}var p=t[o]={exports:{}};r[o][0].call(p.exports,function(e){var t=r[o][1][e];return i(t?t:e)},p,p.exports,e,r,t,n)}return t[o].exports}for(var a="function"==typeof require&&require,o=0;o0?e.match(new RegExp(".{1,"+r+"}","g")):[e])}},{}],5:[function(e,r){var t=e("./capitalize"),n=e("./camelize"),i=e("./helper/makeString");r.exports=function(e){return e=i(e),t(n(e.replace(/[\W_]/g," ")).replace(/\s/g,""))}},{"./camelize":1,"./capitalize":2,"./helper/makeString":21}],6:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/\s\s+/g," ")}},{"./trim":62}],7:[function(e,r){var t=e("./helper/makeString"),n="ąàáäâãåæăćčĉęèéëêĝĥìíïîĵłľńňòóöőôõðøśșšŝťțŭùúüűûñÿýçżźž",i="aaaaaaaaaccceeeeeghiiiijllnnoooooooossssttuuuuuunyyczzz";n+=n.toUpperCase(),i+=i.toUpperCase(),i=i.split(""),n+="ß",i.push("ss"),r.exports=function(e){return t(e).replace(/.{1}/g,function(e){var r=n.indexOf(e);return-1===r?e:i[r]})}},{"./helper/makeString":21}],8:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return e=t(e),r=t(r),0===e.length||0===r.length?0:e.split(r).length-1}},{"./helper/makeString":21}],9:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([A-Z])/g,"-$1").replace(/[-_\s]+/g,"-").toLowerCase()}},{"./trim":62}],10:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return e=t(e),e.charAt(0).toLowerCase()+e.slice(1)}},{"./helper/makeString":21}],11:[function(e,r){function t(e){for(var r=e.match(/^[\s\\t]*/gm),t=r[0].length,n=1;n=0&&e.indexOf(r,i)===i}},{"./helper/makeString":21,"./helper/toPositive":23}],13:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/escapeChars"),i="[";for(var a in n)i+=a;i+="]";var o=new RegExp(i,"g");r.exports=function(e){return t(e).replace(o,function(e){return"&"+n[e]+";"})}},{"./helper/escapeChars":18,"./helper/makeString":21}],14:[function(e,r){r.exports=function(){var e={};for(var r in this)this.hasOwnProperty(r)&&!r.match(/^(?:include|contains|reverse|join)$/)&&(e[r]=this[r]);return e}},{}],15:[function(e,r){"use strict";function t(e){return this instanceof t?void(this._wrapped=e):new t(e)}function n(e,r){"function"==typeof r&&(t.prototype[e]=function(){var e=[this._wrapped].concat(Array.prototype.slice.call(arguments)),n=r.apply(null,e);return"string"==typeof n?new t(n):n})}function i(e){n(e,function(r){var t=Array.prototype.slice.call(arguments,1);return String.prototype[e].apply(r,t)})}t.VERSION="3.2.2",t.isBlank=e("./isBlank"),t.stripTags=e("./stripTags"),t.capitalize=e("./capitalize"),t.decapitalize=e("./decapitalize"),t.chop=e("./chop"),t.trim=e("./trim"),t.clean=e("./clean"),t.cleanDiacritics=e("./cleanDiacritics"),t.count=e("./count"),t.chars=e("./chars"),t.swapCase=e("./swapCase"),t.escapeHTML=e("./escapeHTML"),t.unescapeHTML=e("./unescapeHTML"),t.splice=e("./splice"),t.insert=e("./insert"),t.replaceAll=e("./replaceAll"),t.include=e("./include"),t.join=e("./join"),t.lines=e("./lines"),t.dedent=e("./dedent"),t.reverse=e("./reverse"),t.startsWith=e("./startsWith"),t.endsWith=e("./endsWith"),t.pred=e("./pred"),t.succ=e("./succ"),t.titleize=e("./titleize"),t.camelize=e("./camelize"),t.underscored=e("./underscored"),t.dasherize=e("./dasherize"),t.classify=e("./classify"),t.humanize=e("./humanize"),t.ltrim=e("./ltrim"),t.rtrim=e("./rtrim"),t.truncate=e("./truncate"),t.prune=e("./prune"),t.words=e("./words"),t.pad=e("./pad"),t.lpad=e("./lpad"),t.rpad=e("./rpad"),t.lrpad=e("./lrpad"),t.sprintf=e("./sprintf"),t.vsprintf=e("./vsprintf"),t.toNumber=e("./toNumber"),t.numberFormat=e("./numberFormat"),t.strRight=e("./strRight"),t.strRightBack=e("./strRightBack"),t.strLeft=e("./strLeft"),t.strLeftBack=e("./strLeftBack"),t.toSentence=e("./toSentence"),t.toSentenceSerial=e("./toSentenceSerial"),t.slugify=e("./slugify"),t.surround=e("./surround"),t.quote=e("./quote"),t.unquote=e("./unquote"),t.repeat=e("./repeat"),t.naturalCmp=e("./naturalCmp"),t.levenshtein=e("./levenshtein"),t.toBoolean=e("./toBoolean"),t.exports=e("./exports"),t.escapeRegExp=e("./helper/escapeRegExp"),t.wrap=e("./wrap"),t.strip=t.trim,t.lstrip=t.ltrim,t.rstrip=t.rtrim,t.center=t.lrpad,t.rjust=t.lpad,t.ljust=t.rpad,t.contains=t.include,t.q=t.quote,t.toBool=t.toBoolean,t.camelcase=t.camelize,t.prototype={value:function(){return this._wrapped}};for(var a in t)n(a,t[a]);n("tap",function(e,r){return r(e)});var o=["toUpperCase","toLowerCase","split","replace","slice","substring","substr","concat"];for(var a in o)i(o[a]);r.exports=t},{"./camelize":1,"./capitalize":2,"./chars":3,"./chop":4,"./classify":5,"./clean":6,"./cleanDiacritics":7,"./count":8,"./dasherize":9,"./decapitalize":10,"./dedent":11,"./endsWith":12,"./escapeHTML":13,"./exports":14,"./helper/escapeRegExp":19,"./humanize":24,"./include":25,"./insert":26,"./isBlank":27,"./join":28,"./levenshtein":29,"./lines":30,"./lpad":31,"./lrpad":32,"./ltrim":33,"./naturalCmp":34,"./numberFormat":35,"./pad":36,"./pred":37,"./prune":38,"./quote":39,"./repeat":40,"./replaceAll":41,"./reverse":42,"./rpad":43,"./rtrim":44,"./slugify":45,"./splice":46,"./sprintf":47,"./startsWith":48,"./strLeft":49,"./strLeftBack":50,"./strRight":51,"./strRightBack":52,"./stripTags":53,"./succ":54,"./surround":55,"./swapCase":56,"./titleize":57,"./toBoolean":58,"./toNumber":59,"./toSentence":60,"./toSentenceSerial":61,"./trim":62,"./truncate":63,"./underscored":64,"./unescapeHTML":65,"./unquote":66,"./vsprintf":67,"./words":68,"./wrap":69}],16:[function(e,r){var t=e("./makeString");r.exports=function(e,r){return e=t(e),0===e.length?"":e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+r)}},{"./makeString":21}],17:[function(e,r){var t=e("./escapeRegExp");r.exports=function(e){return null==e?"\\s":e.source?e.source:"["+t(e)+"]"}},{"./escapeRegExp":19}],18:[function(e,r){var t={"¢":"cent","£":"pound","¥":"yen","€":"euro","©":"copy","®":"reg","<":"lt",">":"gt",'"':"quot","&":"amp","'":"#39"};r.exports=t},{}],19:[function(e,r){var t=e("./makeString");r.exports=function(e){return t(e).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}},{"./makeString":21}],20:[function(e,r){var t={nbsp:" ",cent:"¢",pound:"£",yen:"¥",euro:"€",copy:"©",reg:"®",lt:"<",gt:">",quot:'"',amp:"&",apos:"'"};r.exports=t},{}],21:[function(e,r){r.exports=function(e){return null==e?"":""+e}},{}],22:[function(e,r){r.exports=function(e,r){if(1>r)return"";for(var t="";r>0;)1&r&&(t+=e),r>>=1,e+=e;return t}},{}],23:[function(e,r){r.exports=function(e){return 0>e?0:+e||0}},{}],24:[function(e,r){var t=e("./capitalize"),n=e("./underscored"),i=e("./trim");r.exports=function(e){return t(i(n(e).replace(/_id$/,"").replace(/_/g," ")))}},{"./capitalize":2,"./trim":62,"./underscored":64}],25:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){return""===r?!0:-1!==t(e).indexOf(r)}},{"./helper/makeString":21}],26:[function(e,r){var t=e("./splice");r.exports=function(e,r,n){return t(e,r,0,n)}},{"./splice":46}],27:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return/^\s*$/.test(t(e))}},{"./helper/makeString":21}],28:[function(e,r){var t=e("./helper/makeString"),n=[].slice;r.exports=function(){var e=n.call(arguments),r=e.shift();return e.join(t(r))}},{"./helper/makeString":21}],29:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){"use strict";if(e=t(e),r=t(r),e===r)return 0;if(!e||!r)return Math.max(e.length,r.length);for(var n=new Array(r.length+1),i=0;ic&&(a=c),c=n[o+1]+1,a>c&&(a=c),n[o]=u}n[o]=a}return a}},{"./helper/makeString":21}],30:[function(e,r){r.exports=function(e){return null==e?[]:String(e).split(/\r\n?|\n/)}},{}],31:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n)}},{"./pad":36}],32:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"both")}},{"./pad":36}],33:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimLeft;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+"),""))}},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],34:[function(e,r){r.exports=function(e,r){if(e==r)return 0;if(!e)return-1;if(!r)return 1;for(var t=/(\.\d+|\d+|\D+)/g,n=String(e).match(t),i=String(r).match(t),a=Math.min(n.length,i.length),o=0;a>o;o++){var u=n[o],c=i[o];if(u!==c){var p=+u,s=+c;return p===p&&s===s?p>s?1:-1:c>u?-1:1}}return n.length!=i.length?n.length-i.length:r>e?-1:1}},{}],35:[function(e,r){r.exports=function(e,r,t,n){if(isNaN(e)||null==e)return"";e=e.toFixed(~~r),n="string"==typeof n?n:",";var i=e.split("."),a=i[0],o=i[1]?(t||".")+i[1]:"";return a.replace(/(\d)(?=(?:\d{3})+$)/g,"$1"+n)+o}},{}],36:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function(e,r,i,a){e=t(e),r=~~r;var o=0;switch(i?i.length>1&&(i=i.charAt(0)):i=" ",a){case"right":return o=r-e.length,e+n(i,o);case"both":return o=r-e.length,n(i,Math.ceil(o/2))+e+n(i,Math.floor(o/2));default:return o=r-e.length,n(i,o)+e}}},{"./helper/makeString":21,"./helper/strRepeat":22}],37:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,-1)}},{"./helper/adjacent":16}],38:[function(e,r){var t=e("./helper/makeString"),n=e("./rtrim");r.exports=function(e,r,i){if(e=t(e),r=~~r,i=null!=i?String(i):"...",e.length<=r)return e;var a=function(e){return e.toUpperCase()!==e.toLowerCase()?"A":" "},o=e.slice(0,r+1).replace(/.(?=\W*\w*$)/g,a);return o=o.slice(o.length-2).match(/\w\w/)?o.replace(/\s*\S+$/,""):n(o.slice(0,o.length-1)),(o+i).length>e.length?e:e.slice(0,o.length)+i}},{"./helper/makeString":21,"./rtrim":44}],39:[function(e,r){var t=e("./surround");r.exports=function(e,r){return t(e,r||'"')}},{"./surround":55}],40:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/strRepeat");r.exports=function i(e,r,a){if(e=t(e),r=~~r,null==a)return n(e,r);for(var i=[];r>0;i[--r]=e);return i.join(a)}},{"./helper/makeString":21,"./helper/strRepeat":22}],41:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n,i){var a=i===!0?"gi":"g",o=new RegExp(r,a);return t(e).replace(o,n)}},{"./helper/makeString":21}],42:[function(e,r){var t=e("./chars");r.exports=function(e){return t(e).reverse().join("")}},{"./chars":3}],43:[function(e,r){var t=e("./pad");r.exports=function(e,r,n){return t(e,r,n,"right")}},{"./pad":36}],44:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trimRight;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp(r+"+$"),""))}},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],45:[function(e,r){var t=(e("./helper/makeString"),e("./helper/defaultToWhiteSpace"),e("./trim")),n=e("./dasherize"),i=e("./cleanDiacritics");r.exports=function(e){return t(n(i(e).replace(/[^\w\s-]/g,"-").toLowerCase()),"-")}},{"./cleanDiacritics":7,"./dasherize":9,"./helper/defaultToWhiteSpace":17,"./helper/makeString":21,"./trim":62}],46:[function(e,r){var t=e("./chars");r.exports=function(e,r,n,i){var a=t(e);return a.splice(~~r,~~n,i),a.join("")}},{"./chars":3}],47:[function(e,r){var t=e("./helper/strRepeat"),n=Object.prototype.toString,i=function(){function e(e){return n.call(e).slice(8,-1).toLowerCase()}var r=t,a=function(){return a.cache.hasOwnProperty(arguments[0])||(a.cache[arguments[0]]=a.parse(arguments[0])),a.format.call(null,a.cache[arguments[0]],arguments)};return a.format=function(t,n){var a,o,u,c,p,s,l,f=1,h=t.length,g="",m=[];for(o=0;h>o;o++)if(g=e(t[o]),"string"===g)m.push(t[o]);else if("array"===g){if(c=t[o],c[2])for(a=n[f],u=0;u=0?"+"+a:a,s=c[4]?"0"==c[4]?"0":c[4].charAt(1):" ",l=c[6]-String(a).length,p=c[6]?r(s,l):"",m.push(c[5]?a+p:p+a)}return m.join("")},a.cache={},a.parse=function(e){for(var r=e,t=[],n=[],i=0;r;){if(null!==(t=/^[^\x25]+/.exec(r)))n.push(t[0]);else if(null!==(t=/^\x25{2}/.exec(r)))n.push("%");else{if(null===(t=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(r)))throw new Error("[_.sprintf] huh?");if(t[2]){i|=1;var a=[],o=t[2],u=[];if(null===(u=/^([a-z_][a-z_\d]*)/i.exec(o)))throw new Error("[_.sprintf] huh?");for(a.push(u[1]);""!==(o=o.substring(u[0].length));)if(null!==(u=/^\.([a-z_][a-z_\d]*)/i.exec(o)))a.push(u[1]);else{if(null===(u=/^\[(\d+)\]/.exec(o)))throw new Error("[_.sprintf] huh?");a.push(u[1])}t[2]=a}else i|=2;if(3===i)throw new Error("[_.sprintf] mixing positional and named placeholders is not (yet) supported");n.push(t)}r=r.substring(t[0].length)}return n},a}();r.exports=i},{"./helper/strRepeat":22}],48:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/toPositive");r.exports=function(e,r,i){return e=t(e),r=""+r,i=null==i?0:Math.min(n(i),e.length),e.lastIndexOf(r,i)===i}},{"./helper/makeString":21,"./helper/toPositive":23}],49:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(0,n):e}},{"./helper/makeString":21}],50:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=e.lastIndexOf(r);return~n?e.slice(0,n):e}},{"./helper/makeString":21}],51:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.indexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":21}],52:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r){e=t(e),r=t(r);var n=r?e.lastIndexOf(r):-1;return~n?e.slice(n+r.length,e.length):e}},{"./helper/makeString":21}],53:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/<\/?[^>]+>/g,"")}},{"./helper/makeString":21}],54:[function(e,r){var t=e("./helper/adjacent");r.exports=function(e){return t(e,1)}},{"./helper/adjacent":16}],55:[function(e,r){r.exports=function(e,r){return[r,e,r].join("")}},{}],56:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).replace(/\S/g,function(e){return e===e.toUpperCase()?e.toLowerCase():e.toUpperCase()})}},{"./helper/makeString":21}],57:[function(e,r){var t=e("./helper/makeString");r.exports=function(e){return t(e).toLowerCase().replace(/(?:^|\s|-)\S/g,function(e){return e.toUpperCase()})}},{"./helper/makeString":21}],58:[function(e,r){function t(e,r){var t,n,i=e.toLowerCase();for(r=[].concat(r),t=0;t2&&i&&(n=t(r)+n),a.length?a.join(r)+n+o:o}},{"./rtrim":44}],61:[function(e,r){var t=e("./toSentence");r.exports=function(e,r,n){return t(e,r,n,!0)}},{"./toSentence":60}],62:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/defaultToWhiteSpace"),i=String.prototype.trim;r.exports=function(e,r){return e=t(e),!r&&i?i.call(e):(r=n(r),e.replace(new RegExp("^"+r+"+|"+r+"+$","g"),""))}},{"./helper/defaultToWhiteSpace":17,"./helper/makeString":21}],63:[function(e,r){var t=e("./helper/makeString");r.exports=function(e,r,n){return e=t(e),n=n||"...",r=~~r,e.length>r?e.slice(0,r)+n:e}},{"./helper/makeString":21}],64:[function(e,r){var t=e("./trim");r.exports=function(e){return t(e).replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}},{"./trim":62}],65:[function(e,r){var t=e("./helper/makeString"),n=e("./helper/htmlEntities");r.exports=function(e){return t(e).replace(/\&([^;]+);/g,function(e,r){var t;return r in n?n[r]:(t=r.match(/^#x([\da-fA-F]+)$/))?String.fromCharCode(parseInt(t[1],16)):(t=r.match(/^#(\d+)$/))?String.fromCharCode(~~t[1]):e})}},{"./helper/htmlEntities":20,"./helper/makeString":21}],66:[function(e,r){r.exports=function(e,r){return r=r||'"',e[0]===r&&e[e.length-1]===r?e.slice(1,e.length-1):e}},{}],67:[function(e,r){var t=e("./sprintf");r.exports=function(e,r){return r.unshift(e),t.apply(null,r)}},{"./sprintf":47}],68:[function(e,r){var t=e("./isBlank"),n=e("./trim");r.exports=function(e,r){return t(e)?[]:n(e,r).split(r||/\s+/)}},{"./isBlank":27,"./trim":62}],69:[function(e,r){makeString=e("./helper/makeString"),r.exports=function(e,r){if(e=makeString(e),r=r||{},width=r.width||75,seperator=r.seperator||"\n",cut=r.cut||!1,preserveSpaces=r.preserveSpaces||!1,trailingSpaces=r.trailingSpaces||!1,0>=width)return e;if(cut){for(index=0,result="";index0&&(result+=seperator),result+=e.charAt(index),index++;if(trailingSpaces)for(;index%width>0;)result+=" ",index++;return result}for(words=e.split(" "),result="",current_column=0;words.length>0;){if(1+words[0].length+current_column>width&¤t_column>0){if(preserveSpaces)result+=" ",current_column++;else if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;result+=seperator,current_column=0}current_column>0&&(result+=" ",current_column++),result+=words[0],current_column+=words[0].length,words.shift()}if(trailingSpaces)for(;width>current_column;)result+=" ",current_column++;return result}},{"./helper/makeString":21}]},{},[15])(15)}); \ No newline at end of file diff --git a/index.js b/index.js index 00e0690f..74e27f72 100644 --- a/index.js +++ b/index.js @@ -42,6 +42,7 @@ s.pred = require('./pred'); s.succ = require('./succ'); s.titleize = require('./titleize'); s.camelize = require('./camelize'); +s.decamelize = require('./decamelize'); s.underscored = require('./underscored'); s.dasherize = require('./dasherize'); s.classify = require('./classify'); diff --git a/tests/decamelize.js b/tests/decamelize.js new file mode 100644 index 00000000..24ab5823 --- /dev/null +++ b/tests/decamelize.js @@ -0,0 +1,15 @@ +var equal = require('assert').equal; +var decamelize = require('../decamelize'); + + +test('#decamelize', function(){ + equal(decamelize('theDecamelizeStringMethod'), 'the_decamelize_string_method'); + equal(decamelize('webkitTransform', '-'), 'webkit-transform'); + equal(decamelize('theDecamelizeStringMethod_', ''), 'thedecamelizestringmethod_'); + equal(decamelize('TheDecamelizeStringMethod', '-'), 'the-decamelize-string-method'); + equal(decamelize(''), '', 'Decamelize empty string returns empty string'); + equal(decamelize(null), '', 'Decamelize null returns empty string'); + equal(decamelize(undefined), '', 'Decamelize undefined returns empty string'); + equal(decamelize(123), '123'); +}); +