lodash-rails 1.2.1 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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;
|