lodash-rails 1.2.1 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/lodash/rails/version.rb +1 -1
- data/vendor/assets/javascripts/lodash.compat.js +797 -431
- data/vendor/assets/javascripts/lodash.compat.min.js +46 -42
- data/vendor/assets/javascripts/lodash.js +661 -370
- data/vendor/assets/javascripts/lodash.min.js +43 -39
- data/vendor/assets/javascripts/lodash.underscore.js +235 -149
- data/vendor/assets/javascripts/lodash.underscore.min.js +30 -30
- metadata +2 -2
@@ -1,47 +1,51 @@
|
|
1
1
|
/**
|
2
2
|
* @license
|
3
|
-
* Lo-Dash 1.
|
3
|
+
* Lo-Dash 1.3.1 (Custom Build) lodash.com/license
|
4
4
|
* Build: `lodash -o ./dist/lodash.compat.js`
|
5
5
|
* Underscore.js 1.4.4 underscorejs.org/LICENSE
|
6
6
|
*/
|
7
|
-
|
8
|
-
return a
|
9
|
-
|
10
|
-
}function
|
11
|
-
var
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
}),
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
}function
|
23
|
-
|
24
|
-
var
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
return t
|
31
|
-
|
32
|
-
|
33
|
-
for(var
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
}
|
40
|
-
|
41
|
-
},
|
42
|
-
|
43
|
-
}),
|
44
|
-
},
|
45
|
-
return
|
46
|
-
|
47
|
-
|
7
|
+
;!function(n){function t(n,t,r){r=(r||0)-1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function r(n,r){var e=typeof r;if(n=n.k,"boolean"==e||r==d)return n[r];"number"!=e&&"string"!=e&&(e="object");var u="number"==e?r:x+r;return n=n[e]||(n[e]={}),"object"==e?n[u]&&-1<t(n[u],r)?0:-1:n[u]?0:-1}function e(n){var t=this.k,r=typeof n;if("boolean"==r||n==d)t[n]=y;else{"number"!=r&&"string"!=r&&(r="object");var e="number"==r?n:x+n,u=t[r]||(t[r]={});"object"==r?(u[e]||(u[e]=[])).push(n)==this.b.length&&(t[r]=b):u[e]=y
|
8
|
+
}}function u(n){return n.charCodeAt(0)}function a(n,t){var r=n.m,e=t.m;if(n=n.l,t=t.l,n!==t){if(n>t||typeof n=="undefined")return 1;if(n<t||typeof t=="undefined")return-1}return r<e?-1:1}function o(n){var t=-1,r=n.length,u=c();u["false"]=u["null"]=u["true"]=u.undefined=b;var a=c();for(a.b=n,a.k=u,a.push=e;++t<r;)a.push(n[t]);return u.object===false?(g(a),d):a}function i(n){return"\\"+tt[n]}function l(){return _.pop()||[]}function c(){return C.pop()||{a:"",b:d,c:"",k:d,l:d,"false":b,d:"",m:0,e:"",leading:b,f:"",maxWait:0,"null":b,number:d,object:d,push:d,g:d,string:d,h:"",trailing:b,"true":b,undefined:b,i:b,j:b,n:d}
|
9
|
+
}function f(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}function p(){}function s(n){n.length=0,_.length<E&&_.push(n)}function g(n){var t=n.k;t&&g(t),n.b=n.k=n.l=n.object=n.number=n.string=n.n=d,C.length<E&&C.push(n)}function v(n,t,r){t||(t=0),typeof r=="undefined"&&(r=n?n.length:0);var e=-1;r=r-t||0;for(var u=Array(0>r?0:r);++e<r;)u[e]=n[t+e];return u}function h(e){function _(n){return n&&typeof n=="object"&&!qr(n)&&sr.call(n,"__wrapped__")?n:new C(n)}function C(n){this.__wrapped__=n
|
10
|
+
}function E(n,t,r,e){function u(){var e=arguments,c=o?this:t;return a||(n=t[i]),r.length&&(e=e.length?(e=Sr.call(e),l?e.concat(r):r.concat(e)):r),this instanceof u?(c=rt(n.prototype),e=n.apply(c,e),mt(e)?e:c):n.apply(c,e)}var a=ht(n),o=!r,i=t;if(o){var l=e;r=t}else if(!a){if(!e)throw new Zt;t=n}return u}function tt(){var n=c();n.g=L,n.b=n.c=n.f=n.h="",n.e="r",n.i=y,n.j=!!Rr;for(var t,r=0;t=arguments[r];r++)for(var e in t)n[e]=t[e];r=n.a,n.d=/^[^,]+/.exec(r)[0],t=Mt,r="return function("+r+"){",e="var m,r="+n.d+",C="+n.e+";if(!r)return C;"+n.h+";",n.b?(e+="var s=r.length;m=-1;if("+n.b+"){",Pr.unindexedChars&&(e+="if(q(r)){r=r.split('')}"),e+="while(++m<s){"+n.f+";}}else{"):Pr.nonEnumArgs&&(e+="var s=r.length;m=-1;if(s&&n(r)){while(++m<s){m+='';"+n.f+";}}else{"),Pr.enumPrototypes&&(e+="var E=typeof r=='function';"),Pr.enumErrorProps&&(e+="var D=r===j||r instanceof Error;");
|
11
|
+
var u=[];if(Pr.enumPrototypes&&u.push('!(E&&m=="prototype")'),Pr.enumErrorProps&&u.push('!(D&&(m=="message"||m=="name"))'),n.i&&n.j)e+="var A=-1,B=z[typeof r]&&t(r),s=B?B.length:0;while(++A<s){m=B[A];",u.length&&(e+="if("+u.join("&&")+"){"),e+=n.f+";",u.length&&(e+="}"),e+="}";else if(e+="for(m in r){",n.i&&u.push("l.call(r, m)"),u.length&&(e+="if("+u.join("&&")+"){"),e+=n.f+";",u.length&&(e+="}"),e+="}",Pr.nonEnumShadows){for(e+="if(r!==y){var h=r.constructor,p=r===(h&&h.prototype),e=r===H?G:r===j?i:J.call(r),v=w[e];",k=0;7>k;k++)e+="m='"+n.g[k]+"';if((!(p&&v[m])&&l.call(r,m))",n.i||(e+="||(!v[m]&&r[m]!==y[m])"),e+="){"+n.f+"}";
|
12
|
+
e+="}"}return(n.b||Pr.nonEnumArgs)&&(e+="}"),e+=n.c+";return C",t=t("i,j,l,n,o,q,t,u,y,z,w,G,H,J",r+e+"}"),g(n),t(M,tr,sr,ft,qr,dt,Rr,_,rr,nt,Nr,Y,er,yr)}function rt(n){return mt(n)?br(n):{}}function ut(n){return Wr[n]}function ot(){var n=(n=_.indexOf)===Pt?t:n;return n}function it(n){return function(t,r,e,u){return typeof r!="boolean"&&r!=d&&(u=e,e=u&&u[r]===t?m:r,r=b),e!=d&&(e=_.createCallback(e,u)),n(t,r,e,u)}}function lt(n){var t,r;return!n||yr.call(n)!=Q||(t=n.constructor,ht(t)&&!(t instanceof t))||!Pr.argsClass&&ft(n)||!Pr.nodeClass&&f(n)?b:Pr.ownLast?(Jr(n,function(n,t,e){return r=sr.call(e,t),b
|
13
|
+
}),r!==false):(Jr(n,function(n,t){r=t}),r===m||sr.call(n,r))}function ct(n){return Lr[n]}function ft(n){return yr.call(n)==G}function pt(n,t,r,e,u,a){var o=n;if(typeof t!="boolean"&&t!=d&&(e=r,r=t,t=b),typeof r=="function"){if(r=typeof e=="undefined"?r:_.createCallback(r,e,1),o=r(o),typeof o!="undefined")return o;o=n}if(e=mt(o)){var i=yr.call(o);if(!Z[i]||!Pr.nodeClass&&f(o))return o;var c=qr(o)}if(!e||!t)return e?c?v(o):Gr({},o):o;switch(e=Br[i],i){case J:case K:return new e(+o);case V:case Y:return new e(o);
|
14
|
+
case X:return e(o.source,P.exec(o))}i=!u,u||(u=l()),a||(a=l());for(var p=u.length;p--;)if(u[p]==n)return a[p];return o=c?e(o.length):{},c&&(sr.call(n,"index")&&(o.index=n.index),sr.call(n,"input")&&(o.input=n.input)),u.push(n),a.push(o),(c?Tr:Kr)(n,function(n,e){o[e]=pt(n,t,r,m,u,a)}),i&&(s(u),s(a)),o}function st(n){var t=[];return Jr(n,function(n,r){ht(n)&&t.push(r)}),t.sort()}function gt(n){for(var t=-1,r=Rr(n),e=r.length,u={};++t<e;){var a=r[t];u[n[a]]=a}return u}function vt(n,t,r,e,u,a){var o=r===w;
|
15
|
+
if(typeof r=="function"&&!o){r=_.createCallback(r,e,2);var i=r(n,t);if(typeof i!="undefined")return!!i}if(n===t)return 0!==n||1/n==1/t;var c=typeof n,p=typeof t;if(n===n&&(!n||"function"!=c&&"object"!=c)&&(!t||"function"!=p&&"object"!=p))return b;if(n==d||t==d)return n===t;if(p=yr.call(n),c=yr.call(t),p==G&&(p=Q),c==G&&(c=Q),p!=c)return b;switch(p){case J:case K:return+n==+t;case V:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case X:case Y:return n==Yt(t)}if(c=p==H,!c){if(sr.call(n,"__wrapped__")||sr.call(t,"__wrapped__"))return vt(n.__wrapped__||n,t.__wrapped__||t,r,e,u,a);
|
16
|
+
if(p!=Q||!Pr.nodeClass&&(f(n)||f(t)))return b;var p=!Pr.argsObject&&ft(n)?Qt:n.constructor,g=!Pr.argsObject&&ft(t)?Qt:t.constructor;if(p!=g&&(!ht(p)||!(p instanceof p&&ht(g)&&g instanceof g)))return b}for(g=!u,u||(u=l()),a||(a=l()),p=u.length;p--;)if(u[p]==n)return a[p]==t;var v=0,i=y;if(u.push(n),a.push(t),c){if(p=n.length,v=t.length,i=v==n.length,!i&&!o)return i;for(;v--;)if(c=p,g=t[v],o)for(;c--&&!(i=vt(n[c],g,r,e,u,a)););else if(!(i=vt(n[v],g,r,e,u,a)))break;return i}return Jr(t,function(t,o,l){return sr.call(l,o)?(v++,i=sr.call(n,o)&&vt(n[o],t,r,e,u,a)):void 0
|
17
|
+
}),i&&!o&&Jr(n,function(n,t,r){return sr.call(r,t)?i=-1<--v:void 0}),g&&(s(u),s(a)),i}function ht(n){return typeof n=="function"}function mt(n){return!(!n||!nt[typeof n])}function yt(n){return typeof n=="number"||yr.call(n)==V}function dt(n){return typeof n=="string"||yr.call(n)==Y}function bt(n,t,r){var e=arguments,u=0,a=2;if(!mt(n))return n;if(r===w)var o=e[3],i=e[4],c=e[5];else{var f=y,i=l(),c=l();typeof r!="number"&&(a=e.length),3<a&&"function"==typeof e[a-2]?o=_.createCallback(e[--a-1],e[a--],2):2<a&&"function"==typeof e[a-1]&&(o=e[--a])
|
18
|
+
}for(;++u<a;)(qr(e[u])?xt:Kr)(e[u],function(t,r){var e,u,a=t,l=n[r];if(t&&((u=qr(t))||Mr(t))){for(a=i.length;a--;)if(e=i[a]==t){l=c[a];break}if(!e){var f;o&&(a=o(l,t),f=typeof a!="undefined")&&(l=a),f||(l=u?qr(l)?l:[]:Mr(l)?l:{}),i.push(t),c.push(l),f||(l=bt(l,t,w,o,i,c))}}else o&&(a=o(l,t),typeof a=="undefined"&&(a=t)),typeof a!="undefined"&&(l=a);n[r]=l});return f&&(s(i),s(c)),n}function _t(n){for(var t=-1,r=Rr(n),e=r.length,u=Ht(e);++t<e;)u[t]=n[r[t]];return u}function Ct(n,t,r){var e=-1,u=ot(),a=n?n.length:0,o=b;
|
19
|
+
return r=(0>r?kr(0,a+r):r)||0,a&&typeof a=="number"?o=-1<(dt(n)?n.indexOf(t,r):u(n,t,r)):Tr(n,function(n){return++e<r?void 0:!(o=n===t)}),o}function jt(n,t,r){var e=y;if(t=_.createCallback(t,r),qr(n)){r=-1;for(var u=n.length;++r<u&&(e=!!t(n[r],r,n)););}else Tr(n,function(n,r,u){return e=!!t(n,r,u)});return e}function wt(n,t,r){var e=[];if(t=_.createCallback(t,r),qr(n)){r=-1;for(var u=n.length;++r<u;){var a=n[r];t(a,r,n)&&e.push(a)}}else Tr(n,function(n,r,u){t(n,r,u)&&e.push(n)});return e}function kt(n,t,r){if(t=_.createCallback(t,r),!qr(n)){var e;
|
20
|
+
return Tr(n,function(n,r,u){return t(n,r,u)?(e=n,b):void 0}),e}r=-1;for(var u=n.length;++r<u;){var a=n[r];if(t(a,r,n))return a}}function xt(n,t,r){if(t&&typeof r=="undefined"&&qr(n)){r=-1;for(var e=n.length;++r<e&&t(n[r],r,n)!==false;);}else Tr(n,t,r);return n}function Ot(n,t,r){var e=-1,u=n?n.length:0,a=Ht(typeof u=="number"?u:0);if(t=_.createCallback(t,r),qr(n))for(;++e<u;)a[e]=t(n[e],e,n);else Tr(n,function(n,r,u){a[++e]=t(n,r,u)});return a}function Et(n,t,r){var e=-1/0,a=e;if(!t&&qr(n)){r=-1;for(var o=n.length;++r<o;){var i=n[r];
|
21
|
+
i>a&&(a=i)}}else t=!t&&dt(n)?u:_.createCallback(t,r),Tr(n,function(n,r,u){r=t(n,r,u),r>e&&(e=r,a=n)});return a}function St(n,t,r,e){var u=3>arguments.length;if(t=_.createCallback(t,e,4),qr(n)){var a=-1,o=n.length;for(u&&(r=n[++a]);++a<o;)r=t(r,n[a],a,n)}else Tr(n,function(n,e,a){r=u?(u=b,n):t(r,n,e,a)});return r}function At(n,t,r,e){var u=n,a=n?n.length:0,o=3>arguments.length;if(typeof a!="number")var i=Rr(n),a=i.length;else Pr.unindexedChars&&dt(n)&&(u=n.split(""));return t=_.createCallback(t,e,4),xt(n,function(n,e,l){e=i?i[--a]:--a,r=o?(o=b,u[e]):t(r,u[e],e,l)
|
22
|
+
}),r}function It(n,t,r){var e;if(t=_.createCallback(t,r),qr(n)){r=-1;for(var u=n.length;++r<u&&!(e=t(n[r],r,n)););}else Tr(n,function(n,r,u){return!(e=t(n,r,u))});return!!e}function Bt(n){var e=-1,u=ot(),a=n?n.length:0,i=lr.apply(nr,Sr.call(arguments,1)),l=[],c=a>=O&&u===t;if(c){var f=o(i);f?(u=r,i=f):c=b}for(;++e<a;)f=n[e],0>u(i,f)&&l.push(f);return c&&g(i),l}function Nt(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=d){var a=-1;for(t=_.createCallback(t,r);++a<u&&t(n[a],a,n);)e++}else if(e=t,e==d||r)return n[0];
|
23
|
+
return v(n,0,xr(kr(0,e),u))}}function Pt(n,r,e){if(typeof e=="number"){var u=n?n.length:0;e=0>e?kr(0,u+e):e||0}else if(e)return e=Ft(n,r),n[e]===r?e:-1;return n?t(n,r,e):-1}function zt(n,t,r){if(typeof t!="number"&&t!=d){var e=0,u=-1,a=n?n.length:0;for(t=_.createCallback(t,r);++u<a&&t(n[u],u,n);)e++}else e=t==d||r?1:kr(0,t);return v(n,e)}function Ft(n,t,r,e){var u=0,a=n?n.length:u;for(r=r?_.createCallback(r,e,1):Wt,t=r(t);u<a;)e=u+a>>>1,r(n[e])<t?u=e+1:a=e;return u}function $t(n){for(var t=-1,r=n?Et(Ur(n,"length")):0,e=Ht(0>r?0:r);++t<r;)e[t]=Ur(n,t);
|
24
|
+
return e}function qt(n,t){for(var r=-1,e=n?n.length:0,u={};++r<e;){var a=n[r];t?u[a]=t[r]:u[a[0]]=a[1]}return u}function Dt(n,t){return Pr.fastBind||dr&&2<arguments.length?dr.call.apply(dr,arguments):E(n,t,Sr.call(arguments,2))}function Rt(n,t,r){function e(){ir(s),ir(g),c=0,s=g=d}function u(){var t=v&&(!h||1<c);e(),t&&(p!==false&&(f=new Kt),i=n.apply(l,o))}function a(){e(),(v||p!==t)&&(f=new Kt,i=n.apply(l,o))}var o,i,l,c=0,f=0,p=b,s=d,g=d,v=y;if(t=kr(0,t||0),r===y)var h=y,v=b;else mt(r)&&(h=r.leading,p="maxWait"in r&&kr(t,r.maxWait||0),v="trailing"in r?r.trailing:v);
|
25
|
+
return function(){if(o=arguments,l=this,c++,ir(g),p===false)h&&2>c&&(i=n.apply(l,o));else{var r=new Kt;!s&&!h&&(f=r);var e=p-(r-f);0<e?s||(s=mr(a,e)):(ir(s),s=d,f=r,i=n.apply(l,o))}return t!==p&&(g=mr(u,t)),i}}function Tt(n){var t=Sr.call(arguments,1);return mr(function(){n.apply(m,t)},1)}function Wt(n){return n}function Lt(n){xt(st(n),function(t){var r=_[t]=n[t];_.prototype[t]=function(){var n=this.__wrapped__,t=[n];return gr.apply(t,arguments),t=r.apply(_,t),n&&typeof n=="object"&&n===t?this:new C(t)
|
26
|
+
}})}function Gt(){return this.__wrapped__}e=e?at.defaults(n.Object(),e,at.pick(n,W)):n;var Ht=e.Array,Jt=e.Boolean,Kt=e.Date,Mt=e.Function,Ut=e.Math,Vt=e.Number,Qt=e.Object,Xt=e.RegExp,Yt=e.String,Zt=e.TypeError,nr=[],tr=e.Error.prototype,rr=Qt.prototype,er=Yt.prototype,ur=e._,ar=Xt("^"+Yt(rr.valueOf).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),or=Ut.ceil,ir=e.clearTimeout,lr=nr.concat,cr=Ut.floor,fr=Mt.prototype.toString,pr=ar.test(pr=Qt.getPrototypeOf)&&pr,sr=rr.hasOwnProperty,gr=nr.push,vr=rr.propertyIsEnumerable,hr=e.setImmediate,mr=e.setTimeout,yr=rr.toString,dr=ar.test(dr=yr.bind)&&dr,br=ar.test(br=Qt.create)&&br,_r=ar.test(_r=Ht.isArray)&&_r,Cr=e.isFinite,jr=e.isNaN,wr=ar.test(wr=Qt.keys)&&wr,kr=Ut.max,xr=Ut.min,Or=e.parseInt,Er=Ut.random,Sr=nr.slice,Ar=ar.test(e.attachEvent),Ir=dr&&!/\n|true/.test(dr+Ar),Br={};
|
27
|
+
Br[H]=Ht,Br[J]=Jt,Br[K]=Kt,Br[U]=Mt,Br[Q]=Qt,Br[V]=Vt,Br[X]=Xt,Br[Y]=Yt;var Nr={};Nr[H]=Nr[K]=Nr[V]={constructor:y,toLocaleString:y,toString:y,valueOf:y},Nr[J]=Nr[Y]={constructor:y,toString:y,valueOf:y},Nr[M]=Nr[U]=Nr[X]={constructor:y,toString:y},Nr[Q]={constructor:y},function(){for(var n=L.length;n--;){var t,r=L[n];for(t in Nr)sr.call(Nr,t)&&!sr.call(Nr[t],r)&&(Nr[t][r]=b)}}(),C.prototype=_.prototype;var Pr=_.support={};!function(){function n(){this.x=1}var t={0:1,length:1},r=[];n.prototype={valueOf:1};
|
28
|
+
for(var e in new n)r.push(e);for(e in arguments);Pr.argsObject=arguments.constructor==Qt&&!(arguments instanceof Ht),Pr.argsClass=ft(arguments),Pr.enumErrorProps=vr.call(tr,"message")||vr.call(tr,"name"),Pr.enumPrototypes=vr.call(n,"prototype"),Pr.fastBind=dr&&!Ir,Pr.ownLast="x"!=r[0],Pr.nonEnumArgs=0!=e,Pr.nonEnumShadows=!/valueOf/.test(r),Pr.spliceObjects=(nr.splice.call(t,0,1),!t[0]),Pr.unindexedChars="xx"!="x"[0]+Qt("x")[0];try{Pr.nodeClass=!(yr.call(document)==Q&&!({toString:0}+""))}catch(u){Pr.nodeClass=y
|
29
|
+
}}(1),_.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:z,variable:"",imports:{_:_}};var zr={a:"x,F,k",h:"var a=arguments,b=0,c=typeof k=='number'?2:a.length;while(++b<c){r=a[b];if(r&&z[typeof r]){",f:"if(typeof C[m]=='undefined')C[m]=r[m]",c:"}}"},Fr={a:"f,d,I",h:"d=d&&typeof I=='undefined'?d:u.createCallback(d,I)",b:"typeof s=='number'",f:"if(d(r[m],m,f)===false)return C"},$r={h:"if(!z[typeof r])return C;"+Fr.h,b:b};br||(rt=function(n){if(mt(n)){p.prototype=n;
|
30
|
+
var t=new p;p.prototype=d}return t||{}}),Pr.argsClass||(ft=function(n){return n?sr.call(n,"callee"):b});var qr=_r||function(n){return n?typeof n=="object"&&yr.call(n)==H:b},Dr=tt({a:"x",e:"[]",h:"if(!(z[typeof x]))return C",f:"C.push(m)"}),Rr=wr?function(n){return mt(n)?Pr.enumPrototypes&&typeof n=="function"||Pr.nonEnumArgs&&n.length&&ft(n)?Dr(n):wr(n):[]}:Dr,Tr=tt(Fr),Wr={"&":"&","<":"<",">":">",'"':""","'":"'"},Lr=gt(Wr),Gr=tt(zr,{h:zr.h.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=u.createCallback(a[--c-1],a[c--],2)}else if(c>2&&typeof a[c-1]=='function'){d=a[--c]}"),f:"C[m]=d?d(C[m],r[m]):r[m]"}),Hr=tt(zr),Jr=tt(Fr,$r,{i:b}),Kr=tt(Fr,$r);
|
31
|
+
ht(/x/)&&(ht=function(n){return typeof n=="function"&&yr.call(n)==U});var Mr=pr?function(n){if(!n||yr.call(n)!=Q||!Pr.argsClass&&ft(n))return b;var t=n.valueOf,r=typeof t=="function"&&(r=pr(t))&&pr(r);return r?n==r||pr(n)==r:lt(n)}:lt,Ur=Ot,Vr=it(function Yr(n,t,r){for(var e=-1,u=n?n.length:0,a=[];++e<u;){var o=n[e];r&&(o=r(o,e,n)),qr(o)?gr.apply(a,t?o:Yr(o)):a.push(o)}return a}),Qr=it(function(n,e,u){var a=-1,i=ot(),c=n?n.length:0,f=[],p=!e&&c>=O&&i===t,v=u||p?l():f;if(p){var h=o(v);h?(i=r,v=h):(p=b,v=u?v:(s(v),f))
|
32
|
+
}for(;++a<c;){var h=n[a],m=u?u(h,a,n):h;(e?!a||v[v.length-1]!==m:0>i(v,m))&&((u||p)&&v.push(m),f.push(h))}return p?(s(v.b),g(v)):u&&s(v),f});Ir&&et&&typeof hr=="function"&&(Tt=Dt(hr,e));var Xr=8==Or($+"08")?Or:function(n,t){return Or(dt(n)?n.replace(q,""):n,t||0)};return _.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},_.assign=Gr,_.at=function(n){var t=-1,r=lr.apply(nr,Sr.call(arguments,1)),e=r.length,u=Ht(e);for(Pr.unindexedChars&&dt(n)&&(n=n.split(""));++t<e;)u[t]=n[r[t]];
|
33
|
+
return u},_.bind=Dt,_.bindAll=function(n){for(var t=1<arguments.length?lr.apply(nr,Sr.call(arguments,1)):st(n),r=-1,e=t.length;++r<e;){var u=t[r];n[u]=Dt(n[u],n)}return n},_.bindKey=function(n,t){return E(n,t,Sr.call(arguments,2),w)},_.compact=function(n){for(var t=-1,r=n?n.length:0,e=[];++t<r;){var u=n[t];u&&e.push(u)}return e},_.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length;r--;)t=[n[r].apply(this,t)];return t[0]}},_.countBy=function(n,t,r){var e={};return t=_.createCallback(t,r),xt(n,function(n,r,u){r=Yt(t(n,r,u)),sr.call(e,r)?e[r]++:e[r]=1
|
34
|
+
}),e},_.createCallback=function(n,t,r){if(n==d)return Wt;var e=typeof n;if("function"!=e){if("object"!=e)return function(t){return t[n]};var u=Rr(n);return function(t){for(var r=u.length,e=b;r--&&(e=vt(t[u[r]],n[u[r]],w)););return e}}return typeof t=="undefined"||F&&!F.test(fr.call(n))?n:1===r?function(r){return n.call(t,r)}:2===r?function(r,e){return n.call(t,r,e)}:4===r?function(r,e,u,a){return n.call(t,r,e,u,a)}:function(r,e,u){return n.call(t,r,e,u)}},_.debounce=Rt,_.defaults=Hr,_.defer=Tt,_.delay=function(n,t){var r=Sr.call(arguments,2);
|
35
|
+
return mr(function(){n.apply(m,r)},t)},_.difference=Bt,_.filter=wt,_.flatten=Vr,_.forEach=xt,_.forIn=Jr,_.forOwn=Kr,_.functions=st,_.groupBy=function(n,t,r){var e={};return t=_.createCallback(t,r),xt(n,function(n,r,u){r=Yt(t(n,r,u)),(sr.call(e,r)?e[r]:e[r]=[]).push(n)}),e},_.initial=function(n,t,r){if(!n)return[];var e=0,u=n.length;if(typeof t!="number"&&t!=d){var a=u;for(t=_.createCallback(t,r);a--&&t(n[a],a,n);)e++}else e=t==d||r?1:t||e;return v(n,0,xr(kr(0,u-e),u))},_.intersection=function(n){for(var e=arguments,u=e.length,a=-1,i=l(),c=-1,f=ot(),p=n?n.length:0,v=[],h=l();++a<u;){var m=e[a];
|
36
|
+
i[a]=f===t&&(m?m.length:0)>=O&&o(a?e[a]:h)}n:for(;++c<p;){var y=i[0],m=n[c];if(0>(y?r(y,m):f(h,m))){for(a=u,(y||h).push(m);--a;)if(y=i[a],0>(y?r(y,m):f(e[a],m)))continue n;v.push(m)}}for(;u--;)(y=i[u])&&g(y);return s(i),s(h),v},_.invert=gt,_.invoke=function(n,t){var r=Sr.call(arguments,2),e=-1,u=typeof t=="function",a=n?n.length:0,o=Ht(typeof a=="number"?a:0);return xt(n,function(n){o[++e]=(u?t:n[t]).apply(n,r)}),o},_.keys=Rr,_.map=Ot,_.max=Et,_.memoize=function(n,t){function r(){var e=r.cache,u=x+(t?t.apply(this,arguments):arguments[0]);
|
37
|
+
return sr.call(e,u)?e[u]:e[u]=n.apply(this,arguments)}return r.cache={},r},_.merge=bt,_.min=function(n,t,r){var e=1/0,a=e;if(!t&&qr(n)){r=-1;for(var o=n.length;++r<o;){var i=n[r];i<a&&(a=i)}}else t=!t&&dt(n)?u:_.createCallback(t,r),Tr(n,function(n,r,u){r=t(n,r,u),r<e&&(e=r,a=n)});return a},_.omit=function(n,t,r){var e=ot(),u=typeof t=="function",a={};if(u)t=_.createCallback(t,r);else var o=lr.apply(nr,Sr.call(arguments,1));return Jr(n,function(n,r,i){(u?!t(n,r,i):0>e(o,r))&&(a[r]=n)}),a},_.once=function(n){var t,r;
|
38
|
+
return function(){return t?r:(t=y,r=n.apply(this,arguments),n=d,r)}},_.pairs=function(n){for(var t=-1,r=Rr(n),e=r.length,u=Ht(e);++t<e;){var a=r[t];u[t]=[a,n[a]]}return u},_.partial=function(n){return E(n,Sr.call(arguments,1))},_.partialRight=function(n){return E(n,Sr.call(arguments,1),d,w)},_.pick=function(n,t,r){var e={};if(typeof t!="function")for(var u=-1,a=lr.apply(nr,Sr.call(arguments,1)),o=mt(n)?a.length:0;++u<o;){var i=a[u];i in n&&(e[i]=n[i])}else t=_.createCallback(t,r),Jr(n,function(n,r,u){t(n,r,u)&&(e[r]=n)
|
39
|
+
});return e},_.pluck=Ur,_.range=function(n,t,r){n=+n||0,r=+r||1,t==d&&(t=n,n=0);var e=-1;t=kr(0,or((t-n)/r));for(var u=Ht(t);++e<t;)u[e]=n,n+=r;return u},_.reject=function(n,t,r){return t=_.createCallback(t,r),wt(n,function(n,r,e){return!t(n,r,e)})},_.rest=zt,_.shuffle=function(n){var t=-1,r=n?n.length:0,e=Ht(typeof r=="number"?r:0);return xt(n,function(n){var r=cr(Er()*(++t+1));e[t]=e[r],e[r]=n}),e},_.sortBy=function(n,t,r){var e=-1,u=n?n.length:0,o=Ht(typeof u=="number"?u:0);for(t=_.createCallback(t,r),xt(n,function(n,r,u){var a=o[++e]=c();
|
40
|
+
a.l=t(n,r,u),a.m=e,a.n=n}),u=o.length,o.sort(a);u--;)n=o[u],o[u]=n.n,g(n);return o},_.tap=function(n,t){return t(n),n},_.throttle=function(n,t,r){var e=y,u=y;return r===false?e=b:mt(r)&&(e="leading"in r?r.leading:e,u="trailing"in r?r.trailing:u),r=c(),r.leading=e,r.maxWait=t,r.trailing=u,n=Rt(n,t,r),g(r),n},_.times=function(n,t,r){n=-1<(n=+n)?n:0;var e=-1,u=Ht(n);for(t=_.createCallback(t,r,1);++e<n;)u[e]=t(e);return u},_.toArray=function(n){return n&&typeof n.length=="number"?Pr.unindexedChars&&dt(n)?n.split(""):v(n):_t(n)
|
41
|
+
},_.transform=function(n,t,r,e){var u=qr(n);return t=_.createCallback(t,e,4),r==d&&(u?r=[]:(e=n&&n.constructor,r=rt(e&&e.prototype))),(u?Tr:Kr)(n,function(n,e,u){return t(r,n,e,u)}),r},_.union=function(n){return qr(n)||(arguments[0]=n?Sr.call(n):nr),Qr(lr.apply(nr,arguments))},_.uniq=Qr,_.unzip=$t,_.values=_t,_.where=wt,_.without=function(n){return Bt(n,Sr.call(arguments,1))},_.wrap=function(n,t){return function(){var r=[n];return gr.apply(r,arguments),t.apply(this,r)}},_.zip=function(n){return n?$t(arguments):[]
|
42
|
+
},_.zipObject=qt,_.collect=Ot,_.drop=zt,_.each=xt,_.extend=Gr,_.methods=st,_.object=qt,_.select=wt,_.tail=zt,_.unique=Qr,Lt(_),_.chain=_,_.prototype.chain=function(){return this},_.clone=pt,_.cloneDeep=function(n,t,r){return pt(n,y,t,r)},_.contains=Ct,_.escape=function(n){return n==d?"":Yt(n).replace(R,ut)},_.every=jt,_.find=kt,_.findIndex=function(n,t,r){var e=-1,u=n?n.length:0;for(t=_.createCallback(t,r);++e<u;)if(t(n[e],e,n))return e;return-1},_.findKey=function(n,t,r){var e;return t=_.createCallback(t,r),Kr(n,function(n,r,u){return t(n,r,u)?(e=r,b):void 0
|
43
|
+
}),e},_.has=function(n,t){return n?sr.call(n,t):b},_.identity=Wt,_.indexOf=Pt,_.isArguments=ft,_.isArray=qr,_.isBoolean=function(n){return n===y||n===false||yr.call(n)==J},_.isDate=function(n){return n?typeof n=="object"&&yr.call(n)==K:b},_.isElement=function(n){return n?1===n.nodeType:b},_.isEmpty=function(n){var t=y;if(!n)return t;var r=yr.call(n),e=n.length;return r==H||r==Y||(Pr.argsClass?r==G:ft(n))||r==Q&&typeof e=="number"&&ht(n.splice)?!e:(Kr(n,function(){return t=b}),t)},_.isEqual=vt,_.isFinite=function(n){return Cr(n)&&!jr(parseFloat(n))
|
44
|
+
},_.isFunction=ht,_.isNaN=function(n){return yt(n)&&n!=+n},_.isNull=function(n){return n===d},_.isNumber=yt,_.isObject=mt,_.isPlainObject=Mr,_.isRegExp=function(n){return!(!n||!nt[typeof n])&&yr.call(n)==X},_.isString=dt,_.isUndefined=function(n){return typeof n=="undefined"},_.lastIndexOf=function(n,t,r){var e=n?n.length:0;for(typeof r=="number"&&(e=(0>r?kr(0,e+r):xr(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},_.mixin=Lt,_.noConflict=function(){return e._=ur,this},_.parseInt=Xr,_.random=function(n,t){n==d&&t==d&&(t=1),n=+n||0,t==d?(t=n,n=0):t=+t||0;
|
45
|
+
var r=Er();return n%1||t%1?n+xr(r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+cr(r*(t-n+1))},_.reduce=St,_.reduceRight=At,_.result=function(n,t){var r=n?n[t]:m;return ht(r)?n[t]():r},_.runInContext=h,_.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Rr(n).length},_.some=It,_.sortedIndex=Ft,_.template=function(n,t,r){var e=_.templateSettings;n||(n=""),r=Hr({},r,e);var u,a=Hr({},r.imports,e.imports),e=Rr(a),a=_t(a),o=0,l=r.interpolate||D,c="__p+='",l=Xt((r.escape||D).source+"|"+l.source+"|"+(l===z?N:D).source+"|"+(r.evaluate||D).source+"|$","g");
|
46
|
+
n.replace(l,function(t,r,e,a,l,f){return e||(e=a),c+=n.slice(o,f).replace(T,i),r&&(c+="'+__e("+r+")+'"),l&&(u=y,c+="';"+l+";__p+='"),e&&(c+="'+((__t=("+e+"))==null?'':__t)+'"),o=f+t.length,t}),c+="';\n",l=r=r.variable,l||(r="obj",c="with("+r+"){"+c+"}"),c=(u?c.replace(S,""):c).replace(A,"$1").replace(I,"$1;"),c="function("+r+"){"+(l?"":r+"||("+r+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+c+"return __p}";try{var f=Mt(e,"return "+c).apply(m,a)
|
47
|
+
}catch(p){throw p.source=c,p}return t?f(t):(f.source=c,f)},_.unescape=function(n){return n==d?"":Yt(n).replace(B,ct)},_.uniqueId=function(n){var t=++j;return Yt(n==d?"":n)+t},_.all=jt,_.any=It,_.detect=kt,_.findWhere=kt,_.foldl=St,_.foldr=At,_.include=Ct,_.inject=St,Kr(_,function(n,t){_.prototype[t]||(_.prototype[t]=function(){var t=[this.__wrapped__];return gr.apply(t,arguments),n.apply(_,t)})}),_.first=Nt,_.last=function(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=d){var a=u;for(t=_.createCallback(t,r);a--&&t(n[a],a,n);)e++
|
48
|
+
}else if(e=t,e==d||r)return n[u-1];return v(n,kr(0,u-e))}},_.take=Nt,_.head=Nt,Kr(_,function(n,t){_.prototype[t]||(_.prototype[t]=function(t,r){var e=n(this.__wrapped__,t,r);return t==d||r&&typeof t!="function"?e:new C(e)})}),_.VERSION="1.3.1",_.prototype.toString=function(){return Yt(this.__wrapped__)},_.prototype.value=Gt,_.prototype.valueOf=Gt,Tr(["join","pop","shift"],function(n){var t=nr[n];_.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),Tr(["push","reverse","sort","unshift"],function(n){var t=nr[n];
|
49
|
+
_.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),Tr(["concat","slice","splice"],function(n){var t=nr[n];_.prototype[n]=function(){return new C(t.apply(this.__wrapped__,arguments))}}),Pr.spliceObjects||Tr(["pop","shift","splice"],function(n){var t=nr[n],r="splice"==n;_.prototype[n]=function(){var n=this.__wrapped__,e=t.apply(n,arguments);return 0===n.length&&delete n[0],r?new C(e):e}}),_}var m,y=!0,d=null,b=!1,_=[],C=[],j=0,w={},x=+new Date+"",O=75,E=40,S=/\b__p\+='';/g,A=/\b(__p\+=)''\+/g,I=/(__e\(.*?\)|\b__t\))\+'';/g,B=/&(?:amp|lt|gt|quot|#39);/g,N=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,P=/\w*$/,z=/<%=([\s\S]+?)%>/g,F=(F=/\bthis\b/)&&F.test(h)&&F,$=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",q=RegExp("^["+$+"]*0+(?=.$)"),D=/($^)/,R=/[&<>"']/g,T=/['\n\r\t\u2028\u2029\\]/g,W="Array Boolean Date Error Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),L="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),G="[object Arguments]",H="[object Array]",J="[object Boolean]",K="[object Date]",M="[object Error]",U="[object Function]",V="[object Number]",Q="[object Object]",X="[object RegExp]",Y="[object String]",Z={};
|
50
|
+
Z[U]=b,Z[G]=Z[H]=Z[J]=Z[K]=Z[V]=Z[Q]=Z[X]=Z[Y]=y;var nt={"boolean":b,"function":y,object:y,number:b,string:b,undefined:b},tt={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},rt=nt[typeof exports]&&exports,et=nt[typeof module]&&module&&module.exports==rt&&module,ut=nt[typeof global]&&global;!ut||ut.global!==ut&&ut.window!==ut||(n=ut);var at=h();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=at, define(function(){return at})):rt&&!rt.nodeType?et?(et.exports=at)._=at:rt._=at:n._=at
|
51
|
+
}(this);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/**
|
2
2
|
* @license
|
3
|
-
* Lo-Dash 1.
|
3
|
+
* Lo-Dash 1.3.1 (Custom Build) <http://lodash.com/>
|
4
4
|
* Build: `lodash modern -o ./dist/lodash.js`
|
5
5
|
* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
|
6
6
|
* Based on Underscore.js 1.4.4 <http://underscorejs.org/>
|
@@ -12,17 +12,9 @@
|
|
12
12
|
/** Used as a safe reference for `undefined` in pre ES5 environments */
|
13
13
|
var undefined;
|
14
14
|
|
15
|
-
/**
|
16
|
-
var
|
17
|
-
|
18
|
-
/** Detect free variable `module` */
|
19
|
-
var freeModule = typeof module == 'object' && module && module.exports == freeExports && module;
|
20
|
-
|
21
|
-
/** Detect free variable `global`, from Node.js or Browserified code, and use it as `window` */
|
22
|
-
var freeGlobal = typeof global == 'object' && global;
|
23
|
-
if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
|
24
|
-
window = freeGlobal;
|
25
|
-
}
|
15
|
+
/** Used to pool arrays and objects used internally */
|
16
|
+
var arrayPool = [],
|
17
|
+
objectPool = [];
|
26
18
|
|
27
19
|
/** Used to generate unique IDs */
|
28
20
|
var idCounter = 0;
|
@@ -34,7 +26,10 @@
|
|
34
26
|
var keyPrefix = +new Date + '';
|
35
27
|
|
36
28
|
/** Used as the size when optimizations are enabled for large arrays */
|
37
|
-
var largeArraySize =
|
29
|
+
var largeArraySize = 75;
|
30
|
+
|
31
|
+
/** Used as the max size of the `arrayPool` and `objectPool` */
|
32
|
+
var maxPoolSize = 40;
|
38
33
|
|
39
34
|
/** Used to match empty string literals in compiled template source */
|
40
35
|
var reEmptyStringLeading = /\b__p \+= '';/g,
|
@@ -56,6 +51,9 @@
|
|
56
51
|
/** Used to match "interpolate" template delimiters */
|
57
52
|
var reInterpolate = /<%=([\s\S]+?)%>/g;
|
58
53
|
|
54
|
+
/** Used to detect functions containing a `this` reference */
|
55
|
+
var reThis = (reThis = /\bthis\b/) && reThis.test(runInContext) && reThis;
|
56
|
+
|
59
57
|
/** Used to detect and test whitespace */
|
60
58
|
var whitespace = (
|
61
59
|
// whitespace
|
@@ -82,9 +80,9 @@
|
|
82
80
|
|
83
81
|
/** Used to assign default `context` object properties */
|
84
82
|
var contextProps = [
|
85
|
-
'Array', 'Boolean', 'Date', 'Function', 'Math', 'Number', 'Object',
|
86
|
-
'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN',
|
87
|
-
'setImmediate', 'setTimeout'
|
83
|
+
'Array', 'Boolean', 'Date', 'Function', 'Math', 'Number', 'Object',
|
84
|
+
'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN',
|
85
|
+
'parseInt', 'setImmediate', 'setTimeout'
|
88
86
|
];
|
89
87
|
|
90
88
|
/** Used to make template sourceURLs easier to identify */
|
@@ -95,6 +93,7 @@
|
|
95
93
|
arrayClass = '[object Array]',
|
96
94
|
boolClass = '[object Boolean]',
|
97
95
|
dateClass = '[object Date]',
|
96
|
+
errorClass = '[object Error]',
|
98
97
|
funcClass = '[object Function]',
|
99
98
|
numberClass = '[object Number]',
|
100
99
|
objectClass = '[object Object]',
|
@@ -130,6 +129,282 @@
|
|
130
129
|
'\u2029': 'u2029'
|
131
130
|
};
|
132
131
|
|
132
|
+
/** Detect free variable `exports` */
|
133
|
+
var freeExports = objectTypes[typeof exports] && exports;
|
134
|
+
|
135
|
+
/** Detect free variable `module` */
|
136
|
+
var freeModule = objectTypes[typeof module] && module && module.exports == freeExports && module;
|
137
|
+
|
138
|
+
/** Detect free variable `global`, from Node.js or Browserified code, and use it as `window` */
|
139
|
+
var freeGlobal = objectTypes[typeof global] && global;
|
140
|
+
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
|
141
|
+
window = freeGlobal;
|
142
|
+
}
|
143
|
+
|
144
|
+
/*--------------------------------------------------------------------------*/
|
145
|
+
|
146
|
+
/**
|
147
|
+
* A basic implementation of `_.indexOf` without support for binary searches
|
148
|
+
* or `fromIndex` constraints.
|
149
|
+
*
|
150
|
+
* @private
|
151
|
+
* @param {Array} array The array to search.
|
152
|
+
* @param {Mixed} value The value to search for.
|
153
|
+
* @param {Number} [fromIndex=0] The index to search from.
|
154
|
+
* @returns {Number} Returns the index of the matched value or `-1`.
|
155
|
+
*/
|
156
|
+
function basicIndexOf(array, value, fromIndex) {
|
157
|
+
var index = (fromIndex || 0) - 1,
|
158
|
+
length = array.length;
|
159
|
+
|
160
|
+
while (++index < length) {
|
161
|
+
if (array[index] === value) {
|
162
|
+
return index;
|
163
|
+
}
|
164
|
+
}
|
165
|
+
return -1;
|
166
|
+
}
|
167
|
+
|
168
|
+
/**
|
169
|
+
* An implementation of `_.contains` for cache objects that mimics the return
|
170
|
+
* signature of `_.indexOf` by returning `0` if the value is found, else `-1`.
|
171
|
+
*
|
172
|
+
* @private
|
173
|
+
* @param {Object} cache The cache object to inspect.
|
174
|
+
* @param {Mixed} value The value to search for.
|
175
|
+
* @returns {Number} Returns `0` if `value` is found, else `-1`.
|
176
|
+
*/
|
177
|
+
function cacheIndexOf(cache, value) {
|
178
|
+
var type = typeof value;
|
179
|
+
cache = cache.cache;
|
180
|
+
|
181
|
+
if (type == 'boolean' || value == null) {
|
182
|
+
return cache[value];
|
183
|
+
}
|
184
|
+
if (type != 'number' && type != 'string') {
|
185
|
+
type = 'object';
|
186
|
+
}
|
187
|
+
var key = type == 'number' ? value : keyPrefix + value;
|
188
|
+
cache = cache[type] || (cache[type] = {});
|
189
|
+
|
190
|
+
return type == 'object'
|
191
|
+
? (cache[key] && basicIndexOf(cache[key], value) > -1 ? 0 : -1)
|
192
|
+
: (cache[key] ? 0 : -1);
|
193
|
+
}
|
194
|
+
|
195
|
+
/**
|
196
|
+
* Adds a given `value` to the corresponding cache object.
|
197
|
+
*
|
198
|
+
* @private
|
199
|
+
* @param {Mixed} value The value to add to the cache.
|
200
|
+
*/
|
201
|
+
function cachePush(value) {
|
202
|
+
var cache = this.cache,
|
203
|
+
type = typeof value;
|
204
|
+
|
205
|
+
if (type == 'boolean' || value == null) {
|
206
|
+
cache[value] = true;
|
207
|
+
} else {
|
208
|
+
if (type != 'number' && type != 'string') {
|
209
|
+
type = 'object';
|
210
|
+
}
|
211
|
+
var key = type == 'number' ? value : keyPrefix + value,
|
212
|
+
typeCache = cache[type] || (cache[type] = {});
|
213
|
+
|
214
|
+
if (type == 'object') {
|
215
|
+
if ((typeCache[key] || (typeCache[key] = [])).push(value) == this.array.length) {
|
216
|
+
cache[type] = false;
|
217
|
+
}
|
218
|
+
} else {
|
219
|
+
typeCache[key] = true;
|
220
|
+
}
|
221
|
+
}
|
222
|
+
}
|
223
|
+
|
224
|
+
/**
|
225
|
+
* Used by `_.max` and `_.min` as the default `callback` when a given
|
226
|
+
* `collection` is a string value.
|
227
|
+
*
|
228
|
+
* @private
|
229
|
+
* @param {String} value The character to inspect.
|
230
|
+
* @returns {Number} Returns the code unit of given character.
|
231
|
+
*/
|
232
|
+
function charAtCallback(value) {
|
233
|
+
return value.charCodeAt(0);
|
234
|
+
}
|
235
|
+
|
236
|
+
/**
|
237
|
+
* Used by `sortBy` to compare transformed `collection` values, stable sorting
|
238
|
+
* them in ascending order.
|
239
|
+
*
|
240
|
+
* @private
|
241
|
+
* @param {Object} a The object to compare to `b`.
|
242
|
+
* @param {Object} b The object to compare to `a`.
|
243
|
+
* @returns {Number} Returns the sort order indicator of `1` or `-1`.
|
244
|
+
*/
|
245
|
+
function compareAscending(a, b) {
|
246
|
+
var ai = a.index,
|
247
|
+
bi = b.index;
|
248
|
+
|
249
|
+
a = a.criteria;
|
250
|
+
b = b.criteria;
|
251
|
+
|
252
|
+
// ensure a stable sort in V8 and other engines
|
253
|
+
// http://code.google.com/p/v8/issues/detail?id=90
|
254
|
+
if (a !== b) {
|
255
|
+
if (a > b || typeof a == 'undefined') {
|
256
|
+
return 1;
|
257
|
+
}
|
258
|
+
if (a < b || typeof b == 'undefined') {
|
259
|
+
return -1;
|
260
|
+
}
|
261
|
+
}
|
262
|
+
return ai < bi ? -1 : 1;
|
263
|
+
}
|
264
|
+
|
265
|
+
/**
|
266
|
+
* Creates a cache object to optimize linear searches of large arrays.
|
267
|
+
*
|
268
|
+
* @private
|
269
|
+
* @param {Array} [array=[]] The array to search.
|
270
|
+
* @returns {Null|Object} Returns the cache object or `null` if caching should not be used.
|
271
|
+
*/
|
272
|
+
function createCache(array) {
|
273
|
+
var index = -1,
|
274
|
+
length = array.length;
|
275
|
+
|
276
|
+
var cache = getObject();
|
277
|
+
cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;
|
278
|
+
|
279
|
+
var result = getObject();
|
280
|
+
result.array = array;
|
281
|
+
result.cache = cache;
|
282
|
+
result.push = cachePush;
|
283
|
+
|
284
|
+
while (++index < length) {
|
285
|
+
result.push(array[index]);
|
286
|
+
}
|
287
|
+
return cache.object === false
|
288
|
+
? (releaseObject(result), null)
|
289
|
+
: result;
|
290
|
+
}
|
291
|
+
|
292
|
+
/**
|
293
|
+
* Used by `template` to escape characters for inclusion in compiled
|
294
|
+
* string literals.
|
295
|
+
*
|
296
|
+
* @private
|
297
|
+
* @param {String} match The matched character to escape.
|
298
|
+
* @returns {String} Returns the escaped character.
|
299
|
+
*/
|
300
|
+
function escapeStringChar(match) {
|
301
|
+
return '\\' + stringEscapes[match];
|
302
|
+
}
|
303
|
+
|
304
|
+
/**
|
305
|
+
* Gets an array from the array pool or creates a new one if the pool is empty.
|
306
|
+
*
|
307
|
+
* @private
|
308
|
+
* @returns {Array} The array from the pool.
|
309
|
+
*/
|
310
|
+
function getArray() {
|
311
|
+
return arrayPool.pop() || [];
|
312
|
+
}
|
313
|
+
|
314
|
+
/**
|
315
|
+
* Gets an object from the object pool or creates a new one if the pool is empty.
|
316
|
+
*
|
317
|
+
* @private
|
318
|
+
* @returns {Object} The object from the pool.
|
319
|
+
*/
|
320
|
+
function getObject() {
|
321
|
+
return objectPool.pop() || {
|
322
|
+
'array': null,
|
323
|
+
'cache': null,
|
324
|
+
'criteria': null,
|
325
|
+
'false': false,
|
326
|
+
'index': 0,
|
327
|
+
'leading': false,
|
328
|
+
'maxWait': 0,
|
329
|
+
'null': false,
|
330
|
+
'number': null,
|
331
|
+
'object': null,
|
332
|
+
'push': null,
|
333
|
+
'string': null,
|
334
|
+
'trailing': false,
|
335
|
+
'true': false,
|
336
|
+
'undefined': false,
|
337
|
+
'value': null
|
338
|
+
};
|
339
|
+
}
|
340
|
+
|
341
|
+
/**
|
342
|
+
* A no-operation function.
|
343
|
+
*
|
344
|
+
* @private
|
345
|
+
*/
|
346
|
+
function noop() {
|
347
|
+
// no operation performed
|
348
|
+
}
|
349
|
+
|
350
|
+
/**
|
351
|
+
* Releases the given `array` back to the array pool.
|
352
|
+
*
|
353
|
+
* @private
|
354
|
+
* @param {Array} [array] The array to release.
|
355
|
+
*/
|
356
|
+
function releaseArray(array) {
|
357
|
+
array.length = 0;
|
358
|
+
if (arrayPool.length < maxPoolSize) {
|
359
|
+
arrayPool.push(array);
|
360
|
+
}
|
361
|
+
}
|
362
|
+
|
363
|
+
/**
|
364
|
+
* Releases the given `object` back to the object pool.
|
365
|
+
*
|
366
|
+
* @private
|
367
|
+
* @param {Object} [object] The object to release.
|
368
|
+
*/
|
369
|
+
function releaseObject(object) {
|
370
|
+
var cache = object.cache;
|
371
|
+
if (cache) {
|
372
|
+
releaseObject(cache);
|
373
|
+
}
|
374
|
+
object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;
|
375
|
+
if (objectPool.length < maxPoolSize) {
|
376
|
+
objectPool.push(object);
|
377
|
+
}
|
378
|
+
}
|
379
|
+
|
380
|
+
/**
|
381
|
+
* Slices the `collection` from the `start` index up to, but not including,
|
382
|
+
* the `end` index.
|
383
|
+
*
|
384
|
+
* Note: This function is used, instead of `Array#slice`, to support node lists
|
385
|
+
* in IE < 9 and to ensure dense arrays are returned.
|
386
|
+
*
|
387
|
+
* @private
|
388
|
+
* @param {Array|Object|String} collection The collection to slice.
|
389
|
+
* @param {Number} start The start index.
|
390
|
+
* @param {Number} end The end index.
|
391
|
+
* @returns {Array} Returns the new array.
|
392
|
+
*/
|
393
|
+
function slice(array, start, end) {
|
394
|
+
start || (start = 0);
|
395
|
+
if (typeof end == 'undefined') {
|
396
|
+
end = array ? array.length : 0;
|
397
|
+
}
|
398
|
+
var index = -1,
|
399
|
+
length = end - start || 0,
|
400
|
+
result = Array(length < 0 ? 0 : length);
|
401
|
+
|
402
|
+
while (++index < length) {
|
403
|
+
result[index] = array[start + index];
|
404
|
+
}
|
405
|
+
return result;
|
406
|
+
}
|
407
|
+
|
133
408
|
/*--------------------------------------------------------------------------*/
|
134
409
|
|
135
410
|
/**
|
@@ -160,16 +435,24 @@
|
|
160
435
|
String = context.String,
|
161
436
|
TypeError = context.TypeError;
|
162
437
|
|
163
|
-
/**
|
164
|
-
|
165
|
-
|
438
|
+
/**
|
439
|
+
* Used for `Array` method references.
|
440
|
+
*
|
441
|
+
* Normally `Array.prototype` would suffice, however, using an array literal
|
442
|
+
* avoids issues in Narwhal.
|
443
|
+
*/
|
444
|
+
var arrayRef = [];
|
445
|
+
|
446
|
+
/** Used for native method references */
|
447
|
+
var objectProto = Object.prototype,
|
448
|
+
stringProto = String.prototype;
|
166
449
|
|
167
450
|
/** Used to restore the original `_` reference in `noConflict` */
|
168
451
|
var oldDash = context._;
|
169
452
|
|
170
453
|
/** Used to detect if a method is native */
|
171
454
|
var reNative = RegExp('^' +
|
172
|
-
String(
|
455
|
+
String(objectProto.valueOf)
|
173
456
|
.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
174
457
|
.replace(/valueOf|for [^\]]+/g, '.+?') + '$'
|
175
458
|
);
|
@@ -179,15 +462,18 @@
|
|
179
462
|
clearTimeout = context.clearTimeout,
|
180
463
|
concat = arrayRef.concat,
|
181
464
|
floor = Math.floor,
|
465
|
+
fnToString = Function.prototype.toString,
|
182
466
|
getPrototypeOf = reNative.test(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,
|
183
|
-
hasOwnProperty =
|
467
|
+
hasOwnProperty = objectProto.hasOwnProperty,
|
184
468
|
push = arrayRef.push,
|
469
|
+
propertyIsEnumerable = objectProto.propertyIsEnumerable,
|
185
470
|
setImmediate = context.setImmediate,
|
186
471
|
setTimeout = context.setTimeout,
|
187
|
-
toString =
|
472
|
+
toString = objectProto.toString;
|
188
473
|
|
189
474
|
/* Native method shortcuts for methods with the same name as other `lodash` methods */
|
190
475
|
var nativeBind = reNative.test(nativeBind = toString.bind) && nativeBind,
|
476
|
+
nativeCreate = reNative.test(nativeCreate = Object.create) && nativeCreate,
|
191
477
|
nativeIsArray = reNative.test(nativeIsArray = Array.isArray) && nativeIsArray,
|
192
478
|
nativeIsFinite = context.isFinite,
|
193
479
|
nativeIsNaN = context.isNaN,
|
@@ -207,6 +493,7 @@
|
|
207
493
|
ctorByClass[arrayClass] = Array;
|
208
494
|
ctorByClass[boolClass] = Boolean;
|
209
495
|
ctorByClass[dateClass] = Date;
|
496
|
+
ctorByClass[funcClass] = Function;
|
210
497
|
ctorByClass[objectClass] = Object;
|
211
498
|
ctorByClass[numberClass] = Number;
|
212
499
|
ctorByClass[regexpClass] = RegExp;
|
@@ -233,8 +520,8 @@
|
|
233
520
|
* `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,
|
234
521
|
* `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `push`, `range`,
|
235
522
|
* `reject`, `rest`, `reverse`, `shuffle`, `slice`, `sort`, `sortBy`, `splice`,
|
236
|
-
* `tap`, `throttle`, `times`, `toArray`, `union`, `uniq`, `unshift`,
|
237
|
-
* `values`, `where`, `without`, `wrap`, and `zip`
|
523
|
+
* `tap`, `throttle`, `times`, `toArray`, `transform`, `union`, `uniq`, `unshift`,
|
524
|
+
* `unzip`, `values`, `where`, `without`, `wrap`, and `zip`
|
238
525
|
*
|
239
526
|
* The non-chainable wrapper functions are:
|
240
527
|
* `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `has`,
|
@@ -250,6 +537,7 @@
|
|
250
537
|
*
|
251
538
|
* @name _
|
252
539
|
* @constructor
|
540
|
+
* @alias chain
|
253
541
|
* @category Chaining
|
254
542
|
* @param {Mixed} value The value to wrap in a `lodash` instance.
|
255
543
|
* @returns {Object} Returns a `lodash` instance.
|
@@ -281,6 +569,19 @@
|
|
281
569
|
: new lodashWrapper(value);
|
282
570
|
}
|
283
571
|
|
572
|
+
/**
|
573
|
+
* A fast path for creating `lodash` wrapper objects.
|
574
|
+
*
|
575
|
+
* @private
|
576
|
+
* @param {Mixed} value The value to wrap in a `lodash` instance.
|
577
|
+
* @returns {Object} Returns a `lodash` instance.
|
578
|
+
*/
|
579
|
+
function lodashWrapper(value) {
|
580
|
+
this.__wrapped__ = value;
|
581
|
+
}
|
582
|
+
// ensure `new lodashWrapper` is an instance of `lodash`
|
583
|
+
lodashWrapper.prototype = lodash.prototype;
|
584
|
+
|
284
585
|
/**
|
285
586
|
* An object used to flag environments features.
|
286
587
|
*
|
@@ -361,78 +662,6 @@
|
|
361
662
|
|
362
663
|
/*--------------------------------------------------------------------------*/
|
363
664
|
|
364
|
-
/**
|
365
|
-
* Creates a function optimized to search large arrays for a given `value`,
|
366
|
-
* starting at `fromIndex`, using strict equality for comparisons, i.e. `===`.
|
367
|
-
*
|
368
|
-
* @private
|
369
|
-
* @param {Array} array The array to search.
|
370
|
-
* @param {Mixed} value The value to search for.
|
371
|
-
* @returns {Boolean} Returns `true`, if `value` is found, else `false`.
|
372
|
-
*/
|
373
|
-
function cachedContains(array) {
|
374
|
-
var length = array.length,
|
375
|
-
isLarge = length >= largeArraySize;
|
376
|
-
|
377
|
-
if (isLarge) {
|
378
|
-
var cache = {},
|
379
|
-
index = -1;
|
380
|
-
|
381
|
-
while (++index < length) {
|
382
|
-
var key = keyPrefix + array[index];
|
383
|
-
(cache[key] || (cache[key] = [])).push(array[index]);
|
384
|
-
}
|
385
|
-
}
|
386
|
-
return function(value) {
|
387
|
-
if (isLarge) {
|
388
|
-
var key = keyPrefix + value;
|
389
|
-
return cache[key] && indexOf(cache[key], value) > -1;
|
390
|
-
}
|
391
|
-
return indexOf(array, value) > -1;
|
392
|
-
}
|
393
|
-
}
|
394
|
-
|
395
|
-
/**
|
396
|
-
* Used by `_.max` and `_.min` as the default `callback` when a given
|
397
|
-
* `collection` is a string value.
|
398
|
-
*
|
399
|
-
* @private
|
400
|
-
* @param {String} value The character to inspect.
|
401
|
-
* @returns {Number} Returns the code unit of given character.
|
402
|
-
*/
|
403
|
-
function charAtCallback(value) {
|
404
|
-
return value.charCodeAt(0);
|
405
|
-
}
|
406
|
-
|
407
|
-
/**
|
408
|
-
* Used by `sortBy` to compare transformed `collection` values, stable sorting
|
409
|
-
* them in ascending order.
|
410
|
-
*
|
411
|
-
* @private
|
412
|
-
* @param {Object} a The object to compare to `b`.
|
413
|
-
* @param {Object} b The object to compare to `a`.
|
414
|
-
* @returns {Number} Returns the sort order indicator of `1` or `-1`.
|
415
|
-
*/
|
416
|
-
function compareAscending(a, b) {
|
417
|
-
var ai = a.index,
|
418
|
-
bi = b.index;
|
419
|
-
|
420
|
-
a = a.criteria;
|
421
|
-
b = b.criteria;
|
422
|
-
|
423
|
-
// ensure a stable sort in V8 and other engines
|
424
|
-
// http://code.google.com/p/v8/issues/detail?id=90
|
425
|
-
if (a !== b) {
|
426
|
-
if (a > b || typeof a == 'undefined') {
|
427
|
-
return 1;
|
428
|
-
}
|
429
|
-
if (a < b || typeof b == 'undefined') {
|
430
|
-
return -1;
|
431
|
-
}
|
432
|
-
}
|
433
|
-
return ai < bi ? -1 : 1;
|
434
|
-
}
|
435
|
-
|
436
665
|
/**
|
437
666
|
* Creates a function that, when called, invokes `func` with the `this` binding
|
438
667
|
* of `thisArg` and prepends any `partialArgs` to the arguments passed to the
|
@@ -479,9 +708,7 @@
|
|
479
708
|
}
|
480
709
|
if (this instanceof bound) {
|
481
710
|
// ensure `new bound` is an instance of `func`
|
482
|
-
|
483
|
-
thisBinding = new noop;
|
484
|
-
noop.prototype = null;
|
711
|
+
thisBinding = createObject(func.prototype);
|
485
712
|
|
486
713
|
// mimic the constructor's `return` behavior
|
487
714
|
// http://es5.github.com/#x13.2.2
|
@@ -494,15 +721,14 @@
|
|
494
721
|
}
|
495
722
|
|
496
723
|
/**
|
497
|
-
*
|
498
|
-
* string literals.
|
724
|
+
* Creates a new object with the specified `prototype`.
|
499
725
|
*
|
500
726
|
* @private
|
501
|
-
* @param {
|
502
|
-
* @returns {
|
727
|
+
* @param {Object} prototype The prototype object.
|
728
|
+
* @returns {Object} Returns the new object.
|
503
729
|
*/
|
504
|
-
function
|
505
|
-
return
|
730
|
+
function createObject(prototype) {
|
731
|
+
return isObject(prototype) ? nativeCreate(prototype) : {};
|
506
732
|
}
|
507
733
|
|
508
734
|
/**
|
@@ -517,25 +743,39 @@
|
|
517
743
|
}
|
518
744
|
|
519
745
|
/**
|
520
|
-
*
|
746
|
+
* Gets the appropriate "indexOf" function. If the `_.indexOf` method is
|
747
|
+
* customized, this method returns the custom method, otherwise it returns
|
748
|
+
* the `basicIndexOf` function.
|
521
749
|
*
|
522
750
|
* @private
|
523
|
-
* @
|
524
|
-
* @returns {Object} Returns a `lodash` instance.
|
751
|
+
* @returns {Function} Returns the "indexOf" function.
|
525
752
|
*/
|
526
|
-
function
|
527
|
-
|
753
|
+
function getIndexOf(array, value, fromIndex) {
|
754
|
+
var result = (result = lodash.indexOf) === indexOf ? basicIndexOf : result;
|
755
|
+
return result;
|
528
756
|
}
|
529
|
-
// ensure `new lodashWrapper` is an instance of `lodash`
|
530
|
-
lodashWrapper.prototype = lodash.prototype;
|
531
757
|
|
532
758
|
/**
|
533
|
-
*
|
759
|
+
* Creates a function that juggles arguments, allowing argument overloading
|
760
|
+
* for `_.flatten` and `_.uniq`, before passing them to the given `func`.
|
534
761
|
*
|
535
762
|
* @private
|
763
|
+
* @param {Function} func The function to wrap.
|
764
|
+
* @returns {Function} Returns the new function.
|
536
765
|
*/
|
537
|
-
function
|
538
|
-
|
766
|
+
function overloadWrapper(func) {
|
767
|
+
return function(array, flag, callback, thisArg) {
|
768
|
+
// juggle arguments
|
769
|
+
if (typeof flag != 'boolean' && flag != null) {
|
770
|
+
thisArg = callback;
|
771
|
+
callback = !(thisArg && thisArg[flag] === array) ? flag : undefined;
|
772
|
+
flag = false;
|
773
|
+
}
|
774
|
+
if (callback != null) {
|
775
|
+
callback = lodash.createCallback(callback, thisArg);
|
776
|
+
}
|
777
|
+
return func(array, flag, callback, thisArg);
|
778
|
+
};
|
539
779
|
}
|
540
780
|
|
541
781
|
/**
|
@@ -549,52 +789,21 @@
|
|
549
789
|
* @returns {Boolean} Returns `true`, if `value` is a plain object, else `false`.
|
550
790
|
*/
|
551
791
|
function shimIsPlainObject(value) {
|
552
|
-
|
553
|
-
|
554
|
-
if (!(value && toString.call(value) == objectClass)) {
|
555
|
-
return result;
|
556
|
-
}
|
557
|
-
// check that the constructor is `Object` (i.e. `Object instanceof Object`)
|
558
|
-
var ctor = value.constructor;
|
559
|
-
|
560
|
-
if (isFunction(ctor) ? ctor instanceof ctor : true) {
|
561
|
-
// In most environments an object's own properties are iterated before
|
562
|
-
// its inherited properties. If the last iterated property is an object's
|
563
|
-
// own property then there are no inherited enumerable properties.
|
564
|
-
forIn(value, function(value, key) {
|
565
|
-
result = key;
|
566
|
-
});
|
567
|
-
return result === false || hasOwnProperty.call(value, result);
|
568
|
-
}
|
569
|
-
return result;
|
570
|
-
}
|
571
|
-
|
572
|
-
/**
|
573
|
-
* Slices the `collection` from the `start` index up to, but not including,
|
574
|
-
* the `end` index.
|
575
|
-
*
|
576
|
-
* Note: This function is used, instead of `Array#slice`, to support node lists
|
577
|
-
* in IE < 9 and to ensure dense arrays are returned.
|
578
|
-
*
|
579
|
-
* @private
|
580
|
-
* @param {Array|Object|String} collection The collection to slice.
|
581
|
-
* @param {Number} start The start index.
|
582
|
-
* @param {Number} end The end index.
|
583
|
-
* @returns {Array} Returns the new array.
|
584
|
-
*/
|
585
|
-
function slice(array, start, end) {
|
586
|
-
start || (start = 0);
|
587
|
-
if (typeof end == 'undefined') {
|
588
|
-
end = array ? array.length : 0;
|
589
|
-
}
|
590
|
-
var index = -1,
|
591
|
-
length = end - start || 0,
|
592
|
-
result = Array(length < 0 ? 0 : length);
|
792
|
+
var ctor,
|
793
|
+
result;
|
593
794
|
|
594
|
-
|
595
|
-
|
795
|
+
// avoid non Object objects, `arguments` objects, and DOM elements
|
796
|
+
if (!(value && toString.call(value) == objectClass) ||
|
797
|
+
(ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor))) {
|
798
|
+
return false;
|
596
799
|
}
|
597
|
-
|
800
|
+
// In most environments an object's own properties are iterated before
|
801
|
+
// its inherited properties. If the last iterated property is an object's
|
802
|
+
// own property then there are no inherited enumerable properties.
|
803
|
+
forIn(value, function(value, key) {
|
804
|
+
result = key;
|
805
|
+
});
|
806
|
+
return result === undefined || hasOwnProperty.call(value, result);
|
598
807
|
}
|
599
808
|
|
600
809
|
/**
|
@@ -660,11 +869,10 @@
|
|
660
869
|
var shimKeys = function (object) {
|
661
870
|
var index, iterable = object, result = [];
|
662
871
|
if (!iterable) return result;
|
663
|
-
if (!(objectTypes[typeof object])) return result;
|
664
|
-
|
872
|
+
if (!(objectTypes[typeof object])) return result;
|
665
873
|
for (index in iterable) {
|
666
|
-
if (hasOwnProperty.call(iterable, index)) {
|
667
|
-
|
874
|
+
if (hasOwnProperty.call(iterable, index)) {
|
875
|
+
result.push(index);
|
668
876
|
}
|
669
877
|
}
|
670
878
|
return result
|
@@ -754,25 +962,17 @@
|
|
754
962
|
}
|
755
963
|
while (++argsIndex < argsLength) {
|
756
964
|
iterable = args[argsIndex];
|
757
|
-
if (iterable && objectTypes[typeof iterable]) {
|
758
|
-
var length = iterable.length; index = -1;
|
759
|
-
if (isArray(iterable)) {
|
760
|
-
while (++index < length) {
|
761
|
-
result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]
|
762
|
-
}
|
763
|
-
}
|
764
|
-
else {
|
965
|
+
if (iterable && objectTypes[typeof iterable]) {
|
765
966
|
var ownIndex = -1,
|
766
|
-
ownProps = objectTypes[typeof iterable]
|
767
|
-
length = ownProps.length;
|
967
|
+
ownProps = objectTypes[typeof iterable] && keys(iterable),
|
968
|
+
length = ownProps ? ownProps.length : 0;
|
768
969
|
|
769
970
|
while (++ownIndex < length) {
|
770
971
|
index = ownProps[ownIndex];
|
771
|
-
result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]
|
972
|
+
result[index] = callback ? callback(result[index], iterable[index]) : iterable[index];
|
772
973
|
}
|
773
|
-
}
|
774
974
|
}
|
775
|
-
}
|
975
|
+
}
|
776
976
|
return result
|
777
977
|
};
|
778
978
|
|
@@ -823,7 +1023,7 @@
|
|
823
1023
|
|
824
1024
|
// allows working with "Collections" methods without using their `callback`
|
825
1025
|
// argument, `index|key`, for this method's `callback`
|
826
|
-
if (typeof deep
|
1026
|
+
if (typeof deep != 'boolean' && deep != null) {
|
827
1027
|
thisArg = callback;
|
828
1028
|
callback = deep;
|
829
1029
|
deep = false;
|
@@ -868,8 +1068,9 @@
|
|
868
1068
|
return ctor(result.source, reFlags.exec(result));
|
869
1069
|
}
|
870
1070
|
// check for circular references and return corresponding clone
|
871
|
-
|
872
|
-
|
1071
|
+
var initedStack = !stackA;
|
1072
|
+
stackA || (stackA = getArray());
|
1073
|
+
stackB || (stackB = getArray());
|
873
1074
|
|
874
1075
|
var length = stackA.length;
|
875
1076
|
while (length--) {
|
@@ -899,6 +1100,10 @@
|
|
899
1100
|
result[key] = clone(objValue, deep, callback, undefined, stackA, stackB);
|
900
1101
|
});
|
901
1102
|
|
1103
|
+
if (initedStack) {
|
1104
|
+
releaseArray(stackA);
|
1105
|
+
releaseArray(stackB);
|
1106
|
+
}
|
902
1107
|
return result;
|
903
1108
|
}
|
904
1109
|
|
@@ -908,7 +1113,7 @@
|
|
908
1113
|
* `undefined`, cloning will be handled by the method instead. The `callback`
|
909
1114
|
* is bound to `thisArg` and invoked with one argument; (value).
|
910
1115
|
*
|
911
|
-
* Note: This
|
1116
|
+
* Note: This method is loosely based on the structured clone algorithm. Functions
|
912
1117
|
* and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and
|
913
1118
|
* objects created by constructors other than `Object` are cloned to plain `Object` objects.
|
914
1119
|
* See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.
|
@@ -975,25 +1180,17 @@
|
|
975
1180
|
argsLength = typeof guard == 'number' ? 2 : args.length;
|
976
1181
|
while (++argsIndex < argsLength) {
|
977
1182
|
iterable = args[argsIndex];
|
978
|
-
if (iterable && objectTypes[typeof iterable]) {
|
979
|
-
var length = iterable.length; index = -1;
|
980
|
-
if (isArray(iterable)) {
|
981
|
-
while (++index < length) {
|
982
|
-
if (typeof result[index] == 'undefined') result[index] = iterable[index]
|
983
|
-
}
|
984
|
-
}
|
985
|
-
else {
|
1183
|
+
if (iterable && objectTypes[typeof iterable]) {
|
986
1184
|
var ownIndex = -1,
|
987
|
-
ownProps = objectTypes[typeof iterable]
|
988
|
-
length = ownProps.length;
|
1185
|
+
ownProps = objectTypes[typeof iterable] && keys(iterable),
|
1186
|
+
length = ownProps ? ownProps.length : 0;
|
989
1187
|
|
990
1188
|
while (++ownIndex < length) {
|
991
1189
|
index = ownProps[ownIndex];
|
992
|
-
if (typeof result[index] == 'undefined') result[index] = iterable[index]
|
1190
|
+
if (typeof result[index] == 'undefined') result[index] = iterable[index];
|
993
1191
|
}
|
994
|
-
}
|
995
1192
|
}
|
996
|
-
}
|
1193
|
+
}
|
997
1194
|
return result
|
998
1195
|
};
|
999
1196
|
|
@@ -1062,8 +1259,7 @@
|
|
1062
1259
|
var index, iterable = collection, result = iterable;
|
1063
1260
|
if (!iterable) return result;
|
1064
1261
|
if (!objectTypes[typeof iterable]) return result;
|
1065
|
-
callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg);
|
1066
|
-
|
1262
|
+
callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg);
|
1067
1263
|
for (index in iterable) {
|
1068
1264
|
if (callback(iterable[index], index, collection) === false) return result;
|
1069
1265
|
}
|
@@ -1095,15 +1291,14 @@
|
|
1095
1291
|
var index, iterable = collection, result = iterable;
|
1096
1292
|
if (!iterable) return result;
|
1097
1293
|
if (!objectTypes[typeof iterable]) return result;
|
1098
|
-
callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg);
|
1099
|
-
|
1294
|
+
callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg);
|
1100
1295
|
var ownIndex = -1,
|
1101
|
-
ownProps = objectTypes[typeof iterable]
|
1102
|
-
length = ownProps.length;
|
1296
|
+
ownProps = objectTypes[typeof iterable] && keys(iterable),
|
1297
|
+
length = ownProps ? ownProps.length : 0;
|
1103
1298
|
|
1104
1299
|
while (++ownIndex < length) {
|
1105
1300
|
index = ownProps[ownIndex];
|
1106
|
-
if (callback(iterable[index], index, collection) === false) return result
|
1301
|
+
if (callback(iterable[index], index, collection) === false) return result;
|
1107
1302
|
}
|
1108
1303
|
return result
|
1109
1304
|
};
|
@@ -1395,8 +1590,9 @@
|
|
1395
1590
|
// assume cyclic structures are equal
|
1396
1591
|
// the algorithm for detecting cyclic structures is adapted from ES 5.1
|
1397
1592
|
// section 15.12.3, abstract operation `JO` (http://es5.github.com/#x15.12.3)
|
1398
|
-
|
1399
|
-
|
1593
|
+
var initedStack = !stackA;
|
1594
|
+
stackA || (stackA = getArray());
|
1595
|
+
stackB || (stackB = getArray());
|
1400
1596
|
|
1401
1597
|
var length = stackA.length;
|
1402
1598
|
while (length--) {
|
@@ -1458,6 +1654,10 @@
|
|
1458
1654
|
}
|
1459
1655
|
});
|
1460
1656
|
}
|
1657
|
+
if (initedStack) {
|
1658
|
+
releaseArray(stackA);
|
1659
|
+
releaseArray(stackB);
|
1660
|
+
}
|
1461
1661
|
return result;
|
1462
1662
|
}
|
1463
1663
|
|
@@ -1535,7 +1735,7 @@
|
|
1535
1735
|
// http://es5.github.com/#x8
|
1536
1736
|
// and avoid a V8 bug
|
1537
1737
|
// http://code.google.com/p/v8/issues/detail?id=2291
|
1538
|
-
return value
|
1738
|
+
return !!(value && objectTypes[typeof value]);
|
1539
1739
|
}
|
1540
1740
|
|
1541
1741
|
/**
|
@@ -1761,8 +1961,9 @@
|
|
1761
1961
|
stackA = args[4],
|
1762
1962
|
stackB = args[5];
|
1763
1963
|
} else {
|
1764
|
-
|
1765
|
-
|
1964
|
+
var initedStack = true;
|
1965
|
+
stackA = getArray();
|
1966
|
+
stackB = getArray();
|
1766
1967
|
|
1767
1968
|
// allows working with `_.reduce` and `_.reduceRight` without
|
1768
1969
|
// using their `callback` arguments, `index|key` and `collection`
|
@@ -1828,6 +2029,11 @@
|
|
1828
2029
|
object[key] = value;
|
1829
2030
|
});
|
1830
2031
|
}
|
2032
|
+
|
2033
|
+
if (initedStack) {
|
2034
|
+
releaseArray(stackA);
|
2035
|
+
releaseArray(stackB);
|
2036
|
+
}
|
1831
2037
|
return object;
|
1832
2038
|
}
|
1833
2039
|
|
@@ -1858,7 +2064,8 @@
|
|
1858
2064
|
* // => { 'name': 'moe' }
|
1859
2065
|
*/
|
1860
2066
|
function omit(object, callback, thisArg) {
|
1861
|
-
var
|
2067
|
+
var indexOf = getIndexOf(),
|
2068
|
+
isFunc = typeof callback == 'function',
|
1862
2069
|
result = {};
|
1863
2070
|
|
1864
2071
|
if (isFunc) {
|
@@ -1953,6 +2160,57 @@
|
|
1953
2160
|
return result;
|
1954
2161
|
}
|
1955
2162
|
|
2163
|
+
/**
|
2164
|
+
* An alternative to `_.reduce`, this method transforms an `object` to a new
|
2165
|
+
* `accumulator` object which is the result of running each of its elements
|
2166
|
+
* through the `callback`, with each `callback` execution potentially mutating
|
2167
|
+
* the `accumulator` object. The `callback` is bound to `thisArg` and invoked
|
2168
|
+
* with four arguments; (accumulator, value, key, object). Callbacks may exit
|
2169
|
+
* iteration early by explicitly returning `false`.
|
2170
|
+
*
|
2171
|
+
* @static
|
2172
|
+
* @memberOf _
|
2173
|
+
* @category Objects
|
2174
|
+
* @param {Array|Object} collection The collection to iterate over.
|
2175
|
+
* @param {Function} [callback=identity] The function called per iteration.
|
2176
|
+
* @param {Mixed} [accumulator] The custom accumulator value.
|
2177
|
+
* @param {Mixed} [thisArg] The `this` binding of `callback`.
|
2178
|
+
* @returns {Mixed} Returns the accumulated value.
|
2179
|
+
* @example
|
2180
|
+
*
|
2181
|
+
* var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) {
|
2182
|
+
* num *= num;
|
2183
|
+
* if (num % 2) {
|
2184
|
+
* return result.push(num) < 3;
|
2185
|
+
* }
|
2186
|
+
* });
|
2187
|
+
* // => [1, 9, 25]
|
2188
|
+
*
|
2189
|
+
* var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
|
2190
|
+
* result[key] = num * 3;
|
2191
|
+
* });
|
2192
|
+
* // => { 'a': 3, 'b': 6, 'c': 9 }
|
2193
|
+
*/
|
2194
|
+
function transform(object, callback, accumulator, thisArg) {
|
2195
|
+
var isArr = isArray(object);
|
2196
|
+
callback = lodash.createCallback(callback, thisArg, 4);
|
2197
|
+
|
2198
|
+
if (accumulator == null) {
|
2199
|
+
if (isArr) {
|
2200
|
+
accumulator = [];
|
2201
|
+
} else {
|
2202
|
+
var ctor = object && object.constructor,
|
2203
|
+
proto = ctor && ctor.prototype;
|
2204
|
+
|
2205
|
+
accumulator = createObject(proto);
|
2206
|
+
}
|
2207
|
+
}
|
2208
|
+
(isArr ? forEach : forOwn)(object, function(value, index, object) {
|
2209
|
+
return callback(accumulator, value, index, object);
|
2210
|
+
});
|
2211
|
+
return accumulator;
|
2212
|
+
}
|
2213
|
+
|
1956
2214
|
/**
|
1957
2215
|
* Creates an array composed of the own enumerable property values of `object`.
|
1958
2216
|
*
|
@@ -2042,11 +2300,12 @@
|
|
2042
2300
|
*/
|
2043
2301
|
function contains(collection, target, fromIndex) {
|
2044
2302
|
var index = -1,
|
2303
|
+
indexOf = getIndexOf(),
|
2045
2304
|
length = collection ? collection.length : 0,
|
2046
2305
|
result = false;
|
2047
2306
|
|
2048
2307
|
fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
|
2049
|
-
if (typeof length == 'number') {
|
2308
|
+
if (length && typeof length == 'number') {
|
2050
2309
|
result = (isString(collection)
|
2051
2310
|
? collection.indexOf(target, fromIndex)
|
2052
2311
|
: indexOf(collection, target, fromIndex)
|
@@ -2245,7 +2504,7 @@
|
|
2245
2504
|
*
|
2246
2505
|
* @static
|
2247
2506
|
* @memberOf _
|
2248
|
-
* @alias detect
|
2507
|
+
* @alias detect, findWhere
|
2249
2508
|
* @category Collections
|
2250
2509
|
* @param {Array|Object|String} collection The collection to iterate over.
|
2251
2510
|
* @param {Function|Object|String} [callback=identity] The function called per
|
@@ -2943,17 +3202,18 @@
|
|
2943
3202
|
|
2944
3203
|
callback = lodash.createCallback(callback, thisArg);
|
2945
3204
|
forEach(collection, function(value, key, collection) {
|
2946
|
-
result[++index] =
|
2947
|
-
|
2948
|
-
|
2949
|
-
|
2950
|
-
};
|
3205
|
+
var object = result[++index] = getObject();
|
3206
|
+
object.criteria = callback(value, key, collection);
|
3207
|
+
object.index = index;
|
3208
|
+
object.value = value;
|
2951
3209
|
});
|
2952
3210
|
|
2953
3211
|
length = result.length;
|
2954
3212
|
result.sort(compareAscending);
|
2955
3213
|
while (length--) {
|
2956
|
-
|
3214
|
+
var object = result[length];
|
3215
|
+
result[length] = object.value;
|
3216
|
+
releaseObject(object);
|
2957
3217
|
}
|
2958
3218
|
return result;
|
2959
3219
|
}
|
@@ -3051,17 +3311,31 @@
|
|
3051
3311
|
*/
|
3052
3312
|
function difference(array) {
|
3053
3313
|
var index = -1,
|
3314
|
+
indexOf = getIndexOf(),
|
3054
3315
|
length = array ? array.length : 0,
|
3055
|
-
|
3056
|
-
contains = cachedContains(flattened),
|
3316
|
+
seen = concat.apply(arrayRef, nativeSlice.call(arguments, 1)),
|
3057
3317
|
result = [];
|
3058
3318
|
|
3319
|
+
var isLarge = length >= largeArraySize && indexOf === basicIndexOf;
|
3320
|
+
|
3321
|
+
if (isLarge) {
|
3322
|
+
var cache = createCache(seen);
|
3323
|
+
if (cache) {
|
3324
|
+
indexOf = cacheIndexOf;
|
3325
|
+
seen = cache;
|
3326
|
+
} else {
|
3327
|
+
isLarge = false;
|
3328
|
+
}
|
3329
|
+
}
|
3059
3330
|
while (++index < length) {
|
3060
3331
|
var value = array[index];
|
3061
|
-
if (
|
3332
|
+
if (indexOf(seen, value) < 0) {
|
3062
3333
|
result.push(value);
|
3063
3334
|
}
|
3064
3335
|
}
|
3336
|
+
if (isLarge) {
|
3337
|
+
releaseObject(seen);
|
3338
|
+
}
|
3065
3339
|
return result;
|
3066
3340
|
}
|
3067
3341
|
|
@@ -3217,20 +3491,11 @@
|
|
3217
3491
|
* _.flatten(stooges, 'quotes');
|
3218
3492
|
* // => ['Oh, a wise guy, eh?', 'Poifect!', 'Spread out!', 'You knucklehead!']
|
3219
3493
|
*/
|
3220
|
-
function flatten(array, isShallow, callback
|
3494
|
+
var flatten = overloadWrapper(function flatten(array, isShallow, callback) {
|
3221
3495
|
var index = -1,
|
3222
3496
|
length = array ? array.length : 0,
|
3223
3497
|
result = [];
|
3224
3498
|
|
3225
|
-
// juggle arguments
|
3226
|
-
if (typeof isShallow != 'boolean' && isShallow != null) {
|
3227
|
-
thisArg = callback;
|
3228
|
-
callback = isShallow;
|
3229
|
-
isShallow = false;
|
3230
|
-
}
|
3231
|
-
if (callback != null) {
|
3232
|
-
callback = lodash.createCallback(callback, thisArg);
|
3233
|
-
}
|
3234
3499
|
while (++index < length) {
|
3235
3500
|
var value = array[index];
|
3236
3501
|
if (callback) {
|
@@ -3244,7 +3509,7 @@
|
|
3244
3509
|
}
|
3245
3510
|
}
|
3246
3511
|
return result;
|
3247
|
-
}
|
3512
|
+
});
|
3248
3513
|
|
3249
3514
|
/**
|
3250
3515
|
* Gets the index at which the first occurrence of `value` is found using
|
@@ -3271,21 +3536,14 @@
|
|
3271
3536
|
* // => 2
|
3272
3537
|
*/
|
3273
3538
|
function indexOf(array, value, fromIndex) {
|
3274
|
-
var index = -1,
|
3275
|
-
length = array ? array.length : 0;
|
3276
|
-
|
3277
3539
|
if (typeof fromIndex == 'number') {
|
3278
|
-
|
3540
|
+
var length = array ? array.length : 0;
|
3541
|
+
fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);
|
3279
3542
|
} else if (fromIndex) {
|
3280
|
-
index = sortedIndex(array, value);
|
3543
|
+
var index = sortedIndex(array, value);
|
3281
3544
|
return array[index] === value ? index : -1;
|
3282
3545
|
}
|
3283
|
-
|
3284
|
-
if (array[index] === value) {
|
3285
|
-
return index;
|
3286
|
-
}
|
3287
|
-
}
|
3288
|
-
return -1;
|
3546
|
+
return array ? basicIndexOf(array, value, fromIndex) : -1;
|
3289
3547
|
}
|
3290
3548
|
|
3291
3549
|
/**
|
@@ -3381,35 +3639,45 @@
|
|
3381
3639
|
function intersection(array) {
|
3382
3640
|
var args = arguments,
|
3383
3641
|
argsLength = args.length,
|
3384
|
-
|
3642
|
+
argsIndex = -1,
|
3643
|
+
caches = getArray(),
|
3385
3644
|
index = -1,
|
3645
|
+
indexOf = getIndexOf(),
|
3386
3646
|
length = array ? array.length : 0,
|
3387
|
-
isLarge = length >= largeArraySize,
|
3388
3647
|
result = [],
|
3389
|
-
seen =
|
3648
|
+
seen = getArray();
|
3390
3649
|
|
3650
|
+
while (++argsIndex < argsLength) {
|
3651
|
+
var value = args[argsIndex];
|
3652
|
+
caches[argsIndex] = indexOf === basicIndexOf &&
|
3653
|
+
(value ? value.length : 0) >= largeArraySize &&
|
3654
|
+
createCache(argsIndex ? args[argsIndex] : seen);
|
3655
|
+
}
|
3391
3656
|
outer:
|
3392
3657
|
while (++index < length) {
|
3393
|
-
var
|
3394
|
-
|
3395
|
-
|
3396
|
-
|
3397
|
-
|
3398
|
-
|
3399
|
-
}
|
3400
|
-
if (inited || indexOf(seen, value) < 0) {
|
3401
|
-
if (isLarge) {
|
3402
|
-
seen.push(value);
|
3403
|
-
}
|
3404
|
-
var argsIndex = argsLength;
|
3658
|
+
var cache = caches[0];
|
3659
|
+
value = array[index];
|
3660
|
+
|
3661
|
+
if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) {
|
3662
|
+
argsIndex = argsLength;
|
3663
|
+
(cache || seen).push(value);
|
3405
3664
|
while (--argsIndex) {
|
3406
|
-
|
3665
|
+
cache = caches[argsIndex];
|
3666
|
+
if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {
|
3407
3667
|
continue outer;
|
3408
3668
|
}
|
3409
3669
|
}
|
3410
3670
|
result.push(value);
|
3411
3671
|
}
|
3412
3672
|
}
|
3673
|
+
while (argsLength--) {
|
3674
|
+
cache = caches[argsLength];
|
3675
|
+
if (cache) {
|
3676
|
+
releaseObject(cache);
|
3677
|
+
}
|
3678
|
+
}
|
3679
|
+
releaseArray(caches);
|
3680
|
+
releaseArray(seen);
|
3413
3681
|
return result;
|
3414
3682
|
}
|
3415
3683
|
|
@@ -3738,7 +4006,7 @@
|
|
3738
4006
|
* Creates a duplicate-value-free version of the `array` using strict equality
|
3739
4007
|
* for comparisons, i.e. `===`. If the `array` is already sorted, passing `true`
|
3740
4008
|
* for `isSorted` will run a faster algorithm. If `callback` is passed, each
|
3741
|
-
* element of `array` is passed through
|
4009
|
+
* element of `array` is passed through the `callback` before uniqueness is computed.
|
3742
4010
|
* The `callback` is bound to `thisArg` and invoked with three arguments; (value, index, array).
|
3743
4011
|
*
|
3744
4012
|
* If a property name is passed for `callback`, the created "_.pluck" style
|
@@ -3767,50 +4035,42 @@
|
|
3767
4035
|
* _.uniq([1, 1, 2, 2, 3], true);
|
3768
4036
|
* // => [1, 2, 3]
|
3769
4037
|
*
|
3770
|
-
* _.uniq([
|
3771
|
-
* // => [
|
4038
|
+
* _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });
|
4039
|
+
* // => ['A', 'b', 'C']
|
3772
4040
|
*
|
3773
|
-
* _.uniq([1, 2, 1.5,
|
3774
|
-
* // => [1, 2, 3]
|
4041
|
+
* _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);
|
4042
|
+
* // => [1, 2.5, 3]
|
3775
4043
|
*
|
3776
4044
|
* // using "_.pluck" callback shorthand
|
3777
4045
|
* _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
|
3778
4046
|
* // => [{ 'x': 1 }, { 'x': 2 }]
|
3779
4047
|
*/
|
3780
|
-
|
4048
|
+
var uniq = overloadWrapper(function(array, isSorted, callback) {
|
3781
4049
|
var index = -1,
|
4050
|
+
indexOf = getIndexOf(),
|
3782
4051
|
length = array ? array.length : 0,
|
3783
|
-
result = []
|
3784
|
-
|
4052
|
+
result = [];
|
4053
|
+
|
4054
|
+
var isLarge = !isSorted && length >= largeArraySize && indexOf === basicIndexOf,
|
4055
|
+
seen = (callback || isLarge) ? getArray() : result;
|
3785
4056
|
|
3786
|
-
// juggle arguments
|
3787
|
-
if (typeof isSorted != 'boolean' && isSorted != null) {
|
3788
|
-
thisArg = callback;
|
3789
|
-
callback = isSorted;
|
3790
|
-
isSorted = false;
|
3791
|
-
}
|
3792
|
-
// init value cache for large arrays
|
3793
|
-
var isLarge = !isSorted && length >= largeArraySize;
|
3794
4057
|
if (isLarge) {
|
3795
|
-
var cache =
|
3796
|
-
|
3797
|
-
|
3798
|
-
|
3799
|
-
|
4058
|
+
var cache = createCache(seen);
|
4059
|
+
if (cache) {
|
4060
|
+
indexOf = cacheIndexOf;
|
4061
|
+
seen = cache;
|
4062
|
+
} else {
|
4063
|
+
isLarge = false;
|
4064
|
+
seen = callback ? seen : (releaseArray(seen), result);
|
4065
|
+
}
|
3800
4066
|
}
|
3801
4067
|
while (++index < length) {
|
3802
4068
|
var value = array[index],
|
3803
4069
|
computed = callback ? callback(value, index, array) : value;
|
3804
4070
|
|
3805
|
-
if (isLarge) {
|
3806
|
-
var key = keyPrefix + computed;
|
3807
|
-
var inited = cache[key]
|
3808
|
-
? !(seen = cache[key])
|
3809
|
-
: (seen = cache[key] = []);
|
3810
|
-
}
|
3811
4071
|
if (isSorted
|
3812
4072
|
? !index || seen[seen.length - 1] !== computed
|
3813
|
-
:
|
4073
|
+
: indexOf(seen, computed) < 0
|
3814
4074
|
) {
|
3815
4075
|
if (callback || isLarge) {
|
3816
4076
|
seen.push(computed);
|
@@ -3818,8 +4078,14 @@
|
|
3818
4078
|
result.push(value);
|
3819
4079
|
}
|
3820
4080
|
}
|
4081
|
+
if (isLarge) {
|
4082
|
+
releaseArray(seen.array);
|
4083
|
+
releaseObject(seen);
|
4084
|
+
} else if (callback) {
|
4085
|
+
releaseArray(seen);
|
4086
|
+
}
|
3821
4087
|
return result;
|
3822
|
-
}
|
4088
|
+
});
|
3823
4089
|
|
3824
4090
|
/**
|
3825
4091
|
* The inverse of `_.zip`, this method splits groups of elements into arrays
|
@@ -3837,17 +4103,11 @@
|
|
3837
4103
|
*/
|
3838
4104
|
function unzip(array) {
|
3839
4105
|
var index = -1,
|
3840
|
-
length = array ? array
|
3841
|
-
|
3842
|
-
result = Array(tupleLength);
|
4106
|
+
length = array ? max(pluck(array, 'length')) : 0,
|
4107
|
+
result = Array(length < 0 ? 0 : length);
|
3843
4108
|
|
3844
4109
|
while (++index < length) {
|
3845
|
-
|
3846
|
-
tuple = array[index];
|
3847
|
-
|
3848
|
-
while (++tupleIndex < tupleLength) {
|
3849
|
-
(result[tupleIndex] || (result[tupleIndex] = Array(length)))[index] = tuple[tupleIndex];
|
3850
|
-
}
|
4110
|
+
result[index] = pluck(array, index);
|
3851
4111
|
}
|
3852
4112
|
return result;
|
3853
4113
|
}
|
@@ -3888,14 +4148,7 @@
|
|
3888
4148
|
* // => [['moe', 30, true], ['larry', 40, false]]
|
3889
4149
|
*/
|
3890
4150
|
function zip(array) {
|
3891
|
-
|
3892
|
-
length = array ? max(pluck(arguments, 'length')) : 0,
|
3893
|
-
result = Array(length);
|
3894
|
-
|
3895
|
-
while (++index < length) {
|
3896
|
-
result[index] = pluck(arguments, index);
|
3897
|
-
}
|
3898
|
-
return result;
|
4151
|
+
return array ? unzip(arguments) : [];
|
3899
4152
|
}
|
3900
4153
|
|
3901
4154
|
/**
|
@@ -4171,27 +4424,27 @@
|
|
4171
4424
|
return result;
|
4172
4425
|
};
|
4173
4426
|
}
|
4174
|
-
if (typeof thisArg
|
4175
|
-
|
4176
|
-
|
4177
|
-
|
4178
|
-
|
4179
|
-
|
4180
|
-
|
4181
|
-
|
4182
|
-
|
4183
|
-
|
4184
|
-
|
4185
|
-
if (argCount === 4) {
|
4186
|
-
return function(accumulator, value, index, collection) {
|
4187
|
-
return func.call(thisArg, accumulator, value, index, collection);
|
4188
|
-
};
|
4189
|
-
}
|
4190
|
-
return function(value, index, collection) {
|
4191
|
-
return func.call(thisArg, value, index, collection);
|
4427
|
+
if (typeof thisArg == 'undefined' || (reThis && !reThis.test(fnToString.call(func)))) {
|
4428
|
+
return func;
|
4429
|
+
}
|
4430
|
+
if (argCount === 1) {
|
4431
|
+
return function(value) {
|
4432
|
+
return func.call(thisArg, value);
|
4433
|
+
};
|
4434
|
+
}
|
4435
|
+
if (argCount === 2) {
|
4436
|
+
return function(a, b) {
|
4437
|
+
return func.call(thisArg, a, b);
|
4192
4438
|
};
|
4193
4439
|
}
|
4194
|
-
|
4440
|
+
if (argCount === 4) {
|
4441
|
+
return function(accumulator, value, index, collection) {
|
4442
|
+
return func.call(thisArg, accumulator, value, index, collection);
|
4443
|
+
};
|
4444
|
+
}
|
4445
|
+
return function(value, index, collection) {
|
4446
|
+
return func.call(thisArg, value, index, collection);
|
4447
|
+
};
|
4195
4448
|
}
|
4196
4449
|
|
4197
4450
|
/**
|
@@ -4212,6 +4465,7 @@
|
|
4212
4465
|
* @param {Number} wait The number of milliseconds to delay.
|
4213
4466
|
* @param {Object} options The options object.
|
4214
4467
|
* [leading=false] A boolean to specify execution on the leading edge of the timeout.
|
4468
|
+
* [maxWait] The maximum time `func` is allowed to be delayed before it's called.
|
4215
4469
|
* [trailing=true] A boolean to specify execution on the trailing edge of the timeout.
|
4216
4470
|
* @returns {Function} Returns the new debounced function.
|
4217
4471
|
* @example
|
@@ -4226,34 +4480,80 @@
|
|
4226
4480
|
*/
|
4227
4481
|
function debounce(func, wait, options) {
|
4228
4482
|
var args,
|
4229
|
-
inited,
|
4230
4483
|
result,
|
4231
4484
|
thisArg,
|
4232
|
-
|
4485
|
+
callCount = 0,
|
4486
|
+
lastCalled = 0,
|
4487
|
+
maxWait = false,
|
4488
|
+
maxTimeoutId = null,
|
4489
|
+
timeoutId = null,
|
4233
4490
|
trailing = true;
|
4234
4491
|
|
4492
|
+
function clear() {
|
4493
|
+
clearTimeout(maxTimeoutId);
|
4494
|
+
clearTimeout(timeoutId);
|
4495
|
+
callCount = 0;
|
4496
|
+
maxTimeoutId = timeoutId = null;
|
4497
|
+
}
|
4498
|
+
|
4235
4499
|
function delayed() {
|
4236
|
-
|
4237
|
-
|
4500
|
+
var isCalled = trailing && (!leading || callCount > 1);
|
4501
|
+
clear();
|
4502
|
+
if (isCalled) {
|
4503
|
+
if (maxWait !== false) {
|
4504
|
+
lastCalled = new Date;
|
4505
|
+
}
|
4238
4506
|
result = func.apply(thisArg, args);
|
4239
4507
|
}
|
4240
4508
|
}
|
4509
|
+
|
4510
|
+
function maxDelayed() {
|
4511
|
+
clear();
|
4512
|
+
if (trailing || (maxWait !== wait)) {
|
4513
|
+
lastCalled = new Date;
|
4514
|
+
result = func.apply(thisArg, args);
|
4515
|
+
}
|
4516
|
+
}
|
4517
|
+
|
4518
|
+
wait = nativeMax(0, wait || 0);
|
4241
4519
|
if (options === true) {
|
4242
4520
|
var leading = true;
|
4243
4521
|
trailing = false;
|
4244
|
-
} else if (options
|
4522
|
+
} else if (isObject(options)) {
|
4245
4523
|
leading = options.leading;
|
4524
|
+
maxWait = 'maxWait' in options && nativeMax(wait, options.maxWait || 0);
|
4246
4525
|
trailing = 'trailing' in options ? options.trailing : trailing;
|
4247
4526
|
}
|
4248
4527
|
return function() {
|
4249
4528
|
args = arguments;
|
4250
4529
|
thisArg = this;
|
4530
|
+
callCount++;
|
4531
|
+
|
4532
|
+
// avoid issues with Titanium and `undefined` timeout ids
|
4533
|
+
// https://github.com/appcelerator/titanium_mobile/blob/3_1_0_GA/android/titanium/src/java/ti/modules/titanium/TitaniumModule.java#L185-L192
|
4251
4534
|
clearTimeout(timeoutId);
|
4252
4535
|
|
4253
|
-
if (
|
4254
|
-
|
4255
|
-
|
4536
|
+
if (maxWait === false) {
|
4537
|
+
if (leading && callCount < 2) {
|
4538
|
+
result = func.apply(thisArg, args);
|
4539
|
+
}
|
4256
4540
|
} else {
|
4541
|
+
var now = new Date;
|
4542
|
+
if (!maxTimeoutId && !leading) {
|
4543
|
+
lastCalled = now;
|
4544
|
+
}
|
4545
|
+
var remaining = maxWait - (now - lastCalled);
|
4546
|
+
if (remaining <= 0) {
|
4547
|
+
clearTimeout(maxTimeoutId);
|
4548
|
+
maxTimeoutId = null;
|
4549
|
+
lastCalled = now;
|
4550
|
+
result = func.apply(thisArg, args);
|
4551
|
+
}
|
4552
|
+
else if (!maxTimeoutId) {
|
4553
|
+
maxTimeoutId = setTimeout(maxDelayed, remaining);
|
4554
|
+
}
|
4555
|
+
}
|
4556
|
+
if (wait !== maxWait) {
|
4257
4557
|
timeoutId = setTimeout(delayed, wait);
|
4258
4558
|
}
|
4259
4559
|
return result;
|
@@ -4311,7 +4611,8 @@
|
|
4311
4611
|
* passed, it will be used to determine the cache key for storing the result
|
4312
4612
|
* based on the arguments passed to the memoized function. By default, the first
|
4313
4613
|
* argument passed to the memoized function is used as the cache key. The `func`
|
4314
|
-
* is executed with the `this` binding of the memoized function.
|
4614
|
+
* is executed with the `this` binding of the memoized function. The result
|
4615
|
+
* cache is exposed as the `cache` property on the memoized function.
|
4315
4616
|
*
|
4316
4617
|
* @static
|
4317
4618
|
* @memberOf _
|
@@ -4326,13 +4627,16 @@
|
|
4326
4627
|
* });
|
4327
4628
|
*/
|
4328
4629
|
function memoize(func, resolver) {
|
4329
|
-
|
4330
|
-
|
4331
|
-
|
4630
|
+
function memoized() {
|
4631
|
+
var cache = memoized.cache,
|
4632
|
+
key = keyPrefix + (resolver ? resolver.apply(this, arguments) : arguments[0]);
|
4633
|
+
|
4332
4634
|
return hasOwnProperty.call(cache, key)
|
4333
4635
|
? cache[key]
|
4334
4636
|
: (cache[key] = func.apply(this, arguments));
|
4335
|
-
}
|
4637
|
+
}
|
4638
|
+
memoized.cache = {};
|
4639
|
+
return memoized;
|
4336
4640
|
}
|
4337
4641
|
|
4338
4642
|
/**
|
@@ -4452,47 +4756,23 @@
|
|
4452
4756
|
* }));
|
4453
4757
|
*/
|
4454
4758
|
function throttle(func, wait, options) {
|
4455
|
-
var
|
4456
|
-
result,
|
4457
|
-
thisArg,
|
4458
|
-
timeoutId,
|
4459
|
-
lastCalled = 0,
|
4460
|
-
leading = true,
|
4759
|
+
var leading = true,
|
4461
4760
|
trailing = true;
|
4462
4761
|
|
4463
|
-
function trailingCall() {
|
4464
|
-
timeoutId = null;
|
4465
|
-
if (trailing) {
|
4466
|
-
lastCalled = new Date;
|
4467
|
-
result = func.apply(thisArg, args);
|
4468
|
-
}
|
4469
|
-
}
|
4470
4762
|
if (options === false) {
|
4471
4763
|
leading = false;
|
4472
|
-
} else if (options
|
4764
|
+
} else if (isObject(options)) {
|
4473
4765
|
leading = 'leading' in options ? options.leading : leading;
|
4474
4766
|
trailing = 'trailing' in options ? options.trailing : trailing;
|
4475
4767
|
}
|
4476
|
-
|
4477
|
-
|
4478
|
-
|
4479
|
-
|
4480
|
-
}
|
4481
|
-
var remaining = wait - (now - lastCalled);
|
4482
|
-
args = arguments;
|
4483
|
-
thisArg = this;
|
4768
|
+
options = getObject();
|
4769
|
+
options.leading = leading;
|
4770
|
+
options.maxWait = wait;
|
4771
|
+
options.trailing = trailing;
|
4484
4772
|
|
4485
|
-
|
4486
|
-
|
4487
|
-
|
4488
|
-
lastCalled = now;
|
4489
|
-
result = func.apply(thisArg, args);
|
4490
|
-
}
|
4491
|
-
else if (!timeoutId) {
|
4492
|
-
timeoutId = setTimeout(trailingCall, remaining);
|
4493
|
-
}
|
4494
|
-
return result;
|
4495
|
-
};
|
4773
|
+
var result = debounce(func, wait, options);
|
4774
|
+
releaseObject(options);
|
4775
|
+
return result;
|
4496
4776
|
}
|
4497
4777
|
|
4498
4778
|
/**
|
@@ -4545,7 +4825,7 @@
|
|
4545
4825
|
}
|
4546
4826
|
|
4547
4827
|
/**
|
4548
|
-
* This
|
4828
|
+
* This method returns the first argument passed to it.
|
4549
4829
|
*
|
4550
4830
|
* @static
|
4551
4831
|
* @memberOf _
|
@@ -4594,7 +4874,7 @@
|
|
4594
4874
|
|
4595
4875
|
push.apply(args, arguments);
|
4596
4876
|
var result = func.apply(lodash, args);
|
4597
|
-
return (value && typeof value == 'object' && value
|
4877
|
+
return (value && typeof value == 'object' && value === result)
|
4598
4878
|
? this
|
4599
4879
|
: new lodashWrapper(result);
|
4600
4880
|
};
|
@@ -4668,8 +4948,13 @@
|
|
4668
4948
|
if (max == null) {
|
4669
4949
|
max = min;
|
4670
4950
|
min = 0;
|
4951
|
+
} else {
|
4952
|
+
max = +max || 0;
|
4671
4953
|
}
|
4672
|
-
|
4954
|
+
var rand = nativeRandom();
|
4955
|
+
return (min % 1 || max % 1)
|
4956
|
+
? min + nativeMin(rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1))), max)
|
4957
|
+
: min + floor(rand * (max - min + 1));
|
4673
4958
|
}
|
4674
4959
|
|
4675
4960
|
/**
|
@@ -5072,6 +5357,7 @@
|
|
5072
5357
|
lodash.throttle = throttle;
|
5073
5358
|
lodash.times = times;
|
5074
5359
|
lodash.toArray = toArray;
|
5360
|
+
lodash.transform = transform;
|
5075
5361
|
lodash.union = union;
|
5076
5362
|
lodash.uniq = uniq;
|
5077
5363
|
lodash.unzip = unzip;
|
@@ -5096,6 +5382,10 @@
|
|
5096
5382
|
// add functions to `lodash.prototype`
|
5097
5383
|
mixin(lodash);
|
5098
5384
|
|
5385
|
+
// add Underscore compat
|
5386
|
+
lodash.chain = lodash;
|
5387
|
+
lodash.prototype.chain = function() { return this; };
|
5388
|
+
|
5099
5389
|
/*--------------------------------------------------------------------------*/
|
5100
5390
|
|
5101
5391
|
// add functions that return unwrapped values when chaining
|
@@ -5147,6 +5437,7 @@
|
|
5147
5437
|
lodash.all = every;
|
5148
5438
|
lodash.any = some;
|
5149
5439
|
lodash.detect = find;
|
5440
|
+
lodash.findWhere = find;
|
5150
5441
|
lodash.foldl = reduce;
|
5151
5442
|
lodash.foldr = reduceRight;
|
5152
5443
|
lodash.include = contains;
|
@@ -5192,7 +5483,7 @@
|
|
5192
5483
|
* @memberOf _
|
5193
5484
|
* @type String
|
5194
5485
|
*/
|
5195
|
-
lodash.VERSION = '1.
|
5486
|
+
lodash.VERSION = '1.3.1';
|
5196
5487
|
|
5197
5488
|
// add "Chaining" functions to the wrapper
|
5198
5489
|
lodash.prototype.toString = wrapperToString;
|