browsed 0.2.8 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +28 -28
  3. data/browsed.gemspec +3 -4
  4. data/lib/browsed.rb +1 -1
  5. data/lib/browsed/browser.rb +2 -2
  6. data/lib/browsed/chrome.rb +2 -2
  7. data/lib/browsed/client.rb +4 -3
  8. data/lib/browsed/firefox.rb +2 -2
  9. data/lib/browsed/version.rb +1 -1
  10. metadata +13 -166
  11. data/lib/browsed/proxies/proxy-chain-server/node_modules/.bin/portastic +0 -1
  12. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/LICENSE +0 -21
  13. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/README.md +0 -57
  14. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/changelog.md +0 -1
  15. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/browser/bluebird.core.js +0 -3824
  16. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/browser/bluebird.core.min.js +0 -31
  17. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/browser/bluebird.js +0 -5666
  18. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/browser/bluebird.min.js +0 -31
  19. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/any.js +0 -21
  20. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/assert.js +0 -55
  21. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/async.js +0 -165
  22. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/bind.js +0 -67
  23. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/bluebird.js +0 -11
  24. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/call_get.js +0 -123
  25. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/cancel.js +0 -129
  26. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/catch_filter.js +0 -42
  27. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/context.js +0 -69
  28. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/debuggability.js +0 -934
  29. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/direct_resolve.js +0 -46
  30. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/each.js +0 -30
  31. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/errors.js +0 -116
  32. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/es5.js +0 -80
  33. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/filter.js +0 -12
  34. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/finally.js +0 -146
  35. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/generators.js +0 -223
  36. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/join.js +0 -168
  37. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/map.js +0 -168
  38. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/method.js +0 -55
  39. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/nodeback.js +0 -51
  40. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/nodeify.js +0 -58
  41. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/promise.js +0 -789
  42. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/promise_array.js +0 -185
  43. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/promisify.js +0 -314
  44. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/props.js +0 -118
  45. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/queue.js +0 -73
  46. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/race.js +0 -49
  47. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/reduce.js +0 -172
  48. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/schedule.js +0 -62
  49. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/settle.js +0 -43
  50. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/some.js +0 -148
  51. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/synchronous_inspection.js +0 -103
  52. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/thenables.js +0 -86
  53. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/timers.js +0 -93
  54. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/using.js +0 -226
  55. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/js/release/util.js +0 -389
  56. data/lib/browsed/proxies/proxy-chain-server/node_modules/bluebird/package.json +0 -102
  57. data/lib/browsed/proxies/proxy-chain-server/node_modules/commander/CHANGELOG.md +0 -408
  58. data/lib/browsed/proxies/proxy-chain-server/node_modules/commander/LICENSE +0 -22
  59. data/lib/browsed/proxies/proxy-chain-server/node_modules/commander/Readme.md +0 -428
  60. data/lib/browsed/proxies/proxy-chain-server/node_modules/commander/index.js +0 -1224
  61. data/lib/browsed/proxies/proxy-chain-server/node_modules/commander/package.json +0 -70
  62. data/lib/browsed/proxies/proxy-chain-server/node_modules/commander/typings/index.d.ts +0 -310
  63. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/.coveralls.yml +0 -1
  64. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/.eslintrc +0 -11
  65. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/.npmignore +0 -9
  66. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/.travis.yml +0 -14
  67. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/CHANGELOG.md +0 -362
  68. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/LICENSE +0 -19
  69. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/Makefile +0 -50
  70. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/README.md +0 -312
  71. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/component.json +0 -19
  72. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/karma.conf.js +0 -70
  73. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/node.js +0 -1
  74. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/package.json +0 -88
  75. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/src/browser.js +0 -185
  76. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/src/debug.js +0 -202
  77. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/src/index.js +0 -10
  78. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/src/inspector-log.js +0 -15
  79. data/lib/browsed/proxies/proxy-chain-server/node_modules/debug/src/node.js +0 -248
  80. data/lib/browsed/proxies/proxy-chain-server/node_modules/ms/index.js +0 -152
  81. data/lib/browsed/proxies/proxy-chain-server/node_modules/ms/license.md +0 -21
  82. data/lib/browsed/proxies/proxy-chain-server/node_modules/ms/package.json +0 -69
  83. data/lib/browsed/proxies/proxy-chain-server/node_modules/ms/readme.md +0 -51
  84. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/LICENSE +0 -13
  85. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/README.md +0 -148
  86. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/bin/portastic +0 -65
  87. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/history.md +0 -7
  88. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/index.js +0 -4
  89. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/lib/monitor.js +0 -59
  90. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/lib/portastic.js +0 -167
  91. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/LICENSE +0 -21
  92. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/README.md +0 -677
  93. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/changelog.md +0 -1730
  94. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/browser/bluebird.js +0 -4892
  95. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/browser/bluebird.min.js +0 -31
  96. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/any.js +0 -21
  97. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/assert.js +0 -55
  98. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/async.js +0 -150
  99. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/bind.js +0 -72
  100. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/bluebird.js +0 -11
  101. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/call_get.js +0 -123
  102. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/cancel.js +0 -48
  103. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/captured_trace.js +0 -493
  104. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/catch_filter.js +0 -66
  105. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/context.js +0 -38
  106. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/debuggability.js +0 -162
  107. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/direct_resolve.js +0 -63
  108. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/each.js +0 -12
  109. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/errors.js +0 -111
  110. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/es5.js +0 -80
  111. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/filter.js +0 -12
  112. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/finally.js +0 -98
  113. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/generators.js +0 -136
  114. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/join.js +0 -107
  115. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/map.js +0 -133
  116. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/method.js +0 -44
  117. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/nodeify.js +0 -59
  118. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/progress.js +0 -76
  119. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/promise.js +0 -759
  120. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/promise_array.js +0 -142
  121. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/promise_resolver.js +0 -123
  122. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/promisify.js +0 -307
  123. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/props.js +0 -79
  124. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/queue.js +0 -90
  125. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/race.js +0 -47
  126. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/reduce.js +0 -148
  127. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/schedule.js +0 -35
  128. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/settle.js +0 -40
  129. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/some.js +0 -125
  130. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/synchronous_inspection.js +0 -94
  131. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/thenables.js +0 -84
  132. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/timers.js +0 -64
  133. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/using.js +0 -213
  134. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/js/main/util.js +0 -321
  135. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/node_modules/bluebird/package.json +0 -103
  136. data/lib/browsed/proxies/proxy-chain-server/node_modules/portastic/package.json +0 -69
  137. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/CHANGELOG.md +0 -109
  138. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/LICENSE +0 -201
  139. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/README.md +0 -278
  140. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/anonymize_proxy.js +0 -100
  141. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/handler_base.js +0 -319
  142. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/handler_custom_response.js +0 -96
  143. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/handler_forward.js +0 -173
  144. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/handler_tunnel_chain.js +0 -132
  145. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/handler_tunnel_direct.js +0 -89
  146. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/handler_tunnel_tcp_chain.js +0 -271
  147. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/index.js +0 -26
  148. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/run_locally.js +0 -66
  149. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/server.js +0 -595
  150. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/tcp_tunnel.js +0 -138
  151. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/testing_tcp_service.js +0 -37
  152. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/build/tools.js +0 -220
  153. data/lib/browsed/proxies/proxy-chain-server/node_modules/proxy-chain/package.json +0 -104
  154. data/lib/browsed/proxies/proxy-chain-server/node_modules/underscore/LICENSE +0 -23
  155. data/lib/browsed/proxies/proxy-chain-server/node_modules/underscore/README.md +0 -28
  156. data/lib/browsed/proxies/proxy-chain-server/node_modules/underscore/package.json +0 -81
  157. data/lib/browsed/proxies/proxy-chain-server/node_modules/underscore/underscore-min.js +0 -5
  158. data/lib/browsed/proxies/proxy-chain-server/node_modules/underscore/underscore-min.js.map +0 -1
  159. data/lib/browsed/proxies/proxy-chain-server/node_modules/underscore/underscore.js +0 -1692
  160. data/lib/browsed/proxies/proxy-chain-server/package-lock.json +0 -63
  161. data/lib/browsed/proxies/proxy-chain-server/package.json +0 -15
  162. data/lib/browsed/proxies/proxy-chain-server/server.js +0 -25
  163. data/lib/browsed/proxies/proxy_chain.rb +0 -39
@@ -1,23 +0,0 @@
1
- Copyright (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative
2
- Reporters & Editors
3
-
4
- Permission is hereby granted, free of charge, to any person
5
- obtaining a copy of this software and associated documentation
6
- files (the "Software"), to deal in the Software without
7
- restriction, including without limitation the rights to use,
8
- copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the
10
- Software is furnished to do so, subject to the following
11
- conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
- OTHER DEALINGS IN THE SOFTWARE.
@@ -1,28 +0,0 @@
1
- __
2
- /\ \ __
3
- __ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____
4
- /\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\
5
- \ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\
6
- \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/
7
- \/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/
8
- \ \____/
9
- \/___/
10
-
11
- Underscore.js is a utility-belt library for JavaScript that provides
12
- support for the usual functional suspects (each, map, reduce, filter...)
13
- without extending any core JavaScript objects.
14
-
15
- For Docs, License, Tests, and pre-packed downloads, see:
16
- http://underscorejs.org
17
-
18
- For support and questions, please use
19
- [the gitter channel](https://gitter.im/jashkenas/underscore)
20
- or [stackoverflow](http://stackoverflow.com/search?q=underscore.js)
21
-
22
- Underscore is an open-sourced component of DocumentCloud:
23
- https://github.com/documentcloud
24
-
25
- Many thanks to our contributors:
26
- https://github.com/jashkenas/underscore/contributors
27
-
28
- This project adheres to a [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code.
@@ -1,81 +0,0 @@
1
- {
2
- "_from": "underscore@^1.9.1",
3
- "_id": "underscore@1.9.1",
4
- "_inBundle": false,
5
- "_integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==",
6
- "_location": "/underscore",
7
- "_phantomChildren": {},
8
- "_requested": {
9
- "type": "range",
10
- "registry": true,
11
- "raw": "underscore@^1.9.1",
12
- "name": "underscore",
13
- "escapedName": "underscore",
14
- "rawSpec": "^1.9.1",
15
- "saveSpec": null,
16
- "fetchSpec": "^1.9.1"
17
- },
18
- "_requiredBy": [
19
- "/proxy-chain"
20
- ],
21
- "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
22
- "_shasum": "06dce34a0e68a7babc29b365b8e74b8925203961",
23
- "_spec": "underscore@^1.9.1",
24
- "_where": "/Users/sebastianjohnsson/Programming/Javascript/proxy-chain-server/node_modules/proxy-chain",
25
- "author": {
26
- "name": "Jeremy Ashkenas",
27
- "email": "jeremy@documentcloud.org"
28
- },
29
- "bugs": {
30
- "url": "https://github.com/jashkenas/underscore/issues"
31
- },
32
- "bundleDependencies": false,
33
- "deprecated": false,
34
- "description": "JavaScript's functional programming helper library.",
35
- "devDependencies": {
36
- "coveralls": "^2.11.2",
37
- "docco": "*",
38
- "eslint": "1.10.x",
39
- "gzip-size-cli": "^1.0.0",
40
- "karma": "^0.13.13",
41
- "karma-qunit": "~2.0.1",
42
- "nyc": "^2.1.3",
43
- "pretty-bytes-cli": "^1.0.0",
44
- "qunit": "^2.6.0",
45
- "qunit-cli": "~0.2.0",
46
- "uglify-js": "3.3.21"
47
- },
48
- "files": [
49
- "underscore.js",
50
- "underscore-min.js",
51
- "underscore-min.js.map"
52
- ],
53
- "homepage": "http://underscorejs.org",
54
- "keywords": [
55
- "util",
56
- "functional",
57
- "server",
58
- "client",
59
- "browser"
60
- ],
61
- "license": "MIT",
62
- "main": "underscore.js",
63
- "name": "underscore",
64
- "repository": {
65
- "type": "git",
66
- "url": "git://github.com/jashkenas/underscore.git"
67
- },
68
- "scripts": {
69
- "build": "npm run minify -- --source-map --source-map-url \" \" -o underscore-min.js",
70
- "coverage": "nyc npm run test-node && nyc report",
71
- "coveralls": "nyc npm run test-node && nyc report --reporter=text-lcov | coveralls",
72
- "doc": "docco underscore.js",
73
- "lint": "eslint underscore.js test/*.js",
74
- "minify": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m",
75
- "test": "npm run lint && npm run test-node",
76
- "test-browser": "npm i karma-phantomjs-launcher && karma start",
77
- "test-node": "qunit-cli test/*.js",
78
- "weight": "npm run minify | gzip-size | pretty-bytes"
79
- },
80
- "version": "1.9.1"
81
- }
@@ -1,5 +0,0 @@
1
- // Underscore.js 1.9.1
2
- // http://underscorejs.org
3
- // (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
4
- // Underscore may be freely distributed under the MIT license.
5
- !function(){var n="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||this||{},r=n._,e=Array.prototype,o=Object.prototype,s="undefined"!=typeof Symbol?Symbol.prototype:null,u=e.push,c=e.slice,p=o.toString,i=o.hasOwnProperty,t=Array.isArray,a=Object.keys,l=Object.create,f=function(){},h=function(n){return n instanceof h?n:this instanceof h?void(this._wrapped=n):new h(n)};"undefined"==typeof exports||exports.nodeType?n._=h:("undefined"!=typeof module&&!module.nodeType&&module.exports&&(exports=module.exports=h),exports._=h),h.VERSION="1.9.1";var v,y=function(u,i,n){if(void 0===i)return u;switch(null==n?3:n){case 1:return function(n){return u.call(i,n)};case 3:return function(n,r,t){return u.call(i,n,r,t)};case 4:return function(n,r,t,e){return u.call(i,n,r,t,e)}}return function(){return u.apply(i,arguments)}},d=function(n,r,t){return h.iteratee!==v?h.iteratee(n,r):null==n?h.identity:h.isFunction(n)?y(n,r,t):h.isObject(n)&&!h.isArray(n)?h.matcher(n):h.property(n)};h.iteratee=v=function(n,r){return d(n,r,1/0)};var g=function(u,i){return i=null==i?u.length-1:+i,function(){for(var n=Math.max(arguments.length-i,0),r=Array(n),t=0;t<n;t++)r[t]=arguments[t+i];switch(i){case 0:return u.call(this,r);case 1:return u.call(this,arguments[0],r);case 2:return u.call(this,arguments[0],arguments[1],r)}var e=Array(i+1);for(t=0;t<i;t++)e[t]=arguments[t];return e[i]=r,u.apply(this,e)}},m=function(n){if(!h.isObject(n))return{};if(l)return l(n);f.prototype=n;var r=new f;return f.prototype=null,r},b=function(r){return function(n){return null==n?void 0:n[r]}},j=function(n,r){return null!=n&&i.call(n,r)},x=function(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0},_=Math.pow(2,53)-1,A=b("length"),w=function(n){var r=A(n);return"number"==typeof r&&0<=r&&r<=_};h.each=h.forEach=function(n,r,t){var e,u;if(r=y(r,t),w(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var i=h.keys(n);for(e=0,u=i.length;e<u;e++)r(n[i[e]],i[e],n)}return n},h.map=h.collect=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=Array(u),o=0;o<u;o++){var a=e?e[o]:o;i[o]=r(n[a],a,n)}return i};var O=function(c){return function(n,r,t,e){var u=3<=arguments.length;return function(n,r,t,e){var u=!w(n)&&h.keys(n),i=(u||n).length,o=0<c?0:i-1;for(e||(t=n[u?u[o]:o],o+=c);0<=o&&o<i;o+=c){var a=u?u[o]:o;t=r(t,n[a],a,n)}return t}(n,y(r,e,4),t,u)}};h.reduce=h.foldl=h.inject=O(1),h.reduceRight=h.foldr=O(-1),h.find=h.detect=function(n,r,t){var e=(w(n)?h.findIndex:h.findKey)(n,r,t);if(void 0!==e&&-1!==e)return n[e]},h.filter=h.select=function(n,e,r){var u=[];return e=d(e,r),h.each(n,function(n,r,t){e(n,r,t)&&u.push(n)}),u},h.reject=function(n,r,t){return h.filter(n,h.negate(d(r)),t)},h.every=h.all=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=0;i<u;i++){var o=e?e[i]:i;if(!r(n[o],o,n))return!1}return!0},h.some=h.any=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=0;i<u;i++){var o=e?e[i]:i;if(r(n[o],o,n))return!0}return!1},h.contains=h.includes=h.include=function(n,r,t,e){return w(n)||(n=h.values(n)),("number"!=typeof t||e)&&(t=0),0<=h.indexOf(n,r,t)},h.invoke=g(function(n,t,e){var u,i;return h.isFunction(t)?i=t:h.isArray(t)&&(u=t.slice(0,-1),t=t[t.length-1]),h.map(n,function(n){var r=i;if(!r){if(u&&u.length&&(n=x(n,u)),null==n)return;r=n[t]}return null==r?r:r.apply(n,e)})}),h.pluck=function(n,r){return h.map(n,h.property(r))},h.where=function(n,r){return h.filter(n,h.matcher(r))},h.findWhere=function(n,r){return h.find(n,h.matcher(r))},h.max=function(n,e,r){var t,u,i=-1/0,o=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,c=(n=w(n)?n:h.values(n)).length;a<c;a++)null!=(t=n[a])&&i<t&&(i=t);else e=d(e,r),h.each(n,function(n,r,t){u=e(n,r,t),(o<u||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},h.min=function(n,e,r){var t,u,i=1/0,o=1/0;if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,c=(n=w(n)?n:h.values(n)).length;a<c;a++)null!=(t=n[a])&&t<i&&(i=t);else e=d(e,r),h.each(n,function(n,r,t){((u=e(n,r,t))<o||u===1/0&&i===1/0)&&(i=n,o=u)});return i},h.shuffle=function(n){return h.sample(n,1/0)},h.sample=function(n,r,t){if(null==r||t)return w(n)||(n=h.values(n)),n[h.random(n.length-1)];var e=w(n)?h.clone(n):h.values(n),u=A(e);r=Math.max(Math.min(r,u),0);for(var i=u-1,o=0;o<r;o++){var a=h.random(o,i),c=e[o];e[o]=e[a],e[a]=c}return e.slice(0,r)},h.sortBy=function(n,e,r){var u=0;return e=d(e,r),h.pluck(h.map(n,function(n,r,t){return{value:n,index:u++,criteria:e(n,r,t)}}).sort(function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(e<t||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index}),"value")};var k=function(o,r){return function(e,u,n){var i=r?[[],[]]:{};return u=d(u,n),h.each(e,function(n,r){var t=u(n,r,e);o(i,n,t)}),i}};h.groupBy=k(function(n,r,t){j(n,t)?n[t].push(r):n[t]=[r]}),h.indexBy=k(function(n,r,t){n[t]=r}),h.countBy=k(function(n,r,t){j(n,t)?n[t]++:n[t]=1});var S=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;h.toArray=function(n){return n?h.isArray(n)?c.call(n):h.isString(n)?n.match(S):w(n)?h.map(n,h.identity):h.values(n):[]},h.size=function(n){return null==n?0:w(n)?n.length:h.keys(n).length},h.partition=k(function(n,r,t){n[t?0:1].push(r)},!0),h.first=h.head=h.take=function(n,r,t){return null==n||n.length<1?null==r?void 0:[]:null==r||t?n[0]:h.initial(n,n.length-r)},h.initial=function(n,r,t){return c.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))},h.last=function(n,r,t){return null==n||n.length<1?null==r?void 0:[]:null==r||t?n[n.length-1]:h.rest(n,Math.max(0,n.length-r))},h.rest=h.tail=h.drop=function(n,r,t){return c.call(n,null==r||t?1:r)},h.compact=function(n){return h.filter(n,Boolean)};var M=function(n,r,t,e){for(var u=(e=e||[]).length,i=0,o=A(n);i<o;i++){var a=n[i];if(w(a)&&(h.isArray(a)||h.isArguments(a)))if(r)for(var c=0,l=a.length;c<l;)e[u++]=a[c++];else M(a,r,t,e),u=e.length;else t||(e[u++]=a)}return e};h.flatten=function(n,r){return M(n,r,!1)},h.without=g(function(n,r){return h.difference(n,r)}),h.uniq=h.unique=function(n,r,t,e){h.isBoolean(r)||(e=t,t=r,r=!1),null!=t&&(t=d(t,e));for(var u=[],i=[],o=0,a=A(n);o<a;o++){var c=n[o],l=t?t(c,o,n):c;r&&!t?(o&&i===l||u.push(c),i=l):t?h.contains(i,l)||(i.push(l),u.push(c)):h.contains(u,c)||u.push(c)}return u},h.union=g(function(n){return h.uniq(M(n,!0,!0))}),h.intersection=function(n){for(var r=[],t=arguments.length,e=0,u=A(n);e<u;e++){var i=n[e];if(!h.contains(r,i)){var o;for(o=1;o<t&&h.contains(arguments[o],i);o++);o===t&&r.push(i)}}return r},h.difference=g(function(n,r){return r=M(r,!0,!0),h.filter(n,function(n){return!h.contains(r,n)})}),h.unzip=function(n){for(var r=n&&h.max(n,A).length||0,t=Array(r),e=0;e<r;e++)t[e]=h.pluck(n,e);return t},h.zip=g(h.unzip),h.object=function(n,r){for(var t={},e=0,u=A(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t};var F=function(i){return function(n,r,t){r=d(r,t);for(var e=A(n),u=0<i?0:e-1;0<=u&&u<e;u+=i)if(r(n[u],u,n))return u;return-1}};h.findIndex=F(1),h.findLastIndex=F(-1),h.sortedIndex=function(n,r,t,e){for(var u=(t=d(t,e,1))(r),i=0,o=A(n);i<o;){var a=Math.floor((i+o)/2);t(n[a])<u?i=a+1:o=a}return i};var E=function(i,o,a){return function(n,r,t){var e=0,u=A(n);if("number"==typeof t)0<i?e=0<=t?t:Math.max(t+u,e):u=0<=t?Math.min(t+1,u):t+u+1;else if(a&&t&&u)return n[t=a(n,r)]===r?t:-1;if(r!=r)return 0<=(t=o(c.call(n,e,u),h.isNaN))?t+e:-1;for(t=0<i?e:u-1;0<=t&&t<u;t+=i)if(n[t]===r)return t;return-1}};h.indexOf=E(1,h.findIndex,h.sortedIndex),h.lastIndexOf=E(-1,h.findLastIndex),h.range=function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),i=0;i<e;i++,n+=t)u[i]=n;return u},h.chunk=function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(c.call(n,e,e+=r));return t};var N=function(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var i=m(n.prototype),o=n.apply(i,u);return h.isObject(o)?o:i};h.bind=g(function(r,t,e){if(!h.isFunction(r))throw new TypeError("Bind must be called on a function");var u=g(function(n){return N(r,u,t,this,e.concat(n))});return u}),h.partial=g(function(u,i){var o=h.partial.placeholder,a=function(){for(var n=0,r=i.length,t=Array(r),e=0;e<r;e++)t[e]=i[e]===o?arguments[n++]:i[e];for(;n<arguments.length;)t.push(arguments[n++]);return N(u,a,this,this,t)};return a}),(h.partial.placeholder=h).bindAll=g(function(n,r){var t=(r=M(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=h.bind(n[e],n)}}),h.memoize=function(e,u){var i=function(n){var r=i.cache,t=""+(u?u.apply(this,arguments):n);return j(r,t)||(r[t]=e.apply(this,arguments)),r[t]};return i.cache={},i},h.delay=g(function(n,r,t){return setTimeout(function(){return n.apply(null,t)},r)}),h.defer=h.partial(h.delay,h,1),h.throttle=function(t,e,u){var i,o,a,c,l=0;u||(u={});var f=function(){l=!1===u.leading?0:h.now(),i=null,c=t.apply(o,a),i||(o=a=null)},n=function(){var n=h.now();l||!1!==u.leading||(l=n);var r=e-(n-l);return o=this,a=arguments,r<=0||e<r?(i&&(clearTimeout(i),i=null),l=n,c=t.apply(o,a),i||(o=a=null)):i||!1===u.trailing||(i=setTimeout(f,r)),c};return n.cancel=function(){clearTimeout(i),l=0,i=o=a=null},n},h.debounce=function(t,e,u){var i,o,a=function(n,r){i=null,r&&(o=t.apply(n,r))},n=g(function(n){if(i&&clearTimeout(i),u){var r=!i;i=setTimeout(a,e),r&&(o=t.apply(this,n))}else i=h.delay(a,e,this,n);return o});return n.cancel=function(){clearTimeout(i),i=null},n},h.wrap=function(n,r){return h.partial(r,n)},h.negate=function(n){return function(){return!n.apply(this,arguments)}},h.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}},h.after=function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},h.before=function(n,r){var t;return function(){return 0<--n&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}},h.once=h.partial(h.before,2),h.restArguments=g;var I=!{toString:null}.propertyIsEnumerable("toString"),T=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],B=function(n,r){var t=T.length,e=n.constructor,u=h.isFunction(e)&&e.prototype||o,i="constructor";for(j(n,i)&&!h.contains(r,i)&&r.push(i);t--;)(i=T[t])in n&&n[i]!==u[i]&&!h.contains(r,i)&&r.push(i)};h.keys=function(n){if(!h.isObject(n))return[];if(a)return a(n);var r=[];for(var t in n)j(n,t)&&r.push(t);return I&&B(n,r),r},h.allKeys=function(n){if(!h.isObject(n))return[];var r=[];for(var t in n)r.push(t);return I&&B(n,r),r},h.values=function(n){for(var r=h.keys(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e},h.mapObject=function(n,r,t){r=d(r,t);for(var e=h.keys(n),u=e.length,i={},o=0;o<u;o++){var a=e[o];i[a]=r(n[a],a,n)}return i},h.pairs=function(n){for(var r=h.keys(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},h.invert=function(n){for(var r={},t=h.keys(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r},h.functions=h.methods=function(n){var r=[];for(var t in n)h.isFunction(n[t])&&r.push(t);return r.sort()};var R=function(c,l){return function(n){var r=arguments.length;if(l&&(n=Object(n)),r<2||null==n)return n;for(var t=1;t<r;t++)for(var e=arguments[t],u=c(e),i=u.length,o=0;o<i;o++){var a=u[o];l&&void 0!==n[a]||(n[a]=e[a])}return n}};h.extend=R(h.allKeys),h.extendOwn=h.assign=R(h.keys),h.findKey=function(n,r,t){r=d(r,t);for(var e,u=h.keys(n),i=0,o=u.length;i<o;i++)if(r(n[e=u[i]],e,n))return e};var q,K,z=function(n,r,t){return r in t};h.pick=g(function(n,r){var t={},e=r[0];if(null==n)return t;h.isFunction(e)?(1<r.length&&(e=y(e,r[1])),r=h.allKeys(n)):(e=z,r=M(r,!1,!1),n=Object(n));for(var u=0,i=r.length;u<i;u++){var o=r[u],a=n[o];e(a,o,n)&&(t[o]=a)}return t}),h.omit=g(function(n,t){var r,e=t[0];return h.isFunction(e)?(e=h.negate(e),1<t.length&&(r=t[1])):(t=h.map(M(t,!1,!1),String),e=function(n,r){return!h.contains(t,r)}),h.pick(n,e,r)}),h.defaults=R(h.allKeys,!0),h.create=function(n,r){var t=m(n);return r&&h.extendOwn(t,r),t},h.clone=function(n){return h.isObject(n)?h.isArray(n)?n.slice():h.extend({},n):n},h.tap=function(n,r){return r(n),n},h.isMatch=function(n,r){var t=h.keys(r),e=t.length;if(null==n)return!e;for(var u=Object(n),i=0;i<e;i++){var o=t[i];if(r[o]!==u[o]||!(o in u))return!1}return!0},q=function(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var u=typeof n;return("function"===u||"object"===u||"object"==typeof r)&&K(n,r,t,e)},K=function(n,r,t,e){n instanceof h&&(n=n._wrapped),r instanceof h&&(r=r._wrapped);var u=p.call(n);if(u!==p.call(r))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+r;case"[object Number]":return+n!=+n?+r!=+r:0==+n?1/+n==1/r:+n==+r;case"[object Date]":case"[object Boolean]":return+n==+r;case"[object Symbol]":return s.valueOf.call(n)===s.valueOf.call(r)}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof r)return!1;var o=n.constructor,a=r.constructor;if(o!==a&&!(h.isFunction(o)&&o instanceof o&&h.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in r)return!1}e=e||[];for(var c=(t=t||[]).length;c--;)if(t[c]===n)return e[c]===r;if(t.push(n),e.push(r),i){if((c=n.length)!==r.length)return!1;for(;c--;)if(!q(n[c],r[c],t,e))return!1}else{var l,f=h.keys(n);if(c=f.length,h.keys(r).length!==c)return!1;for(;c--;)if(l=f[c],!j(r,l)||!q(n[l],r[l],t,e))return!1}return t.pop(),e.pop(),!0},h.isEqual=function(n,r){return q(n,r)},h.isEmpty=function(n){return null==n||(w(n)&&(h.isArray(n)||h.isString(n)||h.isArguments(n))?0===n.length:0===h.keys(n).length)},h.isElement=function(n){return!(!n||1!==n.nodeType)},h.isArray=t||function(n){return"[object Array]"===p.call(n)},h.isObject=function(n){var r=typeof n;return"function"===r||"object"===r&&!!n},h.each(["Arguments","Function","String","Number","Date","RegExp","Error","Symbol","Map","WeakMap","Set","WeakSet"],function(r){h["is"+r]=function(n){return p.call(n)==="[object "+r+"]"}}),h.isArguments(arguments)||(h.isArguments=function(n){return j(n,"callee")});var D=n.document&&n.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof D&&(h.isFunction=function(n){return"function"==typeof n||!1}),h.isFinite=function(n){return!h.isSymbol(n)&&isFinite(n)&&!isNaN(parseFloat(n))},h.isNaN=function(n){return h.isNumber(n)&&isNaN(n)},h.isBoolean=function(n){return!0===n||!1===n||"[object Boolean]"===p.call(n)},h.isNull=function(n){return null===n},h.isUndefined=function(n){return void 0===n},h.has=function(n,r){if(!h.isArray(r))return j(n,r);for(var t=r.length,e=0;e<t;e++){var u=r[e];if(null==n||!i.call(n,u))return!1;n=n[u]}return!!t},h.noConflict=function(){return n._=r,this},h.identity=function(n){return n},h.constant=function(n){return function(){return n}},h.noop=function(){},h.property=function(r){return h.isArray(r)?function(n){return x(n,r)}:b(r)},h.propertyOf=function(r){return null==r?function(){}:function(n){return h.isArray(n)?x(r,n):r[n]}},h.matcher=h.matches=function(r){return r=h.extendOwn({},r),function(n){return h.isMatch(n,r)}},h.times=function(n,r,t){var e=Array(Math.max(0,n));r=y(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},h.random=function(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))},h.now=Date.now||function(){return(new Date).getTime()};var L={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},P=h.invert(L),W=function(r){var t=function(n){return r[n]},n="(?:"+h.keys(r).join("|")+")",e=RegExp(n),u=RegExp(n,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};h.escape=W(L),h.unescape=W(P),h.result=function(n,r,t){h.isArray(r)||(r=[r]);var e=r.length;if(!e)return h.isFunction(t)?t.call(n):t;for(var u=0;u<e;u++){var i=null==n?void 0:n[r[u]];void 0===i&&(i=t,u=e),n=h.isFunction(i)?i.call(n):i}return n};var C=0;h.uniqueId=function(n){var r=++C+"";return n?n+r:r},h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var J=/(.)^/,U={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},V=/\\|'|\r|\n|\u2028|\u2029/g,$=function(n){return"\\"+U[n]};h.template=function(i,n,r){!n&&r&&(n=r),n=h.defaults({},n,h.templateSettings);var t,e=RegExp([(n.escape||J).source,(n.interpolate||J).source,(n.evaluate||J).source].join("|")+"|$","g"),o=0,a="__p+='";i.replace(e,function(n,r,t,e,u){return a+=i.slice(o,u).replace(V,$),o=u+n.length,r?a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":t?a+="'+\n((__t=("+t+"))==null?'':__t)+\n'":e&&(a+="';\n"+e+"\n__p+='"),n}),a+="';\n",n.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{t=new Function(n.variable||"obj","_",a)}catch(n){throw n.source=a,n}var u=function(n){return t.call(this,n,h)},c=n.variable||"obj";return u.source="function("+c+"){\n"+a+"}",u},h.chain=function(n){var r=h(n);return r._chain=!0,r};var G=function(n,r){return n._chain?h(r).chain():r};h.mixin=function(t){return h.each(h.functions(t),function(n){var r=h[n]=t[n];h.prototype[n]=function(){var n=[this._wrapped];return u.apply(n,arguments),G(this,r.apply(h,n))}}),h},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(r){var t=e[r];h.prototype[r]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==r&&"splice"!==r||0!==n.length||delete n[0],G(this,n)}}),h.each(["concat","join","slice"],function(n){var r=e[n];h.prototype[n]=function(){return G(this,r.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},h.prototype.valueOf=h.prototype.toJSON=h.prototype.value,h.prototype.toString=function(){return String(this._wrapped)},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}();
@@ -1 +0,0 @@
1
- {"version":3,"sources":["underscore.js"],"names":["root","self","global","this","previousUnderscore","_","ArrayProto","Array","prototype","ObjProto","Object","SymbolProto","Symbol","push","slice","toString","hasOwnProperty","nativeIsArray","isArray","nativeKeys","keys","nativeCreate","create","Ctor","obj","_wrapped","exports","nodeType","module","VERSION","builtinIteratee","optimizeCb","func","context","argCount","value","call","index","collection","accumulator","apply","arguments","cb","iteratee","identity","isFunction","isObject","matcher","property","Infinity","restArguments","startIndex","length","Math","max","rest","args","baseCreate","result","shallowProperty","key","has","path","deepGet","i","MAX_ARRAY_INDEX","pow","getLength","isArrayLike","each","forEach","map","collect","results","currentKey","createReduce","dir","memo","initial","reducer","reduce","foldl","inject","reduceRight","foldr","find","detect","predicate","findIndex","findKey","filter","select","list","reject","negate","every","all","some","any","contains","includes","include","item","fromIndex","guard","values","indexOf","invoke","contextPath","method","pluck","where","attrs","findWhere","computed","lastComputed","v","min","shuffle","sample","n","random","clone","last","rand","temp","sortBy","criteria","sort","left","right","a","b","group","behavior","partition","groupBy","indexBy","countBy","reStrSymbol","toArray","isString","match","size","pass","first","head","take","array","tail","drop","compact","Boolean","flatten","input","shallow","strict","output","idx","isArguments","j","len","without","otherArrays","difference","uniq","unique","isSorted","isBoolean","seen","union","arrays","intersection","argsLength","unzip","zip","object","createPredicateIndexFinder","findLastIndex","sortedIndex","low","high","mid","floor","createIndexFinder","predicateFind","isNaN","lastIndexOf","range","start","stop","step","ceil","chunk","count","executeBound","sourceFunc","boundFunc","callingContext","bind","TypeError","bound","callArgs","concat","partial","boundArgs","placeholder","position","bindAll","Error","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","now","throttled","remaining","clearTimeout","trailing","cancel","debounce","immediate","debounced","callNow","wrap","wrapper","compose","after","times","before","once","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","constructor","proto","prop","allKeys","mapObject","pairs","invert","functions","methods","names","createAssigner","keysFunc","defaults","source","l","extend","extendOwn","assign","eq","deepEq","keyInObj","pick","omit","String","props","tap","interceptor","isMatch","aStack","bStack","type","className","valueOf","areArrays","aCtor","bCtor","pop","isEqual","isEmpty","isElement","name","nodelist","document","childNodes","Int8Array","isFinite","isSymbol","parseFloat","isNumber","isNull","isUndefined","noConflict","constant","noop","propertyOf","matches","accum","Date","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","join","testRegexp","RegExp","replaceRegexp","string","test","replace","escape","unescape","fallback","idCounter","uniqueId","prefix","id","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeRegExp","escapeChar","template","text","settings","oldSettings","render","offset","variable","Function","e","data","argument","chain","instance","_chain","chainResult","mixin","toJSON","define","amd"],"mappings":"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"}
@@ -1,1692 +0,0 @@
1
- // Underscore.js 1.9.1
2
- // http://underscorejs.org
3
- // (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
4
- // Underscore may be freely distributed under the MIT license.
5
-
6
- (function() {
7
-
8
- // Baseline setup
9
- // --------------
10
-
11
- // Establish the root object, `window` (`self`) in the browser, `global`
12
- // on the server, or `this` in some virtual machines. We use `self`
13
- // instead of `window` for `WebWorker` support.
14
- var root = typeof self == 'object' && self.self === self && self ||
15
- typeof global == 'object' && global.global === global && global ||
16
- this ||
17
- {};
18
-
19
- // Save the previous value of the `_` variable.
20
- var previousUnderscore = root._;
21
-
22
- // Save bytes in the minified (but not gzipped) version:
23
- var ArrayProto = Array.prototype, ObjProto = Object.prototype;
24
- var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
25
-
26
- // Create quick reference variables for speed access to core prototypes.
27
- var push = ArrayProto.push,
28
- slice = ArrayProto.slice,
29
- toString = ObjProto.toString,
30
- hasOwnProperty = ObjProto.hasOwnProperty;
31
-
32
- // All **ECMAScript 5** native function implementations that we hope to use
33
- // are declared here.
34
- var nativeIsArray = Array.isArray,
35
- nativeKeys = Object.keys,
36
- nativeCreate = Object.create;
37
-
38
- // Naked function reference for surrogate-prototype-swapping.
39
- var Ctor = function(){};
40
-
41
- // Create a safe reference to the Underscore object for use below.
42
- var _ = function(obj) {
43
- if (obj instanceof _) return obj;
44
- if (!(this instanceof _)) return new _(obj);
45
- this._wrapped = obj;
46
- };
47
-
48
- // Export the Underscore object for **Node.js**, with
49
- // backwards-compatibility for their old module API. If we're in
50
- // the browser, add `_` as a global object.
51
- // (`nodeType` is checked to ensure that `module`
52
- // and `exports` are not HTML elements.)
53
- if (typeof exports != 'undefined' && !exports.nodeType) {
54
- if (typeof module != 'undefined' && !module.nodeType && module.exports) {
55
- exports = module.exports = _;
56
- }
57
- exports._ = _;
58
- } else {
59
- root._ = _;
60
- }
61
-
62
- // Current version.
63
- _.VERSION = '1.9.1';
64
-
65
- // Internal function that returns an efficient (for current engines) version
66
- // of the passed-in callback, to be repeatedly applied in other Underscore
67
- // functions.
68
- var optimizeCb = function(func, context, argCount) {
69
- if (context === void 0) return func;
70
- switch (argCount == null ? 3 : argCount) {
71
- case 1: return function(value) {
72
- return func.call(context, value);
73
- };
74
- // The 2-argument case is omitted because we’re not using it.
75
- case 3: return function(value, index, collection) {
76
- return func.call(context, value, index, collection);
77
- };
78
- case 4: return function(accumulator, value, index, collection) {
79
- return func.call(context, accumulator, value, index, collection);
80
- };
81
- }
82
- return function() {
83
- return func.apply(context, arguments);
84
- };
85
- };
86
-
87
- var builtinIteratee;
88
-
89
- // An internal function to generate callbacks that can be applied to each
90
- // element in a collection, returning the desired result — either `identity`,
91
- // an arbitrary callback, a property matcher, or a property accessor.
92
- var cb = function(value, context, argCount) {
93
- if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);
94
- if (value == null) return _.identity;
95
- if (_.isFunction(value)) return optimizeCb(value, context, argCount);
96
- if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);
97
- return _.property(value);
98
- };
99
-
100
- // External wrapper for our callback generator. Users may customize
101
- // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
102
- // This abstraction hides the internal-only argCount argument.
103
- _.iteratee = builtinIteratee = function(value, context) {
104
- return cb(value, context, Infinity);
105
- };
106
-
107
- // Some functions take a variable number of arguments, or a few expected
108
- // arguments at the beginning and then a variable number of values to operate
109
- // on. This helper accumulates all remaining arguments past the function’s
110
- // argument length (or an explicit `startIndex`), into an array that becomes
111
- // the last argument. Similar to ES6’s "rest parameter".
112
- var restArguments = function(func, startIndex) {
113
- startIndex = startIndex == null ? func.length - 1 : +startIndex;
114
- return function() {
115
- var length = Math.max(arguments.length - startIndex, 0),
116
- rest = Array(length),
117
- index = 0;
118
- for (; index < length; index++) {
119
- rest[index] = arguments[index + startIndex];
120
- }
121
- switch (startIndex) {
122
- case 0: return func.call(this, rest);
123
- case 1: return func.call(this, arguments[0], rest);
124
- case 2: return func.call(this, arguments[0], arguments[1], rest);
125
- }
126
- var args = Array(startIndex + 1);
127
- for (index = 0; index < startIndex; index++) {
128
- args[index] = arguments[index];
129
- }
130
- args[startIndex] = rest;
131
- return func.apply(this, args);
132
- };
133
- };
134
-
135
- // An internal function for creating a new object that inherits from another.
136
- var baseCreate = function(prototype) {
137
- if (!_.isObject(prototype)) return {};
138
- if (nativeCreate) return nativeCreate(prototype);
139
- Ctor.prototype = prototype;
140
- var result = new Ctor;
141
- Ctor.prototype = null;
142
- return result;
143
- };
144
-
145
- var shallowProperty = function(key) {
146
- return function(obj) {
147
- return obj == null ? void 0 : obj[key];
148
- };
149
- };
150
-
151
- var has = function(obj, path) {
152
- return obj != null && hasOwnProperty.call(obj, path);
153
- }
154
-
155
- var deepGet = function(obj, path) {
156
- var length = path.length;
157
- for (var i = 0; i < length; i++) {
158
- if (obj == null) return void 0;
159
- obj = obj[path[i]];
160
- }
161
- return length ? obj : void 0;
162
- };
163
-
164
- // Helper for collection methods to determine whether a collection
165
- // should be iterated as an array or as an object.
166
- // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
167
- // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
168
- var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
169
- var getLength = shallowProperty('length');
170
- var isArrayLike = function(collection) {
171
- var length = getLength(collection);
172
- return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
173
- };
174
-
175
- // Collection Functions
176
- // --------------------
177
-
178
- // The cornerstone, an `each` implementation, aka `forEach`.
179
- // Handles raw objects in addition to array-likes. Treats all
180
- // sparse array-likes as if they were dense.
181
- _.each = _.forEach = function(obj, iteratee, context) {
182
- iteratee = optimizeCb(iteratee, context);
183
- var i, length;
184
- if (isArrayLike(obj)) {
185
- for (i = 0, length = obj.length; i < length; i++) {
186
- iteratee(obj[i], i, obj);
187
- }
188
- } else {
189
- var keys = _.keys(obj);
190
- for (i = 0, length = keys.length; i < length; i++) {
191
- iteratee(obj[keys[i]], keys[i], obj);
192
- }
193
- }
194
- return obj;
195
- };
196
-
197
- // Return the results of applying the iteratee to each element.
198
- _.map = _.collect = function(obj, iteratee, context) {
199
- iteratee = cb(iteratee, context);
200
- var keys = !isArrayLike(obj) && _.keys(obj),
201
- length = (keys || obj).length,
202
- results = Array(length);
203
- for (var index = 0; index < length; index++) {
204
- var currentKey = keys ? keys[index] : index;
205
- results[index] = iteratee(obj[currentKey], currentKey, obj);
206
- }
207
- return results;
208
- };
209
-
210
- // Create a reducing function iterating left or right.
211
- var createReduce = function(dir) {
212
- // Wrap code that reassigns argument variables in a separate function than
213
- // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
214
- var reducer = function(obj, iteratee, memo, initial) {
215
- var keys = !isArrayLike(obj) && _.keys(obj),
216
- length = (keys || obj).length,
217
- index = dir > 0 ? 0 : length - 1;
218
- if (!initial) {
219
- memo = obj[keys ? keys[index] : index];
220
- index += dir;
221
- }
222
- for (; index >= 0 && index < length; index += dir) {
223
- var currentKey = keys ? keys[index] : index;
224
- memo = iteratee(memo, obj[currentKey], currentKey, obj);
225
- }
226
- return memo;
227
- };
228
-
229
- return function(obj, iteratee, memo, context) {
230
- var initial = arguments.length >= 3;
231
- return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
232
- };
233
- };
234
-
235
- // **Reduce** builds up a single result from a list of values, aka `inject`,
236
- // or `foldl`.
237
- _.reduce = _.foldl = _.inject = createReduce(1);
238
-
239
- // The right-associative version of reduce, also known as `foldr`.
240
- _.reduceRight = _.foldr = createReduce(-1);
241
-
242
- // Return the first value which passes a truth test. Aliased as `detect`.
243
- _.find = _.detect = function(obj, predicate, context) {
244
- var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;
245
- var key = keyFinder(obj, predicate, context);
246
- if (key !== void 0 && key !== -1) return obj[key];
247
- };
248
-
249
- // Return all the elements that pass a truth test.
250
- // Aliased as `select`.
251
- _.filter = _.select = function(obj, predicate, context) {
252
- var results = [];
253
- predicate = cb(predicate, context);
254
- _.each(obj, function(value, index, list) {
255
- if (predicate(value, index, list)) results.push(value);
256
- });
257
- return results;
258
- };
259
-
260
- // Return all the elements for which a truth test fails.
261
- _.reject = function(obj, predicate, context) {
262
- return _.filter(obj, _.negate(cb(predicate)), context);
263
- };
264
-
265
- // Determine whether all of the elements match a truth test.
266
- // Aliased as `all`.
267
- _.every = _.all = function(obj, predicate, context) {
268
- predicate = cb(predicate, context);
269
- var keys = !isArrayLike(obj) && _.keys(obj),
270
- length = (keys || obj).length;
271
- for (var index = 0; index < length; index++) {
272
- var currentKey = keys ? keys[index] : index;
273
- if (!predicate(obj[currentKey], currentKey, obj)) return false;
274
- }
275
- return true;
276
- };
277
-
278
- // Determine if at least one element in the object matches a truth test.
279
- // Aliased as `any`.
280
- _.some = _.any = function(obj, predicate, context) {
281
- predicate = cb(predicate, context);
282
- var keys = !isArrayLike(obj) && _.keys(obj),
283
- length = (keys || obj).length;
284
- for (var index = 0; index < length; index++) {
285
- var currentKey = keys ? keys[index] : index;
286
- if (predicate(obj[currentKey], currentKey, obj)) return true;
287
- }
288
- return false;
289
- };
290
-
291
- // Determine if the array or object contains a given item (using `===`).
292
- // Aliased as `includes` and `include`.
293
- _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
294
- if (!isArrayLike(obj)) obj = _.values(obj);
295
- if (typeof fromIndex != 'number' || guard) fromIndex = 0;
296
- return _.indexOf(obj, item, fromIndex) >= 0;
297
- };
298
-
299
- // Invoke a method (with arguments) on every item in a collection.
300
- _.invoke = restArguments(function(obj, path, args) {
301
- var contextPath, func;
302
- if (_.isFunction(path)) {
303
- func = path;
304
- } else if (_.isArray(path)) {
305
- contextPath = path.slice(0, -1);
306
- path = path[path.length - 1];
307
- }
308
- return _.map(obj, function(context) {
309
- var method = func;
310
- if (!method) {
311
- if (contextPath && contextPath.length) {
312
- context = deepGet(context, contextPath);
313
- }
314
- if (context == null) return void 0;
315
- method = context[path];
316
- }
317
- return method == null ? method : method.apply(context, args);
318
- });
319
- });
320
-
321
- // Convenience version of a common use case of `map`: fetching a property.
322
- _.pluck = function(obj, key) {
323
- return _.map(obj, _.property(key));
324
- };
325
-
326
- // Convenience version of a common use case of `filter`: selecting only objects
327
- // containing specific `key:value` pairs.
328
- _.where = function(obj, attrs) {
329
- return _.filter(obj, _.matcher(attrs));
330
- };
331
-
332
- // Convenience version of a common use case of `find`: getting the first object
333
- // containing specific `key:value` pairs.
334
- _.findWhere = function(obj, attrs) {
335
- return _.find(obj, _.matcher(attrs));
336
- };
337
-
338
- // Return the maximum element (or element-based computation).
339
- _.max = function(obj, iteratee, context) {
340
- var result = -Infinity, lastComputed = -Infinity,
341
- value, computed;
342
- if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
343
- obj = isArrayLike(obj) ? obj : _.values(obj);
344
- for (var i = 0, length = obj.length; i < length; i++) {
345
- value = obj[i];
346
- if (value != null && value > result) {
347
- result = value;
348
- }
349
- }
350
- } else {
351
- iteratee = cb(iteratee, context);
352
- _.each(obj, function(v, index, list) {
353
- computed = iteratee(v, index, list);
354
- if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
355
- result = v;
356
- lastComputed = computed;
357
- }
358
- });
359
- }
360
- return result;
361
- };
362
-
363
- // Return the minimum element (or element-based computation).
364
- _.min = function(obj, iteratee, context) {
365
- var result = Infinity, lastComputed = Infinity,
366
- value, computed;
367
- if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
368
- obj = isArrayLike(obj) ? obj : _.values(obj);
369
- for (var i = 0, length = obj.length; i < length; i++) {
370
- value = obj[i];
371
- if (value != null && value < result) {
372
- result = value;
373
- }
374
- }
375
- } else {
376
- iteratee = cb(iteratee, context);
377
- _.each(obj, function(v, index, list) {
378
- computed = iteratee(v, index, list);
379
- if (computed < lastComputed || computed === Infinity && result === Infinity) {
380
- result = v;
381
- lastComputed = computed;
382
- }
383
- });
384
- }
385
- return result;
386
- };
387
-
388
- // Shuffle a collection.
389
- _.shuffle = function(obj) {
390
- return _.sample(obj, Infinity);
391
- };
392
-
393
- // Sample **n** random values from a collection using the modern version of the
394
- // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
395
- // If **n** is not specified, returns a single random element.
396
- // The internal `guard` argument allows it to work with `map`.
397
- _.sample = function(obj, n, guard) {
398
- if (n == null || guard) {
399
- if (!isArrayLike(obj)) obj = _.values(obj);
400
- return obj[_.random(obj.length - 1)];
401
- }
402
- var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);
403
- var length = getLength(sample);
404
- n = Math.max(Math.min(n, length), 0);
405
- var last = length - 1;
406
- for (var index = 0; index < n; index++) {
407
- var rand = _.random(index, last);
408
- var temp = sample[index];
409
- sample[index] = sample[rand];
410
- sample[rand] = temp;
411
- }
412
- return sample.slice(0, n);
413
- };
414
-
415
- // Sort the object's values by a criterion produced by an iteratee.
416
- _.sortBy = function(obj, iteratee, context) {
417
- var index = 0;
418
- iteratee = cb(iteratee, context);
419
- return _.pluck(_.map(obj, function(value, key, list) {
420
- return {
421
- value: value,
422
- index: index++,
423
- criteria: iteratee(value, key, list)
424
- };
425
- }).sort(function(left, right) {
426
- var a = left.criteria;
427
- var b = right.criteria;
428
- if (a !== b) {
429
- if (a > b || a === void 0) return 1;
430
- if (a < b || b === void 0) return -1;
431
- }
432
- return left.index - right.index;
433
- }), 'value');
434
- };
435
-
436
- // An internal function used for aggregate "group by" operations.
437
- var group = function(behavior, partition) {
438
- return function(obj, iteratee, context) {
439
- var result = partition ? [[], []] : {};
440
- iteratee = cb(iteratee, context);
441
- _.each(obj, function(value, index) {
442
- var key = iteratee(value, index, obj);
443
- behavior(result, value, key);
444
- });
445
- return result;
446
- };
447
- };
448
-
449
- // Groups the object's values by a criterion. Pass either a string attribute
450
- // to group by, or a function that returns the criterion.
451
- _.groupBy = group(function(result, value, key) {
452
- if (has(result, key)) result[key].push(value); else result[key] = [value];
453
- });
454
-
455
- // Indexes the object's values by a criterion, similar to `groupBy`, but for
456
- // when you know that your index values will be unique.
457
- _.indexBy = group(function(result, value, key) {
458
- result[key] = value;
459
- });
460
-
461
- // Counts instances of an object that group by a certain criterion. Pass
462
- // either a string attribute to count by, or a function that returns the
463
- // criterion.
464
- _.countBy = group(function(result, value, key) {
465
- if (has(result, key)) result[key]++; else result[key] = 1;
466
- });
467
-
468
- var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
469
- // Safely create a real, live array from anything iterable.
470
- _.toArray = function(obj) {
471
- if (!obj) return [];
472
- if (_.isArray(obj)) return slice.call(obj);
473
- if (_.isString(obj)) {
474
- // Keep surrogate pair characters together
475
- return obj.match(reStrSymbol);
476
- }
477
- if (isArrayLike(obj)) return _.map(obj, _.identity);
478
- return _.values(obj);
479
- };
480
-
481
- // Return the number of elements in an object.
482
- _.size = function(obj) {
483
- if (obj == null) return 0;
484
- return isArrayLike(obj) ? obj.length : _.keys(obj).length;
485
- };
486
-
487
- // Split a collection into two arrays: one whose elements all satisfy the given
488
- // predicate, and one whose elements all do not satisfy the predicate.
489
- _.partition = group(function(result, value, pass) {
490
- result[pass ? 0 : 1].push(value);
491
- }, true);
492
-
493
- // Array Functions
494
- // ---------------
495
-
496
- // Get the first element of an array. Passing **n** will return the first N
497
- // values in the array. Aliased as `head` and `take`. The **guard** check
498
- // allows it to work with `_.map`.
499
- _.first = _.head = _.take = function(array, n, guard) {
500
- if (array == null || array.length < 1) return n == null ? void 0 : [];
501
- if (n == null || guard) return array[0];
502
- return _.initial(array, array.length - n);
503
- };
504
-
505
- // Returns everything but the last entry of the array. Especially useful on
506
- // the arguments object. Passing **n** will return all the values in
507
- // the array, excluding the last N.
508
- _.initial = function(array, n, guard) {
509
- return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
510
- };
511
-
512
- // Get the last element of an array. Passing **n** will return the last N
513
- // values in the array.
514
- _.last = function(array, n, guard) {
515
- if (array == null || array.length < 1) return n == null ? void 0 : [];
516
- if (n == null || guard) return array[array.length - 1];
517
- return _.rest(array, Math.max(0, array.length - n));
518
- };
519
-
520
- // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
521
- // Especially useful on the arguments object. Passing an **n** will return
522
- // the rest N values in the array.
523
- _.rest = _.tail = _.drop = function(array, n, guard) {
524
- return slice.call(array, n == null || guard ? 1 : n);
525
- };
526
-
527
- // Trim out all falsy values from an array.
528
- _.compact = function(array) {
529
- return _.filter(array, Boolean);
530
- };
531
-
532
- // Internal implementation of a recursive `flatten` function.
533
- var flatten = function(input, shallow, strict, output) {
534
- output = output || [];
535
- var idx = output.length;
536
- for (var i = 0, length = getLength(input); i < length; i++) {
537
- var value = input[i];
538
- if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
539
- // Flatten current level of array or arguments object.
540
- if (shallow) {
541
- var j = 0, len = value.length;
542
- while (j < len) output[idx++] = value[j++];
543
- } else {
544
- flatten(value, shallow, strict, output);
545
- idx = output.length;
546
- }
547
- } else if (!strict) {
548
- output[idx++] = value;
549
- }
550
- }
551
- return output;
552
- };
553
-
554
- // Flatten out an array, either recursively (by default), or just one level.
555
- _.flatten = function(array, shallow) {
556
- return flatten(array, shallow, false);
557
- };
558
-
559
- // Return a version of the array that does not contain the specified value(s).
560
- _.without = restArguments(function(array, otherArrays) {
561
- return _.difference(array, otherArrays);
562
- });
563
-
564
- // Produce a duplicate-free version of the array. If the array has already
565
- // been sorted, you have the option of using a faster algorithm.
566
- // The faster algorithm will not work with an iteratee if the iteratee
567
- // is not a one-to-one function, so providing an iteratee will disable
568
- // the faster algorithm.
569
- // Aliased as `unique`.
570
- _.uniq = _.unique = function(array, isSorted, iteratee, context) {
571
- if (!_.isBoolean(isSorted)) {
572
- context = iteratee;
573
- iteratee = isSorted;
574
- isSorted = false;
575
- }
576
- if (iteratee != null) iteratee = cb(iteratee, context);
577
- var result = [];
578
- var seen = [];
579
- for (var i = 0, length = getLength(array); i < length; i++) {
580
- var value = array[i],
581
- computed = iteratee ? iteratee(value, i, array) : value;
582
- if (isSorted && !iteratee) {
583
- if (!i || seen !== computed) result.push(value);
584
- seen = computed;
585
- } else if (iteratee) {
586
- if (!_.contains(seen, computed)) {
587
- seen.push(computed);
588
- result.push(value);
589
- }
590
- } else if (!_.contains(result, value)) {
591
- result.push(value);
592
- }
593
- }
594
- return result;
595
- };
596
-
597
- // Produce an array that contains the union: each distinct element from all of
598
- // the passed-in arrays.
599
- _.union = restArguments(function(arrays) {
600
- return _.uniq(flatten(arrays, true, true));
601
- });
602
-
603
- // Produce an array that contains every item shared between all the
604
- // passed-in arrays.
605
- _.intersection = function(array) {
606
- var result = [];
607
- var argsLength = arguments.length;
608
- for (var i = 0, length = getLength(array); i < length; i++) {
609
- var item = array[i];
610
- if (_.contains(result, item)) continue;
611
- var j;
612
- for (j = 1; j < argsLength; j++) {
613
- if (!_.contains(arguments[j], item)) break;
614
- }
615
- if (j === argsLength) result.push(item);
616
- }
617
- return result;
618
- };
619
-
620
- // Take the difference between one array and a number of other arrays.
621
- // Only the elements present in just the first array will remain.
622
- _.difference = restArguments(function(array, rest) {
623
- rest = flatten(rest, true, true);
624
- return _.filter(array, function(value){
625
- return !_.contains(rest, value);
626
- });
627
- });
628
-
629
- // Complement of _.zip. Unzip accepts an array of arrays and groups
630
- // each array's elements on shared indices.
631
- _.unzip = function(array) {
632
- var length = array && _.max(array, getLength).length || 0;
633
- var result = Array(length);
634
-
635
- for (var index = 0; index < length; index++) {
636
- result[index] = _.pluck(array, index);
637
- }
638
- return result;
639
- };
640
-
641
- // Zip together multiple lists into a single array -- elements that share
642
- // an index go together.
643
- _.zip = restArguments(_.unzip);
644
-
645
- // Converts lists into objects. Pass either a single array of `[key, value]`
646
- // pairs, or two parallel arrays of the same length -- one of keys, and one of
647
- // the corresponding values. Passing by pairs is the reverse of _.pairs.
648
- _.object = function(list, values) {
649
- var result = {};
650
- for (var i = 0, length = getLength(list); i < length; i++) {
651
- if (values) {
652
- result[list[i]] = values[i];
653
- } else {
654
- result[list[i][0]] = list[i][1];
655
- }
656
- }
657
- return result;
658
- };
659
-
660
- // Generator function to create the findIndex and findLastIndex functions.
661
- var createPredicateIndexFinder = function(dir) {
662
- return function(array, predicate, context) {
663
- predicate = cb(predicate, context);
664
- var length = getLength(array);
665
- var index = dir > 0 ? 0 : length - 1;
666
- for (; index >= 0 && index < length; index += dir) {
667
- if (predicate(array[index], index, array)) return index;
668
- }
669
- return -1;
670
- };
671
- };
672
-
673
- // Returns the first index on an array-like that passes a predicate test.
674
- _.findIndex = createPredicateIndexFinder(1);
675
- _.findLastIndex = createPredicateIndexFinder(-1);
676
-
677
- // Use a comparator function to figure out the smallest index at which
678
- // an object should be inserted so as to maintain order. Uses binary search.
679
- _.sortedIndex = function(array, obj, iteratee, context) {
680
- iteratee = cb(iteratee, context, 1);
681
- var value = iteratee(obj);
682
- var low = 0, high = getLength(array);
683
- while (low < high) {
684
- var mid = Math.floor((low + high) / 2);
685
- if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
686
- }
687
- return low;
688
- };
689
-
690
- // Generator function to create the indexOf and lastIndexOf functions.
691
- var createIndexFinder = function(dir, predicateFind, sortedIndex) {
692
- return function(array, item, idx) {
693
- var i = 0, length = getLength(array);
694
- if (typeof idx == 'number') {
695
- if (dir > 0) {
696
- i = idx >= 0 ? idx : Math.max(idx + length, i);
697
- } else {
698
- length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
699
- }
700
- } else if (sortedIndex && idx && length) {
701
- idx = sortedIndex(array, item);
702
- return array[idx] === item ? idx : -1;
703
- }
704
- if (item !== item) {
705
- idx = predicateFind(slice.call(array, i, length), _.isNaN);
706
- return idx >= 0 ? idx + i : -1;
707
- }
708
- for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
709
- if (array[idx] === item) return idx;
710
- }
711
- return -1;
712
- };
713
- };
714
-
715
- // Return the position of the first occurrence of an item in an array,
716
- // or -1 if the item is not included in the array.
717
- // If the array is large and already in sort order, pass `true`
718
- // for **isSorted** to use binary search.
719
- _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
720
- _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
721
-
722
- // Generate an integer Array containing an arithmetic progression. A port of
723
- // the native Python `range()` function. See
724
- // [the Python documentation](http://docs.python.org/library/functions.html#range).
725
- _.range = function(start, stop, step) {
726
- if (stop == null) {
727
- stop = start || 0;
728
- start = 0;
729
- }
730
- if (!step) {
731
- step = stop < start ? -1 : 1;
732
- }
733
-
734
- var length = Math.max(Math.ceil((stop - start) / step), 0);
735
- var range = Array(length);
736
-
737
- for (var idx = 0; idx < length; idx++, start += step) {
738
- range[idx] = start;
739
- }
740
-
741
- return range;
742
- };
743
-
744
- // Chunk a single array into multiple arrays, each containing `count` or fewer
745
- // items.
746
- _.chunk = function(array, count) {
747
- if (count == null || count < 1) return [];
748
- var result = [];
749
- var i = 0, length = array.length;
750
- while (i < length) {
751
- result.push(slice.call(array, i, i += count));
752
- }
753
- return result;
754
- };
755
-
756
- // Function (ahem) Functions
757
- // ------------------
758
-
759
- // Determines whether to execute a function as a constructor
760
- // or a normal function with the provided arguments.
761
- var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
762
- if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
763
- var self = baseCreate(sourceFunc.prototype);
764
- var result = sourceFunc.apply(self, args);
765
- if (_.isObject(result)) return result;
766
- return self;
767
- };
768
-
769
- // Create a function bound to a given object (assigning `this`, and arguments,
770
- // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
771
- // available.
772
- _.bind = restArguments(function(func, context, args) {
773
- if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
774
- var bound = restArguments(function(callArgs) {
775
- return executeBound(func, bound, context, this, args.concat(callArgs));
776
- });
777
- return bound;
778
- });
779
-
780
- // Partially apply a function by creating a version that has had some of its
781
- // arguments pre-filled, without changing its dynamic `this` context. _ acts
782
- // as a placeholder by default, allowing any combination of arguments to be
783
- // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
784
- _.partial = restArguments(function(func, boundArgs) {
785
- var placeholder = _.partial.placeholder;
786
- var bound = function() {
787
- var position = 0, length = boundArgs.length;
788
- var args = Array(length);
789
- for (var i = 0; i < length; i++) {
790
- args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
791
- }
792
- while (position < arguments.length) args.push(arguments[position++]);
793
- return executeBound(func, bound, this, this, args);
794
- };
795
- return bound;
796
- });
797
-
798
- _.partial.placeholder = _;
799
-
800
- // Bind a number of an object's methods to that object. Remaining arguments
801
- // are the method names to be bound. Useful for ensuring that all callbacks
802
- // defined on an object belong to it.
803
- _.bindAll = restArguments(function(obj, keys) {
804
- keys = flatten(keys, false, false);
805
- var index = keys.length;
806
- if (index < 1) throw new Error('bindAll must be passed function names');
807
- while (index--) {
808
- var key = keys[index];
809
- obj[key] = _.bind(obj[key], obj);
810
- }
811
- });
812
-
813
- // Memoize an expensive function by storing its results.
814
- _.memoize = function(func, hasher) {
815
- var memoize = function(key) {
816
- var cache = memoize.cache;
817
- var address = '' + (hasher ? hasher.apply(this, arguments) : key);
818
- if (!has(cache, address)) cache[address] = func.apply(this, arguments);
819
- return cache[address];
820
- };
821
- memoize.cache = {};
822
- return memoize;
823
- };
824
-
825
- // Delays a function for the given number of milliseconds, and then calls
826
- // it with the arguments supplied.
827
- _.delay = restArguments(function(func, wait, args) {
828
- return setTimeout(function() {
829
- return func.apply(null, args);
830
- }, wait);
831
- });
832
-
833
- // Defers a function, scheduling it to run after the current call stack has
834
- // cleared.
835
- _.defer = _.partial(_.delay, _, 1);
836
-
837
- // Returns a function, that, when invoked, will only be triggered at most once
838
- // during a given window of time. Normally, the throttled function will run
839
- // as much as it can, without ever going more than once per `wait` duration;
840
- // but if you'd like to disable the execution on the leading edge, pass
841
- // `{leading: false}`. To disable execution on the trailing edge, ditto.
842
- _.throttle = function(func, wait, options) {
843
- var timeout, context, args, result;
844
- var previous = 0;
845
- if (!options) options = {};
846
-
847
- var later = function() {
848
- previous = options.leading === false ? 0 : _.now();
849
- timeout = null;
850
- result = func.apply(context, args);
851
- if (!timeout) context = args = null;
852
- };
853
-
854
- var throttled = function() {
855
- var now = _.now();
856
- if (!previous && options.leading === false) previous = now;
857
- var remaining = wait - (now - previous);
858
- context = this;
859
- args = arguments;
860
- if (remaining <= 0 || remaining > wait) {
861
- if (timeout) {
862
- clearTimeout(timeout);
863
- timeout = null;
864
- }
865
- previous = now;
866
- result = func.apply(context, args);
867
- if (!timeout) context = args = null;
868
- } else if (!timeout && options.trailing !== false) {
869
- timeout = setTimeout(later, remaining);
870
- }
871
- return result;
872
- };
873
-
874
- throttled.cancel = function() {
875
- clearTimeout(timeout);
876
- previous = 0;
877
- timeout = context = args = null;
878
- };
879
-
880
- return throttled;
881
- };
882
-
883
- // Returns a function, that, as long as it continues to be invoked, will not
884
- // be triggered. The function will be called after it stops being called for
885
- // N milliseconds. If `immediate` is passed, trigger the function on the
886
- // leading edge, instead of the trailing.
887
- _.debounce = function(func, wait, immediate) {
888
- var timeout, result;
889
-
890
- var later = function(context, args) {
891
- timeout = null;
892
- if (args) result = func.apply(context, args);
893
- };
894
-
895
- var debounced = restArguments(function(args) {
896
- if (timeout) clearTimeout(timeout);
897
- if (immediate) {
898
- var callNow = !timeout;
899
- timeout = setTimeout(later, wait);
900
- if (callNow) result = func.apply(this, args);
901
- } else {
902
- timeout = _.delay(later, wait, this, args);
903
- }
904
-
905
- return result;
906
- });
907
-
908
- debounced.cancel = function() {
909
- clearTimeout(timeout);
910
- timeout = null;
911
- };
912
-
913
- return debounced;
914
- };
915
-
916
- // Returns the first function passed as an argument to the second,
917
- // allowing you to adjust arguments, run code before and after, and
918
- // conditionally execute the original function.
919
- _.wrap = function(func, wrapper) {
920
- return _.partial(wrapper, func);
921
- };
922
-
923
- // Returns a negated version of the passed-in predicate.
924
- _.negate = function(predicate) {
925
- return function() {
926
- return !predicate.apply(this, arguments);
927
- };
928
- };
929
-
930
- // Returns a function that is the composition of a list of functions, each
931
- // consuming the return value of the function that follows.
932
- _.compose = function() {
933
- var args = arguments;
934
- var start = args.length - 1;
935
- return function() {
936
- var i = start;
937
- var result = args[start].apply(this, arguments);
938
- while (i--) result = args[i].call(this, result);
939
- return result;
940
- };
941
- };
942
-
943
- // Returns a function that will only be executed on and after the Nth call.
944
- _.after = function(times, func) {
945
- return function() {
946
- if (--times < 1) {
947
- return func.apply(this, arguments);
948
- }
949
- };
950
- };
951
-
952
- // Returns a function that will only be executed up to (but not including) the Nth call.
953
- _.before = function(times, func) {
954
- var memo;
955
- return function() {
956
- if (--times > 0) {
957
- memo = func.apply(this, arguments);
958
- }
959
- if (times <= 1) func = null;
960
- return memo;
961
- };
962
- };
963
-
964
- // Returns a function that will be executed at most one time, no matter how
965
- // often you call it. Useful for lazy initialization.
966
- _.once = _.partial(_.before, 2);
967
-
968
- _.restArguments = restArguments;
969
-
970
- // Object Functions
971
- // ----------------
972
-
973
- // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
974
- var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
975
- var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
976
- 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
977
-
978
- var collectNonEnumProps = function(obj, keys) {
979
- var nonEnumIdx = nonEnumerableProps.length;
980
- var constructor = obj.constructor;
981
- var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;
982
-
983
- // Constructor is a special case.
984
- var prop = 'constructor';
985
- if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
986
-
987
- while (nonEnumIdx--) {
988
- prop = nonEnumerableProps[nonEnumIdx];
989
- if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
990
- keys.push(prop);
991
- }
992
- }
993
- };
994
-
995
- // Retrieve the names of an object's own properties.
996
- // Delegates to **ECMAScript 5**'s native `Object.keys`.
997
- _.keys = function(obj) {
998
- if (!_.isObject(obj)) return [];
999
- if (nativeKeys) return nativeKeys(obj);
1000
- var keys = [];
1001
- for (var key in obj) if (has(obj, key)) keys.push(key);
1002
- // Ahem, IE < 9.
1003
- if (hasEnumBug) collectNonEnumProps(obj, keys);
1004
- return keys;
1005
- };
1006
-
1007
- // Retrieve all the property names of an object.
1008
- _.allKeys = function(obj) {
1009
- if (!_.isObject(obj)) return [];
1010
- var keys = [];
1011
- for (var key in obj) keys.push(key);
1012
- // Ahem, IE < 9.
1013
- if (hasEnumBug) collectNonEnumProps(obj, keys);
1014
- return keys;
1015
- };
1016
-
1017
- // Retrieve the values of an object's properties.
1018
- _.values = function(obj) {
1019
- var keys = _.keys(obj);
1020
- var length = keys.length;
1021
- var values = Array(length);
1022
- for (var i = 0; i < length; i++) {
1023
- values[i] = obj[keys[i]];
1024
- }
1025
- return values;
1026
- };
1027
-
1028
- // Returns the results of applying the iteratee to each element of the object.
1029
- // In contrast to _.map it returns an object.
1030
- _.mapObject = function(obj, iteratee, context) {
1031
- iteratee = cb(iteratee, context);
1032
- var keys = _.keys(obj),
1033
- length = keys.length,
1034
- results = {};
1035
- for (var index = 0; index < length; index++) {
1036
- var currentKey = keys[index];
1037
- results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
1038
- }
1039
- return results;
1040
- };
1041
-
1042
- // Convert an object into a list of `[key, value]` pairs.
1043
- // The opposite of _.object.
1044
- _.pairs = function(obj) {
1045
- var keys = _.keys(obj);
1046
- var length = keys.length;
1047
- var pairs = Array(length);
1048
- for (var i = 0; i < length; i++) {
1049
- pairs[i] = [keys[i], obj[keys[i]]];
1050
- }
1051
- return pairs;
1052
- };
1053
-
1054
- // Invert the keys and values of an object. The values must be serializable.
1055
- _.invert = function(obj) {
1056
- var result = {};
1057
- var keys = _.keys(obj);
1058
- for (var i = 0, length = keys.length; i < length; i++) {
1059
- result[obj[keys[i]]] = keys[i];
1060
- }
1061
- return result;
1062
- };
1063
-
1064
- // Return a sorted list of the function names available on the object.
1065
- // Aliased as `methods`.
1066
- _.functions = _.methods = function(obj) {
1067
- var names = [];
1068
- for (var key in obj) {
1069
- if (_.isFunction(obj[key])) names.push(key);
1070
- }
1071
- return names.sort();
1072
- };
1073
-
1074
- // An internal function for creating assigner functions.
1075
- var createAssigner = function(keysFunc, defaults) {
1076
- return function(obj) {
1077
- var length = arguments.length;
1078
- if (defaults) obj = Object(obj);
1079
- if (length < 2 || obj == null) return obj;
1080
- for (var index = 1; index < length; index++) {
1081
- var source = arguments[index],
1082
- keys = keysFunc(source),
1083
- l = keys.length;
1084
- for (var i = 0; i < l; i++) {
1085
- var key = keys[i];
1086
- if (!defaults || obj[key] === void 0) obj[key] = source[key];
1087
- }
1088
- }
1089
- return obj;
1090
- };
1091
- };
1092
-
1093
- // Extend a given object with all the properties in passed-in object(s).
1094
- _.extend = createAssigner(_.allKeys);
1095
-
1096
- // Assigns a given object with all the own properties in the passed-in object(s).
1097
- // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
1098
- _.extendOwn = _.assign = createAssigner(_.keys);
1099
-
1100
- // Returns the first key on an object that passes a predicate test.
1101
- _.findKey = function(obj, predicate, context) {
1102
- predicate = cb(predicate, context);
1103
- var keys = _.keys(obj), key;
1104
- for (var i = 0, length = keys.length; i < length; i++) {
1105
- key = keys[i];
1106
- if (predicate(obj[key], key, obj)) return key;
1107
- }
1108
- };
1109
-
1110
- // Internal pick helper function to determine if `obj` has key `key`.
1111
- var keyInObj = function(value, key, obj) {
1112
- return key in obj;
1113
- };
1114
-
1115
- // Return a copy of the object only containing the whitelisted properties.
1116
- _.pick = restArguments(function(obj, keys) {
1117
- var result = {}, iteratee = keys[0];
1118
- if (obj == null) return result;
1119
- if (_.isFunction(iteratee)) {
1120
- if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
1121
- keys = _.allKeys(obj);
1122
- } else {
1123
- iteratee = keyInObj;
1124
- keys = flatten(keys, false, false);
1125
- obj = Object(obj);
1126
- }
1127
- for (var i = 0, length = keys.length; i < length; i++) {
1128
- var key = keys[i];
1129
- var value = obj[key];
1130
- if (iteratee(value, key, obj)) result[key] = value;
1131
- }
1132
- return result;
1133
- });
1134
-
1135
- // Return a copy of the object without the blacklisted properties.
1136
- _.omit = restArguments(function(obj, keys) {
1137
- var iteratee = keys[0], context;
1138
- if (_.isFunction(iteratee)) {
1139
- iteratee = _.negate(iteratee);
1140
- if (keys.length > 1) context = keys[1];
1141
- } else {
1142
- keys = _.map(flatten(keys, false, false), String);
1143
- iteratee = function(value, key) {
1144
- return !_.contains(keys, key);
1145
- };
1146
- }
1147
- return _.pick(obj, iteratee, context);
1148
- });
1149
-
1150
- // Fill in a given object with default properties.
1151
- _.defaults = createAssigner(_.allKeys, true);
1152
-
1153
- // Creates an object that inherits from the given prototype object.
1154
- // If additional properties are provided then they will be added to the
1155
- // created object.
1156
- _.create = function(prototype, props) {
1157
- var result = baseCreate(prototype);
1158
- if (props) _.extendOwn(result, props);
1159
- return result;
1160
- };
1161
-
1162
- // Create a (shallow-cloned) duplicate of an object.
1163
- _.clone = function(obj) {
1164
- if (!_.isObject(obj)) return obj;
1165
- return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
1166
- };
1167
-
1168
- // Invokes interceptor with the obj, and then returns obj.
1169
- // The primary purpose of this method is to "tap into" a method chain, in
1170
- // order to perform operations on intermediate results within the chain.
1171
- _.tap = function(obj, interceptor) {
1172
- interceptor(obj);
1173
- return obj;
1174
- };
1175
-
1176
- // Returns whether an object has a given set of `key:value` pairs.
1177
- _.isMatch = function(object, attrs) {
1178
- var keys = _.keys(attrs), length = keys.length;
1179
- if (object == null) return !length;
1180
- var obj = Object(object);
1181
- for (var i = 0; i < length; i++) {
1182
- var key = keys[i];
1183
- if (attrs[key] !== obj[key] || !(key in obj)) return false;
1184
- }
1185
- return true;
1186
- };
1187
-
1188
-
1189
- // Internal recursive comparison function for `isEqual`.
1190
- var eq, deepEq;
1191
- eq = function(a, b, aStack, bStack) {
1192
- // Identical objects are equal. `0 === -0`, but they aren't identical.
1193
- // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
1194
- if (a === b) return a !== 0 || 1 / a === 1 / b;
1195
- // `null` or `undefined` only equal to itself (strict comparison).
1196
- if (a == null || b == null) return false;
1197
- // `NaN`s are equivalent, but non-reflexive.
1198
- if (a !== a) return b !== b;
1199
- // Exhaust primitive checks
1200
- var type = typeof a;
1201
- if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
1202
- return deepEq(a, b, aStack, bStack);
1203
- };
1204
-
1205
- // Internal recursive comparison function for `isEqual`.
1206
- deepEq = function(a, b, aStack, bStack) {
1207
- // Unwrap any wrapped objects.
1208
- if (a instanceof _) a = a._wrapped;
1209
- if (b instanceof _) b = b._wrapped;
1210
- // Compare `[[Class]]` names.
1211
- var className = toString.call(a);
1212
- if (className !== toString.call(b)) return false;
1213
- switch (className) {
1214
- // Strings, numbers, regular expressions, dates, and booleans are compared by value.
1215
- case '[object RegExp]':
1216
- // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
1217
- case '[object String]':
1218
- // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
1219
- // equivalent to `new String("5")`.
1220
- return '' + a === '' + b;
1221
- case '[object Number]':
1222
- // `NaN`s are equivalent, but non-reflexive.
1223
- // Object(NaN) is equivalent to NaN.
1224
- if (+a !== +a) return +b !== +b;
1225
- // An `egal` comparison is performed for other numeric values.
1226
- return +a === 0 ? 1 / +a === 1 / b : +a === +b;
1227
- case '[object Date]':
1228
- case '[object Boolean]':
1229
- // Coerce dates and booleans to numeric primitive values. Dates are compared by their
1230
- // millisecond representations. Note that invalid dates with millisecond representations
1231
- // of `NaN` are not equivalent.
1232
- return +a === +b;
1233
- case '[object Symbol]':
1234
- return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
1235
- }
1236
-
1237
- var areArrays = className === '[object Array]';
1238
- if (!areArrays) {
1239
- if (typeof a != 'object' || typeof b != 'object') return false;
1240
-
1241
- // Objects with different constructors are not equivalent, but `Object`s or `Array`s
1242
- // from different frames are.
1243
- var aCtor = a.constructor, bCtor = b.constructor;
1244
- if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
1245
- _.isFunction(bCtor) && bCtor instanceof bCtor)
1246
- && ('constructor' in a && 'constructor' in b)) {
1247
- return false;
1248
- }
1249
- }
1250
- // Assume equality for cyclic structures. The algorithm for detecting cyclic
1251
- // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
1252
-
1253
- // Initializing stack of traversed objects.
1254
- // It's done here since we only need them for objects and arrays comparison.
1255
- aStack = aStack || [];
1256
- bStack = bStack || [];
1257
- var length = aStack.length;
1258
- while (length--) {
1259
- // Linear search. Performance is inversely proportional to the number of
1260
- // unique nested structures.
1261
- if (aStack[length] === a) return bStack[length] === b;
1262
- }
1263
-
1264
- // Add the first object to the stack of traversed objects.
1265
- aStack.push(a);
1266
- bStack.push(b);
1267
-
1268
- // Recursively compare objects and arrays.
1269
- if (areArrays) {
1270
- // Compare array lengths to determine if a deep comparison is necessary.
1271
- length = a.length;
1272
- if (length !== b.length) return false;
1273
- // Deep compare the contents, ignoring non-numeric properties.
1274
- while (length--) {
1275
- if (!eq(a[length], b[length], aStack, bStack)) return false;
1276
- }
1277
- } else {
1278
- // Deep compare objects.
1279
- var keys = _.keys(a), key;
1280
- length = keys.length;
1281
- // Ensure that both objects contain the same number of properties before comparing deep equality.
1282
- if (_.keys(b).length !== length) return false;
1283
- while (length--) {
1284
- // Deep compare each member
1285
- key = keys[length];
1286
- if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
1287
- }
1288
- }
1289
- // Remove the first object from the stack of traversed objects.
1290
- aStack.pop();
1291
- bStack.pop();
1292
- return true;
1293
- };
1294
-
1295
- // Perform a deep comparison to check if two objects are equal.
1296
- _.isEqual = function(a, b) {
1297
- return eq(a, b);
1298
- };
1299
-
1300
- // Is a given array, string, or object empty?
1301
- // An "empty" object has no enumerable own-properties.
1302
- _.isEmpty = function(obj) {
1303
- if (obj == null) return true;
1304
- if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
1305
- return _.keys(obj).length === 0;
1306
- };
1307
-
1308
- // Is a given value a DOM element?
1309
- _.isElement = function(obj) {
1310
- return !!(obj && obj.nodeType === 1);
1311
- };
1312
-
1313
- // Is a given value an array?
1314
- // Delegates to ECMA5's native Array.isArray
1315
- _.isArray = nativeIsArray || function(obj) {
1316
- return toString.call(obj) === '[object Array]';
1317
- };
1318
-
1319
- // Is a given variable an object?
1320
- _.isObject = function(obj) {
1321
- var type = typeof obj;
1322
- return type === 'function' || type === 'object' && !!obj;
1323
- };
1324
-
1325
- // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.
1326
- _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {
1327
- _['is' + name] = function(obj) {
1328
- return toString.call(obj) === '[object ' + name + ']';
1329
- };
1330
- });
1331
-
1332
- // Define a fallback version of the method in browsers (ahem, IE < 9), where
1333
- // there isn't any inspectable "Arguments" type.
1334
- if (!_.isArguments(arguments)) {
1335
- _.isArguments = function(obj) {
1336
- return has(obj, 'callee');
1337
- };
1338
- }
1339
-
1340
- // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
1341
- // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
1342
- var nodelist = root.document && root.document.childNodes;
1343
- if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
1344
- _.isFunction = function(obj) {
1345
- return typeof obj == 'function' || false;
1346
- };
1347
- }
1348
-
1349
- // Is a given object a finite number?
1350
- _.isFinite = function(obj) {
1351
- return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));
1352
- };
1353
-
1354
- // Is the given value `NaN`?
1355
- _.isNaN = function(obj) {
1356
- return _.isNumber(obj) && isNaN(obj);
1357
- };
1358
-
1359
- // Is a given value a boolean?
1360
- _.isBoolean = function(obj) {
1361
- return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
1362
- };
1363
-
1364
- // Is a given value equal to null?
1365
- _.isNull = function(obj) {
1366
- return obj === null;
1367
- };
1368
-
1369
- // Is a given variable undefined?
1370
- _.isUndefined = function(obj) {
1371
- return obj === void 0;
1372
- };
1373
-
1374
- // Shortcut function for checking if an object has a given property directly
1375
- // on itself (in other words, not on a prototype).
1376
- _.has = function(obj, path) {
1377
- if (!_.isArray(path)) {
1378
- return has(obj, path);
1379
- }
1380
- var length = path.length;
1381
- for (var i = 0; i < length; i++) {
1382
- var key = path[i];
1383
- if (obj == null || !hasOwnProperty.call(obj, key)) {
1384
- return false;
1385
- }
1386
- obj = obj[key];
1387
- }
1388
- return !!length;
1389
- };
1390
-
1391
- // Utility Functions
1392
- // -----------------
1393
-
1394
- // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
1395
- // previous owner. Returns a reference to the Underscore object.
1396
- _.noConflict = function() {
1397
- root._ = previousUnderscore;
1398
- return this;
1399
- };
1400
-
1401
- // Keep the identity function around for default iteratees.
1402
- _.identity = function(value) {
1403
- return value;
1404
- };
1405
-
1406
- // Predicate-generating functions. Often useful outside of Underscore.
1407
- _.constant = function(value) {
1408
- return function() {
1409
- return value;
1410
- };
1411
- };
1412
-
1413
- _.noop = function(){};
1414
-
1415
- // Creates a function that, when passed an object, will traverse that object’s
1416
- // properties down the given `path`, specified as an array of keys or indexes.
1417
- _.property = function(path) {
1418
- if (!_.isArray(path)) {
1419
- return shallowProperty(path);
1420
- }
1421
- return function(obj) {
1422
- return deepGet(obj, path);
1423
- };
1424
- };
1425
-
1426
- // Generates a function for a given object that returns a given property.
1427
- _.propertyOf = function(obj) {
1428
- if (obj == null) {
1429
- return function(){};
1430
- }
1431
- return function(path) {
1432
- return !_.isArray(path) ? obj[path] : deepGet(obj, path);
1433
- };
1434
- };
1435
-
1436
- // Returns a predicate for checking whether an object has a given set of
1437
- // `key:value` pairs.
1438
- _.matcher = _.matches = function(attrs) {
1439
- attrs = _.extendOwn({}, attrs);
1440
- return function(obj) {
1441
- return _.isMatch(obj, attrs);
1442
- };
1443
- };
1444
-
1445
- // Run a function **n** times.
1446
- _.times = function(n, iteratee, context) {
1447
- var accum = Array(Math.max(0, n));
1448
- iteratee = optimizeCb(iteratee, context, 1);
1449
- for (var i = 0; i < n; i++) accum[i] = iteratee(i);
1450
- return accum;
1451
- };
1452
-
1453
- // Return a random integer between min and max (inclusive).
1454
- _.random = function(min, max) {
1455
- if (max == null) {
1456
- max = min;
1457
- min = 0;
1458
- }
1459
- return min + Math.floor(Math.random() * (max - min + 1));
1460
- };
1461
-
1462
- // A (possibly faster) way to get the current timestamp as an integer.
1463
- _.now = Date.now || function() {
1464
- return new Date().getTime();
1465
- };
1466
-
1467
- // List of HTML entities for escaping.
1468
- var escapeMap = {
1469
- '&': '&amp;',
1470
- '<': '&lt;',
1471
- '>': '&gt;',
1472
- '"': '&quot;',
1473
- "'": '&#x27;',
1474
- '`': '&#x60;'
1475
- };
1476
- var unescapeMap = _.invert(escapeMap);
1477
-
1478
- // Functions for escaping and unescaping strings to/from HTML interpolation.
1479
- var createEscaper = function(map) {
1480
- var escaper = function(match) {
1481
- return map[match];
1482
- };
1483
- // Regexes for identifying a key that needs to be escaped.
1484
- var source = '(?:' + _.keys(map).join('|') + ')';
1485
- var testRegexp = RegExp(source);
1486
- var replaceRegexp = RegExp(source, 'g');
1487
- return function(string) {
1488
- string = string == null ? '' : '' + string;
1489
- return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
1490
- };
1491
- };
1492
- _.escape = createEscaper(escapeMap);
1493
- _.unescape = createEscaper(unescapeMap);
1494
-
1495
- // Traverses the children of `obj` along `path`. If a child is a function, it
1496
- // is invoked with its parent as context. Returns the value of the final
1497
- // child, or `fallback` if any child is undefined.
1498
- _.result = function(obj, path, fallback) {
1499
- if (!_.isArray(path)) path = [path];
1500
- var length = path.length;
1501
- if (!length) {
1502
- return _.isFunction(fallback) ? fallback.call(obj) : fallback;
1503
- }
1504
- for (var i = 0; i < length; i++) {
1505
- var prop = obj == null ? void 0 : obj[path[i]];
1506
- if (prop === void 0) {
1507
- prop = fallback;
1508
- i = length; // Ensure we don't continue iterating.
1509
- }
1510
- obj = _.isFunction(prop) ? prop.call(obj) : prop;
1511
- }
1512
- return obj;
1513
- };
1514
-
1515
- // Generate a unique integer id (unique within the entire client session).
1516
- // Useful for temporary DOM ids.
1517
- var idCounter = 0;
1518
- _.uniqueId = function(prefix) {
1519
- var id = ++idCounter + '';
1520
- return prefix ? prefix + id : id;
1521
- };
1522
-
1523
- // By default, Underscore uses ERB-style template delimiters, change the
1524
- // following template settings to use alternative delimiters.
1525
- _.templateSettings = {
1526
- evaluate: /<%([\s\S]+?)%>/g,
1527
- interpolate: /<%=([\s\S]+?)%>/g,
1528
- escape: /<%-([\s\S]+?)%>/g
1529
- };
1530
-
1531
- // When customizing `templateSettings`, if you don't want to define an
1532
- // interpolation, evaluation or escaping regex, we need one that is
1533
- // guaranteed not to match.
1534
- var noMatch = /(.)^/;
1535
-
1536
- // Certain characters need to be escaped so that they can be put into a
1537
- // string literal.
1538
- var escapes = {
1539
- "'": "'",
1540
- '\\': '\\',
1541
- '\r': 'r',
1542
- '\n': 'n',
1543
- '\u2028': 'u2028',
1544
- '\u2029': 'u2029'
1545
- };
1546
-
1547
- var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
1548
-
1549
- var escapeChar = function(match) {
1550
- return '\\' + escapes[match];
1551
- };
1552
-
1553
- // JavaScript micro-templating, similar to John Resig's implementation.
1554
- // Underscore templating handles arbitrary delimiters, preserves whitespace,
1555
- // and correctly escapes quotes within interpolated code.
1556
- // NB: `oldSettings` only exists for backwards compatibility.
1557
- _.template = function(text, settings, oldSettings) {
1558
- if (!settings && oldSettings) settings = oldSettings;
1559
- settings = _.defaults({}, settings, _.templateSettings);
1560
-
1561
- // Combine delimiters into one regular expression via alternation.
1562
- var matcher = RegExp([
1563
- (settings.escape || noMatch).source,
1564
- (settings.interpolate || noMatch).source,
1565
- (settings.evaluate || noMatch).source
1566
- ].join('|') + '|$', 'g');
1567
-
1568
- // Compile the template source, escaping string literals appropriately.
1569
- var index = 0;
1570
- var source = "__p+='";
1571
- text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
1572
- source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
1573
- index = offset + match.length;
1574
-
1575
- if (escape) {
1576
- source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
1577
- } else if (interpolate) {
1578
- source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
1579
- } else if (evaluate) {
1580
- source += "';\n" + evaluate + "\n__p+='";
1581
- }
1582
-
1583
- // Adobe VMs need the match returned to produce the correct offset.
1584
- return match;
1585
- });
1586
- source += "';\n";
1587
-
1588
- // If a variable is not specified, place data values in local scope.
1589
- if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
1590
-
1591
- source = "var __t,__p='',__j=Array.prototype.join," +
1592
- "print=function(){__p+=__j.call(arguments,'');};\n" +
1593
- source + 'return __p;\n';
1594
-
1595
- var render;
1596
- try {
1597
- render = new Function(settings.variable || 'obj', '_', source);
1598
- } catch (e) {
1599
- e.source = source;
1600
- throw e;
1601
- }
1602
-
1603
- var template = function(data) {
1604
- return render.call(this, data, _);
1605
- };
1606
-
1607
- // Provide the compiled source as a convenience for precompilation.
1608
- var argument = settings.variable || 'obj';
1609
- template.source = 'function(' + argument + '){\n' + source + '}';
1610
-
1611
- return template;
1612
- };
1613
-
1614
- // Add a "chain" function. Start chaining a wrapped Underscore object.
1615
- _.chain = function(obj) {
1616
- var instance = _(obj);
1617
- instance._chain = true;
1618
- return instance;
1619
- };
1620
-
1621
- // OOP
1622
- // ---------------
1623
- // If Underscore is called as a function, it returns a wrapped object that
1624
- // can be used OO-style. This wrapper holds altered versions of all the
1625
- // underscore functions. Wrapped objects may be chained.
1626
-
1627
- // Helper function to continue chaining intermediate results.
1628
- var chainResult = function(instance, obj) {
1629
- return instance._chain ? _(obj).chain() : obj;
1630
- };
1631
-
1632
- // Add your own custom functions to the Underscore object.
1633
- _.mixin = function(obj) {
1634
- _.each(_.functions(obj), function(name) {
1635
- var func = _[name] = obj[name];
1636
- _.prototype[name] = function() {
1637
- var args = [this._wrapped];
1638
- push.apply(args, arguments);
1639
- return chainResult(this, func.apply(_, args));
1640
- };
1641
- });
1642
- return _;
1643
- };
1644
-
1645
- // Add all of the Underscore functions to the wrapper object.
1646
- _.mixin(_);
1647
-
1648
- // Add all mutator Array functions to the wrapper.
1649
- _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
1650
- var method = ArrayProto[name];
1651
- _.prototype[name] = function() {
1652
- var obj = this._wrapped;
1653
- method.apply(obj, arguments);
1654
- if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
1655
- return chainResult(this, obj);
1656
- };
1657
- });
1658
-
1659
- // Add all accessor Array functions to the wrapper.
1660
- _.each(['concat', 'join', 'slice'], function(name) {
1661
- var method = ArrayProto[name];
1662
- _.prototype[name] = function() {
1663
- return chainResult(this, method.apply(this._wrapped, arguments));
1664
- };
1665
- });
1666
-
1667
- // Extracts the result from a wrapped and chained object.
1668
- _.prototype.value = function() {
1669
- return this._wrapped;
1670
- };
1671
-
1672
- // Provide unwrapping proxy for some methods used in engine operations
1673
- // such as arithmetic and JSON stringification.
1674
- _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
1675
-
1676
- _.prototype.toString = function() {
1677
- return String(this._wrapped);
1678
- };
1679
-
1680
- // AMD registration happens at the end for compatibility with AMD loaders
1681
- // that may not enforce next-turn semantics on modules. Even though general
1682
- // practice for AMD registration is to be anonymous, underscore registers
1683
- // as a named module because, like jQuery, it is a base library that is
1684
- // popular enough to be bundled in a third party lib, but not be part of
1685
- // an AMD load request. Those cases could generate an error when an
1686
- // anonymous define() is called outside of a loader request.
1687
- if (typeof define == 'function' && define.amd) {
1688
- define('underscore', [], function() {
1689
- return _;
1690
- });
1691
- }
1692
- }());