introdução do mout js

<b> MOUT </b> ou utilitários modulares é uma coleção de utilitários JavaScript modulares. Ele fornece muitos métodos auxiliares semelhantes aos encontrados nas bibliotecas padrão de outras linguagens. Considere-o como uma biblioteca padrão de JavaScript para vários navegadores.

<b> Metas de moutjs </b>

aumentar a reutilização de código;
Seja claro (o código deve ser limpo / legível);
Seja fácil de depurar;
Seja fácil de manter;
Siga as melhores práticas;
Siga os padrões quando possível;
Não converta JavaScript em outra linguagem!
Ser compatível com outros frameworks;
Seja modular;
Ter testes de unidade para todos os módulos;
Trabalhe em vários ambientes (IE7 +, navegadores modernos, node.js);

Para obter a documentação completa, visite: http://moutjs.com/

<b> Chamando um método ou módulo </b>

No mout, você pode exigir apenas um único método, um pacote inteiro ou a biblioteca inteira:

// a single method
var append = require('mout/array/append');
var foo = ['a', 'b'], bar = ['b', 'd'];
append
(foo, bar); // ['a', 'b', 'b', 'd']

// a single package
var stringUtils = require('mout/string');
stringUtils
.camelCase('Foo Bar'); // "fooBar"

// the whole lib
var mout = require('mout');
console
.log( mout.math.clamp(17, 0, 10) ); // 10

mout contém os seguintes pacotes:
<i> array, collection, date, function, lang, math, number, object, queryString, random, string e time. </i>

Aqui estão alguns dos métodos úteis nesses pacotes. Esses métodos são alguns dos meus favoritos, e não uma lista extensa. Para a duplicação completa, visite: http://moutjs.com/docs/

<b> matriz </b>

anexar (arr1, arr2): Array

var foo = ['a', 'b'], bar = ['b', 'd'];
append
(foo, bar); // ['a', 'b', 'b', 'd']

combinar (arr1, arr2): Array

var foo = ['a', 'b'], bar = ['b', 'd'];
combine
(foo, bar); // ['a', 'b', 'd']

contém (arr, valor): Booleano

var arr = [1, 2, 3];
contains
(arr, 2); // true

cada (arr, retorno de chamada, [thisObj]): Matriz #

var items = [1, 'foo', 'bar'];
every
(items, isString); // false
every
(items, function(val, key, arr){
return val != null;
}); // true

filtro (arr, callback, [thisObj]): Array

var nums = [1, 2, 3, 4, 5, 6];
var oddNumbers = filter(nums, function(val, key, arr){
return (val % 2) !== 0;
});
// > [1, 3, 5]

find (arr, callback, [thisObj]): *

vavar users = [
{name:'steven', surname:'martin'},
{name:'james', surname:'martin'}
];
// first item that matches name steven
find
(arr, {name:'steven'}); // {name:'steven', surnname:'martin'}

forEach (arr, callback, [thisObj]): void

var items = ['foo', 'bar'];
forEach
(items, function(val, key, arr){
console
.log(key +' : '+ val);
});

inserir (arr, … itens): Número

var arr = ['a', 'b'];
insert
(arr, 'a'); // 2 : ['a', 'b']

junção (arr, [separador]): String

join(['a', 'b', 'c']); // 'abc'

map (arr, callback, [thisObj]]): Array

var src = ['lorem', 'ipsum', 'foo', 'amet'];
var lengths = map(src, 'length'); // [5, 5, 3, 4]

max (arr, [iterador], [thisObj]): *

max([10, 2, 7]); // 10

min (arr, [iterador], [thisObj]): *

min([10, 2, 7]); // 2

pick (arr, [nItems]): *

var arr = [1, 2, 3, 4, 5, 6];
var item1 = pick(arr); // 4, it picks a random value
var item2 = pick(arr); // 1, it picks a random value

arrancar (arr, propName): Array

var users = [{name : 'John', age: 21}, {name: 'Jane', age : 27}];
var names = pluck(users, 'name'); // ["John", "Jane"]

remover (arr, item): void

var foo = [1, 2, 3, 4];
remove(foo, 2); // [1, 3, 4]

removeAll (arr, item): void

var foo = [1, 2, 3, 4, 2, 2];
removeAll
(foo, 2); // [1, 3, 4];

shuffle (arr): Array

var arr = ['a', 'b', 'c', 'd', 'e'];
shuffle
(arr); // ['b', 'd', 'e', 'c', 'a']

fatia (arr, [início], [fim]): Matriz

slice([1, 2, 3, 4], 1, 2); // [2, 3]

some (arr, callback, [thisObj]): Array

var items = [1, 'foo', 'bar'];
some
(items, isString); // true

sort (arr, [compareFn]): Array

sort([187, 23, 47, 987, 12, 59]); // [12, 23, 47, 59, 187, 987]
sort
(['a', 'z', 'c', 'b']); // ['a', 'b', 'c', 'z']

união (… arrs): Array

var a = [1, 2], b = [3, 4];  // note: removes duplicates
union(a, b); // [1, 2, 3, 4]

<b> data </b>

dayOfTheYear (data): Número

dayOfTheYear(new Date(2013, 0, 1)); // 1

diff (data1, data2, [nome da unidade]): Número #

var d1 = new Date(2012, 4, 5);
var d2 = new Date(2013, 4, 8);
diff
(d1, d2); // 31795200000
diff
(d1, d2, 'hour'); // 8832
diff
(d1, d2, 'week'); // 52.57142857142857

isSame (date1, date2 [, period]): Boolean #

var date1 = new Date(2013, 1, 3);
var date2 = new Date(2013, 2, 9);
isSame
(date1, date2); // false
isSame
(date1, date2, 'day'); // false
isSame
(date1, date2, 'year'); // true

parseIso (str): Número #

parseIso('2000-01-02T20:10+04:00') // 946829400000

trimestre (data): Número

quarter(new Date(2013, 1, 19)); // 1
quarter
(new Date(2013, 4, 12)); // 2

strftime (data, formato, [l10n]): String

var date = new Date(2013, 3, 8, 9, 2, 4);
strftime
(date, '%Y-%m-%d'); // "2013-04-08" check docs for format

totalDaysInMonth (fullYear, monthIndex): Number

totalDaysInMonth(2008, 1); // 29 (leap year)
totalDaysInMonth
(2009, 1); // 28

totalDaysInYear (fullYear): Número

totalDaysInYear(2009); // 365

weekOfTheYear (date, [firstDayOfWeek]): Número

weekOfTheYear( new Date(2013,0,9) ); // 1

<b> função </b>

awaitDelay (fn, delay): Função

var callback = after(onLoaded, 1000);
loadImages
(callback);
function onLoaded(){
console
.log('loaded');
}

func (nome): Função

// will call the method `getName()` for each `user`
var names = map(users, func('getName'));

<b> objeto </b>

contém (obj, valor): Booleano

var obj = {
a
: 1,
c
: 2
};
contains
(obj, 2); // true

todo (obj, retorno de chamada, [thisObj]): Booleano

var obj = {
a
: 1,
d
: 'string'
};

every
(obj, isNumber); // false

find (obj, callback, [thisObj])

var obj = {
a
: 'foo',
b
: 12
};

find
(obj, isNumber); // 12

forIn (obj, callback [, thisObj])

function Foo(){
this.foo = 1;
this.bar = 2;
}

var obj = new Foo();
var result = 0, keys = [];

forIn
(obj, function(val, key, o){
result
+= val;
});

console
.log(result); // 3

funções (obj): Array

var obj = {
foo
: function(){},
bar
: 'baz'
};
functions
(obj); // ['foo']

get (obj, propName): *

var lorem = {
ipsum
: {
dolor
: {
sit
: 'amet'
}
}
};

get(lorem, 'ipsum.dolor.sit'); // "amet"
get(lorem, 'foo.bar'); // undefined

has (obj, propName): Booleano

var animal = {
cat
: {
claws
: true
}
};

has
(animal, 'cat'); // true

chaves (obj): Array

var obj = {
foo
: 1,
bar
: 2,
lorem
: 3
};
keys
(obj); // ['foo', 'bar', 'lorem']

pick (obj, … keys): Object

var user = {
firstName
: 'John',
lastName
: 'Doe',
gender
: 'male'
};
// single or multiple paramaters
pick
(user, 'firstName', 'lastName'); // {firstName:"John", lastName: "Doe"}

arrancar (obj, propName): Objeto

var users = {
first
: {
name
: 'John',
age
: 21
},
second
: {
name
: 'Mary',
age
: 25
}
};

pluck
(users, 'age'); // {first: 21, second: 25} );

valores (obj): Array

var obj = {
foo
: 1,
bar
: 2,
lorem
: 3
};
values
(obj); // [1, 2, 3]

<b> string </b>

camelCase (str): String

camelCase('lorem-ipsum-dolor'); // "loremIpsumDolor"

contém (str, substring, [fromIndex]): Booleano

contains('lorem', 'or');  // true

crop (str, maxChars, [append]): String

crop('lorem ipsum dolor', 10);      // "lorem..."

endsWith (str, sufixo): Booleano

endsWith('lorem ipsum', 'lorem'); // false

escapeHtml (str): String

escapeHtml('lorem & "ipsum"'); // "lorem &amp; &quot;ipsum&quot;"

unescapeHtml (str): String

unescapeHtml('lorem &amp; &quot;ipsum&quot;'); // 'lorem & "ipsum"'

escapeUnicode (str [, shouldEscapePrintable]): String

escapeUnicode('føo bår'); // > "fu00f8o bu00e5r"

unescapeUnicode (str): String

unescapeUnicode('\u0066\u00f8\u006f\u0020\u0062\u00e5\u0072'); // > 'føo bår'

insert (str, index, parcial): String

insert('foo', 100, 'bar'); // "foobar"

lpad (str, minLength [, char]): String
rpad (str, minLength [, char]): String

lpad('a', 5);        // "    a"
lpad
('a', 5, '-'); // "----a"

ltrim (str, [chars]): String
rtrim (str, [chars]): String

ltrim('--lorem ipsum--', ['-']); // "lorem ipsum--"

makePath (… args): String

makePath('foo///bar/'); // "foo/bar/"

ownCase (str): String

properCase('loRem iPSum'); // "Lorem Ipsum"

removeNonASCII (str): String

removeNonASCII('äÄçÇéÉêlorem-ipsumöÖÐþúÚ'); // "lorem-ipsum"

removeNonWord (str): String

removeNonWord('lorem ~!@#><., ipsum'); // "lorem - ipsum"

repetir (str, n): String

repeat('a', 3);  // "aaa"

stripHtmlTags (str): String

stripHtmlTags('<p><em>lorem</em> <strong>ipsum</strong></p>'); // "lorem ipsum"

startWith (str, prefix): Boolean

startsWith('lorem ipsum', 'lorem'); // true

slugify (str [, delimeter]): String

var str = 'loremIpsum dolor spéçïãl chârs';
slugify
(str, '_'); // "loremipsum_dolor_special_chars"

trim (str, [chars]): String

trim('   lorem ipsum   '); // "lorem ipsum"

truncate (str, maxChars, [append], [onlyFullWords]): String

truncate('lorem ipsum dolor', 11);             // "lorem ip..."

<b> queryString </b>

contém (url, paramName): Boolen

var url = 'example.com/?lorem=ipsum';
contains
(url, 'lorem'); // true

decodificar (queryStr [, shouldTypecast]): Objeto

var query = '?foo=bar&lorem=123';
decode
(query); // {foo: "bar", lorem: 123}

encode (obj): String

encode({foo: