| Index: node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown
|
| diff --git a/node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown b/node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4e58be4d09de02c7fdfe092a3ea25206d1e0aa4d
|
| --- /dev/null
|
| +++ b/node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown
|
| @@ -0,0 +1,825 @@
|
| +# Underscore.string [](http://travis-ci.org/epeli/underscore.string) #
|
| +
|
| +
|
| +
|
| +Javascript lacks complete string manipulation operations.
|
| +This an attempt to fill that gap. List of build-in methods can be found
|
| +for example from [Dive Into JavaScript][d].
|
| +
|
| +[d]: http://www.diveintojavascript.com/core-javascript-reference/the-string-object
|
| +
|
| +
|
| +As name states this an extension for [Underscore.js][u] (and [Lo-Dash](http://lodash.com/)), but it can be used
|
| +independently from **_s**-global variable. But with Underscore.js you can
|
| +use Object-Oriented style and chaining:
|
| +
|
| +[u]: http://underscorejs.org/
|
| +
|
| +```javascript
|
| +_(" epeli ").chain().trim().capitalize().value()
|
| +=> "Epeli"
|
| +```
|
| +
|
| +## Download ##
|
| +
|
| + * [Development version](https://raw.github.com/epeli/underscore.string/master/lib/underscore.string.js) *Uncompressed with Comments 18kb*
|
| + * [Production version](https://github.com/epeli/underscore.string/raw/master/dist/underscore.string.min.js) *Minified 7kb*
|
| +
|
| +
|
| +## Node.js installation ##
|
| +
|
| +**npm package**
|
| +
|
| + npm install underscore.string
|
| +
|
| +**Standalone usage**:
|
| +
|
| +```javascript
|
| +var _s = require('underscore.string');
|
| +```
|
| +
|
| +**Integrate with Underscore.js**:
|
| +
|
| +```javascript
|
| +var _ = require('underscore');
|
| +
|
| +// Import Underscore.string to separate object, because there are conflict functions (include, reverse, contains)
|
| +_.str = require('underscore.string');
|
| +
|
| +// Mix in non-conflict functions to Underscore namespace if you want
|
| +_.mixin(_.str.exports());
|
| +
|
| +// All functions, include conflict, will be available through _.str object
|
| +_.str.include('Underscore.string', 'string'); // => true
|
| +```
|
| +
|
| +**Or Integrate with Underscore.js without module loading**
|
| +
|
| +Run the following expression after Underscore.js and Underscore.string are loaded
|
| +```javascript
|
| +// _.str becomes a global variable if no module loading is detected
|
| +// Mix in non-conflict functions to Underscore namespace
|
| +_.mixin(_.str.exports());
|
| +```
|
| +
|
| +## String Functions ##
|
| +
|
| +For availability of functions in this way you need to mix in Underscore.string functions:
|
| +
|
| +```javascript
|
| +_.mixin(_.string.exports());
|
| +```
|
| +
|
| +otherwise functions from examples will be available through _.string or _.str objects:
|
| +
|
| +```javascript
|
| +_.str.capitalize('epeli')
|
| +=> "Epeli"
|
| +```
|
| +
|
| +**numberFormat** _.numberFormat(number, [ decimals=0, decimalSeparator='.', orderSeparator=','])
|
| +
|
| +Formats the numbers.
|
| +
|
| +```javascript
|
| +_.numberFormat(1000, 2)
|
| +=> "1,000.00"
|
| +
|
| +_.numberFormat(123456789.123, 5, '.', ',')
|
| +=> "123,456,789.12300"
|
| +```
|
| +
|
| +
|
| +**levenshtein** _.levenshtein(string1, string2)
|
| +
|
| +Calculates [Levenshtein distance][ld] between two strings.
|
| +[ld]: http://en.wikipedia.org/wiki/Levenshtein_distance
|
| +
|
| +```javascript
|
| +_.levenshtein('kitten', 'kittah')
|
| +=> 2
|
| +```
|
| +
|
| +**capitalize** _.capitalize(string)
|
| +
|
| +Converts first letter of the string to uppercase.
|
| +
|
| +```javascript
|
| +_.capitalize("foo Bar")
|
| +=> "Foo Bar"
|
| +```
|
| +
|
| +**chop** _.chop(string, step)
|
| +
|
| +```javascript
|
| +_.chop('whitespace', 3)
|
| +=> ['whi','tes','pac','e']
|
| +```
|
| +
|
| +**clean** _.clean(str)
|
| +
|
| +Compress some whitespaces to one.
|
| +
|
| +```javascript
|
| +_.clean(" foo bar ")
|
| +=> 'foo bar'
|
| +```
|
| +
|
| +**chars** _.chars(str)
|
| +
|
| +```javascript
|
| +_.chars('Hello')
|
| +=> ['H','e','l','l','o']
|
| +```
|
| +
|
| +**swapCase** _.swapCase(str)
|
| +
|
| +Returns a copy of the string in which all the case-based characters have had their case swapped.
|
| +
|
| +```javascript
|
| +_.swapCase('hELLO')
|
| +=> 'Hello'
|
| +```
|
| +
|
| +**include** available only through _.str object, because Underscore has function with the same name.
|
| +
|
| +```javascript
|
| +_.str.include("foobar", "ob")
|
| +=> true
|
| +```
|
| +
|
| +(removed) **includes** _.includes(string, substring)
|
| +
|
| +Tests if string contains a substring.
|
| +
|
| +```javascript
|
| +_.includes("foobar", "ob")
|
| +=> true
|
| +```
|
| +
|
| +**includes** function was removed
|
| +
|
| +But you can create it in this way, for compatibility with previous versions:
|
| +
|
| +```javascript
|
| +_.includes = _.str.include
|
| +```
|
| +
|
| +**count** _.count(string, substring)
|
| +
|
| +```javascript
|
| +_('Hello world').count('l')
|
| +=> 3
|
| +```
|
| +
|
| +**escapeHTML** _.escapeHTML(string)
|
| +
|
| +Converts HTML special characters to their entity equivalents.
|
| +
|
| +```javascript
|
| +_('<div>Blah blah blah</div>').escapeHTML();
|
| +=> '<div>Blah blah blah</div>'
|
| +```
|
| +
|
| +**unescapeHTML** _.unescapeHTML(string)
|
| +
|
| +Converts entity characters to HTML equivalents.
|
| +
|
| +```javascript
|
| +_('<div>Blah blah blah</div>').unescapeHTML();
|
| +=> '<div>Blah blah blah</div>'
|
| +```
|
| +
|
| +**insert** _.insert(string, index, substing)
|
| +
|
| +```javascript
|
| +_('Hello ').insert(6, 'world')
|
| +=> 'Hello world'
|
| +```
|
| +
|
| +**isBlank** _.isBlank(string)
|
| +
|
| +```javascript
|
| +_('').isBlank(); // => true
|
| +_('\n').isBlank(); // => true
|
| +_(' ').isBlank(); // => true
|
| +_('a').isBlank(); // => false
|
| +```
|
| +
|
| +**join** _.join(separator, *strings)
|
| +
|
| +Joins strings together with given separator
|
| +
|
| +```javascript
|
| +_.join(" ", "foo", "bar")
|
| +=> "foo bar"
|
| +```
|
| +
|
| +**lines** _.lines(str)
|
| +
|
| +```javascript
|
| +_.lines("Hello\nWorld")
|
| +=> ["Hello", "World"]
|
| +```
|
| +
|
| +**reverse** available only through _.str object, because Underscore has function with the same name.
|
| +
|
| +Return reversed string:
|
| +
|
| +```javascript
|
| +_.str.reverse("foobar")
|
| +=> 'raboof'
|
| +```
|
| +
|
| +**splice** _.splice(string, index, howmany, substring)
|
| +
|
| +Like a array splice.
|
| +
|
| +```javascript
|
| +_('https://edtsech@bitbucket.org/edtsech/underscore.strings').splice(30, 7, 'epeli')
|
| +=> 'https://edtsech@bitbucket.org/epeli/underscore.strings'
|
| +```
|
| +
|
| +**startsWith** _.startsWith(string, starts)
|
| +
|
| +This method checks whether string starts with starts.
|
| +
|
| +```javascript
|
| +_("image.gif").startsWith("image")
|
| +=> true
|
| +```
|
| +
|
| +**endsWith** _.endsWith(string, ends)
|
| +
|
| +This method checks whether string ends with ends.
|
| +
|
| +```javascript
|
| +_("image.gif").endsWith("gif")
|
| +=> true
|
| +```
|
| +
|
| +**succ** _.succ(str)
|
| +
|
| +Returns the successor to str.
|
| +
|
| +```javascript
|
| +_('a').succ()
|
| +=> 'b'
|
| +
|
| +_('A').succ()
|
| +=> 'B'
|
| +```
|
| +
|
| +**supplant**
|
| +
|
| +Supplant function was removed, use Underscore.js [template function][p].
|
| +
|
| +[p]: http://documentcloud.github.com/underscore/#template
|
| +
|
| +**strip** alias for *trim*
|
| +
|
| +**lstrip** alias for *ltrim*
|
| +
|
| +**rstrip** alias for *rtrim*
|
| +
|
| +**titleize** _.titleize(string)
|
| +
|
| +```javascript
|
| +_('my name is epeli').titleize()
|
| +=> 'My Name Is Epeli'
|
| +```
|
| +
|
| +**camelize** _.camelize(string)
|
| +
|
| +Converts underscored or dasherized string to a camelized one. Begins with
|
| +a lower case letter unless it starts with an underscore or string
|
| +
|
| +```javascript
|
| +_('moz-transform').camelize()
|
| +=> 'mozTransform'
|
| +_('-moz-transform').camelize()
|
| +=> 'MozTransform'
|
| +```
|
| +
|
| +**classify** _.classify(string)
|
| +
|
| +Converts string to camelized class name. First letter is always upper case
|
| +
|
| +```javascript
|
| +_('some_class_name').classify()
|
| +=> 'SomeClassName'
|
| +```
|
| +
|
| +**underscored** _.underscored(string)
|
| +
|
| +Converts a camelized or dasherized string into an underscored one
|
| +
|
| +```javascript
|
| +_('MozTransform').underscored()
|
| +=> 'moz_transform'
|
| +```
|
| +
|
| +**dasherize** _.dasherize(string)
|
| +
|
| +Converts a underscored or camelized string into an dasherized one
|
| +
|
| +```javascript
|
| +_('MozTransform').dasherize()
|
| +=> '-moz-transform'
|
| +```
|
| +
|
| +**humanize** _.humanize(string)
|
| +
|
| +Converts an underscored, camelized, or dasherized string into a humanized one.
|
| +Also removes beginning and ending whitespace, and removes the postfix '_id'.
|
| +
|
| +```javascript
|
| +_(' capitalize dash-CamelCase_underscore trim ').humanize()
|
| +=> 'Capitalize dash camel case underscore trim'
|
| +```
|
| +
|
| +**trim** _.trim(string, [characters])
|
| +
|
| +trims defined characters from begining and ending of the string.
|
| +Defaults to whitespace characters.
|
| +
|
| +```javascript
|
| +_.trim(" foobar ")
|
| +=> "foobar"
|
| +
|
| +_.trim("_-foobar-_", "_-")
|
| +=> "foobar"
|
| +```
|
| +
|
| +
|
| +**ltrim** _.ltrim(string, [characters])
|
| +
|
| +Left trim. Similar to trim, but only for left side.
|
| +
|
| +
|
| +**rtrim** _.rtrim(string, [characters])
|
| +
|
| +Right trim. Similar to trim, but only for right side.
|
| +
|
| +**truncate** _.truncate(string, length, truncateString)
|
| +
|
| +```javascript
|
| +_('Hello world').truncate(5)
|
| +=> 'Hello...'
|
| +
|
| +_('Hello').truncate(10)
|
| +=> 'Hello'
|
| +```
|
| +
|
| +**prune** _.prune(string, length, pruneString)
|
| +
|
| +Elegant version of truncate.
|
| +Makes sure the pruned string does not exceed the original length.
|
| +Avoid half-chopped words when truncating.
|
| +
|
| +```javascript
|
| +_('Hello, world').prune(5)
|
| +=> 'Hello...'
|
| +
|
| +_('Hello, world').prune(8)
|
| +=> 'Hello...'
|
| +
|
| +_('Hello, world').prune(5, ' (read a lot more)')
|
| +=> 'Hello, world' (as adding "(read a lot more)" would be longer than the original string)
|
| +
|
| +_('Hello, cruel world').prune(15)
|
| +=> 'Hello, cruel...'
|
| +
|
| +_('Hello').prune(10)
|
| +=> 'Hello'
|
| +```
|
| +
|
| +**words** _.words(str, delimiter=/\s+/)
|
| +
|
| +Split string by delimiter (String or RegExp), /\s+/ by default.
|
| +
|
| +```javascript
|
| +_.words(" I love you ")
|
| +=> ["I","love","you"]
|
| +
|
| +_.words("I_love_you", "_")
|
| +=> ["I","love","you"]
|
| +
|
| +_.words("I-love-you", /-/)
|
| +=> ["I","love","you"]
|
| +
|
| +_.words(" ")
|
| +=> []
|
| +```
|
| +
|
| +**sprintf** _.sprintf(string format, *arguments)
|
| +
|
| +C like string formatting.
|
| +Credits goes to [Alexandru Marasteanu][o].
|
| +For more detailed documentation, see the [original page][o].
|
| +
|
| +[o]: http://www.diveintojavascript.com/projects/javascript-sprintf
|
| +
|
| +```javascript
|
| +_.sprintf("%.1f", 1.17)
|
| +"1.2"
|
| +```
|
| +
|
| +**pad** _.pad(str, length, [padStr, type])
|
| +
|
| +pads the `str` with characters until the total string length is equal to the passed `length` parameter. By default, pads on the **left** with the space char (`" "`). `padStr` is truncated to a single character if necessary.
|
| +
|
| +```javascript
|
| +_.pad("1", 8)
|
| +-> " 1";
|
| +
|
| +_.pad("1", 8, '0')
|
| +-> "00000001";
|
| +
|
| +_.pad("1", 8, '0', 'right')
|
| +-> "10000000";
|
| +
|
| +_.pad("1", 8, '0', 'both')
|
| +-> "00001000";
|
| +
|
| +_.pad("1", 8, 'bleepblorp', 'both')
|
| +-> "bbbb1bbb";
|
| +```
|
| +
|
| +**lpad** _.lpad(str, length, [padStr])
|
| +
|
| +left-pad a string. Alias for `pad(str, length, padStr, 'left')`
|
| +
|
| +```javascript
|
| +_.lpad("1", 8, '0')
|
| +-> "00000001";
|
| +```
|
| +
|
| +**rpad** _.rpad(str, length, [padStr])
|
| +
|
| +right-pad a string. Alias for `pad(str, length, padStr, 'right')`
|
| +
|
| +```javascript
|
| +_.rpad("1", 8, '0')
|
| +-> "10000000";
|
| +```
|
| +
|
| +**lrpad** _.lrpad(str, length, [padStr])
|
| +
|
| +left/right-pad a string. Alias for `pad(str, length, padStr, 'both')`
|
| +
|
| +```javascript
|
| +_.lrpad("1", 8, '0')
|
| +-> "00001000";
|
| +```
|
| +
|
| +**center** alias for **lrpad**
|
| +
|
| +**ljust** alias for *rpad*
|
| +
|
| +**rjust** alias for *lpad*
|
| +
|
| +**toNumber** _.toNumber(string, [decimals])
|
| +
|
| +Parse string to number. Returns NaN if string can't be parsed to number.
|
| +
|
| +```javascript
|
| +_('2.556').toNumber()
|
| +=> 3
|
| +
|
| +_('2.556').toNumber(1)
|
| +=> 2.6
|
| +```
|
| +
|
| +**strRight** _.strRight(string, pattern)
|
| +
|
| +Searches a string from left to right for a pattern and returns a substring consisting of the characters in the string that are to the right of the pattern or all string if no match found.
|
| +
|
| +```javascript
|
| +_('This_is_a_test_string').strRight('_')
|
| +=> "is_a_test_string";
|
| +```
|
| +
|
| +**strRightBack** _.strRightBack(string, pattern)
|
| +
|
| +Searches a string from right to left for a pattern and returns a substring consisting of the characters in the string that are to the right of the pattern or all string if no match found.
|
| +
|
| +```javascript
|
| +_('This_is_a_test_string').strRightBack('_')
|
| +=> "string";
|
| +```
|
| +
|
| +**strLeft** _.strLeft(string, pattern)
|
| +
|
| +Searches a string from left to right for a pattern and returns a substring consisting of the characters in the string that are to the left of the pattern or all string if no match found.
|
| +
|
| +```javascript
|
| +_('This_is_a_test_string').strLeft('_')
|
| +=> "This";
|
| +```
|
| +
|
| +**strLeftBack** _.strLeftBack(string, pattern)
|
| +
|
| +Searches a string from right to left for a pattern and returns a substring consisting of the characters in the string that are to the left of the pattern or all string if no match found.
|
| +
|
| +```javascript
|
| +_('This_is_a_test_string').strLeftBack('_')
|
| +=> "This_is_a_test";
|
| +```
|
| +
|
| +**stripTags**
|
| +
|
| +Removes all html tags from string.
|
| +
|
| +```javascript
|
| +_('a <a href="#">link</a>').stripTags()
|
| +=> 'a link'
|
| +
|
| +_('a <a href="#">link</a><script>alert("hello world!")</script>').stripTags()
|
| +=> 'a linkalert("hello world!")'
|
| +```
|
| +
|
| +**toSentence** _.toSentence(array, [delimiter, lastDelimiter])
|
| +
|
| +Join an array into a human readable sentence.
|
| +
|
| +```javascript
|
| +_.toSentence(['jQuery', 'Mootools', 'Prototype'])
|
| +=> 'jQuery, Mootools and Prototype';
|
| +
|
| +_.toSentence(['jQuery', 'Mootools', 'Prototype'], ', ', ' unt ')
|
| +=> 'jQuery, Mootools unt Prototype';
|
| +```
|
| +
|
| +**toSentenceSerial** _.toSentenceSerial(array, [delimiter, lastDelimiter])
|
| +
|
| +The same as `toSentence`, but adjusts delimeters to use [Serial comma](http://en.wikipedia.org/wiki/Serial_comma).
|
| +
|
| +```javascript
|
| +_.toSentenceSerial(['jQuery', 'Mootools'])
|
| +=> 'jQuery and Mootools';
|
| +
|
| +_.toSentenceSerial(['jQuery', 'Mootools', 'Prototype'])
|
| +=> 'jQuery, Mootools, and Prototype'
|
| +
|
| +_.toSentenceSerial(['jQuery', 'Mootools', 'Prototype'], ', ', ' unt ');
|
| +=> 'jQuery, Mootools, unt Prototype';
|
| +```
|
| +
|
| +**repeat** _.repeat(string, count, [separator])
|
| +
|
| +Repeats a string count times.
|
| +
|
| +```javascript
|
| +_.repeat("foo", 3)
|
| +=> 'foofoofoo';
|
| +
|
| +_.repeat("foo", 3, "bar")
|
| +=> 'foobarfoobarfoo'
|
| +```
|
| +
|
| +**surround** _.surround(string, wrap)
|
| +
|
| +Surround a string with another string.
|
| +
|
| +```javascript
|
| +_.surround("foo", "ab")
|
| +=> 'abfooab';
|
| +```
|
| +
|
| +**quote** _.quote(string, quoteChar) or _.q(string, quoteChar)
|
| +
|
| +Quotes a string. `quoteChar` defaults to `"`.
|
| +
|
| +```javascript
|
| +_.quote('foo', quoteChar)
|
| +=> '"foo"';
|
| +```
|
| +**unquote** _.unquote(string, quoteChar)
|
| +
|
| +Unquotes a string. `quoteChar` defaults to `"`.
|
| +
|
| +```javascript
|
| +_.unquote('"foo"')
|
| +=> 'foo';
|
| +_.unquote("'foo'", "'")
|
| +=> 'foo';
|
| +```
|
| +
|
| +
|
| +**slugify** _.slugify(string)
|
| +
|
| +Transform text into a URL slug. Replaces whitespaces, accentuated, and special characters with a dash.
|
| +
|
| +```javascript
|
| +_.slugify("Un éléphant à l'orée du bois")
|
| +=> 'un-elephant-a-loree-du-bois';
|
| +```
|
| +
|
| +***Caution: this function is charset dependent***
|
| +
|
| +**naturalCmp** array.sort(_.naturalCmp)
|
| +
|
| +Naturally sort strings like humans would do.
|
| +
|
| +```javascript
|
| +['foo20', 'foo5'].sort(_.naturalCmp)
|
| +=> [ 'foo5', 'foo20' ]
|
| +```
|
| +
|
| +**toBoolean** _.toBoolean(string) or _.toBool(string)
|
| +
|
| +Turn strings that can be commonly considered as booleas to real booleans. Such as "true", "false", "1" and "0". This function is case insensitive.
|
| +
|
| +```javascript
|
| +_.toBoolean("true")
|
| +=> true
|
| +_.toBoolean("FALSE")
|
| +=> false
|
| +_.toBoolean("random")
|
| +=> undefined
|
| +```
|
| +
|
| +It can be customized by giving arrays of truth and falsy value matcher as parameters. Matchers can be also RegExp objects.
|
| +
|
| +```javascript
|
| +_.toBoolean("truthy", ["truthy"], ["falsy"])
|
| +=> true
|
| +_.toBoolean("true only at start", [/^true/])
|
| +=> true
|
| +```
|
| +
|
| +## Roadmap ##
|
| +
|
| +Any suggestions or bug reports are welcome. Just email me or more preferably open an issue.
|
| +
|
| +#### Problems
|
| +
|
| +We lose two things for `include` and `reverse` methods from `_.string`:
|
| +
|
| +* Calls like `_('foobar').include('bar')` aren't available;
|
| +* Chaining isn't available too.
|
| +
|
| +But if you need this functionality you can create aliases for conflict functions which will be convenient for you:
|
| +
|
| +```javascript
|
| +_.mixin({
|
| + includeString: _.str.include,
|
| + reverseString: _.str.reverse
|
| +})
|
| +
|
| +// Now wrapper calls and chaining are available.
|
| +_('foobar').chain().reverseString().includeString('rab').value()
|
| +```
|
| +
|
| +#### Standalone Usage
|
| +
|
| +If you are using Underscore.string without Underscore. You also have `_.string` namespace for it and `_.str` alias
|
| +But of course you can just reassign `_` variable with `_.string`
|
| +
|
| +```javascript
|
| +_ = _.string
|
| +```
|
| +
|
| +## Changelog ##
|
| +
|
| +### 2.4.0 ###
|
| +
|
| +* Move from rake to gulp
|
| +* Add support form classify camelcase strings
|
| +* Fix bower.json
|
| +* [Full changelog](https://github.com/epeli/underscore.string/compare/v2.3.3...2.4.0)
|
| +
|
| +### 2.3.3 ###
|
| +
|
| +* Add `toBoolean`
|
| +* Add `unquote`
|
| +* Add quote char option to `quote`
|
| +* Support dash-separated words in `titleize`
|
| +* [Full changelog](https://github.com/epeli/underscore.string/compare/v2.3.2...2.3.3)
|
| +
|
| +### 2.3.2 ###
|
| +
|
| +* Add `naturalCmp`
|
| +* Bug fix to `camelize`
|
| +* Add ă, ș, ț and ś to `slugify`
|
| +* Doc updates
|
| +* Add support for [component](http://component.io/)
|
| +* [Full changelog](https://github.com/epeli/underscore.string/compare/v2.3.1...v2.3.2)
|
| +
|
| +### 2.3.1 ###
|
| +
|
| +* Bug fixes to `escapeHTML`, `classify`, `substr`
|
| +* Faster `count`
|
| +* Documentation fixes
|
| +* [Full changelog](https://github.com/epeli/underscore.string/compare/v2.3.0...v2.3.1)
|
| +
|
| +### 2.3.0 ###
|
| +
|
| +* Added `numberformat` method
|
| +* Added `levenshtein` method (Levenshtein distance calculation)
|
| +* Added `swapCase` method
|
| +* Changed default behavior of `words` method
|
| +* Added `toSentenceSerial` method
|
| +* Added `surround` and `quote` methods
|
| +
|
| +### 2.2.1 ###
|
| +
|
| +* Same as 2.2.0 (2.2.0rc on npm) to fix some npm drama
|
| +
|
| +### 2.2.0 ###
|
| +
|
| +* Capitalize method behavior changed
|
| +* Various perfomance tweaks
|
| +
|
| +### 2.1.1###
|
| +
|
| +* Fixed words method bug
|
| +* Added classify method
|
| +
|
| +### 2.1.0 ###
|
| +
|
| +* AMD support
|
| +* Added toSentence method
|
| +* Added slugify method
|
| +* Lots of speed optimizations
|
| +
|
| +### 2.0.0 ###
|
| +
|
| +* Added prune, humanize functions
|
| +* Added _.string (_.str) namespace for Underscore.string library
|
| +* Removed includes function
|
| +
|
| +For upgrading to this version you need to mix in Underscore.string library to Underscore object:
|
| +
|
| +```javascript
|
| +_.mixin(_.string.exports());
|
| +```
|
| +
|
| +and all non-conflict Underscore.string functions will be available through Underscore object.
|
| +Also function `includes` has been removed, you should replace this function by `_.str.include`
|
| +or create alias `_.includes = _.str.include` and all your code will work fine.
|
| +
|
| +### 1.1.6 ###
|
| +
|
| +* Fixed reverse and truncate
|
| +* Added isBlank, stripTags, inlude(alias for includes)
|
| +* Added uglifier compression
|
| +
|
| +### 1.1.5 ###
|
| +
|
| +* Added strRight, strRightBack, strLeft, strLeftBack
|
| +
|
| +### 1.1.4 ###
|
| +
|
| +* Added pad, lpad, rpad, lrpad methods and aliases center, ljust, rjust
|
| +* Integration with Underscore 1.1.6
|
| +
|
| +### 1.1.3 ###
|
| +
|
| +* Added methods: underscored, camelize, dasherize
|
| +* Support newer version of npm
|
| +
|
| +### 1.1.2 ###
|
| +
|
| +* Created functions: lines, chars, words functions
|
| +
|
| +### 1.0.2 ###
|
| +
|
| +* Created integration test suite with underscore.js 1.1.4 (now it's absolutely compatible)
|
| +* Removed 'reverse' function, because this function override underscore.js 'reverse'
|
| +
|
| +## Contribute ##
|
| +
|
| +* Fork & pull request. Don't forget about tests.
|
| +* If you planning add some feature please create issue before.
|
| +
|
| +Otherwise changes will be rejected.
|
| +
|
| +## Contributors list ##
|
| +[Can be found here](https://github.com/epeli/underscore.string/graphs/contributors).
|
| +
|
| +
|
| +## Licence ##
|
| +
|
| +The MIT License
|
| +
|
| +Copyright (c) 2011 Esa-Matti Suuronen esa-matti@suuronen.org
|
| +
|
| +Permission is hereby granted, free of charge, to any person obtaining a copy
|
| +of this software and associated documentation files (the "Software"), to deal
|
| +in the Software without restriction, including without limitation the rights
|
| +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| +copies of the Software, and to permit persons to whom the Software is
|
| +furnished to do so, subject to the following conditions:
|
| +
|
| +The above copyright notice and this permission notice shall be included in
|
| +all copies or substantial portions of the Software.
|
| +
|
| +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
| +THE SOFTWARE.
|
|
|