mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-02 16:17:50 +00:00
Compare commits
4615 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
772c461a33 | ||
|
|
110ca4d1b5 | ||
|
|
aafb05b675 | ||
|
|
ff6fc56a15 | ||
|
|
2dfbe9fe77 | ||
|
|
4a0fe2c17b | ||
|
|
9f7e626b9a | ||
|
|
f2985bda5f | ||
|
|
1517745a6a | ||
|
|
887cb55919 | ||
|
|
5c42d0ef31 | ||
|
|
837d47a309 | ||
|
|
f3766cf889 | ||
|
|
2b8b63e59f | ||
|
|
d64583b743 | ||
|
|
9ec65d5ed5 | ||
|
|
9fe6afcdcc | ||
|
|
6a4e0fb41b | ||
|
|
b570884bb3 | ||
|
|
8f8f8e288c | ||
|
|
8698a5e0e8 | ||
|
|
ad5e30e189 | ||
|
|
19ee0c74f8 | ||
|
|
007e5aa27a | ||
|
|
2509f562b5 | ||
|
|
a58a276ffd | ||
|
|
1a5b9dcce1 | ||
|
|
1240a0dfdd | ||
|
|
0194169e79 | ||
|
|
a71c19e1b5 | ||
|
|
bfbfa719ff | ||
|
|
49389d0a2f | ||
|
|
e380062403 | ||
|
|
b83abfa9c1 | ||
|
|
48dbf203a5 | ||
|
|
23768398c5 | ||
|
|
ab73503859 | ||
|
|
a4f7d4cc2a | ||
|
|
cca5ac60d6 | ||
|
|
9f7f9fc3c5 | ||
|
|
6e2fb92e9a | ||
|
|
4f702e2381 | ||
|
|
b188f903ce | ||
|
|
7b93dc9c32 | ||
|
|
664d66a89e | ||
|
|
d9dc0e6fd1 | ||
|
|
53168e4cfd | ||
|
|
7998632685 | ||
|
|
86f2a1061c | ||
|
|
9ca02a448e | ||
|
|
17091d3a0e | ||
|
|
c94b1488e9 | ||
|
|
7b2274cb44 | ||
|
|
7c27a6f51e | ||
|
|
e91371d406 | ||
|
|
e878559fb9 | ||
|
|
36af8de116 | ||
|
|
09dd3a8fea | ||
|
|
5dd6b90692 | ||
|
|
97fd94744e | ||
|
|
0da3674d5e | ||
|
|
01d530d65e | ||
|
|
10dd42b6e4 | ||
|
|
ba2d3f7704 | ||
|
|
607fe2a5f6 | ||
|
|
4643679d79 | ||
|
|
04180c7c96 | ||
|
|
3846348f8a | ||
|
|
dc2fc9428d | ||
|
|
6e399ce311 | ||
|
|
641b544801 | ||
|
|
761a100397 | ||
|
|
cf1a4f893f | ||
|
|
19613be861 | ||
|
|
c163659713 | ||
|
|
aae02af265 | ||
|
|
cb96bf15b7 | ||
|
|
c006c28f55 | ||
|
|
d358d00531 | ||
|
|
abcebb4f48 | ||
|
|
6e74724c0f | ||
|
|
c5f6c43326 | ||
|
|
a9e8c0ba76 | ||
|
|
5388d8a7b0 | ||
|
|
ee499b36ea | ||
|
|
13e4b959a4 | ||
|
|
5a336403f9 | ||
|
|
26265c011a | ||
|
|
4a390bca1c | ||
|
|
af46ead30d | ||
|
|
de0f936e92 | ||
|
|
bf9dcfe89c | ||
|
|
df0ecd2a93 | ||
|
|
b3ebb3c3d3 | ||
|
|
0bead0c69a | ||
|
|
a055b0a04f | ||
|
|
d6f6007692 | ||
|
|
8ee7ffb2ab | ||
|
|
40ff04911e | ||
|
|
a3676618af | ||
|
|
b1ed66c6f5 | ||
|
|
53b3f81abe | ||
|
|
bd2428dde5 | ||
|
|
b7ae5f0885 | ||
|
|
8c5b64c7d7 | ||
|
|
641112dd4d | ||
|
|
1c47acd040 | ||
|
|
d58d6f45cc | ||
|
|
7efa921bab | ||
|
|
feafdb3c6a | ||
|
|
784ee6a086 | ||
|
|
3014f20b6c | ||
|
|
40bb035b09 | ||
|
|
ba32bf3b8d | ||
|
|
e9edc06aaf | ||
|
|
c91196d240 | ||
|
|
08c7bf3c85 | ||
|
|
046470a8db | ||
|
|
2b1eedb036 | ||
|
|
02bea6534c | ||
|
|
6f4099c20b | ||
|
|
39735df82f | ||
|
|
5062f22839 | ||
|
|
e397707dc9 | ||
|
|
66d6e226a9 | ||
|
|
fbfa578c11 | ||
|
|
5cd7208ef3 | ||
|
|
e5bc6a0315 | ||
|
|
495c890aac | ||
|
|
5fe4a1b05d | ||
|
|
d8bf62995b | ||
|
|
e36f7e7161 | ||
|
|
285b667c3e | ||
|
|
aefbdbb6d5 | ||
|
|
8debfc6e6c | ||
|
|
c9ca772a32 | ||
|
|
dc65792776 | ||
|
|
18ae1d7c18 | ||
|
|
d790a1b3c6 | ||
|
|
349c627110 | ||
|
|
db23fcfe9f | ||
|
|
d5a6a75639 | ||
|
|
404a7181a8 | ||
|
|
e392b8e240 | ||
|
|
6752d75ad0 | ||
|
|
e00d9821a8 | ||
|
|
1cf7093f46 | ||
|
|
88708ec00f | ||
|
|
984b0af883 | ||
|
|
8810754ada | ||
|
|
0d340b378b | ||
|
|
e30dc968ef | ||
|
|
ea942b0642 | ||
|
|
7e9d49b300 | ||
|
|
ce60ac4274 | ||
|
|
a04fc310b4 | ||
|
|
4a805ea666 | ||
|
|
1595651780 | ||
|
|
fc85cac91d | ||
|
|
73134f9dcc | ||
|
|
eb72bbe6f7 | ||
|
|
a5ae078f8f | ||
|
|
1cd9dc49a9 | ||
|
|
d64a97195b | ||
|
|
c6a3ace553 | ||
|
|
497d57ca95 | ||
|
|
3a07b411fb | ||
|
|
b0c2a8d5fd | ||
|
|
e404d214aa | ||
|
|
7f295dc6e8 | ||
|
|
d2a8203efb | ||
|
|
33bfa8f961 | ||
|
|
f944254cb8 | ||
|
|
30339cfd86 | ||
|
|
7dd5549b05 | ||
|
|
b6b59d93d7 | ||
|
|
5af68bbf94 | ||
|
|
db7debd3da | ||
|
|
29bc8d965b | ||
|
|
daeb55e99d | ||
|
|
fa4d85897c | ||
|
|
983363e0cd | ||
|
|
d95dad76b8 | ||
|
|
18f74aa5b2 | ||
|
|
e96a8f7bc6 | ||
|
|
29f39be6ad | ||
|
|
7a17967d79 | ||
|
|
de5bd32aba | ||
|
|
199b2e1a3a | ||
|
|
a43e4f10ef | ||
|
|
5522e4641d | ||
|
|
6c82ea8fc3 | ||
|
|
b4b45b7139 | ||
|
|
7ebb033016 | ||
|
|
163fdb46f0 | ||
|
|
b38cf204f7 | ||
|
|
fe5381b0f4 | ||
|
|
c99e7f1337 | ||
|
|
b61b674fec | ||
|
|
3bdaf99cfa | ||
|
|
6c85e7015a | ||
|
|
9788f7101b | ||
|
|
d0d5a3802d | ||
|
|
1f160b31ff | ||
|
|
13659e87cb | ||
|
|
ac9b0bfc1b | ||
|
|
07f7a3f3c5 | ||
|
|
22984f4eb2 | ||
|
|
2286283f98 | ||
|
|
5ca26e6ae0 | ||
|
|
e7c3afc1e5 | ||
|
|
82e9b4197b | ||
|
|
820939f014 | ||
|
|
e4c9916e17 | ||
|
|
ce88b120eb | ||
|
|
23c5101227 | ||
|
|
de3eeb2d47 | ||
|
|
03f7205e6d | ||
|
|
7bf7ab954b | ||
|
|
97612f3b31 | ||
|
|
71702d058c | ||
|
|
6a4164d9f3 | ||
|
|
d3b0eae84c | ||
|
|
0105b93f38 | ||
|
|
cae0d2c707 | ||
|
|
dcb1572240 | ||
|
|
e20f43018b | ||
|
|
01e176694f | ||
|
|
a239ccaa9a | ||
|
|
b97a05b7f2 | ||
|
|
c86754afde | ||
|
|
95da9c0dd4 | ||
|
|
567171993b | ||
|
|
60a0d554a0 | ||
|
|
f87af6c642 | ||
|
|
df849e8698 | ||
|
|
7a8ef7aeb7 | ||
|
|
25c7c8b153 | ||
|
|
8048f015e5 | ||
|
|
8a7fce41bb | ||
|
|
094a272443 | ||
|
|
552be2f5fb | ||
|
|
d99954133c | ||
|
|
c49ace5587 | ||
|
|
258ad020ed | ||
|
|
59de939c1d | ||
|
|
9d2d4f39bc | ||
|
|
f555cd2303 | ||
|
|
fcb80e926d | ||
|
|
3f1fd98bef | ||
|
|
e2280db917 | ||
|
|
627e92e7e0 | ||
|
|
5a9ca34a92 | ||
|
|
880ffcb1f6 | ||
|
|
4e35d970af | ||
|
|
42a4e09f91 | ||
|
|
b13b17e801 | ||
|
|
68d0238044 | ||
|
|
82b4f4147e | ||
|
|
6cbd2c4188 | ||
|
|
78982f3074 | ||
|
|
345746f7ab | ||
|
|
741a7b9caa | ||
|
|
7544c8fac8 | ||
|
|
a46169329d | ||
|
|
9aa56630ab | ||
|
|
01819e7a5a | ||
|
|
bae497ec5a | ||
|
|
68e0c78602 | ||
|
|
6296afd279 | ||
|
|
6d58fe912d | ||
|
|
0c45957096 | ||
|
|
aa311bd792 | ||
|
|
8858cdbe8c | ||
|
|
9d033247e9 | ||
|
|
cacae31af3 | ||
|
|
759a44e2b8 | ||
|
|
2fb778413b | ||
|
|
473d059efd | ||
|
|
67cd43d97a | ||
|
|
b77248c975 | ||
|
|
6bc58a16f6 | ||
|
|
0edbd96bb5 | ||
|
|
6ecc675670 | ||
|
|
c0a6f051fc | ||
|
|
6bc0aba800 | ||
|
|
6949f71516 | ||
|
|
f6c6de40f1 | ||
|
|
fdea9a447f | ||
|
|
2e02636fc1 | ||
|
|
17b9646c0b | ||
|
|
0a3d7e7cbc | ||
|
|
a62d70e80c | ||
|
|
96bbf74207 | ||
|
|
6cfe7fa5ea | ||
|
|
efc61ea70d | ||
|
|
e752b26f9e | ||
|
|
6b19ca1c11 | ||
|
|
42e01fd37b | ||
|
|
1df18a3e10 | ||
|
|
f31fb8bd34 | ||
|
|
1d54d868e3 | ||
|
|
4b801f423b | ||
|
|
96ef2110ce | ||
|
|
84763cab26 | ||
|
|
fc2ce9a021 | ||
|
|
a5c1421c6b | ||
|
|
1a54e43a24 | ||
|
|
1ab5a20784 | ||
|
|
1634388534 | ||
|
|
455afb0019 | ||
|
|
349dfbf182 | ||
|
|
b081b3ae2d | ||
|
|
110f86f803 | ||
|
|
ace771d4e9 | ||
|
|
7544166d11 | ||
|
|
ff5f06b9f0 | ||
|
|
06395f8436 | ||
|
|
fe3d86bf13 | ||
|
|
f92dc95c58 | ||
|
|
9058c00cfe | ||
|
|
8b6bd8442e | ||
|
|
1ef22e976d | ||
|
|
d0d86aecf8 | ||
|
|
1ef4807a8e | ||
|
|
846e813c99 | ||
|
|
73405cf042 | ||
|
|
79c873f3f8 | ||
|
|
0fc6929dd4 | ||
|
|
753a32bed7 | ||
|
|
027c572758 | ||
|
|
afb7d3e351 | ||
|
|
a5c3ae0a7e | ||
|
|
9477e46fb3 | ||
|
|
bf06df4475 | ||
|
|
e775a58496 | ||
|
|
ad15e47d4d | ||
|
|
45f7a91780 | ||
|
|
b1401d03a1 | ||
|
|
8b264e5c11 | ||
|
|
2fb4ec0d5f | ||
|
|
ddd5318bb0 | ||
|
|
3d44135df5 | ||
|
|
a98fc802fc | ||
|
|
ed364ecfee | ||
|
|
434d217bfa | ||
|
|
2386557b5e | ||
|
|
f619a6666a | ||
|
|
359ef9715e | ||
|
|
9211bc6329 | ||
|
|
a26ef1a997 | ||
|
|
c9f53b9a1c | ||
|
|
f9a3e66716 | ||
|
|
e5464fa199 | ||
|
|
9dc2f1ee29 | ||
|
|
b27143aa15 | ||
|
|
07c38311ca | ||
|
|
4a0415a6bd | ||
|
|
5d97cdbcfe | ||
|
|
7cce658fc4 | ||
|
|
84879453b1 | ||
|
|
9cc79db819 | ||
|
|
17a1663513 | ||
|
|
11538ccf90 | ||
|
|
5c51b1c4d1 | ||
|
|
5a13fe28c9 | ||
|
|
946560c998 | ||
|
|
7c5e032853 | ||
|
|
54ae91b2d9 | ||
|
|
8bd8aa3037 | ||
|
|
6fa9490a13 | ||
|
|
5dc48d1a83 | ||
|
|
9e56a92c8a | ||
|
|
ac98d81b85 | ||
|
|
05e80e32f7 | ||
|
|
7435058859 | ||
|
|
81b1d6e451 | ||
|
|
52754415e0 | ||
|
|
d51d67a5c2 | ||
|
|
c62fbd811b | ||
|
|
1df780abba | ||
|
|
150511b263 | ||
|
|
7fefa954c8 | ||
|
|
030472cee4 | ||
|
|
00c0dc233e | ||
|
|
1013bccb9c | ||
|
|
0911e77c32 | ||
|
|
4cdd33b2aa | ||
|
|
638f081390 | ||
|
|
21f28bfd0d | ||
|
|
941745cd06 | ||
|
|
8bf6bcb8a7 | ||
|
|
e7b8fd8281 | ||
|
|
b1ba01e85a | ||
|
|
a74c71e423 | ||
|
|
dba1bcf973 | ||
|
|
ed3f8cc39d | ||
|
|
f39fdc42f6 | ||
|
|
9ef191db33 | ||
|
|
9582f25835 | ||
|
|
4463975ace | ||
|
|
33cf509822 | ||
|
|
34f44e8f25 | ||
|
|
7fb738ab91 | ||
|
|
973e0812ad | ||
|
|
cd8218541a | ||
|
|
2316dff1e0 | ||
|
|
15ce24db25 | ||
|
|
b0e0a20e96 | ||
|
|
849f8e77ec | ||
|
|
f7c7dee8b0 | ||
|
|
167fad9649 | ||
|
|
9d3a298895 | ||
|
|
19b5ef7c6f | ||
|
|
9b09caa463 | ||
|
|
f08b6e2690 | ||
|
|
fa13cb5544 | ||
|
|
1427c99169 | ||
|
|
3e155bdbb9 | ||
|
|
f830612f17 | ||
|
|
3b86574b4d | ||
|
|
30d9cb9a4a | ||
|
|
cfe05b7d34 | ||
|
|
60a016ae39 | ||
|
|
6229e02806 | ||
|
|
5202294ae2 | ||
|
|
5bc50c2ef0 | ||
|
|
22b0b942ae | ||
|
|
41f86399f0 | ||
|
|
bc7f2af2ce | ||
|
|
db04398e49 | ||
|
|
56929e9725 | ||
|
|
6798259b84 | ||
|
|
20906c7bf7 | ||
|
|
560ddac75a | ||
|
|
daecf5cf01 | ||
|
|
505f8d5cda | ||
|
|
1d7fd0638d | ||
|
|
67ca691334 | ||
|
|
85da55d917 | ||
|
|
ee8567ab38 | ||
|
|
4ca2740628 | ||
|
|
23e6302329 | ||
|
|
95c6dd8992 | ||
|
|
a5b733998d | ||
|
|
68b7749a0f | ||
|
|
fb37e0767a | ||
|
|
43469b9877 | ||
|
|
5a53215506 | ||
|
|
51ce9edcf3 | ||
|
|
18481a40b2 | ||
|
|
24c0221ec5 | ||
|
|
0f928233ce | ||
|
|
e5730af949 | ||
|
|
ed23b6b89d | ||
|
|
28420ac1fc | ||
|
|
6da255f786 | ||
|
|
2396932846 | ||
|
|
89b9f46ad8 | ||
|
|
7dd0bb5005 | ||
|
|
44ecbc944b | ||
|
|
223460bbd2 | ||
|
|
1a0a9709f2 | ||
|
|
a16c282f99 | ||
|
|
aeac5b0203 | ||
|
|
afdc4b746a | ||
|
|
6c84ccd5c5 | ||
|
|
916bfed84b | ||
|
|
35bb3ac128 | ||
|
|
4f1c3887f7 | ||
|
|
ce19067cfd | ||
|
|
00f4ebe6aa | ||
|
|
5add1cfd25 | ||
|
|
c67092d72b | ||
|
|
4bb5402cca | ||
|
|
837acf1394 | ||
|
|
0d8779734d | ||
|
|
d8213454c2 | ||
|
|
e05c8677bf | ||
|
|
a5b9063088 | ||
|
|
83ea7ac136 | ||
|
|
f3075d685e | ||
|
|
a811476c1b | ||
|
|
64fe626fa6 | ||
|
|
f8236c711f | ||
|
|
b1f6bc72f4 | ||
|
|
300dee34bd | ||
|
|
1eaa112f7d | ||
|
|
8228376160 | ||
|
|
a58cd65db8 | ||
|
|
2df689524e | ||
|
|
a20ad60f13 | ||
|
|
1c781389d2 | ||
|
|
5e639d1704 | ||
|
|
8e64432e2c | ||
|
|
a8de2ca410 | ||
|
|
6343518bca | ||
|
|
351e259174 | ||
|
|
1d77e29c3c | ||
|
|
eba9b3d22a | ||
|
|
844fe1d979 | ||
|
|
0971a7820f | ||
|
|
06c6f180dc | ||
|
|
33da30266c | ||
|
|
ad8628f8e7 | ||
|
|
f42446d22f | ||
|
|
4b77b7a8b3 | ||
|
|
9e99a57615 | ||
|
|
7e648741ad | ||
|
|
b1d396bbbb | ||
|
|
380435d020 | ||
|
|
71fb66dc37 | ||
|
|
a53280f047 | ||
|
|
ccfb968b8a | ||
|
|
db731e0c91 | ||
|
|
a4b86f8368 | ||
|
|
44c697908b | ||
|
|
e3c79bd24a | ||
|
|
fb1ed531e4 | ||
|
|
a6cb6d26a4 | ||
|
|
003a5981d6 | ||
|
|
0bf38b826e | ||
|
|
4038d12f1b | ||
|
|
9d60e28aad | ||
|
|
ae92aa200f | ||
|
|
4584b857ca | ||
|
|
46bdf5d79d | ||
|
|
83720f457e | ||
|
|
0706af1543 | ||
|
|
41985d8c1a | ||
|
|
440eb0876c | ||
|
|
ac0a0ea07e | ||
|
|
4a534da00a | ||
|
|
ff4143b482 | ||
|
|
f132c0024f | ||
|
|
82a1010f64 | ||
|
|
d885a9afd0 | ||
|
|
08568fcc8f | ||
|
|
2192b7748e | ||
|
|
c96a579291 | ||
|
|
095cf94c45 | ||
|
|
f7a49778ea | ||
|
|
58b235b435 | ||
|
|
a7f1c3c883 | ||
|
|
268d411bb4 | ||
|
|
7cdf708e3c | ||
|
|
42c077de02 | ||
|
|
769f78a2b7 | ||
|
|
b69ba06db9 | ||
|
|
42d5cc584e | ||
|
|
f3d54d0975 | ||
|
|
39192ad388 | ||
|
|
19500d36c7 | ||
|
|
229f0b48cd | ||
|
|
58736f743e | ||
|
|
dc136cbf31 | ||
|
|
81e39f7c4b | ||
|
|
1cbb6f1405 | ||
|
|
1ae6e67cdc | ||
|
|
3d43cc1029 | ||
|
|
230e8d0787 | ||
|
|
8154e5e521 | ||
|
|
f4467f6033 | ||
|
|
562b04a763 | ||
|
|
9bcbcc5293 | ||
|
|
fdc15df3b3 | ||
|
|
e778458f78 | ||
|
|
0a55eff5d5 | ||
|
|
3874b5bf84 | ||
|
|
d07343a1aa | ||
|
|
a37c6db377 | ||
|
|
1f991a7cdc | ||
|
|
e99a31c2fa | ||
|
|
876fe52efc | ||
|
|
8f190b1fb1 | ||
|
|
411f3ecb3e | ||
|
|
3d31423eef | ||
|
|
68c0eb5216 | ||
|
|
39dae19974 | ||
|
|
2dd6f0124e | ||
|
|
826af968c8 | ||
|
|
70c3d325a0 | ||
|
|
6289211910 | ||
|
|
86346291a7 | ||
|
|
05d57b90a9 | ||
|
|
dd64f5eac4 | ||
|
|
e6de183651 | ||
|
|
7bd986337a | ||
|
|
6dc92df880 | ||
|
|
44abe46da4 | ||
|
|
9e334b5ece | ||
|
|
ee8a248086 | ||
|
|
8f1f98b003 | ||
|
|
a6bc1fa316 | ||
|
|
ce6c0f3082 | ||
|
|
393849384b | ||
|
|
618280340f | ||
|
|
6b77af4e5a | ||
|
|
aa8524b8ad | ||
|
|
87a813566a | ||
|
|
73a97d5762 | ||
|
|
ce4c6ec755 | ||
|
|
21b5139d98 | ||
|
|
7745c91c69 | ||
|
|
bce8f498b4 | ||
|
|
7eaacc3997 | ||
|
|
c699ff7574 | ||
|
|
11d8867d7a | ||
|
|
d4eeb8d186 | ||
|
|
a562a20b4e | ||
|
|
3ecf626ad0 | ||
|
|
766c4315e6 | ||
|
|
b9f2855034 | ||
|
|
44397f79a6 | ||
|
|
dcca9b82b1 | ||
|
|
ecef32a101 | ||
|
|
41d425319c | ||
|
|
6a49f227b4 | ||
|
|
a3ced39b12 | ||
|
|
b89045b20f | ||
|
|
4e3f3899c4 | ||
|
|
a8d865a246 | ||
|
|
cad0fbfc4d | ||
|
|
45f07d5014 | ||
|
|
64a7503196 | ||
|
|
783c23cbfb | ||
|
|
1c04dfe083 | ||
|
|
59ec97f59f | ||
|
|
c71d26c7e8 | ||
|
|
88e58aa8f9 | ||
|
|
40850f9cda | ||
|
|
be3afcf668 | ||
|
|
c1b7679cac | ||
|
|
a370c48d9c | ||
|
|
6c0e456a5e | ||
|
|
ebb993b862 | ||
|
|
3408db91b6 | ||
|
|
f0e8371997 | ||
|
|
55383b9de4 | ||
|
|
5551a8365a | ||
|
|
87fc16af19 | ||
|
|
80d91b693a | ||
|
|
977438309b | ||
|
|
28b426f19d | ||
|
|
d40c5d3de8 | ||
|
|
53702774d0 | ||
|
|
b36e659c56 | ||
|
|
0dcf028592 | ||
|
|
549918d7f9 | ||
|
|
dcb23f46a4 | ||
|
|
c152ae71e2 | ||
|
|
32cd726bd0 | ||
|
|
4f104d74ca | ||
|
|
9c44430975 | ||
|
|
1309f37a7e | ||
|
|
3ed0cc14ea | ||
|
|
73a698151f | ||
|
|
8a3842b788 | ||
|
|
73d68c9609 | ||
|
|
f6d81e1bd8 | ||
|
|
98e607e610 | ||
|
|
a7ec0c2e93 | ||
|
|
0b3e19f56e | ||
|
|
60ac7cfe74 | ||
|
|
491102f221 | ||
|
|
9db252e55d | ||
|
|
b9b94609f5 | ||
|
|
fe910d01f6 | ||
|
|
ea71539b7a | ||
|
|
3d9fd1d374 | ||
|
|
3eda8e64f3 | ||
|
|
ec8ccbcc55 | ||
|
|
1d58823405 | ||
|
|
19e0650c4f | ||
|
|
f45fc10cb1 | ||
|
|
42dff0e5fb | ||
|
|
ee9339e73b | ||
|
|
611aaa5385 | ||
|
|
e25369a306 | ||
|
|
67701944f1 | ||
|
|
ecaee16d23 | ||
|
|
b84c336855 | ||
|
|
447bafaa5b | ||
|
|
2f93e0a499 | ||
|
|
6c2ada9ffc | ||
|
|
982b9d2b0a | ||
|
|
1fe87d0348 | ||
|
|
8d8d4fa3b1 | ||
|
|
94fb8c6f92 | ||
|
|
04c7b33f90 | ||
|
|
ae76c3ee71 | ||
|
|
7d1e24d07f | ||
|
|
37955345ef | ||
|
|
4bc35e9ed4 | ||
|
|
c142cfc81d | ||
|
|
39a22bf15b | ||
|
|
eb636f9538 | ||
|
|
8a838633d1 | ||
|
|
963e297c74 | ||
|
|
d95dbf6ba8 | ||
|
|
ae032c8523 | ||
|
|
2b4a10c159 | ||
|
|
c7ef030ef5 | ||
|
|
7e726735ba | ||
|
|
3d25b2fd9b | ||
|
|
96a22aaec0 | ||
|
|
ccef887f88 | ||
|
|
7d9c6527a4 | ||
|
|
ef7191dbc1 | ||
|
|
bc2adb208c | ||
|
|
cd371ac66f | ||
|
|
9c342eb432 | ||
|
|
95f5b39aed | ||
|
|
9ce38cb43c | ||
|
|
8b57b3086e | ||
|
|
3fdec6d25e | ||
|
|
557af10067 | ||
|
|
6b2645b310 | ||
|
|
c360ee0fa4 | ||
|
|
3ac5870530 | ||
|
|
5218fd2c24 | ||
|
|
accb8e9b07 | ||
|
|
e331ea5d82 | ||
|
|
ae804b8cc7 | ||
|
|
66d72345f2 | ||
|
|
436d64f881 | ||
|
|
c3ec32cc16 | ||
|
|
4b86df4966 | ||
|
|
9fbf1955f2 | ||
|
|
2008a82017 | ||
|
|
8c04a00177 | ||
|
|
8370277352 | ||
|
|
89279009d8 | ||
|
|
182b29662d | ||
|
|
8119bcdc61 | ||
|
|
b6d40f75c9 | ||
|
|
d9570e8223 | ||
|
|
3a0fc24a6a | ||
|
|
04879d0fe5 | ||
|
|
0d9b03ced2 | ||
|
|
7be7acfe30 | ||
|
|
655f7918ea | ||
|
|
67e799ccb2 | ||
|
|
4c12319d19 | ||
|
|
3769719816 | ||
|
|
cc8e4956f5 | ||
|
|
3ad67c754f | ||
|
|
cabd4198b0 | ||
|
|
2bf80673ae | ||
|
|
2182e0696d | ||
|
|
9c44b5c384 | ||
|
|
d5f51f2881 | ||
|
|
176e17c45d | ||
|
|
7912b08c41 | ||
|
|
643ffce289 | ||
|
|
0d4d740961 | ||
|
|
68473f08d6 | ||
|
|
6c09a69991 | ||
|
|
ac16bc0e15 | ||
|
|
99287a89eb | ||
|
|
e0aaf876c2 | ||
|
|
022f79beed | ||
|
|
a6aac88561 | ||
|
|
87057095bc | ||
|
|
5afa75ce51 | ||
|
|
c525598fd9 | ||
|
|
f54cfb0ea2 | ||
|
|
91fcf837f7 | ||
|
|
64e98d897f | ||
|
|
99a5fcc665 | ||
|
|
f0c38a6419 | ||
|
|
14c2747e80 | ||
|
|
3ee2a15cde | ||
|
|
8982578edd | ||
|
|
5ec6f1085a | ||
|
|
1513e46605 | ||
|
|
b95ed73e1d | ||
|
|
ff22efb3e2 | ||
|
|
35c6db1289 | ||
|
|
602e5d2766 | ||
|
|
247c4f1068 | ||
|
|
bdb5e4642f | ||
|
|
661e9b08b6 | ||
|
|
fdf6478bc9 | ||
|
|
10229cd332 | ||
|
|
33e2499006 | ||
|
|
6ae58e74c7 | ||
|
|
689b292c24 | ||
|
|
f6a4ab62b8 | ||
|
|
e197884e07 | ||
|
|
ba095d11cc | ||
|
|
e22cb5f3b3 | ||
|
|
da993ee48d | ||
|
|
9458759810 | ||
|
|
dd27a0adc7 | ||
|
|
3fd276f8a6 | ||
|
|
33f454bb75 | ||
|
|
1fd5d501b0 | ||
|
|
e4220282c8 | ||
|
|
6dec9cb831 | ||
|
|
1ad55ec263 | ||
|
|
96f5dbfccf | ||
|
|
fd2aa1f51c | ||
|
|
74137d4eab | ||
|
|
02398e319d | ||
|
|
32d6a04107 | ||
|
|
6bff374e91 | ||
|
|
18b5cb24c2 | ||
|
|
04e8ca771b | ||
|
|
174f771612 | ||
|
|
4f0a5e937b | ||
|
|
505f02fd72 | ||
|
|
a6c7ffd664 | ||
|
|
a08d52eb48 | ||
|
|
414ad602f2 | ||
|
|
e961505e0a | ||
|
|
59278a7a85 | ||
|
|
adaf6d7955 | ||
|
|
f6624bf270 | ||
|
|
cdf03228c2 | ||
|
|
1fd710e88d | ||
|
|
dc2e760b5a | ||
|
|
150bd32f97 | ||
|
|
d9fc0f1e37 | ||
|
|
e2c7e3a107 | ||
|
|
4995aa0298 | ||
|
|
54b774e481 | ||
|
|
c85095d53f | ||
|
|
8132ed52fd | ||
|
|
eb723422c1 | ||
|
|
051e5a6308 | ||
|
|
2d3e64b51a | ||
|
|
a21b25f751 | ||
|
|
1d425b1731 | ||
|
|
141630f557 | ||
|
|
9fd48bab69 | ||
|
|
f880e39838 | ||
|
|
afb66f4b8a | ||
|
|
7e09802565 | ||
|
|
a8b3833580 | ||
|
|
bf1bcaf394 | ||
|
|
7b61569d32 | ||
|
|
9c27ed8bda | ||
|
|
c9cb64ac10 | ||
|
|
4bd5122462 | ||
|
|
4dac4328e6 | ||
|
|
f7a857744f | ||
|
|
6725e7dc49 | ||
|
|
7da4ea5ecb | ||
|
|
6d5c6b2de7 | ||
|
|
ed462747bf | ||
|
|
53b37ca98f | ||
|
|
423320f235 | ||
|
|
020a8c864f | ||
|
|
69e6389369 | ||
|
|
0eaa10f578 | ||
|
|
2740dc5efa | ||
|
|
592824781c | ||
|
|
4bef0e21e7 | ||
|
|
7d7ce728ff | ||
|
|
27159cfa00 | ||
|
|
d236e37652 | ||
|
|
940559fc76 | ||
|
|
5746169aec | ||
|
|
4aa6fdeb2a | ||
|
|
77ab121c30 | ||
|
|
9558048906 | ||
|
|
b3f6426d36 | ||
|
|
d407d8aa08 | ||
|
|
8842fa209d | ||
|
|
bc252228e1 | ||
|
|
1b3cb0f184 | ||
|
|
f607c671f8 | ||
|
|
8f431cff52 | ||
|
|
6a81a7ba8e | ||
|
|
1f713ed9d1 | ||
|
|
2cb4829536 | ||
|
|
48d5110b5d | ||
|
|
68a5e2017e | ||
|
|
63c46a9aca | ||
|
|
528bec0bb1 | ||
|
|
9c79cb7766 | ||
|
|
38ac518095 | ||
|
|
7488068d50 | ||
|
|
8e207196d3 | ||
|
|
9c35db38a0 | ||
|
|
2087736649 | ||
|
|
dd75deb27f | ||
|
|
5f42a3d4db | ||
|
|
a569b723c5 | ||
|
|
ee2078f3ea | ||
|
|
12af298e33 | ||
|
|
0429f27c54 | ||
|
|
5026f51dfd | ||
|
|
80abaafcae | ||
|
|
bc651e886d | ||
|
|
ba9cfc3b26 | ||
|
|
b5bbc18c89 | ||
|
|
e35088f9e3 | ||
|
|
1c3b325633 | ||
|
|
0415701e50 | ||
|
|
cfe813fa08 | ||
|
|
f4ff336636 | ||
|
|
a4b333ceb8 | ||
|
|
f029d7c943 | ||
|
|
53bf94ce78 | ||
|
|
406e36977e | ||
|
|
98ee746ada | ||
|
|
9e0a22f771 | ||
|
|
14e62ae8d2 | ||
|
|
1162d2edd5 | ||
|
|
a84e44b2a3 | ||
|
|
cd4f278a16 | ||
|
|
c7f34e74ac | ||
|
|
00d26a6419 | ||
|
|
eb57e522aa | ||
|
|
e9230463e8 | ||
|
|
d652f144b2 | ||
|
|
e04a512c4c | ||
|
|
c276278767 | ||
|
|
2e248d1ca8 | ||
|
|
a5df55a6e7 | ||
|
|
f7e05e438e | ||
|
|
49266dce89 | ||
|
|
3a81738455 | ||
|
|
a4ff501bb1 | ||
|
|
351c131764 | ||
|
|
799fcb354b | ||
|
|
16a29659b3 | ||
|
|
55ef0f12cc | ||
|
|
925c489cf9 | ||
|
|
3f57236c19 | ||
|
|
b4dd21fc64 | ||
|
|
8278b1e79f | ||
|
|
c313f0c135 | ||
|
|
e9bfaa7d51 | ||
|
|
0ae254d6b4 | ||
|
|
bbc7b0b59b | ||
|
|
7f284d6ed5 | ||
|
|
4744f93a47 | ||
|
|
a2fe87a63a | ||
|
|
fa61e30dd5 | ||
|
|
0fb94ad3c6 | ||
|
|
33a73fb0c4 | ||
|
|
a61eeeaa03 | ||
|
|
80f6990a43 | ||
|
|
0d5f8437f5 | ||
|
|
5e968deb4e | ||
|
|
ac1ffa2efe | ||
|
|
ed2e6d16c8 | ||
|
|
dafe807888 | ||
|
|
1320706172 | ||
|
|
fb4cf9e78f | ||
|
|
8cbb8befd4 | ||
|
|
aa303df387 | ||
|
|
e42d29611c | ||
|
|
a5213f1291 | ||
|
|
875dfec570 | ||
|
|
6edde288ee | ||
|
|
a6ead18121 | ||
|
|
7245570405 | ||
|
|
38a37f1b18 | ||
|
|
5c98ab4b8f | ||
|
|
5ddb1ef76d | ||
|
|
8b320f913d | ||
|
|
8e0011d07a | ||
|
|
e50734a6fb | ||
|
|
307dae4fac | ||
|
|
d8c5f85cd2 | ||
|
|
94c95469e1 | ||
|
|
e8244f7f07 | ||
|
|
a48f48ca95 | ||
|
|
4a4e54479a | ||
|
|
86d06e0a4c | ||
|
|
9b41ae847b | ||
|
|
012cc521f5 | ||
|
|
20695548f1 | ||
|
|
d77c5123c1 | ||
|
|
c32a6837e6 | ||
|
|
c604be31e0 | ||
|
|
0a08edb6d7 | ||
|
|
4d7aeb8b96 | ||
|
|
6b09f1f233 | ||
|
|
7364c84b6b | ||
|
|
02a28d565b | ||
|
|
2ac6e31cc3 | ||
|
|
8bad4ae636 | ||
|
|
f0010ea3a8 | ||
|
|
f86bff3bf7 | ||
|
|
99b0094dcd | ||
|
|
db86a6ff1c | ||
|
|
cbc188916d | ||
|
|
2f411230c5 | ||
|
|
b9c8c877b7 | ||
|
|
13e4ba622e | ||
|
|
7863256de5 | ||
|
|
d81e029ec0 | ||
|
|
f6500eafb6 | ||
|
|
9da03f529f | ||
|
|
1e1e4fd557 | ||
|
|
08f8e659fd | ||
|
|
fc69fe1f21 | ||
|
|
38a16805ed | ||
|
|
dfd4ae9ea4 | ||
|
|
5c9585b2b0 | ||
|
|
dc2e769d9a | ||
|
|
15a4fb7adf | ||
|
|
7bb10d56f8 | ||
|
|
650282b186 | ||
|
|
ded3cfc251 | ||
|
|
a4fee3a3ad | ||
|
|
58d7404ee4 | ||
|
|
556eee8563 | ||
|
|
1422f50ee9 | ||
|
|
1be4adf365 | ||
|
|
4510ada21e | ||
|
|
e516d99b2d | ||
|
|
b534b83756 | ||
|
|
41b537249b | ||
|
|
4a87acf1ac | ||
|
|
41d3b66867 | ||
|
|
3ef7ae24e5 | ||
|
|
824d3b75f9 | ||
|
|
38a802fed3 | ||
|
|
ee776fd0de | ||
|
|
a1f29d8f4a | ||
|
|
3e42a817a1 | ||
|
|
617dd703e1 | ||
|
|
e63d7ff9d5 | ||
|
|
7e73b27edf | ||
|
|
6898b896d1 | ||
|
|
085e2c24d3 | ||
|
|
cc77eb7855 | ||
|
|
8e9f9f6f2f | ||
|
|
51006e8304 | ||
|
|
fce2bd89c7 | ||
|
|
830be3d918 | ||
|
|
0926e5a986 | ||
|
|
b61411956c | ||
|
|
5648fe940c | ||
|
|
57ad32448f | ||
|
|
b4db3c050d | ||
|
|
3f954ca790 | ||
|
|
6e0174e879 | ||
|
|
e4873f1982 | ||
|
|
3d35817a2f | ||
|
|
8c6aef3edb | ||
|
|
5fd8939b7d | ||
|
|
4c1b578b80 | ||
|
|
f6bf81d16f | ||
|
|
2d8cc57642 | ||
|
|
3b131f0231 | ||
|
|
202ce472bb | ||
|
|
7206edec2e | ||
|
|
9e86efadbc | ||
|
|
433331adac | ||
|
|
a0cd024b39 | ||
|
|
4fbb31b4dc | ||
|
|
09bcc5aaec | ||
|
|
c921c9bd12 | ||
|
|
8f621b38bf | ||
|
|
257d957dfb | ||
|
|
a0a6f0ae87 | ||
|
|
c396b60612 | ||
|
|
98a97b1eaf | ||
|
|
7d6fcc75da | ||
|
|
ecd8b7f614 | ||
|
|
cc1bcc25b9 | ||
|
|
b792276a00 | ||
|
|
b1d52ccd82 | ||
|
|
cc0e91ac2f | ||
|
|
dfac7b4261 | ||
|
|
1258eef213 | ||
|
|
f79148fa62 | ||
|
|
4d2aa29926 | ||
|
|
f016840c53 | ||
|
|
cffeec4713 | ||
|
|
fcbe4620cd | ||
|
|
5a5e0363c2 | ||
|
|
64512ee2ae | ||
|
|
ce4f2f1326 | ||
|
|
dfebb83c35 | ||
|
|
0ba226e3c2 | ||
|
|
e0f59eccf0 | ||
|
|
820e720b0a | ||
|
|
936c5f5d3d | ||
|
|
d0b3b8de44 | ||
|
|
89d53306f3 | ||
|
|
e30a20120c | ||
|
|
790d6331f8 | ||
|
|
9121ab95ea | ||
|
|
b09e5cf5a7 | ||
|
|
b53a8e873d | ||
|
|
4c38963c6f | ||
|
|
b0d6c34565 | ||
|
|
0a9c9411f0 | ||
|
|
e253f58aac | ||
|
|
0aa8ad202a | ||
|
|
7bc5a501c4 | ||
|
|
4691a38d21 | ||
|
|
00bae752d0 | ||
|
|
e253fe0547 | ||
|
|
e35d73be8f | ||
|
|
f9f7af2430 | ||
|
|
7aef780b14 | ||
|
|
5644a20eec | ||
|
|
b135431542 | ||
|
|
efdb254b12 | ||
|
|
8fd2f0ae11 | ||
|
|
3f7ee9bd2e | ||
|
|
a049c1189e | ||
|
|
9859b1555f | ||
|
|
356e47a6a3 | ||
|
|
2c1c8fc8df | ||
|
|
e7bdd4a624 | ||
|
|
1a9069e80a | ||
|
|
484861e3ee | ||
|
|
99ba0a4927 | ||
|
|
ba3ede584e | ||
|
|
dd472f489b | ||
|
|
9f0dd40b3b | ||
|
|
edc03287aa | ||
|
|
d6dc7627b9 | ||
|
|
59773ca284 | ||
|
|
6aa01ffe05 | ||
|
|
5b3de94fee | ||
|
|
b4edf122f6 | ||
|
|
1647c4deab | ||
|
|
3efb91e86d | ||
|
|
d6f73054a5 | ||
|
|
bd9b38665d | ||
|
|
de5c2b906e | ||
|
|
4a4badcdc1 | ||
|
|
fa7ebb36dc | ||
|
|
447440776b | ||
|
|
f5714f2eb0 | ||
|
|
a3b76f9259 | ||
|
|
ba71421a23 | ||
|
|
61251b305d | ||
|
|
73464d6bb6 | ||
|
|
7f7ebed4ea | ||
|
|
5c53809269 | ||
|
|
3935d5f2f7 | ||
|
|
693704a832 | ||
|
|
b17f6eee6a | ||
|
|
ccb90f46e6 | ||
|
|
dfa4cd921e | ||
|
|
32e0afd19c | ||
|
|
5fb732c0e6 | ||
|
|
48a6c4f2bf | ||
|
|
f1597386ef | ||
|
|
731d5b6872 | ||
|
|
ce569e4bc4 | ||
|
|
f48b8d6d91 | ||
|
|
4fc94a4383 | ||
|
|
c5057905b6 | ||
|
|
3c388c76c6 | ||
|
|
a730fe13c7 | ||
|
|
4520e0710d | ||
|
|
7e42892e6a | ||
|
|
a0c580298e | ||
|
|
e7ad50d243 | ||
|
|
1394d42f58 | ||
|
|
a8e95e25ad | ||
|
|
87cb4db263 | ||
|
|
2ccda44c44 | ||
|
|
0253c7bcf1 | ||
|
|
9c7b39b7a7 | ||
|
|
5f4611fce2 | ||
|
|
c4fa2e70bf | ||
|
|
15b1a22501 | ||
|
|
51425788d8 | ||
|
|
a17d5eea47 | ||
|
|
ef909e8a54 | ||
|
|
0a24e9854b | ||
|
|
4eb2eea809 | ||
|
|
8a6705617f | ||
|
|
bbe122aba5 | ||
|
|
40409df885 | ||
|
|
7fdbdae6b9 | ||
|
|
b87a18bd80 | ||
|
|
6d650a48db | ||
|
|
54ea0eac8e | ||
|
|
4054898170 | ||
|
|
8a205e1e32 | ||
|
|
39068730e2 | ||
|
|
1e344455b8 | ||
|
|
9a01f3a337 | ||
|
|
f6ea758b85 | ||
|
|
51fb82902b | ||
|
|
3c342adb67 | ||
|
|
24d592f94f | ||
|
|
181ebf024c | ||
|
|
ecf693ac75 | ||
|
|
8266266639 | ||
|
|
0f2419357c | ||
|
|
2e57123aa2 | ||
|
|
881733e099 | ||
|
|
18f778ce11 | ||
|
|
b8060a5bcc | ||
|
|
7a34b2982f | ||
|
|
f695af587a | ||
|
|
7759615775 | ||
|
|
bbad03547d | ||
|
|
b638f86b75 | ||
|
|
ab6210dc30 | ||
|
|
9ca16e3933 | ||
|
|
76ab41a742 | ||
|
|
c6f6eb294b | ||
|
|
19836a55a3 | ||
|
|
862c7fde6d | ||
|
|
5d842273d9 | ||
|
|
33a9ebaba1 | ||
|
|
192e35882a | ||
|
|
e6b9aaf499 | ||
|
|
b821660e79 | ||
|
|
0beaf47a64 | ||
|
|
8a9e9e9a11 | ||
|
|
df17244353 | ||
|
|
ffd3e17364 | ||
|
|
211a6cc4f1 | ||
|
|
4c09879aab | ||
|
|
fd526e8754 | ||
|
|
974306d4f0 | ||
|
|
56452d9fd8 | ||
|
|
6d231fecd1 | ||
|
|
2e91cf727a | ||
|
|
64b9402e12 | ||
|
|
4bae0c0139 | ||
|
|
06bc4aa50b | ||
|
|
31a7ac1e81 | ||
|
|
c75ac3ac64 | ||
|
|
3e14d8f4dd | ||
|
|
6cde31f843 | ||
|
|
a7b70008ba | ||
|
|
8cc19d908e | ||
|
|
d58cda122d | ||
|
|
ab26945eca | ||
|
|
2da1b2af1a | ||
|
|
2586129dcd | ||
|
|
13e5d77041 | ||
|
|
d036ff6c4f | ||
|
|
1f1bc393d3 | ||
|
|
9aa34e2487 | ||
|
|
0b7bffe3b5 | ||
|
|
41f248f54d | ||
|
|
bc7cabde4e | ||
|
|
65d5bba7df | ||
|
|
340a6d195f | ||
|
|
83ac168664 | ||
|
|
8ac1a67b7d | ||
|
|
abd67d0786 | ||
|
|
9a9e4cddd7 | ||
|
|
10c44b08c9 | ||
|
|
86b19f742c | ||
|
|
cb94b03e3e | ||
|
|
a898c3d7bc | ||
|
|
86be6d7897 | ||
|
|
d3d4de12be | ||
|
|
04bac321d1 | ||
|
|
1011353729 | ||
|
|
5651993d93 | ||
|
|
c51466935c | ||
|
|
454aca7003 | ||
|
|
5ff9f01aba | ||
|
|
b5dd2e605d | ||
|
|
1bfe25f1a5 | ||
|
|
bd98779b3c | ||
|
|
7862ae6d36 | ||
|
|
dfbd78f71d | ||
|
|
e132e878d6 | ||
|
|
bb78c0ea6d | ||
|
|
1a772023d5 | ||
|
|
230f90173c | ||
|
|
fbc7c28188 | ||
|
|
5d88cb7099 | ||
|
|
caae7a5879 | ||
|
|
816f37bdc5 | ||
|
|
a2dd7171a5 | ||
|
|
a80d0bc2ca | ||
|
|
2e50d11be5 | ||
|
|
a5e2caf40b | ||
|
|
82f693a2bc | ||
|
|
349baa3550 | ||
|
|
712761ab0a | ||
|
|
e620d19422 | ||
|
|
8ba161463b | ||
|
|
d93aa183f3 | ||
|
|
29ceed91f0 | ||
|
|
7f7c7f360e | ||
|
|
c77ffa0f6a | ||
|
|
5acf5f6ee3 | ||
|
|
10c2232c39 | ||
|
|
116dbfd123 | ||
|
|
ec7dce7d5b | ||
|
|
a8c8bd8113 | ||
|
|
f57dadc362 | ||
|
|
6b7c1ad6cf | ||
|
|
67359c22d5 | ||
|
|
1881f5cb39 | ||
|
|
9f3d284c68 | ||
|
|
6921fb66d5 | ||
|
|
91849e4cd1 | ||
|
|
1fcaa481be | ||
|
|
04701cd69e | ||
|
|
f59551b89e | ||
|
|
bc34d80949 | ||
|
|
7480e481fc | ||
|
|
71ed48bb76 | ||
|
|
134bf61205 | ||
|
|
85ddabd763 | ||
|
|
889c184ba3 | ||
|
|
660bc2eb21 | ||
|
|
192667d65f | ||
|
|
4896c725b6 | ||
|
|
4bcb99a6b9 | ||
|
|
535eec5366 | ||
|
|
56cd679bcd | ||
|
|
e95ae66af0 | ||
|
|
dbb342da81 | ||
|
|
958381d3dd | ||
|
|
0a165675ce | ||
|
|
ce13b6abfd | ||
|
|
804e00cc26 | ||
|
|
f79de23be5 | ||
|
|
3404dc0b75 | ||
|
|
51c9f4f988 | ||
|
|
028ecf5561 | ||
|
|
419fb08266 | ||
|
|
1a28ef3244 | ||
|
|
6b8ffb2a85 | ||
|
|
9121b14009 | ||
|
|
9b54891474 | ||
|
|
058196e42a | ||
|
|
22743e06d5 | ||
|
|
c8b818f011 | ||
|
|
df838c98e9 | ||
|
|
595eab2614 | ||
|
|
288b6ea692 | ||
|
|
7db606857d | ||
|
|
746034a4fc | ||
|
|
f8ec95d872 | ||
|
|
ba082b74a7 | ||
|
|
ab981ce15a | ||
|
|
e143936a82 | ||
|
|
497cde7e92 | ||
|
|
948faf6cf9 | ||
|
|
56f199bd69 | ||
|
|
9e1f68d9eb | ||
|
|
7a9011c7e1 | ||
|
|
224a6c1e7c | ||
|
|
c89fe8bdbc | ||
|
|
cce9c2225e | ||
|
|
bdbc157c30 | ||
|
|
11eebfb78d | ||
|
|
4beadcc4f3 | ||
|
|
e062c8c6f2 | ||
|
|
f4709ce1f0 | ||
|
|
50e129bd8f | ||
|
|
f402dbd1e3 | ||
|
|
55af8b4cb4 | ||
|
|
005b587588 | ||
|
|
de4463d9a8 | ||
|
|
b3d577c937 | ||
|
|
51576018fd | ||
|
|
1b4f210d82 | ||
|
|
612bfd3acc | ||
|
|
4972c94aed | ||
|
|
642d77bb91 | ||
|
|
88270a7b66 | ||
|
|
29e0d37009 | ||
|
|
9c339367ad | ||
|
|
f69715d999 | ||
|
|
79990cbb27 | ||
|
|
a02be54421 | ||
|
|
20127f6a2a | ||
|
|
02a132a9d7 | ||
|
|
7c95c5e80a | ||
|
|
c0bc5657ea | ||
|
|
dfec166704 | ||
|
|
32f223c683 | ||
|
|
722eac1681 | ||
|
|
6bcbb6f7bb | ||
|
|
d266a0c0ce | ||
|
|
acf82af0bf | ||
|
|
98956056e3 | ||
|
|
ae0bb54b2d | ||
|
|
255da0a0d7 | ||
|
|
c0e8cc0254 | ||
|
|
41cec24644 | ||
|
|
2ecdedd5b4 | ||
|
|
358477c31b | ||
|
|
c1948f10a2 | ||
|
|
d33c487b29 | ||
|
|
b309b507eb | ||
|
|
daa8428b32 | ||
|
|
0529df7632 | ||
|
|
fc31fb9eba | ||
|
|
54436e341a | ||
|
|
fc35ac4d67 | ||
|
|
28a0b6f901 | ||
|
|
1b8f2c2adb | ||
|
|
6c8988ab69 | ||
|
|
e3c600a681 | ||
|
|
979e0de659 | ||
|
|
a76c10416d | ||
|
|
1276bf8c72 | ||
|
|
9ef5c5d639 | ||
|
|
69f51896c9 | ||
|
|
5f845aa6f8 | ||
|
|
87c610beaa | ||
|
|
3a331ec156 | ||
|
|
6c5ac490ab | ||
|
|
50b9840db1 | ||
|
|
41e884a1d2 | ||
|
|
15841b191d | ||
|
|
65514d89ad | ||
|
|
c6f8896826 | ||
|
|
882d84f1e6 | ||
|
|
0eba3a3678 | ||
|
|
756b28c3ab | ||
|
|
d78ebc40ae | ||
|
|
58aea21b82 | ||
|
|
c2b1d61dd1 | ||
|
|
f4d72dba06 | ||
|
|
31e81d7be2 | ||
|
|
6c9123beee | ||
|
|
0fa0397da2 | ||
|
|
b652fc7e1a | ||
|
|
c42fea0d3d | ||
|
|
48a56a848a | ||
|
|
d6937baa8e | ||
|
|
3490f8acb5 | ||
|
|
46ace7e8e8 | ||
|
|
698956e130 | ||
|
|
b25cd39953 | ||
|
|
de4f5eb2ca | ||
|
|
ccc5fa3981 | ||
|
|
b899a19184 | ||
|
|
6af7fac344 | ||
|
|
49ef2b4d54 | ||
|
|
fcc09a7375 | ||
|
|
8e9ad4df97 | ||
|
|
4dfcfd2542 | ||
|
|
12081c9bd6 | ||
|
|
abee7fdfa2 | ||
|
|
ca0bc0632b | ||
|
|
e465750cd2 | ||
|
|
934b08f720 | ||
|
|
78cc98840b | ||
|
|
d4cd7a120f | ||
|
|
4b6c91bbf1 | ||
|
|
e3be2b4451 | ||
|
|
c6ff845ecb | ||
|
|
846bde35ff | ||
|
|
69990ae226 | ||
|
|
415fc81577 | ||
|
|
b675566e23 | ||
|
|
190da0dcd4 | ||
|
|
5c40f93ca3 | ||
|
|
879c1e4992 | ||
|
|
311334c9e1 | ||
|
|
dc5268b0c0 | ||
|
|
d77ace6dc3 | ||
|
|
f0b3c1a9ab | ||
|
|
9efb73f592 | ||
|
|
569b4b29aa | ||
|
|
a61bde5b78 | ||
|
|
542dd67892 | ||
|
|
172eca6081 | ||
|
|
004aaed783 | ||
|
|
a1b15df648 | ||
|
|
b5d5bef678 | ||
|
|
421df0dff3 | ||
|
|
5b5e29cb7b | ||
|
|
db67ae12ec | ||
|
|
7dfd7ad5b9 | ||
|
|
ca5fa9e84d | ||
|
|
1afcfa4406 | ||
|
|
95b1455b62 | ||
|
|
d825937411 | ||
|
|
ee182df533 | ||
|
|
14651d8ea8 | ||
|
|
7e4ed7c1a9 | ||
|
|
13fe88c03f | ||
|
|
7b80a780c7 | ||
|
|
2b465bdf82 | ||
|
|
6d52119597 | ||
|
|
b75041173c | ||
|
|
23eba0a029 | ||
|
|
566781cab2 | ||
|
|
0ea1fc5602 | ||
|
|
2ce9e09e8b | ||
|
|
6cab7ceb0f | ||
|
|
8ae7d8aa07 | ||
|
|
ce6ccef2d0 | ||
|
|
2c6d880542 | ||
|
|
bf89287c56 | ||
|
|
df176dfe8a | ||
|
|
141a32d388 | ||
|
|
37786b76ed | ||
|
|
02b920f259 | ||
|
|
31e25f88a0 | ||
|
|
231c8a468e | ||
|
|
ae346f564f | ||
|
|
fcc0608cf2 | ||
|
|
641cd63462 | ||
|
|
0b907a3efa | ||
|
|
ce180cf2bf | ||
|
|
d97276404c | ||
|
|
d5a9b4344b | ||
|
|
e317fdfa3d | ||
|
|
150ea2639a | ||
|
|
a551348b40 | ||
|
|
3429b5d661 | ||
|
|
c8314b215b | ||
|
|
5929f7d23b | ||
|
|
85a7df3d27 | ||
|
|
e6c5a0e848 | ||
|
|
92dee72b10 | ||
|
|
4d6e57a5e6 | ||
|
|
936a1c2764 | ||
|
|
a08a3c6096 | ||
|
|
82be40eace | ||
|
|
20ba0bd1dc | ||
|
|
75ce6b82e8 | ||
|
|
9749ac56ba | ||
|
|
746f9bb778 | ||
|
|
f2dae588aa | ||
|
|
9f3f0a76aa | ||
|
|
30f28a51ca | ||
|
|
3e22344782 | ||
|
|
0b20d89d62 | ||
|
|
80d892c744 | ||
|
|
53326bef33 | ||
|
|
f05a5a3abb | ||
|
|
8581be4977 | ||
|
|
0e8277ba9e | ||
|
|
3cc2f83912 | ||
|
|
177034a498 | ||
|
|
f4d06e5183 | ||
|
|
637a6b5f7e | ||
|
|
75445b8b98 | ||
|
|
f96de55ac7 | ||
|
|
c4d4af3b5a | ||
|
|
5dfee44340 | ||
|
|
99f5857d84 | ||
|
|
520f7c6812 | ||
|
|
63d493aa1f | ||
|
|
38ab42f855 | ||
|
|
bc3771f3af | ||
|
|
9d90af409b | ||
|
|
20183bbd57 | ||
|
|
1d8efe1cf8 | ||
|
|
23354d413f | ||
|
|
715f03f5f1 | ||
|
|
ff6bbaed19 | ||
|
|
f82cbbab1c | ||
|
|
5a1b526b6c | ||
|
|
1ef92c87fb | ||
|
|
0aef515522 | ||
|
|
9b5c97666a | ||
|
|
a55d822f9a | ||
|
|
5b2bde6e0d | ||
|
|
020c5b27dc | ||
|
|
65457208e5 | ||
|
|
6eb1b98975 | ||
|
|
a927bab6b3 | ||
|
|
48e3e3e8cb | ||
|
|
b5d095401d | ||
|
|
b3e58d4794 | ||
|
|
79b064320e | ||
|
|
335b8326ee | ||
|
|
e777020e44 | ||
|
|
745d97ebe1 | ||
|
|
bb06d98a43 | ||
|
|
3500b0016c | ||
|
|
7ec916b777 | ||
|
|
3c71f79929 | ||
|
|
a83e70104c | ||
|
|
85af554bac | ||
|
|
885722afde | ||
|
|
b2f094da01 | ||
|
|
1e85ec6758 | ||
|
|
c8974aac3e | ||
|
|
ad318c04e5 | ||
|
|
db73e48206 | ||
|
|
d13972e0b8 | ||
|
|
df74b2bfcb | ||
|
|
b94b75726d | ||
|
|
9a2d38acff | ||
|
|
537f8f401e | ||
|
|
04f1a799dc | ||
|
|
74adb2f540 | ||
|
|
a129a2509f | ||
|
|
cc0b8e9d10 | ||
|
|
af8fcf234f | ||
|
|
e0dc2daf54 | ||
|
|
c066e655dc | ||
|
|
2698e6f0ea | ||
|
|
63902bde9c | ||
|
|
c876004fb2 | ||
|
|
633f37bfb6 | ||
|
|
d70bc74dc8 | ||
|
|
d7a4524e70 | ||
|
|
fe1e27fd40 | ||
|
|
8a7a099073 | ||
|
|
1b53b5f9eb | ||
|
|
8b758ee25a | ||
|
|
81c24a8478 | ||
|
|
a6f3e0b6af | ||
|
|
6e9e8127b6 | ||
|
|
63d43275d3 | ||
|
|
cb2bf7f8fa | ||
|
|
1fae760ccd | ||
|
|
4195c4c4bf | ||
|
|
13e7a1ed93 | ||
|
|
ea4357ca98 | ||
|
|
5e8255d24d | ||
|
|
003d6ec43f | ||
|
|
9749ff7c67 | ||
|
|
c88589e0e5 | ||
|
|
32ef1bb7a5 | ||
|
|
206c65904f | ||
|
|
219d4688e4 | ||
|
|
adc687f0a0 | ||
|
|
88e59c9a5a | ||
|
|
71a89a575f | ||
|
|
e3dc8dfcf4 | ||
|
|
2dd77d5bc7 | ||
|
|
0192226bb3 | ||
|
|
faf2658da2 | ||
|
|
9a1c00d2dc | ||
|
|
4a8695caff | ||
|
|
b28016bfeb | ||
|
|
4758a9e66d | ||
|
|
97bd1ef4ec | ||
|
|
2adac8bdae | ||
|
|
3c56914822 | ||
|
|
c5cc907838 | ||
|
|
0907aabacd | ||
|
|
f4290bda7f | ||
|
|
4bdb82a7a2 | ||
|
|
6a696dde3a | ||
|
|
8481684a82 | ||
|
|
03aa8b3356 | ||
|
|
64bfed2640 | ||
|
|
2edcc89303 | ||
|
|
18313f2e90 | ||
|
|
0ff96418bd | ||
|
|
1480abf0e8 | ||
|
|
e7ba75d533 | ||
|
|
044291d940 | ||
|
|
ad62efcb9e | ||
|
|
0dc59d9481 | ||
|
|
11ab3034b1 | ||
|
|
c594bda77f | ||
|
|
8218b74fb3 | ||
|
|
3d0beb1a2e | ||
|
|
515cfd48d8 | ||
|
|
1448bab5b3 | ||
|
|
2884f8acb8 | ||
|
|
075cae4efb | ||
|
|
d2b98323dd | ||
|
|
b1a81a85b1 | ||
|
|
668384649a | ||
|
|
a7252b1a7f | ||
|
|
a4e58e4d55 | ||
|
|
4241e01364 | ||
|
|
d7d7952138 | ||
|
|
9cc2253339 | ||
|
|
6831802590 | ||
|
|
9d79cc7e87 | ||
|
|
763b003a11 | ||
|
|
d560e2a558 | ||
|
|
f914f080b1 | ||
|
|
600a4e86e1 | ||
|
|
e7b4ada65f | ||
|
|
95f31be096 | ||
|
|
ad6db7eaae | ||
|
|
d7a99c6618 | ||
|
|
f20d8f5cc0 | ||
|
|
8930e6b393 | ||
|
|
f26886acb0 | ||
|
|
820ab8d486 | ||
|
|
8e425fb358 | ||
|
|
6006f499ac | ||
|
|
3caa740fc4 | ||
|
|
007ea9ea20 | ||
|
|
5d248d261d | ||
|
|
26908cba64 | ||
|
|
18d118746e | ||
|
|
9a633f5f2e | ||
|
|
5aa44e98d5 | ||
|
|
33916fa975 | ||
|
|
eab18df403 | ||
|
|
002caceb05 | ||
|
|
c250aa804a | ||
|
|
94ca50883f | ||
|
|
462c482873 | ||
|
|
e28e04a990 | ||
|
|
6438385d64 | ||
|
|
bfb08ce003 | ||
|
|
3590a06f40 | ||
|
|
23ca6c5e10 | ||
|
|
1aea5bcd50 | ||
|
|
82c5d8ed28 | ||
|
|
5dcd58a75f | ||
|
|
dc605a4ee1 | ||
|
|
fec940ab8b | ||
|
|
05fd7cecf4 | ||
|
|
2f52730b48 | ||
|
|
4c1819c7dd | ||
|
|
c58c0df30e | ||
|
|
c5902b3144 | ||
|
|
519eb424e7 | ||
|
|
03478afea4 | ||
|
|
306ef8addf | ||
|
|
d4659b261d | ||
|
|
69ce41807a | ||
|
|
cc81da5aa4 | ||
|
|
eee714f52b | ||
|
|
c976b637d8 | ||
|
|
ea93515d53 | ||
|
|
652499bdcf | ||
|
|
819862199a | ||
|
|
6c1bc1d7bb | ||
|
|
36ebe76e0a | ||
|
|
8f8d35dec7 | ||
|
|
ac1e436339 | ||
|
|
78d4812b0e | ||
|
|
6a1b7626e3 | ||
|
|
b6ccb4c96f | ||
|
|
9712ac550c | ||
|
|
5b173766c6 | ||
|
|
b535c4f321 | ||
|
|
56c5ebcb71 | ||
|
|
028234ba86 | ||
|
|
f063b4d231 | ||
|
|
508f27cc32 | ||
|
|
d4783170e5 | ||
|
|
51e459b386 | ||
|
|
1253d254af | ||
|
|
5e70574396 | ||
|
|
b5dce2f74b | ||
|
|
6113da3e68 | ||
|
|
faf6406289 | ||
|
|
7c443431d9 | ||
|
|
0f201e3fd8 | ||
|
|
bf96c30187 | ||
|
|
eb1b7b914a | ||
|
|
135bc2de52 | ||
|
|
ab2269717d | ||
|
|
b5a42cfa75 | ||
|
|
6693416d0a | ||
|
|
9cdf013933 | ||
|
|
1dfaa30520 | ||
|
|
d898fcee75 | ||
|
|
1e647a2058 | ||
|
|
10e379d862 | ||
|
|
ee456493c4 | ||
|
|
69e9c7d0be | ||
|
|
adce718d63 | ||
|
|
3a94a65f12 | ||
|
|
bbe30db1b7 | ||
|
|
68f3c43805 | ||
|
|
3c99ecda60 | ||
|
|
b1366696c4 | ||
|
|
534aeb4065 | ||
|
|
cc77a36dd9 | ||
|
|
5991068fdf | ||
|
|
913778d5ab | ||
|
|
9a8345d4f9 | ||
|
|
ba9bd3bc76 | ||
|
|
aad0070b77 | ||
|
|
d192e69811 | ||
|
|
ec8d919b93 | ||
|
|
4ce4f1d758 | ||
|
|
3aa40d4df6 | ||
|
|
ec1be41b62 | ||
|
|
c15d81545a | ||
|
|
1af8b9d16a | ||
|
|
d860cf834d | ||
|
|
63d5a3acbc | ||
|
|
132aacee89 | ||
|
|
973038da6a | ||
|
|
584da3c39b | ||
|
|
73c4829255 | ||
|
|
68942f7ec4 | ||
|
|
e914b83a1b | ||
|
|
2268376360 | ||
|
|
6bb3b9a684 | ||
|
|
9f213c119c | ||
|
|
f081e2b799 | ||
|
|
a024152c12 | ||
|
|
42d23dbc70 | ||
|
|
74786e8a25 | ||
|
|
eeb4ede60d | ||
|
|
f2eee8896c | ||
|
|
bf4a70d91c | ||
|
|
a35ab3937a | ||
|
|
5ef9a4be8a | ||
|
|
d76d7582fe | ||
|
|
44006142c7 | ||
|
|
6840b2cfe5 | ||
|
|
5613f60403 | ||
|
|
76d3959f1a | ||
|
|
b681759000 | ||
|
|
d6336c4302 | ||
|
|
35b161450a | ||
|
|
861aaf06c6 | ||
|
|
a910884e7d | ||
|
|
0e7bef9014 | ||
|
|
d942189bc6 | ||
|
|
eb16051b1e | ||
|
|
7749a7e41d | ||
|
|
dc4cef17d4 | ||
|
|
89ed40e4a4 | ||
|
|
10ee74d872 | ||
|
|
474ae1e91c | ||
|
|
0dc70ca5f3 | ||
|
|
633b1663ca | ||
|
|
153fe61b4b | ||
|
|
9734fd0353 | ||
|
|
6209c120c0 | ||
|
|
3516881e7a | ||
|
|
15398555b3 | ||
|
|
cb132fcbf4 | ||
|
|
f42f46c7d6 | ||
|
|
f1046f1cf1 | ||
|
|
4a62287139 | ||
|
|
69cd56357f | ||
|
|
b66a886682 | ||
|
|
249504b7d6 | ||
|
|
fa0086404d | ||
|
|
f243ebba91 | ||
|
|
540afb193b | ||
|
|
8294acdf1c | ||
|
|
7733d02938 | ||
|
|
9b6342e7fa | ||
|
|
22c09cb31b | ||
|
|
21e79cb54a | ||
|
|
b8cc829f4a | ||
|
|
ace0dacf15 | ||
|
|
5ca13098e3 | ||
|
|
07b13eedec | ||
|
|
d9168ed9ec | ||
|
|
fb4e2c167c | ||
|
|
10ee3585f6 | ||
|
|
5d4ba820dd | ||
|
|
a51e00e69f | ||
|
|
4dfa963851 | ||
|
|
f2d4f6ccf6 | ||
|
|
182cb8ab25 | ||
|
|
ece341d868 | ||
|
|
d72e8c2687 | ||
|
|
b0ff6f4c7b | ||
|
|
6ec5249492 | ||
|
|
c44cd76c5a | ||
|
|
37f711d72a | ||
|
|
fcf18fb965 | ||
|
|
2efd6250fb | ||
|
|
1b4bd8523d | ||
|
|
60c44910df | ||
|
|
faf67fae03 | ||
|
|
e95f547950 | ||
|
|
96b663b783 | ||
|
|
ce44f7e4b0 | ||
|
|
16a9c7d492 | ||
|
|
fc369c3448 | ||
|
|
b1a33edf0f | ||
|
|
3b805f1a24 | ||
|
|
954b4d8075 | ||
|
|
d073e2a881 | ||
|
|
044dd2af94 | ||
|
|
ee489fa8c0 | ||
|
|
035ed5f49b | ||
|
|
7dcd690f61 | ||
|
|
1c9290aded | ||
|
|
0b922b1ed1 | ||
|
|
34eec362e5 | ||
|
|
b829383864 | ||
|
|
3960235428 | ||
|
|
e91a662491 | ||
|
|
ba4da24984 | ||
|
|
70378432b7 | ||
|
|
6b63009b14 | ||
|
|
dd45fea732 | ||
|
|
ee09425cfb | ||
|
|
af02a1e024 | ||
|
|
2a86f0776c | ||
|
|
c6f73d9df8 | ||
|
|
5ab79f292b | ||
|
|
82c7a22d27 | ||
|
|
35fa977981 | ||
|
|
ecbc46a91d | ||
|
|
d2f6416e45 | ||
|
|
97a885a05c | ||
|
|
aa1edd6b94 | ||
|
|
083e401717 | ||
|
|
bdeca2edce | ||
|
|
c84e14db46 | ||
|
|
919c5bd0b3 | ||
|
|
af8a8f1e3f | ||
|
|
41d08e123f | ||
|
|
67d9656e35 | ||
|
|
1a58a70494 | ||
|
|
a477b2efd1 | ||
|
|
59c4546b8c | ||
|
|
ed1a75ef4c | ||
|
|
0cd942f152 | ||
|
|
fe7f082083 | ||
|
|
849fd71f76 | ||
|
|
4e3a72388d | ||
|
|
29e3d9eff5 | ||
|
|
64280f4285 | ||
|
|
98c6eaac3b | ||
|
|
22d965c66c | ||
|
|
2eb932ebc1 | ||
|
|
2ee0634db3 | ||
|
|
db3b6a1252 | ||
|
|
24810aeca3 | ||
|
|
c888319f22 | ||
|
|
13ee78a9c9 | ||
|
|
acaa07cf7c | ||
|
|
1a3c9939e8 | ||
|
|
56afe21022 | ||
|
|
b58bfa82e6 | ||
|
|
a6257b5901 | ||
|
|
16ad7e53ff | ||
|
|
3e4e4f2664 | ||
|
|
dc0c4fe8fb | ||
|
|
0c050bb266 | ||
|
|
47a5b227cc | ||
|
|
ed61d0c591 | ||
|
|
8ff856ecf8 | ||
|
|
93a607bea0 | ||
|
|
7bec7ba49d | ||
|
|
4c8f3bd392 | ||
|
|
74ba9eb159 | ||
|
|
d28ca4eda7 | ||
|
|
9563b5a7df | ||
|
|
d3a049c6e0 | ||
|
|
a52a3eb42f | ||
|
|
c54b21a754 | ||
|
|
cc8995cd5c | ||
|
|
2e222fbae2 | ||
|
|
cdf3b15336 | ||
|
|
a9a95de02d | ||
|
|
d4bcd4ab0c | ||
|
|
3b2ed06864 | ||
|
|
ab210b3988 | ||
|
|
70617be903 | ||
|
|
f039d5bbcb | ||
|
|
e0adb3cf9a | ||
|
|
4dd6e07b8d | ||
|
|
d69b7951e0 | ||
|
|
d915ece2e7 | ||
|
|
f1be3df112 | ||
|
|
29b7ca4c25 | ||
|
|
f478d916aa | ||
|
|
d2e50b09db | ||
|
|
23c2dd33f2 | ||
|
|
ce0c3c935c | ||
|
|
bdbafb7a2a | ||
|
|
edffe2a6fc | ||
|
|
cd69a53406 | ||
|
|
439ffa5849 | ||
|
|
4518c30cbe | ||
|
|
6683809447 | ||
|
|
cccd43a16b | ||
|
|
91d44147bb | ||
|
|
777311bbf5 | ||
|
|
9ded5dc78d | ||
|
|
5b81c4573c | ||
|
|
32b2e9f6cf | ||
|
|
a6dba44561 | ||
|
|
03fc317a3f | ||
|
|
00a8130201 | ||
|
|
74fc15cccd | ||
|
|
1d4d919f6d | ||
|
|
1826cc8870 | ||
|
|
8a6dab03c4 | ||
|
|
dffad444c3 | ||
|
|
d6f1b164f7 | ||
|
|
4011f054d6 | ||
|
|
14e9978359 | ||
|
|
98535638a2 | ||
|
|
8861c04e77 | ||
|
|
42b6f320d8 | ||
|
|
31b4a9197f | ||
|
|
f06c9d5b9b | ||
|
|
130fafd7c2 | ||
|
|
e76f79cd56 | ||
|
|
ba21718cb9 | ||
|
|
6dfb2997cb | ||
|
|
ae9ac3b439 | ||
|
|
d70b5a9886 | ||
|
|
fb2a20201c | ||
|
|
d1761558b4 | ||
|
|
5bd0a53edd | ||
|
|
53ea73238a | ||
|
|
28560cb887 | ||
|
|
0bcd12aa4e | ||
|
|
a7dfdebed6 | ||
|
|
aca07530aa | ||
|
|
c0110c6bab | ||
|
|
0ef9e0fa75 | ||
|
|
ba0751917d | ||
|
|
e3c1bfbcba | ||
|
|
5aaa0a7b5f | ||
|
|
2ca75970c0 | ||
|
|
d9c92288be | ||
|
|
e4f231502a | ||
|
|
04a61e6fd6 | ||
|
|
dc5c7d2ee8 | ||
|
|
87ac6812a3 | ||
|
|
8d4d2d62c1 | ||
|
|
68fc036b7a | ||
|
|
f053c4d532 | ||
|
|
06e4a2dbde | ||
|
|
9e0ecab0c1 | ||
|
|
996e61a383 | ||
|
|
309aa4a3f3 | ||
|
|
0906fbf995 | ||
|
|
2348ec40ee | ||
|
|
c6852f4b96 | ||
|
|
8b01139738 | ||
|
|
5ea3717152 | ||
|
|
d01a673adb | ||
|
|
571ec44c33 | ||
|
|
e5a3c12026 | ||
|
|
bb2f1aa4be | ||
|
|
59070bcd5b | ||
|
|
2f52dd88a9 | ||
|
|
79fec3ac40 | ||
|
|
6247bbf4b1 | ||
|
|
11de155432 | ||
|
|
bfe833c132 | ||
|
|
1fd1da72f4 | ||
|
|
f4c994d182 | ||
|
|
d81a6e6e89 | ||
|
|
fab5daacf8 | ||
|
|
b714c6b746 | ||
|
|
af1355a94e | ||
|
|
ebc08fd6f5 | ||
|
|
30b1445195 | ||
|
|
0d1c7a1414 | ||
|
|
7e8e7757f4 | ||
|
|
42eb180b6c | ||
|
|
dff35bc9b7 | ||
|
|
6a87ed2853 | ||
|
|
1266d49c65 | ||
|
|
c8b130b232 | ||
|
|
67a6b0f383 | ||
|
|
e7c176f904 | ||
|
|
4cc8363b5f | ||
|
|
93193d7e76 | ||
|
|
d68321ac27 | ||
|
|
b2e8359d31 | ||
|
|
a302ca3d6c | ||
|
|
670358f235 | ||
|
|
10e329f762 | ||
|
|
6a3c1bdb99 | ||
|
|
90923c965b | ||
|
|
d555241d03 | ||
|
|
3d2b6b7620 | ||
|
|
0b943b418c | ||
|
|
db12aaad11 | ||
|
|
860aa65d10 | ||
|
|
2e5e279a14 | ||
|
|
df87b9ff56 | ||
|
|
6c06ff3ca0 | ||
|
|
40d6e9c841 | ||
|
|
6a4f06f325 | ||
|
|
f7d306cb02 | ||
|
|
34bc182c22 | ||
|
|
3f8dd7e658 | ||
|
|
46341fea96 | ||
|
|
4319cdbba1 | ||
|
|
3453236830 | ||
|
|
fa2058ec77 | ||
|
|
7f823fe2a8 | ||
|
|
58e14705b5 | ||
|
|
99b7613206 | ||
|
|
545e614c04 | ||
|
|
5ea04a388d | ||
|
|
8922372f4b | ||
|
|
ceaa2c1619 | ||
|
|
4e73daab79 | ||
|
|
5b29d987c8 | ||
|
|
1cd53c051d | ||
|
|
5460d0030f | ||
|
|
d14a0ce592 | ||
|
|
a4000a3286 | ||
|
|
85fd650f5c | ||
|
|
b19033a375 | ||
|
|
33e19ce9f6 | ||
|
|
d21218fd57 | ||
|
|
9f2279c675 | ||
|
|
06bfbfaff4 | ||
|
|
562834e0d0 | ||
|
|
bdf2285f14 | ||
|
|
1780682a8d | ||
|
|
9b48bd27dd | ||
|
|
0b1e2a6107 | ||
|
|
c78edf3fff | ||
|
|
6fcd99c6da | ||
|
|
b42f3a5400 | ||
|
|
bb543920a6 | ||
|
|
0845758023 | ||
|
|
816f81260a | ||
|
|
a9583f4440 | ||
|
|
4e52c9cc65 | ||
|
|
8299dded0b | ||
|
|
5d83cafc50 | ||
|
|
9819e60aae | ||
|
|
1182eb4a9f | ||
|
|
48a0986c14 | ||
|
|
6c2f7046d1 | ||
|
|
9735bffae5 | ||
|
|
56a11910db | ||
|
|
70b00dc4e3 | ||
|
|
56c1bf01a4 | ||
|
|
022b295aaa | ||
|
|
fd977895ab | ||
|
|
ad1f3ddbad | ||
|
|
c8b159e38c | ||
|
|
7405e3c12a | ||
|
|
1b8ca164c9 | ||
|
|
74cdaa9fcb | ||
|
|
0ba331485a | ||
|
|
f5b3c0affc | ||
|
|
316ae0c785 | ||
|
|
c2d2fa2579 | ||
|
|
d683eb2dd1 | ||
|
|
470d35e96c | ||
|
|
7464d82243 | ||
|
|
c61fed32db | ||
|
|
c4cdec5531 | ||
|
|
3ad9d38063 | ||
|
|
f8b95abf0c | ||
|
|
579794666a | ||
|
|
2ef25b6338 | ||
|
|
faddd94518 | ||
|
|
cd5f9b8bd4 | ||
|
|
94fd20e864 | ||
|
|
3558eef66b | ||
|
|
ee66e2154d | ||
|
|
5500a86f0b | ||
|
|
9b1c1774cd | ||
|
|
a8e31469c5 | ||
|
|
b70bafaf51 | ||
|
|
d393349b4d | ||
|
|
0904724694 | ||
|
|
eff4825000 | ||
|
|
091c00229a | ||
|
|
126f0d6036 | ||
|
|
f99bc6d8f9 | ||
|
|
3da0117838 | ||
|
|
3d8cf6a90b | ||
|
|
ac44663f04 | ||
|
|
57113b21ed | ||
|
|
57d5ace61c | ||
|
|
f4da80e7c6 | ||
|
|
df3ca5c7c8 | ||
|
|
4b676df37f | ||
|
|
5dc04266ea | ||
|
|
dbcfe3f5d2 | ||
|
|
fdbec5b0d2 | ||
|
|
3ea129b4f8 | ||
|
|
48a7e40520 | ||
|
|
08b956cf88 | ||
|
|
93b1e1f5ac | ||
|
|
bdecf6baf5 | ||
|
|
4528311d77 | ||
|
|
0bc1761dae | ||
|
|
f690b0edf6 | ||
|
|
10851772af | ||
|
|
66e7b28195 | ||
|
|
76021fb582 | ||
|
|
db50adbd9f | ||
|
|
5c7cc146a1 | ||
|
|
fa3b384c6f | ||
|
|
3f9a878b03 | ||
|
|
ab3b972185 | ||
|
|
fb9118a044 | ||
|
|
5cce5b6707 | ||
|
|
3256c9b3f5 | ||
|
|
8b43b2b69d | ||
|
|
02a862684d | ||
|
|
c15f5b5106 | ||
|
|
0f06d51065 | ||
|
|
8abfa419e8 | ||
|
|
c3c90ab78b | ||
|
|
666be21f59 | ||
|
|
0fe8197100 | ||
|
|
d8a7a7792a | ||
|
|
82b9a0c949 | ||
|
|
a3083d2990 | ||
|
|
3c62914304 | ||
|
|
a094768469 | ||
|
|
3965f063d3 | ||
|
|
2b7c295bf1 | ||
|
|
2fd297c1e1 | ||
|
|
263c04aeb2 | ||
|
|
8f2b5e195e | ||
|
|
7e3dd2b8cc | ||
|
|
49c027537e | ||
|
|
a1a6095295 | ||
|
|
5f7dcc9b78 | ||
|
|
1705bf4f3c | ||
|
|
8612946bf5 | ||
|
|
7cf40576dd | ||
|
|
239f35d830 | ||
|
|
05ff42b767 | ||
|
|
7bab4817f2 | ||
|
|
0d87b7d720 | ||
|
|
6b72adbeee | ||
|
|
db97ae46e5 | ||
|
|
fc6c084693 | ||
|
|
9e01cc5705 | ||
|
|
f9ce45c058 | ||
|
|
056ff4b6ea | ||
|
|
52653f73b9 | ||
|
|
a06207b814 | ||
|
|
3b3ef411a4 | ||
|
|
6418f78fdb | ||
|
|
5d4187bf03 | ||
|
|
cfffad73eb | ||
|
|
ef7db87b82 | ||
|
|
212eea9cf5 | ||
|
|
da792cc272 | ||
|
|
2ae2142b35 | ||
|
|
a00f5f308a | ||
|
|
81cfde12f3 | ||
|
|
1a53d38dae | ||
|
|
b834fdbc5e | ||
|
|
1cb2db03ed | ||
|
|
57bca50ed0 | ||
|
|
94386583e2 | ||
|
|
b1ab63d549 | ||
|
|
ad56bdd354 | ||
|
|
65e30c13e2 | ||
|
|
0c54fac651 | ||
|
|
9660c22a9f | ||
|
|
31e8df4a59 | ||
|
|
8e6ecaf8d4 | ||
|
|
4d69a0ce29 | ||
|
|
1b842f86ca | ||
|
|
a2330fb630 | ||
|
|
30f0232d71 | ||
|
|
404e658a5d | ||
|
|
f5682397c2 | ||
|
|
4896810258 | ||
|
|
dd0de8b6e1 | ||
|
|
2a9f9f7ebd | ||
|
|
2f3afd3637 | ||
|
|
f0a2c88fdc | ||
|
|
c3a5b12cd3 | ||
|
|
d7b0e66270 | ||
|
|
1871ed5441 | ||
|
|
5ea6948127 | ||
|
|
9bd77d36f1 | ||
|
|
3ffa6cd1ac | ||
|
|
ad87df3168 | ||
|
|
8bd0d32fd2 | ||
|
|
f182675a6e | ||
|
|
56ce89e04f | ||
|
|
062ec036f8 | ||
|
|
8089242b2f | ||
|
|
8efa1a0032 | ||
|
|
7ce8304ce6 | ||
|
|
233adab647 | ||
|
|
475c86d100 | ||
|
|
f754654dae | ||
|
|
53ce20c0df | ||
|
|
ad91e3a344 | ||
|
|
4f2b33f80f | ||
|
|
2b24d42f8d | ||
|
|
ab70f306cd | ||
|
|
4fb83fe0a5 | ||
|
|
9c6ef34270 | ||
|
|
481eb8e5dc | ||
|
|
7cf65b899b | ||
|
|
dd70fcb9bc | ||
|
|
6dd8c05533 | ||
|
|
0b900d94f7 | ||
|
|
cf724c43cb | ||
|
|
cdf5ac4fc4 | ||
|
|
b768ce4ca4 | ||
|
|
0115503af9 | ||
|
|
08dd30c5bf | ||
|
|
72270013c8 | ||
|
|
a2a59cbeae | ||
|
|
20a38d2dbe | ||
|
|
9aade0a2da | ||
|
|
9af1d1af52 | ||
|
|
8bb69cd6da | ||
|
|
84a84a1687 | ||
|
|
462c43434b | ||
|
|
b830691611 | ||
|
|
204f1747cf | ||
|
|
13c9d80a3b | ||
|
|
64f45b061b | ||
|
|
c1202fd127 | ||
|
|
2060f3f59a | ||
|
|
1fb92df2e7 | ||
|
|
848301bf70 | ||
|
|
08b5b71fcb | ||
|
|
5414d4a9e4 | ||
|
|
b930bd7326 | ||
|
|
d1d1be49ba | ||
|
|
6ad7963347 | ||
|
|
2dcda2487a | ||
|
|
55911eac7a | ||
|
|
176b109ae7 | ||
|
|
0f12d43a59 | ||
|
|
6dfc2aca4b | ||
|
|
f5a34d5191 | ||
|
|
bc3a7f70e4 | ||
|
|
dcabee8d5e | ||
|
|
d7e290dc68 | ||
|
|
2e2341c8b2 | ||
|
|
0ee717342b | ||
|
|
9f372b3146 | ||
|
|
dd92e36feb | ||
|
|
c25738c62c | ||
|
|
c264e98e6e | ||
|
|
f2780bcbc2 | ||
|
|
050b703fc0 | ||
|
|
eed09f64f7 | ||
|
|
28c4ad1501 | ||
|
|
28d1dad629 | ||
|
|
b5f0672888 | ||
|
|
71fc4faae7 | ||
|
|
8bff1e8bc4 | ||
|
|
af67dd6610 | ||
|
|
c46c700f7c | ||
|
|
2a2de2efdc | ||
|
|
f384c42de5 | ||
|
|
bf1c54e5a3 | ||
|
|
d8f2cc50df | ||
|
|
06c25ba998 | ||
|
|
58654a3f3a | ||
|
|
32521cd1b6 | ||
|
|
e072fe6ea9 | ||
|
|
b5897fdb62 | ||
|
|
55df525f1b | ||
|
|
e6dde68924 | ||
|
|
b3e2305dea | ||
|
|
ec3e3ed1fd | ||
|
|
30fc97eef6 | ||
|
|
5939692616 | ||
|
|
9ce3176b59 | ||
|
|
497d35b03b | ||
|
|
6a1191de31 | ||
|
|
6c3a17de71 | ||
|
|
22cf82e44b | ||
|
|
10c7e49273 | ||
|
|
4900eae751 | ||
|
|
5334c599f0 | ||
|
|
ad10a1eba5 | ||
|
|
3ca626f2a9 | ||
|
|
e7ad40d8f4 | ||
|
|
d38ab1145a | ||
|
|
f31360e1a4 | ||
|
|
059fead736 | ||
|
|
4e8360c030 | ||
|
|
fbd80746a5 | ||
|
|
072a5de1c5 | ||
|
|
5c3c5a5521 | ||
|
|
461b294bc7 | ||
|
|
71de0f2d08 | ||
|
|
2ffdc4f2ef | ||
|
|
dc9b320c4a | ||
|
|
a6a93148b4 | ||
|
|
f7dc3b9ce4 | ||
|
|
12ad5d53c9 | ||
|
|
54dc1e2e15 | ||
|
|
073f715f17 | ||
|
|
7ff50893dc | ||
|
|
d128082b23 | ||
|
|
1b8f89c3f1 | ||
|
|
8eb138e0b3 | ||
|
|
8256579310 | ||
|
|
41f1fb8d95 | ||
|
|
277d91afce | ||
|
|
aaa840ebef | ||
|
|
29ffdadabb | ||
|
|
e5f19fe037 | ||
|
|
5791d71e9f | ||
|
|
104a7022fb | ||
|
|
6210b613be | ||
|
|
2ba9380616 | ||
|
|
59042bc2e2 | ||
|
|
ccfd8e51ea | ||
|
|
1aafb6c2c1 | ||
|
|
7976aa4b28 | ||
|
|
1b4e175c0c | ||
|
|
3ef955c139 | ||
|
|
51990ed0e5 | ||
|
|
138523bab3 | ||
|
|
995ec2b104 | ||
|
|
d13f8749d4 | ||
|
|
0350443810 | ||
|
|
c5841dccbb | ||
|
|
a0c50f9ef5 | ||
|
|
120020b4db | ||
|
|
676747467a | ||
|
|
e2d13541dc | ||
|
|
057cbc76b3 | ||
|
|
48035187d2 | ||
|
|
f05f60f929 | ||
|
|
3ab19e81ac | ||
|
|
532be6cd87 | ||
|
|
21a492fa43 | ||
|
|
edf83823f1 | ||
|
|
8d6f7de046 | ||
|
|
a7de4f3663 | ||
|
|
e538f16315 | ||
|
|
3f8b3e2baa | ||
|
|
a90ecde389 | ||
|
|
1ad65bb66b | ||
|
|
d85bb3bce1 | ||
|
|
8cd4732321 | ||
|
|
6957b02c27 | ||
|
|
adcadf08d1 | ||
|
|
3b36145257 | ||
|
|
c3e5eaf8da | ||
|
|
fd176107ae | ||
|
|
ad203e1461 | ||
|
|
1fe9ba5879 | ||
|
|
678321bb2f | ||
|
|
967ce824f7 | ||
|
|
336e5e0ff7 | ||
|
|
7a94f472c7 | ||
|
|
70b41a2a6e | ||
|
|
216e7f3b10 | ||
|
|
0717da6e37 | ||
|
|
3f64316e00 | ||
|
|
172eaf84b5 | ||
|
|
0c20889a17 | ||
|
|
62523d537b | ||
|
|
6643252019 | ||
|
|
13022a6bb0 | ||
|
|
fc018691e5 | ||
|
|
56666c4bf4 | ||
|
|
379da81f85 | ||
|
|
9ce6d4b72a | ||
|
|
be46c31c74 | ||
|
|
cd4029dc61 | ||
|
|
d2aa55a3bd | ||
|
|
838be0846d | ||
|
|
9414cb97b5 | ||
|
|
d6883a077a | ||
|
|
aa60b8399b | ||
|
|
cbe504df77 | ||
|
|
e0efcc1f25 | ||
|
|
c6e536a768 | ||
|
|
77ba53bda7 | ||
|
|
c2c6f1493a | ||
|
|
debaed6e5e | ||
|
|
0d6279617b | ||
|
|
3435314400 | ||
|
|
f248a8383b | ||
|
|
5458b007d1 | ||
|
|
6735291c99 | ||
|
|
6ad7a20c07 | ||
|
|
3191825ecc | ||
|
|
baee6b9738 | ||
|
|
c4a7f899db | ||
|
|
c01623ba56 | ||
|
|
81d0d5c59f | ||
|
|
cc4fdfd852 | ||
|
|
ba7be29153 | ||
|
|
4eae95b88d | ||
|
|
06d8281f16 | ||
|
|
87c21ba75e | ||
|
|
7f88a7c9bb | ||
|
|
38c57a662c | ||
|
|
36f5ddc543 | ||
|
|
8b873b6b1b | ||
|
|
68bd881ca8 | ||
|
|
c3e717a3ef | ||
|
|
d9be6f8a9a | ||
|
|
3bfb9d65f4 | ||
|
|
9ad26f943f | ||
|
|
c5112cb24e | ||
|
|
c17e1f9e75 | ||
|
|
b48b454909 | ||
|
|
6b59a924e8 | ||
|
|
87879a6784 | ||
|
|
fca5fda9da | ||
|
|
691d566482 | ||
|
|
61578f4dca | ||
|
|
9f4a7fc0da | ||
|
|
200a5d84c7 | ||
|
|
309a2ad0a3 | ||
|
|
e696331e2a | ||
|
|
c3126e24ce | ||
|
|
bde931f2f5 | ||
|
|
58b3e9f201 | ||
|
|
1423dcb619 | ||
|
|
df3540b0f9 | ||
|
|
921209580a | ||
|
|
d4e058a844 | ||
|
|
8f9eed154e | ||
|
|
1416655d53 | ||
|
|
9a147218ce | ||
|
|
34b575da03 | ||
|
|
54d22a23b5 | ||
|
|
ee10e17ce7 | ||
|
|
8ff97468cc | ||
|
|
6f898c6c97 | ||
|
|
cfeb8d053f | ||
|
|
d317171a45 | ||
|
|
9b0aadccf8 | ||
|
|
d6850ab358 | ||
|
|
c139a0d9ed | ||
|
|
67b0c4cddd | ||
|
|
ce36bf6134 | ||
|
|
e2dd65a403 | ||
|
|
a2595d5107 | ||
|
|
6dc0cf0c44 | ||
|
|
faac630001 | ||
|
|
0deacc7229 | ||
|
|
c849fe1496 | ||
|
|
4238e84ec4 | ||
|
|
df4e306c64 | ||
|
|
916c728d70 | ||
|
|
476d85915b | ||
|
|
e54b8ead72 | ||
|
|
d2444d2992 | ||
|
|
48acda2c3c | ||
|
|
264f7b1d30 | ||
|
|
fc44d54607 | ||
|
|
afc3698578 | ||
|
|
c3cd94b695 | ||
|
|
ea219f683e | ||
|
|
faf6584652 | ||
|
|
4dc41749fb | ||
|
|
2aa94301a8 | ||
|
|
d2870b6df7 | ||
|
|
5cbc44610c | ||
|
|
9032cc0ecc | ||
|
|
e48b314ad0 | ||
|
|
6fdaf905c4 | ||
|
|
79b706fb5c | ||
|
|
eaee188244 | ||
|
|
a6ac62d628 | ||
|
|
7a7f12504b | ||
|
|
55c83d17e1 | ||
|
|
8009c1b7eb | ||
|
|
1580453f4b | ||
|
|
9cc8f5dd07 | ||
|
|
7e326b8431 | ||
|
|
8bddb47fab | ||
|
|
b1b462d22b | ||
|
|
d5847faaba | ||
|
|
4c9f3aee74 | ||
|
|
ff4e0cb1c2 | ||
|
|
c159da1fbc | ||
|
|
d5e55f9dbd | ||
|
|
642ed4061a | ||
|
|
5178c3e67f | ||
|
|
e402347d73 | ||
|
|
3004c58798 | ||
|
|
15a44fe650 | ||
|
|
e37a96a94a | ||
|
|
e475a3b64c | ||
|
|
663ebd25ea | ||
|
|
e6bec0de72 | ||
|
|
f513effd47 | ||
|
|
dd05e898cc | ||
|
|
49a88e75e6 | ||
|
|
14a99471f4 | ||
|
|
bdbc181e38 | ||
|
|
133b1151bd | ||
|
|
653aab2358 | ||
|
|
13669313d4 | ||
|
|
e84d79ccf3 | ||
|
|
34077f9624 | ||
|
|
28ba64a4db | ||
|
|
0eefd3e140 | ||
|
|
20bbfc5917 | ||
|
|
9d6832224e | ||
|
|
2cf17b19dc | ||
|
|
390cf2114a | ||
|
|
8bff019b5d | ||
|
|
7d221f3be9 | ||
|
|
b8628b9772 | ||
|
|
cda4d9e1b2 | ||
|
|
f5d7a4d41e | ||
|
|
94486302f5 | ||
|
|
4f4a7409f6 | ||
|
|
60f57f9e4b | ||
|
|
2f98cd9eb0 | ||
|
|
f77586f13d | ||
|
|
fa82091989 | ||
|
|
66e9c68da4 | ||
|
|
c97c2fee37 | ||
|
|
fd03500786 | ||
|
|
83d5c31a0c | ||
|
|
7f19c10da9 | ||
|
|
c10ea527a0 | ||
|
|
5a54c1520a | ||
|
|
3f2732be7b | ||
|
|
d504b1f90f | ||
|
|
210dac058d | ||
|
|
ccb3012e5a | ||
|
|
c94f2e6f07 | ||
|
|
e31d7178b4 | ||
|
|
b3a4b8085c | ||
|
|
b56d7ab9c3 | ||
|
|
c63e270921 | ||
|
|
cffbae3a13 | ||
|
|
d2d03228ee | ||
|
|
30458fa536 | ||
|
|
0e60831f46 | ||
|
|
69238bf8e8 | ||
|
|
db483df9a6 | ||
|
|
1dc95f5d3a | ||
|
|
37caef10b1 | ||
|
|
381ecd8f70 | ||
|
|
f2a829362b | ||
|
|
fe2e994f2d | ||
|
|
95ba6bf040 | ||
|
|
6f937e8958 | ||
|
|
12f04650de | ||
|
|
f7330cce14 | ||
|
|
ba56f95da8 | ||
|
|
46704724e3 | ||
|
|
caadd5bb32 | ||
|
|
faa221f162 | ||
|
|
a814d5438a | ||
|
|
ab43c4cf2a | ||
|
|
d781e2dfb8 | ||
|
|
968ef1560f | ||
|
|
1631ceedb3 | ||
|
|
884c2af17d | ||
|
|
51ab030541 | ||
|
|
2a1e063641 | ||
|
|
62b3120ffd | ||
|
|
ea17b3d7c9 | ||
|
|
f3e98fc71c | ||
|
|
5034e11f22 | ||
|
|
560473d70b | ||
|
|
10e53509bd | ||
|
|
27afb02482 | ||
|
|
07fd0989ea | ||
|
|
d7c38aea50 | ||
|
|
20d57e27c9 | ||
|
|
4606c8092f | ||
|
|
30f256aad2 | ||
|
|
1b9dbd0e62 | ||
|
|
225c8871f9 | ||
|
|
d0333134d5 | ||
|
|
b24b8315d3 | ||
|
|
4ddc3b518b | ||
|
|
479a7e441d | ||
|
|
af5ae8d656 | ||
|
|
1365882de4 | ||
|
|
7854cd1f94 | ||
|
|
12a1a14527 | ||
|
|
a71cc552c9 | ||
|
|
e42d091502 | ||
|
|
d89d5befa0 | ||
|
|
92e5ae29c9 | ||
|
|
65aeb97e3e | ||
|
|
08a9ef1072 | ||
|
|
9c3f297e97 | ||
|
|
2554871c64 | ||
|
|
404edebdff | ||
|
|
2f2030babf | ||
|
|
b560b35175 | ||
|
|
3063b19e1d | ||
|
|
a17fb54c37 | ||
|
|
c1b8a8594d | ||
|
|
0a7fc6c48c | ||
|
|
79d59ff9ca | ||
|
|
c7d3c78e72 | ||
|
|
d56322a032 | ||
|
|
aac3c4d5c7 | ||
|
|
9ba1ddc2dd | ||
|
|
61eeaa0496 | ||
|
|
d3b6f9975c | ||
|
|
5200c8d659 | ||
|
|
e2c6f57859 | ||
|
|
b084210705 | ||
|
|
6622922468 | ||
|
|
caf31eb6d3 | ||
|
|
464691f129 | ||
|
|
afcf539e6e | ||
|
|
bf2c1a2df2 | ||
|
|
7400064cd5 | ||
|
|
7eb3754807 | ||
|
|
a9cc2fdb54 | ||
|
|
212282e77c | ||
|
|
1e8a820108 | ||
|
|
0117341b7e | ||
|
|
d21eac8b18 | ||
|
|
af4edc3b76 | ||
|
|
8a959896bf | ||
|
|
ba5107e801 | ||
|
|
d7de4a3579 | ||
|
|
175b14860e | ||
|
|
72fcb4ebda | ||
|
|
3a221f9b6e | ||
|
|
1241fb54f3 | ||
|
|
b291dcadc6 | ||
|
|
4105b19f75 | ||
|
|
b7b8ad7760 | ||
|
|
8465e3061a | ||
|
|
6b09cd61d2 | ||
|
|
aac609cc38 | ||
|
|
0b1d16f9db | ||
|
|
7374f6dc4f | ||
|
|
9577d80fc2 | ||
|
|
c550e27d21 | ||
|
|
423730da76 | ||
|
|
78a4c6f525 | ||
|
|
0d3ac21ae0 | ||
|
|
2cae3245aa | ||
|
|
e143a0ec6b | ||
|
|
35ce087f3b | ||
|
|
e787bc8ae4 | ||
|
|
4937052475 | ||
|
|
739eb67bec | ||
|
|
a3049b6f94 | ||
|
|
2f1346fefa | ||
|
|
f116db3108 | ||
|
|
87a8780cca | ||
|
|
d2de62283b | ||
|
|
11c16139c2 | ||
|
|
1c91ec69ba | ||
|
|
73429e7779 | ||
|
|
fe5aff0c72 | ||
|
|
c36d29a896 | ||
|
|
e3b5395905 | ||
|
|
3a25ecbbc9 | ||
|
|
7d63970293 | ||
|
|
ee267d23ba | ||
|
|
e0e4eed26b | ||
|
|
5b280bd60d | ||
|
|
2f9cc91b64 | ||
|
|
36bcced355 | ||
|
|
9a9b17d38d | ||
|
|
e2cd275ac5 | ||
|
|
61eb5d906c | ||
|
|
a113dc0861 | ||
|
|
6a164a235d | ||
|
|
c1eaa90c2b | ||
|
|
00e00eb7b5 | ||
|
|
0d2db28908 | ||
|
|
20202b793b | ||
|
|
62e84e73ae | ||
|
|
73f6fd49d0 | ||
|
|
4f9da35b76 | ||
|
|
cc7b413a2a | ||
|
|
fcf29f357d | ||
|
|
4fd1eae84f | ||
|
|
1c770a3c66 | ||
|
|
e152f54903 | ||
|
|
5d3a9d817a | ||
|
|
e884916275 | ||
|
|
5b7b16416b | ||
|
|
04b93aeaf2 | ||
|
|
39bdd37615 | ||
|
|
4ccb3810c2 | ||
|
|
1065ebb0aa | ||
|
|
74c08de530 | ||
|
|
b195fdbf60 | ||
|
|
f68efe6674 | ||
|
|
ed309182bf | ||
|
|
50c6b276f9 | ||
|
|
4c1a8f358a | ||
|
|
05ff79f347 | ||
|
|
3ae328898d | ||
|
|
7d35c43def | ||
|
|
d4f857b739 | ||
|
|
b6bc844b4d | ||
|
|
d06a477371 | ||
|
|
c128c029f3 | ||
|
|
a58ad5006f | ||
|
|
3c5655fc3d | ||
|
|
6ab04866ec | ||
|
|
1f07f9d127 | ||
|
|
e5ccfc4446 | ||
|
|
ec89382e35 | ||
|
|
4a7873ef77 | ||
|
|
ff2fd45ff0 | ||
|
|
e8cfeec0cf | ||
|
|
c72171d1da | ||
|
|
885b56000b | ||
|
|
3d1ee9dcf0 | ||
|
|
5d2133a483 | ||
|
|
52bb56ba43 | ||
|
|
d2edf11726 | ||
|
|
9a152c23bb | ||
|
|
8572445f57 | ||
|
|
9940d73167 | ||
|
|
8b8a9ae854 | ||
|
|
036bf92223 | ||
|
|
410969743f | ||
|
|
14da67121c | ||
|
|
681d3e09ba | ||
|
|
0ce130efa7 | ||
|
|
d14d7ade85 | ||
|
|
7b4fd28ef1 | ||
|
|
b2280b2d72 | ||
|
|
b41826c332 | ||
|
|
3d93ed9059 | ||
|
|
35a0756e5a | ||
|
|
10419366f9 | ||
|
|
8373d31013 | ||
|
|
0c89a8f145 | ||
|
|
257ac4d37e | ||
|
|
653aee8b07 | ||
|
|
88726aff8c | ||
|
|
baabdb4ac2 | ||
|
|
6277510557 | ||
|
|
e9ab17fcb1 | ||
|
|
2f9ba719d4 | ||
|
|
e259f300b1 | ||
|
|
fcc357ddd1 | ||
|
|
e613198af7 | ||
|
|
e3c1214971 | ||
|
|
1c3f9f7fbf | ||
|
|
f4a1573586 | ||
|
|
95db668c3c | ||
|
|
691e21fa78 | ||
|
|
c555681c8b | ||
|
|
ae7ef24196 | ||
|
|
f935b141f1 | ||
|
|
a893d43d16 | ||
|
|
7cb47c8494 | ||
|
|
5ef4c763b6 | ||
|
|
459b5bd89c | ||
|
|
c5237a926d | ||
|
|
2e5052a7fa | ||
|
|
cd8d9bf07c | ||
|
|
7da022ebb4 | ||
|
|
67f9c7e0f0 | ||
|
|
1812d557b6 | ||
|
|
34cde430a5 | ||
|
|
12a6b58614 | ||
|
|
cb81fccfaf | ||
|
|
1ce0fffd25 | ||
|
|
0c1c4b08c7 | ||
|
|
c875b61003 | ||
|
|
f4b34c8ca5 | ||
|
|
a6b4b5e30c | ||
|
|
64fb8f0c53 | ||
|
|
78a312f61c | ||
|
|
2c6c4426e8 | ||
|
|
a9df0601a6 | ||
|
|
4345f353a0 | ||
|
|
96b525658e | ||
|
|
9525952573 | ||
|
|
76828a87ee | ||
|
|
789eb59904 | ||
|
|
c0265f8fd9 | ||
|
|
891ebb8ff6 | ||
|
|
1111c20d54 | ||
|
|
387176e83d | ||
|
|
80a38b285d | ||
|
|
aa0c02a243 | ||
|
|
3c5932af75 | ||
|
|
f40a7d47f5 | ||
|
|
f85543c7ff | ||
|
|
36d2ff7c3b | ||
|
|
7ba673ed89 | ||
|
|
a0cba79df2 | ||
|
|
c91e8d7aa7 | ||
|
|
e85b0a81ba | ||
|
|
bfc40498bd | ||
|
|
41ac7062f8 | ||
|
|
71c19b566b | ||
|
|
0de72f3abb | ||
|
|
ce3c78d30b | ||
|
|
7152308c25 | ||
|
|
cd838d4902 | ||
|
|
f7799eee59 | ||
|
|
247718bc6c | ||
|
|
6b5521fbf7 | ||
|
|
13e00379ae | ||
|
|
347663716c | ||
|
|
69415ea966 | ||
|
|
6c71e3c583 | ||
|
|
06861ceb55 | ||
|
|
6e286473ab | ||
|
|
6091219aaf | ||
|
|
76cee1287a | ||
|
|
ff138c6d47 | ||
|
|
a89f8b8098 | ||
|
|
f4009a9944 | ||
|
|
16b479d21e | ||
|
|
0f8c20c3ab | ||
|
|
d5c3b258f3 | ||
|
|
ee4a703407 | ||
|
|
e901208721 | ||
|
|
5deb7371ab | ||
|
|
f999195f47 | ||
|
|
9b920cf813 | ||
|
|
4155e8e0ce | ||
|
|
b583530c66 | ||
|
|
43c13c22a8 | ||
|
|
32167b45ce | ||
|
|
f09ae1e2e3 | ||
|
|
086e1e1a74 | ||
|
|
1020637d79 | ||
|
|
9c30d69d55 | ||
|
|
ff673f053b | ||
|
|
2514987d3e | ||
|
|
e332a916b0 | ||
|
|
5eb7faec29 | ||
|
|
8cfebee922 | ||
|
|
f4a22f8aef | ||
|
|
5fd641e8c7 | ||
|
|
4cde537a7f | ||
|
|
56ee4c1ae5 | ||
|
|
1874ad2ff2 | ||
|
|
907ed641bf | ||
|
|
a23ccd863d | ||
|
|
8d145d7a32 | ||
|
|
4a0419e554 | ||
|
|
f23a458319 | ||
|
|
1e324103cc | ||
|
|
85d8ced299 | ||
|
|
0631b8f052 | ||
|
|
649994464c | ||
|
|
8c618780b7 | ||
|
|
0dc2e8994b | ||
|
|
d25ab4f204 | ||
|
|
ff26080c5c | ||
|
|
95bd2dde19 | ||
|
|
6ad31a5441 | ||
|
|
702a82bb38 | ||
|
|
a5e91385b0 | ||
|
|
4c690b9d4c | ||
|
|
695d6e14d4 | ||
|
|
c19f87134e | ||
|
|
3de50e8dd4 | ||
|
|
fb20dae0a8 | ||
|
|
0f8db11f53 | ||
|
|
e3f94156f1 | ||
|
|
cf468fc4d1 | ||
|
|
849cf30b95 | ||
|
|
d08febc711 | ||
|
|
53bfafb84c | ||
|
|
40809e40c2 | ||
|
|
925197ae09 | ||
|
|
07f72de63d | ||
|
|
f17f62b532 | ||
|
|
b97bbe0572 | ||
|
|
9e4cc7fdbc | ||
|
|
7dcb56ea5c | ||
|
|
a814c6d152 | ||
|
|
cbe3a0fde7 | ||
|
|
7e375370fa | ||
|
|
1d149b100b | ||
|
|
1bce75ed53 | ||
|
|
d8a72fe797 | ||
|
|
5bd8319f99 | ||
|
|
d8221b880b | ||
|
|
1316ce5ca8 | ||
|
|
d5562767a2 | ||
|
|
1a03ee8b9b | ||
|
|
d07e53e9a0 | ||
|
|
04160e6acc | ||
|
|
6f4c7ca171 | ||
|
|
2d397efcf5 | ||
|
|
ba8e59e1bd | ||
|
|
568faa526f | ||
|
|
b761fbaabe | ||
|
|
4a493a96d7 | ||
|
|
601244ba74 | ||
|
|
d606197264 | ||
|
|
1fee10e167 | ||
|
|
674802abe4 | ||
|
|
179422a84b | ||
|
|
5c9e4685db | ||
|
|
c59f8c734a | ||
|
|
d2fa2be5af | ||
|
|
2d3d66e9d1 | ||
|
|
21713801ad | ||
|
|
598e2adebe | ||
|
|
8bbb84fdc7 | ||
|
|
59b7bc7b98 | ||
|
|
55d52be3c2 | ||
|
|
3aa4e45bdb | ||
|
|
534976e64f | ||
|
|
3efa9d2030 | ||
|
|
2c4657355f | ||
|
|
68702ca43f | ||
|
|
54a0de9b52 | ||
|
|
94832f3f81 | ||
|
|
fb00ba9efd | ||
|
|
96736cf1de | ||
|
|
834c55ec6f | ||
|
|
6528a434ce | ||
|
|
a24ee0a331 | ||
|
|
e86144bb06 | ||
|
|
ce7cb16cfe | ||
|
|
754bafc069 | ||
|
|
7eff6fde7c | ||
|
|
626dac600a | ||
|
|
f1b2d4340d | ||
|
|
aea4d73e61 | ||
|
|
3d6c74ead1 | ||
|
|
c606f80fe3 | ||
|
|
250ca36f05 | ||
|
|
4c63be066f | ||
|
|
b559eeb7e6 | ||
|
|
a9742dbdc6 | ||
|
|
5feaade1c7 | ||
|
|
31747dfecd | ||
|
|
eda9484413 | ||
|
|
7e904c1d15 | ||
|
|
5f8527ba04 | ||
|
|
082e95b700 | ||
|
|
aef5c61415 | ||
|
|
68fdac532f | ||
|
|
f718284538 | ||
|
|
966283dd6d | ||
|
|
0f3ec9ad73 | ||
|
|
cb685904ef | ||
|
|
5bf545ee90 | ||
|
|
b018ada5c8 | ||
|
|
976e81be43 | ||
|
|
694cb18256 | ||
|
|
a715a5fa37 | ||
|
|
1e10c9d508 | ||
|
|
2aacfea8ea | ||
|
|
43c2cb4ba8 | ||
|
|
c93f708bc8 | ||
|
|
353416a088 | ||
|
|
93b98abb8d | ||
|
|
5e28e38c98 | ||
|
|
0e828e5b3b | ||
|
|
c331d12678 | ||
|
|
f0817b2461 | ||
|
|
d3f2cd5321 | ||
|
|
7017766591 | ||
|
|
841890c178 | ||
|
|
4f5189b0dd | ||
|
|
250ecd13bd | ||
|
|
34133b094b | ||
|
|
75c3939c88 | ||
|
|
cb44430a3f | ||
|
|
be88b5aba2 | ||
|
|
3d0f7b8e7e | ||
|
|
a53d5dc791 | ||
|
|
7f1164b6a6 | ||
|
|
2174f10db5 | ||
|
|
e3c218092c | ||
|
|
cf73ba2905 | ||
|
|
d653b951e3 | ||
|
|
900c0eafac | ||
|
|
bf6eaaf625 | ||
|
|
32f3d214cb | ||
|
|
cd62b2a209 | ||
|
|
ff25b4cb46 | ||
|
|
5c07dd995e | ||
|
|
f54cc28a43 | ||
|
|
9b1c7bb1e3 | ||
|
|
ffe8a729b7 | ||
|
|
a47f356021 | ||
|
|
7d7a34c733 | ||
|
|
e306959ebe | ||
|
|
ce16c4d37f | ||
|
|
565cc05b48 | ||
|
|
287839e498 | ||
|
|
4be0969098 | ||
|
|
f1008b1abf | ||
|
|
8d8b3c2194 | ||
|
|
6631b57fc0 | ||
|
|
88b4bc3753 | ||
|
|
23a4dde10f | ||
|
|
5a47eb8559 | ||
|
|
81cd990052 | ||
|
|
dd9e7cf665 | ||
|
|
b2f50b5327 | ||
|
|
b21fe4b2fc | ||
|
|
5f23a3143c | ||
|
|
ef136c9d00 | ||
|
|
c7e8b724c7 | ||
|
|
0243e7ba8b | ||
|
|
b3f5375283 | ||
|
|
f90f683be5 | ||
|
|
bd23666b45 | ||
|
|
a620c2ec1a | ||
|
|
a723612141 | ||
|
|
2d7d4212c1 | ||
|
|
52cca034cf | ||
|
|
79ec1f5a02 | ||
|
|
68729a9696 | ||
|
|
93383204b3 | ||
|
|
78f17bd083 | ||
|
|
ea87006150 | ||
|
|
c0027c377b | ||
|
|
77b84c1de0 | ||
|
|
a14e2fedcf | ||
|
|
0341399e54 | ||
|
|
1dcf3585fb | ||
|
|
dbb48cf086 | ||
|
|
064c8adcf2 | ||
|
|
cff83e095a | ||
|
|
ff9aecca48 | ||
|
|
53c529a12c | ||
|
|
78454ba876 | ||
|
|
c3c1702d2b | ||
|
|
bffc777b58 | ||
|
|
fcec6a8fdf | ||
|
|
a842f25f89 | ||
|
|
9f2bea8ac1 | ||
|
|
7f9a2a2d34 | ||
|
|
3225f17f5a | ||
|
|
2f8b1dff27 | ||
|
|
7884f972ea | ||
|
|
bfce264537 | ||
|
|
dee5f4c96a | ||
|
|
6bd83137fb | ||
|
|
6c6c38679a | ||
|
|
ca0c700afa | ||
|
|
cc2e434f3d | ||
|
|
4d337f0bee | ||
|
|
539c10883b | ||
|
|
ae8796a570 | ||
|
|
141227d846 | ||
|
|
bb42b87f4e | ||
|
|
866d9dacb6 | ||
|
|
006e32077c | ||
|
|
0aca1c6c7c | ||
|
|
d906d56505 | ||
|
|
3b9ebf358c | ||
|
|
1c643cda5b | ||
|
|
e5697a8070 | ||
|
|
07f1a13cbf | ||
|
|
4c88f3ad64 | ||
|
|
c099d60393 | ||
|
|
5e0d48b40f | ||
|
|
c4f8e83d02 | ||
|
|
a768c1e6c0 | ||
|
|
540325dc20 | ||
|
|
2e57f76c12 | ||
|
|
e71fd6f8b4 | ||
|
|
c721721fc5 | ||
|
|
0ab5d6a7b8 | ||
|
|
66599e5770 | ||
|
|
d7c7463380 | ||
|
|
491a4468dc | ||
|
|
c85150aaea | ||
|
|
c7ba6d2a82 | ||
|
|
ace64cf50f | ||
|
|
cd6d4f6f47 | ||
|
|
1bdf74951a | ||
|
|
eda2b38f46 | ||
|
|
f14e85d6c4 | ||
|
|
76f668dddd | ||
|
|
ce01d696a0 | ||
|
|
8179a3a349 | ||
|
|
e5c397203e | ||
|
|
60aeba732d | ||
|
|
de70ef1ef6 | ||
|
|
1d02c288b3 | ||
|
|
3776920807 | ||
|
|
7d54cde8eb | ||
|
|
1bab2061bd | ||
|
|
34e30cba0d | ||
|
|
ed600c9077 | ||
|
|
30dc6d2b19 | ||
|
|
77c3b4636e | ||
|
|
25edcbaff9 | ||
|
|
553b8fb2e0 | ||
|
|
461b401e28 | ||
|
|
d2a4611d1e | ||
|
|
65c3dbba2c | ||
|
|
7ef0b5b428 | ||
|
|
89589d7ef5 | ||
|
|
70b782c7e7 | ||
|
|
9732b0a636 | ||
|
|
00acaa56b9 | ||
|
|
1cea2be9c1 | ||
|
|
94381bd899 | ||
|
|
23d935d7ec | ||
|
|
69da13b261 | ||
|
|
a6519e0ff7 | ||
|
|
b701a36e21 | ||
|
|
24a34088d8 | ||
|
|
0eeb092aad | ||
|
|
7d4726d12e | ||
|
|
e13bf164ea | ||
|
|
07434b19ae | ||
|
|
819fa88eb7 | ||
|
|
95976814f5 | ||
|
|
0a2dd2a330 | ||
|
|
65f125d998 | ||
|
|
7a2f6ebfd5 | ||
|
|
5d89fa3f07 | ||
|
|
4a66e28584 | ||
|
|
85990bbeb3 | ||
|
|
e0311e1530 | ||
|
|
6eb4dbf9cd | ||
|
|
a90453461e | ||
|
|
7e04c9a909 | ||
|
|
e51602ccfa | ||
|
|
ca7adb59db | ||
|
|
3a12802a4b | ||
|
|
c770eab3e3 | ||
|
|
079b8e7337 | ||
|
|
2e4593eee7 | ||
|
|
3ca80a7bf3 | ||
|
|
a4c15e5fa5 | ||
|
|
a40748e3aa | ||
|
|
029aac8059 | ||
|
|
2970f66218 | ||
|
|
ef238de7a7 | ||
|
|
af05313dc5 | ||
|
|
df0d1b57a0 | ||
|
|
23cff25ed5 | ||
|
|
c70b13a650 | ||
|
|
a51c6a7670 | ||
|
|
0bdb643e14 | ||
|
|
0cbbbf1287 | ||
|
|
9a00b62d28 | ||
|
|
05dce760d6 | ||
|
|
4eaf91c3dc | ||
|
|
818c3d6140 | ||
|
|
5e19cd0084 | ||
|
|
7b06257955 | ||
|
|
2af21c8003 | ||
|
|
db6f907946 | ||
|
|
125ed8bff2 | ||
|
|
1d0f2e9d31 | ||
|
|
43efc930f4 | ||
|
|
737e18d2de | ||
|
|
445445603f | ||
|
|
5957c94958 | ||
|
|
1c41661712 | ||
|
|
1b2909605e | ||
|
|
c6a13f970f | ||
|
|
f2f57dc5a5 | ||
|
|
c6de1ab56c | ||
|
|
0392e37eed | ||
|
|
f630c4ec6c | ||
|
|
e668642b23 | ||
|
|
c4c0c050af | ||
|
|
b4ff8360ba | ||
|
|
708a2ec703 | ||
|
|
407cb2f7e6 | ||
|
|
0b22e76b85 | ||
|
|
7671187160 | ||
|
|
5695e0e6b6 | ||
|
|
e22b2f00dc | ||
|
|
2a017c3a7c | ||
|
|
ce65c3113a | ||
|
|
65a2ebb8ad | ||
|
|
f0a542b154 | ||
|
|
dfe1c940bc | ||
|
|
3cd8708368 | ||
|
|
e677161e49 | ||
|
|
818c6711d8 | ||
|
|
f60cc76f3e | ||
|
|
685321fdc5 | ||
|
|
303215d42f | ||
|
|
f313752888 | ||
|
|
28b83a486e | ||
|
|
80289bd452 | ||
|
|
054be39feb | ||
|
|
6448e049d1 | ||
|
|
8e1f7c8d6f | ||
|
|
c4e31e7a58 | ||
|
|
0860d9712e | ||
|
|
1a17cbd26b | ||
|
|
c2b1d3b551 | ||
|
|
d4fac798fc | ||
|
|
b009b23245 | ||
|
|
f276f1e2f5 | ||
|
|
154e57748f | ||
|
|
6854fee73e | ||
|
|
24240bfba4 | ||
|
|
40e32daabe | ||
|
|
008cbc8972 | ||
|
|
8a1d2b614a | ||
|
|
b79d03d9a4 | ||
|
|
83fb9f84ed | ||
|
|
c634830b9f | ||
|
|
24edd68833 | ||
|
|
6913798250 | ||
|
|
131bd2c2cd | ||
|
|
55ae55c803 | ||
|
|
63f0eea70c | ||
|
|
38aeef0760 | ||
|
|
88d5f5d76c | ||
|
|
486ba5fe0a | ||
|
|
76f85389ae | ||
|
|
3d311496e0 | ||
|
|
fdbfe0f84b | ||
|
|
8a25592904 | ||
|
|
7edf024c71 | ||
|
|
ee4d9890e7 | ||
|
|
9cc06a94ec | ||
|
|
dd6dc1d334 | ||
|
|
fb2bafb49e | ||
|
|
bc3b8e73fe | ||
|
|
4d48441102 | ||
|
|
c0fa980f70 | ||
|
|
bb3bac9933 | ||
|
|
1ac5fa544b | ||
|
|
91bb4d4b00 | ||
|
|
aecdd0fdd5 | ||
|
|
2e5f3cd25c | ||
|
|
8558c55284 | ||
|
|
b16b49aea4 | ||
|
|
09678eeef4 | ||
|
|
fad43842a4 | ||
|
|
4b448a877c | ||
|
|
f090af2292 | ||
|
|
7faaac94dd | ||
|
|
dae0b25717 | ||
|
|
de3d9dca72 | ||
|
|
a91abb3e8d | ||
|
|
dabea8b972 | ||
|
|
dedffb3560 | ||
|
|
5eb2306e9a | ||
|
|
8a2e06a713 | ||
|
|
23b495aee8 | ||
|
|
b9d314e64c | ||
|
|
5a4826e660 | ||
|
|
20bf67d352 | ||
|
|
8b4f1e1383 | ||
|
|
20297e359d | ||
|
|
de7409fd07 | ||
|
|
8498f12a9d | ||
|
|
e949eb8623 | ||
|
|
201d17bc31 | ||
|
|
143e9bd210 | ||
|
|
9ec874d8a6 | ||
|
|
2543afebf1 | ||
|
|
81a859604c | ||
|
|
d3be4bba37 | ||
|
|
6779c9eb36 | ||
|
|
733da570c8 | ||
|
|
65258d5b6a | ||
|
|
618c8bb5ad | ||
|
|
ba8684dfc7 | ||
|
|
36a1bd9e0f | ||
|
|
fe56c1c6f2 | ||
|
|
86a37e6f8d | ||
|
|
da1aad7b92 | ||
|
|
876621f8af | ||
|
|
8a908b720f | ||
|
|
dadde52c40 | ||
|
|
369dd98cbe | ||
|
|
8cdd6cd131 | ||
|
|
973bc21f37 | ||
|
|
2ba327345d | ||
|
|
138ecc4ee1 | ||
|
|
5b9a8e9bf9 | ||
|
|
e520486892 | ||
|
|
ecb91613e8 | ||
|
|
d4ac76081e | ||
|
|
63727b67ee | ||
|
|
d969dcecbf | ||
|
|
49c9a202e0 | ||
|
|
512c8de526 | ||
|
|
012a929067 | ||
|
|
bec4e8d8e4 | ||
|
|
9f0993f29b | ||
|
|
1b79448ac2 | ||
|
|
6cef7d5060 | ||
|
|
752545ec0e | ||
|
|
adbebf7ecc | ||
|
|
4d57ac0ce1 | ||
|
|
24b77d9dcb | ||
|
|
cc0f431c35 | ||
|
|
1e7927fbff | ||
|
|
129e56e570 | ||
|
|
5beef690ad | ||
|
|
b0383b0978 | ||
|
|
16c6a11b77 | ||
|
|
9117b13576 | ||
|
|
af55978918 | ||
|
|
0446a1b3a8 | ||
|
|
3986dd4c32 | ||
|
|
79afa16a7f | ||
|
|
087ed0aa6a | ||
|
|
44fa3d2d07 | ||
|
|
8654d83a33 | ||
|
|
efb78c823c | ||
|
|
3bb7f0c291 | ||
|
|
62e0db7c9b | ||
|
|
130695fcb3 | ||
|
|
05fa301ecb | ||
|
|
ee90f730b5 | ||
|
|
7b8a23453f | ||
|
|
cb44479420 | ||
|
|
afb3806326 | ||
|
|
d96bfd21b7 | ||
|
|
bbc3100bb3 | ||
|
|
ac1bb2a6bd | ||
|
|
41ef391d15 | ||
|
|
e51aa5899a | ||
|
|
38bb975abd | ||
|
|
a249b315ca | ||
|
|
eba85e1ec3 | ||
|
|
c1c92256ea | ||
|
|
58ce97c0b4 | ||
|
|
ca58bab1f0 | ||
|
|
052c484abd | ||
|
|
7a213c9d6f | ||
|
|
f4de7422b3 | ||
|
|
a3d18d0429 | ||
|
|
77fbffdc4b | ||
|
|
63ea01104b | ||
|
|
cad0f1f396 | ||
|
|
677fb93494 | ||
|
|
55cbb12701 | ||
|
|
14099813f0 | ||
|
|
b1fd4e853c | ||
|
|
c1d3fc1b78 | ||
|
|
829980a941 | ||
|
|
d1e1a90d08 | ||
|
|
d56de091f6 | ||
|
|
87bb926fef | ||
|
|
e983f93859 | ||
|
|
c721acc2fa | ||
|
|
16fd4c83ac | ||
|
|
999dfb84ee | ||
|
|
c6557e5078 | ||
|
|
f7aab02978 | ||
|
|
fdcd67dd6b | ||
|
|
6c611d71dd | ||
|
|
b7e2396269 | ||
|
|
ab62875ab1 | ||
|
|
a499fdbb13 | ||
|
|
bf2f0c38ed | ||
|
|
b14c05ccae | ||
|
|
66e7cd41b7 | ||
|
|
e9a15d9189 | ||
|
|
e4aee13e9e | ||
|
|
551f9fcdf9 | ||
|
|
2ec5e948b4 | ||
|
|
60b7f504e6 | ||
|
|
f99668f551 | ||
|
|
8ade41b270 | ||
|
|
a36a5363b4 | ||
|
|
cb22fb54e8 | ||
|
|
1dcfdfdb65 | ||
|
|
d309eb8fa1 | ||
|
|
16dfdbe314 | ||
|
|
b926ed7b00 | ||
|
|
67a6b88104 | ||
|
|
631699bf80 | ||
|
|
80801bf7d0 | ||
|
|
4850a033fa | ||
|
|
0b4029f7a1 | ||
|
|
c07ef0d92a | ||
|
|
ca48c5ddff | ||
|
|
a20c362983 | ||
|
|
7beb204b9d | ||
|
|
3e4f9451a0 | ||
|
|
6e5846d206 | ||
|
|
5965591934 | ||
|
|
78f8a03da5 | ||
|
|
4d10584233 | ||
|
|
106fa64060 | ||
|
|
95be8b2cf3 | ||
|
|
53d7c6c085 | ||
|
|
e4df75519c | ||
|
|
0438fa6816 | ||
|
|
2dab4ccf85 | ||
|
|
b338e76649 | ||
|
|
c737ab764e | ||
|
|
990e73fce6 | ||
|
|
99fac3ae1c | ||
|
|
ad0bcc7de9 | ||
|
|
8069853dda | ||
|
|
14ed669eba | ||
|
|
9ff5fa4acf | ||
|
|
d026024e8c | ||
|
|
25d1491e6b | ||
|
|
4e1415faf2 | ||
|
|
692f64a78a | ||
|
|
b20b8af5a6 | ||
|
|
d34cf636d8 | ||
|
|
3c72ea40b4 | ||
|
|
f87c7833a3 | ||
|
|
f3931140fe | ||
|
|
8459117c23 | ||
|
|
bbc0c97329 | ||
|
|
1d8b152758 | ||
|
|
1c4652448c | ||
|
|
3a34e606b8 | ||
|
|
ca55748103 | ||
|
|
43fa199cfa | ||
|
|
f288ca23ae | ||
|
|
4026714461 | ||
|
|
39a8652708 | ||
|
|
fb432465ea | ||
|
|
42bccfe1ec | ||
|
|
98566150d2 | ||
|
|
676e1705c1 | ||
|
|
172cc1ffea | ||
|
|
6845a52e92 | ||
|
|
b5dc89f0e6 | ||
|
|
ecaea51fe0 | ||
|
|
77baf08092 | ||
|
|
63ff5a2fe3 | ||
|
|
97662f4b3e | ||
|
|
38869d5035 | ||
|
|
08047d4ab7 | ||
|
|
cf33853e68 | ||
|
|
768e618ed9 | ||
|
|
025ed51f11 | ||
|
|
ab9dae3bf3 | ||
|
|
74da5dfd4b | ||
|
|
aaaf452fdc | ||
|
|
d2b97d8aea | ||
|
|
8b95216493 | ||
|
|
f933fa8c78 | ||
|
|
f955309139 | ||
|
|
9c65a82430 | ||
|
|
7b4dda9c73 | ||
|
|
9ad7d2d977 | ||
|
|
e3b4b2f667 | ||
|
|
60a1374fb4 | ||
|
|
7fcbc3c003 | ||
|
|
40421f4321 | ||
|
|
ad2683b610 | ||
|
|
7d49699e5f | ||
|
|
b34a239096 | ||
|
|
02d1251fe4 | ||
|
|
95e58ebb9f | ||
|
|
1cb2704f1b | ||
|
|
dea71f1aa9 | ||
|
|
aee975b7d8 | ||
|
|
18b6d51644 | ||
|
|
3a5ff851af | ||
|
|
cd929345e6 | ||
|
|
de232dd726 | ||
|
|
8ebe99d4f5 | ||
|
|
32f760a461 | ||
|
|
65eaab5cf4 | ||
|
|
51698944e0 | ||
|
|
64fc924357 | ||
|
|
c61a0cdd22 | ||
|
|
9a1de81fc5 | ||
|
|
3633d3cd73 | ||
|
|
9a0465eb05 | ||
|
|
088e199aa2 | ||
|
|
bc4c043d7e | ||
|
|
764299ea8a | ||
|
|
2abc87a1f2 | ||
|
|
75fa116c88 | ||
|
|
cc7575adab | ||
|
|
efb1a2c8e0 | ||
|
|
c2972fcaa0 | ||
|
|
250fd71e16 | ||
|
|
783c165201 | ||
|
|
326a3c5932 | ||
|
|
0af1a85442 | ||
|
|
10e7bb97ee | ||
|
|
c319bbc5f3 | ||
|
|
9e42f70e5f | ||
|
|
ff47152187 | ||
|
|
94b6ce5ca0 | ||
|
|
8e1020f134 | ||
|
|
be7a0fef41 | ||
|
|
9fe7bb7362 | ||
|
|
5d4b121ac1 | ||
|
|
cb424a5f78 | ||
|
|
88ab9d0756 | ||
|
|
29f4fd40ed | ||
|
|
b7f7ba06b9 | ||
|
|
94f8ac8d1d | ||
|
|
72ab38bd2f | ||
|
|
b3d5466131 | ||
|
|
bafbd8f1b6 | ||
|
|
8c1ce03183 | ||
|
|
97490b272f | ||
|
|
2afbe9514b | ||
|
|
603be609a1 | ||
|
|
4590be7b65 | ||
|
|
097a2f6582 | ||
|
|
f818e5bc51 | ||
|
|
34cf8fc43c | ||
|
|
7712765c3a | ||
|
|
eaf1304eda | ||
|
|
f97f32df0f | ||
|
|
79eecd6db4 | ||
|
|
5a75d8e788 | ||
|
|
42e58fb73a | ||
|
|
dba996b2c4 | ||
|
|
647f0dd34b | ||
|
|
a691a519e8 | ||
|
|
86075973b5 | ||
|
|
97ea15300c | ||
|
|
a150a8fd52 | ||
|
|
ad4e20da52 | ||
|
|
e43ab1e46f | ||
|
|
e32e280cf1 | ||
|
|
c1a07e0943 | ||
|
|
93fe641dbf | ||
|
|
d8194c0886 | ||
|
|
75ce4766d3 | ||
|
|
7eff3bf854 | ||
|
|
af143ae7dc | ||
|
|
a0e9140dde | ||
|
|
33e5d46c87 | ||
|
|
f74b206864 | ||
|
|
f334ebe577 | ||
|
|
9c39394d7f | ||
|
|
8ea0e6977a | ||
|
|
bf006473c0 | ||
|
|
568af27be4 | ||
|
|
bd55f86203 | ||
|
|
d95e577639 | ||
|
|
a904e54122 | ||
|
|
2a97655a8d | ||
|
|
d878718510 | ||
|
|
416227a2a2 | ||
|
|
7d1baa8798 | ||
|
|
fe2ee64ec9 | ||
|
|
96819628d6 | ||
|
|
1b30d7909c | ||
|
|
baf253d44e | ||
|
|
b7a4d50007 | ||
|
|
625b4befb5 | ||
|
|
30678f51bd | ||
|
|
7a4103dd48 | ||
|
|
bca3ff2eac | ||
|
|
28e2934a89 | ||
|
|
0563af682d | ||
|
|
5ccd63250b | ||
|
|
f262a0745d | ||
|
|
c42b63b008 | ||
|
|
e7ffb80877 | ||
|
|
919166212f | ||
|
|
deb124f645 | ||
|
|
86b1ff5125 | ||
|
|
2c8c96149f | ||
|
|
82e4cc9951 | ||
|
|
04df06404f | ||
|
|
f6fcf5fce4 | ||
|
|
ac5e92c879 | ||
|
|
37ccc80ba4 | ||
|
|
8153f97899 | ||
|
|
8dedc6d3dc | ||
|
|
807d75e13a | ||
|
|
feac1786e1 | ||
|
|
09e0f4e36c | ||
|
|
9999332107 | ||
|
|
d4ec7e5357 | ||
|
|
064b3caf08 | ||
|
|
c83d2e9513 | ||
|
|
48ff516215 | ||
|
|
cdccbb59ab | ||
|
|
2fe5a863ac | ||
|
|
7d1fccf474 | ||
|
|
0a8dbc8831 | ||
|
|
177a3c2cbd | ||
|
|
9f22e634f5 | ||
|
|
55a8c7b540 | ||
|
|
76c11fe65a | ||
|
|
b15ed00feb | ||
|
|
fc3ff34c2d | ||
|
|
5faa0f55bc | ||
|
|
77f0731c3e | ||
|
|
ffff623852 | ||
|
|
a6bc40b506 | ||
|
|
a034515019 | ||
|
|
49c8f23bf7 | ||
|
|
29b7a71812 | ||
|
|
8de3283dd1 | ||
|
|
4bbe5b3358 | ||
|
|
3dd3af4a73 | ||
|
|
7e7b129822 | ||
|
|
8bcc1d81d2 | ||
|
|
aa8e92e9a5 | ||
|
|
a8196ec99e | ||
|
|
bd3034819e | ||
|
|
7bb86c4e2a | ||
|
|
94ed21d1cf | ||
|
|
1bb7c31ee4 | ||
|
|
06d12b376c | ||
|
|
e9c8137fd8 | ||
|
|
eaaddf40d2 | ||
|
|
3e0c565019 | ||
|
|
984603112f | ||
|
|
fe29246256 | ||
|
|
84d0664112 | ||
|
|
3d3c59cea6 | ||
|
|
7940428b9b | ||
|
|
2e485b9ac5 | ||
|
|
b76aa926f6 | ||
|
|
58d81546da | ||
|
|
7a480990c6 | ||
|
|
afb10efd83 | ||
|
|
e2f05e137f | ||
|
|
d72ade9c70 | ||
|
|
64650fcdee | ||
|
|
e1acb7df13 | ||
|
|
319a30cf3a | ||
|
|
e631f1b313 | ||
|
|
617f31b47f | ||
|
|
61e9aac92d | ||
|
|
75812804f4 | ||
|
|
b60f36f211 | ||
|
|
e342c878d0 | ||
|
|
c6b3cadf55 | ||
|
|
869a361d09 | ||
|
|
f83119e188 | ||
|
|
578c4b444c | ||
|
|
d63f9be03f | ||
|
|
62fe02415a | ||
|
|
481970c763 | ||
|
|
7c8dc66ba1 | ||
|
|
20ffbf5a82 | ||
|
|
2b6f26b214 | ||
|
|
d743ec2d2b | ||
|
|
dfab332285 | ||
|
|
bbbce8a981 | ||
|
|
0dc4ccb42f | ||
|
|
b46c2c2527 | ||
|
|
3b128f844b | ||
|
|
d38b3d09ba | ||
|
|
d35c5ffa04 | ||
|
|
eb7243233e | ||
|
|
21bf629505 | ||
|
|
702022001d | ||
|
|
d9549ad634 | ||
|
|
daf91dbf95 | ||
|
|
2bc19120d9 | ||
|
|
8ddfa8cd68 | ||
|
|
076d10358e | ||
|
|
5930983641 | ||
|
|
a0c5cb51aa | ||
|
|
8e659745fd | ||
|
|
87297d2a07 | ||
|
|
8f23611f1a | ||
|
|
e2affb0f38 | ||
|
|
26e6041b7a | ||
|
|
81707a45d5 | ||
|
|
805f2b28a9 | ||
|
|
22aa02895e | ||
|
|
6bb89778b2 | ||
|
|
6631b9e78f | ||
|
|
7f7d5b32da | ||
|
|
52def444ab | ||
|
|
7d52ab7c54 | ||
|
|
852b324819 | ||
|
|
e019441ede | ||
|
|
ac8f8d0dd6 | ||
|
|
3fa2e7e12e | ||
|
|
5d099491df | ||
|
|
d7ca0f7734 | ||
|
|
5d31338b02 | ||
|
|
a44b81d240 | ||
|
|
742e499de0 | ||
|
|
eb395d6d2d | ||
|
|
a1383c34b5 | ||
|
|
e538da3959 | ||
|
|
687a072dc8 | ||
|
|
5dc9881241 | ||
|
|
0b3a7e2f0f | ||
|
|
123455a5bb | ||
|
|
34c8d8dd2e | ||
|
|
3f4c92d739 | ||
|
|
eb10245df1 | ||
|
|
2dbfcbb378 | ||
|
|
a717f5c030 | ||
|
|
3a711790c5 | ||
|
|
5d77cb0396 | ||
|
|
9972ea578b | ||
|
|
0bb3762397 | ||
|
|
fbd6e21152 | ||
|
|
bea62537df | ||
|
|
fdbe4c5bd5 | ||
|
|
91e779a52c | ||
|
|
e2c5e92cd3 | ||
|
|
5929676ea2 | ||
|
|
36e180ab91 | ||
|
|
1e8fe22553 | ||
|
|
8e1bd2d8f3 | ||
|
|
239ce262ef | ||
|
|
5be66e98c2 | ||
|
|
cacd072c15 | ||
|
|
14c6a1bf23 | ||
|
|
b27dfd4c77 | ||
|
|
4622e9658d | ||
|
|
f8bda517c3 | ||
|
|
de3d9fdb8b | ||
|
|
c6291bea52 | ||
|
|
a266e3c898 | ||
|
|
f9c34d6808 | ||
|
|
10a91cac2f | ||
|
|
f7e25e9c63 | ||
|
|
5f821a58a3 | ||
|
|
4a2ad4e6f9 | ||
|
|
4a2bbb52c1 | ||
|
|
ed401199bd | ||
|
|
eee3a263f5 | ||
|
|
eca1d9aabd | ||
|
|
33ff9cfbb6 | ||
|
|
de8e6d7174 | ||
|
|
cd9332cddf | ||
|
|
fb4a861c0d | ||
|
|
c30460df4c | ||
|
|
31e86a36f8 | ||
|
|
0b4fe85b33 | ||
|
|
99e7a1705a | ||
|
|
27c6259b53 | ||
|
|
1ecae14bae | ||
|
|
c56a09f318 | ||
|
|
ffec2699ea | ||
|
|
46faf0280c | ||
|
|
3b774ed507 | ||
|
|
9c62bbbc05 | ||
|
|
dc6b1ef47b | ||
|
|
1f8e1d2a29 | ||
|
|
b30a948601 | ||
|
|
e90568e044 | ||
|
|
c74b5ba3a2 | ||
|
|
2085d6afad | ||
|
|
8bfdbd0fed | ||
|
|
cc3dc6aff0 | ||
|
|
d01284d147 | ||
|
|
7b7d5118d6 | ||
|
|
a03a7dcb4a | ||
|
|
dfae413afc | ||
|
|
253642a85e | ||
|
|
ce64c8e7d1 | ||
|
|
d7ae0105c3 | ||
|
|
e7320e7bd3 | ||
|
|
a214565803 | ||
|
|
61f1290bea | ||
|
|
ba5e512d10 | ||
|
|
624e4bca40 | ||
|
|
613237727d | ||
|
|
fd2ddca6f2 | ||
|
|
e114c18031 | ||
|
|
49e22742de | ||
|
|
422d7942ef | ||
|
|
a63e7162bc | ||
|
|
1f973b72b8 | ||
|
|
d3dd97f167 | ||
|
|
f0f17e0041 | ||
|
|
d6fa8bf233 | ||
|
|
ec5e685a1c | ||
|
|
c88b95751c | ||
|
|
72ae25bc53 | ||
|
|
02e5cc1da8 | ||
|
|
3d092df56d | ||
|
|
912d5c700c | ||
|
|
6d3c492518 | ||
|
|
5e29e3f1cb | ||
|
|
0558495760 | ||
|
|
0471dfa2f8 | ||
|
|
7883e6544e | ||
|
|
6da87e4a79 | ||
|
|
bafe4fff93 | ||
|
|
da782398a2 | ||
|
|
4b26b46f6a | ||
|
|
0f1e69a2df | ||
|
|
85f2bd464c | ||
|
|
8a4956b736 | ||
|
|
4a369af4c7 | ||
|
|
9749305ecd | ||
|
|
639178dbdc | ||
|
|
62d038b547 | ||
|
|
9b80e3a33b | ||
|
|
0ea54f0458 | ||
|
|
374c52f71f | ||
|
|
60f63e125a | ||
|
|
7cfa7f3de4 | ||
|
|
92409831c2 | ||
|
|
e04790a628 | ||
|
|
cd7bf40508 | ||
|
|
dc378e9ce7 | ||
|
|
5fcdcec1a8 | ||
|
|
8773704c8b | ||
|
|
291fd1857e | ||
|
|
0aa4aeaddc | ||
|
|
ca81f1b2e8 | ||
|
|
fca3a14410 | ||
|
|
d105e80ed8 | ||
|
|
ce63faa597 | ||
|
|
25c1b63a00 | ||
|
|
548728abba | ||
|
|
2ebdbd565a | ||
|
|
86376616ff | ||
|
|
7c6865f948 | ||
|
|
c2da0070f5 | ||
|
|
bf2a2aed66 | ||
|
|
403ea0a0e1 | ||
|
|
27976cbe1a | ||
|
|
70147396a4 | ||
|
|
d6aed16e7c | ||
|
|
0414bae820 | ||
|
|
620866bc39 | ||
|
|
55f080e33f | ||
|
|
9f2b1b03d7 | ||
|
|
c0a0f3aaf5 | ||
|
|
7726b5c56b | ||
|
|
3daff8ab8a | ||
|
|
428c2097c7 | ||
|
|
7786583ecf | ||
|
|
9b79ea7d30 | ||
|
|
3dc8436362 | ||
|
|
9f1f2a4845 | ||
|
|
40204e8133 | ||
|
|
133b1067c5 | ||
|
|
5c8287203e | ||
|
|
061bbb1914 | ||
|
|
572168ef20 | ||
|
|
1aa27f2da3 | ||
|
|
be76614c90 | ||
|
|
e26d355fb7 | ||
|
|
d8dbcef5dd | ||
|
|
5d6a6590bf | ||
|
|
7dfdfe5b50 | ||
|
|
36fcc460f4 | ||
|
|
24b03d42d6 | ||
|
|
60275d3637 | ||
|
|
9b5b471802 | ||
|
|
1edb96f526 | ||
|
|
f949bdcfe4 | ||
|
|
21a45a940e | ||
|
|
fb61dfd39d | ||
|
|
9b5940505b | ||
|
|
8c07a67fe9 | ||
|
|
0f9687ce62 | ||
|
|
1460e46d1f | ||
|
|
692521c49d | ||
|
|
2f1d8cc196 | ||
|
|
eeabb47fb6 | ||
|
|
e078f584eb | ||
|
|
f86322545a | ||
|
|
720e19a01f | ||
|
|
3560fed86e | ||
|
|
5f8f5a9f85 | ||
|
|
1aae24b831 | ||
|
|
b544b1c3d4 | ||
|
|
f462f87183 | ||
|
|
6ed7ef25b2 | ||
|
|
bc79d09f2d | ||
|
|
5b2becb87f | ||
|
|
cd808fb5a5 | ||
|
|
c8a4e40bcf | ||
|
|
911b6c9679 | ||
|
|
03041f87c3 | ||
|
|
360c53d6ca | ||
|
|
3f1d555c71 | ||
|
|
ae1d72265c | ||
|
|
9570c65d88 | ||
|
|
3e0b04509a | ||
|
|
0884379e0b | ||
|
|
ec16532028 | ||
|
|
c8f13544a8 | ||
|
|
44bfe55413 | ||
|
|
b95c1adc86 | ||
|
|
b3a94c26d9 | ||
|
|
159c7238a8 | ||
|
|
70f40bab1d | ||
|
|
6c1a9dc14b | ||
|
|
816381a6a8 | ||
|
|
dd84bca638 | ||
|
|
a5d2019a39 | ||
|
|
26cee564c9 | ||
|
|
316b8a1375 | ||
|
|
618b25df08 | ||
|
|
8f9c4cd217 | ||
|
|
c6e2e33e87 | ||
|
|
db605ea7ca | ||
|
|
a1507d4844 | ||
|
|
c6340a64fe | ||
|
|
265b440c37 | ||
|
|
ea8e6d978d | ||
|
|
c3f5bc6bfb | ||
|
|
e322f6dbe2 | ||
|
|
83059a013c | ||
|
|
e374392450 | ||
|
|
72d505b2f1 | ||
|
|
a11bff0c7b | ||
|
|
a820ee4c82 | ||
|
|
a18be78bd3 | ||
|
|
83b5806cec | ||
|
|
4d7a1199ea | ||
|
|
d47cac563a | ||
|
|
2969290c63 | ||
|
|
277557cd99 | ||
|
|
21db7d438b | ||
|
|
61ff2da15c | ||
|
|
ad8296a535 | ||
|
|
aec3318f4c | ||
|
|
3297c3a2e2 | ||
|
|
84759de36f | ||
|
|
a562126f2f | ||
|
|
1901134601 | ||
|
|
eecb6986ee | ||
|
|
508cada017 | ||
|
|
2abae2f21a | ||
|
|
82c17dbde2 | ||
|
|
425499b3aa | ||
|
|
96605766bb | ||
|
|
161012b0a7 | ||
|
|
0669a053db | ||
|
|
ab66e77740 | ||
|
|
381cd53551 | ||
|
|
1f0e92a752 | ||
|
|
98b3496717 | ||
|
|
4200e2e4e4 | ||
|
|
e239ae1aba | ||
|
|
2acfc307b7 | ||
|
|
186f1cf714 | ||
|
|
a5cf42b7c8 | ||
|
|
fd7dba8860 | ||
|
|
32d7e365d2 | ||
|
|
1078cc1c91 | ||
|
|
c97fc370cd | ||
|
|
fca8da118e | ||
|
|
dda56405e6 | ||
|
|
f0f23d491c | ||
|
|
44c10d720a | ||
|
|
690e5a7f9c | ||
|
|
e4fdbc3cb4 | ||
|
|
fe2b86ba83 | ||
|
|
8fb9557520 | ||
|
|
25c91b398a | ||
|
|
8a524dd98f | ||
|
|
7371f8927c | ||
|
|
3d4f58d564 | ||
|
|
f0e32c88ec | ||
|
|
5ae3eccaf1 | ||
|
|
093f12254f | ||
|
|
3a8afe2969 | ||
|
|
fff5ae97f2 | ||
|
|
3c626e3ea5 | ||
|
|
26f57141a1 | ||
|
|
419aa9dcba | ||
|
|
3f15456b9c | ||
|
|
f67a2fa865 | ||
|
|
0f6de542bf | ||
|
|
1a529841e0 | ||
|
|
a9bf6a0e3b | ||
|
|
76dcd7d96e | ||
|
|
6aa1361b1a | ||
|
|
f623a4ecef | ||
|
|
aa465a12aa | ||
|
|
81ba623423 | ||
|
|
4f6f6cca0f | ||
|
|
56346f2a52 | ||
|
|
edcd3f5145 | ||
|
|
7acd3d5297 | ||
|
|
1732c16778 | ||
|
|
913d440c61 | ||
|
|
8cdb4d48f2 | ||
|
|
907ac05c00 | ||
|
|
067558529c | ||
|
|
c97e653ba1 | ||
|
|
9a935ba90c | ||
|
|
134ed51517 | ||
|
|
993dd84af9 | ||
|
|
28e3ab73fa | ||
|
|
70a5efa1d6 | ||
|
|
a51a355a53 | ||
|
|
fdd0a33571 | ||
|
|
6547d03b91 | ||
|
|
cc0c2f1b3c | ||
|
|
c80c59c692 | ||
|
|
10de191dd5 | ||
|
|
1626cec089 | ||
|
|
0404776d87 | ||
|
|
4398fca1bd | ||
|
|
e94ca12f9f | ||
|
|
036c2f6a1c | ||
|
|
611304e257 | ||
|
|
cf26447f7c | ||
|
|
e5b8e04dde | ||
|
|
bb201e6ca4 | ||
|
|
bb58d633c0 | ||
|
|
56ff8755d4 | ||
|
|
57fc027f77 | ||
|
|
bdb7c226f1 | ||
|
|
17e32017a7 | ||
|
|
2c772d0f4c | ||
|
|
769ff84a65 | ||
|
|
fd1fbd4843 | ||
|
|
eaa9430e26 | ||
|
|
2e5de88445 | ||
|
|
b4b9910203 | ||
|
|
afeeadd665 | ||
|
|
fcbeb10159 | ||
|
|
65227f601e | ||
|
|
56ae4dcd12 | ||
|
|
2b2c8e6b82 | ||
|
|
49c032315c | ||
|
|
15109f801e | ||
|
|
3de0a16a9d | ||
|
|
bb49b0c16a | ||
|
|
9561414985 | ||
|
|
db7354ab72 | ||
|
|
34396dbbec | ||
|
|
d842a2f62e | ||
|
|
a17c32bed0 | ||
|
|
fab0b91a79 | ||
|
|
88974d552d | ||
|
|
b90a38ce8b | ||
|
|
b3df27c362 | ||
|
|
854ea26ab7 | ||
|
|
e385b3499b | ||
|
|
77d323b38c | ||
|
|
64eeb091b8 | ||
|
|
65f5f8e8e2 | ||
|
|
6b3ee1aaaf | ||
|
|
27ca48c6bb | ||
|
|
2786c776e3 | ||
|
|
23cd5b906b | ||
|
|
0f9d20129d | ||
|
|
4649bd3906 | ||
|
|
3048ac2f6d | ||
|
|
8679377fcf | ||
|
|
db5264af3c | ||
|
|
059fbb9e5d | ||
|
|
01303c1e31 | ||
|
|
a8aaa793a0 | ||
|
|
c5698e82da | ||
|
|
ec12f7a5e7 | ||
|
|
b87fec554f | ||
|
|
740981376d | ||
|
|
8694364aa3 | ||
|
|
f1b1fee6e4 | ||
|
|
915596b23e | ||
|
|
6d65cb77ec | ||
|
|
51e2f8e49b | ||
|
|
0a7fc356b6 | ||
|
|
ff0f05a1c1 | ||
|
|
0ea9362d06 | ||
|
|
9d3932bd82 | ||
|
|
8c787fa7f7 | ||
|
|
2508e71324 | ||
|
|
b2f4f96ef9 | ||
|
|
fdae297fca | ||
|
|
36488fd836 | ||
|
|
ee01c944b4 | ||
|
|
d7f4f392d2 | ||
|
|
1756093618 | ||
|
|
1734c6e6bf | ||
|
|
839f345fa3 | ||
|
|
d69b5385e4 | ||
|
|
eb6b5755e7 | ||
|
|
9c65d9f957 | ||
|
|
cfa187f7d9 | ||
|
|
30d0fbeae6 | ||
|
|
9b21656314 | ||
|
|
b1b06a38af | ||
|
|
d2fffe5b88 | ||
|
|
09d560888e | ||
|
|
fa28326ed6 | ||
|
|
9ea4a6b7b6 | ||
|
|
ffa6fafcc1 | ||
|
|
4be5b80ff6 | ||
|
|
5028b07aaa | ||
|
|
7ce5dcdead | ||
|
|
7d8571b0e1 | ||
|
|
fca2fe2c8a | ||
|
|
75576577e0 | ||
|
|
eafc46f6c4 | ||
|
|
c0c36d3338 | ||
|
|
6a73b0820e | ||
|
|
bcb5eda7d8 | ||
|
|
2c833b5028 | ||
|
|
6821603980 | ||
|
|
8bec45cd58 | ||
|
|
ce0f44fb47 | ||
|
|
c740562dd8 | ||
|
|
63a1c8b63e | ||
|
|
112cdb4842 | ||
|
|
2d5f045c29 | ||
|
|
c43ff29f5d | ||
|
|
4c0e3c4db9 | ||
|
|
7995a57f77 | ||
|
|
0a47378f7f | ||
|
|
8e9a244cdd | ||
|
|
5f1a4ea08d | ||
|
|
034b19d85d | ||
|
|
68cb7ea471 | ||
|
|
d9a3ba0dd1 | ||
|
|
663e1d8336 | ||
|
|
31332f4f53 | ||
|
|
cb7163dd19 | ||
|
|
946029a3f7 | ||
|
|
69cbb6e109 | ||
|
|
6054f6bfe1 | ||
|
|
ae7b9f5fcb | ||
|
|
68dc6b9527 | ||
|
|
292cdfd5a0 | ||
|
|
28e2dee605 | ||
|
|
6d79ab2552 | ||
|
|
da17e424ea | ||
|
|
028c25afd3 | ||
|
|
9c2151dc37 | ||
|
|
9e9bd16b18 | ||
|
|
3f138aec22 | ||
|
|
e9f66e7c89 | ||
|
|
6be64b363c | ||
|
|
51230f21f5 | ||
|
|
e12540ba66 | ||
|
|
a6b1bee2af | ||
|
|
6187cdafe3 | ||
|
|
880f785d04 | ||
|
|
5aedcfd6a7 | ||
|
|
6ff1a2c236 | ||
|
|
317f888383 | ||
|
|
33f1f9abde | ||
|
|
913406b568 | ||
|
|
6a74d102a4 | ||
|
|
e9e36cebcb | ||
|
|
af6bf7a232 | ||
|
|
5720a7a5e3 | ||
|
|
449c946423 | ||
|
|
54a2a0da48 | ||
|
|
e209fedb27 | ||
|
|
12494f3008 | ||
|
|
7f60b46488 | ||
|
|
1c9ecd96d4 | ||
|
|
1f84803b91 | ||
|
|
3f6116f28f | ||
|
|
4ea0eb94d4 | ||
|
|
e222bc631a | ||
|
|
9c07c7fe4f | ||
|
|
35d74e18de | ||
|
|
266be2c25f | ||
|
|
b7cb090144 | ||
|
|
30e257bc2b | ||
|
|
fbd5679fb1 | ||
|
|
9db7234f24 | ||
|
|
220b2dc912 | ||
|
|
83c2420038 | ||
|
|
73913f450b | ||
|
|
bb966e7e6f | ||
|
|
b4adc127a4 | ||
|
|
2bc343b524 | ||
|
|
1f4d6eb0df | ||
|
|
ee936fe1a1 | ||
|
|
f6d9239b37 | ||
|
|
512e5b0240 | ||
|
|
600148f501 | ||
|
|
8791a4f696 | ||
|
|
ef40a8a925 | ||
|
|
2473e87947 | ||
|
|
bbe1dfb53d | ||
|
|
3bc27b1a02 | ||
|
|
ec4c6e140b | ||
|
|
545cc1074c | ||
|
|
9c0f4822bc | ||
|
|
5040ec109b | ||
|
|
25b216d7ef | ||
|
|
e475c847d7 | ||
|
|
e7c55c1ad6 | ||
|
|
cd8fcadd29 | ||
|
|
f78b6b30d9 | ||
|
|
cc6a991464 | ||
|
|
81d487dd89 | ||
|
|
af2795c07f | ||
|
|
178d9fb8d5 | ||
|
|
9bd12eb782 | ||
|
|
ef66650997 | ||
|
|
fcffcdde1b | ||
|
|
7de892ccac | ||
|
|
f90f2e051a | ||
|
|
24f49c8d83 | ||
|
|
a4ebaf15ab | ||
|
|
54a46dccc3 | ||
|
|
9747d5057d | ||
|
|
7f5c97d0be | ||
|
|
1933a76631 | ||
|
|
c20d7f9754 | ||
|
|
6b46dc7e89 | ||
|
|
0c1a26170c | ||
|
|
244ee08d7d | ||
|
|
a3acbca24b | ||
|
|
d77e4ed581 | ||
|
|
b928abb956 | ||
|
|
a46ef8d1a6 | ||
|
|
a5d459749f | ||
|
|
7dfa383968 | ||
|
|
036483d195 | ||
|
|
2c950f74bc | ||
|
|
2c59dcd929 | ||
|
|
658d14f31d | ||
|
|
819f4d2151 | ||
|
|
9b214d75df | ||
|
|
e0891a2d71 | ||
|
|
34a4876761 | ||
|
|
13ead0085d | ||
|
|
9e63270fc5 | ||
|
|
eccab3cd57 | ||
|
|
6446daf1a6 | ||
|
|
821602ef1c | ||
|
|
dc3512de9f | ||
|
|
36e9cb7108 | ||
|
|
42f4531720 | ||
|
|
d1fb379a40 | ||
|
|
e27bdb965c | ||
|
|
54fc6df3da | ||
|
|
9dd8f62c8a | ||
|
|
1db19148e7 | ||
|
|
93a01506e4 | ||
|
|
4767ed790c | ||
|
|
e39211347c | ||
|
|
a8cdbb65fe | ||
|
|
ff74ff4149 | ||
|
|
96e47f3d27 | ||
|
|
be52c181ea | ||
|
|
507f2ec544 | ||
|
|
fe00c628f4 | ||
|
|
e9387d322c | ||
|
|
2e3b135fe9 | ||
|
|
d28cc15be2 | ||
|
|
d15bd23800 | ||
|
|
90fe45c52d | ||
|
|
8f7be71905 | ||
|
|
5d583637c4 | ||
|
|
0efb4285c1 | ||
|
|
6dc543ca18 | ||
|
|
e93e1ddeb9 | ||
|
|
d5459f5996 | ||
|
|
c6420a910d | ||
|
|
f8e67b8e68 | ||
|
|
9ffcd382b4 | ||
|
|
725746badf | ||
|
|
9d5290de91 | ||
|
|
1bb0b58cce | ||
|
|
32f0ebbe61 | ||
|
|
25a1d74627 | ||
|
|
355b2f09bf | ||
|
|
01621f75b6 | ||
|
|
242e8a3bd6 | ||
|
|
010c26e716 | ||
|
|
e7bad10663 | ||
|
|
16242f98ce | ||
|
|
14a447b3d8 | ||
|
|
a2088fa500 | ||
|
|
87af68c092 | ||
|
|
06daad87ca | ||
|
|
0b4b86f6c9 | ||
|
|
10626904af | ||
|
|
90cca8a3eb | ||
|
|
8da0141cac | ||
|
|
39e123aaf4 | ||
|
|
24fd17f072 | ||
|
|
9270cc47b5 | ||
|
|
3721db34ab | ||
|
|
e85ae351c7 | ||
|
|
a56ba245ea | ||
|
|
d162eed4c7 | ||
|
|
43fea34f61 | ||
|
|
f7c960fc0d | ||
|
|
ee1933389a | ||
|
|
fdc9d5f1fd | ||
|
|
bad40b6125 | ||
|
|
d76ce85327 | ||
|
|
d3df072a22 | ||
|
|
4b3009a195 | ||
|
|
b72b0d60cb | ||
|
|
5841e62c66 | ||
|
|
9bd0c01702 | ||
|
|
6d86b3a950 | ||
|
|
5ff9b02c89 | ||
|
|
80934ea232 | ||
|
|
5acfa2bf3a | ||
|
|
4fada52e04 | ||
|
|
e1c8e95e11 | ||
|
|
1dfebad790 | ||
|
|
37ffe63d13 | ||
|
|
cc14c34dc2 | ||
|
|
e0cf4e644b | ||
|
|
aad55fc3db | ||
|
|
ba2b459220 | ||
|
|
086669fbe0 | ||
|
|
4cc3fcb6e8 | ||
|
|
8781053dbe | ||
|
|
bdac8974d8 | ||
|
|
9ae24141a3 | ||
|
|
e773efdc59 | ||
|
|
8f94bd1fbd | ||
|
|
d24d83d52a | ||
|
|
c938017baa | ||
|
|
728eea3ae1 | ||
|
|
88f9c1e539 | ||
|
|
76540c20f3 | ||
|
|
70761cf1d9 | ||
|
|
ace913a97d | ||
|
|
d6e269c7f6 | ||
|
|
ec10550b3a | ||
|
|
86e2374b48 | ||
|
|
d156dacbb9 | ||
|
|
1af5517da0 | ||
|
|
e5d34890a9 | ||
|
|
183b2548cf | ||
|
|
d2de489e3a | ||
|
|
90f8dbd86e | ||
|
|
3508ce19f3 | ||
|
|
00188c9818 | ||
|
|
499232f0e6 | ||
|
|
17471a12d2 | ||
|
|
de4b5eeda7 | ||
|
|
d0a0193707 | ||
|
|
5269a26b69 | ||
|
|
8dc6ad587f | ||
|
|
757339c52d | ||
|
|
6e289339d7 | ||
|
|
3ff0a44a1c | ||
|
|
0562228e9a | ||
|
|
0b6993bb7c | ||
|
|
4a19d90d48 | ||
|
|
038b1bcf7b | ||
|
|
a707c2fe8e | ||
|
|
3bb119f578 | ||
|
|
2a92600fa7 | ||
|
|
e80e1dab4d | ||
|
|
45d59d75ba | ||
|
|
28cd4c3ee9 | ||
|
|
e7c44274b0 | ||
|
|
3b2e0e34ef | ||
|
|
2276df07bd | ||
|
|
758ff03520 | ||
|
|
c3ac172960 | ||
|
|
562b4eb531 | ||
|
|
b1f8e845df | ||
|
|
bda869ea54 | ||
|
|
19cfbf082a | ||
|
|
07078bdd1f | ||
|
|
03657a98e1 | ||
|
|
b3f64abfae | ||
|
|
5d73c8f002 | ||
|
|
ba0882762d | ||
|
|
bb8855b628 | ||
|
|
883d5917f5 | ||
|
|
0275e99fe2 | ||
|
|
5d109077e5 | ||
|
|
540851ab6a | ||
|
|
6b920fa5e6 | ||
|
|
d1498bb9fb | ||
|
|
54eeef173a | ||
|
|
723ddf8cda | ||
|
|
9f12552907 | ||
|
|
a8b6fa413e | ||
|
|
76aae8ce42 | ||
|
|
ad0c287053 | ||
|
|
4a11a3559d | ||
|
|
1faa5a80e4 | ||
|
|
f1d3df1ec0 | ||
|
|
e7c94d3351 | ||
|
|
954f76dcf5 | ||
|
|
43037c0ff9 | ||
|
|
93df901b71 | ||
|
|
e97e645eda | ||
|
|
4a03ba3874 | ||
|
|
7f637e4acc | ||
|
|
8f3eeefafd | ||
|
|
5dc550a0ce | ||
|
|
6fe322da27 | ||
|
|
3cfe7c9a56 | ||
|
|
be7d5917cb | ||
|
|
ca28aa6ebd | ||
|
|
e76360c1b5 | ||
|
|
265ca8ba67 | ||
|
|
b0d942d0ec | ||
|
|
6c25905ae4 | ||
|
|
80a39393fe | ||
|
|
d4aed71abf | ||
|
|
ebb72bb992 | ||
|
|
8ffcd30b4d | ||
|
|
06804c37e2 | ||
|
|
1acca0278c | ||
|
|
639c8d4171 | ||
|
|
d77c9d3fca | ||
|
|
2c7cc2c191 | ||
|
|
d7c74b8004 | ||
|
|
aaa8003418 | ||
|
|
86890b13c6 | ||
|
|
39158b0eb6 | ||
|
|
87f1d55bc2 | ||
|
|
14343b5410 | ||
|
|
ffdac30b3c | ||
|
|
244c8dc391 | ||
|
|
e593344461 | ||
|
|
74c46f6e93 | ||
|
|
bbfd8aa249 | ||
|
|
2705a488ad | ||
|
|
850c253e08 | ||
|
|
80e0e3fcd7 | ||
|
|
2cc2d696f1 | ||
|
|
8a83a6b5be | ||
|
|
002d5338a0 | ||
|
|
743aa472f0 | ||
|
|
ba85d5d351 | ||
|
|
4e2ef908dc | ||
|
|
f5dd05ba8e | ||
|
|
17eda2a4cc | ||
|
|
d219c6e019 | ||
|
|
2dc539747b | ||
|
|
e941de50e8 | ||
|
|
63052257a2 | ||
|
|
ac5d2a714e | ||
|
|
59f78c16b1 | ||
|
|
3f7f8133df | ||
|
|
fef5e1ce2c | ||
|
|
0b97b3864f | ||
|
|
3d1330c85d | ||
|
|
041c0cc322 | ||
|
|
e72712640c | ||
|
|
6830195127 | ||
|
|
f9b5d6644d | ||
|
|
40f9eeda36 | ||
|
|
0fa0b0b1ea | ||
|
|
ff0b23f200 | ||
|
|
5456d4081b | ||
|
|
8948fae780 | ||
|
|
ee4542a699 | ||
|
|
31e4e631f9 | ||
|
|
cbf20b3271 | ||
|
|
a65fd50723 | ||
|
|
63a6aac2d8 | ||
|
|
afde4804c9 | ||
|
|
bc8ec9cd3e | ||
|
|
b63ab18e29 | ||
|
|
e7325f58c3 | ||
|
|
7b35bb8c96 | ||
|
|
e84671ce5d | ||
|
|
b01d50fe05 | ||
|
|
3f163051b1 | ||
|
|
4f1d03e1d4 | ||
|
|
fc39e4a225 | ||
|
|
bf88ad7fc8 | ||
|
|
11ba02067e | ||
|
|
952afa05ce | ||
|
|
3131cc3160 | ||
|
|
792f768479 | ||
|
|
ff312a15dd | ||
|
|
36207c9a98 | ||
|
|
b92105e888 | ||
|
|
35bd7c55d0 | ||
|
|
9f19c302d8 | ||
|
|
87b1ac776f | ||
|
|
41e401b05e | ||
|
|
d88da3589d | ||
|
|
9638c393bb | ||
|
|
9961ddc2a8 | ||
|
|
2d40dfd8d4 | ||
|
|
99c9bdf71d | ||
|
|
4fcd25ec88 | ||
|
|
440218da67 | ||
|
|
fefdb9fc8d | ||
|
|
21a0eff593 | ||
|
|
8825a094ae | ||
|
|
aa49ce5c56 | ||
|
|
1522d3385d | ||
|
|
510c41440a | ||
|
|
aa0c34ba1c | ||
|
|
af87e6ef62 | ||
|
|
30291ce6e6 | ||
|
|
890c2eb564 | ||
|
|
67a269b89c | ||
|
|
4b9ee81a78 | ||
|
|
4343f4d229 | ||
|
|
2162baa6c0 | ||
|
|
7e7f792710 | ||
|
|
1bbd9e24b0 | ||
|
|
6435aaa64f | ||
|
|
999aae0a33 | ||
|
|
ba795639b4 | ||
|
|
4c4b205721 | ||
|
|
b3c550b7c0 | ||
|
|
eb8953e784 | ||
|
|
b88b292d5d | ||
|
|
5f42c3b319 | ||
|
|
5b27ae0371 | ||
|
|
f26b1da1b5 | ||
|
|
7a853e2dcb | ||
|
|
9b22748bd0 | ||
|
|
c1e9dd3373 | ||
|
|
8cbbc47043 | ||
|
|
81b3567133 | ||
|
|
fc6568f390 | ||
|
|
8e30fe2946 | ||
|
|
6c811a3261 | ||
|
|
afbe5aa540 | ||
|
|
324afd2d6c | ||
|
|
58d94ef61e | ||
|
|
39974b0982 | ||
|
|
323d7306e2 | ||
|
|
251e228ce4 | ||
|
|
a99f3f217a | ||
|
|
e2acbee113 | ||
|
|
37b69eddf2 | ||
|
|
f0322e6f2c | ||
|
|
756587d080 | ||
|
|
1ad2c92324 | ||
|
|
e5433adf78 | ||
|
|
ed765f75d8 | ||
|
|
4136f1b377 | ||
|
|
860339b90e | ||
|
|
03254a0c0f | ||
|
|
a76081c979 | ||
|
|
71a207079f | ||
|
|
f6e724c4c5 | ||
|
|
4251b36b25 | ||
|
|
b8f39cbfdf | ||
|
|
088c621862 |
12
.editorconfig
Normal file
12
.editorconfig
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# This file is for unifying the coding style for different editors and IDEs
|
||||||
|
# editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
67
.github/CONTRIBUTING.md
vendored
Normal file
67
.github/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
# Contributing to Lodash
|
||||||
|
|
||||||
|
Contributions are always welcome. Before contributing please read the
|
||||||
|
[code of conduct](https://github.com/lodash/lodash/blob/master/CODE_OF_CONDUCT.md)
|
||||||
|
& [search the issue tracker](https://github.com/lodash/lodash/issues); your issue
|
||||||
|
may have already been discussed or fixed in `master`. To contribute,
|
||||||
|
[fork](https://help.github.com/articles/fork-a-repo/) Lodash, commit your changes,
|
||||||
|
& [send a pull request](https://help.github.com/articles/using-pull-requests/).
|
||||||
|
|
||||||
|
## Feature Requests
|
||||||
|
|
||||||
|
Feature requests are always welcome. They should be submitted in the
|
||||||
|
[issue tracker](https://github.com/lodash/lodash/issues), with a description of
|
||||||
|
the expected behavior & use case, where they’ll remain closed until sufficient
|
||||||
|
interest has been shown by the community. Before submitting a request,
|
||||||
|
please search for similar ones in the
|
||||||
|
[closed issues](https://github.com/lodash/lodash/issues?q=is%3Aissue+is%3Aclosed+label%3Aenhancement).
|
||||||
|
|
||||||
|
## Pull Requests
|
||||||
|
|
||||||
|
For additions or bug fixes you should only need to modify `lodash.js`. Include
|
||||||
|
updated unit tests in the `test` directory as part of your pull request. Don’t
|
||||||
|
worry about regenerating the `dist/` or `doc/` files.
|
||||||
|
|
||||||
|
Before running the unit tests you’ll need to install, `npm i`,
|
||||||
|
[development dependencies](https://docs.npmjs.com/files/package.json#devdependencies).
|
||||||
|
Run unit tests from the command-line via `npm test`, or open `test/index.html` &
|
||||||
|
`test/fp.html` in a web browser. The [Backbone](http://backbonejs.org/) &
|
||||||
|
[Underscore](http://underscorejs.org/) test suites are included as well.
|
||||||
|
|
||||||
|
## Contributor License Agreement
|
||||||
|
|
||||||
|
Lodash is a member of the [Dojo Foundation](http://dojofoundation.org/).
|
||||||
|
As such, we request that all contributors sign the Dojo Foundation
|
||||||
|
[contributor license agreement (CLA)](http://dojofoundation.org/about/claForm).
|
||||||
|
|
||||||
|
For more information about CLAs, please check out Alex Russell’s excellent post,
|
||||||
|
[“Why Do I Need to Sign This?”](http://infrequently.org/2008/06/why-do-i-need-to-sign-this/).
|
||||||
|
|
||||||
|
## Coding Guidelines
|
||||||
|
|
||||||
|
In addition to the following guidelines, please follow the conventions already
|
||||||
|
established in the code.
|
||||||
|
|
||||||
|
- **Spacing**:<br>
|
||||||
|
Use two spaces for indentation. No tabs.
|
||||||
|
|
||||||
|
- **Naming**:<br>
|
||||||
|
Keep variable & method names concise & descriptive.<br>
|
||||||
|
Variable names `index`, `collection`, & `callback` are preferable to
|
||||||
|
`i`, `arr`, & `fn`.
|
||||||
|
|
||||||
|
- **Quotes**:<br>
|
||||||
|
Single-quoted strings are preferred to double-quoted strings; however,
|
||||||
|
please use a double-quoted string if the value contains a single-quote
|
||||||
|
character to avoid unnecessary escaping.
|
||||||
|
|
||||||
|
- **Comments**:<br>
|
||||||
|
Please use single-line comments to annotate significant additions, &
|
||||||
|
[JSDoc-style](http://www.2ality.com/2011/08/jsdoc-intro.html) comments for
|
||||||
|
functions.
|
||||||
|
|
||||||
|
Guidelines are enforced using [JSCS](https://www.npmjs.com/package/jscs):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run style
|
||||||
|
```
|
||||||
8
.gitignore
vendored
8
.gitignore
vendored
@@ -1,5 +1,7 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
*.custom.*
|
*.custom.*
|
||||||
node_modules/
|
*.log
|
||||||
vendor/closure-compiler/
|
*.map
|
||||||
vendor/uglifyjs/
|
lodash.compat.min.js
|
||||||
|
coverage
|
||||||
|
node_modules
|
||||||
|
|||||||
12
.jamignore
12
.jamignore
@@ -1,12 +0,0 @@
|
|||||||
.*
|
|
||||||
*.custom.*
|
|
||||||
*.md
|
|
||||||
*.txt
|
|
||||||
build.js
|
|
||||||
index.js
|
|
||||||
build/
|
|
||||||
doc/
|
|
||||||
node_modules/
|
|
||||||
perf/
|
|
||||||
test/
|
|
||||||
vendor/
|
|
||||||
96
.jscsrc
Normal file
96
.jscsrc
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
"maxErrors": "2000",
|
||||||
|
"maximumLineLength": {
|
||||||
|
"value": 180,
|
||||||
|
"allExcept": ["comments", "functionSignature", "regex"]
|
||||||
|
},
|
||||||
|
"requireCurlyBraces": [
|
||||||
|
"if",
|
||||||
|
"else",
|
||||||
|
"for",
|
||||||
|
"while",
|
||||||
|
"do",
|
||||||
|
"try",
|
||||||
|
"catch"
|
||||||
|
],
|
||||||
|
"requireOperatorBeforeLineBreak": [
|
||||||
|
"=",
|
||||||
|
"+",
|
||||||
|
"-",
|
||||||
|
"/",
|
||||||
|
"*",
|
||||||
|
"==",
|
||||||
|
"===",
|
||||||
|
"!=",
|
||||||
|
"!==",
|
||||||
|
">",
|
||||||
|
">=",
|
||||||
|
"<",
|
||||||
|
"<="
|
||||||
|
],
|
||||||
|
"requireSpaceAfterKeywords": [
|
||||||
|
"if",
|
||||||
|
"else",
|
||||||
|
"for",
|
||||||
|
"while",
|
||||||
|
"do",
|
||||||
|
"switch",
|
||||||
|
"return",
|
||||||
|
"try",
|
||||||
|
"catch"
|
||||||
|
],
|
||||||
|
"requireSpaceBeforeBinaryOperators": [
|
||||||
|
"=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=",
|
||||||
|
"&=", "|=", "^=", "+=",
|
||||||
|
|
||||||
|
"+", "-", "*", "/", "%", "<<", ">>", ">>>", "&",
|
||||||
|
"|", "^", "&&", "||", "===", "==", ">=",
|
||||||
|
"<=", "<", ">", "!=", "!=="
|
||||||
|
],
|
||||||
|
"requireSpacesInFunctionExpression": {
|
||||||
|
"beforeOpeningCurlyBrace": true
|
||||||
|
},
|
||||||
|
"requireCamelCaseOrUpperCaseIdentifiers": true,
|
||||||
|
"requireDotNotation": { "allExcept": ["keywords"] },
|
||||||
|
"requireEarlyReturn": true,
|
||||||
|
"requireLineFeedAtFileEnd": true,
|
||||||
|
"requireSemicolons": true,
|
||||||
|
"requireSpaceAfterBinaryOperators": true,
|
||||||
|
"requireSpacesInConditionalExpression": true,
|
||||||
|
"requireSpaceBeforeObjectValues": true,
|
||||||
|
"requireSpaceBeforeBlockStatements": true,
|
||||||
|
"requireSpacesInForStatement": true,
|
||||||
|
|
||||||
|
"validateIndentation": 2,
|
||||||
|
"validateParameterSeparator": ", ",
|
||||||
|
"validateQuoteMarks": { "mark": "'", "escape": true },
|
||||||
|
|
||||||
|
"disallowSpacesInAnonymousFunctionExpression": {
|
||||||
|
"beforeOpeningRoundBrace": true
|
||||||
|
},
|
||||||
|
"disallowSpacesInFunctionDeclaration": {
|
||||||
|
"beforeOpeningRoundBrace": true
|
||||||
|
},
|
||||||
|
"disallowSpacesInFunctionExpression": {
|
||||||
|
"beforeOpeningRoundBrace": true
|
||||||
|
},
|
||||||
|
"disallowKeywords": ["with"],
|
||||||
|
"disallowMixedSpacesAndTabs": true,
|
||||||
|
"disallowMultipleLineBreaks": true,
|
||||||
|
"disallowNewlineBeforeBlockStatements": true,
|
||||||
|
"disallowSpaceAfterObjectKeys": true,
|
||||||
|
"disallowSpaceAfterPrefixUnaryOperators": true,
|
||||||
|
"disallowSpacesInCallExpression": true,
|
||||||
|
"disallowSpacesInsideArrayBrackets": true,
|
||||||
|
"disallowSpacesInsideParentheses": true,
|
||||||
|
"disallowTrailingWhitespace": true,
|
||||||
|
|
||||||
|
"jsDoc": {
|
||||||
|
"checkRedundantAccess": true,
|
||||||
|
"checkTypes": true,
|
||||||
|
"requireNewlineAfterDescription": true,
|
||||||
|
"requireParamDescription": true,
|
||||||
|
"requireParamTypes": true,
|
||||||
|
"requireReturnTypes": true
|
||||||
|
}
|
||||||
|
}
|
||||||
26
.npmignore
26
.npmignore
@@ -1,26 +0,0 @@
|
|||||||
.*
|
|
||||||
*.custom.*
|
|
||||||
*.d.ts
|
|
||||||
CONTRIBUTING.md
|
|
||||||
doc/*.php
|
|
||||||
node_modules/
|
|
||||||
perf/*.html
|
|
||||||
perf/*-ui.js
|
|
||||||
perf/*.sh
|
|
||||||
test/*.html
|
|
||||||
test/*-ui.js
|
|
||||||
test/*.sh
|
|
||||||
vendor/*.gz
|
|
||||||
vendor/backbone/
|
|
||||||
vendor/benchmark.js/*.jar
|
|
||||||
vendor/closure-compiler/
|
|
||||||
vendor/docdown/
|
|
||||||
vendor/firebug-lite/
|
|
||||||
vendor/json3/
|
|
||||||
vendor/jquery/
|
|
||||||
vendor/qunit/qunit/*.css
|
|
||||||
vendor/qunit/qunit/*-1.8.0.js
|
|
||||||
vendor/requirejs/
|
|
||||||
vendor/underscore/*-min.js
|
|
||||||
vendor/uglifyjs/
|
|
||||||
vendor/underscore/test/
|
|
||||||
81
.travis.yml
81
.travis.yml
@@ -1,20 +1,77 @@
|
|||||||
language: node_js
|
language: node_js
|
||||||
|
sudo: false
|
||||||
node_js:
|
node_js:
|
||||||
- 0.6
|
- "5"
|
||||||
- 0.9
|
|
||||||
env:
|
env:
|
||||||
- TEST_COMMAND="phantomjs ./test/test.js ../dist/lodash.compat.js"
|
global:
|
||||||
- TEST_COMMAND="phantomjs ./test/test.js ../dist/lodash.compat.min.js"
|
- BIN="node" ISTANBUL=false OPTION=""
|
||||||
- TEST_COMMAND="node ./test/test.js ../dist/lodash.js"
|
- SAUCE_LABS=false SAUCE_USERNAME="lodash"
|
||||||
- TEST_COMMAND="node ./test/test.js ../dist/lodash.min.js"
|
- secure: "tg1JFsIFnxzLaTboFPOnm+aJCuMm5+JdhLlESlqg9x3fwro++7KCnwHKLNovhchaPe4otC43ZMB/nfWhDnDm11dKbm/V6HlTkED+dadTsaLxVDg6J+7yK41QhokBPJOxLV78iDaNaAQVYEirAgZ0yn8kFubxmNKV+bpCGQNc9yU="
|
||||||
- TEST_COMMAND="node ./test/test-build.js --time-limit 49m40s"
|
matrix:
|
||||||
|
-
|
||||||
|
- BIN="phantomjs"
|
||||||
|
- ISTANBUL=true
|
||||||
|
- SAUCE_LABS=true
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- node_js: "0.10"
|
||||||
|
env:
|
||||||
|
- node_js: "0.12"
|
||||||
|
env:
|
||||||
|
- node_js: "4"
|
||||||
|
env:
|
||||||
git:
|
git:
|
||||||
depth: 1
|
depth: 10
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
before_script:
|
notifications:
|
||||||
- "tar -xzvf vendor/closure-compiler.tar.gz -C vendor"
|
webhooks:
|
||||||
- "tar -xzvf vendor/uglifyjs.tar.gz -C vendor"
|
urls:
|
||||||
|
- https://webhooks.gitter.im/e/4aab6358b0e9aed0b628
|
||||||
|
on_success: change
|
||||||
|
on_failure: always
|
||||||
|
before_install:
|
||||||
|
- "nvm use $TRAVIS_NODE_VERSION"
|
||||||
|
- "npm set loglevel error"
|
||||||
|
- "npm set progress false"
|
||||||
|
- "npm i -g npm@\"^2.0.0\""
|
||||||
|
- |
|
||||||
|
PATTERN[0]="|\s*if\s*\(isHostObject\b[\s\S]+?\}(?=\n)|"
|
||||||
|
PATTERN[1]="|\s*if\s*\(enumerate\b[\s\S]+?\};\s*\}|"
|
||||||
|
PATTERN[2]="|\s*while\s*\([^)]+\)\s*\{\s*iteratee\(index\);\s*\}|"
|
||||||
|
PATTERN[3]="|\s*else\s*\{\s*assocSet\(data\b[\s\S]+?\}|"
|
||||||
|
PATTERN[4]="|\s*if\s*\(ctorString\b[\s\S]+?\}\s*\}|"
|
||||||
|
PATTERN[5]="|\bindex,\s*iterable\)\s*===\s*false\)[^}]+?(break;)|"
|
||||||
|
PATTERN[6]="|\s*if\s*\(!lodashFunc\)\s*\{\s*return;\s*\}|"
|
||||||
|
PATTERN[7]="|\s*define\([\s\S]+?\);|"
|
||||||
|
PATTERN[8]="|\s*root\._\s*=\s*_;|"
|
||||||
|
|
||||||
|
if [ $ISTANBUL == true ]; then
|
||||||
|
set -e
|
||||||
|
for PTRN in ${PATTERN[@]}; do
|
||||||
|
node ./test/remove.js "$PTRN" ./lodash.js
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
- "git clone --depth=10 --branch=master git://github.com/lodash/lodash-cli ./node_modules/lodash-cli && mkdir $_/node_modules && cd $_ && ln -s ../../../ ./lodash && cd ../ && npm i && cd ../../"
|
||||||
|
- "node ./node_modules/lodash-cli/bin/lodash -o ./dist/lodash.js"
|
||||||
script:
|
script:
|
||||||
$TEST_COMMAND
|
- "[ $ISTANBUL == false ] || istanbul cover -x \"**/vendor/**\" --report lcovonly ./test/test.js -- ./lodash.js"
|
||||||
|
- "[ $ISTANBUL == false ] || [ $TRAVIS_SECURE_ENV_VARS == false ] || (cat ./coverage/lcov.info | coveralls) || true"
|
||||||
|
- "[ $ISTANBUL == false ] || [ $TRAVIS_SECURE_ENV_VARS == false ] || (cat ./coverage/coverage.json | codecov) || true"
|
||||||
|
- "[ $SAUCE_LABS == true ] || [ $ISTANBUL == true ] || cd ./test"
|
||||||
|
- "[ $SAUCE_LABS == true ] || [ $ISTANBUL == true ] || $BIN $OPTION ./test.js ../lodash.js"
|
||||||
|
- "[ $SAUCE_LABS == true ] || [ $ISTANBUL == true ] || [ $TRAVIS_SECURE_ENV_VARS == false ] || $BIN $OPTION ./test.js ../dist/lodash.min.js"
|
||||||
|
- "[ $SAUCE_LABS == false ] || rm -rf ./node_modules/lodash"
|
||||||
|
- "[ $SAUCE_LABS == false ] || ($BIN ./node_modules/lodash-cli/bin/lodash modularize exports=node -o ./node_modules/lodash && node ./node_modules/lodash-cli/bin/lodash -d -o ./node_modules/lodash/lodash.js)"
|
||||||
|
- "[ $SAUCE_LABS == false ] || $BIN ./node_modules/lodash-cli/bin/lodash core -o ./dist/lodash.core.js"
|
||||||
|
- "[ $SAUCE_LABS == false ] || npm run build"
|
||||||
|
- "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"lodash tests\" runner=\"test/index.html?build=../dist/lodash.js&noglobals=true\" tags=\"development\""
|
||||||
|
- "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"lodash tests\" runner=\"test/index.html?build=../dist/lodash.min.js&noglobals=true\" tags=\"production\""
|
||||||
|
- "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"lodash-fp tests\" runner=\"test/fp.html?noglobals=true\" tags=\"development\""
|
||||||
|
- "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"underscore tests\" runner=\"test/underscore.html?build=../dist/lodash.js\" tags=\"development,underscore\""
|
||||||
|
- "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"underscore tests\" runner=\"test/underscore.html?build=../dist/lodash.min.js\" tags=\"production,underscore\""
|
||||||
|
- "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"backbone tests\" runner=\"test/backbone.html?build=../dist/lodash.js\" tags=\"development,backbone\""
|
||||||
|
- "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"backbone tests\" runner=\"test/backbone.html?build=../dist/lodash.min.js\" tags=\"production,backbone\""
|
||||||
|
- "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"backbone tests\" runner=\"test/backbone.html?build=../dist/lodash.core.js\" tags=\"development,backbone\""
|
||||||
|
- "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"backbone tests\" runner=\"test/backbone.html?build=../dist/lodash.core.min.js\" tags=\"production,backbone\""
|
||||||
|
|||||||
49
CODE_OF_CONDUCT.md
Normal file
49
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# Contributor Code of Conduct
|
||||||
|
|
||||||
|
As contributors and maintainers of this project, and in the interest of
|
||||||
|
fostering an open and welcoming community, we pledge to respect all people who
|
||||||
|
contribute through reporting issues, posting feature requests, updating
|
||||||
|
documentation, submitting pull requests or patches, and other activities.
|
||||||
|
|
||||||
|
We are committed to making participation in this project a harassment-free
|
||||||
|
experience for everyone, regardless of level of experience, gender, gender
|
||||||
|
identity and expression, sexual orientation, disability, personal appearance,
|
||||||
|
body size, race, ethnicity, age, religion, or nationality.
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery
|
||||||
|
* Personal attacks
|
||||||
|
* Trolling or insulting/derogatory comments
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing other's private information, such as physical or electronic
|
||||||
|
addresses, without explicit permission
|
||||||
|
* Other unethical or unprofessional conduct
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit, or
|
||||||
|
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||||
|
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||||
|
permanently any contributor for other behaviors that they deem inappropriate,
|
||||||
|
threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
By adopting this Code of Conduct, project maintainers commit themselves to
|
||||||
|
fairly and consistently applying these principles to every aspect of managing
|
||||||
|
this project. Project maintainers who do not follow or enforce the Code of
|
||||||
|
Conduct may be permanently removed from the project team.
|
||||||
|
|
||||||
|
This code of conduct applies both within project spaces and in public spaces
|
||||||
|
when an individual is representing the project or its community.
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported by contacting a project maintainer at
|
||||||
|
[coc@lodash.com](mailto:coc@lodash.com). All complaints will be reviewed and
|
||||||
|
investigated and will result in a response that is deemed necessary and
|
||||||
|
appropriate to the circumstances. Maintainers are obligated to maintain
|
||||||
|
confidentiality with regard to the reporter of an incident.
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 1.3.0, available at
|
||||||
|
[http://contributor-covenant.org/version/1/3/0/][version]
|
||||||
|
|
||||||
|
[homepage]: http://contributor-covenant.org
|
||||||
|
[version]: http://contributor-covenant.org/version/1/3/0/
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
# Contributing to Lo-Dash
|
|
||||||
|
|
||||||
If you’d like to contribute a feature or bug fix, you can [fork](https://help.github.com/articles/fork-a-repo) Lo-Dash, commit your changes, and [send a pull request](https://help.github.com/articles/using-pull-requests).
|
|
||||||
Please make sure to [search the issue tracker](https://github.com/bestiejs/lodash/issues) first; your issue may have already been discussed or fixed in `master`.
|
|
||||||
|
|
||||||
## Tests
|
|
||||||
|
|
||||||
Include updated unit tests in the `test` directory as part of your pull request.
|
|
||||||
You can run the tests from the command line via `npm test`, or open `test/index.html` in a web browser.
|
|
||||||
The `test/run-test.sh` script attempts to run the tests in [Rhino](https://developer.mozilla.org/en-US/docs/Rhino), [Narwhal](https://github.com/280north/narwhal), [RingoJS](http://ringojs.org/), [PhantomJS](http://phantomjs.org/), and [Node](http://nodejs.org/), before running them in your default browser.
|
|
||||||
The [Backbone](http://backbonejs.org/) and [Underscore](http://http://underscorejs.org/) test suites are included as well.
|
|
||||||
|
|
||||||
## Contributor License Agreement
|
|
||||||
|
|
||||||
Lo-Dash is a member of the [Dojo Foundation](http://dojofoundation.org/).
|
|
||||||
As such, we request that all contributors sign the Dojo Foundation [contributor license agreement](http://dojofoundation.org/about/claForm).
|
|
||||||
|
|
||||||
For more information about CLAs, please check out Alex Russell’s excellent post, ["Why Do I Need to Sign This?"](http://infrequently.org/2008/06/why-do-i-need-to-sign-this/).
|
|
||||||
|
|
||||||
## Coding Guidelines
|
|
||||||
|
|
||||||
In addition to the following guidelines, please follow the conventions already established in the code.
|
|
||||||
|
|
||||||
- **Spacing**:<br>
|
|
||||||
Use two spaces for indentation. No tabs.
|
|
||||||
|
|
||||||
- **Naming**:<br>
|
|
||||||
Keep variable and method names concise and descriptive.<br>
|
|
||||||
Variable names `index`, `collection`, and `callback` are preferable to `i`, `arr`, and `fn`.
|
|
||||||
|
|
||||||
- **Quotes**:<br>
|
|
||||||
Single-quoted strings are preferred to double-quoted strings; however, please use a double-quoted string if the value contains a single-quote character to avoid unnecessary escaping.
|
|
||||||
|
|
||||||
- **Comments**:<br>
|
|
||||||
Please use single-line comments to annotate significant additions, and [JSDoc-style](http://www.2ality.com/2011/08/jsdoc-intro.html) comments for new methods.
|
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
Copyright (c) 2012 Kit Cambridge.
|
The MIT License (MIT)
|
||||||
http://kitcambridge.github.com
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
|
||||||
the Software without restriction, including without limitation the rights to
|
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
so, subject to the following conditions:
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
The above copyright notice and this permission notice shall be included in all
|
||||||
copies or substantial portions of the Software.
|
copies or substantial portions of the Software.
|
||||||
22
LICENSE.txt
22
LICENSE.txt
@@ -1,22 +0,0 @@
|
|||||||
Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
|
|
||||||
Based on Underscore.js 1.4.3, copyright 2009-2013 Jeremy Ashkenas,
|
|
||||||
DocumentCloud Inc. <http://underscorejs.org/>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
302
README.md
302
README.md
@@ -1,276 +1,52 @@
|
|||||||
# Lo-Dash <sup>v1.0.1</sup>
|
# lodash v4.5.1
|
||||||
[](http://travis-ci.org/bestiejs/lodash)
|
|
||||||
|
|
||||||
An alternative to Underscore.js, delivering consistency, [customization](https://github.com/bestiejs/lodash#custom-builds), [performance](http://lodash.com/benchmarks), and [extra features](https://github.com/bestiejs/lodash#features).
|
The [lodash](https://lodash.com/) library exported as a [UMD](https://github.com/umdjs/umd) module.
|
||||||
|
|
||||||
|
Generated using [lodash-cli](https://www.npmjs.com/package/lodash-cli):
|
||||||
|
```bash
|
||||||
|
$ npm run build
|
||||||
|
$ lodash -o ./dist/lodash.js
|
||||||
|
$ lodash core -o ./dist/lodash.core.js
|
||||||
|
```
|
||||||
|
|
||||||
|
## Community
|
||||||
|
|
||||||
|
[](https://gitter.im/lodash/lodash)
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
* [API Documentation](https://lodash.com/docs)
|
||||||
|
* [FP Guide](https://github.com/lodash/lodash/wiki/FP-Guide)
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
* Lo-Dash builds (for modern environments):<br>
|
Lodash is released under the [MIT license](https://raw.githubusercontent.com/lodash/lodash/4.5.1/LICENSE) & supports [modern environments](#support).<br>
|
||||||
[Development](https://raw.github.com/bestiejs/lodash/v1.0.1/dist/lodash.js) and
|
Review the [build differences](https://github.com/lodash/lodash/wiki/build-differences) & pick one that’s right for you.
|
||||||
[Production](https://raw.github.com/bestiejs/lodash/v1.0.1/dist/lodash.min.js)
|
|
||||||
|
|
||||||
* Lo-Dash compatibility builds (for legacy and modern environments):<br>
|
* [Core build](https://raw.githubusercontent.com/lodash/lodash/4.5.1/dist/lodash.core.js) ([~4 kB gzipped](https://raw.githubusercontent.com/lodash/lodash/4.5.1/dist/lodash.core.min.js))
|
||||||
[Development](https://raw.github.com/bestiejs/lodash/v1.0.1/dist/lodash.compat.js) and
|
* [Full build](https://raw.githubusercontent.com/lodash/lodash/4.5.1/dist/lodash.js) ([~21 kB gzipped](https://raw.githubusercontent.com/lodash/lodash/4.5.1/dist/lodash.min.js))
|
||||||
[Production](https://raw.github.com/bestiejs/lodash/v1.0.1/dist/lodash.compat.min.js)
|
* [CDN copies](https://www.jsdelivr.com/projects/lodash)
|
||||||
|
|
||||||
* Underscore compatibility builds:<br>
|
## Why Lodash?
|
||||||
[Development](https://raw.github.com/bestiejs/lodash/v1.0.1/dist/lodash.underscore.js) and
|
|
||||||
[Production](https://raw.github.com/bestiejs/lodash/v1.0.1/dist/lodash.underscore.min.js)
|
|
||||||
|
|
||||||
* CDN copies of ≤ v1.0.1’s builds are available on [cdnjs](http://cdnjs.com/) thanks to [CloudFlare](http://www.cloudflare.com/):<br>
|
Lodash makes JavaScript easier by taking the hassle out of working with arrays,<br>
|
||||||
[Lo-Dash dev](http://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.0.1/lodash.js),
|
numbers, objects, strings, etc. Lodash’s modular methods are great for:
|
||||||
[Lo-Dash prod](http://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.0.1/lodash.min.js),<br>
|
|
||||||
[Lo-Dash compat-dev](http://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.0.1/lodash.compat.js),
|
|
||||||
[Lo-Dash compat-prod](http://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.0.1/lodash.compat.min.js),<br>
|
|
||||||
[Underscore compat-dev](http://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.0.1/lodash.underscore.js), and
|
|
||||||
[Underscore compat-prod](http://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.0.1/lodash.underscore.min.js)
|
|
||||||
|
|
||||||
* For optimal file size, [create a custom build](https://github.com/bestiejs/lodash#custom-builds) with only the features you need
|
* Iterating arrays, objects, & strings
|
||||||
|
* Manipulating & testing values
|
||||||
|
* Creating composite functions
|
||||||
|
|
||||||
## Dive in
|
## Module Formats
|
||||||
|
|
||||||
We’ve got [API docs](http://lodash.com/docs), [benchmarks](http://lodash.com/benchmarks), and [unit tests](http://lodash.com/tests).
|
Lodash is available in a [variety of builds](https://lodash.com/custom-builds) & module formats.
|
||||||
|
|
||||||
For a list of upcoming features, check out our [roadmap](https://github.com/bestiejs/lodash/wiki/Roadmap).
|
* [lodash](https://www.npmjs.com/package/lodash) & [per method packages](https://www.npmjs.com/browse/keyword/lodash-modularized)
|
||||||
|
* [lodash-amd](https://www.npmjs.com/package/lodash-amd)
|
||||||
|
* [lodash-es](https://www.npmjs.com/package/lodash-es) & [babel-plugin-lodash](https://www.npmjs.com/package/babel-plugin-lodash)
|
||||||
|
* [lodash/fp](https://github.com/lodash/lodash/tree/4.5.1-npm/fp)
|
||||||
|
|
||||||
## Resources
|
## Further Reading
|
||||||
|
|
||||||
For more information check out these articles, screencasts, and other videos over Lo-Dash:
|
* [Contributing](https://github.com/lodash/lodash/blob/master/.github/CONTRIBUTING.md)
|
||||||
|
* [Release Notes](https://github.com/lodash/lodash/releases/tag/4.0.0)
|
||||||
* Posts
|
* [Wiki (Changelog, Roadmap, etc.)](https://github.com/lodash/lodash/wiki)
|
||||||
- [Say “Hello” to Lo-Dash](http://kitcambridge.be/blog/say-hello-to-lo-dash/)
|
|
||||||
|
|
||||||
* Videos
|
|
||||||
- [Introducing Lo-Dash](https://vimeo.com/44154599)
|
|
||||||
- [Lo-Dash optimizations and custom builds](https://vimeo.com/44154601)
|
|
||||||
- [Lo-Dash’s origin and why it’s a better utility belt](https://vimeo.com/44154600)
|
|
||||||
- [Unit testing in Lo-Dash](https://vimeo.com/45865290)
|
|
||||||
- [Lo-Dash’s approach to native method use](https://vimeo.com/48576012)
|
|
||||||
- [CascadiaJS: Lo-Dash for a better utility belt](http://www.youtube.com/watch?v=dpPy4f_SeEk)
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
* AMD loader support ([RequireJS](http://requirejs.org/), [curl.js](https://github.com/cujojs/curl), etc.)
|
|
||||||
* [_(…)](http://lodash.com/docs#_) supports intuitive chaining
|
|
||||||
* [_.at](http://lodash.com/docs#at) for cherry-picking collection values
|
|
||||||
* [_.bindKey](http://lodash.com/docs#bindKey) for binding [*“lazy”* defined](http://michaux.ca/articles/lazy-function-definition-pattern) methods
|
|
||||||
* [_.cloneDeep](http://lodash.com/docs#cloneDeep) for deep cloning arrays and objects
|
|
||||||
* [_.contains](http://lodash.com/docs#contains) accepts a `fromIndex` argument
|
|
||||||
* [_.forEach](http://lodash.com/docs#forEach) is chainable and supports exiting iteration early
|
|
||||||
* [_.forIn](http://lodash.com/docs#forIn) for iterating over an object’s own and inherited properties
|
|
||||||
* [_.forOwn](http://lodash.com/docs#forOwn) for iterating over an object’s own properties
|
|
||||||
* [_.isPlainObject](http://lodash.com/docs#isPlainObject) checks if values are created by the `Object` constructor
|
|
||||||
* [_.merge](http://lodash.com/docs#merge) for a deep [_.extend](http://lodash.com/docs#extend)
|
|
||||||
* [_.partial](http://lodash.com/docs#partial) and [_.partialRight](http://lodash.com/docs#partialRight) for partial application without `this` binding
|
|
||||||
* [_.template](http://lodash.com/docs#template) supports [*“imports”* options](http://lodash.com/docs#templateSettings_imports), [ES6 template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.8.6), and [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
|
|
||||||
* [_.where](http://lodash.com/docs#where) supports deep object comparisons
|
|
||||||
* [_.clone](http://lodash.com/docs#clone), [_.omit](http://lodash.com/docs#omit), [_.pick](http://lodash.com/docs#pick),
|
|
||||||
[and more…](http://lodash.com/docs "_.assign, _.cloneDeep, _.first, _.initial, _.isEqual, _.last, _.merge, _.rest") accept `callback` and `thisArg` arguments
|
|
||||||
* [_.contains](http://lodash.com/docs#contains), [_.size](http://lodash.com/docs#size), [_.toArray](http://lodash.com/docs#toArray),
|
|
||||||
[and more…](http://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.forEach, _.groupBy, _.invoke, _.map, _.max, _.min, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.some, _.sortBy, _.where") accept strings
|
|
||||||
* [_.filter](http://lodash.com/docs#filter), [_.find](http://lodash.com/docs#find), [_.map](http://lodash.com/docs#map),
|
|
||||||
[and more…](http://lodash.com/docs "_.countBy, _.every, _.first, _.groupBy, _.initial, _.last, _.max, _.min, _.reject, _.rest, _.some, _.sortBy, _.sortedIndex, _.uniq") support *“_.pluck”* and *“_.where”* `callback` shorthands
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
Lo-Dash has been tested in at least Chrome 5~24, Firefox 1~18, IE 6-10, Opera 9.25-12, Safari 3-6, Node.js 0.4.8-0.8.20, Narwhal 0.3.2, PhantomJS 1.8.1, RingoJS 0.9, and Rhino 1.7RC5.
|
|
||||||
|
|
||||||
## Custom builds
|
|
||||||
|
|
||||||
Custom builds make it easy to create lightweight versions of Lo-Dash containing only the methods you need.
|
|
||||||
To top it off, we handle all method dependency and alias mapping for you.
|
|
||||||
|
|
||||||
* Backbone builds, with only methods required by Backbone, may be created using the `backbone` modifier argument.
|
|
||||||
```bash
|
|
||||||
lodash backbone
|
|
||||||
```
|
|
||||||
|
|
||||||
* CSP builds, supporting default [Content Security Policy](https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html) restrictions, may be created using the `csp` modifier argument.
|
|
||||||
The `csp` modifier is an alais of the `mobile` modifier. Lo-Dash may be used in Chrome extensions by using either the `csp`, `mobile`, or `underscore` build and using precompiled templates, or loading Lo-Dash in a [sandbox](http://developer.chrome.com/stable/extensions/sandboxingEval.html).
|
|
||||||
```bash
|
|
||||||
lodash csp
|
|
||||||
```
|
|
||||||
|
|
||||||
* Legacy builds, tailored for older environments without [ES5 support](http://es5.github.com/), may be created using the `legacy` modifier argument.
|
|
||||||
```bash
|
|
||||||
lodash legacy
|
|
||||||
```
|
|
||||||
|
|
||||||
* Modern builds, tailored for newer environments with ES5 support, may be created using the `modern` modifier argument.
|
|
||||||
```bash
|
|
||||||
lodash modern
|
|
||||||
```
|
|
||||||
|
|
||||||
* Mobile builds, without method compilation and most bug fixes for old browsers, may be created using the `mobile` modifier argument.
|
|
||||||
```bash
|
|
||||||
lodash mobile
|
|
||||||
```
|
|
||||||
|
|
||||||
* Strict builds, with `_.bindAll`, `_.defaults`, and `_.extend` in [strict mode](http://es5.github.com/#C), may be created using the `strict` modifier argument.
|
|
||||||
```bash
|
|
||||||
lodash strict
|
|
||||||
```
|
|
||||||
|
|
||||||
* Underscore builds, tailored for projects already using Underscore, may be created using the `underscore` modifier argument.
|
|
||||||
```bash
|
|
||||||
lodash underscore
|
|
||||||
```
|
|
||||||
|
|
||||||
Custom builds may be created using the following commands:
|
|
||||||
|
|
||||||
* Use the `category` argument to pass comma separated categories of methods to include in the build.<br>
|
|
||||||
Valid categories (case-insensitive) are *“arrays”*, *“chaining”*, *“collections”*, *“functions”*, *“objects”*, and *“utilities”*.
|
|
||||||
```bash
|
|
||||||
lodash category=collections,functions
|
|
||||||
lodash category="collections, functions"
|
|
||||||
```
|
|
||||||
|
|
||||||
* Use the `exports` argument to pass comma separated names of ways to export the `LoDash` function.<br>
|
|
||||||
Valid exports are *“amd”*, *“commonjs”*, *“global”*, *“node”*, and *“none”*.
|
|
||||||
```bash
|
|
||||||
lodash exports=amd,commonjs,node
|
|
||||||
lodash exports="amd, commonjs, node"
|
|
||||||
```
|
|
||||||
|
|
||||||
* Use the `iife` argument to specify code to replace the immediately-invoked function expression that wraps Lo-Dash.
|
|
||||||
```bash
|
|
||||||
lodash iife="!function(window,undefined){%output%}(this)"
|
|
||||||
```
|
|
||||||
|
|
||||||
* Use the `include` argument to pass comma separated method/category names to include in the build.
|
|
||||||
```bash
|
|
||||||
lodash include=each,filter,map
|
|
||||||
lodash include="each, filter, map"
|
|
||||||
```
|
|
||||||
|
|
||||||
* Use the `minus` argument to pass comma separated method/category names to remove from those included in the build.
|
|
||||||
```bash
|
|
||||||
lodash underscore minus=result,shuffle
|
|
||||||
lodash underscore minus="result, shuffle"
|
|
||||||
```
|
|
||||||
|
|
||||||
* Use the `plus` argument to pass comma separated method/category names to add to those included in the build.
|
|
||||||
```bash
|
|
||||||
lodash backbone plus=random,template
|
|
||||||
lodash backbone plus="random, template"
|
|
||||||
```
|
|
||||||
|
|
||||||
* Use the `template` argument to pass the file path pattern used to match template files to precompile.
|
|
||||||
```bash
|
|
||||||
lodash template="./*.jst"
|
|
||||||
```
|
|
||||||
|
|
||||||
* Use the `settings` argument to pass the template settings used when precompiling templates.
|
|
||||||
```bash
|
|
||||||
lodash settings="{interpolate:/\{\{([\s\S]+?)\}\}/g}"
|
|
||||||
```
|
|
||||||
|
|
||||||
* Use the `moduleId` argument to specify the AMD module ID of Lo-Dash, which defaults to “lodash”, used by precompiled templates.
|
|
||||||
```bash
|
|
||||||
lodash moduleId="underscore"
|
|
||||||
```
|
|
||||||
|
|
||||||
All arguments, except `legacy` with `csp`, `mobile`, `modern`, or `underscore`, may be combined.<br>
|
|
||||||
Unless specified by `-o` or `--output`, all files created are saved to the current working directory.
|
|
||||||
|
|
||||||
The following options are also supported:
|
|
||||||
|
|
||||||
* `-c`, `--stdout` ......... Write output to standard output
|
|
||||||
* `-d`, `--debug` ........... Write only the non-minified development output
|
|
||||||
* `-h`, `--help` ............. Display help information
|
|
||||||
* `-m`, `--minify` ......... Write only the minified production output
|
|
||||||
* `-o`, `--output` ......... Write output to a given path/filename
|
|
||||||
* `-p`, `--source-map` .. Generate a source map for the minified output, using an optional source map URL
|
|
||||||
* `-s`, `--silent` ......... Skip status updates normally logged to the console
|
|
||||||
* `-V`, `--version` ....... Output current version of Lo-Dash
|
|
||||||
|
|
||||||
The `lodash` command-line utility is available when Lo-Dash is installed as a global package (i.e. `npm install -g lodash`).
|
|
||||||
|
|
||||||
## Installation and usage
|
|
||||||
|
|
||||||
In browsers:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script src="lodash.js"></script>
|
|
||||||
```
|
|
||||||
|
|
||||||
Using [`npm`](http://npmjs.org/):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install lodash
|
|
||||||
|
|
||||||
npm install -g lodash
|
|
||||||
npm link lodash
|
|
||||||
```
|
|
||||||
|
|
||||||
To avoid potential issues, update `npm` before installing Lo-Dash:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install npm -g
|
|
||||||
```
|
|
||||||
|
|
||||||
In [Node.js](http://nodejs.org/) and [RingoJS v0.8.0+](http://ringojs.org/):
|
|
||||||
|
|
||||||
```js
|
|
||||||
var _ = require('lodash');
|
|
||||||
|
|
||||||
// or as a drop-in replacement for Underscore
|
|
||||||
var _ = require('lodash/lodash.underscore');
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note:** If Lo-Dash is installed globally, run [`npm link lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your project’s root directory before requiring it.
|
|
||||||
|
|
||||||
In [RingoJS v0.7.0-](http://ringojs.org/):
|
|
||||||
|
|
||||||
```js
|
|
||||||
var _ = require('lodash')._;
|
|
||||||
```
|
|
||||||
|
|
||||||
In [Rhino](http://www.mozilla.org/rhino/):
|
|
||||||
|
|
||||||
```js
|
|
||||||
load('lodash.js');
|
|
||||||
```
|
|
||||||
|
|
||||||
In an AMD loader like [RequireJS](http://requirejs.org/):
|
|
||||||
|
|
||||||
```js
|
|
||||||
require({
|
|
||||||
'paths': {
|
|
||||||
'underscore': 'path/to/lodash'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
['underscore'], function(_) {
|
|
||||||
console.log(_.VERSION);
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Release Notes
|
|
||||||
|
|
||||||
### <sup>v1.0.1</sup>
|
|
||||||
|
|
||||||
* Add support for specifying source map URLs in `-p`/`--source-map` build options
|
|
||||||
* Ensured the second argument passed to `_.assign` is not treated as a `callback`
|
|
||||||
* Ensured `-p`/`--source-map` build options correctly set the `sourceMappingURL`
|
|
||||||
* Made `-p`/`--source-map` build options set source map *“sources”* keys based on the builds performed
|
|
||||||
* Made `_.defer` use `setImmediate`, in Node.js, when available
|
|
||||||
* Made `_.where` search arrays for values regardless of their index position
|
|
||||||
* Removed dead code from `_.template`
|
|
||||||
|
|
||||||
The full changelog is available [here](https://github.com/bestiejs/lodash/wiki/Changelog).
|
|
||||||
|
|
||||||
## BestieJS
|
|
||||||
|
|
||||||
Lo-Dash is part of the BestieJS *“Best in Class”* module collection. This means we promote solid browser/environment support, ES5 precedents, unit testing, and plenty of documentation.
|
|
||||||
|
|
||||||
## Author
|
|
||||||
|
|
||||||
* [John-David Dalton](http://allyoucanleet.com/)
|
|
||||||
[](https://twitter.com/jdalton "Follow @jdalton on Twitter")
|
|
||||||
|
|
||||||
## Contributors
|
|
||||||
|
|
||||||
* [Kit Cambridge](http://kitcambridge.github.com/)
|
|
||||||
[](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter")
|
|
||||||
* [Mathias Bynens](http://mathiasbynens.be/)
|
|
||||||
[](https://twitter.com/mathias "Follow @mathias on Twitter")
|
|
||||||
|
|||||||
753
build/minify.js
753
build/minify.js
@@ -1,753 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
;(function() {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/** Load Node modules */
|
|
||||||
var fs = require('fs'),
|
|
||||||
https = require('https'),
|
|
||||||
path = require('path'),
|
|
||||||
spawn = require('child_process').spawn,
|
|
||||||
zlib = require('zlib'),
|
|
||||||
tar = require('../vendor/tar/tar.js'),
|
|
||||||
_ = require('../lodash.js');
|
|
||||||
|
|
||||||
/** Load other modules */
|
|
||||||
var preprocess = require('./pre-compile.js'),
|
|
||||||
postprocess = require('./post-compile.js');
|
|
||||||
|
|
||||||
/** The Git object ID of `closure-compiler.tar.gz` */
|
|
||||||
var closureId = '23cf67d0f0b979d97631fc108a2a43bb82225994';
|
|
||||||
|
|
||||||
/** The Git object ID of `uglifyjs.tar.gz` */
|
|
||||||
var uglifyId = 'a934fb18f8fa2768c6a68de44b6e035fe96a268b';
|
|
||||||
|
|
||||||
/** The path of the directory that is the base of the repository */
|
|
||||||
var basePath = fs.realpathSync(path.join(__dirname, '..'));
|
|
||||||
|
|
||||||
/** The path of the `vendor` directory */
|
|
||||||
var vendorPath = path.join(basePath, 'vendor');
|
|
||||||
|
|
||||||
/** The path to the Closure Compiler `.jar` */
|
|
||||||
var closurePath = path.join(vendorPath, 'closure-compiler', 'compiler.jar');
|
|
||||||
|
|
||||||
/** The path to the UglifyJS module */
|
|
||||||
var uglifyPath = path.join(vendorPath, 'uglifyjs', 'tools', 'node.js');
|
|
||||||
|
|
||||||
/** The Closure Compiler command-line options */
|
|
||||||
var closureOptions = ['--warning_level=QUIET'];
|
|
||||||
|
|
||||||
/** The media type for raw blob data */
|
|
||||||
var mediaType = 'application/vnd.github.v3.raw';
|
|
||||||
|
|
||||||
/** Used to reference parts of the blob href */
|
|
||||||
var location = (function() {
|
|
||||||
var host = 'api.github.com',
|
|
||||||
origin = 'https://api.github.com',
|
|
||||||
pathname = '/repos/bestiejs/lodash/git/blobs';
|
|
||||||
|
|
||||||
return {
|
|
||||||
'host': host,
|
|
||||||
'href': origin + pathname,
|
|
||||||
'origin': origin,
|
|
||||||
'pathname': pathname
|
|
||||||
};
|
|
||||||
}());
|
|
||||||
|
|
||||||
/** The Closure Compiler optimization modes */
|
|
||||||
var optimizationModes = {
|
|
||||||
'simple': 'SIMPLE_OPTIMIZATIONS',
|
|
||||||
'advanced': 'ADVANCED_OPTIMIZATIONS'
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Reassign `existsSync` for older versions of Node */
|
|
||||||
fs.existsSync || (fs.existsSync = path.existsSync);
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Minifies a given Lo-Dash `source` and invokes the `options.onComplete`
|
|
||||||
* callback when finished. The `onComplete` callback is invoked with one
|
|
||||||
* argument; (outputSource).
|
|
||||||
*
|
|
||||||
* @param {Array|String} [source=''] The source to minify or array of commands.
|
|
||||||
* -o, --output - Write output to a given path/filename.
|
|
||||||
* -s, --silent - Skip status updates normally logged to the console.
|
|
||||||
* -t, --template - Applies template specific minifier options.
|
|
||||||
*
|
|
||||||
* @param {Object} [options={}] The options object.
|
|
||||||
* outputPath - Write output to a given path/filename.
|
|
||||||
* isSilent - Skip status updates normally logged to the console.
|
|
||||||
* isTemplate - Applies template specific minifier options.
|
|
||||||
* onComplete - The function called once minification has finished.
|
|
||||||
*/
|
|
||||||
function minify(source, options) {
|
|
||||||
// used to specify the source map URL
|
|
||||||
var sourceMapURL;
|
|
||||||
|
|
||||||
// used to specify the default minifer modes
|
|
||||||
var modes = ['simple', 'advanced', 'hybrid'];
|
|
||||||
|
|
||||||
source || (source = '');
|
|
||||||
options || (options = {});
|
|
||||||
|
|
||||||
// juggle arguments
|
|
||||||
if (Array.isArray(source)) {
|
|
||||||
// convert commands to an options object
|
|
||||||
options = source;
|
|
||||||
|
|
||||||
// used to report invalid command-line arguments
|
|
||||||
var invalidArgs = _.reject(options.slice(options[0] == 'node' ? 2 : 0), function(value, index, options) {
|
|
||||||
if (/^(?:-o|--output)$/.test(options[index - 1]) ||
|
|
||||||
/^modes=.*$/.test(value)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
var result = [
|
|
||||||
'-o', '--output',
|
|
||||||
'-p', '--source-map',
|
|
||||||
'-s', '--silent',
|
|
||||||
'-t', '--template'
|
|
||||||
].indexOf(value) > -1;
|
|
||||||
|
|
||||||
if (!result && /^(?:-p|--source-map)$/.test(options[index - 1])) {
|
|
||||||
result = true;
|
|
||||||
sourceMapURL = value;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
|
|
||||||
// report invalid arguments
|
|
||||||
if (invalidArgs.length) {
|
|
||||||
console.log(
|
|
||||||
'\n' +
|
|
||||||
'Invalid argument' + (invalidArgs.length > 1 ? 's' : '') +
|
|
||||||
' passed: ' + invalidArgs.join(', ')
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var filePath = options[options.length - 1],
|
|
||||||
isMapped = options.indexOf('-p') > -1 || options.indexOf('--source-map') > -1,
|
|
||||||
isSilent = options.indexOf('-s') > -1 || options.indexOf('--silent') > -1,
|
|
||||||
isTemplate = options.indexOf('-t') > -1 || options.indexOf('--template') > -1,
|
|
||||||
outputPath = path.join(path.dirname(filePath), path.basename(filePath, '.js') + '.min.js');
|
|
||||||
|
|
||||||
modes = options.reduce(function(result, value) {
|
|
||||||
var match = value.match(/modes=(.*)$/);
|
|
||||||
return match ? match[1].split(/, */) : result;
|
|
||||||
}, modes);
|
|
||||||
|
|
||||||
outputPath = options.reduce(function(result, value, index) {
|
|
||||||
if (/-o|--output/.test(value)) {
|
|
||||||
result = options[index + 1];
|
|
||||||
result = path.join(fs.realpathSync(path.dirname(result)), path.basename(result));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}, outputPath);
|
|
||||||
|
|
||||||
options = {
|
|
||||||
'filePath': filePath,
|
|
||||||
'isMapped': isMapped,
|
|
||||||
'isSilent': isSilent,
|
|
||||||
'isTemplate': isTemplate,
|
|
||||||
'modes': modes,
|
|
||||||
'outputPath': outputPath,
|
|
||||||
'sourceMapURL': sourceMapURL
|
|
||||||
};
|
|
||||||
|
|
||||||
source = fs.readFileSync(filePath, 'utf8');
|
|
||||||
}
|
|
||||||
|
|
||||||
modes = options.modes || modes;
|
|
||||||
if (options.isMapped) {
|
|
||||||
modes = modes.filter(function(mode) {
|
|
||||||
return mode != 'hybrid';
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (options.isTemplate) {
|
|
||||||
modes = modes.filter(function(mode) {
|
|
||||||
return mode != 'advanced';
|
|
||||||
});
|
|
||||||
}
|
|
||||||
options.modes = modes;
|
|
||||||
|
|
||||||
// fetch the Closure Compiler
|
|
||||||
getDependency({
|
|
||||||
'id': 'closure-compiler',
|
|
||||||
'hashId': closureId,
|
|
||||||
'path': vendorPath,
|
|
||||||
'title': 'the Closure Compiler',
|
|
||||||
'onComplete': function(exception) {
|
|
||||||
var error = exception;
|
|
||||||
|
|
||||||
// fetch UglifyJS
|
|
||||||
getDependency({
|
|
||||||
'id': 'uglifyjs',
|
|
||||||
'hashId': uglifyId,
|
|
||||||
'title': 'UglifyJS',
|
|
||||||
'path': vendorPath,
|
|
||||||
'onComplete': function(exception) {
|
|
||||||
error || (error = exception);
|
|
||||||
if (!error) {
|
|
||||||
new Minify(source, options);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Minify constructor used to keep state of each `minify` invocation.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @constructor
|
|
||||||
* @param {String} source The source to minify.
|
|
||||||
* @param {Object} options The options object.
|
|
||||||
* outputPath - Write output to a given path/filename.
|
|
||||||
* isSilent - Skip status updates normally logged to the console.
|
|
||||||
* isTemplate - Applies template specific minifier options.
|
|
||||||
* onComplete - The function called once minification has finished.
|
|
||||||
*/
|
|
||||||
function Minify(source, options) {
|
|
||||||
// juggle arguments
|
|
||||||
if (typeof source == 'object' && source) {
|
|
||||||
options = source || options;
|
|
||||||
source = options.source || '';
|
|
||||||
}
|
|
||||||
this.compiled = { 'simple': {}, 'advanced': {} };
|
|
||||||
this.hybrid = { 'simple': {}, 'advanced': {} };
|
|
||||||
this.uglified = {};
|
|
||||||
|
|
||||||
this.filePath = options.filePath;
|
|
||||||
this.isMapped = !!options.isMapped;
|
|
||||||
this.isSilent = !!options.isSilent;
|
|
||||||
this.isTemplate = !!options.isTemplate;
|
|
||||||
this.outputPath = options.outputPath;
|
|
||||||
this.sourceMapURL = options.sourceMapURL;
|
|
||||||
|
|
||||||
var modes = this.modes = options.modes;
|
|
||||||
source = this.source = preprocess(source, options);
|
|
||||||
|
|
||||||
this.onComplete = options.onComplete || function(data) {
|
|
||||||
var outputPath = this.outputPath,
|
|
||||||
sourceMap = data.sourceMap;
|
|
||||||
|
|
||||||
fs.writeFileSync(outputPath, data.source, 'utf8');
|
|
||||||
if (sourceMap) {
|
|
||||||
fs.writeFileSync(getMapPath(outputPath), sourceMap, 'utf8');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// begin the minification process
|
|
||||||
if (modes.indexOf('simple') > -1) {
|
|
||||||
closureCompile.call(this, source, 'simple', onClosureSimpleCompile.bind(this));
|
|
||||||
} else if (modes.indexOf('advanced') > -1) {
|
|
||||||
onClosureSimpleGzip.call(this);
|
|
||||||
} else {
|
|
||||||
onClosureAdvancedGzip.call(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetches a required `.tar.gz` dependency with the given Git object ID from
|
|
||||||
* the Lo-Dash repo on GitHub. The object ID may be obtained by running
|
|
||||||
* `git hash-object path/to/dependency.tar.gz`.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object} options The options object.
|
|
||||||
* id - The Git object ID of the `.tar.gz` file.
|
|
||||||
* onComplete - The function called once the extraction has finished.
|
|
||||||
* path - The path of the extraction directory.
|
|
||||||
* title - The dependency's title used in status updates logged to the console.
|
|
||||||
*/
|
|
||||||
function getDependency(options) {
|
|
||||||
options || (options = {});
|
|
||||||
|
|
||||||
var ran,
|
|
||||||
destPath = options.path,
|
|
||||||
hashId = options.hashId,
|
|
||||||
id = options.id,
|
|
||||||
onComplete = options.onComplete,
|
|
||||||
title = options.title;
|
|
||||||
|
|
||||||
// exit early if dependency exists
|
|
||||||
if (fs.existsSync(path.join(destPath, id))) {
|
|
||||||
onComplete();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var callback = function(exception) {
|
|
||||||
if (ran) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (exception) {
|
|
||||||
console.error([
|
|
||||||
'There was a problem installing ' + title + '.',
|
|
||||||
'Try running the command as root, via `sudo`, or manually install by running:',
|
|
||||||
'',
|
|
||||||
"curl -H 'Accept: " + mediaType + "' " + location.href + '/' + hashId + " | tar xvz -C '" + destPath + "'",
|
|
||||||
''
|
|
||||||
].join('\n'));
|
|
||||||
}
|
|
||||||
ran = true;
|
|
||||||
process.removeListener('uncaughtException', callback);
|
|
||||||
onComplete(exception);
|
|
||||||
};
|
|
||||||
|
|
||||||
console.log('Downloading ' + title + '...');
|
|
||||||
process.on('uncaughtException', callback);
|
|
||||||
|
|
||||||
https.get({
|
|
||||||
'host': location.host,
|
|
||||||
'path': location.pathname + '/' + hashId,
|
|
||||||
'headers': {
|
|
||||||
// By default, all GitHub blob API endpoints return a JSON document
|
|
||||||
// containing Base64-encoded blob data. Overriding the `Accept` header
|
|
||||||
// with the GitHub raw media type returns the blob data directly.
|
|
||||||
// See http://developer.github.com/v3/media/.
|
|
||||||
'Accept': mediaType
|
|
||||||
}
|
|
||||||
}, function(response) {
|
|
||||||
var decompressor = zlib.createUnzip(),
|
|
||||||
parser = new tar.Extract({ 'path': destPath });
|
|
||||||
|
|
||||||
parser.on('end', callback);
|
|
||||||
response.pipe(decompressor).pipe(parser);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolves the source map path from the given output path.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {String} outputPath The output path.
|
|
||||||
* @returns {String} Returns the source map path.
|
|
||||||
*/
|
|
||||||
function getMapPath(outputPath) {
|
|
||||||
return path.join(path.dirname(outputPath), path.basename(outputPath, '.js') + '.map');
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compresses a `source` string using the Closure Compiler. Yields the
|
|
||||||
* minified result, and any exceptions encountered, to a `callback` function.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {String} source The JavaScript source to minify.
|
|
||||||
* @param {String} mode The optimization mode.
|
|
||||||
* @param {Function} callback The function called once the process has completed.
|
|
||||||
*/
|
|
||||||
function closureCompile(source, mode, callback) {
|
|
||||||
var filePath = this.filePath,
|
|
||||||
isAdvanced = mode == 'advanced',
|
|
||||||
isMapped = this.isMapped,
|
|
||||||
options = closureOptions.slice(),
|
|
||||||
outputPath = this.outputPath,
|
|
||||||
mapPath = getMapPath(outputPath),
|
|
||||||
sourceMapURL = this.sourceMapURL || path.basename(mapPath);
|
|
||||||
|
|
||||||
// remove copyright header to make other modifications easier
|
|
||||||
var license = (/^(?:\s*\/\/.*\s*|\s*\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\/\s*)*/.exec(source) || [''])[0];
|
|
||||||
if (license) {
|
|
||||||
source = source.replace(license, '');
|
|
||||||
}
|
|
||||||
|
|
||||||
var hasIIFE = /^;?\(function[^{]+{\s*/.test(source),
|
|
||||||
isStrict = hasIIFE && /^;?\(function[^{]+{\s*["']use strict["']/.test(source);
|
|
||||||
|
|
||||||
// to avoid stripping the IIFE, convert it to a function call
|
|
||||||
if (hasIIFE && isAdvanced) {
|
|
||||||
source = source
|
|
||||||
.replace(/\(function/, '__iife__$&')
|
|
||||||
.replace(/\(this\)\)([\s;]*(\n\/\/.+)?)$/, ', this)$1');
|
|
||||||
}
|
|
||||||
|
|
||||||
options.push('--compilation_level=' + optimizationModes[mode]);
|
|
||||||
if (isMapped) {
|
|
||||||
options.push('--create_source_map=' + mapPath, '--source_map_format=V3');
|
|
||||||
}
|
|
||||||
|
|
||||||
var compiler = spawn('java', ['-jar', closurePath].concat(options));
|
|
||||||
if (!this.isSilent) {
|
|
||||||
console.log('Compressing ' + path.basename(outputPath, '.js') + ' using the Closure Compiler (' + mode + ')...');
|
|
||||||
}
|
|
||||||
|
|
||||||
var error = '';
|
|
||||||
compiler.stderr.on('data', function(data) {
|
|
||||||
error += data;
|
|
||||||
});
|
|
||||||
|
|
||||||
var output = '';
|
|
||||||
compiler.stdout.on('data', function(data) {
|
|
||||||
output += data;
|
|
||||||
});
|
|
||||||
|
|
||||||
compiler.on('exit', function(status) {
|
|
||||||
// `status` contains the process exit code
|
|
||||||
if (status) {
|
|
||||||
var exception = new Error(error);
|
|
||||||
exception.status = status;
|
|
||||||
}
|
|
||||||
// restore IIFE and move exposed vars inside the IIFE
|
|
||||||
if (hasIIFE && isAdvanced) {
|
|
||||||
output = output
|
|
||||||
.replace(/__iife__\(/, '(')
|
|
||||||
.replace(/,\s*this\)([\s;]*(\n\/\/.+)?)$/, '(this))$1')
|
|
||||||
.replace(/^((?:var (?:\w+=(?:!0|!1|null)[,;])+)?)([\s\S]*?function[^{]+{)/, '$2$1');
|
|
||||||
}
|
|
||||||
// inject "use strict" directive
|
|
||||||
if (isStrict) {
|
|
||||||
output = output.replace(/^[\s\S]*?function[^{]+{/, '$&"use strict";');
|
|
||||||
}
|
|
||||||
// restore copyright header
|
|
||||||
if (license) {
|
|
||||||
output = license + output;
|
|
||||||
}
|
|
||||||
if (isMapped) {
|
|
||||||
var mapOutput = fs.readFileSync(mapPath, 'utf8');
|
|
||||||
fs.unlinkSync(mapPath);
|
|
||||||
output = output.replace(/[\s;]*$/, '\n/*\n//@ sourceMappingURL=' + sourceMapURL) + '\n*/';
|
|
||||||
|
|
||||||
mapOutput = JSON.parse(mapOutput);
|
|
||||||
mapOutput.file = path.basename(outputPath);
|
|
||||||
mapOutput.sources = [path.basename(filePath)];
|
|
||||||
mapOutput = JSON.stringify(mapOutput, null, 2);
|
|
||||||
}
|
|
||||||
callback(exception, output, mapOutput);
|
|
||||||
});
|
|
||||||
|
|
||||||
// proxy the standard input to the Closure Compiler
|
|
||||||
compiler.stdin.end(source);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compresses a `source` string using UglifyJS. Yields the result to a
|
|
||||||
* `callback` function. This function is synchronous; the `callback` is used
|
|
||||||
* for symmetry.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {String} source The JavaScript source to minify.
|
|
||||||
* @param {String} label The label to log.
|
|
||||||
* @param {Function} callback The function called once the process has completed.
|
|
||||||
*/
|
|
||||||
function uglify(source, label, callback) {
|
|
||||||
if (!this.isSilent) {
|
|
||||||
console.log('Compressing ' + path.basename(this.outputPath, '.js') + ' using ' + label + '...');
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
var uglifyJS = require(uglifyPath);
|
|
||||||
|
|
||||||
// 1. parse
|
|
||||||
var toplevel = uglifyJS.parse(source);
|
|
||||||
|
|
||||||
// 2. compress
|
|
||||||
// enable unsafe comparisons
|
|
||||||
toplevel.figure_out_scope();
|
|
||||||
toplevel = toplevel.transform(uglifyJS.Compressor({
|
|
||||||
'comparisons': false,
|
|
||||||
'unsafe_comps': true,
|
|
||||||
'warnings': false
|
|
||||||
}));
|
|
||||||
|
|
||||||
// 3. mangle
|
|
||||||
// excluding the `define` function exposed by AMD loaders
|
|
||||||
toplevel.figure_out_scope();
|
|
||||||
toplevel.compute_char_frequency();
|
|
||||||
toplevel.mangle_names({
|
|
||||||
'except': ['define']
|
|
||||||
});
|
|
||||||
|
|
||||||
// 4. output
|
|
||||||
// restrict lines to 500 characters for consistency with the Closure Compiler
|
|
||||||
var stream = uglifyJS.OutputStream({
|
|
||||||
'ascii_only': true,
|
|
||||||
'comments': /@cc_on|@license|@preserve/i,
|
|
||||||
'max_line_len': 500,
|
|
||||||
});
|
|
||||||
|
|
||||||
toplevel.print(stream);
|
|
||||||
}
|
|
||||||
catch(e) {
|
|
||||||
var exception = e;
|
|
||||||
}
|
|
||||||
callback(exception, stream && String(stream));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Closure Compiler callback for simple optimizations.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object|Undefined} exception The error object.
|
|
||||||
* @param {String} result The resulting minified source.
|
|
||||||
* @param {String} map The source map output.
|
|
||||||
*/
|
|
||||||
function onClosureSimpleCompile(exception, result, map) {
|
|
||||||
if (exception) {
|
|
||||||
throw exception;
|
|
||||||
}
|
|
||||||
result = postprocess(result);
|
|
||||||
|
|
||||||
var simple = this.compiled.simple;
|
|
||||||
simple.source = result;
|
|
||||||
simple.sourceMap = map;
|
|
||||||
zlib.gzip(result, onClosureSimpleGzip.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Closure Compiler `gzip` callback for simple optimizations.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object|Undefined} exception The error object.
|
|
||||||
* @param {Buffer} result The resulting gzipped source.
|
|
||||||
*/
|
|
||||||
function onClosureSimpleGzip(exception, result) {
|
|
||||||
if (exception) {
|
|
||||||
throw exception;
|
|
||||||
}
|
|
||||||
if (result != null) {
|
|
||||||
if (!this.isSilent) {
|
|
||||||
console.log('Done. Size: %d bytes.', result.length);
|
|
||||||
}
|
|
||||||
this.compiled.simple.gzip = result;
|
|
||||||
}
|
|
||||||
// compile the source using advanced optimizations
|
|
||||||
if (this.modes.indexOf('advanced') > -1) {
|
|
||||||
closureCompile.call(this, this.source, 'advanced', onClosureAdvancedCompile.bind(this));
|
|
||||||
} else {
|
|
||||||
onClosureAdvancedGzip.call(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Closure Compiler callback for advanced optimizations.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object|Undefined} exception The error object.
|
|
||||||
* @param {String} result The resulting minified source.
|
|
||||||
* @param {String} map The source map output.
|
|
||||||
*/
|
|
||||||
function onClosureAdvancedCompile(exception, result, map) {
|
|
||||||
if (exception) {
|
|
||||||
throw exception;
|
|
||||||
}
|
|
||||||
result = postprocess(result);
|
|
||||||
|
|
||||||
var advanced = this.compiled.advanced;
|
|
||||||
advanced.source = result;
|
|
||||||
advanced.sourceMap = map;
|
|
||||||
zlib.gzip(result, onClosureAdvancedGzip.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Closure Compiler `gzip` callback for advanced optimizations.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object|Undefined} exception The error object.
|
|
||||||
* @param {Buffer} result The resulting gzipped source.
|
|
||||||
*/
|
|
||||||
function onClosureAdvancedGzip(exception, result) {
|
|
||||||
if (exception) {
|
|
||||||
throw exception;
|
|
||||||
}
|
|
||||||
if (result != null) {
|
|
||||||
if (!this.isSilent) {
|
|
||||||
console.log('Done. Size: %d bytes.', result.length);
|
|
||||||
}
|
|
||||||
this.compiled.advanced.gzip = result;
|
|
||||||
}
|
|
||||||
// minify the source using UglifyJS
|
|
||||||
if (!this.isMapped) {
|
|
||||||
uglify.call(this, this.source, 'UglifyJS', onUglify.bind(this));
|
|
||||||
} else {
|
|
||||||
onComplete.call(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The UglifyJS callback.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object|Undefined} exception The error object.
|
|
||||||
* @param {String} result The resulting minified source.
|
|
||||||
*/
|
|
||||||
function onUglify(exception, result) {
|
|
||||||
if (exception) {
|
|
||||||
throw exception;
|
|
||||||
}
|
|
||||||
result = postprocess(result);
|
|
||||||
this.uglified.source = result;
|
|
||||||
zlib.gzip(result, onUglifyGzip.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The UglifyJS `gzip` callback.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object|Undefined} exception The error object.
|
|
||||||
* @param {Buffer} result The resulting gzipped source.
|
|
||||||
*/
|
|
||||||
function onUglifyGzip(exception, result) {
|
|
||||||
if (exception) {
|
|
||||||
throw exception;
|
|
||||||
}
|
|
||||||
if (result != null) {
|
|
||||||
if (!this.isSilent) {
|
|
||||||
console.log('Done. Size: %d bytes.', result.length);
|
|
||||||
}
|
|
||||||
this.uglified.gzip = result;
|
|
||||||
}
|
|
||||||
// minify the already Closure Compiler simple optimized source using UglifyJS
|
|
||||||
var modes = this.modes;
|
|
||||||
if (modes.indexOf('hybrid') > -1) {
|
|
||||||
if (modes.indexOf('simple') > -1) {
|
|
||||||
uglify.call(this, this.compiled.simple.source, 'hybrid (simple)', onSimpleHybrid.bind(this));
|
|
||||||
} else if (modes.indexOf('advanced') > -1) {
|
|
||||||
onSimpleHybridGzip.call(this);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
onComplete.call(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The hybrid callback for simple optimizations.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object|Undefined} exception The error object.
|
|
||||||
* @param {String} result The resulting minified source.
|
|
||||||
*/
|
|
||||||
function onSimpleHybrid(exception, result) {
|
|
||||||
if (exception) {
|
|
||||||
throw exception;
|
|
||||||
}
|
|
||||||
result = postprocess(result);
|
|
||||||
this.hybrid.simple.source = result;
|
|
||||||
zlib.gzip(result, onSimpleHybridGzip.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The hybrid `gzip` callback for simple optimizations.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object|Undefined} exception The error object.
|
|
||||||
* @param {Buffer} result The resulting gzipped source.
|
|
||||||
*/
|
|
||||||
function onSimpleHybridGzip(exception, result) {
|
|
||||||
if (exception) {
|
|
||||||
throw exception;
|
|
||||||
}
|
|
||||||
if (result != null) {
|
|
||||||
if (!this.isSilent) {
|
|
||||||
console.log('Done. Size: %d bytes.', result.length);
|
|
||||||
}
|
|
||||||
this.hybrid.simple.gzip = result;
|
|
||||||
}
|
|
||||||
// minify the already Closure Compiler advance optimized source using UglifyJS
|
|
||||||
if (this.modes.indexOf('advanced') > -1) {
|
|
||||||
uglify.call(this, this.compiled.advanced.source, 'hybrid (advanced)', onAdvancedHybrid.bind(this));
|
|
||||||
} else {
|
|
||||||
onComplete.call(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The hybrid callback for advanced optimizations.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object|Undefined} exception The error object.
|
|
||||||
* @param {String} result The resulting minified source.
|
|
||||||
*/
|
|
||||||
function onAdvancedHybrid(exception, result) {
|
|
||||||
if (exception) {
|
|
||||||
throw exception;
|
|
||||||
}
|
|
||||||
result = postprocess(result);
|
|
||||||
this.hybrid.advanced.source = result;
|
|
||||||
zlib.gzip(result, onAdvancedHybridGzip.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The hybrid `gzip` callback for advanced optimizations.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object|Undefined} exception The error object.
|
|
||||||
* @param {Buffer} result The resulting gzipped source.
|
|
||||||
*/
|
|
||||||
function onAdvancedHybridGzip(exception, result) {
|
|
||||||
if (exception) {
|
|
||||||
throw exception;
|
|
||||||
}
|
|
||||||
if (result != null) {
|
|
||||||
if (!this.isSilent) {
|
|
||||||
console.log('Done. Size: %d bytes.', result.length);
|
|
||||||
}
|
|
||||||
this.hybrid.advanced.gzip = result;
|
|
||||||
}
|
|
||||||
// finish by choosing the smallest compressed file
|
|
||||||
onComplete.call(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The callback executed after the source is minified and gzipped.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
function onComplete() {
|
|
||||||
var compiledSimple = this.compiled.simple,
|
|
||||||
compiledAdvanced = this.compiled.advanced,
|
|
||||||
uglified = this.uglified,
|
|
||||||
hybridSimple = this.hybrid.simple,
|
|
||||||
hybridAdvanced = this.hybrid.advanced;
|
|
||||||
|
|
||||||
var objects = [
|
|
||||||
compiledSimple,
|
|
||||||
compiledAdvanced,
|
|
||||||
uglified,
|
|
||||||
hybridSimple,
|
|
||||||
hybridAdvanced
|
|
||||||
];
|
|
||||||
|
|
||||||
var gzips = objects
|
|
||||||
.map(function(data) { return data.gzip; })
|
|
||||||
.filter(Boolean);
|
|
||||||
|
|
||||||
// select the smallest gzipped file and use its minified counterpart as the
|
|
||||||
// official minified release (ties go to the Closure Compiler)
|
|
||||||
var min = gzips.reduce(function(min, gzip) {
|
|
||||||
var length = gzip.length;
|
|
||||||
return min > length ? length : min;
|
|
||||||
}, Infinity);
|
|
||||||
|
|
||||||
// pass the minified source to the "onComplete" callback
|
|
||||||
objects.some(function(data) {
|
|
||||||
var gzip = data.gzip;
|
|
||||||
if (gzip && gzip.length == min) {
|
|
||||||
data.outputPath = this.outputPath;
|
|
||||||
this.onComplete(data);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// expose `minify`
|
|
||||||
if (module != require.main) {
|
|
||||||
module.exports = minify;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// read the Lo-Dash source file from the first argument if the script
|
|
||||||
// was invoked directly (e.g. `node minify.js source.js`) and write to
|
|
||||||
// `<filename>.min.js`
|
|
||||||
(function() {
|
|
||||||
var options = process.argv;
|
|
||||||
if (options.length < 3) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
minify(options);
|
|
||||||
}());
|
|
||||||
}
|
|
||||||
}());
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
;(function() {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/** The Node filesystem module */
|
|
||||||
var fs = require('fs');
|
|
||||||
|
|
||||||
/** The minimal license/copyright template */
|
|
||||||
var licenseTemplate = [
|
|
||||||
'/**',
|
|
||||||
' * @license',
|
|
||||||
' * Lo-Dash <%= VERSION %> lodash.com/license',
|
|
||||||
' * Underscore.js 1.4.4 underscorejs.org/LICENSE',
|
|
||||||
' */'
|
|
||||||
].join('\n');
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Post-process a given minified Lo-Dash `source`, preparing it for
|
|
||||||
* deployment.
|
|
||||||
*
|
|
||||||
* @param {String} source The source to process.
|
|
||||||
* @returns {String} Returns the processed source.
|
|
||||||
*/
|
|
||||||
function postprocess(source) {
|
|
||||||
// remove copyright header
|
|
||||||
source = source.replace(/^\/\**[\s\S]+?\*\/\n/, '');
|
|
||||||
|
|
||||||
// correct overly aggressive Closure Compiler advanced optimizations
|
|
||||||
source = source
|
|
||||||
.replace(/prototype\s*=\s*{\s*valueOf\s*:\s*1\s*}/, 'prototype={valueOf:1,y:1}')
|
|
||||||
.replace(/(document[^&]+&&)\s*(?:\w+|!\d)/, '$1!({toString:0}+"")');
|
|
||||||
|
|
||||||
// flip `typeof` expressions to help optimize Safari and
|
|
||||||
// correct the AMD module definition for AMD build optimizers
|
|
||||||
// (e.g. from `"number" == typeof x` to `typeof x == "number")
|
|
||||||
source = source.replace(/(\w)?("[^"]+")\s*([!=]=)\s*(typeof(?:\s*\([^)]+\)|\s+[.\w]+(?!\[)))/g, function(match, other, type, equality, expression) {
|
|
||||||
return (other ? other + ' ' : '') + expression + equality + type;
|
|
||||||
});
|
|
||||||
|
|
||||||
// add trailing semicolon
|
|
||||||
if (source) {
|
|
||||||
source = source.replace(/[\s;]*?(\s*\/\/.*\s*|\s*\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\/\s*)*$/, ';$1');
|
|
||||||
}
|
|
||||||
// exit early if version snippet isn't found
|
|
||||||
var snippet = /VERSION\s*[=:]\s*([\'"])(.*?)\1/.exec(source);
|
|
||||||
if (!snippet) {
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
// add new copyright header
|
|
||||||
var version = snippet[2];
|
|
||||||
source = licenseTemplate.replace('<%= VERSION %>', version) + '\n;' + source;
|
|
||||||
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// expose `postprocess`
|
|
||||||
if (module != require.main) {
|
|
||||||
module.exports = postprocess;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// read the Lo-Dash source file from the first argument if the script
|
|
||||||
// was invoked directly (e.g. `node post-compile.js source.js`) and write to
|
|
||||||
// the same file
|
|
||||||
(function() {
|
|
||||||
var options = process.argv;
|
|
||||||
if (options.length < 3) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var filePath = options[options.length - 1],
|
|
||||||
source = fs.readFileSync(filePath, 'utf8');
|
|
||||||
|
|
||||||
fs.writeFileSync(filePath, postprocess(source), 'utf8');
|
|
||||||
}());
|
|
||||||
}
|
|
||||||
}());
|
|
||||||
@@ -1,382 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
;(function() {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/** The Node filesystem module */
|
|
||||||
var fs = require('fs');
|
|
||||||
|
|
||||||
/** Used to minify variables embedded in compiled strings */
|
|
||||||
var compiledVars = [
|
|
||||||
'args',
|
|
||||||
'argsIndex',
|
|
||||||
'argsLength',
|
|
||||||
'callback',
|
|
||||||
'collection',
|
|
||||||
'createCallback',
|
|
||||||
'ctor',
|
|
||||||
'guard',
|
|
||||||
'hasOwnProperty',
|
|
||||||
'index',
|
|
||||||
'isArguments',
|
|
||||||
'isArray',
|
|
||||||
'isString',
|
|
||||||
'iterable',
|
|
||||||
'length',
|
|
||||||
'nativeKeys',
|
|
||||||
'object',
|
|
||||||
'objectTypes',
|
|
||||||
'ownIndex',
|
|
||||||
'ownProps',
|
|
||||||
'result',
|
|
||||||
'skipProto',
|
|
||||||
'source',
|
|
||||||
'thisArg'
|
|
||||||
];
|
|
||||||
|
|
||||||
/** Used to minify `compileIterator` option properties */
|
|
||||||
var iteratorOptions = [
|
|
||||||
'args',
|
|
||||||
'arrays',
|
|
||||||
'bottom',
|
|
||||||
'firstArg',
|
|
||||||
'hasDontEnumBug',
|
|
||||||
'hasEnumPrototype',
|
|
||||||
'isKeysFast',
|
|
||||||
'loop',
|
|
||||||
'nonEnumArgs',
|
|
||||||
'noCharByIndex',
|
|
||||||
'shadowed',
|
|
||||||
'top',
|
|
||||||
'useHas'
|
|
||||||
];
|
|
||||||
|
|
||||||
/** Used to minify variables and string values to a single character */
|
|
||||||
var minNames = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
|
|
||||||
minNames.push.apply(minNames, minNames.map(function(value) {
|
|
||||||
return value + value;
|
|
||||||
}));
|
|
||||||
|
|
||||||
/** Used to protect the specified properties from getting minified */
|
|
||||||
var propWhitelist = [
|
|
||||||
'_',
|
|
||||||
'__wrapped__',
|
|
||||||
'after',
|
|
||||||
'all',
|
|
||||||
'amd',
|
|
||||||
'any',
|
|
||||||
'assign',
|
|
||||||
'at',
|
|
||||||
'attachEvent',
|
|
||||||
'bind',
|
|
||||||
'bindAll',
|
|
||||||
'bindKey',
|
|
||||||
'clearTimeout',
|
|
||||||
'clone',
|
|
||||||
'cloneDeep',
|
|
||||||
'collect',
|
|
||||||
'compact',
|
|
||||||
'compose',
|
|
||||||
'contains',
|
|
||||||
'countBy',
|
|
||||||
'criteria',
|
|
||||||
'debounce',
|
|
||||||
'defaults',
|
|
||||||
'defer',
|
|
||||||
'delay',
|
|
||||||
'detect',
|
|
||||||
'difference',
|
|
||||||
'drop',
|
|
||||||
'each',
|
|
||||||
'environment',
|
|
||||||
'escape',
|
|
||||||
'evaluate',
|
|
||||||
'every',
|
|
||||||
'exports',
|
|
||||||
'extend',
|
|
||||||
'filter',
|
|
||||||
'find',
|
|
||||||
'first',
|
|
||||||
'flatten',
|
|
||||||
'foldl',
|
|
||||||
'foldr',
|
|
||||||
'forEach',
|
|
||||||
'forIn',
|
|
||||||
'forOwn',
|
|
||||||
'functions',
|
|
||||||
'global',
|
|
||||||
'groupBy',
|
|
||||||
'has',
|
|
||||||
'head',
|
|
||||||
'imports',
|
|
||||||
'identity',
|
|
||||||
'include',
|
|
||||||
'index',
|
|
||||||
'indexOf',
|
|
||||||
'initial',
|
|
||||||
'inject',
|
|
||||||
'interpolate',
|
|
||||||
'intersection',
|
|
||||||
'invert',
|
|
||||||
'invoke',
|
|
||||||
'isArguments',
|
|
||||||
'isArray',
|
|
||||||
'isBoolean',
|
|
||||||
'isDate',
|
|
||||||
'isElement',
|
|
||||||
'isEmpty',
|
|
||||||
'isEqual',
|
|
||||||
'isEqual',
|
|
||||||
'isFinite',
|
|
||||||
'isFinite',
|
|
||||||
'isFunction',
|
|
||||||
'isNaN',
|
|
||||||
'isNull',
|
|
||||||
'isNumber',
|
|
||||||
'isObject',
|
|
||||||
'isPlainObject',
|
|
||||||
'isRegExp',
|
|
||||||
'isString',
|
|
||||||
'isUndefined',
|
|
||||||
'keys',
|
|
||||||
'last',
|
|
||||||
'lastIndexOf',
|
|
||||||
'map',
|
|
||||||
'max',
|
|
||||||
'memoize',
|
|
||||||
'merge',
|
|
||||||
'methods',
|
|
||||||
'min',
|
|
||||||
'mixin',
|
|
||||||
'noConflict',
|
|
||||||
'object',
|
|
||||||
'omit',
|
|
||||||
'once',
|
|
||||||
'opera',
|
|
||||||
'pairs',
|
|
||||||
'partial',
|
|
||||||
'partialRight',
|
|
||||||
'pick',
|
|
||||||
'pluck',
|
|
||||||
'random',
|
|
||||||
'range',
|
|
||||||
'reduce',
|
|
||||||
'reduceRight',
|
|
||||||
'reject',
|
|
||||||
'rest',
|
|
||||||
'result',
|
|
||||||
'select',
|
|
||||||
'setImmediate',
|
|
||||||
'setTimeout',
|
|
||||||
'shuffle',
|
|
||||||
'size',
|
|
||||||
'some',
|
|
||||||
'sortBy',
|
|
||||||
'sortedIndex',
|
|
||||||
'source',
|
|
||||||
'tail',
|
|
||||||
'take',
|
|
||||||
'tap',
|
|
||||||
'template',
|
|
||||||
'templateSettings',
|
|
||||||
'throttle',
|
|
||||||
'times',
|
|
||||||
'toArray',
|
|
||||||
'unescape',
|
|
||||||
'union',
|
|
||||||
'uniq',
|
|
||||||
'unique',
|
|
||||||
'uniqueId',
|
|
||||||
'value',
|
|
||||||
'values',
|
|
||||||
'variable',
|
|
||||||
'VERSION',
|
|
||||||
'where',
|
|
||||||
'without',
|
|
||||||
'wrap',
|
|
||||||
'zip',
|
|
||||||
|
|
||||||
// properties used by the `backbone` and `underscore` builds
|
|
||||||
'__chain__',
|
|
||||||
'chain',
|
|
||||||
'findWhere'
|
|
||||||
];
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pre-process a given Lo-Dash `source`, preparing it for minification.
|
|
||||||
*
|
|
||||||
* @param {String} [source=''] The source to process.
|
|
||||||
* @param {Object} [options={}] The options object.
|
|
||||||
* @returns {String} Returns the processed source.
|
|
||||||
*/
|
|
||||||
function preprocess(source, options) {
|
|
||||||
source || (source = '');
|
|
||||||
options || (options = {});
|
|
||||||
|
|
||||||
// remove unrecognized JSDoc tags so the Closure Compiler won't complain
|
|
||||||
source = source.replace(/@(?:alias|category)\b.*/g, '');
|
|
||||||
|
|
||||||
if (options.isTemplate) {
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
// add brackets to whitelisted properties so the Closure Compiler won't mung them
|
|
||||||
// http://code.google.com/closure/compiler/docs/api-tutorial3.html#export
|
|
||||||
source = source.replace(RegExp('\\.(' + propWhitelist.join('|') + ')\\b', 'g'), function(match, prop) {
|
|
||||||
return "['" + prop.replace(/['\n\r\t]/g, '\\$&') + "']";
|
|
||||||
});
|
|
||||||
|
|
||||||
// remove brackets from `_.escape()` in `_.template`
|
|
||||||
source = source.replace(/__e *= *_\['escape']/g, '__e=_.escape');
|
|
||||||
|
|
||||||
// remove brackets from `collection.indexOf` in `_.contains`
|
|
||||||
source = source.replace("collection['indexOf'](target)", 'collection.indexOf(target)');
|
|
||||||
|
|
||||||
// remove brackets from `result[length].value` in `_.sortBy`
|
|
||||||
source = source.replace("result[length]['value']", 'result[length].value');
|
|
||||||
|
|
||||||
// remove whitespace from string literals
|
|
||||||
source = source.replace(/^([ "'\w]+:)? *"[^"\\\n]*(?:\\.[^"\\\n]*)*"|'[^'\\\n]*(?:\\.[^'\\\n]*)*'/gm, function(string, captured) {
|
|
||||||
// remove object literal property name
|
|
||||||
if (/:$/.test(captured)) {
|
|
||||||
string = string.slice(captured.length);
|
|
||||||
}
|
|
||||||
// avoids removing the '\n' of the `stringEscapes` object
|
|
||||||
string = string.replace(/\[object |delete |else (?!{)|function | in |return\s+[\w"']|throw |typeof |use strict|var |@ |(["'])\\n\1|\\\\n|\\n|\s+/g, function(match) {
|
|
||||||
return match == false || match == '\\n' ? '' : match;
|
|
||||||
});
|
|
||||||
// prepend object literal property name
|
|
||||||
return (captured || '') + string;
|
|
||||||
});
|
|
||||||
|
|
||||||
// remove whitespace from `_.template` related regexes
|
|
||||||
source = source.replace(/reEmptyString\w+ *=.+/g, function(match) {
|
|
||||||
return match.replace(/ |\\n/g, '');
|
|
||||||
});
|
|
||||||
|
|
||||||
// remove newline from double-quoted strings in `_.template`
|
|
||||||
source = source
|
|
||||||
.replace('"__p += \'"', '"__p+=\'"')
|
|
||||||
.replace('"\';\n"', '"\';"')
|
|
||||||
|
|
||||||
// remove debug sourceURL use in `_.template`
|
|
||||||
source = source.replace(/(?:\s*\/\/.*\n)* *var sourceURL[^;]+;|\+ *sourceURL/g, '');
|
|
||||||
|
|
||||||
// minify internal properties used by 'compareAscending' and `_.sortBy`
|
|
||||||
(function() {
|
|
||||||
var properties = ['criteria', 'index', 'value'],
|
|
||||||
snippets = source.match(/( +)function (?:compareAscending|sortBy)\b[\s\S]+?\n\1}/g);
|
|
||||||
|
|
||||||
if (!snippets) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
snippets.forEach(function(snippet) {
|
|
||||||
var modified = snippet;
|
|
||||||
|
|
||||||
// minify properties
|
|
||||||
properties.forEach(function(property, index) {
|
|
||||||
var minName = minNames[index],
|
|
||||||
reBracketProp = RegExp("\\['(" + property + ")'\\]", 'g'),
|
|
||||||
reDotProp = RegExp('\\.' + property + '\\b', 'g'),
|
|
||||||
rePropColon = RegExp("([^?\\s])\\s*([\"'])?\\b" + property + "\\2 *:", 'g');
|
|
||||||
|
|
||||||
modified = modified
|
|
||||||
.replace(reBracketProp, "['" + minName + "']")
|
|
||||||
.replace(reDotProp, "['" + minName + "']")
|
|
||||||
.replace(rePropColon, "$1'" + minName + "':");
|
|
||||||
});
|
|
||||||
|
|
||||||
// replace with modified snippet
|
|
||||||
source = source.replace(snippet, modified);
|
|
||||||
});
|
|
||||||
}());
|
|
||||||
|
|
||||||
// minify all compilable snippets
|
|
||||||
var snippets = source.match(
|
|
||||||
RegExp([
|
|
||||||
// match the `iteratorTemplate`
|
|
||||||
'( +)var iteratorTemplate\\b[\\s\\S]+?\\n\\1}',
|
|
||||||
// match methods created by `createIterator` calls
|
|
||||||
'createIterator\\((?:{|[a-zA-Z]+)[\\s\\S]+?\\);\\n',
|
|
||||||
// match variables storing `createIterator` options
|
|
||||||
'( +)var [a-zA-Z]+IteratorOptions\\b[\\s\\S]+?\\n\\2}',
|
|
||||||
// match the the `createIterator` function
|
|
||||||
'( +)function createIterator\\b[\\s\\S]+?\\n\\3}'
|
|
||||||
].join('|'), 'g')
|
|
||||||
);
|
|
||||||
|
|
||||||
// exit early if no compilable snippets
|
|
||||||
if (!snippets) {
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
|
|
||||||
snippets.forEach(function(snippet, index) {
|
|
||||||
var isCreateIterator = /function createIterator\b/.test(snippet),
|
|
||||||
isIteratorTemplate = /var iteratorTemplate\b/.test(snippet),
|
|
||||||
modified = snippet;
|
|
||||||
|
|
||||||
// add brackets to iterator option properties so the Closure Compiler won't mung them
|
|
||||||
modified = modified.replace(RegExp('\\.(' + iteratorOptions.join('|') + ')\\b', 'g'), function(match, prop) {
|
|
||||||
return "['" + prop.replace(/['\n\r\t]/g, '\\$&') + "']";
|
|
||||||
});
|
|
||||||
|
|
||||||
if (isCreateIterator) {
|
|
||||||
// clip before the `factory` call to avoid minifying its arguments
|
|
||||||
source = source.replace(snippet, modified);
|
|
||||||
snippet = modified = modified.replace(/return factory\([\s\S]+$/, '');
|
|
||||||
}
|
|
||||||
// minify `createIterator` option property names
|
|
||||||
iteratorOptions.forEach(function(property, index) {
|
|
||||||
var minName = minNames[index];
|
|
||||||
|
|
||||||
// minify variables in `iteratorTemplate` or property names in everything else
|
|
||||||
modified = isIteratorTemplate
|
|
||||||
? modified.replace(RegExp('\\b' + property + '\\b', 'g'), minName)
|
|
||||||
: modified.replace(RegExp("'" + property + "'", 'g'), "'" + minName + "'");
|
|
||||||
});
|
|
||||||
|
|
||||||
// minify snippet variables / arguments
|
|
||||||
compiledVars.forEach(function(variable, index) {
|
|
||||||
var minName = minNames[index];
|
|
||||||
|
|
||||||
// ensure properties in compiled strings aren't minified
|
|
||||||
modified = modified.replace(RegExp('([^.]\\b)' + variable + '\\b(?!\' *[\\]:])', 'g'), '$1' + minName);
|
|
||||||
|
|
||||||
// correct `typeof` values
|
|
||||||
if (/^(?:boolean|function|object|number|string|undefined)$/.test(variable)) {
|
|
||||||
modified = modified.replace(RegExp("(typeof [^']+')" + minName + "'", 'g'), '$1' + variable + "'");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// replace with modified snippet
|
|
||||||
source = source.replace(snippet, modified);
|
|
||||||
});
|
|
||||||
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// expose `preprocess`
|
|
||||||
if (module != require.main) {
|
|
||||||
module.exports = preprocess;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// read the Lo-Dash source file from the first argument if the script
|
|
||||||
// was invoked directly (e.g. `node pre-compile.js source.js`) and write to
|
|
||||||
// the same file
|
|
||||||
(function() {
|
|
||||||
var options = process.argv;
|
|
||||||
if (options.length < 3) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var filePath = options[options.length - 1],
|
|
||||||
isTemplate = options.indexOf('-t') > -1 || options.indexOf('--template') > -1,
|
|
||||||
source = fs.readFileSync(filePath, 'utf8');
|
|
||||||
|
|
||||||
fs.writeFileSync(filePath, preprocess(source, {
|
|
||||||
'isTemplate': isTemplate
|
|
||||||
}), 'utf8');
|
|
||||||
}());
|
|
||||||
}
|
|
||||||
}());
|
|
||||||
5152
dist/lodash.compat.js
vendored
5152
dist/lodash.compat.js
vendored
File diff suppressed because it is too large
Load Diff
42
dist/lodash.compat.min.js
vendored
42
dist/lodash.compat.min.js
vendored
@@ -1,42 +0,0 @@
|
|||||||
/**
|
|
||||||
* @license
|
|
||||||
* Lo-Dash 1.0.1 (Custom Build) lodash.com/license
|
|
||||||
* Build: `lodash -o ./dist/lodash.compat.js`
|
|
||||||
* Underscore.js 1.4.4 underscorejs.org/LICENSE
|
|
||||||
*/
|
|
||||||
;(function(n,t){function r(n){return n&&typeof n=="object"&&n.__wrapped__?n:this instanceof r?(this.__wrapped__=n,void 0):new r(n)}function e(n,t,r){t||(t=0);var e=n.length,u=e-t>=(r||at);if(u){var o={};for(r=t-1;++r<e;){var i=n[r]+"";(St.call(o,i)?o[i]:o[i]=[]).push(n[r])}}return function(r){if(u){var e=r+"";return St.call(o,e)&&-1<z(o[e],r)}return-1<z(n,r,t)}}function u(n){return n.charCodeAt(0)}function o(n,t){var r=n.b,e=t.b;if(n=n.a,t=t.a,n!==t){if(n>t||typeof n=="undefined")return 1;if(n<t||typeof t=="undefined")return-1
|
|
||||||
}return r<e?-1:1}function i(n,t,r,e){function u(){var a=arguments,c=i?this:t;return o||(n=t[f]),r.length&&(a=a.length?(a=v(a),e?a.concat(r):r.concat(a)):r),this instanceof u?(s.prototype=n.prototype,c=new s,s.prototype=W,a=n.apply(c,a),x(a)?a:c):n.apply(c,a)}var o=w(n),i=!r,f=t;return i&&(r=t),o||(t=n),u}function f(n,t,r){if(n==W)return G;var e=typeof n;if("function"!=e){if("object"!=e)return function(t){return t[n]};var u=vr(n);return function(t){for(var r=u.length,e=X;r--&&(e=j(t[u[r]],n[u[r]],ft)););return e
|
|
||||||
}}return typeof t!="undefined"?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,o){return n.call(t,r,e,u,o)}:function(r,e,u){return n.call(t,r,e,u)}:n}function a(){for(var n,t={e:tt,f:rt,g:Jt,i:Wt,j:Zt,k:jt,b:"l(n)",c:"",h:"",l:"",m:Q},r=0;n=arguments[r];r++)for(var e in n)t[e]=n[e];if(n=t.a,t.d=/^[^,]+/.exec(n)[0],r="var j,n="+t.d+",u=n;if(!n)return u;"+t.l+";",t.b?(r+="var o=n.length;j=-1;if("+t.b+"){",t.j&&(r+="if(m(n)){n=n.split('')}"),r+="while(++j<o){"+t.h+"}}else{"):t.i&&(r+="var o=n.length;j=-1;if(o&&k(n)){while(++j<o){j+='';"+t.h+"}}else{"),t.f&&(r+="var v=typeof n=='function';"),t.g&&t.m?(r+="var s=-1,t=r[typeof n]?p(n):[],o=t.length;while(++s<o){j=t[s];",t.f&&(r+="if(!(v&&j=='prototype')){"),r+=t.h+"",t.f&&(r+="}")):(r+="for(j in n){",(t.f||t.m)&&(r+="if(",t.f&&(r+="!(v&&j=='prototype')"),t.f&&t.m&&(r+="&&"),t.m&&(r+="i.call(n,j)"),r+="){"),r+=t.h+";",(t.f||t.m)&&(r+="}")),r+="}",t.e)for(r+="var g=n.constructor;",e=0;7>e;e++)r+="j='"+t.k[e]+"';if(","constructor"==t.k[e]&&(r+="!(g&&g.prototype===n)&&"),r+="i.call(n,j)){"+t.h+"}";
|
|
||||||
return(t.b||t.i)&&(r+="}"),r+=t.c+";return u",Function("f,i,k,l,m,r,p","return function("+n+"){"+r+"}")(f,St,y,sr,A,ur,Ft)}function c(n){return"\\"+or[n]}function l(n){return gr[n]}function p(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}function s(){}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 g(n){return yr[n]}function y(n){return kt.call(n)==Bt}function h(n){var t=X;if(!n||typeof n!="object"||y(n))return t;
|
|
||||||
var r=n.constructor;return!w(r)&&(!nr||!p(n))||r instanceof r?et?(lr(n,function(n,r,e){return t=!St.call(e,r),X}),t===X):(lr(n,function(n,r){t=r}),t===X||St.call(n,t)):t}function m(n){var t=[];return pr(n,function(n,r){t.push(r)}),t}function d(n,r,e,u,o,i){var a=n;if(typeof r=="function"&&(u=e,e=r,r=X),typeof e=="function"){e=typeof u=="undefined"?e:f(e,u,1);var a=e(a),c=typeof a!="undefined";c||(a=n)}if(u=x(a)){var l=kt.call(a);if(!rr[l]||nr&&p(a))return a;var s=sr(a)}if(!u||!r)return u&&!c?s?v(a):hr({},a):a;
|
|
||||||
switch(u=er[l],l){case Pt:case zt:return c?a:new u(+a);case Ct:case Ut:return c?a:new u(a);case Lt:return c?a:u(a.source,gt.exec(a))}for(o||(o=[]),i||(i=[]),l=o.length;l--;)if(o[l]==n)return i[l];return c||(a=s?u(a.length):{},s&&(St.call(n,"index")&&(a.index=n.index),St.call(n,"input")&&(a.input=n.input))),o.push(n),i.push(a),(s?$:pr)(c?a:n,function(n,u){a[u]=d(n,r,e,t,o,i)}),a}function _(n){var t=[];return lr(n,function(n,r){w(n)&&t.push(r)}),t.sort()}function b(n){for(var t=-1,r=vr(n),e=r.length,u={};++t<e;){var o=r[t];
|
|
||||||
u[n[o]]=o}return u}function j(n,t,r,e,u,o){var i=r===ft;if(r&&!i){r=typeof e=="undefined"?r:f(r,e,2);var a=r(n,t);if(typeof a!="undefined")return!!a}if(n===t)return 0!==n||1/n==1/t;var c=typeof n,l=typeof t;if(n===n&&(!n||"function"!=c&&"object"!=c)&&(!t||"function"!=l&&"object"!=l))return X;if(n==W||t==W)return n===t;if(l=kt.call(n),c=kt.call(t),l==Bt&&(l=Kt),c==Bt&&(c=Kt),l!=c)return X;switch(l){case Pt:case zt:return+n==+t;case Ct:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case Lt:case Ut:return n==t+""
|
|
||||||
}if(c=l==Mt,!c){if(n.__wrapped__||t.__wrapped__)return j(n.__wrapped__||n,t.__wrapped__||t,r,e,u,o);if(l!=Kt||nr&&(p(n)||p(t)))return X;var l=!Xt&&y(n)?Object:n.constructor,s=!Xt&&y(t)?Object:t.constructor;if(l!=s&&(!w(l)||!(l instanceof l&&w(s)&&s instanceof s)))return X}for(u||(u=[]),o||(o=[]),l=u.length;l--;)if(u[l]==n)return o[l]==t;var v=0,a=Q;if(u.push(n),o.push(t),c){if(l=n.length,v=t.length,a=v==n.length,!a&&!i)return a;for(;v--;)if(c=l,s=t[v],i)for(;c--&&!(a=j(n[c],s,r,e,u,o)););else if(!(a=j(n[v],s,r,e,u,o)))break;
|
|
||||||
return a}return lr(t,function(t,i,f){return St.call(f,i)?(v++,a=St.call(n,i)&&j(n[i],t,r,e,u,o)):void 0}),a&&!i&&lr(n,function(n,t,r){return St.call(r,t)?a=-1<--v:void 0}),a}function w(n){return typeof n=="function"}function x(n){return n?ur[typeof n]:X}function O(n){return typeof n=="number"||kt.call(n)==Ct}function A(n){return typeof n=="string"||kt.call(n)==Ut}function S(n,t,r){var e=arguments,u=0,o=2;if(!x(n))return n;if(r===ft)var i=e[3],a=e[4],c=e[5];else a=[],c=[],typeof r!="number"&&(o=e.length),3<o&&"function"==typeof e[o-2]?i=f(e[--o-1],e[o--],2):2<o&&"function"==typeof e[o-1]&&(i=e[--o]);
|
|
||||||
for(;++u<o;)(sr(e[u])?$:pr)(e[u],function(t,r){var e,u,o=t,f=n[r];if(t&&((u=sr(t))||dr(t))){for(o=a.length;o--;)if(e=a[o]==t){f=c[o];break}e||(f=u?sr(f)?f:[]:dr(f)?f:{},i&&(o=i(f,t),typeof o!="undefined"&&(f=o)),a.push(t),c.push(f),i||(f=S(f,t,ft,i,a,c)))}else i&&(o=i(f,t),typeof o=="undefined"&&(o=t)),typeof o!="undefined"&&(f=o);n[r]=f});return n}function E(n){for(var t=-1,r=vr(n),e=r.length,u=Array(e);++t<e;)u[t]=n[r[t]];return u}function k(n,t,r){var e=-1,u=n?n.length:0,o=X;return r=(0>r?qt(0,u+r):r)||0,typeof u=="number"?o=-1<(A(n)?n.indexOf(t,r):z(n,t,r)):cr(n,function(n){return++e<r?void 0:!(o=n===t)
|
|
||||||
}),o}function I(n,t,r){var e=Q;if(t=f(t,r),sr(n)){r=-1;for(var u=n.length;++r<u&&(e=!!t(n[r],r,n)););}else cr(n,function(n,r,u){return e=!!t(n,r,u)});return e}function N(n,t,r){var e=[];if(t=f(t,r),sr(n)){r=-1;for(var u=n.length;++r<u;){var o=n[r];t(o,r,n)&&e.push(o)}}else cr(n,function(n,r,u){t(n,r,u)&&e.push(n)});return e}function R(n,t,r){var e;return t=f(t,r),$(n,function(n,r,u){return t(n,r,u)?(e=n,X):void 0}),e}function $(n,t,r){if(t&&typeof r=="undefined"&&sr(n)){r=-1;for(var e=n.length;++r<e&&t(n[r],r,n)!==X;);}else cr(n,t,r);
|
|
||||||
return n}function F(n,t,r){var e=-1,u=n?n.length:0,o=Array(typeof u=="number"?u:0);if(t=f(t,r),sr(n))for(;++e<u;)o[e]=t(n[e],e,n);else cr(n,function(n,r,u){o[++e]=t(n,r,u)});return o}function q(n,t,r){var e=-1/0,o=e;if(!t&&sr(n)){r=-1;for(var i=n.length;++r<i;){var a=n[r];a>o&&(o=a)}}else t=!t&&A(n)?u:f(t,r),cr(n,function(n,r,u){r=t(n,r,u),r>e&&(e=r,o=n)});return o}function D(n,t,r,e){var u=3>arguments.length;if(t=f(t,e,4),sr(n)){var o=-1,i=n.length;for(u&&(r=n[++o]);++o<i;)r=t(r,n[o],o,n)}else cr(n,function(n,e,o){r=u?(u=X,n):t(r,n,e,o)
|
|
||||||
});return r}function T(n,t,r,e){var u=n,o=n?n.length:0,i=3>arguments.length;if(typeof o!="number")var a=vr(n),o=a.length;else Zt&&A(n)&&(u=n.split(""));return t=f(t,e,4),$(n,function(n,e,f){e=a?a[--o]:--o,r=i?(i=X,u[e]):t(r,u[e],e,f)}),r}function B(n,t,r){var e;if(t=f(t,r),sr(n)){r=-1;for(var u=n.length;++r<u&&!(e=t(n[r],r,n)););}else cr(n,function(n,r,u){return!(e=t(n,r,u))});return!!e}function M(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=W){var o=-1;for(t=f(t,r);++o<u&&t(n[o],o,n);)e++
|
|
||||||
}else if(e=t,e==W||r)return n[0];return v(n,0,Dt(qt(0,e),u))}}function P(n,t){for(var r=-1,e=n?n.length:0,u=[];++r<e;){var o=n[r];sr(o)?Et.apply(u,t?o:P(o)):u.push(o)}return u}function z(n,t,r){var e=-1,u=n?n.length:0;if(typeof r=="number")e=(0>r?qt(0,u+r):r||0)-1;else if(r)return e=K(n,t),n[e]===t?e:-1;for(;++e<u;)if(n[e]===t)return e;return-1}function C(n,t,r){if(typeof t!="number"&&t!=W){var e=0,u=-1,o=n?n.length:0;for(t=f(t,r);++u<o&&t(n[u],u,n);)e++}else e=t==W||r?1:qt(0,t);return v(n,e)}function K(n,t,r,e){var u=0,o=n?n.length:u;
|
|
||||||
for(r=r?f(r,e,1):G,t=r(t);u<o;)e=u+o>>>1,r(n[e])<t?u=e+1:o=e;return u}function L(n,t,r,e){var u=-1,o=n?n.length:0,i=[],a=i;typeof t=="function"&&(e=r,r=t,t=X);var c=!t&&75<=o;if(c)var l={};for(r&&(a=[],r=f(r,e));++u<o;){e=n[u];var p=r?r(e,u,n):e;if(c)var s=p+"",s=St.call(l,s)?!(a=l[s]):a=l[s]=[];(t?!u||a[a.length-1]!==p:s||0>z(a,p))&&((r||c)&&a.push(p),i.push(e))}return i}function U(n,t){return Ht||It&&2<arguments.length?It.call.apply(It,arguments):i(n,t,v(arguments,2))}function V(n){var r=v(arguments,1);
|
|
||||||
return setTimeout(function(){n.apply(t,r)},1)}function G(n){return n}function H(n){$(_(n),function(t){var e=r[t]=n[t];r.prototype[t]=function(){var n=[this.__wrapped__];return Et.apply(n,arguments),new r(e.apply(r,n))}})}function J(){return this.__wrapped__}var Q=!0,W=null,X=!1,Y=typeof exports=="object"&&exports,Z=typeof module=="object"&&module&&module.exports==Y&&module,nt=typeof global=="object"&&global;nt.global===nt&&(n=nt);var tt,rt,et,ut=[],ot={},it=0,ft=ot,at=30,ct=n._,lt=/&(?:amp|lt|gt|quot|#39);/g,pt=/\b__p\+='';/g,st=/\b(__p\+=)''\+/g,vt=/(__e\(.*?\)|\b__t\))\+'';/g,gt=/\w*$/,yt=RegExp("^"+(ot.valueOf+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),ht=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,mt=/<%=([\s\S]+?)%>/g,dt=/($^)/,_t=/[&<>"']/g,bt=/['\n\r\t\u2028\u2029\\]/g,jt="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),wt=Math.ceil,xt=ut.concat,Ot=Math.floor,At=yt.test(At=Object.getPrototypeOf)&&At,St=ot.hasOwnProperty,Et=ut.push,kt=ot.toString,It=yt.test(It=v.bind)&&It,Nt=yt.test(Nt=Array.isArray)&&Nt,Rt=n.isFinite,$t=n.isNaN,Ft=yt.test(Ft=Object.keys)&&Ft,qt=Math.max,Dt=Math.min,Tt=Math.random,Bt="[object Arguments]",Mt="[object Array]",Pt="[object Boolean]",zt="[object Date]",Ct="[object Number]",Kt="[object Object]",Lt="[object RegExp]",Ut="[object String]",Vt=!!n.attachEvent,Gt=It&&!/\n|true/.test(It+Vt),Ht=It&&!Gt,Jt=Ft&&(Vt||Gt),Qt=(Qt={0:1,length:1},ut.splice.call(Qt,0,1),Qt[0]),Wt=Q;
|
|
||||||
(function(){function n(){this.x=1}var t=[];n.prototype={valueOf:1,y:1};for(var r in new n)t.push(r);for(r in arguments)Wt=!r;tt=!/valueOf/.test(t),rt=n.propertyIsEnumerable("prototype"),et="x"!=t[0]})(1);var Xt=arguments.constructor==Object,Yt=!y(arguments),Zt="xx"!="x"[0]+Object("x")[0];try{var nr=kt.call(document)==Kt&&!({toString:0}+"")}catch(tr){}var rr={"[object Function]":X};rr[Bt]=rr[Mt]=rr[Pt]=rr[zt]=rr[Ct]=rr[Kt]=rr[Lt]=rr[Ut]=Q;var er={};er[Mt]=Array,er[Pt]=Boolean,er[zt]=Date,er[Kt]=Object,er[Ct]=Number,er[Lt]=RegExp,er[Ut]=String;
|
|
||||||
var ur={"boolean":X,"function":Q,object:Q,number:X,string:X,undefined:X},or={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"};r.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:mt,variable:"",imports:{_:r}};var ir={a:"q,w,h",l:"var a=arguments,b=0,c=typeof h=='number'?2:a.length;while(++b<c){n=a[b];if(n&&r[typeof n]){",h:"if(typeof u[j]=='undefined')u[j]=n[j]",c:"}}"},fr={a:"e,d,x",l:"d=d&&typeof x=='undefined'?d:f(d,x)",b:"typeof o=='number'",h:"if(d(n[j],j,e)===false)return u"},ar={l:"if(!r[typeof n])return u;"+fr.l,b:X},cr=a(fr);
|
|
||||||
Yt&&(y=function(n){return n?St.call(n,"callee"):X});var lr=a(fr,ar,{m:X}),pr=a(fr,ar),sr=Nt||function(n){return Xt&&n instanceof Array||kt.call(n)==Mt},vr=Ft?function(n){return x(n)?rt&&typeof n=="function"||Wt&&n.length&&y(n)?m(n):Ft(n):[]}:m,gr={"&":"&","<":"<",">":">",'"':""","'":"'"},yr=b(gr),hr=a(ir,{l:ir.l.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=f(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),h:"u[j]=d?d(u[j],n[j]):n[j]"}),mr=a(ir);
|
|
||||||
w(/x/)&&(w=function(n){return n instanceof Function||"[object Function]"==kt.call(n)});var dr=At?function(n){if(!n||typeof n!="object")return X;var t=n.valueOf,r=typeof t=="function"&&(r=At(t))&&At(r);return r?n==r||At(n)==r&&!y(n):h(n)}:h,_r=F,br=N;Gt&&Z&&typeof setImmediate=="function"&&(V=U(setImmediate,n)),r.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},r.assign=hr,r.at=function(n){var t=-1,r=xt.apply(ut,v(arguments,1)),e=r.length,u=Array(e);for(Zt&&A(n)&&(n=n.split(""));++t<e;)u[t]=n[r[t]];
|
|
||||||
return u},r.bind=U,r.bindAll=function(n){for(var t=xt.apply(ut,arguments),r=1<t.length?0:(t=_(n),-1),e=t.length;++r<e;){var u=t[r];n[u]=U(n[u],n)}return n},r.bindKey=function(n,t){return i(n,t,v(arguments,2))},r.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},r.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length;r--;)t=[n[r].apply(this,t)];return t[0]}},r.countBy=function(n,t,r){var e={};return t=f(t,r),$(n,function(n,r,u){r=t(n,r,u)+"",St.call(e,r)?e[r]++:e[r]=1
|
|
||||||
}),e},r.debounce=function(n,t,r){function e(){f=W,r||(o=n.apply(i,u))}var u,o,i,f;return function(){var a=r&&!f;return u=arguments,i=this,clearTimeout(f),f=setTimeout(e,t),a&&(o=n.apply(i,u)),o}},r.defaults=mr,r.defer=V,r.delay=function(n,r){var e=v(arguments,2);return setTimeout(function(){n.apply(t,e)},r)},r.difference=function(n){for(var t=-1,r=n?n.length:0,u=xt.apply(ut,arguments),u=e(u,r),o=[];++t<r;){var i=n[t];u(i)||o.push(i)}return o},r.filter=N,r.flatten=P,r.forEach=$,r.forIn=lr,r.forOwn=pr,r.functions=_,r.groupBy=function(n,t,r){var e={};
|
|
||||||
return t=f(t,r),$(n,function(n,r,u){r=t(n,r,u)+"",(St.call(e,r)?e[r]:e[r]=[]).push(n)}),e},r.initial=function(n,t,r){if(!n)return[];var e=0,u=n.length;if(typeof t!="number"&&t!=W){var o=u;for(t=f(t,r);o--&&t(n[o],o,n);)e++}else e=t==W||r?1:t||e;return v(n,0,Dt(qt(0,u-e),u))},r.intersection=function(n){var t=arguments,r=t.length,u={0:{}},o=-1,i=n?n.length:0,f=100<=i,a=[],c=a;n:for(;++o<i;){var l=n[o];if(f)var p=l+"",p=St.call(u[0],p)?!(c=u[0][p]):c=u[0][p]=[];if(p||0>z(c,l)){f&&c.push(l);for(var s=r;--s;)if(!(u[s]||(u[s]=e(t[s],0,100)))(l))continue n;
|
|
||||||
a.push(l)}}return a},r.invert=b,r.invoke=function(n,t){var r=v(arguments,2),e=-1,u=typeof t=="function",o=n?n.length:0,i=Array(typeof o=="number"?o:0);return $(n,function(n){i[++e]=(u?t:n[t]).apply(n,r)}),i},r.keys=vr,r.map=F,r.max=q,r.memoize=function(n,t){var r={};return function(){var e=(t?t.apply(this,arguments):arguments[0])+"";return St.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},r.merge=S,r.min=function(n,t,r){var e=1/0,o=e;if(!t&&sr(n)){r=-1;for(var i=n.length;++r<i;){var a=n[r];a<o&&(o=a)
|
|
||||||
}}else t=!t&&A(n)?u:f(t,r),cr(n,function(n,r,u){r=t(n,r,u),r<e&&(e=r,o=n)});return o},r.object=function(n,t){for(var r=-1,e=n?n.length:0,u={};++r<e;){var o=n[r];t?u[o]=t[r]:u[o[0]]=o[1]}return u},r.omit=function(n,t,r){var e=typeof t=="function",u={};if(e)t=f(t,r);else var o=xt.apply(ut,arguments);return lr(n,function(n,r,i){(e?!t(n,r,i):0>z(o,r,1))&&(u[r]=n)}),u},r.once=function(n){var t,r;return function(){return t?r:(t=Q,r=n.apply(this,arguments),n=W,r)}},r.pairs=function(n){for(var t=-1,r=vr(n),e=r.length,u=Array(e);++t<e;){var o=r[t];
|
|
||||||
u[t]=[o,n[o]]}return u},r.partial=function(n){return i(n,v(arguments,1))},r.partialRight=function(n){return i(n,v(arguments,1),W,ft)},r.pick=function(n,t,r){var e={};if(typeof t!="function")for(var u=0,o=xt.apply(ut,arguments),i=x(n)?o.length:0;++u<i;){var a=o[u];a in n&&(e[a]=n[a])}else t=f(t,r),lr(n,function(n,r,u){t(n,r,u)&&(e[r]=n)});return e},r.pluck=_r,r.range=function(n,t,r){n=+n||0,r=+r||1,t==W&&(t=n,n=0);var e=-1;t=qt(0,wt((t-n)/r));for(var u=Array(t);++e<t;)u[e]=n,n+=r;return u},r.reject=function(n,t,r){return t=f(t,r),N(n,function(n,r,e){return!t(n,r,e)
|
|
||||||
})},r.rest=C,r.shuffle=function(n){var t=-1,r=n?n.length:0,e=Array(typeof r=="number"?r:0);return $(n,function(n){var r=Ot(Tt()*(++t+1));e[t]=e[r],e[r]=n}),e},r.sortBy=function(n,t,r){var e=-1,u=n?n.length:0,i=Array(typeof u=="number"?u:0);for(t=f(t,r),$(n,function(n,r,u){i[++e]={a:t(n,r,u),b:e,c:n}}),u=i.length,i.sort(o);u--;)i[u]=i[u].c;return i},r.tap=function(n,t){return t(n),n},r.throttle=function(n,t){function r(){f=new Date,i=W,u=n.apply(o,e)}var e,u,o,i,f=0;return function(){var a=new Date,c=t-(a-f);
|
|
||||||
return e=arguments,o=this,0<c?i||(i=setTimeout(r,c)):(clearTimeout(i),i=W,f=a,u=n.apply(o,e)),u}},r.times=function(n,t,r){n=+n||0;for(var e=-1,u=Array(n);++e<n;)u[e]=t.call(r,e);return u},r.toArray=function(n){return n&&typeof n.length=="number"?Zt&&A(n)?n.split(""):v(n):E(n)},r.union=function(){return L(xt.apply(ut,arguments))},r.uniq=L,r.values=E,r.where=br,r.without=function(n){for(var t=-1,r=n?n.length:0,u=e(arguments,1),o=[];++t<r;){var i=n[t];u(i)||o.push(i)}return o},r.wrap=function(n,t){return function(){var r=[n];
|
|
||||||
return Et.apply(r,arguments),t.apply(this,r)}},r.zip=function(n){for(var t=-1,r=n?q(_r(arguments,"length")):0,e=Array(r);++t<r;)e[t]=_r(arguments,t);return e},r.collect=F,r.drop=C,r.each=$,r.extend=hr,r.methods=_,r.select=N,r.tail=C,r.unique=L,H(r),r.clone=d,r.cloneDeep=function(n,t,r){return d(n,Q,t,r)},r.contains=k,r.escape=function(n){return n==W?"":(n+"").replace(_t,l)},r.every=I,r.find=R,r.has=function(n,t){return n?St.call(n,t):X},r.identity=G,r.indexOf=z,r.isArguments=y,r.isArray=sr,r.isBoolean=function(n){return n===Q||n===X||kt.call(n)==Pt
|
|
||||||
},r.isDate=function(n){return n instanceof Date||kt.call(n)==zt},r.isElement=function(n){return n?1===n.nodeType:X},r.isEmpty=function(n){var t=Q;if(!n)return t;var r=kt.call(n),e=n.length;return r==Mt||r==Ut||r==Bt||Yt&&y(n)||r==Kt&&typeof e=="number"&&w(n.splice)?!e:(pr(n,function(){return t=X}),t)},r.isEqual=j,r.isFinite=function(n){return Rt(n)&&!$t(parseFloat(n))},r.isFunction=w,r.isNaN=function(n){return O(n)&&n!=+n},r.isNull=function(n){return n===W},r.isNumber=O,r.isObject=x,r.isPlainObject=dr,r.isRegExp=function(n){return n instanceof RegExp||kt.call(n)==Lt
|
|
||||||
},r.isString=A,r.isUndefined=function(n){return typeof n=="undefined"},r.lastIndexOf=function(n,t,r){var e=n?n.length:0;for(typeof r=="number"&&(e=(0>r?qt(0,e+r):Dt(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},r.mixin=H,r.noConflict=function(){return n._=ct,this},r.random=function(n,t){return n==W&&t==W&&(t=1),n=+n||0,t==W&&(t=n,n=0),n+Ot(Tt()*((+t||0)-n+1))},r.reduce=D,r.reduceRight=T,r.result=function(n,r){var e=n?n[r]:t;return w(e)?n[r]():e},r.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:vr(n).length
|
|
||||||
},r.some=B,r.sortedIndex=K,r.template=function(n,e,u){var o=r.templateSettings;n||(n=""),u=mr({},u,o);var i,f=mr({},u.imports,o.imports),o=vr(f),f=E(f),a=0,l=u.interpolate||dt,p="__p+='";n.replace(RegExp((u.escape||dt).source+"|"+l.source+"|"+(l===mt?ht:dt).source+"|"+(u.evaluate||dt).source+"|$","g"),function(t,r,e,u,o,f){return e||(e=u),p+=n.slice(a,f).replace(bt,c),r&&(p+="'+__e("+r+")+'"),o&&(i=Q,p+="';"+o+";__p+='"),e&&(p+="'+((__t=("+e+"))==null?'':__t)+'"),a=f+t.length,t}),p+="';\n",l=u=u.variable,l||(u="obj",p="with("+u+"){"+p+"}"),p=(i?p.replace(pt,""):p).replace(st,"$1").replace(vt,"$1;"),p="function("+u+"){"+(l?"":u+"||("+u+"={});")+"var __t,__p='',__e=_.escape"+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+p+"return __p}";
|
|
||||||
try{var s=Function(o,"return "+p).apply(t,f)}catch(v){throw v.source=p,v}return e?s(e):(s.source=p,s)},r.unescape=function(n){return n==W?"":(n+"").replace(lt,g)},r.uniqueId=function(n){var t=++it;return(n==W?"":n+"")+t},r.all=I,r.any=B,r.detect=R,r.foldl=D,r.foldr=T,r.include=k,r.inject=D,pr(r,function(n,t){r.prototype[t]||(r.prototype[t]=function(){var t=[this.__wrapped__];return Et.apply(t,arguments),n.apply(r,t)})}),r.first=M,r.last=function(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=W){var o=u;
|
|
||||||
for(t=f(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,e==W||r)return n[u-1];return v(n,qt(0,u-e))}},r.take=M,r.head=M,pr(r,function(n,t){r.prototype[t]||(r.prototype[t]=function(t,e){var u=n(this.__wrapped__,t,e);return t==W||e&&typeof t!="function"?u:new r(u)})}),r.VERSION="1.0.1",r.prototype.toString=function(){return this.__wrapped__+""},r.prototype.value=J,r.prototype.valueOf=J,cr(["join","pop","shift"],function(n){var t=ut[n];r.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),cr(["push","reverse","sort","unshift"],function(n){var t=ut[n];
|
|
||||||
r.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),cr(["concat","slice","splice"],function(n){var t=ut[n];r.prototype[n]=function(){return new r(t.apply(this.__wrapped__,arguments))}}),Qt&&cr(["pop","shift","splice"],function(n){var t=ut[n],e="splice"==n;r.prototype[n]=function(){var n=this.__wrapped__,u=t.apply(n,arguments);return 0===n.length&&delete n[0],e?new r(u):u}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=r,define(function(){return r
|
|
||||||
})):Y?Z?(Z.exports=r)._=r:Y._=r:n._=r})(this);
|
|
||||||
3823
dist/lodash.core.js
vendored
Normal file
3823
dist/lodash.core.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
29
dist/lodash.core.min.js
vendored
Normal file
29
dist/lodash.core.min.js
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* @license
|
||||||
|
* lodash 4.5.1 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
|
||||||
|
* Build: `lodash core -o ./dist/lodash.core.js`
|
||||||
|
*/
|
||||||
|
;(function(){function n(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function t(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(c===an?i===i:r(i,c)))var c=i,f=o}return f}function r(n,t,r){var e;return r(n,function(n,r,u){return t(n,r,u)?(e=n,false):void 0}),e}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return O(t,function(t){return n[t]})}function o(n){return n&&n.Object===Object?n:null}function i(n){return vn[n];
|
||||||
|
}function c(n){var t=false;if(null!=n&&typeof n.toString!="function")try{t=!!(n+"")}catch(r){}return t}function f(n,t){return n=typeof n=="number"||hn.test(n)?+n:-1,n>-1&&0==n%1&&(null==t?9007199254740991:t)>n}function a(n){if(Y(n)&&!Pn(n)){if(n instanceof l)return n;if(En.call(n,"__wrapped__")){var t=new l(n.__wrapped__,n.__chain__);return t.__actions__=N(n.__actions__),t}}return new l(n)}function l(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function p(n,t,r,e){var u;return(u=n===an)||(u=xn[r],
|
||||||
|
u=(n===u||n!==n&&u!==u)&&!En.call(e,r)),u?t:n}function s(n){return X(n)?Fn(n):{}}function h(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function");return setTimeout(function(){n.apply(an,r)},t)}function v(n,t){var r=true;return $n(n,function(n,e,u){return r=!!t(n,e,u)}),r}function y(n,t){var r=[];return $n(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function _(t,r,e,u){u||(u=[]);for(var o=-1,i=t.length;++o<i;){var c=t[o];r>0&&Y(c)&&L(c)&&(e||Pn(c)||K(c))?r>1?_(c,r-1,e,u):n(u,c):e||(u[u.length]=c);
|
||||||
|
}return u}function g(n,t){return n&&qn(n,t,en)}function b(n,t){return y(t,function(t){return Q(n[t])})}function j(n,t,r,e,u){return n===t?true:null==n||null==t||!X(n)&&!Y(t)?n!==n&&t!==t:m(n,t,j,r,e,u)}function m(n,t,r,e,u,o){var i=Pn(n),f=Pn(t),a="[object Array]",l="[object Array]";i||(a=kn.call(n),"[object Arguments]"==a&&(a="[object Object]")),f||(l=kn.call(t),"[object Arguments]"==l&&(l="[object Object]"));var p="[object Object]"==a&&!c(n),f="[object Object]"==l&&!c(t);return!(l=a==l)||i||p?2&u||(a=p&&En.call(n,"__wrapped__"),
|
||||||
|
f=f&&En.call(t,"__wrapped__"),!a&&!f)?l?(o||(o=[]),(a=J(o,function(t){return t[0]===n}))&&a[1]?a[1]==t:(o.push([n,t]),t=(i?I:q)(n,t,r,e,u,o),o.pop(),t)):false:r(a?n.value():n,f?t.value():t,e,u,o):$(n,t,a)}function d(n){var t=typeof n;return"function"==t?n:null==n?cn:("object"==t?x:A)(n)}function w(n){n=null==n?n:Object(n);var t,r=[];for(t in n)r.push(t);return r}function O(n,t){var r=-1,e=L(n)?Array(n.length):[];return $n(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function x(n){var t=en(n);return function(r){
|
||||||
|
var e=t.length;if(null==r)return!e;for(r=Object(r);e--;){var u=t[e];if(!(u in r&&j(n[u],r[u],an,3)))return false}return true}}function E(n,t){return n=Object(n),P(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function A(n){return function(t){return null==t?an:t[n]}}function k(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e<u;)r[e]=n[e+t];return r}function N(n){return k(n,0,n.length)}function S(n,t){var r;return $n(n,function(n,e,u){return r=t(n,e,u),
|
||||||
|
!r}),!!r}function T(t,r){return P(r,function(t,r){return r.func.apply(r.thisArg,n([t],r.args))},t)}function F(n,t,r,e){r||(r={});for(var u=-1,o=t.length;++u<o;){var i=t[u],c=e?e(r[i],n[i],i,r,n):n[i],f=r,a=f[i];En.call(f,i)&&(a===c||a!==a&&c!==c)&&(c!==an||i in f)||(f[i]=c)}return r}function R(n){return V(function(t,r){var e=-1,u=r.length,o=u>1?r[u-1]:an,o=typeof o=="function"?(u--,o):an;for(t=Object(t);++e<u;){var i=r[e];i&&n(t,i,e,o)}return t})}function B(n){return function(){var t=arguments,r=s(n.prototype),t=n.apply(r,t);
|
||||||
|
return X(t)?t:r}}function D(n,t,r){function e(){for(var o=-1,i=arguments.length,c=-1,f=r.length,a=Array(f+i),l=this&&this!==wn&&this instanceof e?u:n;++c<f;)a[c]=r[c];for(;i--;)a[c++]=arguments[++o];return l.apply(t,a)}if(typeof n!="function")throw new TypeError("Expected a function");var u=B(n);return e}function I(n,t,r,e,u,o){var i=-1,c=1&u,f=n.length,a=t.length;if(f!=a&&!(2&u&&a>f))return false;for(a=true;++i<f;){var l=n[i],p=t[i];if(void 0!==an){a=false;break}if(c){if(!S(t,function(n){return l===n||r(l,n,e,u,o);
|
||||||
|
})){a=false;break}}else if(l!==p&&!r(l,p,e,u,o)){a=false;break}}return a}function $(n,t,r){switch(r){case"[object Boolean]":case"[object Date]":return+n==+t;case"[object Error]":return n.name==t.name&&n.message==t.message;case"[object Number]":return n!=+n?t!=+t:n==+t;case"[object RegExp]":case"[object String]":return n==t+""}return false}function q(n,t,r,e,u,o){var i=2&u,c=en(n),f=c.length,a=en(t).length;if(f!=a&&!i)return false;for(var l=f;l--;){var p=c[l];if(!(i?p in t:En.call(t,p)))return false}for(a=true;++l<f;){
|
||||||
|
var p=c[l],s=n[p],h=t[p];if(void 0!==an||s!==h&&!r(s,h,e,u,o)){a=false;break}i||(i="constructor"==p)}return a&&!i&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(a=false)),a}function z(n){var t=n?n.length:an;if(W(t)&&(Pn(n)||nn(n)||K(n))){n=String;for(var r=-1,e=Array(t);++r<t;)e[r]=n(r);t=e}else t=null;return t}function C(n){var t=n&&n.constructor,t=Q(t)&&t.prototype||xn;return n===t}function G(n){
|
||||||
|
return n?n[0]:an}function J(n,t){return r(n,d(t),$n)}function M(n,t){return $n(n,typeof t=="function"?t:cn)}function P(n,t,r){return e(n,d(t),r,3>arguments.length,$n)}function U(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Un(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=an),r}}function V(n){var t;if(typeof n!="function")throw new TypeError("Expected a function");return t=In(t===an?n.length-1:Un(t),0),function(){for(var r=arguments,e=-1,u=In(r.length-t,0),o=Array(u);++e<u;)o[e]=r[t+e];
|
||||||
|
for(u=Array(t+1),e=-1;++e<t;)u[e]=r[e];return u[t]=o,n.apply(this,u)}}function H(n,t){return n>t}function K(n){return Y(n)&&L(n)&&En.call(n,"callee")&&(!Rn.call(n,"callee")||"[object Arguments]"==kn.call(n))}function L(n){return null!=n&&!(typeof n=="function"&&Q(n))&&W(zn(n))}function Q(n){return n=X(n)?kn.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n}function W(n){return typeof n=="number"&&n>-1&&0==n%1&&9007199254740991>=n}function X(n){var t=typeof n;return!!n&&("object"==t||"function"==t);
|
||||||
|
}function Y(n){return!!n&&typeof n=="object"}function Z(n){return typeof n=="number"||Y(n)&&"[object Number]"==kn.call(n)}function nn(n){return typeof n=="string"||!Pn(n)&&Y(n)&&"[object String]"==kn.call(n)}function tn(n,t){return t>n}function rn(n){return typeof n=="string"?n:null==n?"":n+""}function en(n){var t=C(n);if(!t&&!L(n))return Dn(Object(n));var r,e=z(n),u=!!e,e=e||[],o=e.length;for(r in n)!En.call(n,r)||u&&("length"==r||f(r,o))||t&&"constructor"==r||e.push(r);return e}function un(n){for(var t=-1,r=C(n),e=w(n),u=e.length,o=z(n),i=!!o,o=o||[],c=o.length;++t<u;){
|
||||||
|
var a=e[t];i&&("length"==a||f(a,c))||"constructor"==a&&(r||!En.call(n,a))||o.push(a)}return o}function on(n){return n?u(n,en(n)):[]}function cn(n){return n}function fn(t,r,e){var u=en(r),o=b(r,u);null!=e||X(r)&&(o.length||!u.length)||(e=r,r=t,t=this,o=b(r,en(r)));var i=X(e)&&"chain"in e?e.chain:true,c=Q(t);return $n(o,function(e){var u=r[e];t[e]=u,c&&(t.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=t(this.__wrapped__);return(e.__actions__=N(this.__actions__)).push({func:u,args:arguments,
|
||||||
|
thisArg:t}),e.__chain__=r,e}return u.apply(t,n([this.value()],arguments))})}),t}var an,ln=1/0,pn=/[&<>"'`]/g,sn=RegExp(pn.source),hn=/^(?:0|[1-9]\d*)$/,vn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},yn={"function":true,object:true},_n=yn[typeof exports]&&exports&&!exports.nodeType?exports:an,gn=yn[typeof module]&&module&&!module.nodeType?module:an,bn=gn&&gn.exports===_n?_n:an,jn=o(yn[typeof self]&&self),mn=o(yn[typeof window]&&window),dn=o(yn[typeof this]&&this),wn=o(_n&&gn&&typeof global=="object"&&global)||mn!==(dn&&dn.window)&&mn||jn||dn||Function("return this")(),On=Array.prototype,xn=Object.prototype,En=xn.hasOwnProperty,An=0,kn=xn.toString,Nn=wn._,Sn=wn.Reflect,Tn=Sn?Sn.f:an,Fn=Object.create,Rn=xn.propertyIsEnumerable,Bn=wn.isFinite,Dn=Object.keys,In=Math.max,$n=function(n,t){
|
||||||
|
return function(r,e){if(null==r)return r;if(!L(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}(g),qn=function(n){return function(t,r,e){var u=-1,o=Object(t);e=e(t);for(var i=e.length;i--;){var c=e[n?i:++u];if(false===r(o[c],c,o))break}return t}}();Tn&&!Rn.call({valueOf:1},"valueOf")&&(w=function(n){n=Tn(n);for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r});var zn=A("length"),Cn=V(function(t,r){return Pn(t)||(t=null==t?[]:[Object(t)]),_(r,1),
|
||||||
|
n(N(t),on)}),Gn=V(function(n,t,r){return D(n,t,r)}),Jn=V(function(n,t){return h(n,1,t)}),Mn=V(function(n,t,r){return h(n,Vn(t)||0,r)}),Pn=Array.isArray,Un=Number,Vn=Number,Hn=R(function(n,t){F(t,en(t),n)}),Kn=R(function(n,t){F(t,un(t),n)}),Ln=R(function(n,t,r,e){F(t,un(t),n,e)}),Qn=V(function(n){return n.push(an,p),Ln.apply(an,n)}),Wn=V(function(n,t){return null==n?{}:E(n,_(t,1))}),Xn=d;l.prototype=s(a.prototype),l.prototype.constructor=l,a.assignIn=Kn,a.before=U,a.bind=Gn,a.chain=function(n){return n=a(n),
|
||||||
|
n.__chain__=true,n},a.compact=function(n){return y(n,Boolean)},a.concat=Cn,a.create=function(n,t){var r=s(n);return t?Hn(r,t):r},a.defaults=Qn,a.defer=Jn,a.delay=Mn,a.filter=function(n,t){return y(n,d(t))},a.flatten=function(n){return n&&n.length?_(n,1):[]},a.flattenDeep=function(n){return n&&n.length?_(n,ln):[]},a.iteratee=Xn,a.keys=en,a.map=function(n,t){return O(n,d(t))},a.matches=function(n){return x(Hn({},n))},a.mixin=fn,a.negate=function(n){if(typeof n!="function")throw new TypeError("Expected a function");
|
||||||
|
return function(){return!n.apply(this,arguments)}},a.once=function(n){return U(2,n)},a.pick=Wn,a.slice=function(n,t,r){var e=n?n.length:0;return r=r===an?e:+r,e?k(n,null==t?0:+t,r):[]},a.sortBy=function(n,t){var r=0;return t=d(t),O(O(n,function(n,e,u){return{c:n,b:r++,a:t(n,e,u)}}).sort(function(n,t){var r;n:{r=n.a;var e=t.a;if(r!==e){var u=null===r,o=r===an,i=r===r,c=null===e,f=e===an,a=e===e;if(r>e&&!c||!i||u&&!f&&a||o&&a){r=1;break n}if(e>r&&!u||!a||c&&!o&&i||f&&i){r=-1;break n}}r=0}return r||n.b-t.b;
|
||||||
|
}),A("c"))},a.tap=function(n,t){return t(n),n},a.thru=function(n,t){return t(n)},a.toArray=function(n){return L(n)?n.length?N(n):[]:on(n)},a.values=on,a.extend=Kn,fn(a,a),a.clone=function(n){return X(n)?Pn(n)?N(n):F(n,en(n)):n},a.escape=function(n){return(n=rn(n))&&sn.test(n)?n.replace(pn,i):n},a.every=function(n,t,r){return t=r?an:t,v(n,d(t))},a.find=J,a.forEach=M,a.has=function(n,t){return null!=n&&En.call(n,t)},a.head=G,a.identity=cn,a.indexOf=function(n,t,r){var e=n?n.length:0;r=typeof r=="number"?0>r?In(e+r,0):r:0,
|
||||||
|
r=(r||0)-1;for(var u=t===t;++r<e;){var o=n[r];if(u?o===t:o!==o)return r}return-1},a.isArguments=K,a.isArray=Pn,a.isBoolean=function(n){return true===n||false===n||Y(n)&&"[object Boolean]"==kn.call(n)},a.isDate=function(n){return Y(n)&&"[object Date]"==kn.call(n)},a.isEmpty=function(n){if(L(n)&&(Pn(n)||nn(n)||Q(n.splice)||K(n)))return!n.length;for(var t in n)if(En.call(n,t))return false;return true},a.isEqual=function(n,t){return j(n,t)},a.isFinite=function(n){return typeof n=="number"&&Bn(n)},a.isFunction=Q,a.isNaN=function(n){
|
||||||
|
return Z(n)&&n!=+n},a.isNull=function(n){return null===n},a.isNumber=Z,a.isObject=X,a.isRegExp=function(n){return X(n)&&"[object RegExp]"==kn.call(n)},a.isString=nn,a.isUndefined=function(n){return n===an},a.last=function(n){var t=n?n.length:0;return t?n[t-1]:an},a.max=function(n){return n&&n.length?t(n,cn,H):an},a.min=function(n){return n&&n.length?t(n,cn,tn):an},a.noConflict=function(){return wn._===this&&(wn._=Nn),this},a.noop=function(){},a.reduce=P,a.result=function(n,t,r){return t=null==n?an:n[t],
|
||||||
|
t===an&&(t=r),Q(t)?t.call(n):t},a.size=function(n){return null==n?0:(n=L(n)?n:en(n),n.length)},a.some=function(n,t,r){return t=r?an:t,S(n,d(t))},a.uniqueId=function(n){var t=++An;return rn(n)+t},a.each=M,a.first=G,fn(a,function(){var n={};return g(a,function(t,r){En.call(a.prototype,r)||(n[r]=t)}),n}(),{chain:false}),a.VERSION="4.5.1",$n("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?String.prototype:On)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);
|
||||||
|
a.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),a.prototype.toJSON=a.prototype.valueOf=a.prototype.value=function(){return T(this.__wrapped__,this.__actions__)},(mn||jn||{})._=a,typeof define=="function"&&typeof define.amd=="object"&&define.amd? define(function(){return a}):_n&&gn?(bn&&((gn.exports=a)._=a),_n._=a):wn._=a}).call(this);
|
||||||
647
dist/lodash.fp.js
vendored
Normal file
647
dist/lodash.fp.js
vendored
Normal file
@@ -0,0 +1,647 @@
|
|||||||
|
(function webpackUniversalModuleDefinition(root, factory) {
|
||||||
|
if(typeof exports === 'object' && typeof module === 'object')
|
||||||
|
module.exports = factory();
|
||||||
|
else if(typeof define === 'function' && define.amd)
|
||||||
|
define([], factory);
|
||||||
|
else if(typeof exports === 'object')
|
||||||
|
exports["fp"] = factory();
|
||||||
|
else
|
||||||
|
root["fp"] = factory();
|
||||||
|
})(this, function() {
|
||||||
|
return /******/ (function(modules) { // webpackBootstrap
|
||||||
|
/******/ // The module cache
|
||||||
|
/******/ var installedModules = {};
|
||||||
|
|
||||||
|
/******/ // The require function
|
||||||
|
/******/ function __webpack_require__(moduleId) {
|
||||||
|
|
||||||
|
/******/ // Check if module is in cache
|
||||||
|
/******/ if(installedModules[moduleId])
|
||||||
|
/******/ return installedModules[moduleId].exports;
|
||||||
|
|
||||||
|
/******/ // Create a new module (and put it into the cache)
|
||||||
|
/******/ var module = installedModules[moduleId] = {
|
||||||
|
/******/ exports: {},
|
||||||
|
/******/ id: moduleId,
|
||||||
|
/******/ loaded: false
|
||||||
|
/******/ };
|
||||||
|
|
||||||
|
/******/ // Execute the module function
|
||||||
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||||||
|
|
||||||
|
/******/ // Flag the module as loaded
|
||||||
|
/******/ module.loaded = true;
|
||||||
|
|
||||||
|
/******/ // Return the exports of the module
|
||||||
|
/******/ return module.exports;
|
||||||
|
/******/ }
|
||||||
|
|
||||||
|
|
||||||
|
/******/ // expose the modules object (__webpack_modules__)
|
||||||
|
/******/ __webpack_require__.m = modules;
|
||||||
|
|
||||||
|
/******/ // expose the module cache
|
||||||
|
/******/ __webpack_require__.c = installedModules;
|
||||||
|
|
||||||
|
/******/ // __webpack_public_path__
|
||||||
|
/******/ __webpack_require__.p = "";
|
||||||
|
|
||||||
|
/******/ // Load entry module and return exports
|
||||||
|
/******/ return __webpack_require__(0);
|
||||||
|
/******/ })
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ ([
|
||||||
|
/* 0 */
|
||||||
|
/***/ function(module, exports, __webpack_require__) {
|
||||||
|
|
||||||
|
var baseConvert = __webpack_require__(1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts `lodash` to an immutable auto-curried iteratee-first data-last version.
|
||||||
|
*
|
||||||
|
* @param {Function} lodash The lodash function.
|
||||||
|
* @param {Object} [options] The options object. See `baseConvert` for more details.
|
||||||
|
* @returns {Function} Returns the converted `lodash`.
|
||||||
|
*/
|
||||||
|
function browserConvert(lodash, options) {
|
||||||
|
return baseConvert(lodash, lodash, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof _ == 'function') {
|
||||||
|
_ = browserConvert(_.runInContext());
|
||||||
|
}
|
||||||
|
module.exports = browserConvert;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ },
|
||||||
|
/* 1 */
|
||||||
|
/***/ function(module, exports, __webpack_require__) {
|
||||||
|
|
||||||
|
var mapping = __webpack_require__(2),
|
||||||
|
mutateMap = mapping.mutate,
|
||||||
|
placeholder = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The base implementation of `convert` which accepts a `util` object of methods
|
||||||
|
* required to perform conversions.
|
||||||
|
*
|
||||||
|
* @param {Object} util The util object.
|
||||||
|
* @param {string} name The name of the function to wrap.
|
||||||
|
* @param {Function} func The function to wrap.
|
||||||
|
* @param {Object} [options] The options object.
|
||||||
|
* @param {boolean} [options.cap=true] Specify capping iteratee arguments.
|
||||||
|
* @param {boolean} [options.curry=true] Specify currying.
|
||||||
|
* @param {boolean} [options.fixed=true] Specify fixed arity.
|
||||||
|
* @param {boolean} [options.immutable=true] Specify immutable operations.
|
||||||
|
* @param {boolean} [options.rearg=true] Specify rearranging arguments.
|
||||||
|
* @returns {Function|Object} Returns the converted function or object.
|
||||||
|
*/
|
||||||
|
function baseConvert(util, name, func, options) {
|
||||||
|
var setPlaceholder,
|
||||||
|
isLib = typeof name == 'function',
|
||||||
|
isObj = name === Object(name);
|
||||||
|
|
||||||
|
if (isObj) {
|
||||||
|
options = func;
|
||||||
|
func = name;
|
||||||
|
name = undefined;
|
||||||
|
}
|
||||||
|
if (func == null) {
|
||||||
|
throw new TypeError;
|
||||||
|
}
|
||||||
|
options || (options = {});
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
'cap': 'cap' in options ? options.cap : true,
|
||||||
|
'curry': 'curry' in options ? options.curry : true,
|
||||||
|
'fixed': 'fixed' in options ? options.fixed : true,
|
||||||
|
'immutable': 'immutable' in options ? options.immutable : true,
|
||||||
|
'rearg': 'rearg' in options ? options.rearg : true
|
||||||
|
};
|
||||||
|
|
||||||
|
var forceRearg = ('rearg' in options) && options.rearg;
|
||||||
|
|
||||||
|
var helpers = isLib ? func : {
|
||||||
|
'ary': util.ary,
|
||||||
|
'clone': util.clone,
|
||||||
|
'curry': util.curry,
|
||||||
|
'forEach': util.forEach,
|
||||||
|
'isArray': util.isArray,
|
||||||
|
'isFunction': util.isFunction,
|
||||||
|
'iteratee': util.iteratee,
|
||||||
|
'keys': util.keys,
|
||||||
|
'rearg': util.rearg,
|
||||||
|
'spread': util.spread,
|
||||||
|
'toPath': util.toPath
|
||||||
|
};
|
||||||
|
|
||||||
|
var ary = helpers.ary,
|
||||||
|
clone = helpers.clone,
|
||||||
|
curry = helpers.curry,
|
||||||
|
each = helpers.forEach,
|
||||||
|
isArray = helpers.isArray,
|
||||||
|
isFunction = helpers.isFunction,
|
||||||
|
keys = helpers.keys,
|
||||||
|
rearg = helpers.rearg,
|
||||||
|
spread = helpers.spread,
|
||||||
|
toPath = helpers.toPath;
|
||||||
|
|
||||||
|
var aryMethodKeys = keys(mapping.aryMethod);
|
||||||
|
|
||||||
|
var baseArity = function(func, n) {
|
||||||
|
return n == 2
|
||||||
|
? function(a, b) { return func.apply(undefined, arguments); }
|
||||||
|
: function(a) { return func.apply(undefined, arguments); };
|
||||||
|
};
|
||||||
|
|
||||||
|
var baseAry = function(func, n) {
|
||||||
|
return n == 2
|
||||||
|
? function(a, b) { return func(a, b); }
|
||||||
|
: function(a) { return func(a); };
|
||||||
|
};
|
||||||
|
|
||||||
|
var cloneArray = function(array) {
|
||||||
|
var length = array ? array.length : 0,
|
||||||
|
result = Array(length);
|
||||||
|
|
||||||
|
while (length--) {
|
||||||
|
result[length] = array[length];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
var cloneByPath = function(object, path) {
|
||||||
|
path = toPath(path);
|
||||||
|
|
||||||
|
var index = -1,
|
||||||
|
length = path.length,
|
||||||
|
result = clone(Object(object)),
|
||||||
|
nested = result;
|
||||||
|
|
||||||
|
while (nested != null && ++index < length) {
|
||||||
|
var key = path[index],
|
||||||
|
value = nested[key];
|
||||||
|
|
||||||
|
if (value != null) {
|
||||||
|
nested[key] = clone(Object(value));
|
||||||
|
}
|
||||||
|
nested = nested[key];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
var createCloner = function(func) {
|
||||||
|
return function(object) {
|
||||||
|
return func({}, object);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var immutWrap = function(func, cloner) {
|
||||||
|
return function() {
|
||||||
|
var length = arguments.length;
|
||||||
|
if (!length) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
var args = Array(length);
|
||||||
|
while (length--) {
|
||||||
|
args[length] = arguments[length];
|
||||||
|
}
|
||||||
|
var result = args[0] = cloner.apply(undefined, args);
|
||||||
|
func.apply(undefined, args);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var iterateeAry = function(func, n) {
|
||||||
|
return overArg(func, function(func) {
|
||||||
|
return typeof func == 'function' ? baseAry(func, n) : func;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var iterateeRearg = function(func, indexes) {
|
||||||
|
return overArg(func, function(func) {
|
||||||
|
var n = indexes.length;
|
||||||
|
return baseArity(rearg(baseAry(func, n), indexes), n);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var overArg = function(func, iteratee, retArg) {
|
||||||
|
return function() {
|
||||||
|
var length = arguments.length;
|
||||||
|
if (!length) {
|
||||||
|
return func();
|
||||||
|
}
|
||||||
|
var args = Array(length);
|
||||||
|
while (length--) {
|
||||||
|
args[length] = arguments[length];
|
||||||
|
}
|
||||||
|
var index = config.rearg ? 0 : (length - 1);
|
||||||
|
args[index] = iteratee(args[index]);
|
||||||
|
return func.apply(undefined, args);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var wrappers = {
|
||||||
|
'castArray': function(castArray) {
|
||||||
|
return function() {
|
||||||
|
var value = arguments[0];
|
||||||
|
return isArray(value)
|
||||||
|
? castArray(cloneArray(value))
|
||||||
|
: castArray.apply(undefined, arguments);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
'iteratee': function(iteratee) {
|
||||||
|
return function() {
|
||||||
|
var func = arguments[0],
|
||||||
|
arity = arguments[1],
|
||||||
|
result = iteratee(func, arity),
|
||||||
|
length = result.length;
|
||||||
|
|
||||||
|
if (config.cap && typeof arity == 'number') {
|
||||||
|
arity = arity > 2 ? (arity - 2) : 1;
|
||||||
|
return (length && length <= arity) ? result : baseAry(result, arity);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
},
|
||||||
|
'mixin': function(mixin) {
|
||||||
|
return function(source) {
|
||||||
|
var func = this;
|
||||||
|
if (!isFunction(func)) {
|
||||||
|
return mixin(func, Object(source));
|
||||||
|
}
|
||||||
|
var methods = [],
|
||||||
|
methodNames = [];
|
||||||
|
|
||||||
|
each(keys(source), function(key) {
|
||||||
|
var value = source[key];
|
||||||
|
if (isFunction(value)) {
|
||||||
|
methodNames.push(key);
|
||||||
|
methods.push(func.prototype[key]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mixin(func, Object(source));
|
||||||
|
|
||||||
|
each(methodNames, function(methodName, index) {
|
||||||
|
var method = methods[index];
|
||||||
|
if (isFunction(method)) {
|
||||||
|
func.prototype[methodName] = method;
|
||||||
|
} else {
|
||||||
|
delete func.prototype[methodName];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return func;
|
||||||
|
};
|
||||||
|
},
|
||||||
|
'runInContext': function(runInContext) {
|
||||||
|
return function(context) {
|
||||||
|
return baseConvert(util, runInContext(context), options);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var wrap = function(name, func) {
|
||||||
|
name = mapping.aliasToReal[name] || name;
|
||||||
|
var wrapper = wrappers[name];
|
||||||
|
if (wrapper) {
|
||||||
|
return wrapper(func);
|
||||||
|
}
|
||||||
|
var wrapped = func;
|
||||||
|
if (config.immutable) {
|
||||||
|
if (mutateMap.array[name]) {
|
||||||
|
wrapped = immutWrap(func, cloneArray);
|
||||||
|
}
|
||||||
|
else if (mutateMap.object[name]) {
|
||||||
|
wrapped = immutWrap(func, createCloner(func));
|
||||||
|
}
|
||||||
|
else if (mutateMap.set[name]) {
|
||||||
|
wrapped = immutWrap(func, cloneByPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var result;
|
||||||
|
each(aryMethodKeys, function(aryKey) {
|
||||||
|
each(mapping.aryMethod[aryKey], function(otherName) {
|
||||||
|
if (name == otherName) {
|
||||||
|
var aryN = !isLib && mapping.iterateeAry[name],
|
||||||
|
reargIndexes = mapping.iterateeRearg[name],
|
||||||
|
spreadStart = mapping.methodSpread[name];
|
||||||
|
|
||||||
|
result = wrapped;
|
||||||
|
if (config.fixed) {
|
||||||
|
result = spreadStart === undefined
|
||||||
|
? ary(result, aryKey)
|
||||||
|
: spread(result, spreadStart);
|
||||||
|
}
|
||||||
|
if (config.rearg && aryKey > 1 && (forceRearg || !mapping.skipRearg[name])) {
|
||||||
|
result = rearg(result, mapping.methodRearg[name] || mapping.aryRearg[aryKey]);
|
||||||
|
}
|
||||||
|
if (config.cap) {
|
||||||
|
if (reargIndexes) {
|
||||||
|
result = iterateeRearg(result, reargIndexes);
|
||||||
|
} else if (aryN) {
|
||||||
|
result = iterateeAry(result, aryN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (config.curry && aryKey > 1) {
|
||||||
|
result = curry(result, aryKey);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return !result;
|
||||||
|
});
|
||||||
|
|
||||||
|
result || (result = wrapped);
|
||||||
|
if (mapping.placeholder[name]) {
|
||||||
|
setPlaceholder = true;
|
||||||
|
func.placeholder = result.placeholder = placeholder;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!isObj) {
|
||||||
|
return wrap(name, func);
|
||||||
|
}
|
||||||
|
var _ = func;
|
||||||
|
|
||||||
|
// Iterate over methods for the current ary cap.
|
||||||
|
var pairs = [];
|
||||||
|
each(aryMethodKeys, function(aryKey) {
|
||||||
|
each(mapping.aryMethod[aryKey], function(key) {
|
||||||
|
var func = _[mapping.remap[key] || key];
|
||||||
|
if (func) {
|
||||||
|
pairs.push([key, wrap(key, func)]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Assign to `_` leaving `_.prototype` unchanged to allow chaining.
|
||||||
|
each(pairs, function(pair) {
|
||||||
|
_[pair[0]] = pair[1];
|
||||||
|
});
|
||||||
|
|
||||||
|
if (setPlaceholder) {
|
||||||
|
_.placeholder = placeholder;
|
||||||
|
}
|
||||||
|
// Wrap the lodash method and its aliases.
|
||||||
|
each(keys(_), function(key) {
|
||||||
|
each(mapping.realToAlias[key] || [], function(alias) {
|
||||||
|
_[alias] = _[key];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return _;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = baseConvert;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ },
|
||||||
|
/* 2 */
|
||||||
|
/***/ function(module, exports) {
|
||||||
|
|
||||||
|
/** Used to map aliases to their real names. */
|
||||||
|
exports.aliasToReal = {
|
||||||
|
'__': 'placeholder',
|
||||||
|
'all': 'some',
|
||||||
|
'allPass': 'overEvery',
|
||||||
|
'apply': 'spread',
|
||||||
|
'assoc': 'set',
|
||||||
|
'assocPath': 'set',
|
||||||
|
'compose': 'flowRight',
|
||||||
|
'contains': 'includes',
|
||||||
|
'dissoc': 'unset',
|
||||||
|
'dissocPath': 'unset',
|
||||||
|
'each': 'forEach',
|
||||||
|
'eachRight': 'forEachRight',
|
||||||
|
'equals': 'isEqual',
|
||||||
|
'extend': 'assignIn',
|
||||||
|
'extendWith': 'assignInWith',
|
||||||
|
'first': 'head',
|
||||||
|
'init': 'initial',
|
||||||
|
'mapObj': 'mapValues',
|
||||||
|
'omitAll': 'omit',
|
||||||
|
'nAry': 'ary',
|
||||||
|
'path': 'get',
|
||||||
|
'pathEq': 'matchesProperty',
|
||||||
|
'pathOr': 'getOr',
|
||||||
|
'pickAll': 'pick',
|
||||||
|
'pipe': 'flow',
|
||||||
|
'prop': 'get',
|
||||||
|
'propOf': 'propertyOf',
|
||||||
|
'propOr': 'getOr',
|
||||||
|
'somePass': 'overSome',
|
||||||
|
'unapply': 'rest',
|
||||||
|
'unnest': 'flatten',
|
||||||
|
'useWith': 'overArgs',
|
||||||
|
'whereEq': 'filter',
|
||||||
|
'zipObj': 'zipObject'
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map ary to method names. */
|
||||||
|
exports.aryMethod = {
|
||||||
|
'1': [
|
||||||
|
'attempt', 'castArray', 'ceil', 'create', 'curry', 'curryRight', 'floor',
|
||||||
|
'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'methodOf', 'mixin',
|
||||||
|
'over', 'overEvery', 'overSome', 'rest', 'reverse', 'round', 'runInContext',
|
||||||
|
'spread', 'template', 'trim', 'trimEnd', 'trimStart', 'uniqueId', 'words'
|
||||||
|
],
|
||||||
|
'2': [
|
||||||
|
'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindKey',
|
||||||
|
'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN',
|
||||||
|
'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference',
|
||||||
|
'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', 'every',
|
||||||
|
'filter', 'find', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
|
||||||
|
'findLastKey', 'flatMap', 'flattenDepth', 'forEach', 'forEachRight', 'forIn',
|
||||||
|
'forInRight', 'forOwn', 'forOwnRight', 'get', 'groupBy', 'gt', 'gte', 'has',
|
||||||
|
'hasIn', 'includes', 'indexOf', 'intersection', 'invertBy', 'invoke', 'invokeMap',
|
||||||
|
'isEqual', 'isMatch', 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map',
|
||||||
|
'mapKeys', 'mapValues', 'matchesProperty', 'maxBy', 'merge', 'minBy', 'omit',
|
||||||
|
'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt',
|
||||||
|
'partial', 'partialRight', 'partition', 'pick', 'pickBy', 'pull', 'pullAll',
|
||||||
|
'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',
|
||||||
|
'repeat', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',
|
||||||
|
'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',
|
||||||
|
'split', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', 'takeRightWhile',
|
||||||
|
'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars', 'trimCharsEnd',
|
||||||
|
'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith', 'unset',
|
||||||
|
'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject', 'zipObjectDeep'
|
||||||
|
],
|
||||||
|
'3': [
|
||||||
|
'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
|
||||||
|
'getOr', 'inRange', 'intersectionBy', 'intersectionWith', 'isEqualWith',
|
||||||
|
'isMatchWith', 'mergeWith', 'orderBy', 'pullAllBy', 'reduce', 'reduceRight',
|
||||||
|
'replace', 'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', 'transform',
|
||||||
|
'unionBy', 'unionWith', 'xorBy', 'xorWith', 'zipWith'
|
||||||
|
],
|
||||||
|
'4': [
|
||||||
|
'fill', 'setWith'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map ary to rearg configs. */
|
||||||
|
exports.aryRearg = {
|
||||||
|
'2': [1, 0],
|
||||||
|
'3': [2, 0, 1],
|
||||||
|
'4': [3, 2, 0, 1]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to their iteratee ary. */
|
||||||
|
exports.iterateeAry = {
|
||||||
|
'assignWith': 2,
|
||||||
|
'assignInWith': 2,
|
||||||
|
'cloneDeepWith': 1,
|
||||||
|
'cloneWith': 1,
|
||||||
|
'dropRightWhile': 1,
|
||||||
|
'dropWhile': 1,
|
||||||
|
'every': 1,
|
||||||
|
'filter': 1,
|
||||||
|
'find': 1,
|
||||||
|
'findIndex': 1,
|
||||||
|
'findKey': 1,
|
||||||
|
'findLast': 1,
|
||||||
|
'findLastIndex': 1,
|
||||||
|
'findLastKey': 1,
|
||||||
|
'flatMap': 1,
|
||||||
|
'forEach': 1,
|
||||||
|
'forEachRight': 1,
|
||||||
|
'forIn': 1,
|
||||||
|
'forInRight': 1,
|
||||||
|
'forOwn': 1,
|
||||||
|
'forOwnRight': 1,
|
||||||
|
'isEqualWith': 2,
|
||||||
|
'isMatchWith': 2,
|
||||||
|
'map': 1,
|
||||||
|
'mapKeys': 1,
|
||||||
|
'mapValues': 1,
|
||||||
|
'partition': 1,
|
||||||
|
'reduce': 2,
|
||||||
|
'reduceRight': 2,
|
||||||
|
'reject': 1,
|
||||||
|
'remove': 1,
|
||||||
|
'some': 1,
|
||||||
|
'takeRightWhile': 1,
|
||||||
|
'takeWhile': 1,
|
||||||
|
'times': 1,
|
||||||
|
'transform': 2
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to iteratee rearg configs. */
|
||||||
|
exports.iterateeRearg = {
|
||||||
|
'mapKeys': [1]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to rearg configs. */
|
||||||
|
exports.methodRearg = {
|
||||||
|
'assignInWith': [1, 2, 0],
|
||||||
|
'assignWith': [1, 2, 0],
|
||||||
|
'getOr': [2, 1, 0],
|
||||||
|
'isMatchWith': [2, 1, 0],
|
||||||
|
'mergeWith': [1, 2, 0],
|
||||||
|
'pullAllBy': [2, 1, 0],
|
||||||
|
'setWith': [3, 1, 2, 0],
|
||||||
|
'sortedIndexBy': [2, 1, 0],
|
||||||
|
'sortedLastIndexBy': [2, 1, 0],
|
||||||
|
'zipWith': [1, 2, 0]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to spread configs. */
|
||||||
|
exports.methodSpread = {
|
||||||
|
'partial': 1,
|
||||||
|
'partialRight': 1
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to identify methods which mutate arrays or objects. */
|
||||||
|
exports.mutate = {
|
||||||
|
'array': {
|
||||||
|
'fill': true,
|
||||||
|
'pull': true,
|
||||||
|
'pullAll': true,
|
||||||
|
'pullAllBy': true,
|
||||||
|
'pullAt': true,
|
||||||
|
'remove': true,
|
||||||
|
'reverse': true
|
||||||
|
},
|
||||||
|
'object': {
|
||||||
|
'assign': true,
|
||||||
|
'assignIn': true,
|
||||||
|
'assignInWith': true,
|
||||||
|
'assignWith': true,
|
||||||
|
'defaults': true,
|
||||||
|
'defaultsDeep': true,
|
||||||
|
'merge': true,
|
||||||
|
'mergeWith': true
|
||||||
|
},
|
||||||
|
'set': {
|
||||||
|
'set': true,
|
||||||
|
'setWith': true,
|
||||||
|
'unset': true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to track methods with placeholder support */
|
||||||
|
exports.placeholder = {
|
||||||
|
'bind': true,
|
||||||
|
'bindKey': true,
|
||||||
|
'curry': true,
|
||||||
|
'curryRight': true,
|
||||||
|
'partial': true,
|
||||||
|
'partialRight': true
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map real names to their aliases. */
|
||||||
|
exports.realToAlias = (function() {
|
||||||
|
var hasOwnProperty = Object.prototype.hasOwnProperty,
|
||||||
|
object = exports.aliasToReal,
|
||||||
|
result = {};
|
||||||
|
|
||||||
|
for (var key in object) {
|
||||||
|
var value = object[key];
|
||||||
|
if (hasOwnProperty.call(result, value)) {
|
||||||
|
result[value].push(key);
|
||||||
|
} else {
|
||||||
|
result[value] = [key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}());
|
||||||
|
|
||||||
|
/** Used to map method names to other names. */
|
||||||
|
exports.remap = {
|
||||||
|
'curryN': 'curry',
|
||||||
|
'curryRightN': 'curryRight',
|
||||||
|
'getOr': 'get',
|
||||||
|
'trimChars': 'trim',
|
||||||
|
'trimCharsEnd': 'trimEnd',
|
||||||
|
'trimCharsStart': 'trimStart'
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to track methods that skip `_.rearg`. */
|
||||||
|
exports.skipRearg = {
|
||||||
|
'add': true,
|
||||||
|
'assign': true,
|
||||||
|
'assignIn': true,
|
||||||
|
'concat': true,
|
||||||
|
'difference': true,
|
||||||
|
'gt': true,
|
||||||
|
'gte': true,
|
||||||
|
'lt': true,
|
||||||
|
'lte': true,
|
||||||
|
'matchesProperty': true,
|
||||||
|
'merge': true,
|
||||||
|
'partial': true,
|
||||||
|
'partialRight': true,
|
||||||
|
'random': true,
|
||||||
|
'range': true,
|
||||||
|
'rangeRight': true,
|
||||||
|
'subtract': true,
|
||||||
|
'zip': true,
|
||||||
|
'zipObject': true
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }
|
||||||
|
/******/ ])
|
||||||
|
});
|
||||||
|
;
|
||||||
13
dist/lodash.fp.min.js
vendored
Normal file
13
dist/lodash.fp.min.js
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.fp=e():t.fp=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return t[n].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){function n(t,e){return i(t,t,e)}var i=r(1);"function"==typeof _&&(_=n(_.runInContext())),
|
||||||
|
t.exports=n},function(t,e,r){function n(t,e,r,s){var u,c="function"==typeof e,p=e===Object(e);if(p&&(s=r,r=e,e=void 0),null==r)throw new TypeError;s||(s={});var l={cap:"cap"in s?s.cap:!0,curry:"curry"in s?s.curry:!0,fixed:"fixed"in s?s.fixed:!0,immutable:"immutable"in s?s.immutable:!0,rearg:"rearg"in s?s.rearg:!0},f="rearg"in s&&s.rearg,h=c?r:{ary:t.ary,clone:t.clone,curry:t.curry,forEach:t.forEach,isArray:t.isArray,isFunction:t.isFunction,iteratee:t.iteratee,keys:t.keys,rearg:t.rearg,spread:t.spread,
|
||||||
|
toPath:t.toPath},d=h.ary,y=h.clone,g=h.curry,m=h.forEach,v=h.isArray,W=h.isFunction,x=h.keys,R=h.rearg,I=h.spread,O=h.toPath,b=x(i.aryMethod),A=function(t,e){return 2==e?function(e,r){return t.apply(void 0,arguments)}:function(e){return t.apply(void 0,arguments)}},B=function(t,e){return 2==e?function(e,r){return t(e,r)}:function(e){return t(e)}},E=function(t){for(var e=t?t.length:0,r=Array(e);e--;)r[e]=t[e];return r},j=function(t,e){e=O(e);for(var r=-1,n=e.length,i=y(Object(t)),a=i;null!=a&&++r<n;){
|
||||||
|
var o=e[r],s=a[o];null!=s&&(a[o]=y(Object(s))),a=a[o]}return i},k=function(t){return function(e){return t({},e)}},w=function(t,e){return function(){var r=arguments.length;if(!r)return i;for(var n=Array(r);r--;)n[r]=arguments[r];var i=n[0]=e.apply(void 0,n);return t.apply(void 0,n),i}},q=function(t,e){return P(t,function(t){return"function"==typeof t?B(t,e):t})},z=function(t,e){return P(t,function(t){var r=e.length;return A(R(B(t,r),e),r)})},P=function(t,e,r){return function(){var r=arguments.length;
|
||||||
|
if(!r)return t();for(var n=Array(r);r--;)n[r]=arguments[r];var i=l.rearg?0:r-1;return n[i]=e(n[i]),t.apply(void 0,n)}},M={castArray:function(t){return function(){var e=arguments[0];return v(e)?t(E(e)):t.apply(void 0,arguments)}},iteratee:function(t){return function(){var e=arguments[0],r=arguments[1],n=t(e,r),i=n.length;return l.cap&&"number"==typeof r?(r=r>2?r-2:1,i&&r>=i?n:B(n,r)):n}},mixin:function(t){return function(e){var r=this;if(!W(r))return t(r,Object(e));var n=[],i=[];return m(x(e),function(t){
|
||||||
|
var a=e[t];W(a)&&(i.push(t),n.push(r.prototype[t]))}),t(r,Object(e)),m(i,function(t,e){var i=n[e];W(i)?r.prototype[t]=i:delete r.prototype[t]}),r}},runInContext:function(e){return function(r){return n(t,e(r),s)}}},L=function(t,e){t=i.aliasToReal[t]||t;var r=M[t];if(r)return r(e);var n=e;l.immutable&&(a.array[t]?n=w(e,E):a.object[t]?n=w(e,k(e)):a.set[t]&&(n=w(e,j)));var s;return m(b,function(e){return m(i.aryMethod[e],function(r){if(t==r){var a=!c&&i.iterateeAry[t],o=i.iterateeRearg[t],u=i.methodSpread[t];
|
||||||
|
return s=n,l.fixed&&(s=void 0===u?d(s,e):I(s,u)),l.rearg&&e>1&&(f||!i.skipRearg[t])&&(s=R(s,i.methodRearg[t]||i.aryRearg[e])),l.cap&&(o?s=z(s,o):a&&(s=q(s,a))),l.curry&&e>1&&(s=g(s,e)),!1}}),!s}),s||(s=n),i.placeholder[t]&&(u=!0,e.placeholder=s.placeholder=o),s};if(!p)return L(e,r);var S=r,C=[];return m(b,function(t){m(i.aryMethod[t],function(t){var e=S[i.remap[t]||t];e&&C.push([t,L(t,e)])})}),m(C,function(t){S[t[0]]=t[1]}),u&&(S.placeholder=o),m(x(S),function(t){m(i.realToAlias[t]||[],function(e){
|
||||||
|
S[e]=S[t]})}),S}var i=r(2),a=i.mutate,o={};t.exports=n},function(t,e){e.aliasToReal={__:"placeholder",all:"some",allPass:"overEvery",apply:"spread",assoc:"set",assocPath:"set",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",each:"forEach",eachRight:"forEachRight",equals:"isEqual",extend:"assignIn",extendWith:"assignInWith",first:"head",init:"initial",mapObj:"mapValues",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",pickAll:"pick",pipe:"flow",
|
||||||
|
prop:"get",propOf:"propertyOf",propOr:"getOr",somePass:"overSome",unapply:"rest",unnest:"flatten",useWith:"overArgs",whereEq:"filter",zipObj:"zipObject"},e.aryMethod={1:["attempt","castArray","ceil","create","curry","curryRight","floor","fromPairs","invert","iteratee","memoize","method","methodOf","mixin","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words"],2:["add","after","ary","assign","assignIn","at","before","bind","bindKey","chunk","cloneDeepWith","cloneWith","concat","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","delay","difference","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","merge","minBy","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],
|
||||||
|
3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","getOr","inRange","intersectionBy","intersectionWith","isEqualWith","isMatchWith","mergeWith","orderBy","pullAllBy","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","xorBy","xorWith","zipWith"],4:["fill","setWith"]},e.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]},e.iterateeAry={assignWith:2,assignInWith:2,cloneDeepWith:1,cloneWith:1,dropRightWhile:1,dropWhile:1,every:1,
|
||||||
|
filter:1,find:1,findIndex:1,findKey:1,findLast:1,findLastIndex:1,findLastKey:1,flatMap:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,isEqualWith:2,isMatchWith:2,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2},e.iterateeRearg={mapKeys:[1]},e.methodRearg={assignInWith:[1,2,0],assignWith:[1,2,0],getOr:[2,1,0],isMatchWith:[2,1,0],mergeWith:[1,2,0],pullAllBy:[2,1,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],
|
||||||
|
sortedLastIndexBy:[2,1,0],zipWith:[1,2,0]},e.methodSpread={partial:1,partialRight:1},e.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignIn:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsDeep:!0,merge:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0}},e.placeholder={bind:!0,bindKey:!0,curry:!0,curryRight:!0,partial:!0,partialRight:!0},e.realToAlias=function(){var t=Object.prototype.hasOwnProperty,r=e.aliasToReal,n={};for(var i in r){
|
||||||
|
var a=r[i];t.call(n,a)?n[a].push(i):n[a]=[i]}return n}(),e.remap={curryN:"curry",curryRightN:"curryRight",getOr:"get",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart"},e.skipRearg={add:!0,assign:!0,assignIn:!0,concat:!0,difference:!0,gt:!0,gte:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,partial:!0,partialRight:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0}}])});
|
||||||
19648
dist/lodash.js
vendored
19648
dist/lodash.js
vendored
File diff suppressed because it is too large
Load Diff
154
dist/lodash.min.js
vendored
154
dist/lodash.min.js
vendored
@@ -1,40 +1,120 @@
|
|||||||
/**
|
/**
|
||||||
* @license
|
* @license
|
||||||
* Lo-Dash 1.0.1 (Custom Build) lodash.com/license
|
* lodash 4.5.1 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
|
||||||
* Build: `lodash modern -o ./dist/lodash.js`
|
* Build: `lodash -o ./dist/lodash.js`
|
||||||
* Underscore.js 1.4.4 underscorejs.org/LICENSE
|
|
||||||
*/
|
*/
|
||||||
;(function(n,t){function r(n){if(!n||typeof n!="object")return W;var t=n.valueOf,r=typeof t=="function"&&(r=bt(t))&&bt(r);if(r)n=n==r||bt(n)==r&&!h(n);else{var e=W;!n||typeof n!="object"||h(n)?n=e:(t=n.constructor,!j(t)||t instanceof t?(Yt(n,function(n,t){e=t}),n=e===W||jt.call(n,e)):n=e)}return n}function e(n){return n&&typeof n=="object"&&n.__wrapped__?n:this instanceof e?(this.__wrapped__=n,void 0):new e(n)}function u(n,t,r){t||(t=0);var e=n.length,u=e-t>=(r||ut);if(u){var o={};for(r=t-1;++r<e;){var i=n[r]+"";
|
;(function(){function n(n,t){return n.set(t[0],t[1]),n}function t(n,t){return n.add(t),n}function r(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function e(n,t,r,e){for(var u=-1,o=n.length;++u<o;){var i=n[u];t(e,i,r(i),n)}return e}function u(n,t){for(var r=-1,e=n.length;++r<e&&false!==t(n[r],r,n););return n}function o(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return false;
|
||||||
(jt.call(o,i)?o[i]:o[i]=[]).push(n[r])}}return function(r){if(u){var e=r+"";return jt.call(o,e)&&-1<z(o[e],r)}return-1<z(n,r,t)}}function o(n){return n.charCodeAt(0)}function i(n,t){var r=n.b,e=t.b;if(n=n.a,t=t.a,n!==t){if(n>t||typeof n=="undefined")return 1;if(n<t||typeof t=="undefined")return-1}return r<e?-1:1}function f(n,t,r,e){function u(){var a=arguments,c=i?this:t;return o||(n=t[f]),r.length&&(a=a.length?(a=v(a),e?a.concat(r):r.concat(a)):r),this instanceof u?(s.prototype=n.prototype,c=new s,s.prototype=Q,a=n.apply(c,a),w(a)?a:c):n.apply(c,a)
|
return true}function i(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;){var i=n[r];t(i,r,n)&&(o[++u]=i)}return o}function f(n,t){return!!n.length&&-1<d(n,t,0)}function c(n,t,r){for(var e=-1,u=n.length;++e<u;)if(r(t,n[e]))return true;return false}function a(n,t){for(var r=-1,e=n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function l(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function s(n,t,r,e){var u=-1,o=n.length;for(e&&o&&(r=n[++u]);++u<o;)r=t(r,n[u],u,n);return r}function h(n,t,r,e){
|
||||||
}var o=j(n),i=!r,f=t;return i&&(r=t),o||(t=n),u}function a(n,t,r){if(n==Q)return G;var e=typeof n;if("function"!=e){if("object"!=e)return function(t){return t[n]};var u=tr(n);return function(t){for(var r=u.length,e=W;r--&&(e=b(t[u[r]],n[u[r]],et)););return e}}return typeof t!="undefined"?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,o){return n.call(t,r,e,u,o)}:function(r,e,u){return n.call(t,r,e,u)}:n}function c(){for(var n,t={g:Ut,b:"l(n)",c:"",h:"",l:"",m:L},r=0;n=arguments[r];r++)for(var e in n)t[e]=n[e];
|
var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function p(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return true;return false}function _(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(f===Z?i===i:r(i,f)))var f=i,c=o}return c}function g(n,t,r,e){var u;return r(n,function(n,r,o){return t(n,r,o)?(u=e?r:n,false):void 0}),u}function v(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function d(n,t,r){if(t!==t)return B(n,r);--r;for(var e=n.length;++r<e;)if(n[r]===t)return r;
|
||||||
return n=t.a,t.d=/^[^,]+/.exec(n)[0],r="var j,n="+t.d+",u=n;if(!n)return u;"+t.l+";",t.b&&(r+="var o=n.length;j=-1;if("+t.b+"){while(++j<o){"+t.h+"}}else{"),t.g&&t.m?r+="var s=-1,t=r[typeof n]?p(n):[],o=t.length;while(++s<o){j=t[s];"+t.h+"}":(r+="for(j in n){",t.m&&(r+="if(",t.m&&(r+="i.call(n,j)"),r+="){"),r+=t.h+";",t.m&&(r+="}"),r+="}"),t.b&&(r+="}"),r+=t.c+";return u",Function("f,i,k,l,m,r,p","return function("+n+"){"+r+"}")(a,jt,h,nr,A,Ht,kt)}function l(n){return"\\"+Jt[n]}function p(n){return rr[n]
|
return-1}function y(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function b(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function x(n,t){for(var r,e=-1,u=n.length;++e<u;){var o=t(n[e]);o!==Z&&(r=r===Z?o:r+o)}return r}function m(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function j(n,t){return a(t,function(t){return[t,n[t]]})}function w(n){return function(t){return n(t)}}function A(n,t){return a(t,function(t){return n[t]})}function O(n,t){for(var r=-1,e=n.length;++r<e&&-1<d(t,n[r],0););
|
||||||
}function s(){}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 g(n){return er[n]}function h(n){return xt.call(n)==Ft}function y(n){var t=[];return Zt(n,function(n,r){t.push(r)}),t}function m(n,r,e,u,o,i){var f=n;if(typeof r=="function"&&(u=e,e=r,r=W),typeof e=="function"){e=typeof u=="undefined"?e:a(e,u,1);var f=e(f),c=typeof f!="undefined";c||(f=n)}if(u=w(f)){var l=xt.call(f);if(!Vt[l])return f;var p=nr(f)
|
return r}function k(n,t){for(var r=n.length;r--&&-1<d(t,n[r],0););return r}function E(n){return n&&n.Object===Object?n:null}function I(n,t){if(n!==t){var r=null===n,e=n===Z,u=n===n,o=null===t,i=t===Z,f=t===t;if(n>t&&!o||!u||r&&!i&&f||e&&f)return 1;if(t>n&&!r||!f||o&&!e&&u||i&&u)return-1}return 0}function S(n){return Un[n]}function R(n){return zn[n]}function W(n){return"\\"+$n[n]}function B(n,t,r){var e=n.length;for(t+=r?0:-1;r?t--:++t<e;){var u=n[t];if(u!==u)return t}return-1}function C(n){var t=false;
|
||||||
}if(!u||!r)return u&&!c?p?v(f):ur({},f):f;switch(u=Gt[l],l){case Dt:case It:return c?f:new u(+f);case Tt:case zt:return c?f:new u(f);case Mt:return c?f:u(f.source,lt.exec(f))}for(o||(o=[]),i||(i=[]),l=o.length;l--;)if(o[l]==n)return i[l];return c||(f=p?u(f.length):{},p&&(jt.call(n,"index")&&(f.index=n.index),jt.call(n,"input")&&(f.input=n.input))),o.push(n),i.push(f),(p?$:Zt)(c?f:n,function(n,u){f[u]=m(n,r,e,t,o,i)}),f}function d(n){var t=[];return Yt(n,function(n,r){j(n)&&t.push(r)}),t.sort()}function _(n){for(var t=-1,r=tr(n),e=r.length,u={};++t<e;){var o=r[t];
|
if(null!=n&&typeof n.toString!="function")try{t=!!(n+"")}catch(r){}return t}function U(n,t){return n=typeof n=="number"||yn.test(n)?+n:-1,n>-1&&0==n%1&&(null==t?9007199254740991:t)>n}function z(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}function M(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function L(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;){var i=n[r];(i===t||"__lodash_placeholder__"===i)&&(n[r]="__lodash_placeholder__",o[++u]=r)}return o;
|
||||||
u[n[o]]=o}return u}function b(n,t,r,e,u,o){var i=r===et;if(r&&!i){r=typeof e=="undefined"?r:a(r,e,2);var f=r(n,t);if(typeof f!="undefined")return!!f}if(n===t)return 0!==n||1/n==1/t;var c=typeof n,l=typeof t;if(n===n&&(!n||"function"!=c&&"object"!=c)&&(!t||"function"!=l&&"object"!=l))return W;if(n==Q||t==Q)return n===t;if(l=xt.call(n),c=xt.call(t),l==Ft&&(l=Bt),c==Ft&&(c=Bt),l!=c)return W;switch(l){case Dt:case It:return+n==+t;case Tt:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case Mt:case zt:return n==t+""
|
}function $(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function F(n){if(!n||!En.test(n))return n.length;for(var t=kn.lastIndex=0;kn.test(n);)t++;return t}function N(n){return Mn[n]}function D(E){function yn(n){if(we(n)&&!Zo(n)&&!(n instanceof An)){if(n instanceof wn)return n;if(lu.call(n,"__wrapped__"))return Pr(n)}return new wn(n)}function jn(){}function wn(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=Z}function An(n){
|
||||||
}if(c=l==qt,!c){if(n.__wrapped__||t.__wrapped__)return b(n.__wrapped__||n,t.__wrapped__||t,r,e,u,o);if(l!=Bt)return W;var l=n.constructor,p=t.constructor;if(l!=p&&(!j(l)||!(l instanceof l&&j(p)&&p instanceof p)))return W}for(u||(u=[]),o||(o=[]),l=u.length;l--;)if(u[l]==n)return o[l]==t;var s=0,f=L;if(u.push(n),o.push(t),c){if(l=n.length,s=t.length,f=s==n.length,!f&&!i)return f;for(;s--;)if(c=l,p=t[s],i)for(;c--&&!(f=b(n[c],p,r,e,u,o)););else if(!(f=b(n[s],p,r,e,u,o)))break;return f}return Yt(t,function(t,i,a){return jt.call(a,i)?(s++,f=jt.call(n,i)&&b(n[i],t,r,e,u,o)):void 0
|
this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Un(){}function zn(n){var t=-1,r=n?n.length:0;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Mn(n){var t=-1,r=n?n.length:0;for(this.__data__=new zn;++t<r;)this.push(n[t])}function Ln(n,t){var r=n.__data__;return $r(t)?(r=r.__data__,"__lodash_hash_undefined__"===(typeof t=="string"?r.string:r.hash)[t]):r.has(t)}function $n(n){var t=-1,r=n?n.length:0;
|
||||||
}),f&&!i&&Yt(n,function(n,t,r){return jt.call(r,t)?f=-1<--s:void 0}),f}function j(n){return typeof n=="function"}function w(n){return n?Ht[typeof n]:W}function x(n){return typeof n=="number"||xt.call(n)==Tt}function A(n){return typeof n=="string"||xt.call(n)==zt}function O(n,t,e){var u=arguments,o=0,i=2;if(!w(n))return n;if(e===et)var f=u[3],c=u[4],l=u[5];else c=[],l=[],typeof e!="number"&&(i=u.length),3<i&&"function"==typeof u[i-2]?f=a(u[--i-1],u[i--],2):2<i&&"function"==typeof u[i-1]&&(f=u[--i]);for(;++o<i;)(nr(u[o])?$:Zt)(u[o],function(t,e){var u,o,i=t,a=n[e];
|
for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Dn(n,t){var r=Pn(n,t);return 0>r?false:(r==n.length-1?n.pop():Iu.call(n,r,1),true)}function Zn(n,t){var r=Pn(n,t);return 0>r?Z:n[r][1]}function Pn(n,t){for(var r=n.length;r--;)if(pe(n[r][0],t))return r;return-1}function Tn(n,t,r){var e=Pn(n,t);0>e?n.push([t,r]):n[e][1]=r}function Kn(n,t,r,e){return n===Z||pe(n,cu[r])&&!lu.call(e,r)?t:n}function Gn(n,t,r){(r!==Z&&!pe(n[t],r)||typeof t=="number"&&r===Z&&!(t in n))&&(n[t]=r)}function Yn(n,t,r){
|
||||||
if(t&&((o=nr(t))||r(t))){for(i=c.length;i--;)if(u=c[i]==t){a=l[i];break}u||(a=o?nr(a)?a:[]:r(a)?a:{},f&&(i=f(a,t),typeof i!="undefined"&&(a=i)),c.push(t),l.push(a),f||(a=O(a,t,et,f,c,l)))}else f&&(i=f(a,t),typeof i=="undefined"&&(i=t)),typeof i!="undefined"&&(a=i);n[e]=a});return n}function E(n){for(var t=-1,r=tr(n),e=r.length,u=Array(e);++t<e;)u[t]=n[r[t]];return u}function S(n,t,r){var e=-1,u=n?n.length:0,o=W;return r=(0>r?Nt(0,u+r):r)||0,typeof u=="number"?o=-1<(A(n)?n.indexOf(t,r):z(n,t,r)):Xt(n,function(n){return++e<r?void 0:!(o=n===t)
|
var e=n[t];lu.call(n,t)&&pe(e,r)&&(r!==Z||t in n)||(n[t]=r)}function Hn(n,t,r,e){return Hu(n,function(n,u,o){t(e,n,r(n),o)}),e}function Qn(n,t){return n&&nr(t,De(t),n)}function Xn(n,t){for(var r=-1,e=null==n,u=t.length,o=Array(u);++r<u;)o[r]=e?Z:$e(n,t[r]);return o}function nt(n){return de(n)?n:[]}function tt(n){return typeof n=="function"?n:Ye}function rt(n){return Zo(n)?n:qr(n)}function et(n,t,r){return n===n&&(r!==Z&&(n=n>r?r:n),t!==Z&&(n=t>n?t:n)),n}function ut(n,t,r,e,o,i){var f;if(r&&(f=o?r(n,e,o,i):r(n)),
|
||||||
}),o}function k(n,t,r){var e=L;if(t=a(t,r),nr(n)){r=-1;for(var u=n.length;++r<u&&(e=!!t(n[r],r,n)););}else Xt(n,function(n,r,u){return e=!!t(n,r,u)});return e}function N(n,t,r){var e=[];if(t=a(t,r),nr(n)){r=-1;for(var u=n.length;++r<u;){var o=n[r];t(o,r,n)&&e.push(o)}}else Xt(n,function(n,r,u){t(n,r,u)&&e.push(n)});return e}function R(n,t,r){var e;return t=a(t,r),$(n,function(n,r,u){return t(n,r,u)?(e=n,W):void 0}),e}function $(n,t,r){if(t&&typeof r=="undefined"&&nr(n)){r=-1;for(var e=n.length;++r<e&&t(n[r],r,n)!==W;);}else Xt(n,t,r);
|
f!==Z)return f;if(!je(n))return n;if(e=Zo(n)){if(f=Br(n),!t)return Xt(n,f)}else{var c=Rr(n),a="[object Function]"==c||"[object GeneratorFunction]"==c;if(qo(n))return Jt(n,t);if("[object Object]"==c||"[object Arguments]"==c||a&&!o){if(C(n))return o?n:{};if(f=Cr(a?{}:n),!t)return rr(n,Qn(f,n))}else{if(!Cn[c])return o?n:{};f=Ur(n,c,t)}}return i||(i=new $n),(o=i.get(n))?o:(i.set(n,f),(e?u:pt)(n,function(e,u){Yn(f,u,ut(e,t,r,u,n,i))}),e?f:rr(n,f))}function ot(n){var t=De(n),r=t.length;return function(e){
|
||||||
return n}function F(n,t,r){var e=-1,u=n?n.length:0,o=Array(typeof u=="number"?u:0);if(t=a(t,r),nr(n))for(;++e<u;)o[e]=t(n[e],e,n);else Xt(n,function(n,r,u){o[++e]=t(n,r,u)});return o}function q(n,t,r){var e=-1/0,u=e;if(!t&&nr(n)){r=-1;for(var i=n.length;++r<i;){var f=n[r];f>u&&(u=f)}}else t=!t&&A(n)?o:a(t,r),Xt(n,function(n,r,o){r=t(n,r,o),r>e&&(e=r,u=n)});return u}function D(n,t,r,e){var u=3>arguments.length;if(t=a(t,e,4),nr(n)){var o=-1,i=n.length;for(u&&(r=n[++o]);++o<i;)r=t(r,n[o],o,n)}else Xt(n,function(n,e,o){r=u?(u=W,n):t(r,n,e,o)
|
if(null==e)return!r;for(var u=r;u--;){var o=t[u],i=n[o],f=e[o];if(f===Z&&!(o in Object(e))||!i(f))return false}return true}}function it(n){return je(n)?Ou(n):{}}function ft(n,t,r){if(typeof n!="function")throw new iu("Expected a function");return Eu(function(){n.apply(Z,r)},t)}function ct(n,t,r,e){var u=-1,o=f,i=true,l=n.length,s=[],h=t.length;if(!l)return s;r&&(t=a(t,w(r))),e?(o=c,i=false):t.length>=200&&(o=Ln,i=false,t=new Mn(t));n:for(;++u<l;){var p=n[u],_=r?r(p):p;if(i&&_===_){for(var g=h;g--;)if(t[g]===_)continue n;
|
||||||
});return r}function I(n,t,r,e){var u=n?n.length:0,o=3>arguments.length;if(typeof u!="number")var i=tr(n),u=i.length;return t=a(t,e,4),$(n,function(e,f,a){f=i?i[--u]:--u,r=o?(o=W,n[f]):t(r,n[f],f,a)}),r}function T(n,t,r){var e;if(t=a(t,r),nr(n)){r=-1;for(var u=n.length;++r<u&&!(e=t(n[r],r,n)););}else Xt(n,function(n,r,u){return!(e=t(n,r,u))});return!!e}function B(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=Q){var o=-1;for(t=a(t,r);++o<u&&t(n[o],o,n);)e++}else if(e=t,e==Q||r)return n[0];
|
s.push(p)}else o(t,_,e)||s.push(p)}return s}function at(n,t){var r=true;return Hu(n,function(n,e,u){return r=!!t(n,e,u)}),r}function lt(n,t){var r=[];return Hu(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function st(n,t,r,e){e||(e=[]);for(var u=-1,o=n.length;++u<o;){var i=n[u];t>0&&de(i)&&(r||Zo(i)||ge(i))?t>1?st(i,t-1,r,e):l(e,i):r||(e[e.length]=i)}return e}function ht(n,t){return null==n?n:Xu(n,t,Ze)}function pt(n,t){return n&&Xu(n,t,De)}function _t(n,t){return n&&no(n,t,De)}function gt(n,t){return i(t,function(t){
|
||||||
return v(n,0,Rt(Nt(0,e),u))}}function M(n,t){for(var r=-1,e=n?n.length:0,u=[];++r<e;){var o=n[r];nr(o)?wt.apply(u,t?o:M(o)):u.push(o)}return u}function z(n,t,r){var e=-1,u=n?n.length:0;if(typeof r=="number")e=(0>r?Nt(0,u+r):r||0)-1;else if(r)return e=C(n,t),n[e]===t?e:-1;for(;++e<u;)if(n[e]===t)return e;return-1}function P(n,t,r){if(typeof t!="number"&&t!=Q){var e=0,u=-1,o=n?n.length:0;for(t=a(t,r);++u<o&&t(n[u],u,n);)e++}else e=t==Q||r?1:Nt(0,t);return v(n,e)}function C(n,t,r,e){var u=0,o=n?n.length:u;
|
return be(n[t])})}function vt(n,t){t=Lr(t,n)?[t+""]:rt(t);for(var r=0,e=t.length;null!=n&&e>r;)n=n[t[r++]];return r&&r==e?n:Z}function dt(n,t){return lu.call(n,t)||typeof n=="object"&&t in n&&null===ju(n)}function yt(n,t){return t in Object(n)}function bt(n,t,r){for(var e=r?c:f,u=n.length,o=u,i=Array(u),l=[];o--;){var s=n[o];o&&t&&(s=a(s,w(t))),i[o]=r||!t&&120>s.length?Z:new Mn(o&&s)}var s=n[0],h=-1,p=s.length,_=i[0];n:for(;++h<p;){var g=s[h],v=t?t(g):g;if(_?!Ln(_,v):!e(l,v,r)){for(o=u;--o;){var d=i[o];
|
||||||
for(r=r?a(r,e,1):G,t=r(t);u<o;)e=u+o>>>1,r(n[e])<t?u=e+1:o=e;return u}function K(n,t,r,e){var u=-1,o=n?n.length:0,i=[],f=i;typeof t=="function"&&(e=r,r=t,t=W);var c=!t&&75<=o;if(c)var l={};for(r&&(f=[],r=a(r,e));++u<o;){e=n[u];var p=r?r(e,u,n):e;if(c)var s=p+"",s=jt.call(l,s)?!(f=l[s]):f=l[s]=[];(t?!u||f[f.length-1]!==p:s||0>z(f,p))&&((r||c)&&f.push(p),i.push(e))}return i}function U(n,t){return Kt||At&&2<arguments.length?At.call.apply(At,arguments):f(n,t,v(arguments,2))}function V(n){var r=v(arguments,1);
|
if(d?!Ln(d,v):!e(n[o],v,r))continue n}_&&_.push(v),l.push(g)}}return l}function xt(n,t,r,e){return pt(n,function(n,u,o){t(e,r(n),u,o)}),e}function mt(n,t,e){return Lr(t,n)||(t=rt(t),n=Zr(n,t),t=Vr(t)),t=null==n?n:n[t],null==t?Z:r(t,n,e)}function jt(n,t,r,e,u){if(n===t)return true;if(null==n||null==t||!je(n)&&!we(t))return n!==n&&t!==t;n:{var o=Zo(n),i=Zo(t),f="[object Array]",c="[object Array]";o||(f=Rr(n),"[object Arguments]"==f?f="[object Object]":"[object Object]"!=f&&(o=Re(n))),i||(c=Rr(t),"[object Arguments]"==c?c="[object Object]":"[object Object]"!=c&&Re(t));
|
||||||
return setTimeout(function(){n.apply(t,r)},1)}function G(n){return n}function H(n){$(d(n),function(t){var r=e[t]=n[t];e.prototype[t]=function(){var n=[this.__wrapped__];return wt.apply(n,arguments),new e(r.apply(e,n))}})}function J(){return this.__wrapped__}var L=!0,Q=null,W=!1,X=typeof exports=="object"&&exports,Y=typeof module=="object"&&module&&module.exports==X&&module,Z=typeof global=="object"&&global;Z.global===Z&&(n=Z);var nt=[],tt={},rt=0,et=tt,ut=30,ot=n._,it=/&(?:amp|lt|gt|quot|#39);/g,ft=/\b__p\+='';/g,at=/\b(__p\+=)''\+/g,ct=/(__e\(.*?\)|\b__t\))\+'';/g,lt=/\w*$/,pt=RegExp("^"+(tt.valueOf+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),st=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,vt=/<%=([\s\S]+?)%>/g,gt=/($^)/,ht=/[&<>"']/g,yt=/['\n\r\t\u2028\u2029\\]/g,mt=Math.ceil,dt=nt.concat,_t=Math.floor,bt=pt.test(bt=Object.getPrototypeOf)&&bt,jt=tt.hasOwnProperty,wt=nt.push,xt=tt.toString,At=pt.test(At=v.bind)&&At,Ot=pt.test(Ot=Array.isArray)&&Ot,Et=n.isFinite,St=n.isNaN,kt=pt.test(kt=Object.keys)&&kt,Nt=Math.max,Rt=Math.min,$t=Math.random,Ft="[object Arguments]",qt="[object Array]",Dt="[object Boolean]",It="[object Date]",Tt="[object Number]",Bt="[object Object]",Mt="[object RegExp]",zt="[object String]",Pt=!!n.attachEvent,Ct=At&&!/\n|true/.test(At+Pt),Kt=At&&!Ct,Ut=kt&&(Pt||Ct),Vt={"[object Function]":W};
|
var a="[object Object]"==f&&!C(n),i="[object Object]"==c&&!C(t),c=f==c;if(!c||o||a){if(!(2&e)&&(f=a&&lu.call(n,"__wrapped__"),i=i&&lu.call(t,"__wrapped__"),f||i)){n=jt(f?n.value():n,i?t.value():t,r,e,u);break n}c?(u||(u=new $n),n=(o?jr:Ar)(n,t,jt,r,e,u)):n=false}else n=wr(n,t,f,jt,r,e)}return n}function wt(n,t,r,e){var u=r.length,o=u,i=!e;if(null==n)return!o;for(n=Object(n);u--;){var f=r[u];if(i&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return false}for(;++u<o;){var f=r[u],c=f[0],a=n[c],l=f[1];if(i&&f[2]){if(a===Z&&!(c in n))return false;
|
||||||
Vt[Ft]=Vt[qt]=Vt[Dt]=Vt[It]=Vt[Tt]=Vt[Bt]=Vt[Mt]=Vt[zt]=L;var Gt={};Gt[qt]=Array,Gt[Dt]=Boolean,Gt[It]=Date,Gt[Bt]=Object,Gt[Tt]=Number,Gt[Mt]=RegExp,Gt[zt]=String;var Ht={"boolean":W,"function":L,object:L,number:W,string:W,undefined:W},Jt={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"};e.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:vt,variable:"",imports:{_:e}};var Lt={a:"q,w,h",l:"var a=arguments,b=0,c=typeof h=='number'?2:a.length;while(++b<c){n=a[b];if(n&&r[typeof n]){",h:"if(typeof u[j]=='undefined')u[j]=n[j]",c:"}}"},Qt={a:"e,d,x",l:"d=d&&typeof x=='undefined'?d:f(d,x)",b:"typeof o=='number'",h:"if(d(n[j],j,e)===false)return u"},Wt={l:"if(!r[typeof n])return u;"+Qt.l,b:W},Xt=c(Qt),Yt=c(Qt,Wt,{m:W}),Zt=c(Qt,Wt),nr=Ot||function(n){return n instanceof Array||xt.call(n)==qt
|
}else if(f=new $n,c=e?e(a,l,c,n,t,f):Z,c===Z?!jt(l,a,e,3,f):!c)return false}return true}function At(n){var t=typeof n;return"function"==t?n:null==n?Ye:"object"==t?Zo(n)?It(n[0],n[1]):Et(n):nu(n)}function Ot(n){n=null==n?n:Object(n);var t,r=[];for(t in n)r.push(t);return r}function kt(n,t){var r=-1,e=ve(n)?Array(n.length):[];return Hu(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function Et(n){var t=Er(n);if(1==t.length&&t[0][2]){var r=t[0][0],e=t[0][1];return function(n){return null==n?false:n[r]===e&&(e!==Z||r in Object(n));
|
||||||
},tr=kt?function(n){return w(n)?kt(n):[]}:y,rr={"&":"&","<":"<",">":">",'"':""","'":"'"},er=_(rr),ur=c(Lt,{l:Lt.l.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=f(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),h:"u[j]=d?d(u[j],n[j]):n[j]"}),or=c(Lt);j(/x/)&&(j=function(n){return n instanceof Function||"[object Function]"==xt.call(n)}),Ct&&Y&&typeof setImmediate=="function"&&(V=U(setImmediate,n)),e.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0
|
}}return function(r){return r===n||wt(r,n,t)}}function It(n,t){return function(r){var e=$e(r,n);return e===Z&&e===t?Ne(r,n):jt(t,e,Z,3)}}function St(n,t,r,e,o){if(n!==t){var i=Zo(t)||Re(t)?Z:Ze(t);u(i||t,function(u,f){if(i&&(f=u,u=t[f]),je(u)){o||(o=new $n);var c=f,a=o,l=n[c],s=t[c],h=a.get(s);if(!h){var h=e?e(l,s,c+"",n,t,a):Z,p=h===Z;p&&(h=s,Zo(s)||Re(s)?Zo(l)?h=l:de(l)?h=Xt(l):(p=false,h=ut(s,true)):ke(s)||ge(s)?ge(l)?h=Me(l):!je(l)||r&&be(l)?(p=false,h=ut(s,true)):h=l:p=false),a.set(s,h),p&&St(h,s,r,e,a)}
|
||||||
}},e.assign=ur,e.at=function(n){for(var t=-1,r=dt.apply(nt,v(arguments,1)),e=r.length,u=Array(e);++t<e;)u[t]=n[r[t]];return u},e.bind=U,e.bindAll=function(n){for(var t=dt.apply(nt,arguments),r=1<t.length?0:(t=d(n),-1),e=t.length;++r<e;){var u=t[r];n[u]=U(n[u],n)}return n},e.bindKey=function(n,t){return f(n,t,v(arguments,2))},e.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},e.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length;r--;)t=[n[r].apply(this,t)];
|
Gn(n,c,h)}else c=e?e(n[f],u,f+"",n,t,o):Z,c===Z&&(c=u),Gn(n,f,c)})}}function Rt(n,t,r){var e=-1,u=kr();return t=a(t.length?t:Array(1),function(n){return u(n)}),n=kt(n,function(n,r,u){return{a:a(t,function(t){return t(n)}),b:++e,c:n}}),b(n,function(n,t){var e;n:{e=-1;for(var u=n.a,o=t.a,i=u.length,f=r.length;++e<i;){var c=I(u[e],o[e]);if(c){if(e>=f){e=c;break n}e=c*("desc"==r[e]?-1:1);break n}}e=n.b-t.b}return e})}function Wt(n,t){return n=Object(n),s(t,function(t,r){return r in n&&(t[r]=n[r]),t},{});
|
||||||
return t[0]}},e.countBy=function(n,t,r){var e={};return t=a(t,r),$(n,function(n,r,u){r=t(n,r,u)+"",jt.call(e,r)?e[r]++:e[r]=1}),e},e.debounce=function(n,t,r){function e(){f=Q,r||(o=n.apply(i,u))}var u,o,i,f;return function(){var a=r&&!f;return u=arguments,i=this,clearTimeout(f),f=setTimeout(e,t),a&&(o=n.apply(i,u)),o}},e.defaults=or,e.defer=V,e.delay=function(n,r){var e=v(arguments,2);return setTimeout(function(){n.apply(t,e)},r)},e.difference=function(n){for(var t=-1,r=n?n.length:0,e=dt.apply(nt,arguments),e=u(e,r),o=[];++t<r;){var i=n[t];
|
}function Bt(n,t){var r={};return ht(n,function(n,e){t(n,e)&&(r[e]=n)}),r}function Ct(n){return function(t){return null==t?Z:t[n]}}function Ut(n){return function(t){return vt(t,n)}}function zt(n,t,r){var e=-1,u=t.length,o=n;for(r&&(o=a(n,function(n){return r(n)}));++e<u;)for(var i=0,f=t[e],f=r?r(f):f;-1<(i=d(o,f,i));)o!==n&&Iu.call(o,i,1),Iu.call(n,i,1);return n}function Mt(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(e==r||u!=o){var o=u;if(U(u))Iu.call(n,u,1);else if(Lr(u,n))delete n[u];else{
|
||||||
e(i)||o.push(i)}return o},e.filter=N,e.flatten=M,e.forEach=$,e.forIn=Yt,e.forOwn=Zt,e.functions=d,e.groupBy=function(n,t,r){var e={};return t=a(t,r),$(n,function(n,r,u){r=t(n,r,u)+"",(jt.call(e,r)?e[r]:e[r]=[]).push(n)}),e},e.initial=function(n,t,r){if(!n)return[];var e=0,u=n.length;if(typeof t!="number"&&t!=Q){var o=u;for(t=a(t,r);o--&&t(n[o],o,n);)e++}else e=t==Q||r?1:t||e;return v(n,0,Rt(Nt(0,u-e),u))},e.intersection=function(n){var t=arguments,r=t.length,e={0:{}},o=-1,i=n?n.length:0,f=100<=i,a=[],c=a;
|
var u=rt(u),i=Zr(n,u);null!=i&&delete i[Vr(u)]}}}return n}function Lt(n,t){return n+Ru(Lu()*(t-n+1))}function $t(n,t,r,e){t=Lr(t,n)?[t+""]:rt(t);for(var u=-1,o=t.length,i=o-1,f=n;null!=f&&++u<o;){var c=t[u];if(je(f)){var a=r;if(u!=i){var l=f[c],a=e?e(l,c,f):Z;a===Z&&(a=null==l?U(t[u+1])?[]:{}:l)}Yn(f,c,a)}f=f[c]}return n}function Ft(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e<u;)r[e]=n[e+t];return r}function Nt(n,t){var r;return Hu(n,function(n,e,u){
|
||||||
n:for(;++o<i;){var l=n[o];if(f)var p=l+"",p=jt.call(e[0],p)?!(c=e[0][p]):c=e[0][p]=[];if(p||0>z(c,l)){f&&c.push(l);for(var s=r;--s;)if(!(e[s]||(e[s]=u(t[s],0,100)))(l))continue n;a.push(l)}}return a},e.invert=_,e.invoke=function(n,t){var r=v(arguments,2),e=-1,u=typeof t=="function",o=n?n.length:0,i=Array(typeof o=="number"?o:0);return $(n,function(n){i[++e]=(u?t:n[t]).apply(n,r)}),i},e.keys=tr,e.map=F,e.max=q,e.memoize=function(n,t){var r={};return function(){var e=(t?t.apply(this,arguments):arguments[0])+"";
|
return r=t(n,e,u),!r}),!!r}function Dt(n,t,r){var e=0,u=n?n.length:e;if(typeof t=="number"&&t===t&&2147483647>=u){for(;u>e;){var o=e+u>>>1,i=n[o];(r?t>=i:t>i)&&null!==i?e=o+1:u=o}return u}return Zt(n,t,Ye,r)}function Zt(n,t,r,e){t=r(t);for(var u=0,o=n?n.length:0,i=t!==t,f=null===t,c=t===Z;o>u;){var a=Ru((u+o)/2),l=r(n[a]),s=l!==Z,h=l===l;(i?h||e:f?h&&s&&(e||null!=l):c?h&&(e||s):null==l?0:e?t>=l:t>l)?u=a+1:o=a}return zu(o,4294967294)}function qt(n,t){for(var r=0,e=n.length,u=n[0],o=t?t(u):u,i=o,f=0,c=[u];++r<e;)u=n[r],
|
||||||
return jt.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},e.merge=O,e.min=function(n,t,r){var e=1/0,u=e;if(!t&&nr(n)){r=-1;for(var i=n.length;++r<i;){var f=n[r];f<u&&(u=f)}}else t=!t&&A(n)?o:a(t,r),Xt(n,function(n,r,o){r=t(n,r,o),r<e&&(e=r,u=n)});return u},e.object=function(n,t){for(var r=-1,e=n?n.length:0,u={};++r<e;){var o=n[r];t?u[o]=t[r]:u[o[0]]=o[1]}return u},e.omit=function(n,t,r){var e=typeof t=="function",u={};if(e)t=a(t,r);else var o=dt.apply(nt,arguments);return Yt(n,function(n,r,i){(e?!t(n,r,i):0>z(o,r,1))&&(u[r]=n)
|
o=t?t(u):u,pe(o,i)||(i=o,c[++f]=u);return c}function Pt(n,t,r){var e=-1,u=f,o=n.length,i=true,a=[],l=a;if(r)i=false,u=c;else if(o<200)l=t?[]:a;else{if(u=t?null:ro(n))return $(u);i=false,u=Ln,l=new Mn}n:for(;++e<o;){var s=n[e],h=t?t(s):s;if(i&&h===h){for(var p=l.length;p--;)if(l[p]===h)continue n;t&&l.push(h),a.push(s)}else u(l,h,r)||(l!==a&&l.push(h),a.push(s))}return a}function Tt(n,t,r,e){for(var u=n.length,o=e?u:-1;(e?o--:++o<u)&&t(n[o],o,n););return r?Ft(n,e?0:o,e?o+1:u):Ft(n,e?o+1:0,e?u:o)}function Kt(n,t){
|
||||||
}),u},e.once=function(n){var t,r;return function(){return t?r:(t=L,r=n.apply(this,arguments),n=Q,r)}},e.pairs=function(n){for(var t=-1,r=tr(n),e=r.length,u=Array(e);++t<e;){var o=r[t];u[t]=[o,n[o]]}return u},e.partial=function(n){return f(n,v(arguments,1))},e.partialRight=function(n){return f(n,v(arguments,1),Q,et)},e.pick=function(n,t,r){var e={};if(typeof t!="function")for(var u=0,o=dt.apply(nt,arguments),i=w(n)?o.length:0;++u<i;){var f=o[u];f in n&&(e[f]=n[f])}else t=a(t,r),Yt(n,function(n,r,u){t(n,r,u)&&(e[r]=n)
|
var r=n;return r instanceof An&&(r=r.value()),s(t,function(n,t){return t.func.apply(t.thisArg,l([n],t.args))},r)}function Gt(n,t,r){for(var e=-1,u=n.length;++e<u;)var o=o?l(ct(o,n[e],t,r),ct(n[e],o,t,r)):n[e];return o&&o.length?Pt(o,t,r):[]}function Vt(n,t,r){for(var e=-1,u=n.length,o=t.length,i={};++e<u;)r(i,n[e],o>e?t[e]:Z);return i}function Jt(n,t){if(t)return n.slice();var r=new n.constructor(n.length);return n.copy(r),r}function Yt(n){var t=new n.constructor(n.byteLength);return new bu(t).set(new bu(n)),
|
||||||
});return e},e.pluck=F,e.range=function(n,t,r){n=+n||0,r=+r||1,t==Q&&(t=n,n=0);var e=-1;t=Nt(0,mt((t-n)/r));for(var u=Array(t);++e<t;)u[e]=n,n+=r;return u},e.reject=function(n,t,r){return t=a(t,r),N(n,function(n,r,e){return!t(n,r,e)})},e.rest=P,e.shuffle=function(n){var t=-1,r=n?n.length:0,e=Array(typeof r=="number"?r:0);return $(n,function(n){var r=_t($t()*(++t+1));e[t]=e[r],e[r]=n}),e},e.sortBy=function(n,t,r){var e=-1,u=n?n.length:0,o=Array(typeof u=="number"?u:0);for(t=a(t,r),$(n,function(n,r,u){o[++e]={a:t(n,r,u),b:e,c:n}
|
t}function Ht(n,t,r,e){var u=-1,o=n.length,i=r.length,f=-1,c=t.length,a=Uu(o-i,0),l=Array(c+a);for(e=!e;++f<c;)l[f]=t[f];for(;++u<i;)(e||o>u)&&(l[r[u]]=n[u]);for(;a--;)l[f++]=n[u++];return l}function Qt(n,t,r,e){var u=-1,o=n.length,i=-1,f=r.length,c=-1,a=t.length,l=Uu(o-f,0),s=Array(l+a);for(e=!e;++u<l;)s[u]=n[u];for(l=u;++c<a;)s[l+c]=t[c];for(;++i<f;)(e||o>u)&&(s[l+r[i]]=n[u++]);return s}function Xt(n,t){var r=-1,e=n.length;for(t||(t=Array(e));++r<e;)t[r]=n[r];return t}function nr(n,t,r){return tr(n,t,r);
|
||||||
}),u=o.length,o.sort(i);u--;)o[u]=o[u].c;return o},e.tap=function(n,t){return t(n),n},e.throttle=function(n,t){function r(){f=new Date,i=Q,u=n.apply(o,e)}var e,u,o,i,f=0;return function(){var a=new Date,c=t-(a-f);return e=arguments,o=this,0<c?i||(i=setTimeout(r,c)):(clearTimeout(i),i=Q,f=a,u=n.apply(o,e)),u}},e.times=function(n,t,r){n=+n||0;for(var e=-1,u=Array(n);++e<n;)u[e]=t.call(r,e);return u},e.toArray=function(n){return n&&typeof n.length=="number"?v(n):E(n)},e.union=function(){return K(dt.apply(nt,arguments))
|
}function tr(n,t,r,e){r||(r={});for(var u=-1,o=t.length;++u<o;){var i=t[u],f=e?e(r[i],n[i],i,r,n):n[i];Yn(r,i,f)}return r}function rr(n,t){return nr(n,oo(n),t)}function er(n,t){return function(r,u){var o=Zo(r)?e:Hn,i=t?t():{};return o(r,n,kr(u),i)}}function ur(n){return he(function(t,r){var e=-1,u=r.length,o=u>1?r[u-1]:Z,i=u>2?r[2]:Z,o=typeof o=="function"?(u--,o):Z;for(i&&Mr(r[0],r[1],i)&&(o=3>u?Z:o,u=1),t=Object(t);++e<u;)(i=r[e])&&n(t,i,e,o);return t})}function or(n,t){return function(r,e){if(null==r)return r;
|
||||||
},e.uniq=K,e.values=E,e.where=N,e.without=function(n){for(var t=-1,r=n?n.length:0,e=u(arguments,1),o=[];++t<r;){var i=n[t];e(i)||o.push(i)}return o},e.wrap=function(n,t){return function(){var r=[n];return wt.apply(r,arguments),t.apply(this,r)}},e.zip=function(n){for(var t=-1,r=n?q(F(arguments,"length")):0,e=Array(r);++t<r;)e[t]=F(arguments,t);return e},e.collect=F,e.drop=P,e.each=$,e.extend=ur,e.methods=d,e.select=N,e.tail=P,e.unique=K,H(e),e.clone=m,e.cloneDeep=function(n,t,r){return m(n,L,t,r)},e.contains=S,e.escape=function(n){return n==Q?"":(n+"").replace(ht,p)
|
if(!ve(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}function ir(n){return function(t,r,e){var u=-1,o=Object(t);e=e(t);for(var i=e.length;i--;){var f=e[n?i:++u];if(false===r(o[f],f,o))break}return t}}function fr(n,t,r){function e(){return(this&&this!==Vn&&this instanceof e?o:n).apply(u?r:this,arguments)}var u=1&t,o=lr(n);return e}function cr(n){return function(t){t=Le(t);var r=En.test(t)?t.match(kn):Z,e=r?r[0]:t.charAt(0);return t=r?r.slice(1).join(""):t.slice(1),
|
||||||
},e.every=k,e.find=R,e.has=function(n,t){return n?jt.call(n,t):W},e.identity=G,e.indexOf=z,e.isArguments=h,e.isArray=nr,e.isBoolean=function(n){return n===L||n===W||xt.call(n)==Dt},e.isDate=function(n){return n instanceof Date||xt.call(n)==It},e.isElement=function(n){return n?1===n.nodeType:W},e.isEmpty=function(n){var t=L;if(!n)return t;var r=xt.call(n),e=n.length;return r==qt||r==zt||r==Ft||r==Bt&&typeof e=="number"&&j(n.splice)?!e:(Zt(n,function(){return t=W}),t)},e.isEqual=b,e.isFinite=function(n){return Et(n)&&!St(parseFloat(n))
|
e[n]()+t}}function ar(n){return function(t){return s(Ve(Ke(t)),n,"")}}function lr(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=it(n.prototype),t=n.apply(r,t);return je(t)?t:r}}function sr(n,t,e){
|
||||||
},e.isFunction=j,e.isNaN=function(n){return x(n)&&n!=+n},e.isNull=function(n){return n===Q},e.isNumber=x,e.isObject=w,e.isPlainObject=r,e.isRegExp=function(n){return n instanceof RegExp||xt.call(n)==Mt},e.isString=A,e.isUndefined=function(n){return typeof n=="undefined"},e.lastIndexOf=function(n,t,r){var e=n?n.length:0;for(typeof r=="number"&&(e=(0>r?Nt(0,e+r):Rt(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},e.mixin=H,e.noConflict=function(){return n._=ot,this},e.random=function(n,t){return n==Q&&t==Q&&(t=1),n=+n||0,t==Q&&(t=n,n=0),n+_t($t()*((+t||0)-n+1))
|
function u(){for(var i=arguments.length,f=Array(i),c=i,a=Sr(u);c--;)f[c]=arguments[c];return c=3>i&&f[0]!==a&&f[i-1]!==a?[]:L(f,a),i-=c.length,e>i?br(n,t,pr,u.placeholder,Z,f,c,Z,Z,e-i):r(this&&this!==Vn&&this instanceof u?o:n,this,f)}var o=lr(n);return u}function hr(n){return he(function(t){t=st(t,1);var r=t.length,e=r,u=wn.prototype.thru;for(n&&t.reverse();e--;){var o=t[e];if(typeof o!="function")throw new iu("Expected a function");if(u&&!i&&"wrapper"==Or(o))var i=new wn([],true)}for(e=i?e:r;++e<r;)var o=t[e],u=Or(o),f="wrapper"==u?eo(o):Z,i=f&&Fr(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?i[Or(f[0])].apply(i,f[3]):1==o.length&&Fr(o)?i[u]():i.thru(o);
|
||||||
},e.reduce=D,e.reduceRight=I,e.result=function(n,r){var e=n?n[r]:t;return j(e)?n[r]():e},e.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:tr(n).length},e.some=T,e.sortedIndex=C,e.template=function(n,r,u){var o=e.templateSettings;n||(n=""),u=or({},u,o);var i,f=or({},u.imports,o.imports),o=tr(f),f=E(f),a=0,c=u.interpolate||gt,p="__p+='";n.replace(RegExp((u.escape||gt).source+"|"+c.source+"|"+(c===vt?st:gt).source+"|"+(u.evaluate||gt).source+"|$","g"),function(t,r,e,u,o,f){return e||(e=u),p+=n.slice(a,f).replace(yt,l),r&&(p+="'+__e("+r+")+'"),o&&(i=L,p+="';"+o+";__p+='"),e&&(p+="'+((__t=("+e+"))==null?'':__t)+'"),a=f+t.length,t
|
return function(){var n=arguments,e=n[0];if(i&&1==n.length&&Zo(e)&&e.length>=200)return i.plant(e).value();for(var u=0,n=r?t[u].apply(this,n):e;++u<r;)n=t[u].call(this,n);return n}})}function pr(n,t,r,e,u,o,i,f,c,a){function l(){for(var d=arguments.length,y=d,b=Array(d);y--;)b[y]=arguments[y];if(_){var x,m=Sr(l),y=b.length;for(x=0;y--;)b[y]===m&&x++}if(e&&(b=Ht(b,e,u,_)),o&&(b=Qt(b,o,i,_)),d-=x,_&&a>d)return m=L(b,m),br(n,t,pr,l.placeholder,r,b,m,f,c,a-d);if(m=h?r:this,y=p?m[n]:n,d=b.length,f){x=b.length;
|
||||||
}),p+="';\n",c=u=u.variable,c||(u="obj",p="with("+u+"){"+p+"}"),p=(i?p.replace(ft,""):p).replace(at,"$1").replace(ct,"$1;"),p="function("+u+"){"+(c?"":u+"||("+u+"={});")+"var __t,__p='',__e=_.escape"+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+p+"return __p}";try{var s=Function(o,"return "+p).apply(t,f)}catch(v){throw v.source=p,v}return r?s(r):(s.source=p,s)},e.unescape=function(n){return n==Q?"":(n+"").replace(it,g)},e.uniqueId=function(n){var t=++rt;return(n==Q?"":n+"")+t
|
for(var j=zu(f.length,x),w=Xt(b);j--;){var A=f[j];b[j]=U(A,x)?w[A]:Z}}else g&&d>1&&b.reverse();return s&&d>c&&(b.length=c),this&&this!==Vn&&this instanceof l&&(y=v||lr(y)),y.apply(m,b)}var s=128&t,h=1&t,p=2&t,_=24&t,g=512&t,v=p?Z:lr(n);return l}function _r(n,t){return function(r,e){return xt(r,n,t(e),{})}}function gr(n){return he(function(t){return t=a(st(t,1),kr()),he(function(e){var u=this;return n(t,function(n){return r(n,u,e)})})})}function vr(n,t,r){return t=Ce(t),n=F(n),t&&t>n?(t-=n,r=r===Z?" ":r+"",
|
||||||
},e.all=k,e.any=T,e.detect=R,e.foldl=D,e.foldr=I,e.include=S,e.inject=D,Zt(e,function(n,t){e.prototype[t]||(e.prototype[t]=function(){var t=[this.__wrapped__];return wt.apply(t,arguments),n.apply(e,t)})}),e.first=B,e.last=function(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=Q){var o=u;for(t=a(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,e==Q||r)return n[u-1];return v(n,Nt(0,u-e))}},e.take=B,e.head=B,Zt(e,function(n,t){e.prototype[t]||(e.prototype[t]=function(t,r){var u=n(this.__wrapped__,t,r);
|
n=Ge(r,Su(t/F(r))),En.test(r)?n.match(kn).slice(0,t).join(""):n.slice(0,t)):""}function dr(n,t,e,u){function o(){for(var t=-1,c=arguments.length,a=-1,l=u.length,s=Array(l+c),h=this&&this!==Vn&&this instanceof o?f:n;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++t];return r(h,i?e:this,s)}var i=1&t,f=lr(n);return o}function yr(n){return function(t,r,e){e&&typeof e!="number"&&Mr(t,r,e)&&(r=e=Z),t=ze(t),t=t===t?t:0,r===Z?(r=t,t=0):r=ze(r)||0,e=e===Z?r>t?1:-1:ze(e)||0;var u=-1;r=Uu(Su((r-t)/(e||1)),0);for(var o=Array(r);r--;)o[n?r:++u]=t,
|
||||||
return t==Q||r&&typeof t!="function"?u:new e(u)})}),e.VERSION="1.0.1",e.prototype.toString=function(){return this.__wrapped__+""},e.prototype.value=J,e.prototype.valueOf=J,Xt(["join","pop","shift"],function(n){var t=nt[n];e.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),Xt(["push","reverse","sort","unshift"],function(n){var t=nt[n];e.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),Xt(["concat","slice","splice"],function(n){var t=nt[n];e.prototype[n]=function(){return new e(t.apply(this.__wrapped__,arguments))
|
t+=e;return o}}function br(n,t,r,e,u,o,i,f,c,a){var l=8&t;f=f?Xt(f):Z;var s=l?i:Z;i=l?Z:i;var h=l?o:Z;return o=l?Z:o,t=(t|(l?32:64))&~(l?64:32),4&t||(t&=-4),t=[n,t,u,h,s,o,i,f,c,a],r=r.apply(Z,t),Fr(n)&&io(r,t),r.placeholder=e,r}function xr(n){var t=uu[n];return function(n,r){if(n=ze(n),r=Ce(r)){var e=(Le(n)+"e").split("e"),e=t(e[0]+"e"+(+e[1]+r)),e=(Le(e)+"e").split("e");return+(e[0]+"e"+(+e[1]-r))}return t(n)}}function mr(n,t,r,e,u,o,i,f){var c=2&t;if(!c&&typeof n!="function")throw new iu("Expected a function");
|
||||||
}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=e,define(function(){return e})):X?Y?(Y.exports=e)._=e:X._=e:n._=e})(this);
|
var a=e?e.length:0;if(a||(t&=-97,e=u=Z),i=i===Z?i:Uu(Ce(i),0),f=f===Z?f:Ce(f),a-=u?u.length:0,64&t){var l=e,s=u;e=u=Z}var h=c?Z:eo(n);return o=[n,t,r,e,u,l,s,o,i,f],h&&(r=o[1],n=h[1],t=r|n,e=128==n&&8==r||128==n&&256==r&&h[8]>=o[7].length||384==n&&h[8]>=h[7].length&&8==r,131>t||e)&&(1&n&&(o[2]=h[2],t|=1&r?0:4),(r=h[3])&&(e=o[3],o[3]=e?Ht(e,r,h[4]):Xt(r),o[4]=e?L(o[3],"__lodash_placeholder__"):Xt(h[4])),(r=h[5])&&(e=o[5],o[5]=e?Qt(e,r,h[6]):Xt(r),o[6]=e?L(o[5],"__lodash_placeholder__"):Xt(h[6])),(r=h[7])&&(o[7]=Xt(r)),
|
||||||
|
128&n&&(o[8]=null==o[8]?h[8]:zu(o[8],h[8])),null==o[9]&&(o[9]=h[9]),o[0]=h[0],o[1]=t),n=o[0],t=o[1],r=o[2],e=o[3],u=o[4],f=o[9]=null==o[9]?c?0:n.length:Uu(o[9]-a,0),!f&&24&t&&(t&=-25),c=t&&1!=t?8==t||16==t?sr(n,t,f):32!=t&&33!=t||u.length?pr.apply(Z,o):dr(n,t,r,e):fr(n,t,r),(h?to:io)(c,o)}function jr(n,t,r,e,u,o){var i=-1,f=2&u,c=1&u,a=n.length,l=t.length;if(!(a==l||f&&l>a))return false;if(l=o.get(n))return l==t;for(l=true,o.set(n,t);++i<a;){var s=n[i],h=t[i];if(e)var _=f?e(h,s,i,t,n,o):e(s,h,i,n,t,o);if(_!==Z){
|
||||||
|
if(_)continue;l=false;break}if(c){if(!p(t,function(n){return s===n||r(s,n,e,u,o)})){l=false;break}}else if(s!==h&&!r(s,h,e,u,o)){l=false;break}}return o["delete"](n),l}function wr(n,t,r,e,u,o){switch(r){case"[object ArrayBuffer]":if(n.byteLength!=t.byteLength||!e(new bu(n),new bu(t)))break;return true;case"[object Boolean]":case"[object Date]":return+n==+t;case"[object Error]":return n.name==t.name&&n.message==t.message;case"[object Number]":return n!=+n?t!=+t:n==+t;case"[object RegExp]":case"[object String]":
|
||||||
|
return n==t+"";case"[object Map]":var i=M;case"[object Set]":return i||(i=$),(2&o||n.size==t.size)&&e(i(n),i(t),u,1|o);case"[object Symbol]":return!!yu&&Vu.call(n)==Vu.call(t)}return false}function Ar(n,t,r,e,u,o){var i=2&u,f=De(n),c=f.length,a=De(t).length;if(c!=a&&!i)return false;for(var l=c;l--;){var s=f[l];if(!(i?s in t:dt(t,s)))return false}if(a=o.get(n))return a==t;a=true,o.set(n,t);for(var h=i;++l<c;){var s=f[l],p=n[s],_=t[s];if(e)var g=i?e(_,p,s,t,n,o):e(p,_,s,n,t,o);if(g===Z?p!==_&&!r(p,_,e,u,o):!g){a=false;
|
||||||
|
break}h||(h="constructor"==s)}return a&&!h&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(a=false)),o["delete"](n),a}function Or(n){for(var t=n.name+"",r=Yu[t],e=lu.call(Yu,t)?r.length:0;e--;){var u=r[e],o=u.func;if(null==o||o==n)return u.name}return t}function kr(){var n=yn.iteratee||He,n=n===He?At:n;return arguments.length?n(arguments[0],arguments[1]):n}function Er(n){n=qe(n);for(var t=n.length;t--;){
|
||||||
|
var r,e=n[t];r=n[t][1],r=r===r&&!je(r),e[2]=r}return n}function Ir(n,t){var r=null==n?Z:n[t];return Ae(r)?r:Z}function Sr(n){return(lu.call(yn,"placeholder")?yn:n).placeholder}function Rr(n){return pu.call(n)}function Wr(n,t,r){if(null==n)return false;var e=r(n,t);return e||Lr(t)||(t=rt(t),n=Zr(n,t),null!=n&&(t=Vr(t),e=r(n,t))),r=n?n.length:Z,e||!!r&&me(r)&&U(t,r)&&(Zo(n)||Ie(n)||ge(n))}function Br(n){var t=n.length,r=n.constructor(t);return t&&"string"==typeof n[0]&&lu.call(n,"index")&&(r.index=n.index,
|
||||||
|
r.input=n.input),r}function Cr(n){return be(n.constructor)&&!Nr(n)?it(ju(n)):{}}function Ur(r,e,u){var o=r.constructor;switch(e){case"[object ArrayBuffer]":return Yt(r);case"[object Boolean]":case"[object Date]":return new o(+r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return e=r.buffer,u=u?Yt(e):e,
|
||||||
|
new r.constructor(u,r.byteOffset,r.length);case"[object Map]":return u=r.constructor,s(M(r),n,new u);case"[object Number]":case"[object String]":return new o(r);case"[object RegExp]":return u=new r.constructor(r.source,hn.exec(r)),u.lastIndex=r.lastIndex,u;case"[object Set]":return u=r.constructor,s($(r),t,new u);case"[object Symbol]":return yu?Object(Vu.call(r)):{}}}function zr(n){var t=n?n.length:Z;return me(t)&&(Zo(n)||Ie(n)||ge(n))?m(t,String):null}function Mr(n,t,r){if(!je(r))return false;var e=typeof t;
|
||||||
|
return("number"==e?ve(r)&&U(t,r.length):"string"==e&&t in r)?pe(r[t],n):false}function Lr(n,t){return typeof n=="number"?true:!Zo(n)&&(rn.test(n)||!tn.test(n)||null!=t&&n in Object(t))}function $r(n){var t=typeof n;return"number"==t||"boolean"==t||"string"==t&&"__proto__"!=n||null==n}function Fr(n){var t=Or(n),r=yn[t];return typeof r=="function"&&t in An.prototype?n===r?true:(t=eo(r),!!t&&n===t[0]):false}function Nr(n){var t=n&&n.constructor,t=be(t)&&t.prototype||cu;return n===t}function Dr(n,t,r,e,u,o){return je(n)&&je(t)&&(o.set(t,n),
|
||||||
|
St(n,t,Z,Dr,o)),n}function Zr(n,t){return 1==t.length?n:$e(n,Ft(t,0,-1))}function qr(n){var t=[];return Le(n).replace(en,function(n,r,e,u){t.push(e?u.replace(ln,"$1"):r||n)}),t}function Pr(n){if(n instanceof An)return n.clone();var t=new wn(n.__wrapped__,n.__chain__);return t.__actions__=Xt(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function Tr(n,t,r){var e=n?n.length:0;return e?(t=r||t===Z?1:Ce(t),Ft(n,0>t?0:t,e)):[]}function Kr(n,t,r){var e=n?n.length:0;return e?(t=r||t===Z?1:Ce(t),
|
||||||
|
t=e-t,Ft(n,0,0>t?0:t)):[]}function Gr(n){return n?n[0]:Z}function Vr(n){var t=n?n.length:0;return t?n[t-1]:Z}function Jr(n,t){return n&&n.length&&t&&t.length?zt(n,t):n}function Yr(n){return n?$u.call(n):n}function Hr(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){return de(n)?(t=Uu(n.length,t),true):void 0}),m(t,function(t){return a(n,Ct(t))})}function Qr(n,t){if(!n||!n.length)return[];var e=Hr(n);return null==t?e:a(e,function(n){return r(t,Z,n)})}function Xr(n){return n=yn(n),n.__chain__=true,
|
||||||
|
n}function ne(n,t){return t(n)}function te(){return this}function re(n,t){return typeof t=="function"&&Zo(n)?u(n,t):Hu(n,tt(t))}function ee(n,t){var r;if(typeof t=="function"&&Zo(n)){for(r=n.length;r--&&false!==t(n[r],r,n););r=n}else r=Qu(n,tt(t));return r}function ue(n,t){return(Zo(n)?a:kt)(n,kr(t,3))}function oe(n,t){var r=-1,e=Be(n),u=e.length,o=u-1;for(t=et(Ce(t),0,u);++r<t;){var u=Lt(r,o),i=e[u];e[u]=e[r],e[r]=i}return e.length=t,e}function ie(n,t,r){return t=r?Z:t,t=n&&null==t?n.length:t,mr(n,128,Z,Z,Z,Z,t);
|
||||||
|
}function fe(n,t){var r;if(typeof t!="function")throw new iu("Expected a function");return n=Ce(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=Z),r}}function ce(n,t,r){return t=r?Z:t,n=mr(n,8,Z,Z,Z,Z,Z,t),n.placeholder=ce.placeholder,n}function ae(n,t,r){return t=r?Z:t,n=mr(n,16,Z,Z,Z,Z,Z,t),n.placeholder=ae.placeholder,n}function le(n,t,r){function e(){p&&xu(p),a&&xu(a),g=0,c=a=h=p=_=Z}function u(t,r){r&&xu(r),a=p=_=Z,t&&(g=Co(),l=n.apply(h,c),p||a||(c=h=Z))}function o(){var n=t-(Co()-s);
|
||||||
|
0>=n||n>t?u(_,a):p=Eu(o,n)}function i(){u(y,p)}function f(){if(c=arguments,s=Co(),h=this,_=y&&(p||!v),false===d)var r=v&&!p;else{g||a||v||(g=s);var e=d-(s-g),u=(0>=e||e>d)&&(v||a);u?(a&&(a=xu(a)),g=s,l=n.apply(h,c)):a||(a=Eu(i,e))}return u&&p?p=xu(p):p||t===d||(p=Eu(o,t)),r&&(u=true,l=n.apply(h,c)),!u||p||a||(c=h=Z),l}var c,a,l,s,h,p,_,g=0,v=false,d=false,y=true;if(typeof n!="function")throw new iu("Expected a function");return t=ze(t)||0,je(r)&&(v=!!r.leading,d="maxWait"in r&&Uu(ze(r.maxWait)||0,t),y="trailing"in r?!!r.trailing:y),
|
||||||
|
f.cancel=e,f.flush=function(){return(p&&_||a&&y)&&(l=n.apply(h,c)),e(),l},f}function se(n,t){if(typeof n!="function"||t&&typeof t!="function")throw new iu("Expected a function");var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],o=r.cache;return o.has(u)?o.get(u):(e=n.apply(this,e),r.cache=o.set(u,e),e)};return r.cache=new se.Cache,r}function he(n,t){if(typeof n!="function")throw new iu("Expected a function");return t=Uu(t===Z?n.length-1:Ce(t),0),function(){for(var e=arguments,u=-1,o=Uu(e.length-t,0),i=Array(o);++u<o;)i[u]=e[t+u];
|
||||||
|
switch(t){case 0:return n.call(this,i);case 1:return n.call(this,e[0],i);case 2:return n.call(this,e[0],e[1],i)}for(o=Array(t+1),u=-1;++u<t;)o[u]=e[u];return o[t]=i,r(n,this,o)}}function pe(n,t){return n===t||n!==n&&t!==t}function _e(n,t){return n>t}function ge(n){return de(n)&&lu.call(n,"callee")&&(!ku.call(n,"callee")||"[object Arguments]"==pu.call(n))}function ve(n){return null!=n&&!(typeof n=="function"&&be(n))&&me(uo(n))}function de(n){return we(n)&&ve(n)}function ye(n){return we(n)?"[object Error]"==pu.call(n)||typeof n.message=="string"&&typeof n.name=="string":false;
|
||||||
|
}function be(n){return n=je(n)?pu.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n}function xe(n){return typeof n=="number"&&n==Ce(n)}function me(n){return typeof n=="number"&&n>-1&&0==n%1&&9007199254740991>=n}function je(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function we(n){return!!n&&typeof n=="object"}function Ae(n){return null==n?false:be(n)?gu.test(au.call(n)):we(n)&&(C(n)?gu:vn).test(n)}function Oe(n){return typeof n=="number"||we(n)&&"[object Number]"==pu.call(n);
|
||||||
|
}function ke(n){return!we(n)||"[object Object]"!=pu.call(n)||C(n)?false:(n=ju(n),null===n?true:(n=n.constructor,typeof n=="function"&&n instanceof n&&au.call(n)==hu))}function Ee(n){return je(n)&&"[object RegExp]"==pu.call(n)}function Ie(n){return typeof n=="string"||!Zo(n)&&we(n)&&"[object String]"==pu.call(n)}function Se(n){return typeof n=="symbol"||we(n)&&"[object Symbol]"==pu.call(n)}function Re(n){return we(n)&&me(n.length)&&!!Bn[pu.call(n)]}function We(n,t){return t>n}function Be(n){if(!n)return[];
|
||||||
|
if(ve(n))return Ie(n)?n.match(kn):Xt(n);if(Au&&n[Au])return z(n[Au]());var t=Rr(n);return("[object Map]"==t?M:"[object Set]"==t?$:Pe)(n)}function Ce(n){if(!n)return 0===n?n:0;if(n=ze(n),n===q||n===-q)return 1.7976931348623157e308*(0>n?-1:1);var t=n%1;return n===n?t?n-t:n:0}function Ue(n){return n?et(Ce(n),0,4294967295):0}function ze(n){if(je(n)&&(n=be(n.valueOf)?n.valueOf():n,n=je(n)?n+"":n),typeof n!="string")return 0===n?n:+n;n=n.replace(fn,"");var t=gn.test(n);return t||dn.test(n)?Nn(n.slice(2),t?2:8):_n.test(n)?P:+n;
|
||||||
|
}function Me(n){return nr(n,Ze(n))}function Le(n){if(typeof n=="string")return n;if(null==n)return"";if(Se(n))return yu?Ju.call(n):"";var t=n+"";return"0"==t&&1/n==-q?"-0":t}function $e(n,t,r){return n=null==n?Z:vt(n,t),n===Z?r:n}function Fe(n,t){return Wr(n,t,dt)}function Ne(n,t){return Wr(n,t,yt)}function De(n){var t=Nr(n);if(!t&&!ve(n))return Cu(Object(n));var r,e=zr(n),u=!!e,e=e||[],o=e.length;for(r in n)!dt(n,r)||u&&("length"==r||U(r,o))||t&&"constructor"==r||e.push(r);return e}function Ze(n){
|
||||||
|
for(var t=-1,r=Nr(n),e=Ot(n),u=e.length,o=zr(n),i=!!o,o=o||[],f=o.length;++t<u;){var c=e[t];i&&("length"==c||U(c,f))||"constructor"==c&&(r||!lu.call(n,c))||o.push(c)}return o}function qe(n){return j(n,De(n))}function Pe(n){return n?A(n,De(n)):[]}function Te(n){return ci(Le(n).toLowerCase())}function Ke(n){return(n=Le(n))&&n.replace(bn,S).replace(On,"")}function Ge(n,t){n=Le(n),t=Ce(t);var r="";if(!n||1>t||t>9007199254740991)return r;do t%2&&(r+=n),t=Ru(t/2),n+=n;while(t);return r}function Ve(n,t,r){
|
||||||
|
return n=Le(n),t=r?Z:t,t===Z&&(t=Rn.test(n)?Sn:In),n.match(t)||[]}function Je(n){return function(){return n}}function Ye(n){return n}function He(n){return At(typeof n=="function"?n:ut(n,true))}function Qe(n,t,r){var e=De(t),o=gt(t,e);null!=r||je(t)&&(o.length||!e.length)||(r=t,t=n,n=this,o=gt(t,De(t)));var i=je(r)&&"chain"in r?r.chain:true,f=be(n);return u(o,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;if(i||t){var r=n(this.__wrapped__);return(r.__actions__=Xt(this.__actions__)).push({
|
||||||
|
func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,l([this.value()],arguments))})}),n}function Xe(){}function nu(n){return Lr(n)?Ct(n):Ut(n)}function tu(n){return n&&n.length?x(n,Ye):0}E=E?Jn.defaults({},E,Jn.pick(Vn,Wn)):Vn;var ru=E.Date,eu=E.Error,uu=E.Math,ou=E.RegExp,iu=E.TypeError,fu=E.Array.prototype,cu=E.Object.prototype,au=E.Function.prototype.toString,lu=cu.hasOwnProperty,su=0,hu=au.call(Object),pu=cu.toString,_u=Vn._,gu=ou("^"+au.call(lu).replace(un,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),vu=qn?E.Buffer:Z,du=E.Reflect,yu=E.Symbol,bu=E.Uint8Array,xu=E.clearTimeout,mu=du?du.enumerate:Z,ju=Object.getPrototypeOf,wu=Object.getOwnPropertySymbols,Au=typeof(Au=yu&&yu.iterator)=="symbol"?Au:Z,Ou=Object.create,ku=cu.propertyIsEnumerable,Eu=E.setTimeout,Iu=fu.splice,Su=uu.ceil,Ru=uu.floor,Wu=E.isFinite,Bu=fu.join,Cu=Object.keys,Uu=uu.max,zu=uu.min,Mu=E.parseInt,Lu=uu.random,$u=fu.reverse,Fu=Ir(E,"Map"),Nu=Ir(E,"Set"),Du=Ir(E,"WeakMap"),Zu=Ir(Object,"create"),qu=Du&&new Du,Pu=Fu?au.call(Fu):"",Tu=Nu?au.call(Nu):"",Ku=Du?au.call(Du):"",Gu=yu?yu.prototype:Z,Vu=yu?Gu.valueOf:Z,Ju=yu?Gu.toString:Z,Yu={};
|
||||||
|
yn.templateSettings={escape:Q,evaluate:X,interpolate:nn,variable:"",imports:{_:yn}};var Hu=or(pt),Qu=or(_t,true),Xu=ir(),no=ir(true);mu&&!ku.call({valueOf:1},"valueOf")&&(Ot=function(n){return z(mu(n))});var to=qu?function(n,t){return qu.set(n,t),n}:Ye,ro=Nu&&2===new Nu([1,2]).size?function(n){return new Nu(n)}:Xe,eo=qu?function(n){return qu.get(n)}:Xe,uo=Ct("length"),oo=wu||function(){return[]};(Fu&&"[object Map]"!=Rr(new Fu)||Nu&&"[object Set]"!=Rr(new Nu)||Du&&"[object WeakMap]"!=Rr(new Du))&&(Rr=function(n){
|
||||||
|
var t=pu.call(n);if(n="[object Object]"==t?n.constructor:null,n=typeof n=="function"?au.call(n):"")switch(n){case Pu:return"[object Map]";case Tu:return"[object Set]";case Ku:return"[object WeakMap]"}return t});var io=function(){var n=0,t=0;return function(r,e){var u=Co(),o=16-(u-t);if(t=u,o>0){if(150<=++n)return r}else n=0;return to(r,e)}}(),fo=he(function(n,t){Zo(n)||(n=null==n?[]:[Object(n)]),t=st(t,1);for(var r=n,e=t,u=-1,o=r.length,i=-1,f=e.length,c=Array(o+f);++u<o;)c[u]=r[u];for(;++i<f;)c[u++]=e[i];
|
||||||
|
return c}),co=he(function(n,t){return de(n)?ct(n,st(t,1,true)):[]}),ao=he(function(n,t){var r=Vr(t);return de(r)&&(r=Z),de(n)?ct(n,st(t,1,true),kr(r)):[]}),lo=he(function(n,t){var r=Vr(t);return de(r)&&(r=Z),de(n)?ct(n,st(t,1,true),Z,r):[]}),so=he(function(n){var t=a(n,nt);return t.length&&t[0]===n[0]?bt(t):[]}),ho=he(function(n){var t=Vr(n),r=a(n,nt);return t===Vr(r)?t=Z:r.pop(),r.length&&r[0]===n[0]?bt(r,kr(t)):[]}),po=he(function(n){var t=Vr(n),r=a(n,nt);return t===Vr(r)?t=Z:r.pop(),r.length&&r[0]===n[0]?bt(r,Z,t):[];
|
||||||
|
}),_o=he(Jr),go=he(function(n,t){t=a(st(t,1),String);var r=Xn(n,t);return Mt(n,t.sort(I)),r}),vo=he(function(n){return Pt(st(n,1,true))}),yo=he(function(n){var t=Vr(n);return de(t)&&(t=Z),Pt(st(n,1,true),kr(t))}),bo=he(function(n){var t=Vr(n);return de(t)&&(t=Z),Pt(st(n,1,true),Z,t)}),xo=he(function(n,t){return de(n)?ct(n,t):[]}),mo=he(function(n){return Gt(i(n,de))}),jo=he(function(n){var t=Vr(n);return de(t)&&(t=Z),Gt(i(n,de),kr(t))}),wo=he(function(n){var t=Vr(n);return de(t)&&(t=Z),Gt(i(n,de),Z,t)}),Ao=he(Hr),Oo=he(function(n){
|
||||||
|
var t=n.length,t=t>1?n[t-1]:Z,t=typeof t=="function"?(n.pop(),t):Z;return Qr(n,t)}),ko=he(function(n){n=st(n,1);var t=n.length,r=t?n[0]:0,e=this.__wrapped__,u=function(t){return Xn(t,n)};return 1>=t&&!this.__actions__.length&&e instanceof An&&U(r)?(e=e.slice(r,+r+(t?1:0)),e.__actions__.push({func:ne,args:[u],thisArg:Z}),new wn(e,this.__chain__).thru(function(n){return t&&!n.length&&n.push(Z),n})):this.thru(u)}),Eo=er(function(n,t,r){lu.call(n,r)?++n[r]:n[r]=1}),Io=er(function(n,t,r){lu.call(n,r)?n[r].push(t):n[r]=[t];
|
||||||
|
}),So=he(function(n,t,e){var u=-1,o=typeof t=="function",i=Lr(t),f=ve(n)?Array(n.length):[];return Hu(n,function(n){var c=o?t:i&&null!=n?n[t]:Z;f[++u]=c?r(c,n,e):mt(n,t,e)}),f}),Ro=er(function(n,t,r){n[r]=t}),Wo=er(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Bo=he(function(n,t){if(null==n)return[];var r=t.length;return r>1&&Mr(n,t[0],t[1])?t=[]:r>2&&Mr(t[0],t[1],t[2])&&(t.length=1),Rt(n,st(t,1),[])}),Co=ru.now,Uo=he(function(n,t,r){var e=1;if(r.length)var u=L(r,Sr(Uo)),e=32|e;return mr(n,e,t,r,u);
|
||||||
|
}),zo=he(function(n,t,r){var e=3;if(r.length)var u=L(r,Sr(zo)),e=32|e;return mr(t,e,n,r,u)}),Mo=he(function(n,t){return ft(n,1,t)}),Lo=he(function(n,t,r){return ft(n,ze(t)||0,r)}),$o=he(function(n,t){t=a(st(t,1),kr());var e=t.length;return he(function(u){for(var o=-1,i=zu(u.length,e);++o<i;)u[o]=t[o].call(this,u[o]);return r(n,this,u)})}),Fo=he(function(n,t){var r=L(t,Sr(Fo));return mr(n,32,Z,t,r)}),No=he(function(n,t){var r=L(t,Sr(No));return mr(n,64,Z,t,r)}),Do=he(function(n,t){return mr(n,256,Z,Z,Z,st(t,1));
|
||||||
|
}),Zo=Array.isArray,qo=vu?function(n){return n instanceof vu}:Je(false),Po=ur(function(n,t){nr(t,De(t),n)}),To=ur(function(n,t){nr(t,Ze(t),n)}),Ko=ur(function(n,t,r,e){tr(t,Ze(t),n,e)}),Go=ur(function(n,t,r,e){tr(t,De(t),n,e)}),Vo=he(function(n,t){return Xn(n,st(t,1))}),Jo=he(function(n){return n.push(Z,Kn),r(Ko,Z,n)}),Yo=he(function(n){return n.push(Z,Dr),r(ti,Z,n)}),Ho=_r(function(n,t,r){n[t]=r},Je(Ye)),Qo=_r(function(n,t,r){lu.call(n,t)?n[t].push(r):n[t]=[r]},kr),Xo=he(mt),ni=ur(function(n,t,r){St(n,t,r);
|
||||||
|
}),ti=ur(function(n,t,r,e){St(n,t,r,e)}),ri=he(function(n,t){return null==n?{}:(t=a(st(t,1),String),Wt(n,ct(Ze(n),t)))}),ei=he(function(n,t){return null==n?{}:Wt(n,st(t,1))}),ui=ar(function(n,t,r){return t=t.toLowerCase(),n+(r?Te(t):t)}),oi=ar(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),ii=ar(function(n,t,r){return n+(r?" ":"")+t.toLowerCase()}),fi=cr("toLowerCase"),ci=cr("toUpperCase"),ai=ar(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),li=ar(function(n,t,r){return n+(r?" ":"")+Te(t);
|
||||||
|
}),si=ar(function(n,t,r){return n+(r?" ":"")+t.toUpperCase()}),hi=he(function(n,t){try{return r(n,Z,t)}catch(e){return ye(e)?e:new eu(e)}}),pi=he(function(n,t){return u(st(t,1),function(t){n[t]=Uo(n[t],n)}),n}),_i=hr(),gi=hr(true),vi=he(function(n,t){return function(r){return mt(r,n,t)}}),di=he(function(n,t){return function(r){return mt(n,r,t)}}),yi=gr(a),bi=gr(o),xi=gr(p),mi=yr(),ji=yr(true),wi=xr("ceil"),Ai=xr("floor"),Oi=xr("round");return yn.prototype=jn.prototype,wn.prototype=it(jn.prototype),wn.prototype.constructor=wn,
|
||||||
|
An.prototype=it(jn.prototype),An.prototype.constructor=An,Un.prototype=Zu?Zu(null):cu,zn.prototype.clear=function(){this.__data__={hash:new Un,map:Fu?new Fu:[],string:new Un}},zn.prototype["delete"]=function(n){var t=this.__data__;return $r(n)?(t=typeof n=="string"?t.string:t.hash,(Zu?t[n]!==Z:lu.call(t,n))&&delete t[n]):Fu?t.map["delete"](n):Dn(t.map,n)},zn.prototype.get=function(n){var t=this.__data__;return $r(n)?(t=typeof n=="string"?t.string:t.hash,Zu?(n=t[n],n="__lodash_hash_undefined__"===n?Z:n):n=lu.call(t,n)?t[n]:Z,
|
||||||
|
n):Fu?t.map.get(n):Zn(t.map,n)},zn.prototype.has=function(n){var t=this.__data__;return $r(n)?(t=typeof n=="string"?t.string:t.hash,n=Zu?t[n]!==Z:lu.call(t,n)):n=Fu?t.map.has(n):-1<Pn(t.map,n),n},zn.prototype.set=function(n,t){var r=this.__data__;return $r(n)?(typeof n=="string"?r.string:r.hash)[n]=Zu&&t===Z?"__lodash_hash_undefined__":t:Fu?r.map.set(n,t):Tn(r.map,n,t),this},Mn.prototype.push=function(n){var t=this.__data__;$r(n)?(t=t.__data__,(typeof n=="string"?t.string:t.hash)[n]="__lodash_hash_undefined__"):t.set(n,"__lodash_hash_undefined__");
|
||||||
|
},$n.prototype.clear=function(){this.__data__={array:[],map:null}},$n.prototype["delete"]=function(n){var t=this.__data__,r=t.array;return r?Dn(r,n):t.map["delete"](n)},$n.prototype.get=function(n){var t=this.__data__,r=t.array;return r?Zn(r,n):t.map.get(n)},$n.prototype.has=function(n){var t=this.__data__,r=t.array;return r?-1<Pn(r,n):t.map.has(n)},$n.prototype.set=function(n,t){var r=this.__data__,e=r.array;return e&&(199>e.length?Tn(e,n,t):(r.array=null,r.map=new zn(e))),(r=r.map)&&r.set(n,t),
|
||||||
|
this},se.Cache=zn,yn.after=function(n,t){if(typeof t!="function")throw new iu("Expected a function");return n=Ce(n),function(){return 1>--n?t.apply(this,arguments):void 0}},yn.ary=ie,yn.assign=Po,yn.assignIn=To,yn.assignInWith=Ko,yn.assignWith=Go,yn.at=Vo,yn.before=fe,yn.bind=Uo,yn.bindAll=pi,yn.bindKey=zo,yn.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return Zo(n)?n:[n]},yn.chain=Xr,yn.chunk=function(n,t){t=Uu(Ce(t),0);var r=n?n.length:0;if(!r||1>t)return[];for(var e=0,u=-1,o=Array(Su(r/t));r>e;)o[++u]=Ft(n,e,e+=t);
|
||||||
|
return o},yn.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var o=n[t];o&&(u[++e]=o)}return u},yn.concat=fo,yn.cond=function(n){var t=n?n.length:0,e=kr();return n=t?a(n,function(n){if("function"!=typeof n[1])throw new iu("Expected a function");return[e(n[0]),n[1]]}):[],he(function(e){for(var u=-1;++u<t;){var o=n[u];if(r(o[0],this,e))return r(o[1],this,e)}})},yn.conforms=function(n){return ot(ut(n,true))},yn.constant=Je,yn.countBy=Eo,yn.create=function(n,t){var r=it(n);return t?Qn(r,t):r;
|
||||||
|
},yn.curry=ce,yn.curryRight=ae,yn.debounce=le,yn.defaults=Jo,yn.defaultsDeep=Yo,yn.defer=Mo,yn.delay=Lo,yn.difference=co,yn.differenceBy=ao,yn.differenceWith=lo,yn.drop=Tr,yn.dropRight=Kr,yn.dropRightWhile=function(n,t){return n&&n.length?Tt(n,kr(t,3),true,true):[]},yn.dropWhile=function(n,t){return n&&n.length?Tt(n,kr(t,3),true):[]},yn.fill=function(n,t,r,e){var u=n?n.length:0;if(!u)return[];for(r&&typeof r!="number"&&Mr(n,t,r)&&(r=0,e=u),u=n.length,r=Ce(r),0>r&&(r=-r>u?0:u+r),e=e===Z||e>u?u:Ce(e),0>e&&(e+=u),
|
||||||
|
e=r>e?0:Ue(e);e>r;)n[r++]=t;return n},yn.filter=function(n,t){return(Zo(n)?i:lt)(n,kr(t,3))},yn.flatMap=function(n,t){return st(ue(n,t),1)},yn.flatten=function(n){return n&&n.length?st(n,1):[]},yn.flattenDeep=function(n){return n&&n.length?st(n,q):[]},yn.flattenDepth=function(n,t){return n&&n.length?(t=t===Z?1:Ce(t),st(n,t)):[]},yn.flip=function(n){return mr(n,512)},yn.flow=_i,yn.flowRight=gi,yn.fromPairs=function(n){for(var t=-1,r=n?n.length:0,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e},yn.functions=function(n){
|
||||||
|
return null==n?[]:gt(n,De(n))},yn.functionsIn=function(n){return null==n?[]:gt(n,Ze(n))},yn.groupBy=Io,yn.initial=function(n){return Kr(n,1)},yn.intersection=so,yn.intersectionBy=ho,yn.intersectionWith=po,yn.invert=Ho,yn.invertBy=Qo,yn.invokeMap=So,yn.iteratee=He,yn.keyBy=Ro,yn.keys=De,yn.keysIn=Ze,yn.map=ue,yn.mapKeys=function(n,t){var r={};return t=kr(t,3),pt(n,function(n,e,u){r[t(n,e,u)]=n}),r},yn.mapValues=function(n,t){var r={};return t=kr(t,3),pt(n,function(n,e,u){r[e]=t(n,e,u)}),r},yn.matches=function(n){
|
||||||
|
return Et(ut(n,true))},yn.matchesProperty=function(n,t){return It(n,ut(t,true))},yn.memoize=se,yn.merge=ni,yn.mergeWith=ti,yn.method=vi,yn.methodOf=di,yn.mixin=Qe,yn.negate=function(n){if(typeof n!="function")throw new iu("Expected a function");return function(){return!n.apply(this,arguments)}},yn.nthArg=function(n){return n=Ce(n),function(){return arguments[n]}},yn.omit=ri,yn.omitBy=function(n,t){return t=kr(t),Bt(n,function(n,r){return!t(n,r)})},yn.once=function(n){return fe(2,n)},yn.orderBy=function(n,t,r,e){
|
||||||
|
return null==n?[]:(Zo(t)||(t=null==t?[]:[t]),r=e?Z:r,Zo(r)||(r=null==r?[]:[r]),Rt(n,t,r))},yn.over=yi,yn.overArgs=$o,yn.overEvery=bi,yn.overSome=xi,yn.partial=Fo,yn.partialRight=No,yn.partition=Wo,yn.pick=ei,yn.pickBy=function(n,t){return null==n?{}:Bt(n,kr(t))},yn.property=nu,yn.propertyOf=function(n){return function(t){return null==n?Z:vt(n,t)}},yn.pull=_o,yn.pullAll=Jr,yn.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?zt(n,t,kr(r)):n},yn.pullAt=go,yn.range=mi,yn.rangeRight=ji,yn.rearg=Do,
|
||||||
|
yn.reject=function(n,t){var r=Zo(n)?i:lt;return t=kr(t,3),r(n,function(n,r,e){return!t(n,r,e)})},yn.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],o=n.length;for(t=kr(t,3);++e<o;){var i=n[e];t(i,e,n)&&(r.push(i),u.push(e))}return Mt(n,u),r},yn.rest=he,yn.reverse=Yr,yn.sampleSize=oe,yn.set=function(n,t,r){return null==n?n:$t(n,t,r)},yn.setWith=function(n,t,r,e){return e=typeof e=="function"?e:Z,null==n?n:$t(n,t,r,e)},yn.shuffle=function(n){return oe(n,4294967295)},yn.slice=function(n,t,r){
|
||||||
|
var e=n?n.length:0;return e?(r&&typeof r!="number"&&Mr(n,t,r)?(t=0,r=e):(t=null==t?0:Ce(t),r=r===Z?e:Ce(r)),Ft(n,t,r)):[]},yn.sortBy=Bo,yn.sortedUniq=function(n){return n&&n.length?qt(n):[]},yn.sortedUniqBy=function(n,t){return n&&n.length?qt(n,kr(t)):[]},yn.split=function(n,t,r){return Le(n).split(t,r)},yn.spread=function(n,t){if(typeof n!="function")throw new iu("Expected a function");return t=t===Z?0:Uu(Ce(t),0),he(function(e){var u=e[t];return e=e.slice(0,t),u&&l(e,u),r(n,this,e)})},yn.tail=function(n){
|
||||||
|
return Tr(n,1)},yn.take=function(n,t,r){return n&&n.length?(t=r||t===Z?1:Ce(t),Ft(n,0,0>t?0:t)):[]},yn.takeRight=function(n,t,r){var e=n?n.length:0;return e?(t=r||t===Z?1:Ce(t),t=e-t,Ft(n,0>t?0:t,e)):[]},yn.takeRightWhile=function(n,t){return n&&n.length?Tt(n,kr(t,3),false,true):[]},yn.takeWhile=function(n,t){return n&&n.length?Tt(n,kr(t,3)):[]},yn.tap=function(n,t){return t(n),n},yn.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new iu("Expected a function");return je(r)&&(e="leading"in r?!!r.leading:e,
|
||||||
|
u="trailing"in r?!!r.trailing:u),le(n,t,{leading:e,maxWait:t,trailing:u})},yn.thru=ne,yn.toArray=Be,yn.toPairs=qe,yn.toPairsIn=function(n){return j(n,Ze(n))},yn.toPath=function(n){return Zo(n)?a(n,String):qr(n)},yn.toPlainObject=Me,yn.transform=function(n,t,r){var e=Zo(n)||Re(n);if(t=kr(t,4),null==r)if(e||je(n)){var o=n.constructor;r=e?Zo(n)?new o:[]:be(o)?it(ju(n)):{}}else r={};return(e?u:pt)(n,function(n,e,u){return t(r,n,e,u)}),r},yn.unary=function(n){return ie(n,1)},yn.union=vo,yn.unionBy=yo,
|
||||||
|
yn.unionWith=bo,yn.uniq=function(n){return n&&n.length?Pt(n):[]},yn.uniqBy=function(n,t){return n&&n.length?Pt(n,kr(t)):[]},yn.uniqWith=function(n,t){return n&&n.length?Pt(n,Z,t):[]},yn.unset=function(n,t){var r;if(null==n)r=true;else{r=n;var e=t,e=Lr(e,r)?[e+""]:rt(e);r=Zr(r,e),e=Vr(e),r=null!=r&&Fe(r,e)?delete r[e]:true}return r},yn.unzip=Hr,yn.unzipWith=Qr,yn.values=Pe,yn.valuesIn=function(n){return null==n?[]:A(n,Ze(n))},yn.without=xo,yn.words=Ve,yn.wrap=function(n,t){return t=null==t?Ye:t,Fo(t,n);
|
||||||
|
},yn.xor=mo,yn.xorBy=jo,yn.xorWith=wo,yn.zip=Ao,yn.zipObject=function(n,t){return Vt(n||[],t||[],Yn)},yn.zipObjectDeep=function(n,t){return Vt(n||[],t||[],$t)},yn.zipWith=Oo,yn.extend=To,yn.extendWith=Ko,Qe(yn,yn),yn.add=function(n,t){var r;return n===Z&&t===Z?0:(n!==Z&&(r=n),t!==Z&&(r=r===Z?t:r+t),r)},yn.attempt=hi,yn.camelCase=ui,yn.capitalize=Te,yn.ceil=wi,yn.clamp=function(n,t,r){return r===Z&&(r=t,t=Z),r!==Z&&(r=ze(r),r=r===r?r:0),t!==Z&&(t=ze(t),t=t===t?t:0),et(ze(n),t,r)},yn.clone=function(n){
|
||||||
|
return ut(n)},yn.cloneDeep=function(n){return ut(n,true)},yn.cloneDeepWith=function(n,t){return ut(n,true,t)},yn.cloneWith=function(n,t){return ut(n,false,t)},yn.deburr=Ke,yn.endsWith=function(n,t,r){n=Le(n),t=typeof t=="string"?t:t+"";var e=n.length;return r=r===Z?e:et(Ce(r),0,e),r-=t.length,r>=0&&n.indexOf(t,r)==r},yn.eq=pe,yn.escape=function(n){return(n=Le(n))&&H.test(n)?n.replace(J,R):n},yn.escapeRegExp=function(n){return(n=Le(n))&&on.test(n)?n.replace(un,"\\$&"):n},yn.every=function(n,t,r){var e=Zo(n)?o:at;
|
||||||
|
return r&&Mr(n,t,r)&&(t=Z),e(n,kr(t,3))},yn.find=function(n,t){if(t=kr(t,3),Zo(n)){var r=v(n,t);return r>-1?n[r]:Z}return g(n,t,Hu)},yn.findIndex=function(n,t){return n&&n.length?v(n,kr(t,3)):-1},yn.findKey=function(n,t){return g(n,kr(t,3),pt,true)},yn.findLast=function(n,t){if(t=kr(t,3),Zo(n)){var r=v(n,t,true);return r>-1?n[r]:Z}return g(n,t,Qu)},yn.findLastIndex=function(n,t){return n&&n.length?v(n,kr(t,3),true):-1},yn.findLastKey=function(n,t){return g(n,kr(t,3),_t,true)},yn.floor=Ai,yn.forEach=re,yn.forEachRight=ee,
|
||||||
|
yn.forIn=function(n,t){return null==n?n:Xu(n,tt(t),Ze)},yn.forInRight=function(n,t){return null==n?n:no(n,tt(t),Ze)},yn.forOwn=function(n,t){return n&&pt(n,tt(t))},yn.forOwnRight=function(n,t){return n&&_t(n,tt(t))},yn.get=$e,yn.gt=_e,yn.gte=function(n,t){return n>=t},yn.has=Fe,yn.hasIn=Ne,yn.head=Gr,yn.identity=Ye,yn.includes=function(n,t,r,e){return n=ve(n)?n:Pe(n),r=r&&!e?Ce(r):0,e=n.length,0>r&&(r=Uu(e+r,0)),Ie(n)?e>=r&&-1<n.indexOf(t,r):!!e&&-1<d(n,t,r)},yn.indexOf=function(n,t,r){var e=n?n.length:0;
|
||||||
|
return e?(r=Ce(r),0>r&&(r=Uu(e+r,0)),d(n,t,r)):-1},yn.inRange=function(n,t,r){return t=ze(t)||0,r===Z?(r=t,t=0):r=ze(r)||0,n=ze(n),n>=zu(t,r)&&n<Uu(t,r)},yn.invoke=Xo,yn.isArguments=ge,yn.isArray=Zo,yn.isArrayBuffer=function(n){return we(n)&&"[object ArrayBuffer]"==pu.call(n)},yn.isArrayLike=ve,yn.isArrayLikeObject=de,yn.isBoolean=function(n){return true===n||false===n||we(n)&&"[object Boolean]"==pu.call(n)},yn.isBuffer=qo,yn.isDate=function(n){return we(n)&&"[object Date]"==pu.call(n)},yn.isElement=function(n){
|
||||||
|
return!!n&&1===n.nodeType&&we(n)&&!ke(n)},yn.isEmpty=function(n){if(ve(n)&&(Zo(n)||Ie(n)||be(n.splice)||ge(n)))return!n.length;for(var t in n)if(lu.call(n,t))return false;return true},yn.isEqual=function(n,t){return jt(n,t)},yn.isEqualWith=function(n,t,r){var e=(r=typeof r=="function"?r:Z)?r(n,t):Z;return e===Z?jt(n,t,r):!!e},yn.isError=ye,yn.isFinite=function(n){return typeof n=="number"&&Wu(n)},yn.isFunction=be,yn.isInteger=xe,yn.isLength=me,yn.isMap=function(n){return we(n)&&"[object Map]"==Rr(n)},yn.isMatch=function(n,t){
|
||||||
|
return n===t||wt(n,t,Er(t))},yn.isMatchWith=function(n,t,r){return r=typeof r=="function"?r:Z,wt(n,t,Er(t),r)},yn.isNaN=function(n){return Oe(n)&&n!=+n},yn.isNative=Ae,yn.isNil=function(n){return null==n},yn.isNull=function(n){return null===n},yn.isNumber=Oe,yn.isObject=je,yn.isObjectLike=we,yn.isPlainObject=ke,yn.isRegExp=Ee,yn.isSafeInteger=function(n){return xe(n)&&n>=-9007199254740991&&9007199254740991>=n},yn.isSet=function(n){return we(n)&&"[object Set]"==Rr(n)},yn.isString=Ie,yn.isSymbol=Se,
|
||||||
|
yn.isTypedArray=Re,yn.isUndefined=function(n){return n===Z},yn.isWeakMap=function(n){return we(n)&&"[object WeakMap]"==Rr(n)},yn.isWeakSet=function(n){return we(n)&&"[object WeakSet]"==pu.call(n)},yn.join=function(n,t){return n?Bu.call(n,t):""},yn.kebabCase=oi,yn.last=Vr,yn.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(r!==Z&&(u=Ce(r),u=(0>u?Uu(e+u,0):zu(u,e-1))+1),t!==t)return B(n,u,true);for(;u--;)if(n[u]===t)return u;return-1},yn.lowerCase=ii,yn.lowerFirst=fi,yn.lt=We,
|
||||||
|
yn.lte=function(n,t){return t>=n},yn.max=function(n){return n&&n.length?_(n,Ye,_e):Z},yn.maxBy=function(n,t){return n&&n.length?_(n,kr(t),_e):Z},yn.mean=function(n){return tu(n)/(n?n.length:0)},yn.min=function(n){return n&&n.length?_(n,Ye,We):Z},yn.minBy=function(n,t){return n&&n.length?_(n,kr(t),We):Z},yn.noConflict=function(){return Vn._===this&&(Vn._=_u),this},yn.noop=Xe,yn.now=Co,yn.pad=function(n,t,r){n=Le(n),t=Ce(t);var e=F(n);return t&&t>e?(e=(t-e)/2,t=Ru(e),e=Su(e),vr("",t,r)+n+vr("",e,r)):n;
|
||||||
|
},yn.padEnd=function(n,t,r){return n=Le(n),n+vr(n,t,r)},yn.padStart=function(n,t,r){return n=Le(n),vr(n,t,r)+n},yn.parseInt=function(n,t,r){return r||null==t?t=0:t&&(t=+t),n=Le(n).replace(fn,""),Mu(n,t||(pn.test(n)?16:10))},yn.random=function(n,t,r){if(r&&typeof r!="boolean"&&Mr(n,t,r)&&(t=r=Z),r===Z&&(typeof t=="boolean"?(r=t,t=Z):typeof n=="boolean"&&(r=n,n=Z)),n===Z&&t===Z?(n=0,t=1):(n=ze(n)||0,t===Z?(t=n,n=0):t=ze(t)||0),n>t){var e=n;n=t,t=e}return r||n%1||t%1?(r=Lu(),zu(n+r*(t-n+Fn("1e-"+((r+"").length-1))),t)):Lt(n,t);
|
||||||
|
},yn.reduce=function(n,t,r){var e=Zo(n)?s:y,u=3>arguments.length;return e(n,kr(t,4),r,u,Hu)},yn.reduceRight=function(n,t,r){var e=Zo(n)?h:y,u=3>arguments.length;return e(n,kr(t,4),r,u,Qu)},yn.repeat=Ge,yn.replace=function(){var n=arguments,t=Le(n[0]);return 3>n.length?t:t.replace(n[1],n[2])},yn.result=function(n,t,r){if(Lr(t,n))e=null==n?Z:n[t];else{t=rt(t);var e=$e(n,t);n=Zr(n,t)}return e===Z&&(e=r),be(e)?e.call(n):e},yn.round=Oi,yn.runInContext=D,yn.sample=function(n){n=ve(n)?n:Pe(n);var t=n.length;
|
||||||
|
return t>0?n[Lt(0,t-1)]:Z},yn.size=function(n){if(null==n)return 0;if(ve(n)){var t=n.length;return t&&Ie(n)?F(n):t}return De(n).length},yn.snakeCase=ai,yn.some=function(n,t,r){var e=Zo(n)?p:Nt;return r&&Mr(n,t,r)&&(t=Z),e(n,kr(t,3))},yn.sortedIndex=function(n,t){return Dt(n,t)},yn.sortedIndexBy=function(n,t,r){return Zt(n,t,kr(r))},yn.sortedIndexOf=function(n,t){var r=n?n.length:0;if(r){var e=Dt(n,t);if(r>e&&pe(n[e],t))return e}return-1},yn.sortedLastIndex=function(n,t){return Dt(n,t,true)},yn.sortedLastIndexBy=function(n,t,r){
|
||||||
|
return Zt(n,t,kr(r),true)},yn.sortedLastIndexOf=function(n,t){if(n&&n.length){var r=Dt(n,t,true)-1;if(pe(n[r],t))return r}return-1},yn.startCase=li,yn.startsWith=function(n,t,r){return n=Le(n),r=et(Ce(r),0,n.length),n.lastIndexOf(t,r)==r},yn.subtract=function(n,t){var r;return n===Z&&t===Z?0:(n!==Z&&(r=n),t!==Z&&(r=r===Z?t:r-t),r)},yn.sum=tu,yn.sumBy=function(n,t){return n&&n.length?x(n,kr(t)):0},yn.template=function(n,t,r){var e=yn.templateSettings;r&&Mr(n,t,r)&&(t=Z),n=Le(n),t=Ko({},t,e,Kn),r=Ko({},t.imports,e.imports,Kn);
|
||||||
|
var u,o,i=De(r),f=A(r,i),c=0;r=t.interpolate||xn;var a="__p+='";r=ou((t.escape||xn).source+"|"+r.source+"|"+(r===nn?sn:xn).source+"|"+(t.evaluate||xn).source+"|$","g");var l="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,i,f,l){return e||(e=i),a+=n.slice(c,l).replace(mn,W),r&&(u=true,a+="'+__e("+r+")+'"),f&&(o=true,a+="';"+f+";\n__p+='"),e&&(a+="'+((__t=("+e+"))==null?'':__t)+'"),c=l+t.length,t}),a+="';",(t=t.variable)||(a="with(obj){"+a+"}"),a=(o?a.replace(T,""):a).replace(K,"$1").replace(G,"$1;"),
|
||||||
|
a="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(u?",__e=_.escape":"")+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+a+"return __p}",t=hi(function(){return Function(i,l+"return "+a).apply(Z,f)}),t.source=a,ye(t))throw t;return t},yn.times=function(n,t){if(n=Ce(n),1>n||n>9007199254740991)return[];var r=4294967295,e=zu(n,4294967295);for(t=tt(t),n-=4294967295,e=m(e,t);++r<n;)t(r);return e},yn.toInteger=Ce,yn.toLength=Ue,yn.toLower=function(n){
|
||||||
|
return Le(n).toLowerCase()},yn.toNumber=ze,yn.toSafeInteger=function(n){return et(Ce(n),-9007199254740991,9007199254740991)},yn.toString=Le,yn.toUpper=function(n){return Le(n).toUpperCase()},yn.trim=function(n,t,r){return(n=Le(n))?r||t===Z?n.replace(fn,""):(t+="")?(n=n.match(kn),t=t.match(kn),n.slice(O(n,t),k(n,t)+1).join("")):n:n},yn.trimEnd=function(n,t,r){return(n=Le(n))?r||t===Z?n.replace(an,""):(t+="")?(n=n.match(kn),n.slice(0,k(n,t.match(kn))+1).join("")):n:n},yn.trimStart=function(n,t,r){return(n=Le(n))?r||t===Z?n.replace(cn,""):(t+="")?(n=n.match(kn),
|
||||||
|
n.slice(O(n,t.match(kn))).join("")):n:n},yn.truncate=function(n,t){var r=30,e="...";if(je(t))var u="separator"in t?t.separator:u,r="length"in t?Ce(t.length):r,e="omission"in t?Le(t.omission):e;n=Le(n);var o=n.length;if(En.test(n))var i=n.match(kn),o=i.length;if(r>=o)return n;if(o=r-F(e),1>o)return e;if(r=i?i.slice(0,o).join(""):n.slice(0,o),u===Z)return r+e;if(i&&(o+=r.length-o),Ee(u)){if(n.slice(o).search(u)){var f=r;for(u.global||(u=ou(u.source,Le(hn.exec(u))+"g")),u.lastIndex=0;i=u.exec(f);)var c=i.index;
|
||||||
|
r=r.slice(0,c===Z?o:c)}}else n.indexOf(u,o)!=o&&(u=r.lastIndexOf(u),u>-1&&(r=r.slice(0,u)));return r+e},yn.unescape=function(n){return(n=Le(n))&&Y.test(n)?n.replace(V,N):n},yn.uniqueId=function(n){var t=++su;return Le(n)+t},yn.upperCase=si,yn.upperFirst=ci,yn.each=re,yn.eachRight=ee,yn.first=Gr,Qe(yn,function(){var n={};return pt(yn,function(t,r){lu.call(yn.prototype,r)||(n[r]=t)}),n}(),{chain:false}),yn.VERSION="4.5.1",u("bind bindKey curry curryRight partial partialRight".split(" "),function(n){yn[n].placeholder=yn;
|
||||||
|
}),u(["drop","take"],function(n,t){An.prototype[n]=function(r){var e=this.__filtered__;if(e&&!t)return new An(this);r=r===Z?1:Uu(Ce(r),0);var u=this.clone();return e?u.__takeCount__=zu(r,u.__takeCount__):u.__views__.push({size:zu(r,4294967295),type:n+(0>u.__dir__?"Right":"")}),u},An.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),u(["filter","map","takeWhile"],function(n,t){var r=t+1,e=1==r||3==r;An.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({
|
||||||
|
iteratee:kr(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),u(["head","last"],function(n,t){var r="take"+(t?"Right":"");An.prototype[n]=function(){return this[r](1).value()[0]}}),u(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");An.prototype[n]=function(){return this.__filtered__?new An(this):this[r](1)}}),An.prototype.compact=function(){return this.filter(Ye)},An.prototype.find=function(n){return this.filter(n).head()},An.prototype.findLast=function(n){return this.reverse().find(n);
|
||||||
|
},An.prototype.invokeMap=he(function(n,t){return typeof n=="function"?new An(this):this.map(function(r){return mt(r,n,t)})}),An.prototype.reject=function(n){return n=kr(n,3),this.filter(function(t){return!n(t)})},An.prototype.slice=function(n,t){n=Ce(n);var r=this;return r.__filtered__&&(n>0||0>t)?new An(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==Z&&(t=Ce(t),r=0>t?r.dropRight(-t):r.take(t-n)),r)},An.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},An.prototype.toArray=function(){
|
||||||
|
return this.take(4294967295)},pt(An.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=yn[e?"take"+("last"==t?"Right":""):t],o=e||/^find/.test(t);u&&(yn.prototype[t]=function(){var t=this.__wrapped__,i=e?[1]:arguments,f=t instanceof An,c=i[0],a=f||Zo(t),s=function(n){return n=u.apply(yn,l([n],i)),e&&h?n[0]:n};a&&r&&typeof c=="function"&&1!=c.length&&(f=a=false);var h=this.__chain__,p=!!this.__actions__.length,c=o&&!h,f=f&&!p;return!o&&a?(t=f?t:new An(this),
|
||||||
|
t=n.apply(t,i),t.__actions__.push({func:ne,args:[s],thisArg:Z}),new wn(t,h)):c&&f?n.apply(this,i):(t=this.thru(s),c?e?t.value()[0]:t.value():t)})}),u("pop push shift sort splice unshift".split(" "),function(n){var t=fu[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);yn.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),pt(An.prototype,function(n,t){var r=yn[t];if(r){var e=r.name+"";(Yu[e]||(Yu[e]=[])).push({
|
||||||
|
name:t,func:r})}}),Yu[pr(Z,2).name]=[{name:"wrapper",func:Z}],An.prototype.clone=function(){var n=new An(this.__wrapped__);return n.__actions__=Xt(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Xt(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Xt(this.__views__),n},An.prototype.reverse=function(){if(this.__filtered__){var n=new An(this);n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},An.prototype.value=function(){
|
||||||
|
var n,t=this.__wrapped__.value(),r=this.__dir__,e=Zo(t),u=0>r,o=e?t.length:0;n=0;for(var i=o,f=this.__views__,c=-1,a=f.length;++c<a;){var l=f[c],s=l.size;switch(l.type){case"drop":n+=s;break;case"dropRight":i-=s;break;case"take":i=zu(i,n+s);break;case"takeRight":n=Uu(n,i-s)}}if(n={start:n,end:i},i=n.start,f=n.end,n=f-i,u=u?f:i-1,i=this.__iteratees__,f=i.length,c=0,a=zu(n,this.__takeCount__),!e||200>o||o==n&&a==n)return Kt(t,this.__actions__);e=[];n:for(;n--&&a>c;){for(u+=r,o=-1,l=t[u];++o<f;){var h=i[o],s=h.type,h=(0,
|
||||||
|
h.iteratee)(l);if(2==s)l=h;else if(!h){if(1==s)continue n;break n}}e[c++]=l}return e},yn.prototype.at=ko,yn.prototype.chain=function(){return Xr(this)},yn.prototype.commit=function(){return new wn(this.value(),this.__chain__)},yn.prototype.flatMap=function(n){return this.map(n).flatten()},yn.prototype.next=function(){this.__values__===Z&&(this.__values__=Be(this.value()));var n=this.__index__>=this.__values__.length,t=n?Z:this.__values__[this.__index__++];return{done:n,value:t}},yn.prototype.plant=function(n){
|
||||||
|
for(var t,r=this;r instanceof jn;){var e=Pr(r);e.__index__=0,e.__values__=Z,t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},yn.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof An?(this.__actions__.length&&(n=new An(this)),n=n.reverse(),n.__actions__.push({func:ne,args:[Yr],thisArg:Z}),new wn(n,this.__chain__)):this.thru(Yr)},yn.prototype.toJSON=yn.prototype.valueOf=yn.prototype.value=function(){return Kt(this.__wrapped__,this.__actions__)},Au&&(yn.prototype[Au]=te),
|
||||||
|
yn}var Z,q=1/0,P=NaN,T=/\b__p\+='';/g,K=/\b(__p\+=)''\+/g,G=/(__e\(.*?\)|\b__t\))\+'';/g,V=/&(?:amp|lt|gt|quot|#39|#96);/g,J=/[&<>"'`]/g,Y=RegExp(V.source),H=RegExp(J.source),Q=/<%-([\s\S]+?)%>/g,X=/<%([\s\S]+?)%>/g,nn=/<%=([\s\S]+?)%>/g,tn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,rn=/^\w*$/,en=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g,un=/[\\^$.*+?()[\]{}|]/g,on=RegExp(un.source),fn=/^\s+|\s+$/g,cn=/^\s+/,an=/\s+$/,ln=/\\(\\)?/g,sn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,hn=/\w*$/,pn=/^0x/i,_n=/^[-+]0x[0-9a-f]+$/i,gn=/^0b[01]+$/i,vn=/^\[object .+?Constructor\]$/,dn=/^0o[0-7]+$/i,yn=/^(?:0|[1-9]\d*)$/,bn=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,xn=/($^)/,mn=/['\n\r\u2028\u2029\\]/g,jn="[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?)*",wn="(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])"+jn,An="(?:[^\\ud800-\\udfff][\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]?|[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff])",On=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]","g"),kn=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+An+jn,"g"),En=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0\\ufe0e\\ufe0f]"),In=/[a-zA-Z0-9]+/g,Sn=RegExp(["[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\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]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\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\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\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]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\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\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\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\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|\\d+",wn].join("|"),"g"),Rn=/[a-z][A-Z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn="Array Buffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Map Math Object Reflect RegExp Set String Symbol TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap _ clearTimeout isFinite parseInt setTimeout".split(" "),Bn={};
|
||||||
|
Bn["[object Float32Array]"]=Bn["[object Float64Array]"]=Bn["[object Int8Array]"]=Bn["[object Int16Array]"]=Bn["[object Int32Array]"]=Bn["[object Uint8Array]"]=Bn["[object Uint8ClampedArray]"]=Bn["[object Uint16Array]"]=Bn["[object Uint32Array]"]=true,Bn["[object Arguments]"]=Bn["[object Array]"]=Bn["[object ArrayBuffer]"]=Bn["[object Boolean]"]=Bn["[object Date]"]=Bn["[object Error]"]=Bn["[object Function]"]=Bn["[object Map]"]=Bn["[object Number]"]=Bn["[object Object]"]=Bn["[object RegExp]"]=Bn["[object Set]"]=Bn["[object String]"]=Bn["[object WeakMap]"]=false;
|
||||||
|
var Cn={};Cn["[object Arguments]"]=Cn["[object Array]"]=Cn["[object ArrayBuffer]"]=Cn["[object Boolean]"]=Cn["[object Date]"]=Cn["[object Float32Array]"]=Cn["[object Float64Array]"]=Cn["[object Int8Array]"]=Cn["[object Int16Array]"]=Cn["[object Int32Array]"]=Cn["[object Map]"]=Cn["[object Number]"]=Cn["[object Object]"]=Cn["[object RegExp]"]=Cn["[object Set]"]=Cn["[object String]"]=Cn["[object Symbol]"]=Cn["[object Uint8Array]"]=Cn["[object Uint8ClampedArray]"]=Cn["[object Uint16Array]"]=Cn["[object Uint32Array]"]=true,
|
||||||
|
Cn["[object Error]"]=Cn["[object Function]"]=Cn["[object WeakMap]"]=false;var Un={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O",
|
||||||
|
"\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss"},zn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Mn={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},Ln={"function":true,object:true},$n={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"
|
||||||
|
},Fn=parseFloat,Nn=parseInt,Dn=Ln[typeof exports]&&exports&&!exports.nodeType?exports:Z,Zn=Ln[typeof module]&&module&&!module.nodeType?module:Z,qn=Zn&&Zn.exports===Dn?Dn:Z,Pn=E(Dn&&Zn&&typeof global=="object"&&global),Tn=E(Ln[typeof self]&&self),Kn=E(Ln[typeof window]&&window),Gn=E(Ln[typeof this]&&this),Vn=Pn||Kn!==(Gn&&Gn.window)&&Kn||Tn||Gn||Function("return this")(),Jn=D();(Kn||Tn||{})._=Jn,typeof define=="function"&&typeof define.amd=="object"&&define.amd? define(function(){return Jn}):Dn&&Zn?(qn&&((Zn.exports=Jn)._=Jn),
|
||||||
|
Dn._=Jn):Vn._=Jn}).call(this);
|
||||||
4307
dist/lodash.underscore.js
vendored
4307
dist/lodash.underscore.js
vendored
File diff suppressed because it is too large
Load Diff
34
dist/lodash.underscore.min.js
vendored
34
dist/lodash.underscore.min.js
vendored
@@ -1,34 +0,0 @@
|
|||||||
/**
|
|
||||||
* @license
|
|
||||||
* Lo-Dash 1.0.1 (Custom Build) lodash.com/license
|
|
||||||
* Build: `lodash underscore -o ./dist/lodash.underscore.js`
|
|
||||||
* Underscore.js 1.4.4 underscorejs.org/LICENSE
|
|
||||||
*/
|
|
||||||
;(function(n,t){function r(n,t){var r;if(n&&qt[typeof n])for(r in t||(t=G),n)if(t(n[r],r,n)===tt)break}function e(n,t,r){if(n){t=t&&typeof r=="undefined"?t:a(t,r);var e=n.length;if(r=-1,typeof e=="number")for(;++r<e&&t(n[r],r,n)!==tt;);else for(r in n)if(pt.call(n,r)&&t(n[r],r,n)===tt)break}}function u(n){return n&&typeof n=="object"&&n.__wrapped__?n:this instanceof u?(this.__wrapped__=n,void 0):new u(n)}function o(n,t){var r=n.b,e=t.b;if(n=n.a,t=t.a,n!==t){if(n>t||typeof n=="undefined")return 1;if(n<t||typeof t=="undefined")return-1
|
|
||||||
}return r<e?-1:1}function i(n,t,r){function e(){var a=arguments,f=o?this:t;return u||(n=t[i]),r.length&&(a=a.length?(a=p(a),r.concat(a)):r),this instanceof e?(l.prototype=n.prototype,f=new l,l.prototype=K,a=n.apply(f,a),w(a)?a:f):n.apply(f,a)}var u=j(n),o=!r,i=t;return o&&(r=t),u||(t=n),e}function a(n,t,r){if(n==K)return G;var e=typeof n;if("function"!=e){if("object"!=e)return function(t){return t[n]};var u=Dt(n);return function(t){for(var r=u.length,e=L;r--&&(e=t[u[r]]===n[u[r]]););return e}}return typeof t!="undefined"?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,o){return n.call(t,r,e,u,o)}:function(r,e,u){return n.call(t,r,e,u)}:n}function f(n){return"\\"+It[n]}function c(n){return Mt[n]}function l(){}function p(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 s(n){return $t[n]}function v(n){return vt.call(n)==wt}function h(n){var t,r=[],e=function(n,t){r.push(t)};if(n&&qt[typeof n])for(t in e||(e=G),n)if(pt.call(n,t)&&e(n[t],t,n)===tt)break;
|
|
||||||
return r}function g(n){if(!n)return n;for(var t=1,r=arguments.length;t<r;t++){var e=arguments[t];if(e)for(var u in e)n[u]=e[u]}return n}function y(n){if(!n)return n;for(var t=1,r=arguments.length;t<r;t++){var e=arguments[t];if(e)for(var u in e)n[u]==K&&(n[u]=e[u])}return n}function m(n){var t=[];return r(n,function(n,r){j(n)&&t.push(r)}),t.sort()}function _(n){for(var t=-1,r=Dt(n),e=r.length,u={};++t<e;){var o=r[t];u[n[o]]=o}return u}function d(n){if(!n)return J;if(Bt(n)||x(n))return!n.length;for(var t in n)if(pt.call(n,t))return L;
|
|
||||||
return J}function b(n,t,e,u){if(n===t)return 0!==n||1/n==1/t;var o=typeof n,i=typeof t;if(n===n&&(!n||"function"!=o&&"object"!=o)&&(!t||"function"!=i&&"object"!=i))return L;if(n==K||t==K)return n===t;if(i=vt.call(n),o=vt.call(t),i!=o)return L;switch(i){case xt:case Et:return+n==+t;case Ot:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case Nt:case kt:return n==t+""}if(o=i==At,!o){if(n.__wrapped__||t.__wrapped__)return b(n.__wrapped__||n,t.__wrapped__||t,e,u);if(i!=St)return L;var i=n.constructor,a=t.constructor;
|
|
||||||
if(i!=a&&(!j(i)||!(i instanceof i&&j(a)&&a instanceof a)))return L}for(e||(e=[]),u||(u=[]),i=e.length;i--;)if(e[i]==n)return u[i]==t;var f=J,c=0;if(e.push(n),u.push(t),o){if(c=t.length,f=c==n.length)for(;c--&&(f=b(n[c],t[c],e,u)););return f}return r(t,function(t,r,o){return pt.call(o,r)?(c++,!(f=pt.call(n,r)&&b(n[r],t,e,u))&&tt):void 0}),f&&r(n,function(n,t,r){return pt.call(r,t)?!(f=-1<--c)&&tt:void 0}),f}function j(n){return typeof n=="function"}function w(n){return n?qt[typeof n]:L}function A(n){return typeof n=="number"||vt.call(n)==Ot
|
|
||||||
}function x(n){return typeof n=="string"||vt.call(n)==kt}function E(n){for(var t=-1,r=Dt(n),e=r.length,u=Array(e);++t<e;)u[t]=n[r[t]];return u}function O(n,t){var r=L;return typeof(n?n.length:0)=="number"?r=-1<z(n,t):e(n,function(n){return(r=n===t)&&tt}),r}function S(n,t,r){var u=J;if(t=a(t,r),Bt(n)){r=-1;for(var o=n.length;++r<o&&(u=!!t(n[r],r,n)););}else e(n,function(n,r,e){return!(u=!!t(n,r,e))&&tt});return u}function N(n,t,r){var u=[];if(t=a(t,r),Bt(n)){r=-1;for(var o=n.length;++r<o;){var i=n[r];
|
|
||||||
t(i,r,n)&&u.push(i)}}else e(n,function(n,r,e){t(n,r,e)&&u.push(n)});return u}function k(n,t,r){var e;return t=a(t,r),F(n,function(n,r,u){return t(n,r,u)?(e=n,tt):void 0}),e}function F(n,t,r){if(t&&typeof r=="undefined"&&Bt(n)){r=-1;for(var u=n.length;++r<u&&t(n[r],r,n)!==tt;);}else e(n,t,r)}function R(n,t,r){var u=-1,o=n?n.length:0,i=Array(typeof o=="number"?o:0);if(t=a(t,r),Bt(n))for(;++u<o;)i[u]=t(n[u],u,n);else e(n,function(n,r,e){i[++u]=t(n,r,e)});return i}function T(n,t,r){var u=-1/0,o=u;if(!t&&Bt(n)){r=-1;
|
|
||||||
for(var i=n.length;++r<i;){var f=n[r];f>o&&(o=f)}}else t=a(t,r),e(n,function(n,r,e){r=t(n,r,e),r>u&&(u=r,o=n)});return o}function q(n,t,r,u){var o=3>arguments.length;if(t=a(t,u,4),Bt(n)){var i=-1,f=n.length;for(o&&(r=n[++i]);++i<f;)r=t(r,n[i],i,n)}else e(n,function(n,e,u){r=o?(o=L,n):t(r,n,e,u)});return r}function I(n,t,r,e){var u=n?n.length:0,o=3>arguments.length;if(typeof u!="number")var i=Dt(n),u=i.length;return t=a(t,e,4),F(n,function(e,a,f){a=i?i[--u]:--u,r=o?(o=L,n[a]):t(r,n[a],a,f)}),r}function B(n,t,r){var u;
|
|
||||||
if(t=a(t,r),Bt(n)){r=-1;for(var o=n.length;++r<o&&!(u=t(n[r],r,n)););}else e(n,function(n,r,e){return(u=t(n,r,e))&&tt});return!!u}function D(n,t,r){return r&&d(t)?K:(r?k:N)(n,t)}function M(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=K){var o=-1;for(t=a(t,r);++o<u&&t(n[o],o,n);)e++}else if(e=t,e==K||r)return n[0];return p(n,0,bt(dt(0,e),u))}}function $(n,t){for(var r=-1,e=n?n.length:0,u=[];++r<e;){var o=n[r];Bt(o)?st.apply(u,t?o:$(o)):u.push(o)}return u}function z(n,t,r){var e=-1,u=n?n.length:0;
|
|
||||||
if(typeof r=="number")e=(0>r?dt(0,u+r):r||0)-1;else if(r)return e=P(n,t),n[e]===t?e:-1;for(;++e<u;)if(n[e]===t)return e;return-1}function C(n,t,r){if(typeof t!="number"&&t!=K){var e=0,u=-1,o=n?n.length:0;for(t=a(t,r);++u<o&&t(n[u],u,n);)e++}else e=t==K||r?1:dt(0,t);return p(n,e)}function P(n,t,r,e){var u=0,o=n?n.length:u;for(r=r?a(r,e,1):G,t=r(t);u<o;)e=u+o>>>1,r(n[e])<t?u=e+1:o=e;return u}function U(n,t,r,e){var u=-1,o=n?n.length:0,i=[],f=i;for(typeof t=="function"&&(e=r,r=t,t=L),r&&(f=[],r=a(r,e));++u<o;){e=n[u];
|
|
||||||
var c=r?r(e,u,n):e;(t?!u||f[f.length-1]!==c:0>z(f,c))&&(r&&f.push(c),i.push(e))}return i}function V(n,t){return Ft||ht&&2<arguments.length?ht.call.apply(ht,arguments):i(n,t,p(arguments,2))}function W(n){var r=p(arguments,1);return setTimeout(function(){n.apply(t,r)},1)}function G(n){return n}function H(n){F(m(n),function(t){var r=u[t]=n[t];u.prototype[t]=function(){var n=[this.__wrapped__];return st.apply(n,arguments),n=r.apply(u,n),this.__chain__&&(n=new u(n),n.__chain__=J),n}})}var J=!0,K=null,L=!1,Q=typeof exports=="object"&&exports,X=typeof module=="object"&&module&&module.exports==Q&&module,Y=typeof global=="object"&&global;
|
|
||||||
Y.global===Y&&(n=Y);var Z=[],Y={},nt=0,tt=Y,rt=n._,et=/&(?:amp|lt|gt|quot|#39);/g,ut=RegExp("^"+(Y.valueOf+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),ot=/($^)/,it=/[&<>"']/g,at=/['\n\r\t\u2028\u2029\\]/g,ft=Math.ceil,ct=Z.concat,lt=Math.floor,pt=Y.hasOwnProperty,st=Z.push,vt=Y.toString,ht=ut.test(ht=p.bind)&&ht,gt=ut.test(gt=Array.isArray)&>,yt=n.isFinite,mt=n.isNaN,_t=ut.test(_t=Object.keys)&&_t,dt=Math.max,bt=Math.min,jt=Math.random,wt="[object Arguments]",At="[object Array]",xt="[object Boolean]",Et="[object Date]",Ot="[object Number]",St="[object Object]",Nt="[object RegExp]",kt="[object String]",Y=!!n.attachEvent,Y=ht&&!/\n|true/.test(ht+Y),Ft=ht&&!Y,Rt=(Rt={0:1,length:1},Z.splice.call(Rt,0,1),Rt[0]),Tt=arguments.constructor==Object,qt={"boolean":L,"function":J,object:J,number:L,string:L,undefined:L},It={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"};
|
|
||||||
u.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},v(arguments)||(v=function(n){return n?pt.call(n,"callee"):L});var Bt=gt||function(n){return Tt&&n instanceof Array||vt.call(n)==At},Dt=_t?function(n){return w(n)?_t(n):[]}:h,Mt={"&":"&","<":"<",">":">",'"':""","'":"'"},$t=_(Mt);j(/x/)&&(j=function(n){return n instanceof Function||"[object Function]"==vt.call(n)});var zt=R;Y&&X&&typeof setImmediate=="function"&&(W=V(setImmediate,n)),u.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0
|
|
||||||
}},u.bind=V,u.bindAll=function(n){for(var t=ct.apply(Z,arguments),r=1<t.length?0:(t=m(n),-1),e=t.length;++r<e;){var u=t[r];n[u]=V(n[u],n)}return n},u.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},u.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length;r--;)t=[n[r].apply(this,t)];return t[0]}},u.countBy=function(n,t,r){var e={};return t=a(t,r),F(n,function(n,r,u){r=t(n,r,u)+"",pt.call(e,r)?e[r]++:e[r]=1}),e},u.debounce=function(n,t,r){function e(){a=K,r||(o=n.apply(i,u))
|
|
||||||
}var u,o,i,a;return function(){var f=r&&!a;return u=arguments,i=this,clearTimeout(a),a=setTimeout(e,t),f&&(o=n.apply(i,u)),o}},u.defaults=y,u.defer=W,u.delay=function(n,r){var e=p(arguments,2);return setTimeout(function(){n.apply(t,e)},r)},u.difference=function(n){for(var t=-1,r=n.length,e=ct.apply(Z,arguments),u=[];++t<r;){var o=n[t];0>z(e,o,r)&&u.push(o)}return u},u.filter=N,u.flatten=$,u.forEach=F,u.functions=m,u.groupBy=function(n,t,r){var e={};return t=a(t,r),F(n,function(n,r,u){r=t(n,r,u)+"",(pt.call(e,r)?e[r]:e[r]=[]).push(n)
|
|
||||||
}),e},u.initial=function(n,t,r){if(!n)return[];var e=0,u=n.length;if(typeof t!="number"&&t!=K){var o=u;for(t=a(t,r);o--&&t(n[o],o,n);)e++}else e=t==K||r?1:t||e;return p(n,0,bt(dt(0,u-e),u))},u.intersection=function(n){var t=arguments,r=t.length,e=-1,u=n?n.length:0,o=[];n:for(;++e<u;){var i=n[e];if(0>z(o,i)){for(var a=r;--a;)if(0>z(t[a],i))continue n;o.push(i)}}return o},u.invert=_,u.invoke=function(n,t){var r=p(arguments,2),e=-1,u=typeof t=="function",o=n?n.length:0,i=Array(typeof o=="number"?o:0);
|
|
||||||
return F(n,function(n){i[++e]=(u?t:n[t]).apply(n,r)}),i},u.keys=Dt,u.map=R,u.max=T,u.memoize=function(n,t){var r={};return function(){var e=(t?t.apply(this,arguments):arguments[0])+"";return pt.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},u.min=function(n,t,r){var u=1/0,o=u;if(!t&&Bt(n)){r=-1;for(var i=n.length;++r<i;){var f=n[r];f<o&&(o=f)}}else t=a(t,r),e(n,function(n,r,e){r=t(n,r,e),r<u&&(u=r,o=n)});return o},u.object=function(n,t){for(var r=-1,e=n?n.length:0,u={};++r<e;){var o=n[r];t?u[o]=t[r]:u[o[0]]=o[1]
|
|
||||||
}return u},u.omit=function(n){var t=ct.apply(Z,arguments),e={};return r(n,function(n,r){0>z(t,r,1)&&(e[r]=n)}),e},u.once=function(n){var t,r;return function(){return t?r:(t=J,r=n.apply(this,arguments),n=K,r)}},u.pairs=function(n){for(var t=-1,r=Dt(n),e=r.length,u=Array(e);++t<e;){var o=r[t];u[t]=[o,n[o]]}return u},u.partial=function(n){return i(n,p(arguments,1))},u.pick=function(n){for(var t=0,r=ct.apply(Z,arguments),e=r.length,u={};++t<e;){var o=r[t];o in n&&(u[o]=n[o])}return u},u.pluck=zt,u.range=function(n,t,r){n=+n||0,r=+r||1,t==K&&(t=n,n=0);
|
|
||||||
var e=-1;t=dt(0,ft((t-n)/r));for(var u=Array(t);++e<t;)u[e]=n,n+=r;return u},u.reject=function(n,t,r){return t=a(t,r),N(n,function(n,r,e){return!t(n,r,e)})},u.rest=C,u.shuffle=function(n){var t=-1,r=n?n.length:0,e=Array(typeof r=="number"?r:0);return F(n,function(n){var r=lt(jt()*(++t+1));e[t]=e[r],e[r]=n}),e},u.sortBy=function(n,t,r){var e=-1,u=n?n.length:0,i=Array(typeof u=="number"?u:0);for(t=a(t,r),F(n,function(n,r,u){i[++e]={a:t(n,r,u),b:e,c:n}}),u=i.length,i.sort(o);u--;)i[u]=i[u].c;return i
|
|
||||||
},u.tap=function(n,t){return t(n),n},u.throttle=function(n,t){function r(){a=new Date,i=K,u=n.apply(o,e)}var e,u,o,i,a=0;return function(){var f=new Date,c=t-(f-a);return e=arguments,o=this,0<c?i||(i=setTimeout(r,c)):(clearTimeout(i),i=K,a=f,u=n.apply(o,e)),u}},u.times=function(n,t,r){n=+n||0;for(var e=-1,u=Array(n);++e<n;)u[e]=t.call(r,e);return u},u.toArray=function(n){return n&&typeof n.length=="number"?p(n):E(n)},u.union=function(){return U(ct.apply(Z,arguments))},u.uniq=U,u.values=E,u.where=D,u.without=function(n){for(var t=-1,r=n.length,e=[];++t<r;){var u=n[t];
|
|
||||||
0>z(arguments,u,1)&&e.push(u)}return e},u.wrap=function(n,t){return function(){var r=[n];return st.apply(r,arguments),t.apply(this,r)}},u.zip=function(n){for(var t=-1,r=n?T(zt(arguments,"length")):0,e=Array(r);++t<r;)e[t]=zt(arguments,t);return e},u.collect=R,u.drop=C,u.each=F,u.extend=g,u.methods=m,u.select=N,u.tail=C,u.unique=U,u.clone=function(n){return w(n)?Bt(n)?p(n):g({},n):n},u.contains=O,u.escape=function(n){return n==K?"":(n+"").replace(it,c)},u.every=S,u.find=k,u.findWhere=function(n,t){return D(n,t,J)
|
|
||||||
},u.has=function(n,t){return n?pt.call(n,t):L},u.identity=G,u.indexOf=z,u.isArguments=v,u.isArray=Bt,u.isBoolean=function(n){return n===J||n===L||vt.call(n)==xt},u.isDate=function(n){return n instanceof Date||vt.call(n)==Et},u.isElement=function(n){return n?1===n.nodeType:L},u.isEmpty=d,u.isEqual=b,u.isFinite=function(n){return yt(n)&&!mt(parseFloat(n))},u.isFunction=j,u.isNaN=function(n){return A(n)&&n!=+n},u.isNull=function(n){return n===K},u.isNumber=A,u.isObject=w,u.isRegExp=function(n){return n instanceof RegExp||vt.call(n)==Nt
|
|
||||||
},u.isString=x,u.isUndefined=function(n){return typeof n=="undefined"},u.lastIndexOf=function(n,t,r){var e=n?n.length:0;for(typeof r=="number"&&(e=(0>r?dt(0,e+r):bt(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},u.mixin=H,u.noConflict=function(){return n._=rt,this},u.random=function(n,t){return n==K&&t==K&&(t=1),n=+n||0,t==K&&(t=n,n=0),n+lt(jt()*((+t||0)-n+1))},u.reduce=q,u.reduceRight=I,u.result=function(n,t){var r=n?n[t]:K;return j(r)?n[t]():r},u.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Dt(n).length
|
|
||||||
},u.some=B,u.sortedIndex=P,u.template=function(n,t,r){n||(n=""),r=y({},r,u.templateSettings);var e=0,o="__p+='",i=r.variable;n.replace(RegExp((r.escape||ot).source+"|"+(r.interpolate||ot).source+"|"+(r.evaluate||ot).source+"|$","g"),function(t,r,u,i,a){return o+=n.slice(e,a).replace(at,f),r&&(o+="'+_['escape']("+r+")+'"),i&&(o+="';"+i+";__p+='"),u&&(o+="'+((__t=("+u+"))==null?'':__t)+'"),e=a+t.length,t}),o+="';\n",i||(i="obj",o="with("+i+"||{}){"+o+"}"),o="function("+i+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+o+"return __p}";
|
|
||||||
try{var a=Function("_","return "+o)(u)}catch(c){throw c.source=o,c}return t?a(t):(a.source=o,a)},u.unescape=function(n){return n==K?"":(n+"").replace(et,s)},u.uniqueId=function(n){var t=++nt+"";return n?n+t:t},u.all=S,u.any=B,u.detect=k,u.foldl=q,u.foldr=I,u.include=O,u.inject=q,u.first=M,u.last=function(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=K){var o=u;for(t=a(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,e==K||r)return n[u-1];return p(n,dt(0,u-e))}},u.take=M,u.head=M,u.chain=function(n){return n=new u(n),n.__chain__=J,n
|
|
||||||
},u.VERSION="1.0.1",H(u),u.prototype.chain=function(){return this.__chain__=J,this},u.prototype.value=function(){return this.__wrapped__},e("pop push reverse shift sort splice unshift".split(" "),function(n){var t=Z[n];u.prototype[n]=function(){var n=this.__wrapped__;return t.apply(n,arguments),Rt&&0===n.length&&delete n[0],this}}),e(["concat","join","slice"],function(n){var t=Z[n];u.prototype[n]=function(){var n=t.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new u(n),n.__chain__=J),n
|
|
||||||
}}),Q?X?(X.exports=u)._=u:Q._=u:n._=u})(this);
|
|
||||||
300
dist/mapping.fp.js
vendored
Normal file
300
dist/mapping.fp.js
vendored
Normal file
@@ -0,0 +1,300 @@
|
|||||||
|
(function webpackUniversalModuleDefinition(root, factory) {
|
||||||
|
if(typeof exports === 'object' && typeof module === 'object')
|
||||||
|
module.exports = factory();
|
||||||
|
else if(typeof define === 'function' && define.amd)
|
||||||
|
define([], factory);
|
||||||
|
else if(typeof exports === 'object')
|
||||||
|
exports["mapping"] = factory();
|
||||||
|
else
|
||||||
|
root["mapping"] = factory();
|
||||||
|
})(this, function() {
|
||||||
|
return /******/ (function(modules) { // webpackBootstrap
|
||||||
|
/******/ // The module cache
|
||||||
|
/******/ var installedModules = {};
|
||||||
|
|
||||||
|
/******/ // The require function
|
||||||
|
/******/ function __webpack_require__(moduleId) {
|
||||||
|
|
||||||
|
/******/ // Check if module is in cache
|
||||||
|
/******/ if(installedModules[moduleId])
|
||||||
|
/******/ return installedModules[moduleId].exports;
|
||||||
|
|
||||||
|
/******/ // Create a new module (and put it into the cache)
|
||||||
|
/******/ var module = installedModules[moduleId] = {
|
||||||
|
/******/ exports: {},
|
||||||
|
/******/ id: moduleId,
|
||||||
|
/******/ loaded: false
|
||||||
|
/******/ };
|
||||||
|
|
||||||
|
/******/ // Execute the module function
|
||||||
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||||||
|
|
||||||
|
/******/ // Flag the module as loaded
|
||||||
|
/******/ module.loaded = true;
|
||||||
|
|
||||||
|
/******/ // Return the exports of the module
|
||||||
|
/******/ return module.exports;
|
||||||
|
/******/ }
|
||||||
|
|
||||||
|
|
||||||
|
/******/ // expose the modules object (__webpack_modules__)
|
||||||
|
/******/ __webpack_require__.m = modules;
|
||||||
|
|
||||||
|
/******/ // expose the module cache
|
||||||
|
/******/ __webpack_require__.c = installedModules;
|
||||||
|
|
||||||
|
/******/ // __webpack_public_path__
|
||||||
|
/******/ __webpack_require__.p = "";
|
||||||
|
|
||||||
|
/******/ // Load entry module and return exports
|
||||||
|
/******/ return __webpack_require__(0);
|
||||||
|
/******/ })
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ ([
|
||||||
|
/* 0 */
|
||||||
|
/***/ function(module, exports) {
|
||||||
|
|
||||||
|
/** Used to map aliases to their real names. */
|
||||||
|
exports.aliasToReal = {
|
||||||
|
'__': 'placeholder',
|
||||||
|
'all': 'some',
|
||||||
|
'allPass': 'overEvery',
|
||||||
|
'apply': 'spread',
|
||||||
|
'assoc': 'set',
|
||||||
|
'assocPath': 'set',
|
||||||
|
'compose': 'flowRight',
|
||||||
|
'contains': 'includes',
|
||||||
|
'dissoc': 'unset',
|
||||||
|
'dissocPath': 'unset',
|
||||||
|
'each': 'forEach',
|
||||||
|
'eachRight': 'forEachRight',
|
||||||
|
'equals': 'isEqual',
|
||||||
|
'extend': 'assignIn',
|
||||||
|
'extendWith': 'assignInWith',
|
||||||
|
'first': 'head',
|
||||||
|
'init': 'initial',
|
||||||
|
'mapObj': 'mapValues',
|
||||||
|
'omitAll': 'omit',
|
||||||
|
'nAry': 'ary',
|
||||||
|
'path': 'get',
|
||||||
|
'pathEq': 'matchesProperty',
|
||||||
|
'pathOr': 'getOr',
|
||||||
|
'pickAll': 'pick',
|
||||||
|
'pipe': 'flow',
|
||||||
|
'prop': 'get',
|
||||||
|
'propOf': 'propertyOf',
|
||||||
|
'propOr': 'getOr',
|
||||||
|
'somePass': 'overSome',
|
||||||
|
'unapply': 'rest',
|
||||||
|
'unnest': 'flatten',
|
||||||
|
'useWith': 'overArgs',
|
||||||
|
'whereEq': 'filter',
|
||||||
|
'zipObj': 'zipObject'
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map ary to method names. */
|
||||||
|
exports.aryMethod = {
|
||||||
|
'1': [
|
||||||
|
'attempt', 'castArray', 'ceil', 'create', 'curry', 'curryRight', 'floor',
|
||||||
|
'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'methodOf', 'mixin',
|
||||||
|
'over', 'overEvery', 'overSome', 'rest', 'reverse', 'round', 'runInContext',
|
||||||
|
'spread', 'template', 'trim', 'trimEnd', 'trimStart', 'uniqueId', 'words'
|
||||||
|
],
|
||||||
|
'2': [
|
||||||
|
'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindKey',
|
||||||
|
'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN',
|
||||||
|
'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference',
|
||||||
|
'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', 'every',
|
||||||
|
'filter', 'find', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
|
||||||
|
'findLastKey', 'flatMap', 'flattenDepth', 'forEach', 'forEachRight', 'forIn',
|
||||||
|
'forInRight', 'forOwn', 'forOwnRight', 'get', 'groupBy', 'gt', 'gte', 'has',
|
||||||
|
'hasIn', 'includes', 'indexOf', 'intersection', 'invertBy', 'invoke', 'invokeMap',
|
||||||
|
'isEqual', 'isMatch', 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map',
|
||||||
|
'mapKeys', 'mapValues', 'matchesProperty', 'maxBy', 'merge', 'minBy', 'omit',
|
||||||
|
'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt',
|
||||||
|
'partial', 'partialRight', 'partition', 'pick', 'pickBy', 'pull', 'pullAll',
|
||||||
|
'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',
|
||||||
|
'repeat', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',
|
||||||
|
'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',
|
||||||
|
'split', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', 'takeRightWhile',
|
||||||
|
'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars', 'trimCharsEnd',
|
||||||
|
'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith', 'unset',
|
||||||
|
'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject', 'zipObjectDeep'
|
||||||
|
],
|
||||||
|
'3': [
|
||||||
|
'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
|
||||||
|
'getOr', 'inRange', 'intersectionBy', 'intersectionWith', 'isEqualWith',
|
||||||
|
'isMatchWith', 'mergeWith', 'orderBy', 'pullAllBy', 'reduce', 'reduceRight',
|
||||||
|
'replace', 'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', 'transform',
|
||||||
|
'unionBy', 'unionWith', 'xorBy', 'xorWith', 'zipWith'
|
||||||
|
],
|
||||||
|
'4': [
|
||||||
|
'fill', 'setWith'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map ary to rearg configs. */
|
||||||
|
exports.aryRearg = {
|
||||||
|
'2': [1, 0],
|
||||||
|
'3': [2, 0, 1],
|
||||||
|
'4': [3, 2, 0, 1]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to their iteratee ary. */
|
||||||
|
exports.iterateeAry = {
|
||||||
|
'assignWith': 2,
|
||||||
|
'assignInWith': 2,
|
||||||
|
'cloneDeepWith': 1,
|
||||||
|
'cloneWith': 1,
|
||||||
|
'dropRightWhile': 1,
|
||||||
|
'dropWhile': 1,
|
||||||
|
'every': 1,
|
||||||
|
'filter': 1,
|
||||||
|
'find': 1,
|
||||||
|
'findIndex': 1,
|
||||||
|
'findKey': 1,
|
||||||
|
'findLast': 1,
|
||||||
|
'findLastIndex': 1,
|
||||||
|
'findLastKey': 1,
|
||||||
|
'flatMap': 1,
|
||||||
|
'forEach': 1,
|
||||||
|
'forEachRight': 1,
|
||||||
|
'forIn': 1,
|
||||||
|
'forInRight': 1,
|
||||||
|
'forOwn': 1,
|
||||||
|
'forOwnRight': 1,
|
||||||
|
'isEqualWith': 2,
|
||||||
|
'isMatchWith': 2,
|
||||||
|
'map': 1,
|
||||||
|
'mapKeys': 1,
|
||||||
|
'mapValues': 1,
|
||||||
|
'partition': 1,
|
||||||
|
'reduce': 2,
|
||||||
|
'reduceRight': 2,
|
||||||
|
'reject': 1,
|
||||||
|
'remove': 1,
|
||||||
|
'some': 1,
|
||||||
|
'takeRightWhile': 1,
|
||||||
|
'takeWhile': 1,
|
||||||
|
'times': 1,
|
||||||
|
'transform': 2
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to iteratee rearg configs. */
|
||||||
|
exports.iterateeRearg = {
|
||||||
|
'mapKeys': [1]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to rearg configs. */
|
||||||
|
exports.methodRearg = {
|
||||||
|
'assignInWith': [1, 2, 0],
|
||||||
|
'assignWith': [1, 2, 0],
|
||||||
|
'getOr': [2, 1, 0],
|
||||||
|
'isMatchWith': [2, 1, 0],
|
||||||
|
'mergeWith': [1, 2, 0],
|
||||||
|
'pullAllBy': [2, 1, 0],
|
||||||
|
'setWith': [3, 1, 2, 0],
|
||||||
|
'sortedIndexBy': [2, 1, 0],
|
||||||
|
'sortedLastIndexBy': [2, 1, 0],
|
||||||
|
'zipWith': [1, 2, 0]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to spread configs. */
|
||||||
|
exports.methodSpread = {
|
||||||
|
'partial': 1,
|
||||||
|
'partialRight': 1
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to identify methods which mutate arrays or objects. */
|
||||||
|
exports.mutate = {
|
||||||
|
'array': {
|
||||||
|
'fill': true,
|
||||||
|
'pull': true,
|
||||||
|
'pullAll': true,
|
||||||
|
'pullAllBy': true,
|
||||||
|
'pullAt': true,
|
||||||
|
'remove': true,
|
||||||
|
'reverse': true
|
||||||
|
},
|
||||||
|
'object': {
|
||||||
|
'assign': true,
|
||||||
|
'assignIn': true,
|
||||||
|
'assignInWith': true,
|
||||||
|
'assignWith': true,
|
||||||
|
'defaults': true,
|
||||||
|
'defaultsDeep': true,
|
||||||
|
'merge': true,
|
||||||
|
'mergeWith': true
|
||||||
|
},
|
||||||
|
'set': {
|
||||||
|
'set': true,
|
||||||
|
'setWith': true,
|
||||||
|
'unset': true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to track methods with placeholder support */
|
||||||
|
exports.placeholder = {
|
||||||
|
'bind': true,
|
||||||
|
'bindKey': true,
|
||||||
|
'curry': true,
|
||||||
|
'curryRight': true,
|
||||||
|
'partial': true,
|
||||||
|
'partialRight': true
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map real names to their aliases. */
|
||||||
|
exports.realToAlias = (function() {
|
||||||
|
var hasOwnProperty = Object.prototype.hasOwnProperty,
|
||||||
|
object = exports.aliasToReal,
|
||||||
|
result = {};
|
||||||
|
|
||||||
|
for (var key in object) {
|
||||||
|
var value = object[key];
|
||||||
|
if (hasOwnProperty.call(result, value)) {
|
||||||
|
result[value].push(key);
|
||||||
|
} else {
|
||||||
|
result[value] = [key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}());
|
||||||
|
|
||||||
|
/** Used to map method names to other names. */
|
||||||
|
exports.remap = {
|
||||||
|
'curryN': 'curry',
|
||||||
|
'curryRightN': 'curryRight',
|
||||||
|
'getOr': 'get',
|
||||||
|
'trimChars': 'trim',
|
||||||
|
'trimCharsEnd': 'trimEnd',
|
||||||
|
'trimCharsStart': 'trimStart'
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to track methods that skip `_.rearg`. */
|
||||||
|
exports.skipRearg = {
|
||||||
|
'add': true,
|
||||||
|
'assign': true,
|
||||||
|
'assignIn': true,
|
||||||
|
'concat': true,
|
||||||
|
'difference': true,
|
||||||
|
'gt': true,
|
||||||
|
'gte': true,
|
||||||
|
'lt': true,
|
||||||
|
'lte': true,
|
||||||
|
'matchesProperty': true,
|
||||||
|
'merge': true,
|
||||||
|
'partial': true,
|
||||||
|
'partialRight': true,
|
||||||
|
'random': true,
|
||||||
|
'range': true,
|
||||||
|
'rangeRight': true,
|
||||||
|
'subtract': true,
|
||||||
|
'zip': true,
|
||||||
|
'zipObject': true
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }
|
||||||
|
/******/ ])
|
||||||
|
});
|
||||||
|
;
|
||||||
10025
doc/README.md
10025
doc/README.md
File diff suppressed because it is too large
Load Diff
@@ -1,36 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
// cleanup requested filepath
|
|
||||||
$file = isset($_GET['f']) ? $_GET['f'] : 'lodash';
|
|
||||||
$file = preg_replace('#(\.*[\/])+#', '', $file);
|
|
||||||
$file .= preg_match('/\.[a-z]+$/', $file) ? '' : '.js';
|
|
||||||
|
|
||||||
// output filename
|
|
||||||
if (isset($_GET['o'])) {
|
|
||||||
$output = $_GET['o'];
|
|
||||||
} else if (isset($_SERVER['argv'][1])) {
|
|
||||||
$output = $_SERVER['argv'][1];
|
|
||||||
} else {
|
|
||||||
$output = basename($file);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
require('../vendor/docdown/docdown.php');
|
|
||||||
|
|
||||||
// generate Markdown
|
|
||||||
$markdown = docdown(array(
|
|
||||||
'path' => '../' . $file,
|
|
||||||
'title' => 'Lo-Dash <sup>v1.0.1</sup>',
|
|
||||||
'toc' => 'categories',
|
|
||||||
'url' => 'https://github.com/bestiejs/lodash/blob/master/lodash.js'
|
|
||||||
));
|
|
||||||
|
|
||||||
// save to a .md file
|
|
||||||
file_put_contents($output . '.md', $markdown);
|
|
||||||
|
|
||||||
// print
|
|
||||||
header('Content-Type: text/plain;charset=utf-8');
|
|
||||||
echo $markdown . PHP_EOL;
|
|
||||||
|
|
||||||
?>
|
|
||||||
318
fp/_baseConvert.js
Normal file
318
fp/_baseConvert.js
Normal file
@@ -0,0 +1,318 @@
|
|||||||
|
var mapping = require('./_mapping'),
|
||||||
|
mutateMap = mapping.mutate,
|
||||||
|
placeholder = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The base implementation of `convert` which accepts a `util` object of methods
|
||||||
|
* required to perform conversions.
|
||||||
|
*
|
||||||
|
* @param {Object} util The util object.
|
||||||
|
* @param {string} name The name of the function to wrap.
|
||||||
|
* @param {Function} func The function to wrap.
|
||||||
|
* @param {Object} [options] The options object.
|
||||||
|
* @param {boolean} [options.cap=true] Specify capping iteratee arguments.
|
||||||
|
* @param {boolean} [options.curry=true] Specify currying.
|
||||||
|
* @param {boolean} [options.fixed=true] Specify fixed arity.
|
||||||
|
* @param {boolean} [options.immutable=true] Specify immutable operations.
|
||||||
|
* @param {boolean} [options.rearg=true] Specify rearranging arguments.
|
||||||
|
* @returns {Function|Object} Returns the converted function or object.
|
||||||
|
*/
|
||||||
|
function baseConvert(util, name, func, options) {
|
||||||
|
var setPlaceholder,
|
||||||
|
isLib = typeof name == 'function',
|
||||||
|
isObj = name === Object(name);
|
||||||
|
|
||||||
|
if (isObj) {
|
||||||
|
options = func;
|
||||||
|
func = name;
|
||||||
|
name = undefined;
|
||||||
|
}
|
||||||
|
if (func == null) {
|
||||||
|
throw new TypeError;
|
||||||
|
}
|
||||||
|
options || (options = {});
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
'cap': 'cap' in options ? options.cap : true,
|
||||||
|
'curry': 'curry' in options ? options.curry : true,
|
||||||
|
'fixed': 'fixed' in options ? options.fixed : true,
|
||||||
|
'immutable': 'immutable' in options ? options.immutable : true,
|
||||||
|
'rearg': 'rearg' in options ? options.rearg : true
|
||||||
|
};
|
||||||
|
|
||||||
|
var forceRearg = ('rearg' in options) && options.rearg;
|
||||||
|
|
||||||
|
var helpers = isLib ? func : {
|
||||||
|
'ary': util.ary,
|
||||||
|
'clone': util.clone,
|
||||||
|
'curry': util.curry,
|
||||||
|
'forEach': util.forEach,
|
||||||
|
'isArray': util.isArray,
|
||||||
|
'isFunction': util.isFunction,
|
||||||
|
'iteratee': util.iteratee,
|
||||||
|
'keys': util.keys,
|
||||||
|
'rearg': util.rearg,
|
||||||
|
'spread': util.spread,
|
||||||
|
'toPath': util.toPath
|
||||||
|
};
|
||||||
|
|
||||||
|
var ary = helpers.ary,
|
||||||
|
clone = helpers.clone,
|
||||||
|
curry = helpers.curry,
|
||||||
|
each = helpers.forEach,
|
||||||
|
isArray = helpers.isArray,
|
||||||
|
isFunction = helpers.isFunction,
|
||||||
|
keys = helpers.keys,
|
||||||
|
rearg = helpers.rearg,
|
||||||
|
spread = helpers.spread,
|
||||||
|
toPath = helpers.toPath;
|
||||||
|
|
||||||
|
var aryMethodKeys = keys(mapping.aryMethod);
|
||||||
|
|
||||||
|
var baseArity = function(func, n) {
|
||||||
|
return n == 2
|
||||||
|
? function(a, b) { return func.apply(undefined, arguments); }
|
||||||
|
: function(a) { return func.apply(undefined, arguments); };
|
||||||
|
};
|
||||||
|
|
||||||
|
var baseAry = function(func, n) {
|
||||||
|
return n == 2
|
||||||
|
? function(a, b) { return func(a, b); }
|
||||||
|
: function(a) { return func(a); };
|
||||||
|
};
|
||||||
|
|
||||||
|
var cloneArray = function(array) {
|
||||||
|
var length = array ? array.length : 0,
|
||||||
|
result = Array(length);
|
||||||
|
|
||||||
|
while (length--) {
|
||||||
|
result[length] = array[length];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
var cloneByPath = function(object, path) {
|
||||||
|
path = toPath(path);
|
||||||
|
|
||||||
|
var index = -1,
|
||||||
|
length = path.length,
|
||||||
|
result = clone(Object(object)),
|
||||||
|
nested = result;
|
||||||
|
|
||||||
|
while (nested != null && ++index < length) {
|
||||||
|
var key = path[index],
|
||||||
|
value = nested[key];
|
||||||
|
|
||||||
|
if (value != null) {
|
||||||
|
nested[key] = clone(Object(value));
|
||||||
|
}
|
||||||
|
nested = nested[key];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
var createCloner = function(func) {
|
||||||
|
return function(object) {
|
||||||
|
return func({}, object);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var immutWrap = function(func, cloner) {
|
||||||
|
return function() {
|
||||||
|
var length = arguments.length;
|
||||||
|
if (!length) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
var args = Array(length);
|
||||||
|
while (length--) {
|
||||||
|
args[length] = arguments[length];
|
||||||
|
}
|
||||||
|
var result = args[0] = cloner.apply(undefined, args);
|
||||||
|
func.apply(undefined, args);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var iterateeAry = function(func, n) {
|
||||||
|
return overArg(func, function(func) {
|
||||||
|
return typeof func == 'function' ? baseAry(func, n) : func;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var iterateeRearg = function(func, indexes) {
|
||||||
|
return overArg(func, function(func) {
|
||||||
|
var n = indexes.length;
|
||||||
|
return baseArity(rearg(baseAry(func, n), indexes), n);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var overArg = function(func, iteratee, retArg) {
|
||||||
|
return function() {
|
||||||
|
var length = arguments.length;
|
||||||
|
if (!length) {
|
||||||
|
return func();
|
||||||
|
}
|
||||||
|
var args = Array(length);
|
||||||
|
while (length--) {
|
||||||
|
args[length] = arguments[length];
|
||||||
|
}
|
||||||
|
var index = config.rearg ? 0 : (length - 1);
|
||||||
|
args[index] = iteratee(args[index]);
|
||||||
|
return func.apply(undefined, args);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var wrappers = {
|
||||||
|
'castArray': function(castArray) {
|
||||||
|
return function() {
|
||||||
|
var value = arguments[0];
|
||||||
|
return isArray(value)
|
||||||
|
? castArray(cloneArray(value))
|
||||||
|
: castArray.apply(undefined, arguments);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
'iteratee': function(iteratee) {
|
||||||
|
return function() {
|
||||||
|
var func = arguments[0],
|
||||||
|
arity = arguments[1],
|
||||||
|
result = iteratee(func, arity),
|
||||||
|
length = result.length;
|
||||||
|
|
||||||
|
if (config.cap && typeof arity == 'number') {
|
||||||
|
arity = arity > 2 ? (arity - 2) : 1;
|
||||||
|
return (length && length <= arity) ? result : baseAry(result, arity);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
},
|
||||||
|
'mixin': function(mixin) {
|
||||||
|
return function(source) {
|
||||||
|
var func = this;
|
||||||
|
if (!isFunction(func)) {
|
||||||
|
return mixin(func, Object(source));
|
||||||
|
}
|
||||||
|
var methods = [],
|
||||||
|
methodNames = [];
|
||||||
|
|
||||||
|
each(keys(source), function(key) {
|
||||||
|
var value = source[key];
|
||||||
|
if (isFunction(value)) {
|
||||||
|
methodNames.push(key);
|
||||||
|
methods.push(func.prototype[key]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mixin(func, Object(source));
|
||||||
|
|
||||||
|
each(methodNames, function(methodName, index) {
|
||||||
|
var method = methods[index];
|
||||||
|
if (isFunction(method)) {
|
||||||
|
func.prototype[methodName] = method;
|
||||||
|
} else {
|
||||||
|
delete func.prototype[methodName];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return func;
|
||||||
|
};
|
||||||
|
},
|
||||||
|
'runInContext': function(runInContext) {
|
||||||
|
return function(context) {
|
||||||
|
return baseConvert(util, runInContext(context), options);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var wrap = function(name, func) {
|
||||||
|
name = mapping.aliasToReal[name] || name;
|
||||||
|
var wrapper = wrappers[name];
|
||||||
|
if (wrapper) {
|
||||||
|
return wrapper(func);
|
||||||
|
}
|
||||||
|
var wrapped = func;
|
||||||
|
if (config.immutable) {
|
||||||
|
if (mutateMap.array[name]) {
|
||||||
|
wrapped = immutWrap(func, cloneArray);
|
||||||
|
}
|
||||||
|
else if (mutateMap.object[name]) {
|
||||||
|
wrapped = immutWrap(func, createCloner(func));
|
||||||
|
}
|
||||||
|
else if (mutateMap.set[name]) {
|
||||||
|
wrapped = immutWrap(func, cloneByPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var result;
|
||||||
|
each(aryMethodKeys, function(aryKey) {
|
||||||
|
each(mapping.aryMethod[aryKey], function(otherName) {
|
||||||
|
if (name == otherName) {
|
||||||
|
var aryN = !isLib && mapping.iterateeAry[name],
|
||||||
|
reargIndexes = mapping.iterateeRearg[name],
|
||||||
|
spreadStart = mapping.methodSpread[name];
|
||||||
|
|
||||||
|
result = wrapped;
|
||||||
|
if (config.fixed) {
|
||||||
|
result = spreadStart === undefined
|
||||||
|
? ary(result, aryKey)
|
||||||
|
: spread(result, spreadStart);
|
||||||
|
}
|
||||||
|
if (config.rearg && aryKey > 1 && (forceRearg || !mapping.skipRearg[name])) {
|
||||||
|
result = rearg(result, mapping.methodRearg[name] || mapping.aryRearg[aryKey]);
|
||||||
|
}
|
||||||
|
if (config.cap) {
|
||||||
|
if (reargIndexes) {
|
||||||
|
result = iterateeRearg(result, reargIndexes);
|
||||||
|
} else if (aryN) {
|
||||||
|
result = iterateeAry(result, aryN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (config.curry && aryKey > 1) {
|
||||||
|
result = curry(result, aryKey);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return !result;
|
||||||
|
});
|
||||||
|
|
||||||
|
result || (result = wrapped);
|
||||||
|
if (mapping.placeholder[name]) {
|
||||||
|
setPlaceholder = true;
|
||||||
|
func.placeholder = result.placeholder = placeholder;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!isObj) {
|
||||||
|
return wrap(name, func);
|
||||||
|
}
|
||||||
|
var _ = func;
|
||||||
|
|
||||||
|
// Iterate over methods for the current ary cap.
|
||||||
|
var pairs = [];
|
||||||
|
each(aryMethodKeys, function(aryKey) {
|
||||||
|
each(mapping.aryMethod[aryKey], function(key) {
|
||||||
|
var func = _[mapping.remap[key] || key];
|
||||||
|
if (func) {
|
||||||
|
pairs.push([key, wrap(key, func)]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Assign to `_` leaving `_.prototype` unchanged to allow chaining.
|
||||||
|
each(pairs, function(pair) {
|
||||||
|
_[pair[0]] = pair[1];
|
||||||
|
});
|
||||||
|
|
||||||
|
if (setPlaceholder) {
|
||||||
|
_.placeholder = placeholder;
|
||||||
|
}
|
||||||
|
// Wrap the lodash method and its aliases.
|
||||||
|
each(keys(_), function(key) {
|
||||||
|
each(mapping.realToAlias[key] || [], function(alias) {
|
||||||
|
_[alias] = _[key];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return _;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = baseConvert;
|
||||||
17
fp/_convertBrowser.js
Normal file
17
fp/_convertBrowser.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
var baseConvert = require('./_baseConvert');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts `lodash` to an immutable auto-curried iteratee-first data-last version.
|
||||||
|
*
|
||||||
|
* @param {Function} lodash The lodash function.
|
||||||
|
* @param {Object} [options] The options object. See `baseConvert` for more details.
|
||||||
|
* @returns {Function} Returns the converted `lodash`.
|
||||||
|
*/
|
||||||
|
function browserConvert(lodash, options) {
|
||||||
|
return baseConvert(lodash, lodash, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof _ == 'function') {
|
||||||
|
_ = browserConvert(_.runInContext());
|
||||||
|
}
|
||||||
|
module.exports = browserConvert;
|
||||||
238
fp/_mapping.js
Normal file
238
fp/_mapping.js
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
/** Used to map aliases to their real names. */
|
||||||
|
exports.aliasToReal = {
|
||||||
|
'__': 'placeholder',
|
||||||
|
'all': 'some',
|
||||||
|
'allPass': 'overEvery',
|
||||||
|
'apply': 'spread',
|
||||||
|
'assoc': 'set',
|
||||||
|
'assocPath': 'set',
|
||||||
|
'compose': 'flowRight',
|
||||||
|
'contains': 'includes',
|
||||||
|
'dissoc': 'unset',
|
||||||
|
'dissocPath': 'unset',
|
||||||
|
'each': 'forEach',
|
||||||
|
'eachRight': 'forEachRight',
|
||||||
|
'equals': 'isEqual',
|
||||||
|
'extend': 'assignIn',
|
||||||
|
'extendWith': 'assignInWith',
|
||||||
|
'first': 'head',
|
||||||
|
'init': 'initial',
|
||||||
|
'mapObj': 'mapValues',
|
||||||
|
'omitAll': 'omit',
|
||||||
|
'nAry': 'ary',
|
||||||
|
'path': 'get',
|
||||||
|
'pathEq': 'matchesProperty',
|
||||||
|
'pathOr': 'getOr',
|
||||||
|
'pickAll': 'pick',
|
||||||
|
'pipe': 'flow',
|
||||||
|
'prop': 'get',
|
||||||
|
'propOf': 'propertyOf',
|
||||||
|
'propOr': 'getOr',
|
||||||
|
'somePass': 'overSome',
|
||||||
|
'unapply': 'rest',
|
||||||
|
'unnest': 'flatten',
|
||||||
|
'useWith': 'overArgs',
|
||||||
|
'whereEq': 'filter',
|
||||||
|
'zipObj': 'zipObject'
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map ary to method names. */
|
||||||
|
exports.aryMethod = {
|
||||||
|
'1': [
|
||||||
|
'attempt', 'castArray', 'ceil', 'create', 'curry', 'curryRight', 'floor',
|
||||||
|
'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'methodOf', 'mixin',
|
||||||
|
'over', 'overEvery', 'overSome', 'rest', 'reverse', 'round', 'runInContext',
|
||||||
|
'spread', 'template', 'trim', 'trimEnd', 'trimStart', 'uniqueId', 'words'
|
||||||
|
],
|
||||||
|
'2': [
|
||||||
|
'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindKey',
|
||||||
|
'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN',
|
||||||
|
'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference',
|
||||||
|
'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', 'every',
|
||||||
|
'filter', 'find', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
|
||||||
|
'findLastKey', 'flatMap', 'flattenDepth', 'forEach', 'forEachRight', 'forIn',
|
||||||
|
'forInRight', 'forOwn', 'forOwnRight', 'get', 'groupBy', 'gt', 'gte', 'has',
|
||||||
|
'hasIn', 'includes', 'indexOf', 'intersection', 'invertBy', 'invoke', 'invokeMap',
|
||||||
|
'isEqual', 'isMatch', 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map',
|
||||||
|
'mapKeys', 'mapValues', 'matchesProperty', 'maxBy', 'merge', 'minBy', 'omit',
|
||||||
|
'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt',
|
||||||
|
'partial', 'partialRight', 'partition', 'pick', 'pickBy', 'pull', 'pullAll',
|
||||||
|
'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',
|
||||||
|
'repeat', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',
|
||||||
|
'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',
|
||||||
|
'split', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', 'takeRightWhile',
|
||||||
|
'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars', 'trimCharsEnd',
|
||||||
|
'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith', 'unset',
|
||||||
|
'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject', 'zipObjectDeep'
|
||||||
|
],
|
||||||
|
'3': [
|
||||||
|
'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
|
||||||
|
'getOr', 'inRange', 'intersectionBy', 'intersectionWith', 'isEqualWith',
|
||||||
|
'isMatchWith', 'mergeWith', 'orderBy', 'pullAllBy', 'reduce', 'reduceRight',
|
||||||
|
'replace', 'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', 'transform',
|
||||||
|
'unionBy', 'unionWith', 'xorBy', 'xorWith', 'zipWith'
|
||||||
|
],
|
||||||
|
'4': [
|
||||||
|
'fill', 'setWith'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map ary to rearg configs. */
|
||||||
|
exports.aryRearg = {
|
||||||
|
'2': [1, 0],
|
||||||
|
'3': [2, 0, 1],
|
||||||
|
'4': [3, 2, 0, 1]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to their iteratee ary. */
|
||||||
|
exports.iterateeAry = {
|
||||||
|
'assignWith': 2,
|
||||||
|
'assignInWith': 2,
|
||||||
|
'cloneDeepWith': 1,
|
||||||
|
'cloneWith': 1,
|
||||||
|
'dropRightWhile': 1,
|
||||||
|
'dropWhile': 1,
|
||||||
|
'every': 1,
|
||||||
|
'filter': 1,
|
||||||
|
'find': 1,
|
||||||
|
'findIndex': 1,
|
||||||
|
'findKey': 1,
|
||||||
|
'findLast': 1,
|
||||||
|
'findLastIndex': 1,
|
||||||
|
'findLastKey': 1,
|
||||||
|
'flatMap': 1,
|
||||||
|
'forEach': 1,
|
||||||
|
'forEachRight': 1,
|
||||||
|
'forIn': 1,
|
||||||
|
'forInRight': 1,
|
||||||
|
'forOwn': 1,
|
||||||
|
'forOwnRight': 1,
|
||||||
|
'isEqualWith': 2,
|
||||||
|
'isMatchWith': 2,
|
||||||
|
'map': 1,
|
||||||
|
'mapKeys': 1,
|
||||||
|
'mapValues': 1,
|
||||||
|
'partition': 1,
|
||||||
|
'reduce': 2,
|
||||||
|
'reduceRight': 2,
|
||||||
|
'reject': 1,
|
||||||
|
'remove': 1,
|
||||||
|
'some': 1,
|
||||||
|
'takeRightWhile': 1,
|
||||||
|
'takeWhile': 1,
|
||||||
|
'times': 1,
|
||||||
|
'transform': 2
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to iteratee rearg configs. */
|
||||||
|
exports.iterateeRearg = {
|
||||||
|
'mapKeys': [1]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to rearg configs. */
|
||||||
|
exports.methodRearg = {
|
||||||
|
'assignInWith': [1, 2, 0],
|
||||||
|
'assignWith': [1, 2, 0],
|
||||||
|
'getOr': [2, 1, 0],
|
||||||
|
'isMatchWith': [2, 1, 0],
|
||||||
|
'mergeWith': [1, 2, 0],
|
||||||
|
'pullAllBy': [2, 1, 0],
|
||||||
|
'setWith': [3, 1, 2, 0],
|
||||||
|
'sortedIndexBy': [2, 1, 0],
|
||||||
|
'sortedLastIndexBy': [2, 1, 0],
|
||||||
|
'zipWith': [1, 2, 0]
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map method names to spread configs. */
|
||||||
|
exports.methodSpread = {
|
||||||
|
'partial': 1,
|
||||||
|
'partialRight': 1
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to identify methods which mutate arrays or objects. */
|
||||||
|
exports.mutate = {
|
||||||
|
'array': {
|
||||||
|
'fill': true,
|
||||||
|
'pull': true,
|
||||||
|
'pullAll': true,
|
||||||
|
'pullAllBy': true,
|
||||||
|
'pullAt': true,
|
||||||
|
'remove': true,
|
||||||
|
'reverse': true
|
||||||
|
},
|
||||||
|
'object': {
|
||||||
|
'assign': true,
|
||||||
|
'assignIn': true,
|
||||||
|
'assignInWith': true,
|
||||||
|
'assignWith': true,
|
||||||
|
'defaults': true,
|
||||||
|
'defaultsDeep': true,
|
||||||
|
'merge': true,
|
||||||
|
'mergeWith': true
|
||||||
|
},
|
||||||
|
'set': {
|
||||||
|
'set': true,
|
||||||
|
'setWith': true,
|
||||||
|
'unset': true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to track methods with placeholder support */
|
||||||
|
exports.placeholder = {
|
||||||
|
'bind': true,
|
||||||
|
'bindKey': true,
|
||||||
|
'curry': true,
|
||||||
|
'curryRight': true,
|
||||||
|
'partial': true,
|
||||||
|
'partialRight': true
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to map real names to their aliases. */
|
||||||
|
exports.realToAlias = (function() {
|
||||||
|
var hasOwnProperty = Object.prototype.hasOwnProperty,
|
||||||
|
object = exports.aliasToReal,
|
||||||
|
result = {};
|
||||||
|
|
||||||
|
for (var key in object) {
|
||||||
|
var value = object[key];
|
||||||
|
if (hasOwnProperty.call(result, value)) {
|
||||||
|
result[value].push(key);
|
||||||
|
} else {
|
||||||
|
result[value] = [key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}());
|
||||||
|
|
||||||
|
/** Used to map method names to other names. */
|
||||||
|
exports.remap = {
|
||||||
|
'curryN': 'curry',
|
||||||
|
'curryRightN': 'curryRight',
|
||||||
|
'getOr': 'get',
|
||||||
|
'trimChars': 'trim',
|
||||||
|
'trimCharsEnd': 'trimEnd',
|
||||||
|
'trimCharsStart': 'trimStart'
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used to track methods that skip `_.rearg`. */
|
||||||
|
exports.skipRearg = {
|
||||||
|
'add': true,
|
||||||
|
'assign': true,
|
||||||
|
'assignIn': true,
|
||||||
|
'concat': true,
|
||||||
|
'difference': true,
|
||||||
|
'gt': true,
|
||||||
|
'gte': true,
|
||||||
|
'lt': true,
|
||||||
|
'lte': true,
|
||||||
|
'matchesProperty': true,
|
||||||
|
'merge': true,
|
||||||
|
'partial': true,
|
||||||
|
'partialRight': true,
|
||||||
|
'random': true,
|
||||||
|
'range': true,
|
||||||
|
'rangeRight': true,
|
||||||
|
'subtract': true,
|
||||||
|
'zip': true,
|
||||||
|
'zipObject': true
|
||||||
|
};
|
||||||
26
lib/common/minify.js
Normal file
26
lib/common/minify.js
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _ = require('lodash'),
|
||||||
|
fs = require('fs-extra'),
|
||||||
|
uglify = require('uglify-js');
|
||||||
|
|
||||||
|
var uglifyOptions = require('./uglify.options');
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
function minify(srcPath, destPath, callback, options) {
|
||||||
|
if (_.isFunction(destPath)) {
|
||||||
|
if (_.isObject(callback)) {
|
||||||
|
options = callback;
|
||||||
|
}
|
||||||
|
callback = destPath;
|
||||||
|
destPath = undefined;
|
||||||
|
}
|
||||||
|
if (!destPath) {
|
||||||
|
destPath = srcPath.replace(/(?=\.js$)/, '.min');
|
||||||
|
}
|
||||||
|
var output = uglify.minify(srcPath, _.defaults(options || {}, uglifyOptions));
|
||||||
|
fs.writeFile(destPath, output.code, 'utf-8', callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = minify;
|
||||||
16
lib/common/uglify.options.js
Normal file
16
lib/common/uglify.options.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
module.exports = {
|
||||||
|
'compress': {
|
||||||
|
'pure_getters': true,
|
||||||
|
'unsafe': true,
|
||||||
|
'unsafe_comps': true,
|
||||||
|
'warnings': false
|
||||||
|
},
|
||||||
|
'mangle': {
|
||||||
|
'except': ['define']
|
||||||
|
},
|
||||||
|
'output': {
|
||||||
|
'ascii_only': true,
|
||||||
|
'comments': /^!|@cc_on|@license|@preserve/i,
|
||||||
|
'max_line_len': 500
|
||||||
|
}
|
||||||
|
};
|
||||||
36
lib/common/util.js
Normal file
36
lib/common/util.js
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _ = require('lodash'),
|
||||||
|
fs = require('fs-extra'),
|
||||||
|
glob = require('glob'),
|
||||||
|
path = require('path');
|
||||||
|
|
||||||
|
var minify = require('../common/minify.js');
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
function copyFile(srcPath, destPath) {
|
||||||
|
return _.partial(fs.copy, srcPath, destPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
function globTemplate(pattern) {
|
||||||
|
return _.transform(glob.sync(pattern), function(result, filePath) {
|
||||||
|
var key = path.basename(filePath, path.extname(filePath));
|
||||||
|
result[key] = _.template(fs.readFileSync(filePath, 'utf8'));
|
||||||
|
}, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
function minFile(srcPath, destPath) {
|
||||||
|
return _.partial(minify, srcPath, destPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeFile(filePath, data) {
|
||||||
|
return _.partial(fs.writeFile, filePath, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
'copyFile': copyFile,
|
||||||
|
'globTemplate': globTemplate,
|
||||||
|
'minFile': minFile,
|
||||||
|
'writeFile': writeFile
|
||||||
|
};
|
||||||
55
lib/fp/build-dist.js
Normal file
55
lib/fp/build-dist.js
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _ = require('lodash'),
|
||||||
|
async = require('async'),
|
||||||
|
path = require('path'),
|
||||||
|
webpack = require('webpack');
|
||||||
|
|
||||||
|
var util = require('../common/util');
|
||||||
|
|
||||||
|
var basePath = path.join(__dirname, '..', '..'),
|
||||||
|
distPath = path.join(basePath, 'dist'),
|
||||||
|
fpPath = path.join(basePath, 'fp'),
|
||||||
|
filename = 'lodash.fp.js';
|
||||||
|
|
||||||
|
var fpConfig = {
|
||||||
|
'entry': path.join(fpPath, '_convertBrowser.js'),
|
||||||
|
'output': {
|
||||||
|
'path': distPath,
|
||||||
|
'filename': filename,
|
||||||
|
'library': 'fp',
|
||||||
|
'libraryTarget': 'umd'
|
||||||
|
},
|
||||||
|
'plugins': [
|
||||||
|
new webpack.optimize.OccurenceOrderPlugin,
|
||||||
|
new webpack.optimize.DedupePlugin
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
var mappingConfig = {
|
||||||
|
'entry': path.join(fpPath, '_mapping.js'),
|
||||||
|
'output': {
|
||||||
|
'path': distPath,
|
||||||
|
'filename': 'mapping.fp.js',
|
||||||
|
'library': 'mapping',
|
||||||
|
'libraryTarget': 'umd'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
function onComplete(error) {
|
||||||
|
if (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function build() {
|
||||||
|
async.series([
|
||||||
|
_.partial(webpack, mappingConfig),
|
||||||
|
_.partial(webpack, fpConfig),
|
||||||
|
util.minFile(path.join(distPath, filename))
|
||||||
|
], onComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
build();
|
||||||
62
lib/fp/build-doc.js
Normal file
62
lib/fp/build-doc.js
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _ = require('lodash'),
|
||||||
|
fs = require('fs-extra'),
|
||||||
|
path = require('path'),
|
||||||
|
util = require('../common/util');
|
||||||
|
|
||||||
|
var mapping = require('../../fp/_mapping'),
|
||||||
|
templatePath = path.join(__dirname, 'template/doc'),
|
||||||
|
template = util.globTemplate(path.join(templatePath, '*.jst'));
|
||||||
|
|
||||||
|
var argNames = ['a', 'b', 'c', 'd'];
|
||||||
|
|
||||||
|
var templateData = {
|
||||||
|
'mapping': mapping,
|
||||||
|
'toArgOrder': toArgOrder,
|
||||||
|
'toFuncList': toFuncList
|
||||||
|
};
|
||||||
|
|
||||||
|
function toArgOrder(array) {
|
||||||
|
return '`(' + _.map(array, function(value) {
|
||||||
|
return argNames[value];
|
||||||
|
}).join(', ') + ')`';
|
||||||
|
}
|
||||||
|
|
||||||
|
function toFuncList(array) {
|
||||||
|
var chunks = _.chunk(array.slice().sort(), 5),
|
||||||
|
lastChunk = _.last(chunks),
|
||||||
|
last = lastChunk ? lastChunk.pop() : undefined;
|
||||||
|
|
||||||
|
chunks = _.reject(chunks, _.isEmpty);
|
||||||
|
lastChunk = _.last(chunks);
|
||||||
|
|
||||||
|
var result = '`' + _.map(chunks, function(chunk) {
|
||||||
|
return chunk.join('`, `') + '`';
|
||||||
|
}).join(',\n`');
|
||||||
|
|
||||||
|
if (last == null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (_.size(chunks) > 1 || _.size(lastChunk) > 1) {
|
||||||
|
result += ',';
|
||||||
|
}
|
||||||
|
result += ' &';
|
||||||
|
result += _.size(lastChunk) < 5 ? ' ' : '\n';
|
||||||
|
return result + '`' + last + '`';
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
function onComplete(error) {
|
||||||
|
if (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function build(target) {
|
||||||
|
target = path.resolve(target);
|
||||||
|
fs.writeFile(target, template.wiki(templateData), onComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
build(_.last(process.argv));
|
||||||
118
lib/fp/build-modules.js
Normal file
118
lib/fp/build-modules.js
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _ = require('lodash'),
|
||||||
|
async = require('async'),
|
||||||
|
glob = require('glob'),
|
||||||
|
path = require('path');
|
||||||
|
|
||||||
|
var util = require('../common/util');
|
||||||
|
|
||||||
|
var mapping = require('../../fp/_mapping'),
|
||||||
|
templatePath = path.join(__dirname, 'template/modules'),
|
||||||
|
template = util.globTemplate(path.join(templatePath, '*.jst'));
|
||||||
|
|
||||||
|
var aryMethods = _.union(
|
||||||
|
mapping.aryMethod[1],
|
||||||
|
mapping.aryMethod[2],
|
||||||
|
mapping.aryMethod[3],
|
||||||
|
mapping.aryMethod[4]
|
||||||
|
);
|
||||||
|
|
||||||
|
var categories = [
|
||||||
|
'array',
|
||||||
|
'collection',
|
||||||
|
'date',
|
||||||
|
'function',
|
||||||
|
'lang',
|
||||||
|
'math',
|
||||||
|
'number',
|
||||||
|
'object',
|
||||||
|
'seq',
|
||||||
|
'string',
|
||||||
|
'util'
|
||||||
|
];
|
||||||
|
|
||||||
|
var ignored = [
|
||||||
|
'_*.js',
|
||||||
|
'core.js',
|
||||||
|
'fp.js',
|
||||||
|
'index.js',
|
||||||
|
'lodash.js'
|
||||||
|
];
|
||||||
|
|
||||||
|
function isAlias(funcName) {
|
||||||
|
return _.has(mapping.aliasToReal, funcName);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isCategory(funcName) {
|
||||||
|
return _.includes(categories, funcName);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isThru(funcName) {
|
||||||
|
return !_.includes(aryMethods, funcName);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTemplate(moduleName) {
|
||||||
|
var data = {
|
||||||
|
'name': _.result(mapping.aliasToReal, moduleName, moduleName),
|
||||||
|
'mapping': mapping
|
||||||
|
};
|
||||||
|
|
||||||
|
if (isAlias(moduleName)) {
|
||||||
|
return template.alias(data);
|
||||||
|
}
|
||||||
|
if (isCategory(moduleName)) {
|
||||||
|
return template.category(data);
|
||||||
|
}
|
||||||
|
if (isThru(moduleName)) {
|
||||||
|
return template.thru(data);
|
||||||
|
}
|
||||||
|
return template.module(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
function onComplete(error) {
|
||||||
|
if (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function build(target) {
|
||||||
|
target = path.resolve(target);
|
||||||
|
|
||||||
|
var fpPath = path.join(target, 'fp');
|
||||||
|
|
||||||
|
// Glob existing lodash module paths.
|
||||||
|
var modulePaths = glob.sync(path.join(target, '*.js'), {
|
||||||
|
'nodir': true,
|
||||||
|
'ignore': ignored.map(function(filename) {
|
||||||
|
return path.join(target, filename);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
// Add FP alias and remapped module paths.
|
||||||
|
_.each([mapping.aliasToReal, mapping.remap], function(data) {
|
||||||
|
_.forOwn(data, function(realName, alias) {
|
||||||
|
var modulePath = path.join(target, alias + '.js');
|
||||||
|
if (!_.startsWith(alias, '_') &&
|
||||||
|
!_.includes(modulePaths, modulePath)) {
|
||||||
|
modulePaths.push(modulePath);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var actions = modulePaths.map(function(modulePath) {
|
||||||
|
var moduleName = path.basename(modulePath, '.js');
|
||||||
|
return util.writeFile(path.join(fpPath, moduleName + '.js'), getTemplate(moduleName));
|
||||||
|
});
|
||||||
|
|
||||||
|
actions.unshift(util.copyFile(path.join(__dirname, '../../fp'), fpPath));
|
||||||
|
actions.push(util.writeFile(path.join(target, 'fp.js'), template.fp()));
|
||||||
|
actions.push(util.writeFile(path.join(fpPath, 'convert.js'), template.convert()));
|
||||||
|
actions.push(util.writeFile(path.join(fpPath, '_util.js'), template._util()));
|
||||||
|
|
||||||
|
async.series(actions, onComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
build(_.last(process.argv));
|
||||||
135
lib/fp/template/doc/wiki.jst
Normal file
135
lib/fp/template/doc/wiki.jst
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
## lodash/fp
|
||||||
|
|
||||||
|
The `lodash/fp` module is an instance of `lodash` with its methods wrapped to
|
||||||
|
produce immutable auto-curried iteratee-first data-last methods.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
In a browser:
|
||||||
|
```html
|
||||||
|
<script src='path/to/lodash.js'></script>
|
||||||
|
<script src='path/to/lodash.fp.js'></script>
|
||||||
|
```
|
||||||
|
|
||||||
|
In Node.js:
|
||||||
|
```js
|
||||||
|
// Load the fp build.
|
||||||
|
var _ = require('lodash/fp');
|
||||||
|
|
||||||
|
// Load a method category.
|
||||||
|
var object = require('lodash/fp/object');
|
||||||
|
|
||||||
|
// Load a single method for smaller builds with browserify/rollup/webpack.
|
||||||
|
var extend = require('lodash/fp/extend');
|
||||||
|
```
|
||||||
|
|
||||||
|
## Convert
|
||||||
|
|
||||||
|
Although `lodash/fp` & its method modules come pre-converted there are times when
|
||||||
|
you may want to convert another lodash package or create a customized conversion.
|
||||||
|
That’s when the `convert` module comes in handy.
|
||||||
|
|
||||||
|
```js
|
||||||
|
var convert = require('lodash/fp/convert');
|
||||||
|
|
||||||
|
// Convert by name.
|
||||||
|
var assign = convert('assign', require('lodash.assign'));
|
||||||
|
|
||||||
|
// Convert by object.
|
||||||
|
var fp = convert({
|
||||||
|
'assign': require('lodash.assign'),
|
||||||
|
'chunk': require('lodash.chunk')
|
||||||
|
});
|
||||||
|
|
||||||
|
// Convert by `lodash` instance.
|
||||||
|
var fp = convert(lodash.runInContext());
|
||||||
|
```
|
||||||
|
|
||||||
|
It’s even customizable.
|
||||||
|
```js
|
||||||
|
// Every option is `true` by default.
|
||||||
|
var filter = convert('filter', _.filter, {
|
||||||
|
// Specify capping iteratee arguments.
|
||||||
|
'cap': true,
|
||||||
|
// Specify currying.
|
||||||
|
'curry': true,
|
||||||
|
// Specify fixed arity.
|
||||||
|
'fixed': true,
|
||||||
|
// Specify immutable operations.
|
||||||
|
'immutable': true,
|
||||||
|
// Specify rearranging arguments.
|
||||||
|
'rearg': true
|
||||||
|
});
|
||||||
|
|
||||||
|
// Specify `cap` of `false` to create a function that doesn’t cap iteratee arguments.
|
||||||
|
var filter = convert('filter', _.filter, { 'cap': false });
|
||||||
|
|
||||||
|
filter(function(value, index) {
|
||||||
|
return index % 2 == 0;
|
||||||
|
})(['a', 'b', 'c']);
|
||||||
|
// => ['a', 'c']
|
||||||
|
```
|
||||||
|
|
||||||
|
## Mapping
|
||||||
|
|
||||||
|
Immutable auto-curried iteratee-first data-last methods sound great, but what’s
|
||||||
|
that really mean for each method? Below is a breakdown of the mapping used to
|
||||||
|
convert each method.
|
||||||
|
|
||||||
|
#### Capped Iteratee Arguments
|
||||||
|
|
||||||
|
Methods that cap iteratees to one argument:<br>
|
||||||
|
<%= toFuncList(_.keys(_.pickBy(mapping.iterateeAry, _.partial(_.eq, _, 1)))) %>
|
||||||
|
|
||||||
|
Methods that cap iteratees to two arguments:<br>
|
||||||
|
<%= toFuncList(_.keys(_.pickBy(mapping.iterateeAry, _.partial(_.eq, _, 2)))) %>
|
||||||
|
|
||||||
|
The iteratee of `mapKeys` is invoked with one argument: (key)
|
||||||
|
|
||||||
|
#### Fixed Arity
|
||||||
|
|
||||||
|
Methods with a fixed arity of one:<br>
|
||||||
|
<%= toFuncList(mapping.aryMethod[1]) %>
|
||||||
|
|
||||||
|
Methods with a fixed arity of two:<br>
|
||||||
|
<%= toFuncList(mapping.aryMethod[2]) %>
|
||||||
|
|
||||||
|
Methods with a fixed arity of three:<br>
|
||||||
|
<%= toFuncList(mapping.aryMethod[3]) %>
|
||||||
|
|
||||||
|
Methods with a fixed arity of four:<br>
|
||||||
|
<%= toFuncList(mapping.aryMethod[4]) %>
|
||||||
|
|
||||||
|
#### Rearranged Arguments
|
||||||
|
|
||||||
|
Methods with a fixed arity of two have an argument order of:<br>
|
||||||
|
<%= toArgOrder(mapping.aryRearg[2]) %>
|
||||||
|
|
||||||
|
Methods with a fixed arity of three have an argument order of:<br>
|
||||||
|
<%= toArgOrder(mapping.aryRearg[3]) %>
|
||||||
|
|
||||||
|
Methods with a fixed arity of four have an argument order of:<br>
|
||||||
|
<%= toArgOrder(mapping.aryRearg[4]) %>
|
||||||
|
|
||||||
|
Methods with custom argument orders:<br>
|
||||||
|
<%= _.map(mapping.methodRearg, function(orders, methodName) {
|
||||||
|
return ' * `_.' + methodName + '` has an order of ' + toArgOrder(orders);
|
||||||
|
}).join('\n') %>
|
||||||
|
|
||||||
|
Methods with unchanged argument orders:<br>
|
||||||
|
<%= toFuncList(_.keys(mapping.skipRearg)) %>
|
||||||
|
|
||||||
|
The methods `partial` & `partialRight` accept an array of arguments to partially
|
||||||
|
apply as their second parameter.
|
||||||
|
|
||||||
|
#### New Methods
|
||||||
|
|
||||||
|
Methods created to accommodate Lodash’s variadic methods:<br>
|
||||||
|
<%= toFuncList(_.keys(mapping.remap)) %>
|
||||||
|
|
||||||
|
#### Aliases
|
||||||
|
|
||||||
|
There are <%= _.size(mapping.aliasToReal) %> method aliases:<br>
|
||||||
|
<%= _.map(mapping.aliasToReal, function(realName, alias) {
|
||||||
|
return ' * Added `_.' + alias + '` as an alias of `_.' + realName + '`';
|
||||||
|
}).join('\n') %>
|
||||||
13
lib/fp/template/modules/_util.jst
Normal file
13
lib/fp/template/modules/_util.jst
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
module.exports = {
|
||||||
|
'ary': require('../ary'),
|
||||||
|
'clone': require('../clone'),
|
||||||
|
'curry': require('../curry'),
|
||||||
|
'forEach': require('../_arrayEach'),
|
||||||
|
'isArray': require('../isArray'),
|
||||||
|
'isFunction': require('../isFunction'),
|
||||||
|
'iteratee': require('../iteratee'),
|
||||||
|
'keys': require('../_baseKeys'),
|
||||||
|
'rearg': require('../rearg'),
|
||||||
|
'spread': require('../spread'),
|
||||||
|
'toPath': require('../toPath')
|
||||||
|
};
|
||||||
1
lib/fp/template/modules/alias.jst
Normal file
1
lib/fp/template/modules/alias.jst
Normal file
@@ -0,0 +1 @@
|
|||||||
|
module.exports = require('./<%= name %>');
|
||||||
2
lib/fp/template/modules/category.jst
Normal file
2
lib/fp/template/modules/category.jst
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
var convert = require('./convert');
|
||||||
|
module.exports = convert(require('../<%= name %>'));
|
||||||
17
lib/fp/template/modules/convert.jst
Normal file
17
lib/fp/template/modules/convert.jst
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
var baseConvert = require('./_baseConvert'),
|
||||||
|
util = require('./_util');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts `func` of `name` to an immutable auto-curried iteratee-first data-last
|
||||||
|
* version. If `name` is an object its methods will be converted.
|
||||||
|
*
|
||||||
|
* @param {string} name The name of the function to wrap.
|
||||||
|
* @param {Function} [func] The function to wrap.
|
||||||
|
* @param {Object} [options] The options object. See `baseConvert` for more details.
|
||||||
|
* @returns {Function|Object} Returns the converted function or object.
|
||||||
|
*/
|
||||||
|
function convert(name, func, options) {
|
||||||
|
return baseConvert(util, name, func, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = convert;
|
||||||
2
lib/fp/template/modules/fp.jst
Normal file
2
lib/fp/template/modules/fp.jst
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
var _ = require('./lodash.min').runInContext();
|
||||||
|
module.exports = require('./fp/_baseConvert')(_, _);
|
||||||
2
lib/fp/template/modules/module.jst
Normal file
2
lib/fp/template/modules/module.jst
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
var convert = require('./convert');
|
||||||
|
module.exports = convert('<%= name %>', require('../<%= _.result(mapping.remap, name, name) %>'));
|
||||||
1
lib/fp/template/modules/thru.jst
Normal file
1
lib/fp/template/modules/thru.jst
Normal file
@@ -0,0 +1 @@
|
|||||||
|
module.exports = require('../<%= name %>');
|
||||||
31
lib/main/build-dist.js
Normal file
31
lib/main/build-dist.js
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _ = require('lodash'),
|
||||||
|
async = require('async'),
|
||||||
|
path = require('path');
|
||||||
|
|
||||||
|
var util = require('../common/util');
|
||||||
|
|
||||||
|
var basePath = path.join(__dirname, '..', '..'),
|
||||||
|
distPath = path.join(basePath, 'dist'),
|
||||||
|
filename = 'lodash.js';
|
||||||
|
|
||||||
|
var baseLodash = path.join(basePath, filename),
|
||||||
|
distLodash = path.join(distPath, filename);
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
function onComplete(error) {
|
||||||
|
if (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function build() {
|
||||||
|
async.series([
|
||||||
|
util.copyFile(baseLodash, distLodash),
|
||||||
|
util.minFile(distLodash)
|
||||||
|
], onComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
build();
|
||||||
55
lib/main/build-doc.js
Normal file
55
lib/main/build-doc.js
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _ = require('lodash'),
|
||||||
|
docdown = require('docdown'),
|
||||||
|
fs = require('fs-extra'),
|
||||||
|
path = require('path');
|
||||||
|
|
||||||
|
var basePath = path.join(__dirname, '..', '..'),
|
||||||
|
docPath = path.join(basePath, 'doc'),
|
||||||
|
readmePath = path.join(docPath, 'README.md');
|
||||||
|
|
||||||
|
var pkg = require('../../package.json'),
|
||||||
|
version = pkg.version;
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
'base': {
|
||||||
|
'entryLinks': [
|
||||||
|
'<% if (name == "templateSettings" || !/^(?:methods|properties|seq)$/i.test(category)) {' +
|
||||||
|
'print("[Ⓝ](https://www.npmjs.com/package/lodash." + name.toLowerCase() + " \\"See the npm package\\")")' +
|
||||||
|
'} %>'
|
||||||
|
],
|
||||||
|
'path': path.join(basePath, 'lodash.js'),
|
||||||
|
'title': '<a href="https://lodash.com/">lodash</a> <span>v' + version + '</span>',
|
||||||
|
'toc': 'categories',
|
||||||
|
'url': 'https://github.com/lodash/lodash/blob/' + version + '/lodash.js'
|
||||||
|
},
|
||||||
|
'github': {
|
||||||
|
'hash': 'github'
|
||||||
|
},
|
||||||
|
'site': {
|
||||||
|
'tocLink': '#docs'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function postprocess(string) {
|
||||||
|
// Fix docdown bug by wrapping symbol property identifiers in brackets.
|
||||||
|
return string.replace(/\.(Symbol\.(?:[a-z]+[A-Z]?)+)/g, '[$1]');
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
function onComplete(error) {
|
||||||
|
if (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function build(type) {
|
||||||
|
var options = _.defaults({}, config.base, config[type]),
|
||||||
|
markdown = docdown(options);
|
||||||
|
|
||||||
|
fs.writeFile(readmePath, postprocess(markdown), onComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
build(_.last(process.argv));
|
||||||
34
lib/main/build-modules.js
Normal file
34
lib/main/build-modules.js
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _ = require('lodash'),
|
||||||
|
async = require('async'),
|
||||||
|
path = require('path');
|
||||||
|
|
||||||
|
var util = require('../common/util');
|
||||||
|
|
||||||
|
var basePath = path.join(__dirname, '..', '..'),
|
||||||
|
distPath = path.join(basePath, 'dist');
|
||||||
|
|
||||||
|
var filePairs = [
|
||||||
|
[path.join(distPath, 'lodash.core.js'), 'core.js'],
|
||||||
|
[path.join(distPath, 'lodash.core.min.js'), 'core.min.js'],
|
||||||
|
[path.join(distPath, 'lodash.min.js'), 'lodash.min.js']
|
||||||
|
];
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
function onComplete(error) {
|
||||||
|
if (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function build(target) {
|
||||||
|
var actions = _.map(filePairs, function(pair) {
|
||||||
|
return util.copyFile(pair[0], path.join(target, pair[1]));
|
||||||
|
});
|
||||||
|
|
||||||
|
async.series(actions, onComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
build(_.last(process.argv));
|
||||||
90
package.json
90
package.json
@@ -1,52 +1,50 @@
|
|||||||
{
|
{
|
||||||
"name": "lodash",
|
"name": "lodash",
|
||||||
"version": "1.0.1",
|
"version": "4.5.1",
|
||||||
"description": "An alternative to Underscore.js, delivering consistency, customization, performance, and extra features.",
|
"main": "lodash.js",
|
||||||
"homepage": "http://lodash.com",
|
"private": true,
|
||||||
"main": "./dist/lodash",
|
"devDependencies": {
|
||||||
"keywords": [
|
"async": "^1.5.2",
|
||||||
"browser",
|
"benchmark": "^2.1.0",
|
||||||
"client",
|
"chalk": "^1.1.1",
|
||||||
"functional",
|
"codecov.io": "~0.1.6",
|
||||||
"performance",
|
"coveralls": "^2.11.6",
|
||||||
"server",
|
"curl-amd": "~0.8.12",
|
||||||
"speed",
|
"docdown": "~0.4.1",
|
||||||
"util"
|
"dojo": "^1.10.4",
|
||||||
],
|
"ecstatic": "^1.4.0",
|
||||||
"licenses": [
|
"fs-extra": "~0.26.5",
|
||||||
{
|
"glob": "^7.0.0",
|
||||||
"type": "MIT",
|
"istanbul": "0.4.2",
|
||||||
"url": "http://lodash.com/license"
|
"jquery": "^2.2.0",
|
||||||
}
|
"jscs": "^2.10.1",
|
||||||
],
|
"lodash": "4.4.0",
|
||||||
"author": {
|
"platform": "^1.3.1",
|
||||||
"name": "John-David Dalton",
|
"qunit-extras": "^1.4.5",
|
||||||
"email": "john.david.dalton@gmail.com",
|
"qunitjs": "~1.21.0",
|
||||||
"web": "http://allyoucanleet.com/"
|
"request": "^2.69.0",
|
||||||
},
|
"requirejs": "^2.1.22",
|
||||||
"bugs": {
|
"sauce-tunnel": "^2.4.0",
|
||||||
"url": "https://github.com/bestiejs/lodash/issues"
|
"uglify-js": "2.6.1",
|
||||||
},
|
"webpack": "^1.12.13"
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/bestiejs/lodash.git"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"lodash": "./build.js"
|
|
||||||
},
|
|
||||||
"directories": {
|
|
||||||
"doc": "./doc",
|
|
||||||
"test": "./test"
|
|
||||||
},
|
|
||||||
"engines": [
|
|
||||||
"node",
|
|
||||||
"rhino"
|
|
||||||
],
|
|
||||||
"jam": {
|
|
||||||
"main": "./lodash.js"
|
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "node ./build.js",
|
"build": "npm run build:main & npm run build:fp",
|
||||||
"test": "node ./test/test.js ./dist/lodash.js && node ./test/test.js ./dist/lodash.min.js && node ./test/test-build.js"
|
"build:fp": "node lib/fp/build-dist.js",
|
||||||
|
"build:fp-modules": "node lib/fp/build-modules.js",
|
||||||
|
"build:main": "node lib/main/build-dist.js",
|
||||||
|
"build:main-modules": "node lib/main/build-modules.js",
|
||||||
|
"doc": "node lib/main/build-doc github",
|
||||||
|
"doc:fp": "node lib/fp/build-doc",
|
||||||
|
"doc:site": "node lib/main/build-doc site",
|
||||||
|
"pretest": "npm run build",
|
||||||
|
"style": "npm run style:main & npm run style:fp & npm run style:perf & npm run style:test",
|
||||||
|
"style:fp": "jscs fp/*.js lib/**/*.js",
|
||||||
|
"style:main": "jscs lodash.js",
|
||||||
|
"style:perf": "jscs perf/*.js perf/**/*.js",
|
||||||
|
"style:test": "jscs test/*.js test/**/*.js",
|
||||||
|
"test": "npm run test:main && npm run test:fp",
|
||||||
|
"test:fp": "node test/test-fp",
|
||||||
|
"test:main": "node test/test"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
131
perf/asset/perf-ui.js
Normal file
131
perf/asset/perf-ui.js
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
;(function(window) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/** The base path of the lodash builds. */
|
||||||
|
var basePath = '../';
|
||||||
|
|
||||||
|
/** The lodash build to load. */
|
||||||
|
var build = (build = /build=([^&]+)/.exec(location.search)) && decodeURIComponent(build[1]);
|
||||||
|
|
||||||
|
/** The other library to load. */
|
||||||
|
var other = (other = /other=([^&]+)/.exec(location.search)) && decodeURIComponent(other[1]);
|
||||||
|
|
||||||
|
/** The `ui` object. */
|
||||||
|
var ui = {};
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers an event listener on an element.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {Element} element The element.
|
||||||
|
* @param {string} eventName The name of the event.
|
||||||
|
* @param {Function} handler The event handler.
|
||||||
|
* @returns {Element} The element.
|
||||||
|
*/
|
||||||
|
function addListener(element, eventName, handler) {
|
||||||
|
if (typeof element.addEventListener != 'undefined') {
|
||||||
|
element.addEventListener(eventName, handler, false);
|
||||||
|
} else if (typeof element.attachEvent != 'undefined') {
|
||||||
|
element.attachEvent('on' + eventName, handler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// Initialize controls.
|
||||||
|
addListener(window, 'load', function() {
|
||||||
|
function eventHandler(event) {
|
||||||
|
var buildIndex = buildList.selectedIndex,
|
||||||
|
otherIndex = otherList.selectedIndex,
|
||||||
|
search = location.search.replace(/^\?|&?(?:build|other)=[^&]*&?/g, '');
|
||||||
|
|
||||||
|
if (event.stopPropagation) {
|
||||||
|
event.stopPropagation();
|
||||||
|
} else {
|
||||||
|
event.cancelBubble = true;
|
||||||
|
}
|
||||||
|
location.href =
|
||||||
|
location.href.split('?')[0] + '?' +
|
||||||
|
(search ? search + '&' : '') +
|
||||||
|
'build=' + (buildIndex < 0 ? build : buildList[buildIndex].value) + '&' +
|
||||||
|
'other=' + (otherIndex < 0 ? other : otherList[otherIndex].value);
|
||||||
|
}
|
||||||
|
|
||||||
|
var span1 = document.createElement('span');
|
||||||
|
span1.style.cssText = 'float:right';
|
||||||
|
span1.innerHTML =
|
||||||
|
'<label for="perf-build">Build: </label>' +
|
||||||
|
'<select id="perf-build">' +
|
||||||
|
'<option value="lodash">lodash</option>' +
|
||||||
|
'</select>';
|
||||||
|
|
||||||
|
var span2 = document.createElement('span');
|
||||||
|
span2.style.cssText = 'float:right';
|
||||||
|
span2.innerHTML =
|
||||||
|
'<label for="perf-other">Other Library: </label>' +
|
||||||
|
'<select id="perf-other">' +
|
||||||
|
'<option value="underscore-dev">Underscore (development)</option>' +
|
||||||
|
'<option value="underscore">Underscore (production)</option>' +
|
||||||
|
'<option value="lodash">lodash</option>' +
|
||||||
|
'</select>';
|
||||||
|
|
||||||
|
var buildList = span1.lastChild,
|
||||||
|
otherList = span2.lastChild,
|
||||||
|
toolbar = document.getElementById('perf-toolbar');
|
||||||
|
|
||||||
|
toolbar.appendChild(span2);
|
||||||
|
toolbar.appendChild(span1);
|
||||||
|
|
||||||
|
buildList.selectedIndex = (function() {
|
||||||
|
switch (build) {
|
||||||
|
case 'lodash':
|
||||||
|
case null: return 0;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}());
|
||||||
|
|
||||||
|
otherList.selectedIndex = (function() {
|
||||||
|
switch (other) {
|
||||||
|
case 'underscore-dev': return 0;
|
||||||
|
case 'lodash': return 2;
|
||||||
|
case 'underscore':
|
||||||
|
case null: return 1;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}());
|
||||||
|
|
||||||
|
addListener(buildList, 'change', eventHandler);
|
||||||
|
addListener(otherList, 'change', eventHandler);
|
||||||
|
});
|
||||||
|
|
||||||
|
// The lodash build file path.
|
||||||
|
ui.buildPath = (function() {
|
||||||
|
var result;
|
||||||
|
switch (build) {
|
||||||
|
case null: build = 'lodash';
|
||||||
|
case 'lodash': result = 'dist/lodash.min.js'; break;
|
||||||
|
default: return build;
|
||||||
|
}
|
||||||
|
return basePath + result;
|
||||||
|
}());
|
||||||
|
|
||||||
|
// The other library file path.
|
||||||
|
ui.otherPath = (function() {
|
||||||
|
var result;
|
||||||
|
switch (other) {
|
||||||
|
case 'lodash': result = 'dist/lodash.min.js'; break;
|
||||||
|
case 'underscore-dev': result = 'vendor/underscore/underscore.js'; break;
|
||||||
|
case null: other = 'underscore';
|
||||||
|
case 'underscore': result = 'vendor/underscore/underscore-min.js'; break;
|
||||||
|
default: return other;
|
||||||
|
}
|
||||||
|
return basePath + result;
|
||||||
|
}());
|
||||||
|
|
||||||
|
ui.urlParams = { 'build': build, 'other': other };
|
||||||
|
|
||||||
|
window.ui = ui;
|
||||||
|
|
||||||
|
}(this));
|
||||||
136
perf/index.html
136
perf/index.html
@@ -1,81 +1,69 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Lo-Dash Performance Suite</title>
|
<title>lodash Performance Suite</title>
|
||||||
<style>
|
<style>
|
||||||
html, body {
|
html, body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
applet {
|
#FirebugUI {
|
||||||
position: absolute;
|
top: 2em;
|
||||||
left: -9999em;
|
}
|
||||||
}
|
#perf-toolbar {
|
||||||
#FirebugUI {
|
background-color: #EEE;
|
||||||
top: 2em;
|
color: #5E740B;
|
||||||
}
|
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
|
||||||
#perf-toolbar {
|
font-size: small;
|
||||||
background-color: #EEE;
|
padding: 0.5em 0 0.5em 2em;
|
||||||
color: #5E740B;
|
overflow: hidden;
|
||||||
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
|
}
|
||||||
font-size: small;
|
</style>
|
||||||
padding: 0.5em 0 0.5em 2em;
|
</head>
|
||||||
overflow: hidden;
|
<body>
|
||||||
}
|
<div id="perf-toolbar"></div>
|
||||||
</style>
|
<script src="../lodash.js"></script>
|
||||||
</head>
|
<script src="../node_modules/platform/platform.js"></script>
|
||||||
<body>
|
<script src="../node_modules/benchmark/benchmark.js"></script>
|
||||||
<div id="perf-toolbar"></div>
|
<script src="../vendor/firebug-lite/src/firebug-lite-debug.js"></script>
|
||||||
<script src="../vendor/platform.js/platform.js"></script>
|
<script src="./asset/perf-ui.js"></script>
|
||||||
<script src="../vendor/benchmark.js/benchmark.js"></script>
|
<script>
|
||||||
<script src="../vendor/firebug-lite/src/firebug-lite-debug.js"></script>
|
document.write('<script src="' + ui.buildPath + '"><\/script>');
|
||||||
<script src="perf-ui.js"></script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
document.write('<script src="../' + ui.buildPath + '"><\/script>');
|
var lodash = _.noConflict();
|
||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
var lodash = _.noConflict();
|
document.write('<script src="' + ui.otherPath + '"><\/script>');
|
||||||
</script>
|
</script>
|
||||||
<script>
|
<script src="perf.js"></script>
|
||||||
document.write('<script src="../' + ui.otherPath + '"><\/script>');
|
<script>
|
||||||
</script>
|
(function() {
|
||||||
<script src="perf.js"></script>
|
var measured,
|
||||||
<script>
|
perfNow,
|
||||||
(function() {
|
begin = new Date;
|
||||||
var measured,
|
|
||||||
perfNow,
|
|
||||||
begin = new Date;
|
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
var fbUI = document.getElementById('FirebugUI'),
|
var fbUI = document.getElementById('FirebugUI'),
|
||||||
fbDoc = fbUI && (fbDoc = fbUI.contentWindow || fbUI.contentDocument).document || fbDoc,
|
fbDoc = fbUI && (fbDoc = fbUI.contentWindow || fbUI.contentDocument).document || fbDoc,
|
||||||
fbCommandLine = fbDoc && fbDoc.getElementById('fbCommandLine');
|
fbCommandLine = fbDoc && fbDoc.getElementById('fbCommandLine');
|
||||||
|
|
||||||
if (!fbCommandLine) {
|
if (!fbCommandLine) {
|
||||||
return setTimeout(init, 15);
|
return setTimeout(init, 15);
|
||||||
}
|
}
|
||||||
fbUI.style.height = (
|
fbUI.style.height = (
|
||||||
Math.max(document.documentElement.clientHeight, document.body.clientHeight) -
|
Math.max(document.documentElement.clientHeight, document.body.clientHeight) -
|
||||||
document.getElementById('perf-toolbar').clientHeight
|
document.getElementById('perf-toolbar').clientHeight
|
||||||
) + 'px';
|
) + 'px';
|
||||||
|
|
||||||
fbDoc.body.style.height = fbDoc.documentElement.style.height = '100%';
|
fbDoc.body.style.height = fbDoc.documentElement.style.height = '100%';
|
||||||
setTimeout(run, 15);
|
setTimeout(run, 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
// is the applet permitted?
|
window.onload = init;
|
||||||
if (!/[?&]nojava=true(?:&|$)/.test(location.search)) {
|
}());
|
||||||
// is the applet really needed?
|
</script>
|
||||||
while (!(measured = new Date - begin)) { }
|
</body>
|
||||||
if (measured != 1 && !((perfNow = window.performance) && typeof (perfNow.now || perfNow.webkitNow) == 'function')) {
|
|
||||||
// load applet
|
|
||||||
document.write('<applet code="nano" archive="../vendor/benchmark.js/nano.jar"></applet>');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
window.onload = init;
|
|
||||||
}());
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
136
perf/perf-ui.js
136
perf/perf-ui.js
@@ -1,136 +0,0 @@
|
|||||||
;(function(window) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/** The Lo-Dash build to load */
|
|
||||||
var build = (/build=([^&]+)/.exec(location.search) || [])[1];
|
|
||||||
|
|
||||||
/** The other library to load */
|
|
||||||
var other = (/other=([^&]+)/.exec(location.search) || [])[1];
|
|
||||||
|
|
||||||
/** The `ui` object */
|
|
||||||
var ui = {};
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers an event listener on an element.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Element} element The element.
|
|
||||||
* @param {String} eventName The name of the event.
|
|
||||||
* @param {Function} handler The event handler.
|
|
||||||
* @returns {Element} The element.
|
|
||||||
*/
|
|
||||||
function addListener(element, eventName, handler) {
|
|
||||||
if (typeof element.addEventListener != 'undefined') {
|
|
||||||
element.addEventListener(eventName, handler, false);
|
|
||||||
} else if (typeof element.attachEvent != 'undefined') {
|
|
||||||
element.attachEvent('on' + eventName, handler);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// expose Lo-Dash build file path
|
|
||||||
ui.buildPath = (function() {
|
|
||||||
switch (build) {
|
|
||||||
case 'lodash-dev': return 'dist/lodash.compat.js';
|
|
||||||
case 'lodash-modern': return 'dist/lodash.min.js';
|
|
||||||
case 'lodash-underscore': return 'dist/lodash.underscore.min.js';
|
|
||||||
case 'lodash-custom': return 'lodash.custom.min.js';
|
|
||||||
}
|
|
||||||
return 'dist/lodash.compat.min.js';
|
|
||||||
}());
|
|
||||||
|
|
||||||
// expose other library file path
|
|
||||||
ui.otherPath = (function() {
|
|
||||||
switch (other) {
|
|
||||||
case 'lodash-dev': return 'dist/lodash.compat.js';
|
|
||||||
case 'lodash-prod': return 'dist/lodash.compat.min.js';
|
|
||||||
case 'lodash-modern': return 'dist/lodash.min.js';
|
|
||||||
case 'lodash-underscore': return 'dist/lodash.underscore.min.js';
|
|
||||||
case 'lodash-custom': return 'lodash.custom.min.js';
|
|
||||||
case 'underscore-dev': return 'vendor/underscore/underscore.js';
|
|
||||||
}
|
|
||||||
return 'vendor/underscore/underscore-min.js';
|
|
||||||
}());
|
|
||||||
|
|
||||||
// initialize controls
|
|
||||||
addListener(window, 'load', function() {
|
|
||||||
function eventHandler(event) {
|
|
||||||
var search = location.search.replace(/^\?|&?(?:build|other)=[^&]*&?/g, '');
|
|
||||||
if (event.stopPropagation) {
|
|
||||||
event.stopPropagation();
|
|
||||||
} else {
|
|
||||||
event.cancelBubble = true;
|
|
||||||
}
|
|
||||||
location.href =
|
|
||||||
location.href.split('?')[0] + '?' +
|
|
||||||
(search ? search + '&' : '') +
|
|
||||||
'build=' + buildList[buildList.selectedIndex].value + '&' +
|
|
||||||
'other=' + otherList[otherList.selectedIndex].value;
|
|
||||||
}
|
|
||||||
|
|
||||||
var span1 = document.createElement('span');
|
|
||||||
span1.style.cssText = 'float:right';
|
|
||||||
span1.innerHTML =
|
|
||||||
'<label for="perf-build">Build: </label>' +
|
|
||||||
'<select id="perf-build">' +
|
|
||||||
'<option value="lodash-dev">Lo-Dash</option>' +
|
|
||||||
'<option value="lodash-prod">Lo-Dash (minified)</option>' +
|
|
||||||
'<option value="lodash-modern">Lo-Dash (modern)</option>' +
|
|
||||||
'<option value="lodash-underscore">Lo-Dash (underscore)</option>' +
|
|
||||||
'<option value="lodash-custom">Lo-Dash (custom)</option>' +
|
|
||||||
'</select>';
|
|
||||||
|
|
||||||
var span2 = document.createElement('span');
|
|
||||||
span2.style.cssText = 'float:right';
|
|
||||||
span2.innerHTML =
|
|
||||||
'<label for="perf-other">Other Library: </label>' +
|
|
||||||
'<select id="perf-other">' +
|
|
||||||
'<option value="underscore-dev">Underscore</option>' +
|
|
||||||
'<option value="underscore-prod">Underscore (minified)</option>' +
|
|
||||||
'<option value="lodash-dev">Lo-Dash</option>' +
|
|
||||||
'<option value="lodash-prod">Lo-Dash (minified)</option>' +
|
|
||||||
'<option value="lodash-modern">Lo-Dash (modern)</option>' +
|
|
||||||
'<option value="lodash-underscore">Lo-Dash (underscore)</option>' +
|
|
||||||
'<option value="lodash-custom">Lo-Dash (custom)</option>' +
|
|
||||||
'</select>';
|
|
||||||
|
|
||||||
var buildList = span1.lastChild,
|
|
||||||
otherList = span2.lastChild,
|
|
||||||
toolbar = document.getElementById('perf-toolbar');
|
|
||||||
|
|
||||||
toolbar.appendChild(span2);
|
|
||||||
toolbar.appendChild(span1);
|
|
||||||
|
|
||||||
buildList.selectedIndex = (function() {
|
|
||||||
switch (build) {
|
|
||||||
case 'lodash-dev': return 0;
|
|
||||||
case 'lodash-modern': return 2;
|
|
||||||
case 'lodash-underscore': return 3;
|
|
||||||
case 'lodash-custom': return 4;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}());
|
|
||||||
|
|
||||||
otherList.selectedIndex = (function() {
|
|
||||||
switch (other) {
|
|
||||||
case 'underscore-dev': return 0;
|
|
||||||
case 'lodash-dev': return 2;
|
|
||||||
case 'lodash-prod': return 3;
|
|
||||||
case 'lodash-modern': return 4;
|
|
||||||
case 'lodash-underscore': return 5;
|
|
||||||
case 'lodash-custom': return 6;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}());
|
|
||||||
|
|
||||||
addListener(buildList, 'change', eventHandler);
|
|
||||||
addListener(otherList, 'change', eventHandler);
|
|
||||||
});
|
|
||||||
|
|
||||||
// expose `ui`
|
|
||||||
window.ui = ui;
|
|
||||||
|
|
||||||
}(this));
|
|
||||||
1281
perf/perf.js
1281
perf/perf.js
File diff suppressed because it is too large
Load Diff
@@ -1,14 +0,0 @@
|
|||||||
cd "$(dirname "$0")"
|
|
||||||
|
|
||||||
echo "Running performance suite in node..."
|
|
||||||
node perf.js ../dist/lodash.js && node perf.js ../dist/lodash.min.js
|
|
||||||
|
|
||||||
for cmd in rhino narwhal ringo phantomjs; do
|
|
||||||
echo ""
|
|
||||||
echo "Running performance suite in $cmd..."
|
|
||||||
$cmd perf.js ../dist/lodash.compat.js && $cmd perf.js ../dist/lodash.compat.min.js
|
|
||||||
done
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Running performance suite in a browser..."
|
|
||||||
open index.html
|
|
||||||
170
test/asset/test-ui.js
Normal file
170
test/asset/test-ui.js
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
;(function(window) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/** The base path of the lodash builds. */
|
||||||
|
var basePath = '../';
|
||||||
|
|
||||||
|
/** The lodash build to load. */
|
||||||
|
var build = (build = /build=([^&]+)/.exec(location.search)) && decodeURIComponent(build[1]);
|
||||||
|
|
||||||
|
/** The module loader to use. */
|
||||||
|
var loader = (loader = /loader=([^&]+)/.exec(location.search)) && decodeURIComponent(loader[1]);
|
||||||
|
|
||||||
|
/** The `ui` object. */
|
||||||
|
var ui = {};
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers an event listener on an element.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {Element} element The element.
|
||||||
|
* @param {string} eventName The name of the event.
|
||||||
|
* @param {Function} handler The event handler.
|
||||||
|
* @returns {Element} The element.
|
||||||
|
*/
|
||||||
|
function addListener(element, eventName, handler) {
|
||||||
|
if (typeof element.addEventListener != 'undefined') {
|
||||||
|
element.addEventListener(eventName, handler, false);
|
||||||
|
} else if (typeof element.attachEvent != 'undefined') {
|
||||||
|
element.attachEvent('on' + eventName, handler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// Initialize controls.
|
||||||
|
addListener(window, 'load', function() {
|
||||||
|
function eventHandler(event) {
|
||||||
|
var buildIndex = buildList.selectedIndex,
|
||||||
|
loaderIndex = loaderList.selectedIndex,
|
||||||
|
search = location.search.replace(/^\?|&?(?:build|loader)=[^&]*&?/g, '');
|
||||||
|
|
||||||
|
if (event.stopPropagation) {
|
||||||
|
event.stopPropagation();
|
||||||
|
} else {
|
||||||
|
event.cancelBubble = true;
|
||||||
|
}
|
||||||
|
location.href =
|
||||||
|
location.href.split('?')[0] + '?' +
|
||||||
|
(search ? search + '&' : '') +
|
||||||
|
'build=' + (buildIndex < 0 ? build : buildList[buildIndex].value) + '&' +
|
||||||
|
'loader=' + (loaderIndex < 0 ? loader : loaderList[loaderIndex].value);
|
||||||
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
var toolbar = document.getElementById('qunit-testrunner-toolbar');
|
||||||
|
if (!toolbar) {
|
||||||
|
setTimeout(init, 15);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
toolbar.appendChild(span1);
|
||||||
|
toolbar.appendChild(span2);
|
||||||
|
|
||||||
|
buildList.selectedIndex = (function() {
|
||||||
|
switch (build) {
|
||||||
|
case 'lodash': return 1;
|
||||||
|
case 'lodash-core-dev': return 2;
|
||||||
|
case 'lodash-core': return 3;
|
||||||
|
case 'lodash-dev':
|
||||||
|
case null: return 0;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}());
|
||||||
|
|
||||||
|
loaderList.selectedIndex = (function() {
|
||||||
|
switch (loader) {
|
||||||
|
case 'curl': return 1;
|
||||||
|
case 'dojo': return 2;
|
||||||
|
case 'requirejs': return 3;
|
||||||
|
case 'none':
|
||||||
|
case null: return 0;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}());
|
||||||
|
|
||||||
|
addListener(buildList, 'change', eventHandler);
|
||||||
|
addListener(loaderList, 'change', eventHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
var span1 = document.createElement('span');
|
||||||
|
span1.style.cssText = 'float:right';
|
||||||
|
span1.innerHTML =
|
||||||
|
'<label for="qunit-build">Build: </label>' +
|
||||||
|
'<select id="qunit-build">' +
|
||||||
|
'<option value="lodash-dev">lodash (development)</option>' +
|
||||||
|
'<option value="lodash">lodash (production)</option>' +
|
||||||
|
'<option value="lodash-core-dev">lodash-core (development)</option>' +
|
||||||
|
'<option value="lodash-core">lodash-core (production)</option>' +
|
||||||
|
'</select>';
|
||||||
|
|
||||||
|
var span2 = document.createElement('span');
|
||||||
|
span2.style.cssText = 'float:right';
|
||||||
|
span2.innerHTML =
|
||||||
|
'<label for="qunit-loader">Loader: </label>' +
|
||||||
|
'<select id="qunit-loader">' +
|
||||||
|
'<option value="none">None</option>' +
|
||||||
|
'<option value="curl">Curl</option>' +
|
||||||
|
'<option value="dojo">Dojo</option>' +
|
||||||
|
'<option value="requirejs">RequireJS</option>' +
|
||||||
|
'</select>';
|
||||||
|
|
||||||
|
var buildList = span1.lastChild,
|
||||||
|
loaderList = span2.lastChild;
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
ui.timing.loadEventEnd = +new Date;
|
||||||
|
}, 1);
|
||||||
|
|
||||||
|
init();
|
||||||
|
});
|
||||||
|
|
||||||
|
// The lodash build file path.
|
||||||
|
ui.buildPath = (function() {
|
||||||
|
var result;
|
||||||
|
switch (build) {
|
||||||
|
case 'lodash': result = 'dist/lodash.min.js'; break;
|
||||||
|
case 'lodash-core-dev': result = 'dist/lodash.core.js'; break;
|
||||||
|
case 'lodash-core': result = 'dist/lodash.core.min.js'; break;
|
||||||
|
case null: build = 'lodash-dev';
|
||||||
|
case 'lodash-dev': result = 'lodash.js'; break;
|
||||||
|
default: return build;
|
||||||
|
}
|
||||||
|
return basePath + result;
|
||||||
|
}());
|
||||||
|
|
||||||
|
// The module loader file path.
|
||||||
|
ui.loaderPath = (function() {
|
||||||
|
var result;
|
||||||
|
switch (loader) {
|
||||||
|
case 'curl': result = 'node_modules/curl-amd/dist/curl-kitchen-sink/curl.js'; break;
|
||||||
|
case 'dojo': result = 'node_modules/dojo/dojo.js'; break;
|
||||||
|
case 'requirejs': result = 'node_modules/requirejs/require.js'; break;
|
||||||
|
case null: loader = 'none'; return '';
|
||||||
|
default: return loader;
|
||||||
|
}
|
||||||
|
return basePath + result;
|
||||||
|
}());
|
||||||
|
|
||||||
|
// Used to indicate testing a core build.
|
||||||
|
ui.isCore = /\bcore(\.min)?\.js\b/.test(ui.buildPath);
|
||||||
|
|
||||||
|
// Used to indicate testing a foreign file.
|
||||||
|
ui.isForeign = RegExp('^(\\w+:)?//').test(build);
|
||||||
|
|
||||||
|
// Used to indicate testing a modularized build.
|
||||||
|
ui.isModularize = /\b(?:amd|commonjs|es|node|npm|(index|main)\.js)\b/.test([location.pathname, location.search]);
|
||||||
|
|
||||||
|
// Used to indicate testing in Sauce Labs' automated test cloud.
|
||||||
|
ui.isSauceLabs = location.port == '9001';
|
||||||
|
|
||||||
|
// Used to indicate that lodash is in strict mode.
|
||||||
|
ui.isStrict = /\bes\b/.test([location.pathname, location.search]);
|
||||||
|
|
||||||
|
ui.urlParams = { 'build': build, 'loader': loader };
|
||||||
|
ui.timing = { 'loadEventEnd': 0 };
|
||||||
|
|
||||||
|
window.ui = ui;
|
||||||
|
|
||||||
|
}(this));
|
||||||
12
test/asset/worker.js
Normal file
12
test/asset/worker.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
self.console || (self.console = { 'log': function() {} });
|
||||||
|
|
||||||
|
addEventListener('message', function(e) {
|
||||||
|
if (e.data) {
|
||||||
|
try {
|
||||||
|
importScripts('../' + e.data);
|
||||||
|
} catch (e) {
|
||||||
|
self._ = { 'VERSION': e.message };
|
||||||
|
}
|
||||||
|
postMessage(_.VERSION);
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
@@ -1,54 +1,170 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Backbone Test Suite</title>
|
<title>Backbone Test Suite</title>
|
||||||
<link rel="stylesheet" href="../vendor/qunit/qunit/qunit.css">
|
<link rel="stylesheet" href="../node_modules/qunitjs/qunit/qunit.css">
|
||||||
<style>
|
</head>
|
||||||
body > #qunit-header {
|
<body>
|
||||||
display: none;
|
<script>
|
||||||
}
|
// Avoid reporting tests to Sauce Labs when script errors occur.
|
||||||
</style>
|
if (location.port == '9001') {
|
||||||
</head>
|
window.onerror = function(message) {
|
||||||
<body>
|
if (window.QUnit) {
|
||||||
<div id="qunit"></div>
|
QUnit.config.done.length = 0;
|
||||||
<h1 id="qunit-header"></h1>
|
}
|
||||||
<div id="qunit-fixture">
|
global_test_results = { 'message': message };
|
||||||
<div id='testElement'>
|
};
|
||||||
<h1>Test</h1>
|
}
|
||||||
</div>
|
</script>
|
||||||
</div>
|
<script src="../node_modules/qunitjs/qunit/qunit.js"></script>
|
||||||
<script src="../vendor/json3/lib/json3.js"></script>
|
<script src="../node_modules/qunit-extras/qunit-extras.js"></script>
|
||||||
<script src="../vendor/jquery/jquery.js"></script>
|
<script src="../vendor/json-js/json2.js"></script>
|
||||||
<script src="../vendor/platform.js/platform.js"></script>
|
<script src="../node_modules/platform/platform.js"></script>
|
||||||
<script src="../vendor/qunit/qunit/qunit.js"></script>
|
<script src="./asset/test-ui.js"></script>
|
||||||
<script src="test-ui.js"></script>
|
<script src="../lodash.js"></script>
|
||||||
<script src="../lodash.js"></script>
|
<script>
|
||||||
<script>
|
QUnit.config.asyncRetries = 10;
|
||||||
var lodash = _.noConflict();
|
QUnit.config.hidepassed = true;
|
||||||
document.write('<script src="../' + ui.buildPath + '"><\/script>');
|
|
||||||
</script>
|
var mixinPrereqs = (function() {
|
||||||
<script>
|
var aliasToReal = {
|
||||||
_.mixin({
|
'indexBy': 'keyBy',
|
||||||
'debounce': lodash.debounce,
|
'invoke': 'invokeMap'
|
||||||
'defer': lodash.defer
|
};
|
||||||
});
|
|
||||||
if (!_.chain) {
|
var keyMap = {
|
||||||
_.mixin({
|
'rest': 'tail'
|
||||||
'chain': function(value) {
|
};
|
||||||
return new _(value);
|
|
||||||
}
|
var lodash = _.noConflict();
|
||||||
});
|
|
||||||
}
|
return function(_) {
|
||||||
</script>
|
lodash.defaultsDeep(_, { 'templateSettings': lodash.templateSettings });
|
||||||
<script src="../vendor/backbone/backbone.js"></script>
|
lodash.mixin(_, lodash.pick(lodash, lodash.difference([
|
||||||
<script src="../vendor/backbone/test/environment.js"></script>
|
'countBy',
|
||||||
<script src="../vendor/backbone/test/noconflict.js"></script>
|
'debounce',
|
||||||
<script src="../vendor/backbone/test/events.js"></script>
|
'difference',
|
||||||
<script src="../vendor/backbone/test/model.js"></script>
|
'find',
|
||||||
<script src="../vendor/backbone/test/collection.js"></script>
|
'findIndex',
|
||||||
<script src="../vendor/backbone/test/router.js"></script>
|
'findLastIndex',
|
||||||
<script src="../vendor/backbone/test/view.js"></script>
|
'groupBy',
|
||||||
<script src="../vendor/backbone/test/sync.js"></script>
|
'includes',
|
||||||
</body>
|
'invert',
|
||||||
|
'invokeMap',
|
||||||
|
'keyBy',
|
||||||
|
'omit',
|
||||||
|
'partition',
|
||||||
|
'reduceRight',
|
||||||
|
'reject',
|
||||||
|
'sample',
|
||||||
|
'without'
|
||||||
|
], lodash.functions(_))));
|
||||||
|
|
||||||
|
lodash.forOwn(keyMap, function(realName, otherName) {
|
||||||
|
_[otherName] = lodash[realName];
|
||||||
|
_.prototype[otherName] = lodash.prototype[realName];
|
||||||
|
});
|
||||||
|
|
||||||
|
lodash.forOwn(aliasToReal, function(realName, alias) {
|
||||||
|
_[alias] = _[realName];
|
||||||
|
_.prototype[alias] = _.prototype[realName];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}());
|
||||||
|
|
||||||
|
// Load prerequisite scripts.
|
||||||
|
document.write(ui.urlParams.loader == 'none'
|
||||||
|
? '<script src="' + ui.buildPath + '"><\/script>'
|
||||||
|
: '<script data-dojo-config="async:1" src="' + ui.loaderPath + '"><\/script>'
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
if (ui.urlParams.loader == 'none') {
|
||||||
|
mixinPrereqs(_);
|
||||||
|
document.write([
|
||||||
|
'<script src="../node_modules/jquery/dist/jquery.js"><\/script>',
|
||||||
|
'<script src="../vendor/backbone/backbone.js"><\/script>',
|
||||||
|
'<script src="../vendor/backbone/test/setup/dom-setup.js"><\/script>',
|
||||||
|
'<script src="../vendor/backbone/test/setup/environment.js"><\/script>',
|
||||||
|
'<script src="../vendor/backbone/test/noconflict.js"><\/script>',
|
||||||
|
'<script src="../vendor/backbone/test/events.js"><\/script>',
|
||||||
|
'<script src="../vendor/backbone/test/model.js"><\/script>',
|
||||||
|
'<script src="../vendor/backbone/test/collection.js"><\/script>',
|
||||||
|
'<script src="../vendor/backbone/test/router.js"><\/script>',
|
||||||
|
'<script src="../vendor/backbone/test/view.js"><\/script>',
|
||||||
|
'<script src="../vendor/backbone/test/sync.js"><\/script>'
|
||||||
|
].join('\n'));
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
if (window.curl) {
|
||||||
|
curl.config({ 'apiName': 'require' });
|
||||||
|
}
|
||||||
|
if (!window.require) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var reBasename = /[\w.-]+$/,
|
||||||
|
basePath = ('//' + location.host + location.pathname.replace(reBasename, '')).replace(/\btest\/$/, ''),
|
||||||
|
modulePath = ui.buildPath.replace(/\.js$/, ''),
|
||||||
|
locationPath = modulePath.replace(reBasename, '').replace(/^\/|\/$/g, ''),
|
||||||
|
moduleMain = modulePath.match(reBasename)[0],
|
||||||
|
uid = +new Date;
|
||||||
|
|
||||||
|
function getConfig() {
|
||||||
|
var result = {
|
||||||
|
'baseUrl': './',
|
||||||
|
'urlArgs': 't=' + uid++,
|
||||||
|
'waitSeconds': 0,
|
||||||
|
'paths': {
|
||||||
|
'backbone': '../vendor/backbone/backbone',
|
||||||
|
'jquery': '../node_modules/jquery/dist/jquery'
|
||||||
|
},
|
||||||
|
'packages': [{
|
||||||
|
'name': 'test',
|
||||||
|
'location': '../vendor/backbone/test',
|
||||||
|
'config': {
|
||||||
|
// Work around no global being exported.
|
||||||
|
'exports': 'QUnit',
|
||||||
|
'loader': 'curl/loader/legacy'
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
|
||||||
|
if (ui.isModularize) {
|
||||||
|
result.packages.push({
|
||||||
|
'name': 'underscore',
|
||||||
|
'location': locationPath,
|
||||||
|
'main': moduleMain
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
result.paths.underscore = modulePath;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
QUnit.config.autostart = false;
|
||||||
|
|
||||||
|
require(getConfig(), ['underscore'], function(lodash) {
|
||||||
|
mixinPrereqs(lodash);
|
||||||
|
require(getConfig(), ['backbone'], function() {
|
||||||
|
require(getConfig(), [
|
||||||
|
'test/setup/dom-setup',
|
||||||
|
'test/setup/environment',
|
||||||
|
'test/noconflict',
|
||||||
|
'test/events',
|
||||||
|
'test/model',
|
||||||
|
'test/collection',
|
||||||
|
'test/router',
|
||||||
|
'test/view',
|
||||||
|
'test/sync'
|
||||||
|
], function() {
|
||||||
|
QUnit.start();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}());
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
41
test/fp.html
Normal file
41
test/fp.html
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>lodash-fp Test Suite</title>
|
||||||
|
<link rel="stylesheet" href="../node_modules/qunitjs/qunit/qunit.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
// Avoid reporting tests to Sauce Labs when script errors occur.
|
||||||
|
if (location.port == '9001') {
|
||||||
|
window.onerror = function(message) {
|
||||||
|
if (window.QUnit) {
|
||||||
|
QUnit.config.done.length = 0;
|
||||||
|
}
|
||||||
|
global_test_results = { 'message': message };
|
||||||
|
};
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script src="../lodash.js"></script>
|
||||||
|
<script src="../dist/lodash.fp.js"></script>
|
||||||
|
<script src="../dist/mapping.fp.js"></script>
|
||||||
|
<script src="../node_modules/qunitjs/qunit/qunit.js"></script>
|
||||||
|
<script src="../node_modules/qunit-extras/qunit-extras.js"></script>
|
||||||
|
<script src="../node_modules/platform/platform.js"></script>
|
||||||
|
<script src="./test-fp.js"></script>
|
||||||
|
<div id="qunit"></div>
|
||||||
|
<script>
|
||||||
|
// Set a more readable browser name.
|
||||||
|
window.onload = function() {
|
||||||
|
var timeoutId = setInterval(function() {
|
||||||
|
var ua = document.getElementById('qunit-userAgent');
|
||||||
|
if (ua) {
|
||||||
|
ua.innerHTML = platform;
|
||||||
|
clearInterval(timeoutId);
|
||||||
|
}
|
||||||
|
}, 16);
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
414
test/index.html
414
test/index.html
@@ -1,90 +1,342 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Lo-Dash Test Suite</title>
|
<title>lodash Test Suite</title>
|
||||||
<link rel="stylesheet" href="../vendor/qunit/qunit/qunit.css">
|
<link rel="stylesheet" href="../node_modules/qunitjs/qunit/qunit.css">
|
||||||
</head>
|
<style>
|
||||||
<body>
|
#exports, #module {
|
||||||
<div id="qunit"></div>
|
display: none;
|
||||||
<script src="../vendor/platform.js/platform.js"></script>
|
}
|
||||||
<script src="../vendor/qunit/qunit/qunit.js"></script>
|
</style>
|
||||||
<script src="test-ui.js"></script>
|
</head>
|
||||||
<script>
|
<body>
|
||||||
// set a bad shim
|
<script>
|
||||||
Object._keys = Object.keys;
|
// Avoid reporting tests to Sauce Labs when script errors occur.
|
||||||
Object.keys = function() { return []; };
|
if (location.port == '9001') {
|
||||||
|
window.onerror = function(message) {
|
||||||
|
if (window.QUnit) {
|
||||||
|
QUnit.config.done.length = 0;
|
||||||
|
}
|
||||||
|
global_test_results = { 'message': message };
|
||||||
|
};
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script src="../node_modules/lodash/lodash.js"></script>
|
||||||
|
<script>var lodashStable = _.noConflict();</script>
|
||||||
|
<script src="../node_modules/qunitjs/qunit/qunit.js"></script>
|
||||||
|
<script src="../node_modules/qunit-extras/qunit-extras.js"></script>
|
||||||
|
<script src="../node_modules/platform/platform.js"></script>
|
||||||
|
<script src="./asset/test-ui.js"></script>
|
||||||
|
<div id="qunit"></div>
|
||||||
|
<div id="exports"></div>
|
||||||
|
<div id="module"></div>
|
||||||
|
<script>
|
||||||
|
function setProperty(object, key, value) {
|
||||||
|
try {
|
||||||
|
Object.defineProperty(object, key, {
|
||||||
|
'configurable': true,
|
||||||
|
'enumerable': false,
|
||||||
|
'writable': true,
|
||||||
|
'value': value
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
object[key] = value;
|
||||||
|
}
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
// load Lo-Dash and expose it to the bad `Object.keys` shim
|
function addBizarroMethods() {
|
||||||
document.write('<script src="../' + ui.buildPath + '"><\/script>');
|
var funcProto = Function.prototype,
|
||||||
</script>
|
objectProto = Object.prototype;
|
||||||
<script>
|
|
||||||
// store Lo-Dash to test for bad shim detection
|
|
||||||
var lodashBadShim = _;
|
|
||||||
|
|
||||||
// restore nativeKeys
|
var hasOwnProperty = objectProto.hasOwnProperty,
|
||||||
Object.keys = Object._keys;
|
fnToString = funcProto.toString,
|
||||||
delete Object._keys;
|
nativeString = fnToString.call(objectProto.toString),
|
||||||
|
noop = function() {},
|
||||||
|
propertyIsEnumerable = objectProto.propertyIsEnumerable,
|
||||||
|
reToString = /toString/g;
|
||||||
|
|
||||||
// load Lo-Dash again to overwrite the existing `_` value
|
function constant(value) {
|
||||||
document.write('<script src="../' + ui.buildPath + '"><\/script>');
|
return function() {
|
||||||
|
return value;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// load test.js if not using require.js
|
function createToString(funcName) {
|
||||||
document.write(QUnit.urlParams.norequire
|
return constant(nativeString.replace(reToString, funcName));
|
||||||
? '<script src="test.js"><\/script>'
|
}
|
||||||
: '<script src="../vendor/requirejs/require.js"><\/script>'
|
|
||||||
);
|
|
||||||
</script>
|
|
||||||
<script>
|
|
||||||
// load Lo-Dash as a module
|
|
||||||
var lodashModule,
|
|
||||||
shimmedModule,
|
|
||||||
underscoreModule;
|
|
||||||
|
|
||||||
window.require && require(
|
// Allow bypassing native checks.
|
||||||
(function() {
|
setProperty(funcProto, 'toString', (function() {
|
||||||
var modulePath = ui.buildPath.replace(/\.js$/, '');
|
function wrapper() {
|
||||||
return {
|
setProperty(funcProto, 'toString', fnToString);
|
||||||
'baseUrl': '../vendor/requirejs/',
|
var result = hasOwnProperty.call(this, 'toString') ? this.toString() : fnToString.call(this);
|
||||||
'urlArgs': 't=' + (+new Date),
|
setProperty(funcProto, 'toString', wrapper);
|
||||||
'paths': {
|
return result;
|
||||||
'lodash': '../../' + modulePath,
|
}
|
||||||
'shimmed': './../../' + modulePath,
|
return wrapper;
|
||||||
'underscore': '../underscore/../../' + modulePath
|
}()));
|
||||||
},
|
|
||||||
'shim': {
|
|
||||||
'shimmed': {
|
|
||||||
'exports': '_'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}()),
|
|
||||||
['lodash', 'shimmed', 'underscore'], function(lodash, shimmed, underscore) {
|
|
||||||
if (lodash && lodash.noConflict) {
|
|
||||||
lodashModule = lodash.noConflict();
|
|
||||||
lodashModule.moduleName = 'lodash';
|
|
||||||
}
|
|
||||||
if (shimmed.noConflict) {
|
|
||||||
shimmedModule = shimmed.noConflict();
|
|
||||||
shimmedModule.moduleName = 'shimmed';
|
|
||||||
}
|
|
||||||
if (underscore && underscore.noConflict) {
|
|
||||||
underscoreModule = underscore.noConflict();
|
|
||||||
underscoreModule.moduleName = 'underscore';
|
|
||||||
}
|
|
||||||
require(['test.js']);
|
|
||||||
});
|
|
||||||
|
|
||||||
// set a more readable browser name
|
// Add prototype extensions.
|
||||||
window.onload = function() {
|
funcProto._method = noop;
|
||||||
var timeoutId = setInterval(function() {
|
|
||||||
var ua = document.getElementById('qunit-userAgent');
|
// Set bad shims.
|
||||||
if (ua) {
|
setProperty(Object, '_create', Object.create);
|
||||||
ua.innerHTML = platform;
|
setProperty(Object, 'create', (function() {
|
||||||
clearInterval(timeoutId);
|
function object() {}
|
||||||
}
|
return function(prototype) {
|
||||||
}, 15);
|
if (prototype === Object(prototype)) {
|
||||||
};
|
object.prototype = prototype;
|
||||||
</script>
|
var result = new object;
|
||||||
</body>
|
object.prototype = undefined;
|
||||||
|
}
|
||||||
|
return result || {};
|
||||||
|
};
|
||||||
|
}()));
|
||||||
|
|
||||||
|
setProperty(Object, '_getOwnPropertySymbols', Object.getOwnPropertySymbols);
|
||||||
|
setProperty(Object, 'getOwnPropertySymbols', undefined);
|
||||||
|
|
||||||
|
setProperty(objectProto, '_propertyIsEnumerable', propertyIsEnumerable);
|
||||||
|
setProperty(objectProto, 'propertyIsEnumerable', function(key) {
|
||||||
|
return !(key == 'valueOf' && this && this.valueOf === 1) && _propertyIsEnumerable.call(this, key);
|
||||||
|
});
|
||||||
|
|
||||||
|
setProperty(window, '_Map', window.Map);
|
||||||
|
if (_Map) {
|
||||||
|
setProperty(window, 'Map', (function(Map) {
|
||||||
|
var count = 0;
|
||||||
|
return function() {
|
||||||
|
if (count++) {
|
||||||
|
return new Map;
|
||||||
|
}
|
||||||
|
var result = {};
|
||||||
|
setProperty(window, 'Map', Map);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
}(_Map)));
|
||||||
|
|
||||||
|
setProperty(Map, 'toString', createToString('Map'));
|
||||||
|
}
|
||||||
|
setProperty(window, '_Set', window.Set);
|
||||||
|
setProperty(window, 'Set', noop);
|
||||||
|
|
||||||
|
setProperty(window, '_Symbol', window.Symbol);
|
||||||
|
setProperty(window, 'Symbol', undefined);
|
||||||
|
|
||||||
|
setProperty(window, '_WeakMap', window.WeakMap);
|
||||||
|
setProperty(window, 'WeakMap', noop);
|
||||||
|
|
||||||
|
// Fake `WinRTError`.
|
||||||
|
setProperty(window, 'WinRTError', Error);
|
||||||
|
|
||||||
|
// Fake free variable `global`.
|
||||||
|
setProperty(window, 'exports', window);
|
||||||
|
setProperty(window, 'global', window);
|
||||||
|
setProperty(window, 'module', {});
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeBizarroMethods() {
|
||||||
|
var funcProto = Function.prototype,
|
||||||
|
objectProto = Object.prototype;
|
||||||
|
|
||||||
|
setProperty(objectProto, 'propertyIsEnumerable', objectProto._propertyIsEnumerable);
|
||||||
|
|
||||||
|
if (Object._create) {
|
||||||
|
Object.create = Object._create;
|
||||||
|
} else {
|
||||||
|
delete Object.create;
|
||||||
|
}
|
||||||
|
if (Object._getOwnPropertySymbols) {
|
||||||
|
Object.getOwnPropertySymbols = Object._getOwnPropertySymbols;
|
||||||
|
} else {
|
||||||
|
delete Object.getOwnPropertySymbols;
|
||||||
|
}
|
||||||
|
if (_Map) {
|
||||||
|
Map = _Map;
|
||||||
|
} else {
|
||||||
|
setProperty(window, 'Map', undefined);
|
||||||
|
}
|
||||||
|
if (_Set) {
|
||||||
|
Set = _Set;
|
||||||
|
} else {
|
||||||
|
setProperty(window, 'Set', undefined);
|
||||||
|
}
|
||||||
|
if (_Symbol) {
|
||||||
|
Symbol = _Symbol;
|
||||||
|
}
|
||||||
|
if (_WeakMap) {
|
||||||
|
WeakMap = _WeakMap;
|
||||||
|
} else {
|
||||||
|
setProperty(window, 'WeakMap', undefined);
|
||||||
|
}
|
||||||
|
setProperty(window, '_Map', undefined);
|
||||||
|
setProperty(window, '_Set', undefined);
|
||||||
|
setProperty(window, '_Symbol', undefined);
|
||||||
|
setProperty(window, '_WeakMap', undefined);
|
||||||
|
|
||||||
|
setProperty(window, 'WinRTError', undefined);
|
||||||
|
|
||||||
|
setProperty(window, 'exports', document.getElementById('exports'));
|
||||||
|
setProperty(window, 'global', undefined);
|
||||||
|
setProperty(window, 'module', document.getElementById('module'));
|
||||||
|
|
||||||
|
delete funcProto._method;
|
||||||
|
delete Object._create;
|
||||||
|
delete Object._getOwnPropertySymbols;
|
||||||
|
delete objectProto._propertyIsEnumerable;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load lodash to expose it to the bad extensions/shims.
|
||||||
|
if (!ui.isModularize) {
|
||||||
|
addBizarroMethods();
|
||||||
|
document.write('<script src="' + ui.buildPath + '"><\/script>');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
// Store lodash to test for bad extensions/shims.
|
||||||
|
if (!ui.isModularize) {
|
||||||
|
var lodashBizarro = window._;
|
||||||
|
window._ = undefined;
|
||||||
|
removeBizarroMethods();
|
||||||
|
}
|
||||||
|
// Load test scripts.
|
||||||
|
document.write((ui.isForeign || ui.urlParams.loader == 'none')
|
||||||
|
? '<script src="' + ui.buildPath + '"><\/script><script src="test.js"><\/script>'
|
||||||
|
: '<script data-dojo-config="async:1" src="' + ui.loaderPath + '"><\/script>'
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
var lodashModule,
|
||||||
|
shimmedModule,
|
||||||
|
underscoreModule;
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
if (window.curl) {
|
||||||
|
curl.config({ 'apiName': 'require' });
|
||||||
|
}
|
||||||
|
if (ui.isForeign || !window.require) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var reBasename = /[\w.-]+$/,
|
||||||
|
basePath = ('//' + location.host + location.pathname.replace(reBasename, '')).replace(/\btest\/$/, ''),
|
||||||
|
modulePath = ui.buildPath.replace(/\.js$/, ''),
|
||||||
|
moduleMain = modulePath.match(reBasename)[0],
|
||||||
|
locationPath = modulePath.replace(reBasename, '').replace(/^\/|\/$/g, ''),
|
||||||
|
shimmedLocationPath = './abc/../' + locationPath,
|
||||||
|
underscoreLocationPath = './xyz/../' + locationPath,
|
||||||
|
uid = +new Date;
|
||||||
|
|
||||||
|
function getConfig() {
|
||||||
|
var result = {
|
||||||
|
'baseUrl': './',
|
||||||
|
'urlArgs': 't=' + uid++,
|
||||||
|
'waitSeconds': 0,
|
||||||
|
'paths': {},
|
||||||
|
'packages': [{
|
||||||
|
'name': 'test',
|
||||||
|
'location': basePath + 'test',
|
||||||
|
'main': 'test',
|
||||||
|
'config': {
|
||||||
|
// Work around no global being exported.
|
||||||
|
'exports': 'QUnit',
|
||||||
|
'loader': 'curl/loader/legacy'
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
'shim': {
|
||||||
|
'shimmed': {
|
||||||
|
'exports': '_'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (ui.isModularize) {
|
||||||
|
result.packages.push({
|
||||||
|
'name': 'lodash',
|
||||||
|
'location': locationPath,
|
||||||
|
'main': moduleMain
|
||||||
|
}, {
|
||||||
|
'name': 'shimmed',
|
||||||
|
'location': shimmedLocationPath,
|
||||||
|
'main': moduleMain
|
||||||
|
}, {
|
||||||
|
'name': 'underscore',
|
||||||
|
'location': underscoreLocationPath,
|
||||||
|
'main': moduleMain
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
result.paths.lodash = modulePath;
|
||||||
|
result.paths.shimmed = shimmedLocationPath + '/' + moduleMain;
|
||||||
|
result.paths.underscore = underscoreLocationPath + '/' + moduleMain;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadTests() {
|
||||||
|
require(getConfig(), ['test'], function() {
|
||||||
|
QUnit.start();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadModulesAndTests() {
|
||||||
|
require(getConfig(), ['lodash', 'shimmed', 'underscore'], function(lodash, shimmed, underscore) {
|
||||||
|
lodashModule = lodash;
|
||||||
|
lodashModule.moduleName = 'lodash';
|
||||||
|
|
||||||
|
if (shimmed) {
|
||||||
|
shimmedModule = shimmed.result(shimmed, 'noConflict') || shimmed;
|
||||||
|
shimmedModule.moduleName = 'shimmed';
|
||||||
|
}
|
||||||
|
if (underscore) {
|
||||||
|
underscoreModule = underscore.result(underscore, 'noConflict') || underscore;
|
||||||
|
underscoreModule.moduleName = 'underscore';
|
||||||
|
}
|
||||||
|
window._ = lodash;
|
||||||
|
|
||||||
|
if (ui.isModularize) {
|
||||||
|
require(getConfig(), [
|
||||||
|
'lodash/_baseEach',
|
||||||
|
'lodash/_isIndex',
|
||||||
|
'lodash/_isIterateeCall'
|
||||||
|
], function(baseEach, isIndex, isIterateeCall) {
|
||||||
|
lodash._baseEach = baseEach;
|
||||||
|
lodash._isIndex = isIndex;
|
||||||
|
lodash._isIterateeCall = isIterateeCall;
|
||||||
|
loadTests();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
loadTests();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QUnit.config.autostart = false;
|
||||||
|
|
||||||
|
if (window.requirejs) {
|
||||||
|
addBizarroMethods();
|
||||||
|
require(getConfig(), ['lodash'], function(lodash) {
|
||||||
|
lodashBizarro = lodash.result(lodash, 'noConflict') || lodash;
|
||||||
|
delete requirejs.s.contexts._;
|
||||||
|
|
||||||
|
removeBizarroMethods();
|
||||||
|
loadModulesAndTests();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
loadModulesAndTests();
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
// Set a more readable browser name.
|
||||||
|
window.onload = function() {
|
||||||
|
var timeoutId = setInterval(function() {
|
||||||
|
var ua = document.getElementById('qunit-userAgent');
|
||||||
|
if (ua) {
|
||||||
|
ua.innerHTML = platform;
|
||||||
|
clearInterval(timeoutId);
|
||||||
|
}
|
||||||
|
}, 16);
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
27
test/remove.js
Normal file
27
test/remove.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _ = require('../lodash'),
|
||||||
|
fs = require('fs'),
|
||||||
|
path = require('path');
|
||||||
|
|
||||||
|
var args = (args = process.argv)
|
||||||
|
.slice((args[0] === process.execPath || args[0] === 'node') ? 2 : 0);
|
||||||
|
|
||||||
|
var filePath = path.resolve(args[1]),
|
||||||
|
reLine = /.*/gm;
|
||||||
|
|
||||||
|
var pattern = (function() {
|
||||||
|
var result = args[0],
|
||||||
|
delimiter = result.charAt(0),
|
||||||
|
lastIndex = result.lastIndexOf(delimiter);
|
||||||
|
|
||||||
|
return RegExp(result.slice(1, lastIndex), result.slice(lastIndex + 1));
|
||||||
|
}());
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
fs.writeFileSync(filePath, fs.readFileSync(filePath, 'utf8').replace(pattern, function(match) {
|
||||||
|
var snippet = _.slice(arguments, -3, -2)[0];
|
||||||
|
return match.replace(snippet, snippet.replace(reLine, ''));
|
||||||
|
}));
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
cd "$(dirname "$0")"
|
|
||||||
|
|
||||||
for cmd in rhino narwhal ringo phantomjs; do
|
|
||||||
echo "Testing in $cmd..."
|
|
||||||
$cmd test.js ../dist/lodash.compat.js && $cmd test.js ../dist/lodash.compat.min.js
|
|
||||||
echo ""
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Testing in node..."
|
|
||||||
node test.js ../dist/lodash.js && node test.js ../dist/lodash.min.js
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Testing build..."
|
|
||||||
node test-build.js
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Testing in a browser..."
|
|
||||||
open index.html
|
|
||||||
921
test/saucelabs.js
Normal file
921
test/saucelabs.js
Normal file
@@ -0,0 +1,921 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/** Environment shortcut. */
|
||||||
|
var env = process.env;
|
||||||
|
|
||||||
|
if (env.TRAVIS_SECURE_ENV_VARS == 'false') {
|
||||||
|
console.log('Skipping Sauce Labs jobs; secure environment variables are unavailable');
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Load Node.js modules. */
|
||||||
|
var EventEmitter = require('events').EventEmitter,
|
||||||
|
http = require('http'),
|
||||||
|
path = require('path'),
|
||||||
|
url = require('url'),
|
||||||
|
util = require('util');
|
||||||
|
|
||||||
|
/** Load other modules. */
|
||||||
|
var _ = require('../lodash.js'),
|
||||||
|
chalk = require('chalk'),
|
||||||
|
ecstatic = require('ecstatic'),
|
||||||
|
request = require('request'),
|
||||||
|
SauceTunnel = require('sauce-tunnel');
|
||||||
|
|
||||||
|
/** Used for Sauce Labs credentials. */
|
||||||
|
var accessKey = env.SAUCE_ACCESS_KEY,
|
||||||
|
username = env.SAUCE_USERNAME;
|
||||||
|
|
||||||
|
/** Used as the default maximum number of times to retry a job and tunnel. */
|
||||||
|
var maxJobRetries = 3,
|
||||||
|
maxTunnelRetries = 3;
|
||||||
|
|
||||||
|
/** Used as the static file server middleware. */
|
||||||
|
var mount = ecstatic({
|
||||||
|
'cache': 'no-cache',
|
||||||
|
'root': process.cwd()
|
||||||
|
});
|
||||||
|
|
||||||
|
/** Used as the list of ports supported by Sauce Connect. */
|
||||||
|
var ports = [
|
||||||
|
80, 443, 888, 2000, 2001, 2020, 2109, 2222, 2310, 3000, 3001, 3030, 3210,
|
||||||
|
3333, 4000, 4001, 4040, 4321, 4502, 4503, 4567, 5000, 5001, 5050, 5555, 5432,
|
||||||
|
6000, 6001, 6060, 6666, 6543, 7000, 7070, 7774, 7777, 8000, 8001, 8003, 8031,
|
||||||
|
8080, 8081, 8765, 8777, 8888, 9000, 9001, 9080, 9090, 9876, 9877, 9999, 49221,
|
||||||
|
55001
|
||||||
|
];
|
||||||
|
|
||||||
|
/** Used by `logInline` to clear previously logged messages. */
|
||||||
|
var prevLine = '';
|
||||||
|
|
||||||
|
/** Method shortcut. */
|
||||||
|
var push = Array.prototype.push;
|
||||||
|
|
||||||
|
/** Used to detect error messages. */
|
||||||
|
var reError = /(?:\be|E)rror\b/;
|
||||||
|
|
||||||
|
/** Used to detect valid job ids. */
|
||||||
|
var reJobId = /^[a-z0-9]{32}$/;
|
||||||
|
|
||||||
|
/** Used to display the wait throbber. */
|
||||||
|
var throbberDelay = 500,
|
||||||
|
waitCount = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used as Sauce Labs config values.
|
||||||
|
* See the [Sauce Labs documentation](https://docs.saucelabs.com/reference/test-configuration/)
|
||||||
|
* for more details.
|
||||||
|
*/
|
||||||
|
var advisor = getOption('advisor', false),
|
||||||
|
build = getOption('build', (env.TRAVIS_COMMIT || '').slice(0, 10)),
|
||||||
|
commandTimeout = getOption('commandTimeout', 90),
|
||||||
|
compatMode = getOption('compatMode', null),
|
||||||
|
customData = Function('return {' + getOption('customData', '').replace(/^\{|}$/g, '') + '}')(),
|
||||||
|
deviceOrientation = getOption('deviceOrientation', 'portrait'),
|
||||||
|
framework = getOption('framework', 'qunit'),
|
||||||
|
idleTimeout = getOption('idleTimeout', 60),
|
||||||
|
jobName = getOption('name', 'unit tests'),
|
||||||
|
maxDuration = getOption('maxDuration', 180),
|
||||||
|
port = ports[Math.min(_.sortedIndex(ports, getOption('port', 9001)), ports.length - 1)],
|
||||||
|
publicAccess = getOption('public', true),
|
||||||
|
queueTimeout = getOption('queueTimeout', 240),
|
||||||
|
recordVideo = getOption('recordVideo', true),
|
||||||
|
recordScreenshots = getOption('recordScreenshots', false),
|
||||||
|
runner = getOption('runner', 'test/index.html').replace(/^\W+/, ''),
|
||||||
|
runnerUrl = getOption('runnerUrl', 'http://localhost:' + port + '/' + runner),
|
||||||
|
statusInterval = getOption('statusInterval', 5),
|
||||||
|
tags = getOption('tags', []),
|
||||||
|
throttled = getOption('throttled', 10),
|
||||||
|
tunneled = getOption('tunneled', true),
|
||||||
|
tunnelId = getOption('tunnelId', 'tunnel_' + (env.TRAVIS_JOB_ID || 0)),
|
||||||
|
tunnelTimeout = getOption('tunnelTimeout', 120),
|
||||||
|
videoUploadOnPass = getOption('videoUploadOnPass', false);
|
||||||
|
|
||||||
|
/** Used to convert Sauce Labs browser identifiers to their formal names. */
|
||||||
|
var browserNameMap = {
|
||||||
|
'googlechrome': 'Chrome',
|
||||||
|
'iehta': 'Internet Explorer',
|
||||||
|
'ipad': 'iPad',
|
||||||
|
'iphone': 'iPhone'
|
||||||
|
};
|
||||||
|
|
||||||
|
/** List of platforms to load the runner on. */
|
||||||
|
var platforms = [
|
||||||
|
['Linux', 'android', '5.1'],
|
||||||
|
['Windows 10', 'chrome', '48'],
|
||||||
|
['Windows 10', 'chrome', '47'],
|
||||||
|
['Windows 10', 'firefox', '44'],
|
||||||
|
['Windows 10', 'firefox', '43'],
|
||||||
|
['Windows 10', 'microsoftedge', '20.10240'],
|
||||||
|
['Windows 10', 'internet explorer', '11'],
|
||||||
|
['Windows 8', 'internet explorer', '10'],
|
||||||
|
['Windows 7', 'internet explorer', '9'],
|
||||||
|
// ['OS X 10.10', 'ipad', '9.1'],
|
||||||
|
['OS X 10.11', 'safari', '9'],
|
||||||
|
['OS X 10.10', 'safari', '8']
|
||||||
|
];
|
||||||
|
|
||||||
|
/** Used to tailor the `platforms` array. */
|
||||||
|
var isAMD = _.includes(tags, 'amd'),
|
||||||
|
isBackbone = _.includes(tags, 'backbone'),
|
||||||
|
isModern = _.includes(tags, 'modern');
|
||||||
|
|
||||||
|
// The platforms to test IE compatibility modes.
|
||||||
|
if (compatMode) {
|
||||||
|
platforms = [
|
||||||
|
['Windows 10', 'internet explorer', '11'],
|
||||||
|
['Windows 8', 'internet explorer', '10'],
|
||||||
|
['Windows 7', 'internet explorer', '9'],
|
||||||
|
['Windows 7', 'internet explorer', '8']
|
||||||
|
];
|
||||||
|
}
|
||||||
|
// The platforms for AMD tests.
|
||||||
|
if (isAMD) {
|
||||||
|
platforms = _.filter(platforms, function(platform) {
|
||||||
|
var browser = browserName(platform[1]),
|
||||||
|
version = +platform[2];
|
||||||
|
|
||||||
|
switch (browser) {
|
||||||
|
case 'Android': return version >= 4.4;
|
||||||
|
case 'Opera': return version >= 10;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// The platforms for Backbone tests.
|
||||||
|
if (isBackbone) {
|
||||||
|
platforms = _.filter(platforms, function(platform) {
|
||||||
|
var browser = browserName(platform[1]),
|
||||||
|
version = +platform[2];
|
||||||
|
|
||||||
|
switch (browser) {
|
||||||
|
case 'Firefox': return version >= 4;
|
||||||
|
case 'Internet Explorer': return version >= 7;
|
||||||
|
case 'iPad': return version >= 5;
|
||||||
|
case 'Opera': return version >= 12;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// The platforms for modern builds.
|
||||||
|
if (isModern) {
|
||||||
|
platforms = _.filter(platforms, function(platform) {
|
||||||
|
var browser = browserName(platform[1]),
|
||||||
|
version = +platform[2];
|
||||||
|
|
||||||
|
switch (browser) {
|
||||||
|
case 'Android': return version >= 4.1;
|
||||||
|
case 'Firefox': return version >= 10;
|
||||||
|
case 'Internet Explorer': return version >= 9;
|
||||||
|
case 'iPad': return version >= 6;
|
||||||
|
case 'Opera': return version >= 12;
|
||||||
|
case 'Safari': return version >= 6;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Used as the default `Job` options object. */
|
||||||
|
var jobOptions = {
|
||||||
|
'build': build,
|
||||||
|
'command-timeout': commandTimeout,
|
||||||
|
'custom-data': customData,
|
||||||
|
'device-orientation': deviceOrientation,
|
||||||
|
'framework': framework,
|
||||||
|
'idle-timeout': idleTimeout,
|
||||||
|
'max-duration': maxDuration,
|
||||||
|
'name': jobName,
|
||||||
|
'public': publicAccess,
|
||||||
|
'platforms': platforms,
|
||||||
|
'record-screenshots': recordScreenshots,
|
||||||
|
'record-video': recordVideo,
|
||||||
|
'sauce-advisor': advisor,
|
||||||
|
'tags': tags,
|
||||||
|
'url': runnerUrl,
|
||||||
|
'video-upload-on-pass': videoUploadOnPass
|
||||||
|
};
|
||||||
|
|
||||||
|
if (publicAccess === true) {
|
||||||
|
jobOptions['public'] = 'public';
|
||||||
|
}
|
||||||
|
if (tunneled) {
|
||||||
|
jobOptions['tunnel-identifier'] = tunnelId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolves the formal browser name for a given Sauce Labs browser identifier.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {string} identifier The browser identifier.
|
||||||
|
* @returns {string} Returns the formal browser name.
|
||||||
|
*/
|
||||||
|
function browserName(identifier) {
|
||||||
|
return browserNameMap[identifier] || capitalizeWords(identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Capitalizes the first character of each word in `string`.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {string} string The string to augment.
|
||||||
|
* @returns {string} Returns the augmented string.
|
||||||
|
*/
|
||||||
|
function capitalizeWords(string) {
|
||||||
|
return _.map(string.split(' '), _.capitalize).join(' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the value for the given option name. If no value is available the
|
||||||
|
* `defaultValue` is returned.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {string} name The name of the option.
|
||||||
|
* @param {*} defaultValue The default option value.
|
||||||
|
* @returns {*} Returns the option value.
|
||||||
|
*/
|
||||||
|
function getOption(name, defaultValue) {
|
||||||
|
var isArr = _.isArray(defaultValue);
|
||||||
|
return _.reduce(process.argv, function(result, value) {
|
||||||
|
if (isArr) {
|
||||||
|
value = optionToArray(name, value);
|
||||||
|
return _.isEmpty(value) ? result : value;
|
||||||
|
}
|
||||||
|
value = optionToValue(name, value);
|
||||||
|
|
||||||
|
return value == null ? result : value;
|
||||||
|
}, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if `value` is a job ID.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {*} value The value to check.
|
||||||
|
* @returns {boolean} Returns `true` if `value` is a job ID, else `false`.
|
||||||
|
*/
|
||||||
|
function isJobId(value) {
|
||||||
|
return reJobId.test(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes an inline message to standard output.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {string} [text=''] The text to log.
|
||||||
|
*/
|
||||||
|
function logInline(text) {
|
||||||
|
var blankLine = _.repeat(' ', _.size(prevLine));
|
||||||
|
prevLine = text = _.truncate(text, { 'length': 40 });
|
||||||
|
process.stdout.write(text + blankLine.slice(text.length) + '\r');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes the wait throbber to standard output.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function logThrobber() {
|
||||||
|
logInline('Please wait' + _.repeat('.', (++waitCount % 3) + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a comma separated option value into an array.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {string} name The name of the option to inspect.
|
||||||
|
* @param {string} string The options string.
|
||||||
|
* @returns {Array} Returns the new converted array.
|
||||||
|
*/
|
||||||
|
function optionToArray(name, string) {
|
||||||
|
return _.compact(_.invokeMap((optionToValue(name, string) || '').split(/, */), 'trim'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts the option value from an option string.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {string} name The name of the option to inspect.
|
||||||
|
* @param {string} string The options string.
|
||||||
|
* @returns {string|undefined} Returns the option value, else `undefined`.
|
||||||
|
*/
|
||||||
|
function optionToValue(name, string) {
|
||||||
|
var result = string.match(RegExp('^' + name + '(?:=([\\s\\S]+))?$'));
|
||||||
|
if (result) {
|
||||||
|
result = _.result(result, 1);
|
||||||
|
result = result ? _.trim(result) : true;
|
||||||
|
}
|
||||||
|
if (result === 'false') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return result || undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `Job#remove` and `Tunnel#stop` callback used by `Jobs#restart`
|
||||||
|
* and `Tunnel#restart` respectively.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function onGenericRestart() {
|
||||||
|
this.restarting = false;
|
||||||
|
this.emit('restart');
|
||||||
|
this.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `request.put` and `SauceTunnel#stop` callback used by `Jobs#stop`
|
||||||
|
* and `Tunnel#stop` respectively.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {Object} [error] The error object.
|
||||||
|
*/
|
||||||
|
function onGenericStop(error) {
|
||||||
|
this.running = this.stopping = false;
|
||||||
|
this.emit('stop', error);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `request.del` callback used by `Jobs#remove`.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function onJobRemove(error, res, body) {
|
||||||
|
this.id = this.taskId = this.url = null;
|
||||||
|
this.removing = false;
|
||||||
|
this.emit('remove');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `Job#remove` callback used by `Jobs#reset`.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function onJobReset() {
|
||||||
|
this.attempts = 0;
|
||||||
|
this.failed = this.resetting = false;
|
||||||
|
this._pollerId = this.id = this.result = this.taskId = this.url = null;
|
||||||
|
this.emit('reset');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `request.post` callback used by `Jobs#start`.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {Object} [error] The error object.
|
||||||
|
* @param {Object} res The response data object.
|
||||||
|
* @param {Object} body The response body JSON object.
|
||||||
|
*/
|
||||||
|
function onJobStart(error, res, body) {
|
||||||
|
this.starting = false;
|
||||||
|
|
||||||
|
if (this.stopping) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var statusCode = _.result(res, 'statusCode'),
|
||||||
|
taskId = _.first(_.result(body, 'js tests'));
|
||||||
|
|
||||||
|
if (error || !taskId || statusCode != 200) {
|
||||||
|
if (this.attempts < this.retries) {
|
||||||
|
this.restart();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var na = 'unavailable',
|
||||||
|
bodyStr = _.isObject(body) ? '\n' + JSON.stringify(body) : na,
|
||||||
|
statusStr = _.isFinite(statusCode) ? statusCode : na;
|
||||||
|
|
||||||
|
logInline();
|
||||||
|
console.error('Failed to start job; status: %s, body: %s', statusStr, bodyStr);
|
||||||
|
if (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
this.failed = true;
|
||||||
|
this.emit('complete');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.running = true;
|
||||||
|
this.taskId = taskId;
|
||||||
|
this.timestamp = _.now();
|
||||||
|
this.emit('start');
|
||||||
|
this.status();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `request.post` callback used by `Job#status`.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {Object} [error] The error object.
|
||||||
|
* @param {Object} res The response data object.
|
||||||
|
* @param {Object} body The response body JSON object.
|
||||||
|
*/
|
||||||
|
function onJobStatus(error, res, body) {
|
||||||
|
this.checking = false;
|
||||||
|
|
||||||
|
if (!this.running || this.stopping) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var completed = _.result(body, 'completed', false),
|
||||||
|
data = _.first(_.result(body, 'js tests')),
|
||||||
|
elapsed = (_.now() - this.timestamp) / 1000,
|
||||||
|
jobId = _.result(data, 'job_id', null),
|
||||||
|
jobResult = _.result(data, 'result', null),
|
||||||
|
jobStatus = _.result(data, 'status', ''),
|
||||||
|
jobUrl = _.result(data, 'url', null),
|
||||||
|
expired = (elapsed >= queueTimeout && !_.includes(jobStatus, 'in progress')),
|
||||||
|
options = this.options,
|
||||||
|
platform = options.platforms[0];
|
||||||
|
|
||||||
|
if (_.isObject(jobResult)) {
|
||||||
|
var message = _.result(jobResult, 'message');
|
||||||
|
} else {
|
||||||
|
if (typeof jobResult == 'string') {
|
||||||
|
message = jobResult;
|
||||||
|
}
|
||||||
|
jobResult = null;
|
||||||
|
}
|
||||||
|
if (isJobId(jobId)) {
|
||||||
|
this.id = jobId;
|
||||||
|
this.result = jobResult;
|
||||||
|
this.url = jobUrl;
|
||||||
|
} else {
|
||||||
|
completed = false;
|
||||||
|
}
|
||||||
|
this.emit('status', jobStatus);
|
||||||
|
|
||||||
|
if (!completed && !expired) {
|
||||||
|
this._pollerId = _.delay(_.bind(this.status, this), this.statusInterval * 1000);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var description = browserName(platform[1]) + ' ' + platform[2] + ' on ' + capitalizeWords(platform[0]),
|
||||||
|
errored = !jobResult || !jobResult.passed || reError.test(message) || reError.test(jobStatus),
|
||||||
|
failures = _.result(jobResult, 'failed'),
|
||||||
|
label = options.name + ':',
|
||||||
|
tunnel = this.tunnel;
|
||||||
|
|
||||||
|
if (errored || failures) {
|
||||||
|
if (errored && this.attempts < this.retries) {
|
||||||
|
this.restart();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var details = 'See ' + jobUrl + ' for details.';
|
||||||
|
this.failed = true;
|
||||||
|
|
||||||
|
logInline();
|
||||||
|
if (failures) {
|
||||||
|
console.error(label + ' %s ' + chalk.red('failed') + ' %d test' + (failures > 1 ? 's' : '') + '. %s', description, failures, details);
|
||||||
|
}
|
||||||
|
else if (tunnel.attempts < tunnel.retries) {
|
||||||
|
tunnel.restart();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (typeof message == 'undefined') {
|
||||||
|
message = 'Results are unavailable. ' + details;
|
||||||
|
}
|
||||||
|
console.error(label, description, chalk.red('failed') + ';', message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
logInline();
|
||||||
|
console.log(label, description, chalk.green('passed'));
|
||||||
|
}
|
||||||
|
this.running = false;
|
||||||
|
this.emit('complete');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `SauceTunnel#start` callback used by `Tunnel#start`.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {boolean} success The connection success indicator.
|
||||||
|
*/
|
||||||
|
function onTunnelStart(success) {
|
||||||
|
this.starting = false;
|
||||||
|
|
||||||
|
if (this._timeoutId) {
|
||||||
|
clearTimeout(this._timeoutId);
|
||||||
|
this._timeoutId = null;
|
||||||
|
}
|
||||||
|
if (!success) {
|
||||||
|
if (this.attempts < this.retries) {
|
||||||
|
this.restart();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
logInline();
|
||||||
|
console.error('Failed to open Sauce Connect tunnel');
|
||||||
|
process.exit(2);
|
||||||
|
}
|
||||||
|
logInline();
|
||||||
|
console.log('Sauce Connect tunnel opened');
|
||||||
|
|
||||||
|
var jobs = this.jobs;
|
||||||
|
push.apply(jobs.queue, jobs.all);
|
||||||
|
|
||||||
|
this.running = true;
|
||||||
|
this.emit('start');
|
||||||
|
|
||||||
|
console.log('Starting jobs...');
|
||||||
|
this.dequeue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Job constructor.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {Object} [properties] The properties to initialize a job with.
|
||||||
|
*/
|
||||||
|
function Job(properties) {
|
||||||
|
EventEmitter.call(this);
|
||||||
|
|
||||||
|
this.options = {};
|
||||||
|
_.merge(this, properties);
|
||||||
|
_.defaults(this.options, _.cloneDeep(jobOptions));
|
||||||
|
|
||||||
|
this.attempts = 0;
|
||||||
|
this.checking = this.failed = this.removing = this.resetting = this.restarting = this.running = this.starting = this.stopping = false;
|
||||||
|
this._pollerId = this.id = this.result = this.taskId = this.url = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
util.inherits(Job, EventEmitter);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the job.
|
||||||
|
*
|
||||||
|
* @memberOf Job
|
||||||
|
* @param {Function} callback The function called once the job is removed.
|
||||||
|
* @param {Object} Returns the job instance.
|
||||||
|
*/
|
||||||
|
Job.prototype.remove = function(callback) {
|
||||||
|
this.once('remove', _.iteratee(callback));
|
||||||
|
if (this.removing) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
this.removing = true;
|
||||||
|
return this.stop(function() {
|
||||||
|
var onRemove = _.bind(onJobRemove, this);
|
||||||
|
if (!this.id) {
|
||||||
|
_.defer(onRemove);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
request.del(_.template('https://saucelabs.com/rest/v1/${user}/jobs/${id}')(this), {
|
||||||
|
'auth': { 'user': this.user, 'pass': this.pass }
|
||||||
|
}, onRemove);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the job.
|
||||||
|
*
|
||||||
|
* @memberOf Job
|
||||||
|
* @param {Function} callback The function called once the job is reset.
|
||||||
|
* @param {Object} Returns the job instance.
|
||||||
|
*/
|
||||||
|
Job.prototype.reset = function(callback) {
|
||||||
|
this.once('reset', _.iteratee(callback));
|
||||||
|
if (this.resetting) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
this.resetting = true;
|
||||||
|
return this.remove(onJobReset);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restarts the job.
|
||||||
|
*
|
||||||
|
* @memberOf Job
|
||||||
|
* @param {Function} callback The function called once the job is restarted.
|
||||||
|
* @param {Object} Returns the job instance.
|
||||||
|
*/
|
||||||
|
Job.prototype.restart = function(callback) {
|
||||||
|
this.once('restart', _.iteratee(callback));
|
||||||
|
if (this.restarting) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
this.restarting = true;
|
||||||
|
|
||||||
|
var options = this.options,
|
||||||
|
platform = options.platforms[0],
|
||||||
|
description = browserName(platform[1]) + ' ' + platform[2] + ' on ' + capitalizeWords(platform[0]),
|
||||||
|
label = options.name + ':';
|
||||||
|
|
||||||
|
logInline();
|
||||||
|
console.log('%s %s restart %d of %d', label, description, ++this.attempts, this.retries);
|
||||||
|
|
||||||
|
return this.remove(onGenericRestart);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the job.
|
||||||
|
*
|
||||||
|
* @memberOf Job
|
||||||
|
* @param {Function} callback The function called once the job is started.
|
||||||
|
* @param {Object} Returns the job instance.
|
||||||
|
*/
|
||||||
|
Job.prototype.start = function(callback) {
|
||||||
|
this.once('start', _.iteratee(callback));
|
||||||
|
if (this.starting || this.running) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
this.starting = true;
|
||||||
|
request.post(_.template('https://saucelabs.com/rest/v1/${user}/js-tests')(this), {
|
||||||
|
'auth': { 'user': this.user, 'pass': this.pass },
|
||||||
|
'json': this.options
|
||||||
|
}, _.bind(onJobStart, this));
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks the status of a job.
|
||||||
|
*
|
||||||
|
* @memberOf Job
|
||||||
|
* @param {Function} callback The function called once the status is resolved.
|
||||||
|
* @param {Object} Returns the job instance.
|
||||||
|
*/
|
||||||
|
Job.prototype.status = function(callback) {
|
||||||
|
this.once('status', _.iteratee(callback));
|
||||||
|
if (this.checking || this.removing || this.resetting || this.restarting || this.starting || this.stopping) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
this._pollerId = null;
|
||||||
|
this.checking = true;
|
||||||
|
request.post(_.template('https://saucelabs.com/rest/v1/${user}/js-tests/status')(this), {
|
||||||
|
'auth': { 'user': this.user, 'pass': this.pass },
|
||||||
|
'json': { 'js tests': [this.taskId] }
|
||||||
|
}, _.bind(onJobStatus, this));
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops the job.
|
||||||
|
*
|
||||||
|
* @memberOf Job
|
||||||
|
* @param {Function} callback The function called once the job is stopped.
|
||||||
|
* @param {Object} Returns the job instance.
|
||||||
|
*/
|
||||||
|
Job.prototype.stop = function(callback) {
|
||||||
|
this.once('stop', _.iteratee(callback));
|
||||||
|
if (this.stopping) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
this.stopping = true;
|
||||||
|
if (this._pollerId) {
|
||||||
|
clearTimeout(this._pollerId);
|
||||||
|
this._pollerId = null;
|
||||||
|
this.checking = false;
|
||||||
|
}
|
||||||
|
var onStop = _.bind(onGenericStop, this);
|
||||||
|
if (!this.running || !this.id) {
|
||||||
|
_.defer(onStop);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
request.put(_.template('https://saucelabs.com/rest/v1/${user}/jobs/${id}/stop')(this), {
|
||||||
|
'auth': { 'user': this.user, 'pass': this.pass }
|
||||||
|
}, onStop);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Tunnel constructor.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {Object} [properties] The properties to initialize the tunnel with.
|
||||||
|
*/
|
||||||
|
function Tunnel(properties) {
|
||||||
|
EventEmitter.call(this);
|
||||||
|
|
||||||
|
_.merge(this, properties);
|
||||||
|
|
||||||
|
var active = [],
|
||||||
|
queue = [];
|
||||||
|
|
||||||
|
var all = _.map(this.platforms, _.bind(function(platform) {
|
||||||
|
return new Job(_.merge({
|
||||||
|
'user': this.user,
|
||||||
|
'pass': this.pass,
|
||||||
|
'tunnel': this,
|
||||||
|
'options': { 'platforms': [platform] }
|
||||||
|
}, this.job));
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
var completed = 0,
|
||||||
|
restarted = [],
|
||||||
|
success = true,
|
||||||
|
total = all.length,
|
||||||
|
tunnel = this;
|
||||||
|
|
||||||
|
_.invokeMap(all, 'on', 'complete', function() {
|
||||||
|
_.pull(active, this);
|
||||||
|
if (success) {
|
||||||
|
success = !this.failed;
|
||||||
|
}
|
||||||
|
if (++completed == total) {
|
||||||
|
tunnel.stop(_.partial(tunnel.emit, 'complete', success));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tunnel.dequeue();
|
||||||
|
});
|
||||||
|
|
||||||
|
_.invokeMap(all, 'on', 'restart', function() {
|
||||||
|
if (!_.includes(restarted, this)) {
|
||||||
|
restarted.push(this);
|
||||||
|
}
|
||||||
|
// Restart tunnel if all active jobs have restarted.
|
||||||
|
var threshold = Math.min(all.length, _.isFinite(throttled) ? throttled : 3);
|
||||||
|
if (tunnel.attempts < tunnel.retries &&
|
||||||
|
active.length >= threshold && _.isEmpty(_.difference(active, restarted))) {
|
||||||
|
tunnel.restart();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.on('restart', function() {
|
||||||
|
completed = 0;
|
||||||
|
success = true;
|
||||||
|
restarted.length = 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
this._timeoutId = null;
|
||||||
|
this.attempts = 0;
|
||||||
|
this.restarting = this.running = this.starting = this.stopping = false;
|
||||||
|
this.jobs = { 'active': active, 'all': all, 'queue': queue };
|
||||||
|
this.connection = new SauceTunnel(this.user, this.pass, this.id, this.tunneled, ['-P', '0']);
|
||||||
|
}
|
||||||
|
|
||||||
|
util.inherits(Tunnel, EventEmitter);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restarts the tunnel.
|
||||||
|
*
|
||||||
|
* @memberOf Tunnel
|
||||||
|
* @param {Function} callback The function called once the tunnel is restarted.
|
||||||
|
*/
|
||||||
|
Tunnel.prototype.restart = function(callback) {
|
||||||
|
this.once('restart', _.iteratee(callback));
|
||||||
|
if (this.restarting) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
this.restarting = true;
|
||||||
|
|
||||||
|
logInline();
|
||||||
|
console.log('Tunnel %s: restart %d of %d', this.id, ++this.attempts, this.retries);
|
||||||
|
|
||||||
|
var jobs = this.jobs,
|
||||||
|
active = jobs.active,
|
||||||
|
all = jobs.all;
|
||||||
|
|
||||||
|
var reset = _.after(all.length, _.bind(this.stop, this, onGenericRestart)),
|
||||||
|
stop = _.after(active.length, _.partial(_.invokeMap, all, 'reset', reset));
|
||||||
|
|
||||||
|
if (_.isEmpty(active)) {
|
||||||
|
_.defer(stop);
|
||||||
|
}
|
||||||
|
if (_.isEmpty(all)) {
|
||||||
|
_.defer(reset);
|
||||||
|
}
|
||||||
|
_.invokeMap(active, 'stop', function() {
|
||||||
|
_.pull(active, this);
|
||||||
|
stop();
|
||||||
|
});
|
||||||
|
|
||||||
|
if (this._timeoutId) {
|
||||||
|
clearTimeout(this._timeoutId);
|
||||||
|
this._timeoutId = null;
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the tunnel.
|
||||||
|
*
|
||||||
|
* @memberOf Tunnel
|
||||||
|
* @param {Function} callback The function called once the tunnel is started.
|
||||||
|
* @param {Object} Returns the tunnel instance.
|
||||||
|
*/
|
||||||
|
Tunnel.prototype.start = function(callback) {
|
||||||
|
this.once('start', _.iteratee(callback));
|
||||||
|
if (this.starting || this.running) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
this.starting = true;
|
||||||
|
|
||||||
|
logInline();
|
||||||
|
console.log('Opening Sauce Connect tunnel...');
|
||||||
|
|
||||||
|
var onStart = _.bind(onTunnelStart, this);
|
||||||
|
if (this.timeout) {
|
||||||
|
this._timeoutId = _.delay(onStart, this.timeout * 1000, false);
|
||||||
|
}
|
||||||
|
this.connection.start(onStart);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes jobs from the queue and starts them.
|
||||||
|
*
|
||||||
|
* @memberOf Tunnel
|
||||||
|
* @param {Object} Returns the tunnel instance.
|
||||||
|
*/
|
||||||
|
Tunnel.prototype.dequeue = function() {
|
||||||
|
var jobs = this.jobs,
|
||||||
|
active = jobs.active,
|
||||||
|
queue = jobs.queue,
|
||||||
|
throttled = this.throttled;
|
||||||
|
|
||||||
|
while (queue.length && (active.length < throttled)) {
|
||||||
|
active.push(queue.shift().start());
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops the tunnel.
|
||||||
|
*
|
||||||
|
* @memberOf Tunnel
|
||||||
|
* @param {Function} callback The function called once the tunnel is stopped.
|
||||||
|
* @param {Object} Returns the tunnel instance.
|
||||||
|
*/
|
||||||
|
Tunnel.prototype.stop = function(callback) {
|
||||||
|
this.once('stop', _.iteratee(callback));
|
||||||
|
if (this.stopping) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
this.stopping = true;
|
||||||
|
|
||||||
|
logInline();
|
||||||
|
console.log('Shutting down Sauce Connect tunnel...');
|
||||||
|
|
||||||
|
var jobs = this.jobs,
|
||||||
|
active = jobs.active;
|
||||||
|
|
||||||
|
var stop = _.after(active.length, _.bind(function() {
|
||||||
|
var onStop = _.bind(onGenericStop, this);
|
||||||
|
if (this.running) {
|
||||||
|
this.connection.stop(onStop);
|
||||||
|
} else {
|
||||||
|
onStop();
|
||||||
|
}
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
jobs.queue.length = 0;
|
||||||
|
if (_.isEmpty(active)) {
|
||||||
|
_.defer(stop);
|
||||||
|
}
|
||||||
|
_.invokeMap(active, 'stop', function() {
|
||||||
|
_.pull(active, this);
|
||||||
|
stop();
|
||||||
|
});
|
||||||
|
|
||||||
|
if (this._timeoutId) {
|
||||||
|
clearTimeout(this._timeoutId);
|
||||||
|
this._timeoutId = null;
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// Cleanup any inline logs when exited via `ctrl+c`.
|
||||||
|
process.on('SIGINT', function() {
|
||||||
|
logInline();
|
||||||
|
process.exit();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Create a web server for the current working directory.
|
||||||
|
http.createServer(function(req, res) {
|
||||||
|
// See http://msdn.microsoft.com/en-us/library/ff955275(v=vs.85).aspx.
|
||||||
|
if (compatMode && path.extname(url.parse(req.url).pathname) == '.html') {
|
||||||
|
res.setHeader('X-UA-Compatible', 'IE=' + compatMode);
|
||||||
|
}
|
||||||
|
mount(req, res);
|
||||||
|
}).listen(port);
|
||||||
|
|
||||||
|
// Setup Sauce Connect so we can use this server from Sauce Labs.
|
||||||
|
var tunnel = new Tunnel({
|
||||||
|
'user': username,
|
||||||
|
'pass': accessKey,
|
||||||
|
'id': tunnelId,
|
||||||
|
'job': { 'retries': maxJobRetries, 'statusInterval': statusInterval },
|
||||||
|
'platforms': platforms,
|
||||||
|
'retries': maxTunnelRetries,
|
||||||
|
'throttled': throttled,
|
||||||
|
'tunneled': tunneled,
|
||||||
|
'timeout': tunnelTimeout
|
||||||
|
});
|
||||||
|
|
||||||
|
tunnel.on('complete', function(success) {
|
||||||
|
process.exit(success ? 0 : 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
tunnel.start();
|
||||||
|
|
||||||
|
setInterval(logThrobber, throbberDelay);
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
<ul>
|
|
||||||
<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>
|
|
||||||
</ul>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<% print("Hello " + epithet); %>.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Hello ${ name }!
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Hello {{ name }}!
|
|
||||||
1324
test/test-build.js
1324
test/test-build.js
File diff suppressed because it is too large
Load Diff
1473
test/test-fp.js
Normal file
1473
test/test-fp.js
Normal file
File diff suppressed because it is too large
Load Diff
108
test/test-ui.js
108
test/test-ui.js
@@ -1,108 +0,0 @@
|
|||||||
;(function(window) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/** `QUnit.addEvent` shortcut */
|
|
||||||
var addEvent = QUnit.addEvent;
|
|
||||||
|
|
||||||
/** The Lo-Dash build to load */
|
|
||||||
var build = (/build=([^&]+)/.exec(location.search) || [])[1];
|
|
||||||
|
|
||||||
/** A flag to determine if RequireJS should be loaded */
|
|
||||||
var norequire = /[?&]norequire=true(?:&|$)/.test(location.search);
|
|
||||||
|
|
||||||
/** The `ui` object */
|
|
||||||
var ui = {};
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// expose Lo-Dash build file path
|
|
||||||
ui.buildPath = (function() {
|
|
||||||
switch (build) {
|
|
||||||
case 'lodash-prod': return 'dist/lodash.compat.min.js';
|
|
||||||
case 'lodash-underscore': return 'dist/lodash.underscore.min.js';
|
|
||||||
case 'lodash-modern': return 'dist/lodash.min.js';
|
|
||||||
case 'lodash-modern-debug': return 'dist/lodash.js';
|
|
||||||
case 'lodash-custom': return 'lodash.custom.min.js';
|
|
||||||
case 'lodash-custom-debug': return 'lodash.custom.js';
|
|
||||||
}
|
|
||||||
return 'lodash.js';
|
|
||||||
}());
|
|
||||||
|
|
||||||
// assign `QUnit.urlParams` properties
|
|
||||||
QUnit.extend(QUnit.urlParams, {
|
|
||||||
'build': build,
|
|
||||||
'norequire': norequire
|
|
||||||
});
|
|
||||||
|
|
||||||
// initialize controls
|
|
||||||
addEvent(window, 'load', function() {
|
|
||||||
function eventHandler(event) {
|
|
||||||
var search = location.search.replace(/^\?|&?(?:build|norequire)=[^&]*&?/g, '');
|
|
||||||
if (event.stopPropagation) {
|
|
||||||
event.stopPropagation();
|
|
||||||
} else {
|
|
||||||
event.cancelBubble = true;
|
|
||||||
}
|
|
||||||
location.href =
|
|
||||||
location.href.split('?')[0] + '?' +
|
|
||||||
(search ? search + '&' : '') +
|
|
||||||
'build=' + buildList[buildList.selectedIndex].value +
|
|
||||||
(checkbox.checked ? '&norequire=true' : '');
|
|
||||||
}
|
|
||||||
|
|
||||||
function init() {
|
|
||||||
var toolbar = document.getElementById('qunit-testrunner-toolbar');
|
|
||||||
if (toolbar) {
|
|
||||||
toolbar.appendChild(span1);
|
|
||||||
toolbar.appendChild(span2);
|
|
||||||
|
|
||||||
buildList.selectedIndex = (function() {
|
|
||||||
switch (build) {
|
|
||||||
case 'lodash-prod': return 1;
|
|
||||||
case 'lodash-underscore': return 2;
|
|
||||||
case 'lodash-modern': return 3;
|
|
||||||
case 'lodash-modern-debug': return 4;
|
|
||||||
case 'lodash-custom': return 5;
|
|
||||||
case 'lodash-custom-debug': return 6;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}());
|
|
||||||
|
|
||||||
checkbox.checked = norequire;
|
|
||||||
addEvent(checkbox, 'click', eventHandler);
|
|
||||||
addEvent(buildList, 'change', eventHandler);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
setTimeout(init, 15);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var span1 = document.createElement('span');
|
|
||||||
span1.innerHTML =
|
|
||||||
'<input id="qunit-norequire" type="checkbox">' +
|
|
||||||
'<label for="qunit-norequire">No RequireJS</label>';
|
|
||||||
|
|
||||||
var span2 = document.createElement('span');
|
|
||||||
span2.style.cssText = 'float:right';
|
|
||||||
span2.innerHTML =
|
|
||||||
'<label for="qunit-build">Build: </label>' +
|
|
||||||
'<select id="qunit-build">' +
|
|
||||||
'<option value="lodash-dev">Developement</option>' +
|
|
||||||
'<option value="lodash-prod">Production</option>' +
|
|
||||||
'<option value="lodash-underscore">Underscore</option>' +
|
|
||||||
'<option value="lodash-modern">Modern</option>' +
|
|
||||||
'<option value="lodash-modern-debug">Modern (debug)</option>' +
|
|
||||||
'<option value="lodash-custom">Custom</option>' +
|
|
||||||
'<option value="lodash-custom-debug">Custom (debug)</option>' +
|
|
||||||
'</select>';
|
|
||||||
|
|
||||||
var checkbox = span1.firstChild,
|
|
||||||
buildList = span2.lastChild;
|
|
||||||
|
|
||||||
init();
|
|
||||||
});
|
|
||||||
|
|
||||||
// expose `ui`
|
|
||||||
window.ui = ui;
|
|
||||||
|
|
||||||
}(this));
|
|
||||||
24778
test/test.js
24778
test/test.js
File diff suppressed because it is too large
Load Diff
@@ -1,102 +1,480 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Underscore Test Suite</title>
|
<title>Underscore Test Suite</title>
|
||||||
<link rel="stylesheet" href="../vendor/qunit/qunit/qunit.css">
|
<link rel="stylesheet" href="../node_modules/qunitjs/qunit/qunit.css">
|
||||||
<style>
|
</head>
|
||||||
iframe {
|
<body>
|
||||||
display: none;
|
<div id="qunit"></div>
|
||||||
}
|
<script>
|
||||||
</style>
|
// Avoid reporting tests to Sauce Labs when script errors occur.
|
||||||
</head>
|
if (location.port == '9001') {
|
||||||
<body>
|
window.onerror = function(message) {
|
||||||
<div id="qunit"></div>
|
if (window.QUnit) {
|
||||||
<div id="qunit-fixture">
|
QUnit.config.done.length = 0;
|
||||||
<div id="map-test">
|
}
|
||||||
<div id="id1"></div>
|
global_test_results = { 'message': message };
|
||||||
<div id="id2"></div>
|
};
|
||||||
</div>
|
}
|
||||||
<img id="chart_image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==">
|
</script>
|
||||||
</div>
|
<script src="../node_modules/qunitjs/qunit/qunit.js"></script>
|
||||||
<script src="../vendor/jquery/jquery.js"></script>
|
<script src="../node_modules/qunit-extras/qunit-extras.js"></script>
|
||||||
<script src="../vendor/platform.js/platform.js"></script>
|
<script src="../node_modules/jquery/dist/jquery.js"></script>
|
||||||
<script src="../vendor/qunit/qunit/qunit.js"></script>
|
<script src="../node_modules/platform/platform.js"></script>
|
||||||
<script src="test-ui.js"></script>
|
<script src="./asset/test-ui.js"></script>
|
||||||
<script>
|
<script src="../lodash.js"></script>
|
||||||
document.write('<script src="../' + ui.buildPath + '"><\/script>');
|
<script>
|
||||||
</script>
|
QUnit.config.asyncRetries = 10;
|
||||||
<script>
|
QUnit.config.hidepassed = true;
|
||||||
(function() {
|
QUnit.config.excused = {
|
||||||
var arrayProto = Array.prototype,
|
'Arrays': {
|
||||||
concat = arrayProto.concat,
|
'difference': [
|
||||||
pop = arrayProto.pop,
|
'can perform an OO-style difference'
|
||||||
push = arrayProto.push,
|
],
|
||||||
slice = arrayProto.slice;
|
'drop': [
|
||||||
|
'is an alias for rest'
|
||||||
|
],
|
||||||
|
'first': [
|
||||||
|
'returns an empty array when n <= 0 (0 case)',
|
||||||
|
'returns an empty array when n <= 0 (negative case)',
|
||||||
|
'can fetch the first n elements',
|
||||||
|
'returns the whole array if n > length'
|
||||||
|
],
|
||||||
|
'findIndex': [
|
||||||
|
'called with context'
|
||||||
|
],
|
||||||
|
'findLastIndex': [
|
||||||
|
'called with context'
|
||||||
|
],
|
||||||
|
'flatten': [
|
||||||
|
'supports empty arrays',
|
||||||
|
'can flatten nested arrays',
|
||||||
|
'works on an arguments object',
|
||||||
|
'can handle very deep arrays'
|
||||||
|
],
|
||||||
|
'head': [
|
||||||
|
'is an alias for first'
|
||||||
|
],
|
||||||
|
'indexOf': [
|
||||||
|
"sorted indexOf doesn't uses binary search",
|
||||||
|
'0'
|
||||||
|
],
|
||||||
|
'initial': [
|
||||||
|
'returns all but the last n elements',
|
||||||
|
'returns an empty array when n > length',
|
||||||
|
'works on an arguments object'
|
||||||
|
],
|
||||||
|
'intersection': [
|
||||||
|
'can perform an OO-style intersection'
|
||||||
|
],
|
||||||
|
'last': [
|
||||||
|
'returns an empty array when n <= 0 (0 case)',
|
||||||
|
'returns an empty array when n <= 0 (negative case)',
|
||||||
|
'can fetch the last n elements',
|
||||||
|
'returns the whole array if n > length'
|
||||||
|
],
|
||||||
|
'lastIndexOf': [
|
||||||
|
'should treat falsey `fromIndex` values, except `0` and `NaN`, as `array.length`',
|
||||||
|
'should treat non-number `fromIndex` values as `array.length`',
|
||||||
|
'[0,-1,-1]'
|
||||||
|
],
|
||||||
|
'object': [
|
||||||
|
'an array of pairs zipped together into an object',
|
||||||
|
'an object converted to pairs and back to an object'
|
||||||
|
],
|
||||||
|
'range': [
|
||||||
|
'range with two arguments a & b, b<a generates an empty array'
|
||||||
|
],
|
||||||
|
'rest': [
|
||||||
|
'returns the whole array when index is 0',
|
||||||
|
'returns elements starting at the given index',
|
||||||
|
'works on an arguments object'
|
||||||
|
],
|
||||||
|
'sortedIndex': [
|
||||||
|
'2',
|
||||||
|
'3'
|
||||||
|
],
|
||||||
|
'tail': [
|
||||||
|
'is an alias for rest'
|
||||||
|
],
|
||||||
|
'take': [
|
||||||
|
'is an alias for first'
|
||||||
|
],
|
||||||
|
'uniq': [
|
||||||
|
'uses the result of `iterator` for uniqueness comparisons (unsorted case)',
|
||||||
|
'`sorted` argument defaults to false when omitted',
|
||||||
|
'when `iterator` is a string, uses that key for comparisons (unsorted case)',
|
||||||
|
'uses the result of `iterator` for uniqueness comparisons (sorted case)',
|
||||||
|
'when `iterator` is a string, uses that key for comparisons (sorted case)',
|
||||||
|
'can use falsey pluck like iterator'
|
||||||
|
],
|
||||||
|
'union': [
|
||||||
|
'can perform an OO-style union'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'Chaining': {
|
||||||
|
'pop': true,
|
||||||
|
'shift': true,
|
||||||
|
'splice': true,
|
||||||
|
'reverse/concat/unshift/pop/map': [
|
||||||
|
'can chain together array functions.'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'Collections': {
|
||||||
|
'lookupIterator with contexts': true,
|
||||||
|
'Iterating objects with sketchy length properties': true,
|
||||||
|
'Resistant to collection length and properties changing while iterating': true,
|
||||||
|
'countBy': [
|
||||||
|
'true'
|
||||||
|
],
|
||||||
|
'each': [
|
||||||
|
'context object property accessed'
|
||||||
|
],
|
||||||
|
'every': [
|
||||||
|
'Can be called with object',
|
||||||
|
'Died on test #15',
|
||||||
|
'context works'
|
||||||
|
],
|
||||||
|
'filter': [
|
||||||
|
'given context',
|
||||||
|
'[{"a":1,"b":2},{"a":1,"b":3},{"a":1,"b":4}]',
|
||||||
|
'[{"a":1,"b":2},{"a":2,"b":2}]',
|
||||||
|
'Empty object accepts all items',
|
||||||
|
'OO-filter'
|
||||||
|
],
|
||||||
|
'find': [
|
||||||
|
'{"a":1,"b":4}',
|
||||||
|
'undefined when not found',
|
||||||
|
'undefined when searching empty list',
|
||||||
|
'works on objects',
|
||||||
|
'undefined',
|
||||||
|
'called with context'
|
||||||
|
],
|
||||||
|
'findWhere': [
|
||||||
|
'checks properties given function'
|
||||||
|
],
|
||||||
|
'groupBy': [
|
||||||
|
'true'
|
||||||
|
],
|
||||||
|
'includes': [
|
||||||
|
"doesn't delegate to binary search"
|
||||||
|
],
|
||||||
|
'invoke': [
|
||||||
|
'handles null & undefined'
|
||||||
|
],
|
||||||
|
'map': [
|
||||||
|
'tripled numbers with context',
|
||||||
|
'OO-style doubled numbers'
|
||||||
|
],
|
||||||
|
'max': [
|
||||||
|
'can handle null/undefined',
|
||||||
|
'can perform a computation-based max',
|
||||||
|
'Maximum value of an empty object',
|
||||||
|
'Maximum value of an empty array',
|
||||||
|
'Maximum value of a non-numeric collection',
|
||||||
|
'Finds correct max in array starting with num and containing a NaN',
|
||||||
|
'Finds correct max in array starting with NaN',
|
||||||
|
'Respects iterator return value of -Infinity',
|
||||||
|
'String keys use property iterator',
|
||||||
|
'Iterator context',
|
||||||
|
'Lookup falsy iterator'
|
||||||
|
],
|
||||||
|
'min': [
|
||||||
|
'can handle null/undefined',
|
||||||
|
'can perform a computation-based min',
|
||||||
|
'Minimum value of an empty object',
|
||||||
|
'Minimum value of an empty array',
|
||||||
|
'Minimum value of a non-numeric collection',
|
||||||
|
'Finds correct min in array starting with NaN',
|
||||||
|
'Respects iterator return value of Infinity',
|
||||||
|
'String keys use property iterator',
|
||||||
|
'Iterator context',
|
||||||
|
'Lookup falsy iterator'
|
||||||
|
],
|
||||||
|
'partition': [
|
||||||
|
'can reference the array index',
|
||||||
|
'Died on test #8',
|
||||||
|
'partition takes a context argument',
|
||||||
|
'function(a){[code]}'
|
||||||
|
],
|
||||||
|
'pluck': [
|
||||||
|
'[1]'
|
||||||
|
],
|
||||||
|
'reduce': [
|
||||||
|
'can reduce with a context object'
|
||||||
|
],
|
||||||
|
'reject': [
|
||||||
|
'Returns empty list given empty array'
|
||||||
|
],
|
||||||
|
'sample': [
|
||||||
|
'behaves correctly on negative n',
|
||||||
|
'Died on test #3'
|
||||||
|
],
|
||||||
|
'some': [
|
||||||
|
'Can be called with object',
|
||||||
|
'Died on test #17',
|
||||||
|
'context works'
|
||||||
|
],
|
||||||
|
'where': [
|
||||||
|
'checks properties given function'
|
||||||
|
],
|
||||||
|
'Can use various collection methods on NodeLists': [
|
||||||
|
'<span id="id2"></span>',
|
||||||
|
'<span id="id1"></span>'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'Functions': {
|
||||||
|
'debounce asap': true,
|
||||||
|
'debounce asap cancel': true,
|
||||||
|
'debounce after system time is set backwards': true,
|
||||||
|
'debounce asap recursively': true,
|
||||||
|
'throttle repeatedly with results': true,
|
||||||
|
'more throttle does not trigger leading call when leading is set to false': true,
|
||||||
|
'throttle does not trigger trailing call when trailing is set to false': true,
|
||||||
|
'before': [
|
||||||
|
'stores a memo to the last value',
|
||||||
|
'provides context'
|
||||||
|
],
|
||||||
|
'bind': [
|
||||||
|
'Died on test #2'
|
||||||
|
],
|
||||||
|
'bindAll': [
|
||||||
|
'throws an error for bindAll with no functions named'
|
||||||
|
],
|
||||||
|
'memoize': [
|
||||||
|
'{"bar":"BAR","foo":"FOO"}',
|
||||||
|
'Died on test #8'
|
||||||
|
],
|
||||||
|
'partial':[
|
||||||
|
'can partially apply with placeholders',
|
||||||
|
'accepts more arguments than the number of placeholders',
|
||||||
|
'accepts fewer arguments than the number of placeholders',
|
||||||
|
'unfilled placeholders are undefined',
|
||||||
|
'keeps prototype',
|
||||||
|
'allows the placeholder to be swapped out'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'Objects': {
|
||||||
|
'#1929 Typed Array constructors are functions': true,
|
||||||
|
'allKeys': [
|
||||||
|
'is not fooled by sparse arrays; see issue #95',
|
||||||
|
'is not fooled by sparse arrays with additional properties',
|
||||||
|
'[]'
|
||||||
|
],
|
||||||
|
'defaults': [
|
||||||
|
'defaults skips nulls',
|
||||||
|
'defaults skips undefined'
|
||||||
|
],
|
||||||
|
'extend': [
|
||||||
|
'extending null results in null',
|
||||||
|
'extending undefined results in undefined'
|
||||||
|
],
|
||||||
|
'extendOwn': [
|
||||||
|
'extending non-objects results in returning the non-object value',
|
||||||
|
'extending undefined results in undefined'
|
||||||
|
],
|
||||||
|
'functions': [
|
||||||
|
'also looks up functions on the prototype'
|
||||||
|
],
|
||||||
|
'isEqual': [
|
||||||
|
'`0` is not equal to `-0`',
|
||||||
|
'Commutative equality is implemented for `0` and `-0`',
|
||||||
|
'`new Number(0)` and `-0` are not equal',
|
||||||
|
'Commutative equality is implemented for `new Number(0)` and `-0`',
|
||||||
|
'false'
|
||||||
|
],
|
||||||
|
'isFinite': [
|
||||||
|
'Numeric strings are numbers',
|
||||||
|
'Number instances can be finite'
|
||||||
|
],
|
||||||
|
'isMatch': [
|
||||||
|
'doesnt falsey match constructor on undefined/null'
|
||||||
|
],
|
||||||
|
'findKey': [
|
||||||
|
'called with context'
|
||||||
|
],
|
||||||
|
'keys': [
|
||||||
|
'is not fooled by sparse arrays; see issue #95',
|
||||||
|
'[]'
|
||||||
|
],
|
||||||
|
'mapObject': [
|
||||||
|
'keep context',
|
||||||
|
'called with context',
|
||||||
|
'mapValue identity'
|
||||||
|
],
|
||||||
|
'matcher': [
|
||||||
|
'null matches null',
|
||||||
|
'treats primitives as empty'
|
||||||
|
],
|
||||||
|
'omit': [
|
||||||
|
'can accept a predicate',
|
||||||
|
'function is given context'
|
||||||
|
],
|
||||||
|
'pick': [
|
||||||
|
'can accept a predicate and context',
|
||||||
|
'function is given context'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'Utility': {
|
||||||
|
'noConflict (node vm)': true,
|
||||||
|
'now': [
|
||||||
|
'Produces the correct time in milliseconds'
|
||||||
|
],
|
||||||
|
'times': [
|
||||||
|
'works as a wrapper'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
if (_.chain) {
|
var mixinPrereqs = (function() {
|
||||||
return;
|
var aliasToReal = {
|
||||||
}
|
'all': 'every',
|
||||||
_.mixin = function(object) {
|
'allKeys': 'keysIn',
|
||||||
_.forEach(_.functions(object), function(methodName) {
|
'any': 'some',
|
||||||
var func = _[methodName] = object[methodName];
|
'collect': 'map',
|
||||||
_.prototype[methodName] = function() {
|
'compose': 'flowRight',
|
||||||
var args = [this.__wrapped__];
|
'contains': 'includes',
|
||||||
push.apply(args, arguments);
|
'detect': 'find',
|
||||||
|
'extendOwn': 'assign',
|
||||||
|
'findWhere': 'find',
|
||||||
|
'foldl': 'reduce',
|
||||||
|
'foldr': 'reduceRight',
|
||||||
|
'include': 'includes',
|
||||||
|
'indexBy': 'keyBy',
|
||||||
|
'inject': 'reduce',
|
||||||
|
'invoke': 'invokeMap',
|
||||||
|
'mapObject': 'mapValues',
|
||||||
|
'matcher': 'matches',
|
||||||
|
'methods': 'functions',
|
||||||
|
'object': 'zipObject',
|
||||||
|
'pairs': 'toPairs',
|
||||||
|
'pluck': 'map',
|
||||||
|
'restParam': 'restArgs',
|
||||||
|
'select': 'filter',
|
||||||
|
'unique': 'uniq',
|
||||||
|
'where': 'filter'
|
||||||
|
};
|
||||||
|
|
||||||
var result = func.apply(_, args);
|
var keyMap = {
|
||||||
if (this.__chain__) {
|
'rest': 'tail',
|
||||||
result = new _(result);
|
'restArgs': 'rest'
|
||||||
result.__chain__ = true;
|
};
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
_.mixin(_);
|
var lodash = _.noConflict();
|
||||||
|
|
||||||
_.mixin({
|
return function(_) {
|
||||||
'findWhere': _.find
|
lodash.defaultsDeep(_, { 'templateSettings': lodash.templateSettings });
|
||||||
});
|
lodash.mixin(_, lodash.pick(lodash, lodash.difference(lodash.functions(lodash), lodash.functions(_))));
|
||||||
|
|
||||||
_.chain = function(value) {
|
lodash.forOwn(keyMap, function(realName, otherName) {
|
||||||
value = new _(value);
|
_[otherName] = lodash[realName];
|
||||||
value.__chain__ = true;
|
_.prototype[otherName] = lodash.prototype[realName];
|
||||||
return value;
|
});
|
||||||
};
|
|
||||||
|
|
||||||
_.prototype.chain = function() {
|
lodash.forOwn(aliasToReal, function(realName, alias) {
|
||||||
this.__chain__ = true;
|
_[alias] = _[realName];
|
||||||
return this;
|
_.prototype[alias] = _.prototype[realName];
|
||||||
};
|
});
|
||||||
|
};
|
||||||
|
}());
|
||||||
|
|
||||||
_.prototype.concat = function() {
|
// Only excuse in Sauce Labs.
|
||||||
var result = concat.apply(this.__wrapped__, arguments);
|
if (!ui.isSauceLabs) {
|
||||||
if (this.__chain__) {
|
delete QUnit.config.excused.Functions['throttle repeatedly with results'];
|
||||||
result = new _(result);
|
delete QUnit.config.excused.Functions['more throttle does not trigger leading call when leading is set to false'];
|
||||||
result.__chain__ = true;
|
delete QUnit.config.excused.Functions['throttle does not trigger trailing call when trailing is set to false'];
|
||||||
}
|
delete QUnit.config.excused.Utility.now;
|
||||||
return result;
|
}
|
||||||
};
|
// Load prerequisite scripts.
|
||||||
|
document.write(ui.urlParams.loader == 'none'
|
||||||
|
? '<script src="' + ui.buildPath + '"><\/script>'
|
||||||
|
: '<script data-dojo-config="async:1" src="' + ui.loaderPath + '"><\/script>'
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
if (ui.urlParams.loader == 'none') {
|
||||||
|
mixinPrereqs(_);
|
||||||
|
document.write([
|
||||||
|
'<script src="../vendor/underscore/test/collections.js"><\/script>',
|
||||||
|
'<script src="../vendor/underscore/test/arrays.js"><\/script>',
|
||||||
|
'<script src="../vendor/underscore/test/functions.js"><\/script>',
|
||||||
|
'<script src="../vendor/underscore/test/objects.js"><\/script>',
|
||||||
|
'<script src="../vendor/underscore/test/cross-document.js"><\/script>',
|
||||||
|
'<script src="../vendor/underscore/test/utility.js"><\/script>',
|
||||||
|
'<script src="../vendor/underscore/test/chaining.js"><\/script>'
|
||||||
|
].join('\n'));
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
if (window.curl) {
|
||||||
|
curl.config({ 'apiName': 'require' });
|
||||||
|
}
|
||||||
|
if (!window.require) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Wrap to work around tests assuming Node `require` use.
|
||||||
|
require = (function(func) {
|
||||||
|
return function() {
|
||||||
|
return arguments[0] === '..' ? window._ : func.apply(null, arguments);
|
||||||
|
};
|
||||||
|
}(require));
|
||||||
|
|
||||||
_.prototype.pop = function() {
|
var reBasename = /[\w.-]+$/,
|
||||||
pop.apply(this.__wrapped__, arguments);
|
basePath = ('//' + location.host + location.pathname.replace(reBasename, '')).replace(/\btest\/$/, ''),
|
||||||
return this;
|
modulePath = ui.buildPath.replace(/\.js$/, ''),
|
||||||
};
|
locationPath = modulePath.replace(reBasename, '').replace(/^\/|\/$/g, ''),
|
||||||
}());
|
moduleId = /\bunderscore\b/i.test(ui.buildPath) ? 'underscore' : 'lodash',
|
||||||
</script>
|
moduleMain = modulePath.match(reBasename)[0],
|
||||||
<script src="../vendor/underscore/test/collections.js"></script>
|
uid = +new Date;
|
||||||
<script src="../vendor/underscore/test/arrays.js"></script>
|
|
||||||
<script src="../vendor/underscore/test/functions.js"></script>
|
function getConfig() {
|
||||||
<script src="../vendor/underscore/test/objects.js"></script>
|
var result = {
|
||||||
<script src="../vendor/underscore/test/utility.js"></script>
|
'baseUrl': './',
|
||||||
<script src="../vendor/underscore/test/chaining.js"></script>
|
'urlArgs': 't=' + uid++,
|
||||||
<script type="text/html" id="template">
|
'waitSeconds': 0,
|
||||||
<%
|
'paths': {},
|
||||||
// a comment
|
'packages': [{
|
||||||
if (data) { data += 12345; }; %>
|
'name': 'test',
|
||||||
<li><%= data %></li>
|
'location': '../vendor/underscore/test',
|
||||||
</script>
|
'config': {
|
||||||
</body>
|
// Work around no global being exported.
|
||||||
|
'exports': 'QUnit',
|
||||||
|
'loader': 'curl/loader/legacy'
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
|
||||||
|
if (ui.isModularize) {
|
||||||
|
result.packages.push({
|
||||||
|
'name': moduleId,
|
||||||
|
'location': locationPath,
|
||||||
|
'main': moduleMain
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
result.paths[moduleId] = modulePath;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
QUnit.config.autostart = false;
|
||||||
|
|
||||||
|
require(getConfig(), [moduleId], function(lodash) {
|
||||||
|
mixinPrereqs(lodash);
|
||||||
|
require(getConfig(), [
|
||||||
|
'test/collections',
|
||||||
|
'test/arrays',
|
||||||
|
'test/functions',
|
||||||
|
'test/objects',
|
||||||
|
'test/cross-document',
|
||||||
|
'test/utility',
|
||||||
|
'test/chaining'
|
||||||
|
], function() {
|
||||||
|
QUnit.start();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}());
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
2
vendor/backbone/LICENSE
vendored
2
vendor/backbone/LICENSE
vendored
@@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2010-2012 Jeremy Ashkenas, DocumentCloud
|
Copyright (c) 2010-2016 Jeremy Ashkenas, DocumentCloud
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
Permission is hereby granted, free of charge, to any person
|
||||||
obtaining a copy of this software and associated documentation
|
obtaining a copy of this software and associated documentation
|
||||||
|
|||||||
26
vendor/backbone/README.md
vendored
26
vendor/backbone/README.md
vendored
@@ -1,26 +0,0 @@
|
|||||||
____ __ __
|
|
||||||
/\ _`\ /\ \ /\ \ __
|
|
||||||
\ \ \ \ \ __ ___\ \ \/'\\ \ \____ ___ ___ __ /\_\ ____
|
|
||||||
\ \ _ <' /'__`\ /'___\ \ , < \ \ '__`\ / __`\ /' _ `\ /'__`\ \/\ \ /',__\
|
|
||||||
\ \ \ \ \/\ \ \.\_/\ \__/\ \ \\`\\ \ \ \ \/\ \ \ \/\ \/\ \/\ __/ __ \ \ \/\__, `\
|
|
||||||
\ \____/\ \__/.\_\ \____\\ \_\ \_\ \_,__/\ \____/\ \_\ \_\ \____\/\_\_\ \ \/\____/
|
|
||||||
\/___/ \/__/\/_/\/____/ \/_/\/_/\/___/ \/___/ \/_/\/_/\/____/\/_/\ \_\ \/___/
|
|
||||||
\ \____/
|
|
||||||
\/___/
|
|
||||||
(_'_______________________________________________________________________________'_)
|
|
||||||
(_.———————————————————————————————————————————————————————————————————————————————._)
|
|
||||||
|
|
||||||
|
|
||||||
Backbone supplies structure to JavaScript-heavy applications by providing models key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing application over a RESTful JSON interface.
|
|
||||||
|
|
||||||
For Docs, License, Tests, pre-packed downloads, and everything else, really, see:
|
|
||||||
http://backbonejs.org
|
|
||||||
|
|
||||||
To suggest a feature, report a bug, or general discussion:
|
|
||||||
http://github.com/documentcloud/backbone/issues/
|
|
||||||
|
|
||||||
All contributors are listed here:
|
|
||||||
http://github.com/documentcloud/backbone/contributors
|
|
||||||
|
|
||||||
Special thanks to Robert Kieffer for the original philosophy behind Backbone.
|
|
||||||
http://github.com/broofa
|
|
||||||
2099
vendor/backbone/backbone.js
vendored
2099
vendor/backbone/backbone.js
vendored
File diff suppressed because it is too large
Load Diff
2031
vendor/backbone/test/collection.js
vendored
2031
vendor/backbone/test/collection.js
vendored
File diff suppressed because it is too large
Load Diff
45
vendor/backbone/test/environment.js
vendored
45
vendor/backbone/test/environment.js
vendored
@@ -1,45 +0,0 @@
|
|||||||
(function() {
|
|
||||||
|
|
||||||
var Environment = this.Environment = function(){};
|
|
||||||
|
|
||||||
_.extend(Environment.prototype, {
|
|
||||||
|
|
||||||
ajax: Backbone.ajax,
|
|
||||||
|
|
||||||
sync: Backbone.sync,
|
|
||||||
|
|
||||||
emulateHTTP: Backbone.emulateHTTP,
|
|
||||||
|
|
||||||
emulateJSON: Backbone.emulateJSON,
|
|
||||||
|
|
||||||
setup: function() {
|
|
||||||
var env = this;
|
|
||||||
|
|
||||||
// Capture ajax settings for comparison.
|
|
||||||
Backbone.ajax = function(settings) {
|
|
||||||
env.ajaxSettings = settings;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Capture the arguments to Backbone.sync for comparison.
|
|
||||||
Backbone.sync = function(method, model, options) {
|
|
||||||
env.syncArgs = {
|
|
||||||
method: method,
|
|
||||||
model: model,
|
|
||||||
options: options
|
|
||||||
};
|
|
||||||
env.sync.apply(this, arguments);
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
teardown: function() {
|
|
||||||
this.syncArgs = null;
|
|
||||||
this.ajaxSettings = null;
|
|
||||||
Backbone.sync = this.sync;
|
|
||||||
Backbone.ajax = this.ajax;
|
|
||||||
Backbone.emulateHTTP = this.emulateHTTP;
|
|
||||||
Backbone.emulateJSON = this.emulateJSON;
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
})();
|
|
||||||
546
vendor/backbone/test/events.js
vendored
546
vendor/backbone/test/events.js
vendored
@@ -1,42 +1,44 @@
|
|||||||
$(document).ready(function() {
|
(function() {
|
||||||
|
|
||||||
module("Backbone.Events");
|
QUnit.module('Backbone.Events');
|
||||||
|
|
||||||
test("on and trigger", 2, function() {
|
QUnit.test('on and trigger', function(assert) {
|
||||||
var obj = { counter: 0 };
|
assert.expect(2);
|
||||||
_.extend(obj,Backbone.Events);
|
var obj = {counter: 0};
|
||||||
|
_.extend(obj, Backbone.Events);
|
||||||
obj.on('event', function() { obj.counter += 1; });
|
obj.on('event', function() { obj.counter += 1; });
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
equal(obj.counter,1,'counter should be incremented.');
|
assert.equal(obj.counter, 1, 'counter should be incremented.');
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
equal(obj.counter, 5, 'counter should be incremented five times.');
|
assert.equal(obj.counter, 5, 'counter should be incremented five times.');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("binding and triggering multiple events", 4, function() {
|
QUnit.test('binding and triggering multiple events', function(assert) {
|
||||||
var obj = { counter: 0 };
|
assert.expect(4);
|
||||||
|
var obj = {counter: 0};
|
||||||
_.extend(obj, Backbone.Events);
|
_.extend(obj, Backbone.Events);
|
||||||
|
|
||||||
obj.on('a b c', function() { obj.counter += 1; });
|
obj.on('a b c', function() { obj.counter += 1; });
|
||||||
|
|
||||||
obj.trigger('a');
|
obj.trigger('a');
|
||||||
equal(obj.counter, 1);
|
assert.equal(obj.counter, 1);
|
||||||
|
|
||||||
obj.trigger('a b');
|
obj.trigger('a b');
|
||||||
equal(obj.counter, 3);
|
assert.equal(obj.counter, 3);
|
||||||
|
|
||||||
obj.trigger('c');
|
obj.trigger('c');
|
||||||
equal(obj.counter, 4);
|
assert.equal(obj.counter, 4);
|
||||||
|
|
||||||
obj.off('a c');
|
obj.off('a c');
|
||||||
obj.trigger('a b c');
|
obj.trigger('a b c');
|
||||||
equal(obj.counter, 5);
|
assert.equal(obj.counter, 5);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("binding and triggering with event maps", function() {
|
QUnit.test('binding and triggering with event maps', function(assert) {
|
||||||
var obj = { counter: 0 };
|
var obj = {counter: 0};
|
||||||
_.extend(obj, Backbone.Events);
|
_.extend(obj, Backbone.Events);
|
||||||
|
|
||||||
var increment = function() {
|
var increment = function() {
|
||||||
@@ -50,36 +52,85 @@ $(document).ready(function() {
|
|||||||
}, obj);
|
}, obj);
|
||||||
|
|
||||||
obj.trigger('a');
|
obj.trigger('a');
|
||||||
equal(obj.counter, 1);
|
assert.equal(obj.counter, 1);
|
||||||
|
|
||||||
obj.trigger('a b');
|
obj.trigger('a b');
|
||||||
equal(obj.counter, 3);
|
assert.equal(obj.counter, 3);
|
||||||
|
|
||||||
obj.trigger('c');
|
obj.trigger('c');
|
||||||
equal(obj.counter, 4);
|
assert.equal(obj.counter, 4);
|
||||||
|
|
||||||
obj.off({
|
obj.off({
|
||||||
a: increment,
|
a: increment,
|
||||||
c: increment
|
c: increment
|
||||||
}, obj);
|
}, obj);
|
||||||
obj.trigger('a b c');
|
obj.trigger('a b c');
|
||||||
equal(obj.counter, 5);
|
assert.equal(obj.counter, 5);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("listenTo and stopListening", 1, function() {
|
QUnit.test('binding and triggering multiple event names with event maps', function(assert) {
|
||||||
|
var obj = {counter: 0};
|
||||||
|
_.extend(obj, Backbone.Events);
|
||||||
|
|
||||||
|
var increment = function() {
|
||||||
|
this.counter += 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.on({
|
||||||
|
'a b c': increment
|
||||||
|
});
|
||||||
|
|
||||||
|
obj.trigger('a');
|
||||||
|
assert.equal(obj.counter, 1);
|
||||||
|
|
||||||
|
obj.trigger('a b');
|
||||||
|
assert.equal(obj.counter, 3);
|
||||||
|
|
||||||
|
obj.trigger('c');
|
||||||
|
assert.equal(obj.counter, 4);
|
||||||
|
|
||||||
|
obj.off({
|
||||||
|
'a c': increment
|
||||||
|
});
|
||||||
|
obj.trigger('a b c');
|
||||||
|
assert.equal(obj.counter, 5);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('binding and trigger with event maps context', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
|
var obj = {counter: 0};
|
||||||
|
var context = {};
|
||||||
|
_.extend(obj, Backbone.Events);
|
||||||
|
|
||||||
|
obj.on({
|
||||||
|
a: function() {
|
||||||
|
assert.strictEqual(this, context, 'defaults `context` to `callback` param');
|
||||||
|
}
|
||||||
|
}, context).trigger('a');
|
||||||
|
|
||||||
|
obj.off().on({
|
||||||
|
a: function() {
|
||||||
|
assert.strictEqual(this, context, 'will not override explicit `context` param');
|
||||||
|
}
|
||||||
|
}, this, context).trigger('a');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('listenTo and stopListening', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
var a = _.extend({}, Backbone.Events);
|
var a = _.extend({}, Backbone.Events);
|
||||||
var b = _.extend({}, Backbone.Events);
|
var b = _.extend({}, Backbone.Events);
|
||||||
a.listenTo(b, 'all', function(){ ok(true); });
|
a.listenTo(b, 'all', function(){ assert.ok(true); });
|
||||||
b.trigger('anything');
|
b.trigger('anything');
|
||||||
a.listenTo(b, 'all', function(){ ok(false); });
|
a.listenTo(b, 'all', function(){ assert.ok(false); });
|
||||||
a.stopListening();
|
a.stopListening();
|
||||||
b.trigger('anything');
|
b.trigger('anything');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("listenTo and stopListening with event maps", 4, function() {
|
QUnit.test('listenTo and stopListening with event maps', function(assert) {
|
||||||
|
assert.expect(4);
|
||||||
var a = _.extend({}, Backbone.Events);
|
var a = _.extend({}, Backbone.Events);
|
||||||
var b = _.extend({}, Backbone.Events);
|
var b = _.extend({}, Backbone.Events);
|
||||||
var cb = function(){ ok(true); };
|
var cb = function(){ assert.ok(true); };
|
||||||
a.listenTo(b, {event: cb});
|
a.listenTo(b, {event: cb});
|
||||||
b.trigger('event');
|
b.trigger('event');
|
||||||
a.listenTo(b, {event2: cb});
|
a.listenTo(b, {event2: cb});
|
||||||
@@ -90,77 +141,254 @@ $(document).ready(function() {
|
|||||||
b.trigger('event event2');
|
b.trigger('event event2');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("stopListening with omitted args", 2, function () {
|
QUnit.test('stopListening with omitted args', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var a = _.extend({}, Backbone.Events);
|
var a = _.extend({}, Backbone.Events);
|
||||||
var b = _.extend({}, Backbone.Events);
|
var b = _.extend({}, Backbone.Events);
|
||||||
var cb = function () { ok(true); };
|
var cb = function() { assert.ok(true); };
|
||||||
a.listenTo(b, 'event', cb);
|
a.listenTo(b, 'event', cb);
|
||||||
b.on('event', cb);
|
b.on('event', cb);
|
||||||
a.listenTo(b, 'event2', cb);
|
a.listenTo(b, 'event2', cb);
|
||||||
a.stopListening(null, {event: cb});
|
a.stopListening(null, {event: cb});
|
||||||
b.trigger('event event2');
|
b.trigger('event event2');
|
||||||
|
b.off();
|
||||||
|
a.listenTo(b, 'event event2', cb);
|
||||||
|
a.stopListening(null, 'event');
|
||||||
|
a.stopListening();
|
||||||
|
b.trigger('event2');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("listenTo yourself", 1, function(){
|
QUnit.test('listenToOnce', function(assert) {
|
||||||
var e = _.extend({}, Backbone.Events);
|
assert.expect(2);
|
||||||
e.listenTo(e, "foo", function(){ ok(true); });
|
// Same as the previous test, but we use once rather than having to explicitly unbind
|
||||||
e.trigger("foo");
|
var obj = {counterA: 0, counterB: 0};
|
||||||
|
_.extend(obj, Backbone.Events);
|
||||||
|
var incrA = function(){ obj.counterA += 1; obj.trigger('event'); };
|
||||||
|
var incrB = function(){ obj.counterB += 1; };
|
||||||
|
obj.listenToOnce(obj, 'event', incrA);
|
||||||
|
obj.listenToOnce(obj, 'event', incrB);
|
||||||
|
obj.trigger('event');
|
||||||
|
assert.equal(obj.counterA, 1, 'counterA should have only been incremented once.');
|
||||||
|
assert.equal(obj.counterB, 1, 'counterB should have only been incremented once.');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("listenTo yourself cleans yourself up with stopListening", 1, function(){
|
QUnit.test('listenToOnce and stopListening', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
var a = _.extend({}, Backbone.Events);
|
||||||
|
var b = _.extend({}, Backbone.Events);
|
||||||
|
a.listenToOnce(b, 'all', function() { assert.ok(true); });
|
||||||
|
b.trigger('anything');
|
||||||
|
b.trigger('anything');
|
||||||
|
a.listenToOnce(b, 'all', function() { assert.ok(false); });
|
||||||
|
a.stopListening();
|
||||||
|
b.trigger('anything');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('listenTo, listenToOnce and stopListening', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
var a = _.extend({}, Backbone.Events);
|
||||||
|
var b = _.extend({}, Backbone.Events);
|
||||||
|
a.listenToOnce(b, 'all', function() { assert.ok(true); });
|
||||||
|
b.trigger('anything');
|
||||||
|
b.trigger('anything');
|
||||||
|
a.listenTo(b, 'all', function() { assert.ok(false); });
|
||||||
|
a.stopListening();
|
||||||
|
b.trigger('anything');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('listenTo and stopListening with event maps', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
var a = _.extend({}, Backbone.Events);
|
||||||
|
var b = _.extend({}, Backbone.Events);
|
||||||
|
a.listenTo(b, {change: function(){ assert.ok(true); }});
|
||||||
|
b.trigger('change');
|
||||||
|
a.listenTo(b, {change: function(){ assert.ok(false); }});
|
||||||
|
a.stopListening();
|
||||||
|
b.trigger('change');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('listenTo yourself', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
var e = _.extend({}, Backbone.Events);
|
var e = _.extend({}, Backbone.Events);
|
||||||
e.listenTo(e, "foo", function(){ ok(true); });
|
e.listenTo(e, 'foo', function(){ assert.ok(true); });
|
||||||
e.trigger("foo");
|
e.trigger('foo');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('listenTo yourself cleans yourself up with stopListening', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
var e = _.extend({}, Backbone.Events);
|
||||||
|
e.listenTo(e, 'foo', function(){ assert.ok(true); });
|
||||||
|
e.trigger('foo');
|
||||||
e.stopListening();
|
e.stopListening();
|
||||||
e.trigger("foo");
|
e.trigger('foo');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("listenTo with empty callback doesn't throw an error", 1, function(){
|
QUnit.test('stopListening cleans up references', function(assert) {
|
||||||
|
assert.expect(12);
|
||||||
|
var a = _.extend({}, Backbone.Events);
|
||||||
|
var b = _.extend({}, Backbone.Events);
|
||||||
|
var fn = function() {};
|
||||||
|
b.on('event', fn);
|
||||||
|
a.listenTo(b, 'event', fn).stopListening();
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._events.event), 1);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
a.listenTo(b, 'event', fn).stopListening(b);
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._events.event), 1);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
a.listenTo(b, 'event', fn).stopListening(b, 'event');
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._events.event), 1);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
a.listenTo(b, 'event', fn).stopListening(b, 'event', fn);
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._events.event), 1);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('stopListening cleans up references from listenToOnce', function(assert) {
|
||||||
|
assert.expect(12);
|
||||||
|
var a = _.extend({}, Backbone.Events);
|
||||||
|
var b = _.extend({}, Backbone.Events);
|
||||||
|
var fn = function() {};
|
||||||
|
b.on('event', fn);
|
||||||
|
a.listenToOnce(b, 'event', fn).stopListening();
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._events.event), 1);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
a.listenToOnce(b, 'event', fn).stopListening(b);
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._events.event), 1);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
a.listenToOnce(b, 'event', fn).stopListening(b, 'event');
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._events.event), 1);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
a.listenToOnce(b, 'event', fn).stopListening(b, 'event', fn);
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._events.event), 1);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('listenTo and off cleaning up references', function(assert) {
|
||||||
|
assert.expect(8);
|
||||||
|
var a = _.extend({}, Backbone.Events);
|
||||||
|
var b = _.extend({}, Backbone.Events);
|
||||||
|
var fn = function() {};
|
||||||
|
a.listenTo(b, 'event', fn);
|
||||||
|
b.off();
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
a.listenTo(b, 'event', fn);
|
||||||
|
b.off('event');
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
a.listenTo(b, 'event', fn);
|
||||||
|
b.off(null, fn);
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
a.listenTo(b, 'event', fn);
|
||||||
|
b.off(null, null, a);
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
assert.equal(_.size(b._listeners), 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('listenTo and stopListening cleaning up references', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
|
var a = _.extend({}, Backbone.Events);
|
||||||
|
var b = _.extend({}, Backbone.Events);
|
||||||
|
a.listenTo(b, 'all', function(){ assert.ok(true); });
|
||||||
|
b.trigger('anything');
|
||||||
|
a.listenTo(b, 'other', function(){ assert.ok(false); });
|
||||||
|
a.stopListening(b, 'other');
|
||||||
|
a.stopListening(b, 'all');
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('listenToOnce without context cleans up references after the event has fired', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
|
var a = _.extend({}, Backbone.Events);
|
||||||
|
var b = _.extend({}, Backbone.Events);
|
||||||
|
a.listenToOnce(b, 'all', function(){ assert.ok(true); });
|
||||||
|
b.trigger('anything');
|
||||||
|
assert.equal(_.size(a._listeningTo), 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('listenToOnce with event maps cleans up references', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
|
var a = _.extend({}, Backbone.Events);
|
||||||
|
var b = _.extend({}, Backbone.Events);
|
||||||
|
a.listenToOnce(b, {
|
||||||
|
one: function() { assert.ok(true); },
|
||||||
|
two: function() { assert.ok(false); }
|
||||||
|
});
|
||||||
|
b.trigger('one');
|
||||||
|
assert.equal(_.size(a._listeningTo), 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('listenToOnce with event maps binds the correct `this`', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
var a = _.extend({}, Backbone.Events);
|
||||||
|
var b = _.extend({}, Backbone.Events);
|
||||||
|
a.listenToOnce(b, {
|
||||||
|
one: function() { assert.ok(this === a); },
|
||||||
|
two: function() { assert.ok(false); }
|
||||||
|
});
|
||||||
|
b.trigger('one');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test("listenTo with empty callback doesn't throw an error", function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
var e = _.extend({}, Backbone.Events);
|
var e = _.extend({}, Backbone.Events);
|
||||||
e.listenTo(e, "foo", null);
|
e.listenTo(e, 'foo', null);
|
||||||
e.trigger("foo");
|
e.trigger('foo');
|
||||||
ok(true);
|
assert.ok(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("trigger all for each event", 3, function() {
|
QUnit.test('trigger all for each event', function(assert) {
|
||||||
var a, b, obj = { counter: 0 };
|
assert.expect(3);
|
||||||
|
var a, b, obj = {counter: 0};
|
||||||
_.extend(obj, Backbone.Events);
|
_.extend(obj, Backbone.Events);
|
||||||
obj.on('all', function(event) {
|
obj.on('all', function(event) {
|
||||||
obj.counter++;
|
obj.counter++;
|
||||||
if (event == 'a') a = true;
|
if (event === 'a') a = true;
|
||||||
if (event == 'b') b = true;
|
if (event === 'b') b = true;
|
||||||
})
|
})
|
||||||
.trigger('a b');
|
.trigger('a b');
|
||||||
ok(a);
|
assert.ok(a);
|
||||||
ok(b);
|
assert.ok(b);
|
||||||
equal(obj.counter, 2);
|
assert.equal(obj.counter, 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("on, then unbind all functions", 1, function() {
|
QUnit.test('on, then unbind all functions', function(assert) {
|
||||||
var obj = { counter: 0 };
|
assert.expect(1);
|
||||||
_.extend(obj,Backbone.Events);
|
var obj = {counter: 0};
|
||||||
|
_.extend(obj, Backbone.Events);
|
||||||
var callback = function() { obj.counter += 1; };
|
var callback = function() { obj.counter += 1; };
|
||||||
obj.on('event', callback);
|
obj.on('event', callback);
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
obj.off('event');
|
obj.off('event');
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
equal(obj.counter, 1, 'counter should have only been incremented once.');
|
assert.equal(obj.counter, 1, 'counter should have only been incremented once.');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("bind two callbacks, unbind only one", 2, function() {
|
QUnit.test('bind two callbacks, unbind only one', function(assert) {
|
||||||
var obj = { counterA: 0, counterB: 0 };
|
assert.expect(2);
|
||||||
_.extend(obj,Backbone.Events);
|
var obj = {counterA: 0, counterB: 0};
|
||||||
|
_.extend(obj, Backbone.Events);
|
||||||
var callback = function() { obj.counterA += 1; };
|
var callback = function() { obj.counterA += 1; };
|
||||||
obj.on('event', callback);
|
obj.on('event', callback);
|
||||||
obj.on('event', function() { obj.counterB += 1; });
|
obj.on('event', function() { obj.counterB += 1; });
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
obj.off('event', callback);
|
obj.off('event', callback);
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
equal(obj.counterA, 1, 'counterA should have only been incremented once.');
|
assert.equal(obj.counterA, 1, 'counterA should have only been incremented once.');
|
||||||
equal(obj.counterB, 2, 'counterB should have been incremented twice.');
|
assert.equal(obj.counterB, 2, 'counterB should have been incremented twice.');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("unbind a callback in the midst of it firing", 1, function() {
|
QUnit.test('unbind a callback in the midst of it firing', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
var obj = {counter: 0};
|
var obj = {counter: 0};
|
||||||
_.extend(obj, Backbone.Events);
|
_.extend(obj, Backbone.Events);
|
||||||
var callback = function() {
|
var callback = function() {
|
||||||
@@ -171,12 +399,13 @@ $(document).ready(function() {
|
|||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
equal(obj.counter, 1, 'the callback should have been unbound.');
|
assert.equal(obj.counter, 1, 'the callback should have been unbound.');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("two binds that unbind themeselves", 2, function() {
|
QUnit.test('two binds that unbind themeselves', function(assert) {
|
||||||
var obj = { counterA: 0, counterB: 0 };
|
assert.expect(2);
|
||||||
_.extend(obj,Backbone.Events);
|
var obj = {counterA: 0, counterB: 0};
|
||||||
|
_.extend(obj, Backbone.Events);
|
||||||
var incrA = function(){ obj.counterA += 1; obj.off('event', incrA); };
|
var incrA = function(){ obj.counterA += 1; obj.off('event', incrA); };
|
||||||
var incrB = function(){ obj.counterB += 1; obj.off('event', incrB); };
|
var incrB = function(){ obj.counterB += 1; obj.off('event', incrB); };
|
||||||
obj.on('event', incrA);
|
obj.on('event', incrA);
|
||||||
@@ -184,49 +413,52 @@ $(document).ready(function() {
|
|||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
equal(obj.counterA, 1, 'counterA should have only been incremented once.');
|
assert.equal(obj.counterA, 1, 'counterA should have only been incremented once.');
|
||||||
equal(obj.counterB, 1, 'counterB should have only been incremented once.');
|
assert.equal(obj.counterB, 1, 'counterB should have only been incremented once.');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("bind a callback with a supplied context", 1, function () {
|
QUnit.test('bind a callback with a supplied context', function(assert) {
|
||||||
var TestClass = function () {
|
assert.expect(1);
|
||||||
|
var TestClass = function() {
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
TestClass.prototype.assertTrue = function () {
|
TestClass.prototype.assertTrue = function() {
|
||||||
ok(true, '`this` was bound to the callback');
|
assert.ok(true, '`this` was bound to the callback');
|
||||||
};
|
};
|
||||||
|
|
||||||
var obj = _.extend({},Backbone.Events);
|
var obj = _.extend({}, Backbone.Events);
|
||||||
obj.on('event', function () { this.assertTrue(); }, (new TestClass));
|
obj.on('event', function() { this.assertTrue(); }, new TestClass);
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("nested trigger with unbind", 1, function () {
|
QUnit.test('nested trigger with unbind', function(assert) {
|
||||||
var obj = { counter: 0 };
|
assert.expect(1);
|
||||||
|
var obj = {counter: 0};
|
||||||
_.extend(obj, Backbone.Events);
|
_.extend(obj, Backbone.Events);
|
||||||
var incr1 = function(){ obj.counter += 1; obj.off('event', incr1); obj.trigger('event'); };
|
var incr1 = function(){ obj.counter += 1; obj.off('event', incr1); obj.trigger('event'); };
|
||||||
var incr2 = function(){ obj.counter += 1; };
|
var incr2 = function(){ obj.counter += 1; };
|
||||||
obj.on('event', incr1);
|
obj.on('event', incr1);
|
||||||
obj.on('event', incr2);
|
obj.on('event', incr2);
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
equal(obj.counter, 3, 'counter should have been incremented three times');
|
assert.equal(obj.counter, 3, 'counter should have been incremented three times');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("callback list is not altered during trigger", 2, function () {
|
QUnit.test('callback list is not altered during trigger', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var counter = 0, obj = _.extend({}, Backbone.Events);
|
var counter = 0, obj = _.extend({}, Backbone.Events);
|
||||||
var incr = function(){ counter++; };
|
var incr = function(){ counter++; };
|
||||||
obj.on('event', function(){ obj.on('event', incr).on('all', incr); })
|
var incrOn = function(){ obj.on('event all', incr); };
|
||||||
.trigger('event');
|
var incrOff = function(){ obj.off('event all', incr); };
|
||||||
equal(counter, 0, 'bind does not alter callback list');
|
|
||||||
obj.off()
|
obj.on('event all', incrOn).trigger('event');
|
||||||
.on('event', function(){ obj.off('event', incr).off('all', incr); })
|
assert.equal(counter, 0, 'on does not alter callback list');
|
||||||
.on('event', incr)
|
|
||||||
.on('all', incr)
|
obj.off().on('event', incrOff).on('event all', incr).trigger('event');
|
||||||
.trigger('event');
|
assert.equal(counter, 2, 'off does not alter callback list');
|
||||||
equal(counter, 2, 'unbind does not alter callback list');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test("#1282 - 'all' callback list is retrieved after each event.", 1, function() {
|
QUnit.test("#1282 - 'all' callback list is retrieved after each event.", function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
var counter = 0;
|
var counter = 0;
|
||||||
var obj = _.extend({}, Backbone.Events);
|
var obj = _.extend({}, Backbone.Events);
|
||||||
var incr = function(){ counter++; };
|
var incr = function(){ counter++; };
|
||||||
@@ -234,66 +466,68 @@ $(document).ready(function() {
|
|||||||
obj.on('y', incr).on('all', incr);
|
obj.on('y', incr).on('all', incr);
|
||||||
})
|
})
|
||||||
.trigger('x y');
|
.trigger('x y');
|
||||||
strictEqual(counter, 2);
|
assert.strictEqual(counter, 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("if no callback is provided, `on` is a noop", 0, function() {
|
QUnit.test('if no callback is provided, `on` is a noop', function(assert) {
|
||||||
|
assert.expect(0);
|
||||||
_.extend({}, Backbone.Events).on('test').trigger('test');
|
_.extend({}, Backbone.Events).on('test').trigger('test');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("remove all events for a specific context", 4, function() {
|
QUnit.test('if callback is truthy but not a function, `on` should throw an error just like jQuery', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
var view = _.extend({}, Backbone.Events).on('test', 'noop');
|
||||||
|
assert.raises(function() {
|
||||||
|
view.trigger('test');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('remove all events for a specific context', function(assert) {
|
||||||
|
assert.expect(4);
|
||||||
var obj = _.extend({}, Backbone.Events);
|
var obj = _.extend({}, Backbone.Events);
|
||||||
obj.on('x y all', function() { ok(true); });
|
obj.on('x y all', function() { assert.ok(true); });
|
||||||
obj.on('x y all', function() { ok(false); }, obj);
|
obj.on('x y all', function() { assert.ok(false); }, obj);
|
||||||
obj.off(null, null, obj);
|
obj.off(null, null, obj);
|
||||||
obj.trigger('x y');
|
obj.trigger('x y');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("remove all events for a specific callback", 4, function() {
|
QUnit.test('remove all events for a specific callback', function(assert) {
|
||||||
|
assert.expect(4);
|
||||||
var obj = _.extend({}, Backbone.Events);
|
var obj = _.extend({}, Backbone.Events);
|
||||||
var success = function() { ok(true); };
|
var success = function() { assert.ok(true); };
|
||||||
var fail = function() { ok(false); };
|
var fail = function() { assert.ok(false); };
|
||||||
obj.on('x y all', success);
|
obj.on('x y all', success);
|
||||||
obj.on('x y all', fail);
|
obj.on('x y all', fail);
|
||||||
obj.off(null, fail);
|
obj.off(null, fail);
|
||||||
obj.trigger('x y');
|
obj.trigger('x y');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("off is chainable", 3, function() {
|
QUnit.test('#1310 - off does not skip consecutive events', function(assert) {
|
||||||
|
assert.expect(0);
|
||||||
var obj = _.extend({}, Backbone.Events);
|
var obj = _.extend({}, Backbone.Events);
|
||||||
// With no events
|
obj.on('event', function() { assert.ok(false); }, obj);
|
||||||
ok(obj.off() === obj);
|
obj.on('event', function() { assert.ok(false); }, obj);
|
||||||
// When removing all events
|
|
||||||
obj.on('event', function(){}, obj);
|
|
||||||
ok(obj.off() === obj);
|
|
||||||
// When removing some events
|
|
||||||
obj.on('event', function(){}, obj);
|
|
||||||
ok(obj.off('event') === obj);
|
|
||||||
});
|
|
||||||
|
|
||||||
test("#1310 - off does not skip consecutive events", 0, function() {
|
|
||||||
var obj = _.extend({}, Backbone.Events);
|
|
||||||
obj.on('event', function() { ok(false); }, obj);
|
|
||||||
obj.on('event', function() { ok(false); }, obj);
|
|
||||||
obj.off(null, null, obj);
|
obj.off(null, null, obj);
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("once", 2, function() {
|
QUnit.test('once', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
// Same as the previous test, but we use once rather than having to explicitly unbind
|
// Same as the previous test, but we use once rather than having to explicitly unbind
|
||||||
var obj = { counterA: 0, counterB: 0 };
|
var obj = {counterA: 0, counterB: 0};
|
||||||
_.extend(obj, Backbone.Events);
|
_.extend(obj, Backbone.Events);
|
||||||
var incrA = function(){ obj.counterA += 1; obj.trigger('event'); };
|
var incrA = function(){ obj.counterA += 1; obj.trigger('event'); };
|
||||||
var incrB = function(){ obj.counterB += 1; };
|
var incrB = function(){ obj.counterB += 1; };
|
||||||
obj.once('event', incrA);
|
obj.once('event', incrA);
|
||||||
obj.once('event', incrB);
|
obj.once('event', incrB);
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
equal(obj.counterA, 1, 'counterA should have only been incremented once.');
|
assert.equal(obj.counterA, 1, 'counterA should have only been incremented once.');
|
||||||
equal(obj.counterB, 1, 'counterB should have only been incremented once.');
|
assert.equal(obj.counterB, 1, 'counterB should have only been incremented once.');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("once variant one", 3, function() {
|
QUnit.test('once variant one', function(assert) {
|
||||||
var f = function(){ ok(true); };
|
assert.expect(3);
|
||||||
|
var f = function(){ assert.ok(true); };
|
||||||
|
|
||||||
var a = _.extend({}, Backbone.Events).once('event', f);
|
var a = _.extend({}, Backbone.Events).once('event', f);
|
||||||
var b = _.extend({}, Backbone.Events).on('event', f);
|
var b = _.extend({}, Backbone.Events).on('event', f);
|
||||||
@@ -304,8 +538,9 @@ $(document).ready(function() {
|
|||||||
b.trigger('event');
|
b.trigger('event');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("once variant two", 3, function() {
|
QUnit.test('once variant two', function(assert) {
|
||||||
var f = function(){ ok(true); };
|
assert.expect(3);
|
||||||
|
var f = function(){ assert.ok(true); };
|
||||||
var obj = _.extend({}, Backbone.Events);
|
var obj = _.extend({}, Backbone.Events);
|
||||||
|
|
||||||
obj
|
obj
|
||||||
@@ -315,8 +550,9 @@ $(document).ready(function() {
|
|||||||
.trigger('event');
|
.trigger('event');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("once with off", 0, function() {
|
QUnit.test('once with off', function(assert) {
|
||||||
var f = function(){ ok(true); };
|
assert.expect(0);
|
||||||
|
var f = function(){ assert.ok(true); };
|
||||||
var obj = _.extend({}, Backbone.Events);
|
var obj = _.extend({}, Backbone.Events);
|
||||||
|
|
||||||
obj.once('event', f);
|
obj.once('event', f);
|
||||||
@@ -324,8 +560,8 @@ $(document).ready(function() {
|
|||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("once with event maps", function() {
|
QUnit.test('once with event maps', function(assert) {
|
||||||
var obj = { counter: 0 };
|
var obj = {counter: 0};
|
||||||
_.extend(obj, Backbone.Events);
|
_.extend(obj, Backbone.Events);
|
||||||
|
|
||||||
var increment = function() {
|
var increment = function() {
|
||||||
@@ -339,65 +575,107 @@ $(document).ready(function() {
|
|||||||
}, obj);
|
}, obj);
|
||||||
|
|
||||||
obj.trigger('a');
|
obj.trigger('a');
|
||||||
equal(obj.counter, 1);
|
assert.equal(obj.counter, 1);
|
||||||
|
|
||||||
obj.trigger('a b');
|
obj.trigger('a b');
|
||||||
equal(obj.counter, 2);
|
assert.equal(obj.counter, 2);
|
||||||
|
|
||||||
obj.trigger('c');
|
obj.trigger('c');
|
||||||
equal(obj.counter, 3);
|
assert.equal(obj.counter, 3);
|
||||||
|
|
||||||
obj.trigger('a b c');
|
obj.trigger('a b c');
|
||||||
equal(obj.counter, 3);
|
assert.equal(obj.counter, 3);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("once with off only by context", 0, function() {
|
QUnit.test('once with off only by context', function(assert) {
|
||||||
|
assert.expect(0);
|
||||||
var context = {};
|
var context = {};
|
||||||
var obj = _.extend({}, Backbone.Events);
|
var obj = _.extend({}, Backbone.Events);
|
||||||
obj.once('event', function(){ ok(false); }, context);
|
obj.once('event', function(){ assert.ok(false); }, context);
|
||||||
obj.off(null, null, context);
|
obj.off(null, null, context);
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Backbone object inherits Events", function() {
|
QUnit.test('Backbone object inherits Events', function(assert) {
|
||||||
ok(Backbone.on === Backbone.Events.on);
|
assert.ok(Backbone.on === Backbone.Events.on);
|
||||||
});
|
});
|
||||||
|
|
||||||
asyncTest("once with asynchronous events", 1, function() {
|
QUnit.test('once with asynchronous events', function(assert) {
|
||||||
var func = _.debounce(function() { ok(true); start(); }, 50);
|
var done = assert.async();
|
||||||
|
assert.expect(1);
|
||||||
|
var func = _.debounce(function() { assert.ok(true); done(); }, 50);
|
||||||
var obj = _.extend({}, Backbone.Events).once('async', func);
|
var obj = _.extend({}, Backbone.Events).once('async', func);
|
||||||
|
|
||||||
obj.trigger('async');
|
obj.trigger('async');
|
||||||
obj.trigger('async');
|
obj.trigger('async');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("once with multiple events.", 2, function() {
|
QUnit.test('once with multiple events.', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var obj = _.extend({}, Backbone.Events);
|
var obj = _.extend({}, Backbone.Events);
|
||||||
obj.once('x y', function() { ok(true); });
|
obj.once('x y', function() { assert.ok(true); });
|
||||||
obj.trigger('x y');
|
obj.trigger('x y');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Off during iteration with once.", 2, function() {
|
QUnit.test('Off during iteration with once.', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var obj = _.extend({}, Backbone.Events);
|
var obj = _.extend({}, Backbone.Events);
|
||||||
var f = function(){ this.off('event', f); };
|
var f = function(){ this.off('event', f); };
|
||||||
obj.on('event', f);
|
obj.on('event', f);
|
||||||
obj.once('event', function(){});
|
obj.once('event', function(){});
|
||||||
obj.on('event', function(){ ok(true); });
|
obj.on('event', function(){ assert.ok(true); });
|
||||||
|
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
obj.trigger('event');
|
obj.trigger('event');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("`once` on `all` should work as expected", 1, function() {
|
QUnit.test('`once` on `all` should work as expected', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
Backbone.once('all', function() {
|
Backbone.once('all', function() {
|
||||||
ok(true);
|
assert.ok(true);
|
||||||
Backbone.trigger('all');
|
Backbone.trigger('all');
|
||||||
});
|
});
|
||||||
Backbone.trigger('all');
|
Backbone.trigger('all');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("once without a callback is a noop", 0, function() {
|
QUnit.test('once without a callback is a noop', function(assert) {
|
||||||
|
assert.expect(0);
|
||||||
_.extend({}, Backbone.Events).once('event').trigger('event');
|
_.extend({}, Backbone.Events).once('event').trigger('event');
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
QUnit.test('listenToOnce without a callback is a noop', function(assert) {
|
||||||
|
assert.expect(0);
|
||||||
|
var obj = _.extend({}, Backbone.Events);
|
||||||
|
obj.listenToOnce(obj, 'event').trigger('event');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('event functions are chainable', function(assert) {
|
||||||
|
var obj = _.extend({}, Backbone.Events);
|
||||||
|
var obj2 = _.extend({}, Backbone.Events);
|
||||||
|
var fn = function() {};
|
||||||
|
assert.equal(obj, obj.trigger('noeventssetyet'));
|
||||||
|
assert.equal(obj, obj.off('noeventssetyet'));
|
||||||
|
assert.equal(obj, obj.stopListening('noeventssetyet'));
|
||||||
|
assert.equal(obj, obj.on('a', fn));
|
||||||
|
assert.equal(obj, obj.once('c', fn));
|
||||||
|
assert.equal(obj, obj.trigger('a'));
|
||||||
|
assert.equal(obj, obj.listenTo(obj2, 'a', fn));
|
||||||
|
assert.equal(obj, obj.listenToOnce(obj2, 'b', fn));
|
||||||
|
assert.equal(obj, obj.off('a c'));
|
||||||
|
assert.equal(obj, obj.stopListening(obj2, 'a'));
|
||||||
|
assert.equal(obj, obj.stopListening());
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('#3448 - listenToOnce with space-separated events', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
|
var one = _.extend({}, Backbone.Events);
|
||||||
|
var two = _.extend({}, Backbone.Events);
|
||||||
|
var count = 1;
|
||||||
|
one.listenToOnce(two, 'x y', function(n) { assert.ok(n === count++); });
|
||||||
|
two.trigger('x', 1);
|
||||||
|
two.trigger('x', 1);
|
||||||
|
two.trigger('y', 2);
|
||||||
|
two.trigger('y', 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
|
|||||||
1224
vendor/backbone/test/model.js
vendored
1224
vendor/backbone/test/model.js
vendored
File diff suppressed because it is too large
Load Diff
13
vendor/backbone/test/noconflict.js
vendored
13
vendor/backbone/test/noconflict.js
vendored
@@ -1,12 +1,13 @@
|
|||||||
$(document).ready(function() {
|
(function() {
|
||||||
|
|
||||||
module("Backbone.noConflict");
|
QUnit.module('Backbone.noConflict');
|
||||||
|
|
||||||
test('noConflict', 2, function() {
|
QUnit.test('noConflict', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var noconflictBackbone = Backbone.noConflict();
|
var noconflictBackbone = Backbone.noConflict();
|
||||||
equal(window.Backbone, undefined, 'Returned window.Backbone');
|
assert.equal(window.Backbone, undefined, 'Returned window.Backbone');
|
||||||
window.Backbone = noconflictBackbone;
|
window.Backbone = noconflictBackbone;
|
||||||
equal(window.Backbone, noconflictBackbone, 'Backbone is still pointing to the original Backbone');
|
assert.equal(window.Backbone, noconflictBackbone, 'Backbone is still pointing to the original Backbone');
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
})();
|
||||||
|
|||||||
792
vendor/backbone/test/router.js
vendored
792
vendor/backbone/test/router.js
vendored
File diff suppressed because it is too large
Load Diff
4
vendor/backbone/test/setup/dom-setup.js
vendored
Normal file
4
vendor/backbone/test/setup/dom-setup.js
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
$('body').append(
|
||||||
|
'<div id="qunit"></div>' +
|
||||||
|
'<div id="qunit-fixture"></div>'
|
||||||
|
);
|
||||||
45
vendor/backbone/test/setup/environment.js
vendored
Normal file
45
vendor/backbone/test/setup/environment.js
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
(function() {
|
||||||
|
|
||||||
|
var sync = Backbone.sync;
|
||||||
|
var ajax = Backbone.ajax;
|
||||||
|
var emulateHTTP = Backbone.emulateHTTP;
|
||||||
|
var emulateJSON = Backbone.emulateJSON;
|
||||||
|
var history = window.history;
|
||||||
|
var pushState = history.pushState;
|
||||||
|
var replaceState = history.replaceState;
|
||||||
|
|
||||||
|
QUnit.config.noglobals = true;
|
||||||
|
|
||||||
|
QUnit.testStart(function() {
|
||||||
|
var env = QUnit.config.current.testEnvironment;
|
||||||
|
|
||||||
|
// We never want to actually call these during tests.
|
||||||
|
history.pushState = history.replaceState = function(){};
|
||||||
|
|
||||||
|
// Capture ajax settings for comparison.
|
||||||
|
Backbone.ajax = function(settings) {
|
||||||
|
env.ajaxSettings = settings;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Capture the arguments to Backbone.sync for comparison.
|
||||||
|
Backbone.sync = function(method, model, options) {
|
||||||
|
env.syncArgs = {
|
||||||
|
method: method,
|
||||||
|
model: model,
|
||||||
|
options: options
|
||||||
|
};
|
||||||
|
sync.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.testDone(function() {
|
||||||
|
Backbone.sync = sync;
|
||||||
|
Backbone.ajax = ajax;
|
||||||
|
Backbone.emulateHTTP = emulateHTTP;
|
||||||
|
Backbone.emulateJSON = emulateJSON;
|
||||||
|
history.pushState = pushState;
|
||||||
|
history.replaceState = replaceState;
|
||||||
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
205
vendor/backbone/test/sync.js
vendored
205
vendor/backbone/test/sync.js
vendored
@@ -1,212 +1,239 @@
|
|||||||
$(document).ready(function() {
|
(function() {
|
||||||
|
|
||||||
var Library = Backbone.Collection.extend({
|
var Library = Backbone.Collection.extend({
|
||||||
url : function() { return '/library'; }
|
url: function() { return '/library'; }
|
||||||
});
|
});
|
||||||
var library;
|
var library;
|
||||||
|
|
||||||
var attrs = {
|
var attrs = {
|
||||||
title : "The Tempest",
|
title: 'The Tempest',
|
||||||
author : "Bill Shakespeare",
|
author: 'Bill Shakespeare',
|
||||||
length : 123
|
length: 123
|
||||||
};
|
};
|
||||||
|
|
||||||
module("Backbone.sync", _.extend(new Environment, {
|
QUnit.module('Backbone.sync', {
|
||||||
|
|
||||||
setup : function() {
|
beforeEach: function(assert) {
|
||||||
Environment.prototype.setup.apply(this, arguments);
|
|
||||||
library = new Library;
|
library = new Library;
|
||||||
library.create(attrs, {wait: false});
|
library.create(attrs, {wait: false});
|
||||||
},
|
},
|
||||||
|
|
||||||
teardown: function() {
|
afterEach: function(assert) {
|
||||||
Environment.prototype.teardown.apply(this, arguments);
|
|
||||||
Backbone.emulateHTTP = false;
|
Backbone.emulateHTTP = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}));
|
});
|
||||||
|
|
||||||
test("read", 4, function() {
|
QUnit.test('read', function(assert) {
|
||||||
|
assert.expect(4);
|
||||||
library.fetch();
|
library.fetch();
|
||||||
equal(this.ajaxSettings.url, '/library');
|
assert.equal(this.ajaxSettings.url, '/library');
|
||||||
equal(this.ajaxSettings.type, 'GET');
|
assert.equal(this.ajaxSettings.type, 'GET');
|
||||||
equal(this.ajaxSettings.dataType, 'json');
|
assert.equal(this.ajaxSettings.dataType, 'json');
|
||||||
ok(_.isEmpty(this.ajaxSettings.data));
|
assert.ok(_.isEmpty(this.ajaxSettings.data));
|
||||||
});
|
});
|
||||||
|
|
||||||
test("passing data", 3, function() {
|
QUnit.test('passing data', function(assert) {
|
||||||
|
assert.expect(3);
|
||||||
library.fetch({data: {a: 'a', one: 1}});
|
library.fetch({data: {a: 'a', one: 1}});
|
||||||
equal(this.ajaxSettings.url, '/library');
|
assert.equal(this.ajaxSettings.url, '/library');
|
||||||
equal(this.ajaxSettings.data.a, 'a');
|
assert.equal(this.ajaxSettings.data.a, 'a');
|
||||||
equal(this.ajaxSettings.data.one, 1);
|
assert.equal(this.ajaxSettings.data.one, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("create", 6, function() {
|
QUnit.test('create', function(assert) {
|
||||||
equal(this.ajaxSettings.url, '/library');
|
assert.expect(6);
|
||||||
equal(this.ajaxSettings.type, 'POST');
|
assert.equal(this.ajaxSettings.url, '/library');
|
||||||
equal(this.ajaxSettings.dataType, 'json');
|
assert.equal(this.ajaxSettings.type, 'POST');
|
||||||
|
assert.equal(this.ajaxSettings.dataType, 'json');
|
||||||
var data = JSON.parse(this.ajaxSettings.data);
|
var data = JSON.parse(this.ajaxSettings.data);
|
||||||
equal(data.title, 'The Tempest');
|
assert.equal(data.title, 'The Tempest');
|
||||||
equal(data.author, 'Bill Shakespeare');
|
assert.equal(data.author, 'Bill Shakespeare');
|
||||||
equal(data.length, 123);
|
assert.equal(data.length, 123);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("update", 7, function() {
|
QUnit.test('update', function(assert) {
|
||||||
|
assert.expect(7);
|
||||||
library.first().save({id: '1-the-tempest', author: 'William Shakespeare'});
|
library.first().save({id: '1-the-tempest', author: 'William Shakespeare'});
|
||||||
equal(this.ajaxSettings.url, '/library/1-the-tempest');
|
assert.equal(this.ajaxSettings.url, '/library/1-the-tempest');
|
||||||
equal(this.ajaxSettings.type, 'PUT');
|
assert.equal(this.ajaxSettings.type, 'PUT');
|
||||||
equal(this.ajaxSettings.dataType, 'json');
|
assert.equal(this.ajaxSettings.dataType, 'json');
|
||||||
var data = JSON.parse(this.ajaxSettings.data);
|
var data = JSON.parse(this.ajaxSettings.data);
|
||||||
equal(data.id, '1-the-tempest');
|
assert.equal(data.id, '1-the-tempest');
|
||||||
equal(data.title, 'The Tempest');
|
assert.equal(data.title, 'The Tempest');
|
||||||
equal(data.author, 'William Shakespeare');
|
assert.equal(data.author, 'William Shakespeare');
|
||||||
equal(data.length, 123);
|
assert.equal(data.length, 123);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("update with emulateHTTP and emulateJSON", 7, function() {
|
QUnit.test('update with emulateHTTP and emulateJSON', function(assert) {
|
||||||
|
assert.expect(7);
|
||||||
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'}, {
|
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'}, {
|
||||||
emulateHTTP: true,
|
emulateHTTP: true,
|
||||||
emulateJSON: true
|
emulateJSON: true
|
||||||
});
|
});
|
||||||
equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
assert.equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
||||||
equal(this.ajaxSettings.type, 'POST');
|
assert.equal(this.ajaxSettings.type, 'POST');
|
||||||
equal(this.ajaxSettings.dataType, 'json');
|
assert.equal(this.ajaxSettings.dataType, 'json');
|
||||||
equal(this.ajaxSettings.data._method, 'PUT');
|
assert.equal(this.ajaxSettings.data._method, 'PUT');
|
||||||
var data = JSON.parse(this.ajaxSettings.data.model);
|
var data = JSON.parse(this.ajaxSettings.data.model);
|
||||||
equal(data.id, '2-the-tempest');
|
assert.equal(data.id, '2-the-tempest');
|
||||||
equal(data.author, 'Tim Shakespeare');
|
assert.equal(data.author, 'Tim Shakespeare');
|
||||||
equal(data.length, 123);
|
assert.equal(data.length, 123);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("update with just emulateHTTP", 6, function() {
|
QUnit.test('update with just emulateHTTP', function(assert) {
|
||||||
|
assert.expect(6);
|
||||||
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'}, {
|
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'}, {
|
||||||
emulateHTTP: true
|
emulateHTTP: true
|
||||||
});
|
});
|
||||||
equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
assert.equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
||||||
equal(this.ajaxSettings.type, 'POST');
|
assert.equal(this.ajaxSettings.type, 'POST');
|
||||||
equal(this.ajaxSettings.contentType, 'application/json');
|
assert.equal(this.ajaxSettings.contentType, 'application/json');
|
||||||
var data = JSON.parse(this.ajaxSettings.data);
|
var data = JSON.parse(this.ajaxSettings.data);
|
||||||
equal(data.id, '2-the-tempest');
|
assert.equal(data.id, '2-the-tempest');
|
||||||
equal(data.author, 'Tim Shakespeare');
|
assert.equal(data.author, 'Tim Shakespeare');
|
||||||
equal(data.length, 123);
|
assert.equal(data.length, 123);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("update with just emulateJSON", 6, function() {
|
QUnit.test('update with just emulateJSON', function(assert) {
|
||||||
|
assert.expect(6);
|
||||||
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'}, {
|
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'}, {
|
||||||
emulateJSON: true
|
emulateJSON: true
|
||||||
});
|
});
|
||||||
equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
assert.equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
||||||
equal(this.ajaxSettings.type, 'PUT');
|
assert.equal(this.ajaxSettings.type, 'PUT');
|
||||||
equal(this.ajaxSettings.contentType, 'application/x-www-form-urlencoded');
|
assert.equal(this.ajaxSettings.contentType, 'application/x-www-form-urlencoded');
|
||||||
var data = JSON.parse(this.ajaxSettings.data.model);
|
var data = JSON.parse(this.ajaxSettings.data.model);
|
||||||
equal(data.id, '2-the-tempest');
|
assert.equal(data.id, '2-the-tempest');
|
||||||
equal(data.author, 'Tim Shakespeare');
|
assert.equal(data.author, 'Tim Shakespeare');
|
||||||
equal(data.length, 123);
|
assert.equal(data.length, 123);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("read model", 3, function() {
|
QUnit.test('read model', function(assert) {
|
||||||
|
assert.expect(3);
|
||||||
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
|
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
|
||||||
library.first().fetch();
|
library.first().fetch();
|
||||||
equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
assert.equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
||||||
equal(this.ajaxSettings.type, 'GET');
|
assert.equal(this.ajaxSettings.type, 'GET');
|
||||||
ok(_.isEmpty(this.ajaxSettings.data));
|
assert.ok(_.isEmpty(this.ajaxSettings.data));
|
||||||
});
|
});
|
||||||
|
|
||||||
test("destroy", 3, function() {
|
QUnit.test('destroy', function(assert) {
|
||||||
|
assert.expect(3);
|
||||||
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
|
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
|
||||||
library.first().destroy({wait: true});
|
library.first().destroy({wait: true});
|
||||||
equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
assert.equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
||||||
equal(this.ajaxSettings.type, 'DELETE');
|
assert.equal(this.ajaxSettings.type, 'DELETE');
|
||||||
equal(this.ajaxSettings.data, null);
|
assert.equal(this.ajaxSettings.data, null);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("destroy with emulateHTTP", 3, function() {
|
QUnit.test('destroy with emulateHTTP', function(assert) {
|
||||||
|
assert.expect(3);
|
||||||
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
|
library.first().save({id: '2-the-tempest', author: 'Tim Shakespeare'});
|
||||||
library.first().destroy({
|
library.first().destroy({
|
||||||
emulateHTTP: true,
|
emulateHTTP: true,
|
||||||
emulateJSON: true
|
emulateJSON: true
|
||||||
});
|
});
|
||||||
equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
assert.equal(this.ajaxSettings.url, '/library/2-the-tempest');
|
||||||
equal(this.ajaxSettings.type, 'POST');
|
assert.equal(this.ajaxSettings.type, 'POST');
|
||||||
equal(JSON.stringify(this.ajaxSettings.data), '{"_method":"DELETE"}');
|
assert.equal(JSON.stringify(this.ajaxSettings.data), '{"_method":"DELETE"}');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("urlError", 2, function() {
|
QUnit.test('urlError', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var model = new Backbone.Model();
|
var model = new Backbone.Model();
|
||||||
raises(function() {
|
assert.raises(function() {
|
||||||
model.fetch();
|
model.fetch();
|
||||||
});
|
});
|
||||||
model.fetch({url: '/one/two'});
|
model.fetch({url: '/one/two'});
|
||||||
equal(this.ajaxSettings.url, '/one/two');
|
assert.equal(this.ajaxSettings.url, '/one/two');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("#1052 - `options` is optional.", 0, function() {
|
QUnit.test('#1052 - `options` is optional.', function(assert) {
|
||||||
|
assert.expect(0);
|
||||||
var model = new Backbone.Model();
|
var model = new Backbone.Model();
|
||||||
model.url = '/test';
|
model.url = '/test';
|
||||||
Backbone.sync('create', model);
|
Backbone.sync('create', model);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Backbone.ajax", 1, function() {
|
QUnit.test('Backbone.ajax', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
Backbone.ajax = function(settings){
|
Backbone.ajax = function(settings){
|
||||||
strictEqual(settings.url, '/test');
|
assert.strictEqual(settings.url, '/test');
|
||||||
};
|
};
|
||||||
var model = new Backbone.Model();
|
var model = new Backbone.Model();
|
||||||
model.url = '/test';
|
model.url = '/test';
|
||||||
Backbone.sync('create', model);
|
Backbone.sync('create', model);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Call provided error callback on error.", 1, function() {
|
QUnit.test('Call provided error callback on error.', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
var model = new Backbone.Model;
|
var model = new Backbone.Model;
|
||||||
model.url = '/test';
|
model.url = '/test';
|
||||||
Backbone.sync('read', model, {
|
Backbone.sync('read', model, {
|
||||||
error: function() { ok(true); }
|
error: function() { assert.ok(true); }
|
||||||
});
|
});
|
||||||
this.ajaxSettings.error();
|
this.ajaxSettings.error();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Use Backbone.emulateHTTP as default.', 2, function() {
|
QUnit.test('Use Backbone.emulateHTTP as default.', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var model = new Backbone.Model;
|
var model = new Backbone.Model;
|
||||||
model.url = '/test';
|
model.url = '/test';
|
||||||
|
|
||||||
Backbone.emulateHTTP = true;
|
Backbone.emulateHTTP = true;
|
||||||
model.sync('create', model);
|
model.sync('create', model);
|
||||||
strictEqual(this.ajaxSettings.emulateHTTP, true);
|
assert.strictEqual(this.ajaxSettings.emulateHTTP, true);
|
||||||
|
|
||||||
Backbone.emulateHTTP = false;
|
Backbone.emulateHTTP = false;
|
||||||
model.sync('create', model);
|
model.sync('create', model);
|
||||||
strictEqual(this.ajaxSettings.emulateHTTP, false);
|
assert.strictEqual(this.ajaxSettings.emulateHTTP, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Use Backbone.emulateJSON as default.', 2, function() {
|
QUnit.test('Use Backbone.emulateJSON as default.', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var model = new Backbone.Model;
|
var model = new Backbone.Model;
|
||||||
model.url = '/test';
|
model.url = '/test';
|
||||||
|
|
||||||
Backbone.emulateJSON = true;
|
Backbone.emulateJSON = true;
|
||||||
model.sync('create', model);
|
model.sync('create', model);
|
||||||
strictEqual(this.ajaxSettings.emulateJSON, true);
|
assert.strictEqual(this.ajaxSettings.emulateJSON, true);
|
||||||
|
|
||||||
Backbone.emulateJSON = false;
|
Backbone.emulateJSON = false;
|
||||||
model.sync('create', model);
|
model.sync('create', model);
|
||||||
strictEqual(this.ajaxSettings.emulateJSON, false);
|
assert.strictEqual(this.ajaxSettings.emulateJSON, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("#1756 - Call user provided beforeSend function.", 4, function() {
|
QUnit.test('#1756 - Call user provided beforeSend function.', function(assert) {
|
||||||
|
assert.expect(4);
|
||||||
Backbone.emulateHTTP = true;
|
Backbone.emulateHTTP = true;
|
||||||
var model = new Backbone.Model;
|
var model = new Backbone.Model;
|
||||||
model.url = '/test';
|
model.url = '/test';
|
||||||
var xhr = {
|
var xhr = {
|
||||||
setRequestHeader: function(header, value) {
|
setRequestHeader: function(header, value) {
|
||||||
strictEqual(header, 'X-HTTP-Method-Override');
|
assert.strictEqual(header, 'X-HTTP-Method-Override');
|
||||||
strictEqual(value, 'DELETE');
|
assert.strictEqual(value, 'DELETE');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
model.sync('delete', model, {
|
model.sync('delete', model, {
|
||||||
beforeSend: function(_xhr) {
|
beforeSend: function(_xhr) {
|
||||||
ok(_xhr === xhr);
|
assert.ok(_xhr === xhr);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
strictEqual(this.ajaxSettings.beforeSend(xhr), false);
|
assert.strictEqual(this.ajaxSettings.beforeSend(xhr), false);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
QUnit.test('#2928 - Pass along `textStatus` and `errorThrown`.', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
|
var model = new Backbone.Model;
|
||||||
|
model.url = '/test';
|
||||||
|
model.on('error', function(m, xhr, options) {
|
||||||
|
assert.strictEqual(options.textStatus, 'textStatus');
|
||||||
|
assert.strictEqual(options.errorThrown, 'errorThrown');
|
||||||
|
});
|
||||||
|
model.fetch();
|
||||||
|
this.ajaxSettings.error({}, 'textStatus', 'errorThrown');
|
||||||
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
|
|||||||
482
vendor/backbone/test/view.js
vendored
482
vendor/backbone/test/view.js
vendored
@@ -1,71 +1,110 @@
|
|||||||
$(document).ready(function() {
|
(function() {
|
||||||
|
|
||||||
var view;
|
var view;
|
||||||
|
|
||||||
module("Backbone.View", {
|
QUnit.module('Backbone.View', {
|
||||||
|
|
||||||
|
beforeEach: function(assert) {
|
||||||
|
$('#qunit-fixture').append(
|
||||||
|
'<div id="testElement"><h1>Test</h1></div>'
|
||||||
|
);
|
||||||
|
|
||||||
setup: function() {
|
|
||||||
view = new Backbone.View({
|
view = new Backbone.View({
|
||||||
id : 'test-view',
|
id: 'test-view',
|
||||||
className : 'test-view',
|
className: 'test-view',
|
||||||
other : 'non-special-option'
|
other: 'non-special-option'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test("constructor", 6, function() {
|
QUnit.test('constructor', function(assert) {
|
||||||
equal(view.el.id, 'test-view');
|
assert.expect(3);
|
||||||
equal(view.el.className, 'test-view');
|
assert.equal(view.el.id, 'test-view');
|
||||||
equal(view.el.other, void 0);
|
assert.equal(view.el.className, 'test-view');
|
||||||
equal(view.options.id, 'test-view');
|
assert.equal(view.el.other, void 0);
|
||||||
equal(view.options.className, 'test-view');
|
|
||||||
equal(view.options.other, 'non-special-option');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test("jQuery", 1, function() {
|
QUnit.test('$', function(assert) {
|
||||||
var view = new Backbone.View;
|
assert.expect(2);
|
||||||
view.setElement('<p><a><b>test</b></a></p>');
|
var myView = new Backbone.View;
|
||||||
strictEqual(view.$('a b').html(), 'test');
|
myView.setElement('<p><a><b>test</b></a></p>');
|
||||||
|
var result = myView.$('a b');
|
||||||
|
|
||||||
|
assert.strictEqual(result[0].innerHTML, 'test');
|
||||||
|
assert.ok(result.length === +result.length);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("initialize", 1, function() {
|
QUnit.test('$el', function(assert) {
|
||||||
|
assert.expect(3);
|
||||||
|
var myView = new Backbone.View;
|
||||||
|
myView.setElement('<p><a><b>test</b></a></p>');
|
||||||
|
assert.strictEqual(myView.el.nodeType, 1);
|
||||||
|
|
||||||
|
assert.ok(myView.$el instanceof Backbone.$);
|
||||||
|
assert.strictEqual(myView.$el[0], myView.el);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('initialize', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
initialize: function() {
|
initialize: function() {
|
||||||
this.one = 1;
|
this.one = 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
strictEqual(new View().one, 1);
|
assert.strictEqual(new View().one, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("delegateEvents", 6, function() {
|
QUnit.test('render', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
var myView = new Backbone.View;
|
||||||
|
assert.equal(myView.render(), myView, '#render returns the view instance');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('delegateEvents', function(assert) {
|
||||||
|
assert.expect(6);
|
||||||
var counter1 = 0, counter2 = 0;
|
var counter1 = 0, counter2 = 0;
|
||||||
|
|
||||||
var view = new Backbone.View({el: '<p><a id="test"></a></p>'});
|
var myView = new Backbone.View({el: '#testElement'});
|
||||||
view.increment = function(){ counter1++; };
|
myView.increment = function(){ counter1++; };
|
||||||
view.$el.on('click', function(){ counter2++; });
|
myView.$el.on('click', function(){ counter2++; });
|
||||||
|
|
||||||
var events = {'click #test': 'increment'};
|
var events = {'click h1': 'increment'};
|
||||||
|
|
||||||
view.delegateEvents(events);
|
myView.delegateEvents(events);
|
||||||
view.$('#test').trigger('click');
|
myView.$('h1').trigger('click');
|
||||||
equal(counter1, 1);
|
assert.equal(counter1, 1);
|
||||||
equal(counter2, 1);
|
assert.equal(counter2, 1);
|
||||||
|
|
||||||
view.$('#test').trigger('click');
|
myView.$('h1').trigger('click');
|
||||||
equal(counter1, 2);
|
assert.equal(counter1, 2);
|
||||||
equal(counter2, 2);
|
assert.equal(counter2, 2);
|
||||||
|
|
||||||
view.delegateEvents(events);
|
myView.delegateEvents(events);
|
||||||
view.$('#test').trigger('click');
|
myView.$('h1').trigger('click');
|
||||||
equal(counter1, 3);
|
assert.equal(counter1, 3);
|
||||||
equal(counter2, 3);
|
assert.equal(counter2, 3);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("delegateEvents allows functions for callbacks", 3, function() {
|
QUnit.test('delegate', function(assert) {
|
||||||
var view = new Backbone.View({el: '<p></p>'});
|
assert.expect(3);
|
||||||
view.counter = 0;
|
var myView = new Backbone.View({el: '#testElement'});
|
||||||
|
myView.delegate('click', 'h1', function() {
|
||||||
|
assert.ok(true);
|
||||||
|
});
|
||||||
|
myView.delegate('click', function() {
|
||||||
|
assert.ok(true);
|
||||||
|
});
|
||||||
|
myView.$('h1').trigger('click');
|
||||||
|
|
||||||
|
assert.equal(myView.delegate(), myView, '#delegate returns the view instance');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('delegateEvents allows functions for callbacks', function(assert) {
|
||||||
|
assert.expect(3);
|
||||||
|
var myView = new Backbone.View({el: '<p></p>'});
|
||||||
|
myView.counter = 0;
|
||||||
|
|
||||||
var events = {
|
var events = {
|
||||||
click: function() {
|
click: function() {
|
||||||
@@ -73,69 +112,148 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
view.delegateEvents(events);
|
myView.delegateEvents(events);
|
||||||
view.$el.trigger('click');
|
myView.$el.trigger('click');
|
||||||
equal(view.counter, 1);
|
assert.equal(myView.counter, 1);
|
||||||
|
|
||||||
view.$el.trigger('click');
|
myView.$el.trigger('click');
|
||||||
equal(view.counter, 2);
|
assert.equal(myView.counter, 2);
|
||||||
|
|
||||||
view.delegateEvents(events);
|
myView.delegateEvents(events);
|
||||||
view.$el.trigger('click');
|
myView.$el.trigger('click');
|
||||||
equal(view.counter, 3);
|
assert.equal(myView.counter, 3);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("undelegateEvents", 6, function() {
|
|
||||||
|
QUnit.test('delegateEvents ignore undefined methods', function(assert) {
|
||||||
|
assert.expect(0);
|
||||||
|
var myView = new Backbone.View({el: '<p></p>'});
|
||||||
|
myView.delegateEvents({'click': 'undefinedMethod'});
|
||||||
|
myView.$el.trigger('click');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('undelegateEvents', function(assert) {
|
||||||
|
assert.expect(7);
|
||||||
var counter1 = 0, counter2 = 0;
|
var counter1 = 0, counter2 = 0;
|
||||||
|
|
||||||
var view = new Backbone.View({el: '<p><a id="test"></a></p>'});
|
var myView = new Backbone.View({el: '#testElement'});
|
||||||
view.increment = function(){ counter1++; };
|
myView.increment = function(){ counter1++; };
|
||||||
view.$el.on('click', function(){ counter2++; });
|
myView.$el.on('click', function(){ counter2++; });
|
||||||
|
|
||||||
var events = {'click #test': 'increment'};
|
var events = {'click h1': 'increment'};
|
||||||
|
|
||||||
view.delegateEvents(events);
|
myView.delegateEvents(events);
|
||||||
view.$('#test').trigger('click');
|
myView.$('h1').trigger('click');
|
||||||
equal(counter1, 1);
|
assert.equal(counter1, 1);
|
||||||
equal(counter2, 1);
|
assert.equal(counter2, 1);
|
||||||
|
|
||||||
view.undelegateEvents();
|
myView.undelegateEvents();
|
||||||
view.$('#test').trigger('click');
|
myView.$('h1').trigger('click');
|
||||||
equal(counter1, 1);
|
assert.equal(counter1, 1);
|
||||||
equal(counter2, 2);
|
assert.equal(counter2, 2);
|
||||||
|
|
||||||
view.delegateEvents(events);
|
myView.delegateEvents(events);
|
||||||
view.$('#test').trigger('click');
|
myView.$('h1').trigger('click');
|
||||||
equal(counter1, 2);
|
assert.equal(counter1, 2);
|
||||||
equal(counter2, 3);
|
assert.equal(counter2, 3);
|
||||||
|
|
||||||
|
assert.equal(myView.undelegateEvents(), myView, '#undelegateEvents returns the view instance');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("_ensureElement with DOM node el", 1, function() {
|
QUnit.test('undelegate', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
var myView = new Backbone.View({el: '#testElement'});
|
||||||
|
myView.delegate('click', function() { assert.ok(false); });
|
||||||
|
myView.delegate('click', 'h1', function() { assert.ok(false); });
|
||||||
|
|
||||||
|
myView.undelegate('click');
|
||||||
|
|
||||||
|
myView.$('h1').trigger('click');
|
||||||
|
myView.$el.trigger('click');
|
||||||
|
|
||||||
|
assert.equal(myView.undelegate(), myView, '#undelegate returns the view instance');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('undelegate with passed handler', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
var myView = new Backbone.View({el: '#testElement'});
|
||||||
|
var listener = function() { assert.ok(false); };
|
||||||
|
myView.delegate('click', listener);
|
||||||
|
myView.delegate('click', function() { assert.ok(true); });
|
||||||
|
myView.undelegate('click', listener);
|
||||||
|
myView.$el.trigger('click');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('undelegate with selector', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
|
var myView = new Backbone.View({el: '#testElement'});
|
||||||
|
myView.delegate('click', function() { assert.ok(true); });
|
||||||
|
myView.delegate('click', 'h1', function() { assert.ok(false); });
|
||||||
|
myView.undelegate('click', 'h1');
|
||||||
|
myView.$('h1').trigger('click');
|
||||||
|
myView.$el.trigger('click');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('undelegate with handler and selector', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
|
var myView = new Backbone.View({el: '#testElement'});
|
||||||
|
myView.delegate('click', function() { assert.ok(true); });
|
||||||
|
var handler = function(){ assert.ok(false); };
|
||||||
|
myView.delegate('click', 'h1', handler);
|
||||||
|
myView.undelegate('click', 'h1', handler);
|
||||||
|
myView.$('h1').trigger('click');
|
||||||
|
myView.$el.trigger('click');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('tagName can be provided as a string', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
var View = Backbone.View.extend({
|
||||||
|
tagName: 'span'
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(new View().el.tagName, 'SPAN');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('tagName can be provided as a function', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
var View = Backbone.View.extend({
|
||||||
|
tagName: function() {
|
||||||
|
return 'p';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.ok(new View().$el.is('p'));
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('_ensureElement with DOM node el', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
el: document.body
|
el: document.body
|
||||||
});
|
});
|
||||||
|
|
||||||
equal(new View().el, document.body);
|
assert.equal(new View().el, document.body);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("_ensureElement with string el", 3, function() {
|
QUnit.test('_ensureElement with string el', function(assert) {
|
||||||
|
assert.expect(3);
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
el: "body"
|
el: 'body'
|
||||||
});
|
});
|
||||||
strictEqual(new View().el, document.body);
|
assert.strictEqual(new View().el, document.body);
|
||||||
|
|
||||||
View = Backbone.View.extend({
|
View = Backbone.View.extend({
|
||||||
el: "#testElement > h1"
|
el: '#testElement > h1'
|
||||||
});
|
});
|
||||||
strictEqual(new View().el, $("#testElement > h1").get(0));
|
assert.strictEqual(new View().el, $('#testElement > h1').get(0));
|
||||||
|
|
||||||
View = Backbone.View.extend({
|
View = Backbone.View.extend({
|
||||||
el: "#nonexistent"
|
el: '#nonexistent'
|
||||||
});
|
});
|
||||||
ok(!new View().el);
|
assert.ok(!new View().el);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("with className and id functions", 2, function() {
|
QUnit.test('with className and id functions', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
className: function() {
|
className: function() {
|
||||||
return 'className';
|
return 'className';
|
||||||
@@ -145,57 +263,54 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
strictEqual(new View().el.className, 'className');
|
assert.strictEqual(new View().el.className, 'className');
|
||||||
strictEqual(new View().el.id, 'id');
|
assert.strictEqual(new View().el.id, 'id');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("with options function", 3, function() {
|
QUnit.test('with attributes', function(assert) {
|
||||||
var View1 = Backbone.View.extend({
|
assert.expect(2);
|
||||||
options: function() {
|
|
||||||
return {
|
|
||||||
title: 'title1',
|
|
||||||
acceptText: 'confirm'
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var View2 = View1.extend({
|
|
||||||
options: function() {
|
|
||||||
return _.extend(View1.prototype.options.call(this), {
|
|
||||||
title: 'title2',
|
|
||||||
fixed: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
strictEqual(new View2().options.title, 'title2');
|
|
||||||
strictEqual(new View2().options.acceptText, 'confirm');
|
|
||||||
strictEqual(new View2().options.fixed, true);
|
|
||||||
});
|
|
||||||
|
|
||||||
test("with attributes", 2, function() {
|
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
attributes: {
|
attributes: {
|
||||||
id: 'id',
|
'id': 'id',
|
||||||
'class': 'class'
|
'class': 'class'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
strictEqual(new View().el.className, 'class');
|
assert.strictEqual(new View().el.className, 'class');
|
||||||
strictEqual(new View().el.id, 'id');
|
assert.strictEqual(new View().el.id, 'id');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("with attributes as a function", 1, function() {
|
QUnit.test('with attributes as a function', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
attributes: function() {
|
attributes: function() {
|
||||||
return {'class': 'dynamic'};
|
return {'class': 'dynamic'};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
strictEqual(new View().el.className, 'dynamic');
|
assert.strictEqual(new View().el.className, 'dynamic');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("multiple views per element", 3, function() {
|
QUnit.test('should default to className/id properties', function(assert) {
|
||||||
|
assert.expect(4);
|
||||||
|
var View = Backbone.View.extend({
|
||||||
|
className: 'backboneClass',
|
||||||
|
id: 'backboneId',
|
||||||
|
attributes: {
|
||||||
|
'class': 'attributeClass',
|
||||||
|
'id': 'attributeId'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var myView = new View;
|
||||||
|
assert.strictEqual(myView.el.className, 'backboneClass');
|
||||||
|
assert.strictEqual(myView.el.id, 'backboneId');
|
||||||
|
assert.strictEqual(myView.$el.attr('class'), 'backboneClass');
|
||||||
|
assert.strictEqual(myView.$el.attr('id'), 'backboneId');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('multiple views per element', function(assert) {
|
||||||
|
assert.expect(3);
|
||||||
var count = 0;
|
var count = 0;
|
||||||
var $el = $('<p></p>');
|
var $el = $('<p></p>');
|
||||||
|
|
||||||
@@ -209,142 +324,167 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
var view1 = new View;
|
var view1 = new View;
|
||||||
$el.trigger("click");
|
$el.trigger('click');
|
||||||
equal(1, count);
|
assert.equal(1, count);
|
||||||
|
|
||||||
var view2 = new View;
|
var view2 = new View;
|
||||||
$el.trigger("click");
|
$el.trigger('click');
|
||||||
equal(3, count);
|
assert.equal(3, count);
|
||||||
|
|
||||||
view1.delegateEvents();
|
view1.delegateEvents();
|
||||||
$el.trigger("click");
|
$el.trigger('click');
|
||||||
equal(5, count);
|
assert.equal(5, count);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("custom events, with namespaces", 2, function() {
|
QUnit.test('custom events', function(assert) {
|
||||||
var count = 0;
|
assert.expect(2);
|
||||||
|
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
el: $('body'),
|
el: $('body'),
|
||||||
events: function() {
|
events: {
|
||||||
return {"fake$event.namespaced": "run"};
|
fake$event: function() { assert.ok(true); }
|
||||||
},
|
|
||||||
run: function() {
|
|
||||||
count++;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var view = new View;
|
var myView = new View;
|
||||||
$('body').trigger('fake$event').trigger('fake$event');
|
$('body').trigger('fake$event').trigger('fake$event');
|
||||||
equal(count, 2);
|
|
||||||
|
|
||||||
$('body').unbind('.namespaced');
|
$('body').off('fake$event');
|
||||||
$('body').trigger('fake$event');
|
$('body').trigger('fake$event');
|
||||||
equal(count, 2);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test("#1048 - setElement uses provided object.", 2, function() {
|
QUnit.test('#1048 - setElement uses provided object.', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var $el = $('body');
|
var $el = $('body');
|
||||||
|
|
||||||
var view = new Backbone.View({el: $el});
|
var myView = new Backbone.View({el: $el});
|
||||||
ok(view.$el === $el);
|
assert.ok(myView.$el === $el);
|
||||||
|
|
||||||
view.setElement($el = $($el));
|
myView.setElement($el = $($el));
|
||||||
ok(view.$el === $el);
|
assert.ok(myView.$el === $el);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("#986 - Undelegate before changing element.", 1, function() {
|
QUnit.test('#986 - Undelegate before changing element.', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
var button1 = $('<button></button>');
|
var button1 = $('<button></button>');
|
||||||
var button2 = $('<button></button>');
|
var button2 = $('<button></button>');
|
||||||
|
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
events: {
|
events: {
|
||||||
click: function(e) {
|
click: function(e) {
|
||||||
ok(view.el === e.target);
|
assert.ok(myView.el === e.target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var view = new View({el: button1});
|
var myView = new View({el: button1});
|
||||||
view.setElement(button2);
|
myView.setElement(button2);
|
||||||
|
|
||||||
button1.trigger('click');
|
button1.trigger('click');
|
||||||
button2.trigger('click');
|
button2.trigger('click');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("#1172 - Clone attributes object", 2, function() {
|
QUnit.test('#1172 - Clone attributes object', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
attributes: {foo: 'bar'}
|
attributes: {foo: 'bar'}
|
||||||
});
|
});
|
||||||
|
|
||||||
var view1 = new View({id: 'foo'});
|
var view1 = new View({id: 'foo'});
|
||||||
strictEqual(view1.el.id, 'foo');
|
assert.strictEqual(view1.el.id, 'foo');
|
||||||
|
|
||||||
var view2 = new View();
|
var view2 = new View();
|
||||||
ok(!view2.el.id);
|
assert.ok(!view2.el.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("#1228 - tagName can be provided as a function", 1, function() {
|
QUnit.test('views stopListening', function(assert) {
|
||||||
var View = Backbone.View.extend({
|
assert.expect(0);
|
||||||
tagName: function() {
|
|
||||||
return 'p';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
ok(new View().$el.is('p'));
|
|
||||||
});
|
|
||||||
|
|
||||||
test("views stopListening", 0, function() {
|
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
initialize: function() {
|
initialize: function() {
|
||||||
this.listenTo(this.model, 'all x', function(){ ok(false); }, this);
|
this.listenTo(this.model, 'all x', function(){ assert.ok(false); });
|
||||||
this.listenTo(this.collection, 'all x', function(){ ok(false); }, this);
|
this.listenTo(this.collection, 'all x', function(){ assert.ok(false); });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var view = new View({
|
var myView = new View({
|
||||||
model: new Backbone.Model,
|
model: new Backbone.Model,
|
||||||
collection: new Backbone.Collection
|
collection: new Backbone.Collection
|
||||||
});
|
});
|
||||||
|
|
||||||
view.stopListening();
|
myView.stopListening();
|
||||||
view.model.trigger('x');
|
myView.model.trigger('x');
|
||||||
view.collection.trigger('x');
|
myView.collection.trigger('x');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Provide function for el.", 1, function() {
|
QUnit.test('Provide function for el.', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
el: function() {
|
el: function() {
|
||||||
return "<p><a></a></p>";
|
return '<p><a></a></p>';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var view = new View;
|
var myView = new View;
|
||||||
ok(view.$el.is('p:has(a)'));
|
assert.ok(myView.$el.is('p'));
|
||||||
|
assert.ok(myView.$el.has('a'));
|
||||||
});
|
});
|
||||||
|
|
||||||
test("events passed in options", 2, function() {
|
QUnit.test('events passed in options', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
var counter = 0;
|
var counter = 0;
|
||||||
|
|
||||||
var View = Backbone.View.extend({
|
var View = Backbone.View.extend({
|
||||||
el: '<p><a id="test"></a></p>',
|
el: '#testElement',
|
||||||
increment: function() {
|
increment: function() {
|
||||||
counter++;
|
counter++;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var view = new View({events:{'click #test':'increment'}});
|
var myView = new View({
|
||||||
var view2 = new View({events:function(){
|
events: {
|
||||||
return {'click #test':'increment'};
|
'click h1': 'increment'
|
||||||
}});
|
}
|
||||||
|
});
|
||||||
|
|
||||||
view.$('#test').trigger('click');
|
myView.$('h1').trigger('click').trigger('click');
|
||||||
view2.$('#test').trigger('click');
|
assert.equal(counter, 2);
|
||||||
equal(counter, 2);
|
|
||||||
|
|
||||||
view.$('#test').trigger('click');
|
|
||||||
view2.$('#test').trigger('click');
|
|
||||||
equal(counter, 4);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
QUnit.test('remove', function(assert) {
|
||||||
|
assert.expect(2);
|
||||||
|
var myView = new Backbone.View;
|
||||||
|
document.body.appendChild(view.el);
|
||||||
|
|
||||||
|
myView.delegate('click', function() { assert.ok(false); });
|
||||||
|
myView.listenTo(myView, 'all x', function() { assert.ok(false); });
|
||||||
|
|
||||||
|
assert.equal(myView.remove(), myView, '#remove returns the view instance');
|
||||||
|
myView.$el.trigger('click');
|
||||||
|
myView.trigger('x');
|
||||||
|
|
||||||
|
// In IE8 and below, parentNode still exists but is not document.body.
|
||||||
|
assert.notEqual(myView.el.parentNode, document.body);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('setElement', function(assert) {
|
||||||
|
assert.expect(3);
|
||||||
|
var myView = new Backbone.View({
|
||||||
|
events: {
|
||||||
|
click: function() { assert.ok(false); }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
myView.events = {
|
||||||
|
click: function() { assert.ok(true); }
|
||||||
|
};
|
||||||
|
var oldEl = myView.el;
|
||||||
|
var $oldEl = myView.$el;
|
||||||
|
|
||||||
|
myView.setElement(document.createElement('div'));
|
||||||
|
|
||||||
|
$oldEl.click();
|
||||||
|
myView.$el.click();
|
||||||
|
|
||||||
|
assert.notEqual(oldEl, myView.el);
|
||||||
|
assert.notEqual($oldEl, myView.$el);
|
||||||
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
|
|||||||
22
vendor/benchmark.js/LICENSE.txt
vendored
22
vendor/benchmark.js/LICENSE.txt
vendored
@@ -1,22 +0,0 @@
|
|||||||
Copyright 2010-2013 Mathias Bynens <http://mathiasbynens.be/>
|
|
||||||
Based on JSLitmus.js, copyright Robert Kieffer <http://broofa.com/>
|
|
||||||
Modified by John-David Dalton <http://allyoucanleet.com/>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
136
vendor/benchmark.js/README.md
vendored
136
vendor/benchmark.js/README.md
vendored
@@ -1,136 +0,0 @@
|
|||||||
# Benchmark.js <sup>v1.0.0</sup>
|
|
||||||
[](http://travis-ci.org/bestiejs/benchmark.js)
|
|
||||||
|
|
||||||
A [robust](http://calendar.perfplanet.com/2010/bulletproof-javascript-benchmarks/ "Bulletproof JavaScript benchmarks") benchmarking library that works on nearly all JavaScript platforms<sup><a name="fnref1" href="#fn1">1</a></sup>, supports high-resolution timers, and returns statistically significant results. As seen on [jsPerf](http://jsperf.com/).
|
|
||||||
|
|
||||||
## Download
|
|
||||||
|
|
||||||
* [Development source](https://raw.github.com/bestiejs/benchmark.js/v1.0.0/benchmark.js)
|
|
||||||
|
|
||||||
## Dive in
|
|
||||||
|
|
||||||
We’ve got [API docs](http://benchmarkjs.com/docs) and [unit tests](http://benchmarkjs.com/tests).
|
|
||||||
|
|
||||||
For a list of upcoming features, check out our [roadmap](https://github.com/bestiejs/benchmark.js/wiki/Roadmap).
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
Benchmark.js has been tested in at least Adobe AIR 3.1, Chrome 5-21, Firefox 1-15, IE 6-9, Opera 9.25-12, Safari 3-6, Node.js 0.8.8, Narwhal 0.3.2, RingoJS 0.8, and Rhino 1.7RC5.
|
|
||||||
|
|
||||||
## Installation and usage
|
|
||||||
|
|
||||||
In a browser or Adobe AIR:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script src="benchmark.js"></script>
|
|
||||||
```
|
|
||||||
|
|
||||||
Optionally, expose Java’s nanosecond timer by adding the `nano` applet to the `<body>`:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<applet code="nano" archive="nano.jar"></applet>
|
|
||||||
```
|
|
||||||
|
|
||||||
Or enable Chrome’s microsecond timer by using the [command line switch](http://peter.sh/experiments/chromium-command-line-switches/#enable-benchmarking):
|
|
||||||
|
|
||||||
--enable-benchmarking
|
|
||||||
|
|
||||||
Via [npm](http://npmjs.org/):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install benchmark
|
|
||||||
```
|
|
||||||
|
|
||||||
In [Node.js](http://nodejs.org/) and [RingoJS v0.8.0+](http://ringojs.org/):
|
|
||||||
|
|
||||||
```js
|
|
||||||
var Benchmark = require('benchmark');
|
|
||||||
```
|
|
||||||
|
|
||||||
Optionally, use the [microtime module](https://github.com/wadey/node-microtime) by Wade Simmons:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install microtime
|
|
||||||
```
|
|
||||||
|
|
||||||
In [RingoJS v0.7.0-](http://ringojs.org/):
|
|
||||||
|
|
||||||
```js
|
|
||||||
var Benchmark = require('benchmark').Benchmark;
|
|
||||||
```
|
|
||||||
|
|
||||||
In [Rhino](http://www.mozilla.org/rhino/):
|
|
||||||
|
|
||||||
```js
|
|
||||||
load('benchmark.js');
|
|
||||||
```
|
|
||||||
|
|
||||||
In an AMD loader like [RequireJS](http://requirejs.org/):
|
|
||||||
|
|
||||||
```js
|
|
||||||
require({
|
|
||||||
'paths': {
|
|
||||||
'benchmark': 'path/to/benchmark'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
['benchmark'], function(Benchmark) {
|
|
||||||
console.log(Benchmark.version);
|
|
||||||
});
|
|
||||||
|
|
||||||
// or with platform.js
|
|
||||||
// https://github.com/bestiejs/platform.js
|
|
||||||
require({
|
|
||||||
'paths': {
|
|
||||||
'benchmark': 'path/to/benchmark',
|
|
||||||
'platform': 'path/to/platform'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
['benchmark', 'platform'], function(Benchmark, platform) {
|
|
||||||
Benchmark.platform = platform;
|
|
||||||
console.log(Benchmark.platform.name);
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Usage example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
var suite = new Benchmark.Suite;
|
|
||||||
|
|
||||||
// add tests
|
|
||||||
suite.add('RegExp#test', function() {
|
|
||||||
/o/.test('Hello World!');
|
|
||||||
})
|
|
||||||
.add('String#indexOf', function() {
|
|
||||||
'Hello World!'.indexOf('o') > -1;
|
|
||||||
})
|
|
||||||
// add listeners
|
|
||||||
.on('cycle', function(event) {
|
|
||||||
console.log(String(event.target));
|
|
||||||
})
|
|
||||||
.on('complete', function() {
|
|
||||||
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
|
|
||||||
})
|
|
||||||
// run async
|
|
||||||
.run({ 'async': true });
|
|
||||||
|
|
||||||
// logs:
|
|
||||||
// > RegExp#test x 4,161,532 +-0.99% (59 cycles)
|
|
||||||
// > String#indexOf x 6,139,623 +-1.00% (131 cycles)
|
|
||||||
// > Fastest is String#indexOf
|
|
||||||
```
|
|
||||||
|
|
||||||
## BestieJS
|
|
||||||
|
|
||||||
Benchmark.js is part of the BestieJS *"Best in Class"* module collection. This means we promote solid browser/environment support, ES5 precedents, unit testing, and plenty of documentation.
|
|
||||||
|
|
||||||
## Authors
|
|
||||||
|
|
||||||
* [Mathias Bynens](http://mathiasbynens.be/)
|
|
||||||
[](https://twitter.com/mathias "Follow @mathias on Twitter")
|
|
||||||
* [John-David Dalton](http://allyoucanleet.com/)
|
|
||||||
[](https://twitter.com/jdalton "Follow @jdalton on Twitter")
|
|
||||||
|
|
||||||
## Contributors
|
|
||||||
|
|
||||||
* [Kit Cambridge](http://kitcambridge.github.com/)
|
|
||||||
[](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter")
|
|
||||||
3960
vendor/benchmark.js/benchmark.js
vendored
3960
vendor/benchmark.js/benchmark.js
vendored
File diff suppressed because it is too large
Load Diff
BIN
vendor/benchmark.js/nano.jar
vendored
BIN
vendor/benchmark.js/nano.jar
vendored
Binary file not shown.
20
vendor/docdown/LICENSE.txt
vendored
20
vendor/docdown/LICENSE.txt
vendored
@@ -1,20 +0,0 @@
|
|||||||
Copyright 2011-2013 John-David Dalton <http://allyoucanleet.com/>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
33
vendor/docdown/README.md
vendored
33
vendor/docdown/README.md
vendored
@@ -1,33 +0,0 @@
|
|||||||
# Docdown <sup>v1.0.0</sup>
|
|
||||||
|
|
||||||
A simple JSDoc to Markdown documentation generator.
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
The documentation for Docdown can be viewed here: [/doc/README.md](https://github.com/jdalton/docdown/blob/master/doc/README.md#readme)
|
|
||||||
|
|
||||||
For a list of upcoming features, check out our [roadmap](https://github.com/jdalton/docdown/wiki/Roadmap).
|
|
||||||
|
|
||||||
## Installation and usage
|
|
||||||
|
|
||||||
Usage example:
|
|
||||||
|
|
||||||
```php
|
|
||||||
require("docdown.php");
|
|
||||||
|
|
||||||
// generate Markdown
|
|
||||||
$markdown = docdown(array(
|
|
||||||
"path" => $filepath,
|
|
||||||
"url" => "https://github.com/username/project/blob/master/my.js"
|
|
||||||
));
|
|
||||||
```
|
|
||||||
|
|
||||||
## Author
|
|
||||||
|
|
||||||
* [John-David Dalton](http://allyoucanleet.com/)
|
|
||||||
[](https://twitter.com/jdalton "Follow @jdalton on Twitter")
|
|
||||||
|
|
||||||
## Contributors
|
|
||||||
|
|
||||||
* [Mathias Bynens](http://mathiasbynens.be/)
|
|
||||||
[](https://twitter.com/mathias "Follow @mathias on Twitter")
|
|
||||||
38
vendor/docdown/docdown.php
vendored
38
vendor/docdown/docdown.php
vendored
@@ -1,38 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*!
|
|
||||||
* Docdown v1.0.0-pre
|
|
||||||
* Copyright 2011-2013 John-David Dalton <http://allyoucanleet.com/>
|
|
||||||
* Available under MIT license <http://mths.be/mit>
|
|
||||||
*/
|
|
||||||
require(dirname(__FILE__) . '/src/DocDown/Generator.php');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates Markdown from JSDoc entries in a given file.
|
|
||||||
*
|
|
||||||
* @param {Array} [$options=array()] The options array.
|
|
||||||
* @returns {String} The generated Markdown.
|
|
||||||
* @example
|
|
||||||
*
|
|
||||||
* // specify a file path
|
|
||||||
* $markdown = docdown(array(
|
|
||||||
* // path to js file
|
|
||||||
* 'path' => $filepath,
|
|
||||||
* // url used to reference line numbers in code
|
|
||||||
* 'url' => 'https://github.com/username/project/blob/master/my.js'
|
|
||||||
* ));
|
|
||||||
*
|
|
||||||
* // or pass raw js
|
|
||||||
* $markdown = docdown(array(
|
|
||||||
* // raw JavaScript source
|
|
||||||
* 'source' => $rawJS,
|
|
||||||
* // documentation title
|
|
||||||
* 'title' => 'My API Documentation',
|
|
||||||
* // url used to reference line numbers in code
|
|
||||||
* 'url' => 'https://github.com/username/project/blob/master/my.js'
|
|
||||||
* ));
|
|
||||||
*/
|
|
||||||
function docdown( $options = array() ) {
|
|
||||||
$gen = new Generator($options);
|
|
||||||
return $gen->generate();
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
226
vendor/docdown/src/DocDown/Alias.php
vendored
226
vendor/docdown/src/DocDown/Alias.php
vendored
@@ -1,226 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class to represent a JSDoc entry alias.
|
|
||||||
*/
|
|
||||||
class Alias {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The alias owner.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @type Object
|
|
||||||
*/
|
|
||||||
public $owner;
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Alias constructor.
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
* @param {String} $name The alias name.
|
|
||||||
* @param {Object} $owner The alias owner.
|
|
||||||
*/
|
|
||||||
public function __construct( $name, $owner ) {
|
|
||||||
$this->owner = $owner;
|
|
||||||
$this->_name = $name;
|
|
||||||
$this->_call = $owner->getCall();
|
|
||||||
$this->_category = $owner->getCategory();
|
|
||||||
$this->_desc = $owner->getDesc();
|
|
||||||
$this->_example = $owner->getExample();
|
|
||||||
$this->_isCtor = $owner->isCtor();
|
|
||||||
$this->_isLicense = $owner->isLicense();
|
|
||||||
$this->_isPlugin = $owner->isPlugin();
|
|
||||||
$this->_isPrivate = $owner->isPrivate();
|
|
||||||
$this->_isStatic = $owner->isStatic();
|
|
||||||
$this->_lineNumber = $owner->getLineNumber();
|
|
||||||
$this->_members = $owner->getMembers();
|
|
||||||
$this->_params = $owner->getParams();
|
|
||||||
$this->_returns = $owner->getReturns();
|
|
||||||
$this->_type = $owner->getType();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the entry's `alias` objects.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @param {Number} $index The index of the array value to return.
|
|
||||||
* @returns {Array|String} The entry's `alias` objects.
|
|
||||||
*/
|
|
||||||
public function getAliases( $index = null ) {
|
|
||||||
$result = array();
|
|
||||||
return $index !== null
|
|
||||||
? @$result[$index]
|
|
||||||
: $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the function call from the owner entry.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {String} The function call.
|
|
||||||
*/
|
|
||||||
public function getCall() {
|
|
||||||
return $this->_call;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the owner entry's `category` data.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {String} The owner entry's `category` data.
|
|
||||||
*/
|
|
||||||
public function getCategory() {
|
|
||||||
return $this->_category;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the owner entry's description.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {String} The owner entry's description.
|
|
||||||
*/
|
|
||||||
public function getDesc() {
|
|
||||||
return $this->_desc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the owner entry's `example` data.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {String} The owner entry's `example` data.
|
|
||||||
*/
|
|
||||||
public function getExample() {
|
|
||||||
return $this->_example;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the entry is an alias.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {Boolean} Returns `true`.
|
|
||||||
*/
|
|
||||||
public function isAlias() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the owner entry is a constructor.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {Boolean} Returns `true` if a constructor, else `false`.
|
|
||||||
*/
|
|
||||||
public function isCtor() {
|
|
||||||
return $this->_isCtor;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the owner entry is a license.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {Boolean} Returns `true` if a license, else `false`.
|
|
||||||
*/
|
|
||||||
public function isLicense() {
|
|
||||||
return $this->_isLicense;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the owner entry *is* assigned to a prototype.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {Boolean} Returns `true` if assigned to a prototype, else `false`.
|
|
||||||
*/
|
|
||||||
public function isPlugin() {
|
|
||||||
return $this->_isPlugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the owner entry is private.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {Boolean} Returns `true` if private, else `false`.
|
|
||||||
*/
|
|
||||||
public function isPrivate() {
|
|
||||||
return $this->_isPrivate;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the owner entry is *not* assigned to a prototype.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {Boolean} Returns `true` if not assigned to a prototype, else `false`.
|
|
||||||
*/
|
|
||||||
public function isStatic() {
|
|
||||||
return $this->_isStatic;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolves the owner entry's line number.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {Number} The owner entry's line number.
|
|
||||||
*/
|
|
||||||
public function getLineNumber() {
|
|
||||||
return $this->_lineNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the owner entry's `member` data.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @param {Number} $index The index of the array value to return.
|
|
||||||
* @returns {Array|String} The owner entry's `member` data.
|
|
||||||
*/
|
|
||||||
public function getMembers( $index = null ) {
|
|
||||||
return $index !== null
|
|
||||||
? @$this->_members[$index]
|
|
||||||
: $this->_members;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the owner entry's `name` data.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {String} The owner entry's `name` data.
|
|
||||||
*/
|
|
||||||
public function getName() {
|
|
||||||
return $this->_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the owner entry's `param` data.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @param {Number} $index The index of the array value to return.
|
|
||||||
* @returns {Array} The owner entry's `param` data.
|
|
||||||
*/
|
|
||||||
public function getParams( $index = null ) {
|
|
||||||
return $index !== null
|
|
||||||
? @$this->_params[$index]
|
|
||||||
: $this->_params;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the owner entry's `returns` data.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {String} The owner entry's `returns` data.
|
|
||||||
*/
|
|
||||||
public function getReturns() {
|
|
||||||
return $this->_returns;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the owner entry's `type` data.
|
|
||||||
*
|
|
||||||
* @memberOf Alias
|
|
||||||
* @returns {String} The owner entry's `type` data.
|
|
||||||
*/
|
|
||||||
public function getType() {
|
|
||||||
return $this->_type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
442
vendor/docdown/src/DocDown/Entry.php
vendored
442
vendor/docdown/src/DocDown/Entry.php
vendored
@@ -1,442 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require(dirname(__FILE__) . "/Alias.php");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class to simplify parsing a single JSDoc entry.
|
|
||||||
*/
|
|
||||||
class Entry {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The documentation entry.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @type String
|
|
||||||
*/
|
|
||||||
public $entry = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The language highlighter used for code examples.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @type String
|
|
||||||
*/
|
|
||||||
public $lang = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The source code.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @type String
|
|
||||||
*/
|
|
||||||
public $source = '';
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Entry constructor.
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
* @param {String} $entry The documentation entry to analyse.
|
|
||||||
* @param {String} $source The source code.
|
|
||||||
* @param {String} [$lang ='js'] The language highlighter used for code examples.
|
|
||||||
*/
|
|
||||||
public function __construct( $entry, $source, $lang = 'js' ) {
|
|
||||||
$this->entry = $entry;
|
|
||||||
$this->lang = $lang;
|
|
||||||
$this->source = str_replace(PHP_EOL, "\n", $source);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the documentation entries from source code.
|
|
||||||
*
|
|
||||||
* @static
|
|
||||||
* @memberOf Entry
|
|
||||||
* @param {String} $source The source code.
|
|
||||||
* @returns {Array} The array of entries.
|
|
||||||
*/
|
|
||||||
public static function getEntries( $source ) {
|
|
||||||
preg_match_all('#/\*\*(?![-!])[\s\S]*?\*/\s*[^\n]+#', $source, $result);
|
|
||||||
return array_pop($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the entry is a function reference.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {Boolean} Returns `true` if the entry is a function reference, else `false`.
|
|
||||||
*/
|
|
||||||
private function isFunction() {
|
|
||||||
if (!isset($this->_isFunction)) {
|
|
||||||
$this->_isFunction = !!(
|
|
||||||
$this->isCtor() ||
|
|
||||||
count($this->getParams()) ||
|
|
||||||
count($this->getReturns()) ||
|
|
||||||
preg_match('/\* *@function\b/', $this->entry)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return $this->_isFunction;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the entry's `alias` objects.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @param {Number} $index The index of the array value to return.
|
|
||||||
* @returns {Array|String} The entry's `alias` objects.
|
|
||||||
*/
|
|
||||||
public function getAliases( $index = null ) {
|
|
||||||
if (!isset($this->_aliases)) {
|
|
||||||
preg_match('#\* *@alias\s+([^\n]+)#', $this->entry, $result);
|
|
||||||
|
|
||||||
if (count($result)) {
|
|
||||||
$result = trim(preg_replace('/(?:^|\n)\s*\* ?/', ' ', $result[1]));
|
|
||||||
$result = preg_split('/,\s*/', $result);
|
|
||||||
natsort($result);
|
|
||||||
|
|
||||||
foreach ($result as $resultIndex => $value) {
|
|
||||||
$result[$resultIndex] = new Alias($value, $this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->_aliases = $result;
|
|
||||||
}
|
|
||||||
return $index !== null
|
|
||||||
? @$this->_aliases[$index]
|
|
||||||
: $this->_aliases;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the function call from the entry.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {String} The function call.
|
|
||||||
*/
|
|
||||||
public function getCall() {
|
|
||||||
if (isset($this->_call)) {
|
|
||||||
return $this->_call;
|
|
||||||
}
|
|
||||||
|
|
||||||
preg_match('#\*/\s*(?:function ([^(]*)|(.*?)(?=[:=,]|return\b))#', $this->entry, $result);
|
|
||||||
if ($result = array_pop($result)) {
|
|
||||||
$result = array_pop(explode('var ', trim(trim(array_pop(explode('.', $result))), "'")));
|
|
||||||
}
|
|
||||||
// resolve name
|
|
||||||
// avoid $this->getName() because it calls $this->getCall()
|
|
||||||
preg_match('#\* *@name\s+([^\n]+)#', $this->entry, $name);
|
|
||||||
if (count($name)) {
|
|
||||||
$name = trim($name[1]);
|
|
||||||
} else {
|
|
||||||
$name = $result;
|
|
||||||
}
|
|
||||||
// compile function call syntax
|
|
||||||
if ($this->isFunction()) {
|
|
||||||
// compose parts
|
|
||||||
$result = array($result);
|
|
||||||
$params = $this->getParams();
|
|
||||||
foreach ($params as $param) {
|
|
||||||
$result[] = $param[1];
|
|
||||||
}
|
|
||||||
// format
|
|
||||||
$result = $name .'('. implode(array_slice($result, 1), ', ') .')';
|
|
||||||
$result = str_replace(', [', ' [, ', str_replace('], [', ', ', $result));
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_call = $result ? $result : $name;
|
|
||||||
return $this->_call;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the entry's `category` data.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {String} The entry's `category` data.
|
|
||||||
*/
|
|
||||||
public function getCategory() {
|
|
||||||
if (isset($this->_category)) {
|
|
||||||
return $this->_category;
|
|
||||||
}
|
|
||||||
|
|
||||||
preg_match('#\* *@category\s+([^\n]+)#', $this->entry, $result);
|
|
||||||
if (count($result)) {
|
|
||||||
$result = trim(preg_replace('/(?:^|\n)\s*\* ?/', ' ', $result[1]));
|
|
||||||
} else {
|
|
||||||
$result = $this->getType() == 'Function' ? 'Methods' : 'Properties';
|
|
||||||
}
|
|
||||||
$this->_category = $result;
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the entry's description.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {String} The entry's description.
|
|
||||||
*/
|
|
||||||
public function getDesc() {
|
|
||||||
if (isset($this->_desc)) {
|
|
||||||
return $this->_desc;
|
|
||||||
}
|
|
||||||
|
|
||||||
preg_match('#/\*\*(?:\s*\*)?([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result);
|
|
||||||
if (count($result)) {
|
|
||||||
$type = $this->getType();
|
|
||||||
$result = preg_replace('/:\n *\* */', ":<br>\n", $result[1]);
|
|
||||||
$result = preg_replace('/(?:^|\n) *\*\n *\* */', "\n\n", $result);
|
|
||||||
$result = preg_replace('/(?:^|\n) *\* ?/', ' ', $result);
|
|
||||||
$result = trim($result);
|
|
||||||
$result = ($type == 'Function' ? '' : '(' . str_replace('|', ', ', trim($type, '{}')) . '): ') . $result;
|
|
||||||
}
|
|
||||||
$this->_desc = $result;
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the entry's `example` data.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {String} The entry's `example` data.
|
|
||||||
*/
|
|
||||||
public function getExample() {
|
|
||||||
if (isset($this->_example)) {
|
|
||||||
return $this->_example;
|
|
||||||
}
|
|
||||||
|
|
||||||
preg_match('#\* *@example\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result);
|
|
||||||
if (count($result)) {
|
|
||||||
$result = trim(preg_replace('/(?:^|\n)\s*\* ?/', "\n", $result[1]));
|
|
||||||
$result = '```' . $this->lang . "\n" . $result . "\n```";
|
|
||||||
}
|
|
||||||
$this->_example = $result;
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the entry is an alias.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {Boolean} Returns `false`.
|
|
||||||
*/
|
|
||||||
public function isAlias() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the entry is a constructor.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {Boolean} Returns `true` if a constructor, else `false`.
|
|
||||||
*/
|
|
||||||
public function isCtor() {
|
|
||||||
if (!isset($this->_isCtor)) {
|
|
||||||
$this->_isCtor = !!preg_match('/\* *@constructor\b/', $this->entry);
|
|
||||||
}
|
|
||||||
return $this->_isCtor;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the entry is a license.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {Boolean} Returns `true` if a license, else `false`.
|
|
||||||
*/
|
|
||||||
public function isLicense() {
|
|
||||||
if (!isset($this->_isLicense)) {
|
|
||||||
$this->_isLicense = !!preg_match('/\* *@license\b/', $this->entry);
|
|
||||||
}
|
|
||||||
return $this->_isLicense;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the entry *is* assigned to a prototype.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {Boolean} Returns `true` if assigned to a prototype, else `false`.
|
|
||||||
*/
|
|
||||||
public function isPlugin() {
|
|
||||||
if (!isset($this->_isPlugin)) {
|
|
||||||
$this->_isPlugin = !$this->isCtor() && !$this->isPrivate() && !$this->isStatic();
|
|
||||||
}
|
|
||||||
return $this->_isPlugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the entry is private.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {Boolean} Returns `true` if private, else `false`.
|
|
||||||
*/
|
|
||||||
public function isPrivate() {
|
|
||||||
if (!isset($this->_isPrivate)) {
|
|
||||||
$this->_isPrivate = $this->isLicense() || !!preg_match('/\* *@private\b/', $this->entry) || !preg_match('/\* *@[a-z]+\b/', $this->entry);
|
|
||||||
}
|
|
||||||
return $this->_isPrivate;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the entry is *not* assigned to a prototype.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {Boolean} Returns `true` if not assigned to a prototype, else `false`.
|
|
||||||
*/
|
|
||||||
public function isStatic() {
|
|
||||||
if (isset($this->_isStatic)) {
|
|
||||||
return $this->_isStatic;
|
|
||||||
}
|
|
||||||
|
|
||||||
$public = !$this->isPrivate();
|
|
||||||
$result = $public && !!preg_match('/\* *@static\b/', $this->entry);
|
|
||||||
|
|
||||||
// set in cases where it isn't explicitly stated
|
|
||||||
if ($public && !$result) {
|
|
||||||
if ($parent = array_pop(preg_split('/[#.]/', $this->getMembers(0)))) {
|
|
||||||
foreach (Entry::getEntries($this->source) as $entry) {
|
|
||||||
$entry = new Entry($entry, $this->source);
|
|
||||||
if ($entry->getName() == $parent) {
|
|
||||||
$result = !$entry->isCtor();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$result = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->_isStatic = $result;
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolves the entry's line number.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {Number} The entry's line number.
|
|
||||||
*/
|
|
||||||
public function getLineNumber() {
|
|
||||||
if (!isset($this->_lineNumber)) {
|
|
||||||
preg_match_all('/\n/', substr($this->source, 0, strrpos($this->source, $this->entry) + strlen($this->entry)), $lines);
|
|
||||||
$this->_lineNumber = count(array_pop($lines)) + 1;
|
|
||||||
}
|
|
||||||
return $this->_lineNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the entry's `member` data.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @param {Number} $index The index of the array value to return.
|
|
||||||
* @returns {Array|String} The entry's `member` data.
|
|
||||||
*/
|
|
||||||
public function getMembers( $index = null ) {
|
|
||||||
if (!isset($this->_members)) {
|
|
||||||
preg_match('#\* *@member(?:Of)?\s+([^\n]+)#', $this->entry, $result);
|
|
||||||
if (count($result)) {
|
|
||||||
$result = trim(preg_replace('/(?:^|\n)\s*\* ?/', ' ', $result[1]));
|
|
||||||
$result = preg_split('/,\s*/', $result);
|
|
||||||
natsort($result);
|
|
||||||
}
|
|
||||||
$this->_members = $result;
|
|
||||||
}
|
|
||||||
return $index !== null
|
|
||||||
? @$this->_members[$index]
|
|
||||||
: $this->_members;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the entry's `name` data.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {String} The entry's `name` data.
|
|
||||||
*/
|
|
||||||
public function getName() {
|
|
||||||
if (isset($this->_name)) {
|
|
||||||
return $this->_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
preg_match('#\* *@name\s+([^\n]+)#', $this->entry, $result);
|
|
||||||
if (count($result)) {
|
|
||||||
$result = trim(preg_replace('/(?:^|\n)\s*\* ?/', ' ', $result[1]));
|
|
||||||
} else {
|
|
||||||
$result = array_shift(explode('(', $this->getCall()));
|
|
||||||
}
|
|
||||||
$this->_name = $result;
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the entry's `param` data.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @param {Number} $index The index of the array value to return.
|
|
||||||
* @returns {Array} The entry's `param` data.
|
|
||||||
*/
|
|
||||||
public function getParams( $index = null ) {
|
|
||||||
if (!isset($this->_params)) {
|
|
||||||
preg_match_all('#\* *@param\s+\{([^}]+)\}\s+(\[.+\]|[$\w|]+(?:\[.+\])?)\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#i', $this->entry, $result);
|
|
||||||
if (count($result = array_filter(array_slice($result, 1)))) {
|
|
||||||
// repurpose array
|
|
||||||
foreach ($result as $param) {
|
|
||||||
foreach ($param as $key => $value) {
|
|
||||||
if (!is_array($result[0][$key])) {
|
|
||||||
$result[0][$key] = array();
|
|
||||||
}
|
|
||||||
$result[0][$key][] = trim(preg_replace('/(?:^|\n)\s*\* */', ' ', $value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$result = $result[0];
|
|
||||||
}
|
|
||||||
$this->_params = $result;
|
|
||||||
}
|
|
||||||
return $index !== null
|
|
||||||
? @$this->_params[$index]
|
|
||||||
: $this->_params;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the entry's `returns` data.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {String} The entry's `returns` data.
|
|
||||||
*/
|
|
||||||
public function getReturns() {
|
|
||||||
if (isset($this->_returns)) {
|
|
||||||
return $this->_returns;
|
|
||||||
}
|
|
||||||
|
|
||||||
preg_match('#\* *@returns\s+\{([^}]+)\}\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result);
|
|
||||||
if (count($result)) {
|
|
||||||
$result = array_map('trim', array_slice($result, 1));
|
|
||||||
$result[0] = str_replace('|', ', ', $result[0]);
|
|
||||||
$result[1] = preg_replace('/(?:^|\n)\s*\* ?/', ' ', $result[1]);
|
|
||||||
}
|
|
||||||
$this->_returns = $result;
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the entry's `type` data.
|
|
||||||
*
|
|
||||||
* @memberOf Entry
|
|
||||||
* @returns {String} The entry's `type` data.
|
|
||||||
*/
|
|
||||||
public function getType() {
|
|
||||||
if (isset($this->_type)) {
|
|
||||||
return $this->_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
preg_match('#\* *@type\s+([^\n]+)#', $this->entry, $result);
|
|
||||||
if (count($result)) {
|
|
||||||
$result = trim(preg_replace('/(?:^|\n)\s*\* ?/', ' ', $result[1]));
|
|
||||||
} else {
|
|
||||||
$result = $this->isFunction() ? 'Function' : 'Unknown';
|
|
||||||
}
|
|
||||||
$this->_type = $result;
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
565
vendor/docdown/src/DocDown/Generator.php
vendored
565
vendor/docdown/src/DocDown/Generator.php
vendored
@@ -1,565 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require(dirname(__FILE__) . "/Entry.php");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates Markdown from JSDoc entries.
|
|
||||||
*/
|
|
||||||
class Generator {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The HTML for the close tag.
|
|
||||||
*
|
|
||||||
* @static
|
|
||||||
* @memberOf Generator
|
|
||||||
* @type String
|
|
||||||
*/
|
|
||||||
public $closeTag = "\n<!-- /div -->\n";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An array of JSDoc entries.
|
|
||||||
*
|
|
||||||
* @memberOf Generator
|
|
||||||
* @type Array
|
|
||||||
*/
|
|
||||||
public $entries = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The HTML for the open tag.
|
|
||||||
*
|
|
||||||
* @static
|
|
||||||
* @memberOf Generator
|
|
||||||
* @type String
|
|
||||||
*/
|
|
||||||
public $openTag = "\n<!-- div -->\n";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An options array used to configure the generator.
|
|
||||||
*
|
|
||||||
* @memberOf Generator
|
|
||||||
* @type Array
|
|
||||||
*/
|
|
||||||
public $options = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The file's source code.
|
|
||||||
*
|
|
||||||
* @memberOf Generator
|
|
||||||
* @type String
|
|
||||||
*/
|
|
||||||
public $source = '';
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Generator constructor.
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
* @param {String} $source The source code to parse.
|
|
||||||
* @param {Array} $options The options array.
|
|
||||||
*/
|
|
||||||
public function __construct( $source, $options = array() ) {
|
|
||||||
// juggle arguments
|
|
||||||
if (is_array($source)) {
|
|
||||||
$options = $source;
|
|
||||||
} else {
|
|
||||||
$options['source'] = $source;
|
|
||||||
}
|
|
||||||
if (isset($options['source']) && realpath($options['source'])) {
|
|
||||||
$options['path'] = $options['source'];
|
|
||||||
}
|
|
||||||
if (isset($options['path'])) {
|
|
||||||
preg_match('/(?<=\.)[a-z]+$/', $options['path'], $ext);
|
|
||||||
$options['source'] = file_get_contents($options['path']);
|
|
||||||
$ext = array_pop($ext);
|
|
||||||
|
|
||||||
if (!isset($options['lang']) && $ext) {
|
|
||||||
$options['lang'] = $ext;
|
|
||||||
}
|
|
||||||
if (!isset($options['title'])) {
|
|
||||||
$options['title'] = ucfirst(basename($options['path'])) . ' API documentation';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!isset($options['lang'])) {
|
|
||||||
$options['lang'] = 'js';
|
|
||||||
}
|
|
||||||
if (!isset($options['toc'])) {
|
|
||||||
$options['toc'] = 'properties';
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->options = $options;
|
|
||||||
$this->source = str_replace(PHP_EOL, "\n", $options['source']);
|
|
||||||
$this->entries = Entry::getEntries($this->source);
|
|
||||||
|
|
||||||
foreach ($this->entries as $index => $value) {
|
|
||||||
$this->entries[$index] = new Entry($value, $this->source, $options['lang']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Performs common string formatting operations.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @static
|
|
||||||
* @memberOf Generator
|
|
||||||
* @param {String} $string The string to format.
|
|
||||||
* @returns {String} The formatted string.
|
|
||||||
*/
|
|
||||||
private static function format( $string ) {
|
|
||||||
$counter = 0;
|
|
||||||
|
|
||||||
// tokenize inline code snippets
|
|
||||||
preg_match_all('/`[^`]+`/', $string, $tokenized);
|
|
||||||
$tokenized = $tokenized[0];
|
|
||||||
foreach ($tokenized as $snippet) {
|
|
||||||
$string = str_replace($snippet, '__token' . ($counter++) .'__', $string);
|
|
||||||
}
|
|
||||||
|
|
||||||
// italicize parentheses
|
|
||||||
$string = preg_replace('/(^|\s)(\([^)]+\))/', '$1*$2*', $string);
|
|
||||||
|
|
||||||
// mark numbers as inline code
|
|
||||||
$string = preg_replace('/ (-?\d+(?:.\d+)?)(?!\.[^\n])/', ' `$1`', $string);
|
|
||||||
|
|
||||||
// detokenize inline code snippets
|
|
||||||
$counter = 0;
|
|
||||||
foreach ($tokenized as $snippet) {
|
|
||||||
$string = str_replace('__token' . ($counter++) . '__', $snippet, $string);
|
|
||||||
}
|
|
||||||
|
|
||||||
return trim($string);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Modify a string by replacing named tokens with matching assoc. array values.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @static
|
|
||||||
* @memberOf Generator
|
|
||||||
* @param {String} $string The string to modify.
|
|
||||||
* @param {Array|Object} $object The template object.
|
|
||||||
* @returns {String} The modified string.
|
|
||||||
*/
|
|
||||||
private static function interpolate( $string, $object ) {
|
|
||||||
preg_match_all('/#\{([^}]+)\}/', $string, $tokens);
|
|
||||||
$tokens = array_unique(array_pop($tokens));
|
|
||||||
|
|
||||||
foreach ($tokens as $token) {
|
|
||||||
$pattern = '/#\{' . $token . '\}/';
|
|
||||||
$replacement = '';
|
|
||||||
|
|
||||||
if (is_object($object)) {
|
|
||||||
preg_match('/\(([^)]+?)\)$/', $token, $args);
|
|
||||||
$args = preg_split('/,\s*/', array_pop($args));
|
|
||||||
$method = 'get' . ucfirst(str_replace('/\([^)]+?\)$/', '', $token));
|
|
||||||
|
|
||||||
if (method_exists($object, $method)) {
|
|
||||||
$replacement = (string) call_user_func_array(array($object, $method), $args);
|
|
||||||
} else if (isset($object->{$token})) {
|
|
||||||
$replacement = (string) $object->{$token};
|
|
||||||
}
|
|
||||||
} else if (isset($object[$token])) {
|
|
||||||
$replacement = (string) $object[$token];
|
|
||||||
}
|
|
||||||
$string = preg_replace($pattern, trim($replacement), $string);
|
|
||||||
}
|
|
||||||
return Generator::format($string);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds the given `$entries` to the `$result` array.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @memberOf Generator
|
|
||||||
* @param {Array} $result The result array to modify.
|
|
||||||
* @param {Array} $entries The entries to add to the `$result`.
|
|
||||||
*/
|
|
||||||
private function addEntries( &$result, $entries ) {
|
|
||||||
foreach ($entries as $entry) {
|
|
||||||
// skip aliases
|
|
||||||
if ($entry->isAlias()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// name and description
|
|
||||||
array_push(
|
|
||||||
$result,
|
|
||||||
$this->openTag,
|
|
||||||
Generator::interpolate("### <a id=\"#{hash}\"></a>`#{member}#{separator}#{call}`\n<a href=\"##{hash}\">#</a> [Ⓢ](#{href} \"View in source\") [Ⓣ][1]\n\n#{desc}", $entry)
|
|
||||||
);
|
|
||||||
|
|
||||||
// @alias
|
|
||||||
if (count($aliases = $entry->getAliases())) {
|
|
||||||
array_push($result, '', '#### Aliases');
|
|
||||||
foreach ($aliases as $index => $alias) {
|
|
||||||
$aliases[$index] = $alias->getName();
|
|
||||||
}
|
|
||||||
$result[] = '*' . implode(', ', $aliases) . '*';
|
|
||||||
}
|
|
||||||
// @param
|
|
||||||
if (count($params = $entry->getParams())) {
|
|
||||||
array_push($result, '', '#### Arguments');
|
|
||||||
foreach ($params as $index => $param) {
|
|
||||||
$result[] = Generator::interpolate('#{num}. `#{name}` (#{type}): #{desc}', array(
|
|
||||||
'desc' => $param[2],
|
|
||||||
'name' => $param[1],
|
|
||||||
'num' => $index + 1,
|
|
||||||
'type' => $param[0]
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// @returns
|
|
||||||
if (count($returns = $entry->getReturns())) {
|
|
||||||
array_push(
|
|
||||||
$result, '',
|
|
||||||
'#### Returns',
|
|
||||||
Generator::interpolate('(#{type}): #{desc}', array('desc' => $returns[1], 'type' => $returns[0]))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// @example
|
|
||||||
if ($example = $entry->getExample()) {
|
|
||||||
array_push($result, '', '#### Example', $example);
|
|
||||||
}
|
|
||||||
array_push($result, "\n* * *", $this->closeTag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolves the entry's hash used to navigate the documentation.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @memberOf Generator
|
|
||||||
* @param {Number|Object} $entry The entry object.
|
|
||||||
* @param {String} $member The name of the member.
|
|
||||||
* @returns {String} The url hash.
|
|
||||||
*/
|
|
||||||
private function getHash( $entry, $member = '' ) {
|
|
||||||
$entry = is_numeric($entry) ? $this->entries[$entry] : $entry;
|
|
||||||
$member = !$member ? $entry->getMembers(0) : $member;
|
|
||||||
$result = ($member ? $member . ($entry->isPlugin() ? 'prototype' : '') : '') . $entry->getCall();
|
|
||||||
$result = preg_replace('/\(\[|\[\]/', '', $result);
|
|
||||||
$result = preg_replace('/[ =|\'"{}.()\]]/', '', $result);
|
|
||||||
$result = preg_replace('/[[#,]/', '-', $result);
|
|
||||||
return strtolower($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolves the entry's url for the specific line number.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @memberOf Generator
|
|
||||||
* @param {Number|Object} $entry The entry object.
|
|
||||||
* @returns {String} The url.
|
|
||||||
*/
|
|
||||||
private function getLineUrl( $entry ) {
|
|
||||||
$entry = is_numeric($entry) ? $this->entries($entry) : $entry;
|
|
||||||
return $this->options['url'] . '#L' . $entry->getLineNumber();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the character used to separate the entry's name from its member.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @memberOf Generator
|
|
||||||
* @param {Number|Object} $entry The entry object.
|
|
||||||
* @returns {String} The separator.
|
|
||||||
*/
|
|
||||||
private function getSeparator( $entry ) {
|
|
||||||
$entry = is_numeric($entry) ? $this->entries($entry) : $entry;
|
|
||||||
return $entry->isPlugin() ? '.prototype.' : '.';
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates Markdown from JSDoc entries.
|
|
||||||
*
|
|
||||||
* @memberOf Generator
|
|
||||||
* @returns {String} The rendered Markdown.
|
|
||||||
*/
|
|
||||||
public function generate() {
|
|
||||||
$api = array();
|
|
||||||
$byCategory = $this->options['toc'] == 'categories';
|
|
||||||
$categories = array();
|
|
||||||
$closeTag = $this->closeTag;
|
|
||||||
$compiling = false;
|
|
||||||
$openTag = $this->openTag;
|
|
||||||
$result = array('# ' . $this->options['title']);
|
|
||||||
$toc = 'toc';
|
|
||||||
|
|
||||||
// initialize $api array
|
|
||||||
foreach ($this->entries as $entry) {
|
|
||||||
// skip invalid or private entries
|
|
||||||
$name = $entry->getName();
|
|
||||||
if (!$name || $entry->isPrivate()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$members = $entry->getMembers();
|
|
||||||
$members = count($members) ? $members : array('');
|
|
||||||
|
|
||||||
foreach ($members as $member) {
|
|
||||||
// create api category arrays
|
|
||||||
if ($member && !isset($api[$member])) {
|
|
||||||
// create temporary entry to be replaced later
|
|
||||||
$api[$member] = new stdClass;
|
|
||||||
$api[$member]->static = array();
|
|
||||||
$api[$member]->plugin = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
// append entry to api member
|
|
||||||
if (!$member || $entry->isCtor() || ($entry->getType() == 'Object' &&
|
|
||||||
!preg_match('/[=:]\s*(?:null|undefined)\s*[,;]?$/', $entry->entry))) {
|
|
||||||
|
|
||||||
// assign the real entry, replacing the temporary entry if it exist
|
|
||||||
$member = ($member ? $member . ($entry->isPlugin() ? '#' : '.') : '') . $name;
|
|
||||||
$entry->static = @$api[$member] ? $api[$member]->static : array();
|
|
||||||
$entry->plugin = @$api[$member] ? $api[$member]->plugin : array();
|
|
||||||
|
|
||||||
$api[$member] = $entry;
|
|
||||||
foreach ($entry->getAliases() as $alias) {
|
|
||||||
$api[$member] = $alias;
|
|
||||||
$alias->static = array();
|
|
||||||
$alias->plugin = array();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ($entry->isStatic()) {
|
|
||||||
$api[$member]->static[] = $entry;
|
|
||||||
foreach ($entry->getAliases() as $alias) {
|
|
||||||
$api[$member]->static[] = $alias;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!$entry->isCtor()) {
|
|
||||||
$api[$member]->plugin[] = $entry;
|
|
||||||
foreach ($entry->getAliases() as $alias) {
|
|
||||||
$api[$member]->plugin[] = $alias;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// add properties to each entry
|
|
||||||
foreach ($api as $entry) {
|
|
||||||
$entry->hash = $this->getHash($entry);
|
|
||||||
$entry->href = $this->getLineUrl($entry);
|
|
||||||
|
|
||||||
$member = $entry->getMembers(0);
|
|
||||||
$member = ($member ? $member . ($entry->isPlugin() ? '.prototype.' : '.') : '') . $entry->getName();
|
|
||||||
$entry->member = preg_replace('/' . $entry->getName() . '$/', '', $member);
|
|
||||||
|
|
||||||
// add properties to static and plugin sub-entries
|
|
||||||
foreach (array('static', 'plugin') as $kind) {
|
|
||||||
foreach ($entry->{$kind} as $subentry) {
|
|
||||||
$subentry->hash = $this->getHash($subentry);
|
|
||||||
$subentry->href = $this->getLineUrl($subentry);
|
|
||||||
$subentry->member = $member;
|
|
||||||
$subentry->separator = $this->getSeparator($subentry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// custom sort for root level entries
|
|
||||||
// TODO: see how well it handles deeper namespace traversal
|
|
||||||
function sortCompare($a, $b) {
|
|
||||||
$score = array( 'a' => 0, 'b' => 0);
|
|
||||||
foreach (array( 'a' => $a, 'b' => $b) as $key => $value) {
|
|
||||||
// capitalized properties are last
|
|
||||||
if (preg_match('/[#.][A-Z]/', $value)) {
|
|
||||||
$score[$key] = 0;
|
|
||||||
}
|
|
||||||
// lowercase prototype properties are next to last
|
|
||||||
else if (preg_match('/#[a-z]/', $value)) {
|
|
||||||
$score[$key] = 1;
|
|
||||||
}
|
|
||||||
// lowercase static properties next to first
|
|
||||||
else if (preg_match('/\.[a-z]/', $value)) {
|
|
||||||
$score[$key] = 2;
|
|
||||||
}
|
|
||||||
// root properties are first
|
|
||||||
else if (preg_match('/^[^#.]+$/', $value)) {
|
|
||||||
$score[$key] = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$score = $score['b'] - $score['a'];
|
|
||||||
return $score ? $score : strcasecmp($a, $b);
|
|
||||||
}
|
|
||||||
|
|
||||||
uksort($api, 'sortCompare');
|
|
||||||
|
|
||||||
// sort static and plugin sub-entries
|
|
||||||
foreach ($api as $entry) {
|
|
||||||
foreach (array('static', 'plugin') as $kind) {
|
|
||||||
$sortBy = array( 'a' => array(), 'b' => array(), 'c' => array() );
|
|
||||||
foreach ($entry->{$kind} as $subentry) {
|
|
||||||
$name = $subentry->getName();
|
|
||||||
// functions w/o ALL-CAPs names are last
|
|
||||||
$sortBy['a'][] = $subentry->getType() == 'Function' && !preg_match('/^[A-Z_]+$/', $name);
|
|
||||||
// ALL-CAPs properties first
|
|
||||||
$sortBy['b'][] = preg_match('/^[A-Z_]+$/', $name);
|
|
||||||
// lowercase alphanumeric sort
|
|
||||||
$sortBy['c'][] = strtolower($name);
|
|
||||||
}
|
|
||||||
array_multisort($sortBy['a'], SORT_ASC, $sortBy['b'], SORT_DESC, $sortBy['c'], SORT_ASC, $entry->{$kind});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// add categories
|
|
||||||
foreach ($api as $entry) {
|
|
||||||
$categories[$entry->getCategory()][] = $entry;
|
|
||||||
foreach (array('static', 'plugin') as $kind) {
|
|
||||||
foreach ($entry->{$kind} as $subentry) {
|
|
||||||
$categories[$subentry->getCategory()][] = $subentry;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// sort categories
|
|
||||||
ksort($categories);
|
|
||||||
|
|
||||||
foreach(array('Methods', 'Properties') as $category) {
|
|
||||||
if (isset($categories[$category])) {
|
|
||||||
$entries = $categories[$category];
|
|
||||||
unset($categories[$category]);
|
|
||||||
$categories[$category] = $entries;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// compile TOC
|
|
||||||
$result[] = $openTag;
|
|
||||||
|
|
||||||
// compile TOC by categories
|
|
||||||
if ($byCategory) {
|
|
||||||
foreach ($categories as $category => $entries) {
|
|
||||||
if ($compiling) {
|
|
||||||
$result[] = $closeTag;
|
|
||||||
} else {
|
|
||||||
$compiling = true;
|
|
||||||
}
|
|
||||||
// assign TOC hash
|
|
||||||
if (count($result) == 2) {
|
|
||||||
$toc = $category;
|
|
||||||
}
|
|
||||||
// add category
|
|
||||||
array_push(
|
|
||||||
$result,
|
|
||||||
$openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $category . '`'
|
|
||||||
);
|
|
||||||
// add entries
|
|
||||||
foreach ($entries as $entry) {
|
|
||||||
$result[] = Generator::interpolate('* [`#{member}#{separator}#{name}`](##{hash})', $entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// compile TOC by namespace
|
|
||||||
else {
|
|
||||||
foreach ($api as $entry) {
|
|
||||||
if ($compiling) {
|
|
||||||
$result[] = $closeTag;
|
|
||||||
} else {
|
|
||||||
$compiling = true;
|
|
||||||
}
|
|
||||||
$member = $entry->member . $entry->getName();
|
|
||||||
|
|
||||||
// assign TOC hash
|
|
||||||
if (count($result) == 2) {
|
|
||||||
$toc = $member;
|
|
||||||
}
|
|
||||||
// add root entry
|
|
||||||
array_push(
|
|
||||||
$result,
|
|
||||||
$openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $member . '`',
|
|
||||||
Generator::interpolate('* [`' . $member . '`](##{hash})', $entry)
|
|
||||||
);
|
|
||||||
|
|
||||||
// add static and plugin sub-entries
|
|
||||||
foreach (array('static', 'plugin') as $kind) {
|
|
||||||
if ($kind == 'plugin' && count($entry->plugin)) {
|
|
||||||
array_push(
|
|
||||||
$result,
|
|
||||||
$closeTag,
|
|
||||||
$openTag,
|
|
||||||
'## `' . $member . ($entry->isCtor() ? '.prototype`' : '`')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
foreach ($entry->{$kind} as $subentry) {
|
|
||||||
$subentry->member = $member;
|
|
||||||
$result[] = Generator::interpolate('* [`#{member}#{separator}#{name}`](##{hash})', $subentry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
array_push($result, $closeTag, $closeTag);
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// compile content
|
|
||||||
$compiling = false;
|
|
||||||
$result[] = $openTag;
|
|
||||||
|
|
||||||
if ($byCategory) {
|
|
||||||
foreach ($categories as $category => $entries) {
|
|
||||||
if ($compiling) {
|
|
||||||
$result[] = $closeTag;
|
|
||||||
} else {
|
|
||||||
$compiling = true;
|
|
||||||
}
|
|
||||||
if ($category != 'Methods' && $category != 'Properties') {
|
|
||||||
$category = '“' . $category . '” Methods';
|
|
||||||
}
|
|
||||||
array_push($result, $openTag, '## `' . $category . '`');
|
|
||||||
$this->addEntries($result, $entries);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
foreach ($api as $entry) {
|
|
||||||
// skip aliases
|
|
||||||
if ($entry->isAlias()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ($compiling) {
|
|
||||||
$result[] = $closeTag;
|
|
||||||
} else {
|
|
||||||
$compiling = true;
|
|
||||||
}
|
|
||||||
// add root entry name
|
|
||||||
$member = $entry->member . $entry->getName();
|
|
||||||
array_push($result, $openTag, '## `' . $member . '`');
|
|
||||||
|
|
||||||
foreach (array($entry, 'static', 'plugin') as $kind) {
|
|
||||||
$subentries = is_string($kind) ? $entry->{$kind} : array($kind);
|
|
||||||
|
|
||||||
// add sub-entry name
|
|
||||||
if ($kind != 'static' && $entry->getType() != 'Object' &&
|
|
||||||
count($subentries) && $subentries[0] != $kind) {
|
|
||||||
if ($kind == 'plugin') {
|
|
||||||
$result[] = $closeTag;
|
|
||||||
}
|
|
||||||
array_push(
|
|
||||||
$result,
|
|
||||||
$openTag,
|
|
||||||
'## `' . $member . ($kind == 'plugin' ? '.prototype`' : '`')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$this->addEntries($result, $subentries);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// close tags add TOC link reference
|
|
||||||
array_push($result, $closeTag, $closeTag, '', ' [1]: #' . $toc . ' "Jump back to the TOC."');
|
|
||||||
|
|
||||||
// cleanup whitespace
|
|
||||||
return trim(preg_replace('/ +\n/', "\n", join($result, "\n")));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
@@ -6258,7 +6258,7 @@ FBL.Firebug =
|
|||||||
{
|
{
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
version: "Firebug Lite 1.4.0",
|
version: "Firebug Lite 1.4.0",
|
||||||
revision: "$Revision: 11967 $",
|
revision: "$Revision$",
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
modules: modules,
|
modules: modules,
|
||||||
|
|||||||
21
vendor/jquery/MIT-LICENSE.txt
vendored
21
vendor/jquery/MIT-LICENSE.txt
vendored
@@ -1,21 +0,0 @@
|
|||||||
Copyright 2012 jQuery Foundation and other contributors
|
|
||||||
http://jquery.com/
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
417
vendor/jquery/README.md
vendored
417
vendor/jquery/README.md
vendored
@@ -1,417 +0,0 @@
|
|||||||
[jQuery](http://jquery.com/) - New Wave JavaScript
|
|
||||||
==================================================
|
|
||||||
|
|
||||||
Contribution Guides
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
In the spirit of open source software development, jQuery always encourages community code contribution. To help you get started and before you jump into writing code, be sure to read these important contribution guidelines thoroughly:
|
|
||||||
|
|
||||||
1. [Getting Involved](http://docs.jquery.com/Getting_Involved)
|
|
||||||
2. [Core Style Guide](http://docs.jquery.com/JQuery_Core_Style_Guidelines)
|
|
||||||
3. [Tips For Bug Patching](http://docs.jquery.com/Tips_for_jQuery_Bug_Patching)
|
|
||||||
|
|
||||||
|
|
||||||
What you need to build your own jQuery
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
In order to build jQuery, you need to have GNU make 3.8 or later, Node.js/npm latest, and git 1.7 or later.
|
|
||||||
(Earlier versions might work OK, but are not tested.)
|
|
||||||
|
|
||||||
Windows users have two options:
|
|
||||||
|
|
||||||
1. Install [msysgit](https://code.google.com/p/msysgit/) (Full installer for official Git),
|
|
||||||
[GNU make for Windows](http://gnuwin32.sourceforge.net/packages/make.htm), and a
|
|
||||||
[binary version of Node.js](http://node-js.prcn.co.cc/). Make sure all three packages are installed to the same
|
|
||||||
location (by default, this is C:\Program Files\Git).
|
|
||||||
2. Install [Cygwin](http://cygwin.com/) (make sure you install the git, make, and which packages), then either follow
|
|
||||||
the [Node.js build instructions](https://github.com/ry/node/wiki/Building-node.js-on-Cygwin-%28Windows%29) or install
|
|
||||||
the [binary version of Node.js](http://node-js.prcn.co.cc/).
|
|
||||||
|
|
||||||
Mac OS users should install Xcode (comes on your Mac OS install DVD, or downloadable from
|
|
||||||
[Apple's Xcode site](http://developer.apple.com/technologies/xcode.html)) and
|
|
||||||
[Homebrew](http://mxcl.github.com/homebrew/). Once Homebrew is installed, run `brew install git` to install git,
|
|
||||||
and `brew install node` to install Node.js.
|
|
||||||
|
|
||||||
Linux/BSD users should use their appropriate package managers to install make, git, and node, or build from source
|
|
||||||
if you swing that way. Easy-peasy.
|
|
||||||
|
|
||||||
|
|
||||||
How to build your own jQuery
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
First, clone a copy of the main jQuery git repo by running:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone git://github.com/jquery/jquery.git
|
|
||||||
```
|
|
||||||
|
|
||||||
Enter the directory and install the Node dependencies:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd jquery && npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
Make sure you have `grunt` installed by testing:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt -version
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Then, to get a complete, minified (w/ Uglify.js), linted (w/ JSHint) version of jQuery, type the following:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
The built version of jQuery will be put in the `dist/` subdirectory.
|
|
||||||
|
|
||||||
|
|
||||||
### Modules (new in 1.8)
|
|
||||||
|
|
||||||
Starting in jQuery 1.8, special builds can now be created that optionally exclude or include any of the following modules:
|
|
||||||
|
|
||||||
- ajax
|
|
||||||
- css
|
|
||||||
- dimensions
|
|
||||||
- effects
|
|
||||||
- offset
|
|
||||||
|
|
||||||
|
|
||||||
Before creating a custom build for use in production, be sure to check out the latest stable version:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git pull; git checkout $(git describe --abbrev=0 --tags)
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, make sure all Node dependencies are installed and all Git submodules are checked out:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install && grunt
|
|
||||||
```
|
|
||||||
|
|
||||||
To create a custom build, use the following special `grunt` commands:
|
|
||||||
|
|
||||||
Exclude **ajax**:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt custom:-ajax
|
|
||||||
```
|
|
||||||
|
|
||||||
Exclude **css**:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt custom:-css
|
|
||||||
```
|
|
||||||
|
|
||||||
Exclude **deprecated**:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt custom:-deprecated
|
|
||||||
```
|
|
||||||
|
|
||||||
Exclude **dimensions**:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt custom:-dimensions
|
|
||||||
```
|
|
||||||
|
|
||||||
Exclude **effects**:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt custom:-effects
|
|
||||||
```
|
|
||||||
|
|
||||||
Exclude **offset**:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt custom:-offset
|
|
||||||
```
|
|
||||||
|
|
||||||
Exclude **all** optional modules:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt custom:-ajax,-css,-deprecated,-dimensions,-effects,-offset
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
Note: dependencies will be handled internally, by the build process.
|
|
||||||
|
|
||||||
|
|
||||||
Running the Unit Tests
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
Start grunt to auto-build jQuery as you work:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd jquery && grunt watch
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
Run the unit tests with a local server that supports PHP. No database is required. Pre-configured php local servers are available for Windows and Mac. Here are some options:
|
|
||||||
|
|
||||||
- Windows: [WAMP download](http://www.wampserver.com/en/)
|
|
||||||
- Mac: [MAMP download](http://www.mamp.info/en/index.html)
|
|
||||||
- Linux: [Setting up LAMP](https://www.linux.com/learn/tutorials/288158-easy-lamp-server-installation)
|
|
||||||
- [Mongoose (most platforms)](http://code.google.com/p/mongoose/)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Building to a different directory
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
If you want to build jQuery to a directory that is different from the default location:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt && grunt dist:/path/to/special/location/
|
|
||||||
```
|
|
||||||
With this example, the output files would be:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
/path/to/special/location/jquery.js
|
|
||||||
/path/to/special/location/jquery.min.js
|
|
||||||
```
|
|
||||||
|
|
||||||
If you want to add a permanent copy destination, create a file in `dist/` called ".destination.json". Inside the file, paste and customize the following:
|
|
||||||
|
|
||||||
```json
|
|
||||||
|
|
||||||
{
|
|
||||||
"/Absolute/path/to/other/destination": true
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
Additionally, both methods can be combined.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Updating Submodules
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
Update the submodules to what is probably the latest upstream code.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt update_submodules
|
|
||||||
```
|
|
||||||
|
|
||||||
Note: This task will also be run any time the default `grunt` command is used.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Git for dummies
|
|
||||||
---------------
|
|
||||||
|
|
||||||
As the source code is handled by the version control system Git, it's useful to know some features used.
|
|
||||||
|
|
||||||
### Submodules ###
|
|
||||||
|
|
||||||
The repository uses submodules, which normally are handled directly by the Makefile, but sometimes you want to
|
|
||||||
be able to work with them manually.
|
|
||||||
|
|
||||||
Following are the steps to manually get the submodules:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/jquery/jquery.git
|
|
||||||
cd jquery
|
|
||||||
git submodule init
|
|
||||||
git submodule update
|
|
||||||
```
|
|
||||||
|
|
||||||
Or:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/jquery/jquery.git
|
|
||||||
cd jquery
|
|
||||||
git submodule update --init
|
|
||||||
```
|
|
||||||
|
|
||||||
Or:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone --recursive https://github.com/jquery/jquery.git
|
|
||||||
cd jquery
|
|
||||||
```
|
|
||||||
|
|
||||||
If you want to work inside a submodule, it is possible, but first you need to checkout a branch:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd src/sizzle
|
|
||||||
git checkout master
|
|
||||||
```
|
|
||||||
|
|
||||||
After you've committed your changes to the submodule, you'll update the jquery project to point to the new commit,
|
|
||||||
but remember to push the submodule changes before pushing the new jquery commit:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd src/sizzle
|
|
||||||
git push origin master
|
|
||||||
cd ..
|
|
||||||
git add src/sizzle
|
|
||||||
git commit
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### cleaning ###
|
|
||||||
|
|
||||||
If you want to purge your working directory back to the status of upstream, following commands can be used (remember everything you've worked on is gone after these):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git reset --hard upstream/master
|
|
||||||
git clean -fdx
|
|
||||||
```
|
|
||||||
|
|
||||||
### rebasing ###
|
|
||||||
|
|
||||||
For feature/topic branches, you should always used the `--rebase` flag to `git pull`, or if you are usually handling many temporary "to be in a github pull request" branches, run following to automate this:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git config branch.autosetuprebase local
|
|
||||||
```
|
|
||||||
(see `man git-config` for more information)
|
|
||||||
|
|
||||||
### handling merge conflicts ###
|
|
||||||
|
|
||||||
If you're getting merge conflicts when merging, instead of editing the conflicted files manually, you can use the feature
|
|
||||||
`git mergetool`. Even though the default tool `xxdiff` looks awful/old, it's rather useful.
|
|
||||||
|
|
||||||
Following are some commands that can be used there:
|
|
||||||
|
|
||||||
* `Ctrl + Alt + M` - automerge as much as possible
|
|
||||||
* `b` - jump to next merge conflict
|
|
||||||
* `s` - change the order of the conflicted lines
|
|
||||||
* `u` - undo an merge
|
|
||||||
* `left mouse button` - mark a block to be the winner
|
|
||||||
* `middle mouse button` - mark a line to be the winner
|
|
||||||
* `Ctrl + S` - save
|
|
||||||
* `Ctrl + Q` - quit
|
|
||||||
|
|
||||||
[QUnit](http://docs.jquery.com/QUnit) Reference
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
### Test methods ###
|
|
||||||
|
|
||||||
```js
|
|
||||||
expect( numAssertions );
|
|
||||||
stop();
|
|
||||||
start();
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
note: QUnit's eventual addition of an argument to stop/start is ignored in this test suite so that start and stop can be passed as callbacks without worrying about their parameters
|
|
||||||
|
|
||||||
### Test assertions ###
|
|
||||||
|
|
||||||
|
|
||||||
```js
|
|
||||||
ok( value, [message] );
|
|
||||||
equal( actual, expected, [message] );
|
|
||||||
notEqual( actual, expected, [message] );
|
|
||||||
deepEqual( actual, expected, [message] );
|
|
||||||
notDeepEqual( actual, expected, [message] );
|
|
||||||
strictEqual( actual, expected, [message] );
|
|
||||||
notStrictEqual( actual, expected, [message] );
|
|
||||||
raises( block, [expected], [message] );
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
Test Suite Convenience Methods Reference (See [test/data/testinit.js](https://github.com/jquery/jquery/blob/master/test/data/testinit.js))
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
### Returns an array of elements with the given IDs ###
|
|
||||||
|
|
||||||
```js
|
|
||||||
q( ... );
|
|
||||||
```
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
q("main", "foo", "bar");
|
|
||||||
|
|
||||||
=> [ div#main, span#foo, input#bar ]
|
|
||||||
```
|
|
||||||
|
|
||||||
### Asserts that a selection matches the given IDs ###
|
|
||||||
|
|
||||||
```js
|
|
||||||
t( testName, selector, [ "array", "of", "ids" ] );
|
|
||||||
```
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
t("Check for something", "//[a]", ["foo", "baar"]);
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Fires a native DOM event without going through jQuery ###
|
|
||||||
|
|
||||||
```js
|
|
||||||
fireNative( node, eventType )
|
|
||||||
```
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
fireNative( jQuery("#elem")[0], "click" );
|
|
||||||
```
|
|
||||||
|
|
||||||
### Add random number to url to stop caching ###
|
|
||||||
|
|
||||||
```js
|
|
||||||
url( "some/url.php" );
|
|
||||||
```
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
url("data/test.html");
|
|
||||||
|
|
||||||
=> "data/test.html?10538358428943"
|
|
||||||
|
|
||||||
|
|
||||||
url("data/test.php?foo=bar");
|
|
||||||
|
|
||||||
=> "data/test.php?foo=bar&10538358345554"
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### Load tests in an iframe ###
|
|
||||||
|
|
||||||
Loads a given page constructing a url with fileName: `"./data/" + fileName + ".html"`
|
|
||||||
and fires the given callback on jQuery ready (using the jQuery loading from that page)
|
|
||||||
and passes the iFrame's jQuery to the callback.
|
|
||||||
|
|
||||||
```js
|
|
||||||
testIframe( fileName, testName, callback );
|
|
||||||
```
|
|
||||||
|
|
||||||
Callback arguments:
|
|
||||||
|
|
||||||
```js
|
|
||||||
callback( jQueryFromIFrame, iFrameWindow, iFrameDocument );
|
|
||||||
```
|
|
||||||
|
|
||||||
### Load tests in an iframe (window.iframeCallback) ###
|
|
||||||
|
|
||||||
Loads a given page constructing a url with fileName: `"./data/" + fileName + ".html"`
|
|
||||||
The given callback is fired when window.iframeCallback is called by the page
|
|
||||||
The arguments passed to the callback are the same as the
|
|
||||||
arguments passed to window.iframeCallback, whatever that may be
|
|
||||||
|
|
||||||
```js
|
|
||||||
testIframeWithCallback( testName, fileName, callback );
|
|
||||||
```
|
|
||||||
|
|
||||||
Questions?
|
|
||||||
----------
|
|
||||||
|
|
||||||
If you have any questions, please feel free to ask on the
|
|
||||||
[Developing jQuery Core forum](http://forum.jquery.com/developing-jquery-core) or in #jquery on irc.freenode.net.
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user