From 3b2b0da3a1010919a9c540d5bc2c73cf0404dfd4 Mon Sep 17 00:00:00 2001 From: Tyler Long Date: Mon, 10 Apr 2017 16:33:31 +0800 Subject: [PATCH 01/66] Add .editorconfig --- .editorconfig | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..ab70fef5e6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +indent_size = 4 From 2deacb8e9754b929f3681a912ce5d6bef3819091 Mon Sep 17 00:00:00 2001 From: Tyler Long Date: Mon, 10 Apr 2017 16:36:54 +0800 Subject: [PATCH 02/66] Format files in root folder --- .codeclimate.yml | 22 +++++++++++----------- .eslintrc | 1 - .gitattributes | 2 +- .travis.yml | 30 +++++++++++++++--------------- LICENSE | 1 - README.md | 1 - gulpfile.js | 19 ------------------- package.json | 2 +- 8 files changed, 28 insertions(+), 50 deletions(-) diff --git a/.codeclimate.yml b/.codeclimate.yml index 6c58dcd724..9ce8f4aa70 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -1,14 +1,14 @@ engines: - duplication: - enabled: true - config: - languages: - - javascript - eslint: - enabled: true + duplication: + enabled: true + config: + languages: + - javascript +eslint: + enabled: true ratings: - paths: - - "**.js" + paths: + - "**.js" exclude_paths: -- node_modules/ -- dist/ + - node_modules/ + - dist/ diff --git a/.eslintrc b/.eslintrc index efdd612e08..3606d519eb 100644 --- a/.eslintrc +++ b/.eslintrc @@ -226,4 +226,3 @@ "fdescribe": true, } } - diff --git a/.gitattributes b/.gitattributes index 30ddbbb6cb..cbdcbbc258 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1 @@ -*.js text eol=lf \ No newline at end of file +*.js text eol=lf diff --git a/.travis.yml b/.travis.yml index 76e8dc54b6..3c6a7d6cdd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,15 @@ - language: node_js - osx_image: xcode7.3 - os: - - linux - - osx - sudo: false - node_js: - - "6.2" - - "4.4" - - "5.9" - addons: - code_climate: - repo_token: e87e6bf1c253e0555437ebd23235fdfe2749b889358e7c6d100e4ea5b4f2e091 - after_script: - - cat coverage/lcov.info | codeclimate +language: node_js +osx_image: xcode7.3 +os: + - linux + - osx +sudo: false +node_js: + - "6.2" + - "4.4" + - "5.9" +addons: + code_climate: + repo_token: e87e6bf1c253e0555437ebd23235fdfe2749b889358e7c6d100e4ea5b4f2e091 +after_script: + - cat coverage/lcov.info | codeclimate diff --git a/LICENSE b/LICENSE index faae92123a..c3ed83f60b 100644 --- a/LICENSE +++ b/LICENSE @@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/README.md b/README.md index 97c7da88e6..eef20656bb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ - mermaid [![Build Status](https://travis-ci.org/knsv/mermaid.svg?branch=master)](https://travis-ci.org/knsv/mermaid) [![Code Climate](https://codeclimate.com/github/knsv/mermaid/badges/gpa.svg)](https://codeclimate.com/github/knsv/mermaid) ======= diff --git a/gulpfile.js b/gulpfile.js index 33308b682e..a6cc5ac4f9 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -19,22 +19,3 @@ var tasks = requireDir('./gulp/tasks'); var paths = { scripts: ['./src/**/*.js', '!**/parser/*.js'] }; - - - - - - - - - - - - - - - - - - - diff --git a/package.json b/package.json index 149e766f8d..82b29232f6 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,4 @@ - { +{ "name": "mermaid", "version": "7.0.0", "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams and gantt charts.", From 2525929e8dc22cffcf00f9d40f51a29493ec5e57 Mon Sep 17 00:00:00 2001 From: Tyler Long Date: Mon, 10 Apr 2017 16:45:22 +0800 Subject: [PATCH 03/66] Add yarn.lock file --- yarn.lock | 7392 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 7392 insertions(+) create mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..bea854cb92 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,7392 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +Base64@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028" + +JSONSelect@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/JSONSelect/-/JSONSelect-0.4.0.tgz#a08edcc67eb3fcbe99ed630855344a0cf282bb8d" + +JSONStream@^1.0.3: + version "1.3.1" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +JSONStream@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.6.4.tgz#4b2c8063f8f512787b2375f7ee9db69208fa2dcb" + dependencies: + jsonparse "0.0.5" + through "~2.2.7" + +JSONStream@~0.7.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.7.4.tgz#734290e41511eea7c2cfe151fbf9a563a97b9786" + dependencies: + jsonparse "0.0.5" + through ">=2.2.7 <3" + +JSONStream@~0.8.3, JSONStream@~0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.8.4.tgz#91657dfe6ff857483066132b4618b62e8f4887bd" + dependencies: + jsonparse "0.0.5" + through ">=2.2.7 <3" + +"JSV@>= 4.0.x": + version "4.0.2" + resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" + +abab@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + +abbrev@1, abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +accepts@1.3.3, accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +accord@^0.26.3: + version "0.26.4" + resolved "https://registry.yarnpkg.com/accord/-/accord-0.26.4.tgz#fc4c8d3ebab406a07cb28819b859651c44a92e80" + dependencies: + convert-source-map "^1.2.0" + glob "^7.0.5" + indx "^0.2.3" + lodash.clone "^4.3.2" + lodash.defaults "^4.0.1" + lodash.flatten "^4.2.0" + lodash.merge "^4.4.0" + lodash.partialright "^4.1.4" + lodash.pick "^4.2.1" + lodash.uniq "^4.3.0" + resolve "^1.1.7" + semver "^5.3.0" + uglify-js "^2.7.0" + when "^3.7.7" + +acorn-globals@^1.0.4: + version "1.0.9" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" + dependencies: + acorn "^2.1.0" + +acorn-to-esprima@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/acorn-to-esprima/-/acorn-to-esprima-1.0.7.tgz#9436259760098f9ead9b9da2242fab2f4850281b" + +acorn@^1.0.3: + version "1.2.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014" + +acorn@^2.1.0, acorn@^2.4.0, acorn@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" + +acorn@^4.0.3: + version "4.0.11" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + +ajv@^4.9.1: + version "4.11.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.6.tgz#947e93049790942b2a2d60a8289b28924d39f987" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alter@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/alter/-/alter-0.2.0.tgz#c7588808617572034aae62480af26b1d4d1cb3cd" + dependencies: + stable "~0.1.3" + +ambi@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ambi/-/ambi-2.0.0.tgz#42c2bf98e8d101aa4da28a812678a5dbe36ada66" + dependencies: + typechecker "~2.0.1" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^0.2.0, ansi-regex@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +any-shell-escape@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/any-shell-escape/-/any-shell-escape-0.1.1.tgz#d55ab972244c71a9a5e1ab0879f30bf110806959" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +aproba@^1.0.3: + version "1.1.1" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + +are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" + +argparse@^1.0.2, argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + +array-slice@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1, array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arraybuffer.slice@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" + +asn1.js@^4.0.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +assert@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.1.2.tgz#adaa04c46bb58c6dd1f294da3eb26e6228eb6e44" + dependencies: + util "0.10.3" + +assert@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.3.0.tgz#03939a622582a812cc202320a0b9a56c9b815849" + dependencies: + util "0.10.3" + +ast-traverse@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ast-traverse/-/ast-traverse-0.1.1.tgz#69cf2b8386f19dcda1bb1e05d68fe359d8897de6" + +ast-types@0.8.12: + version "0.8.12" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc" + +ast-types@0.9.6: + version "0.9.6" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" + +astw@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917" + dependencies: + acorn "^4.0.3" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.0.tgz#ac3613b1da9bed1b47510bb4651b8931e47146c7" + +async@1.x, async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^0.9.0, async@~0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + +async@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9" + dependencies: + lodash "^4.14.0" + +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + +async@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/async/-/async-0.7.0.tgz#4429e0e62f5de0a54f37458c49f0b897eb52ada5" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@^5.0.0, babel-core@^5.6.21, babel-core@^5.8.33: + version "5.8.38" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-5.8.38.tgz#1fcaee79d7e61b750b00b8e54f6dfc9d0af86558" + dependencies: + babel-plugin-constant-folding "^1.0.1" + babel-plugin-dead-code-elimination "^1.0.2" + babel-plugin-eval "^1.0.1" + babel-plugin-inline-environment-variables "^1.0.1" + babel-plugin-jscript "^1.0.4" + babel-plugin-member-expression-literals "^1.0.1" + babel-plugin-property-literals "^1.0.1" + babel-plugin-proto-to-assign "^1.0.3" + babel-plugin-react-constant-elements "^1.0.3" + babel-plugin-react-display-name "^1.0.3" + babel-plugin-remove-console "^1.0.1" + babel-plugin-remove-debugger "^1.0.1" + babel-plugin-runtime "^1.0.7" + babel-plugin-undeclared-variables-check "^1.0.2" + babel-plugin-undefined-to-void "^1.1.6" + babylon "^5.8.38" + bluebird "^2.9.33" + chalk "^1.0.0" + convert-source-map "^1.1.0" + core-js "^1.0.0" + debug "^2.1.1" + detect-indent "^3.0.0" + esutils "^2.0.0" + fs-readdir-recursive "^0.1.0" + globals "^6.4.0" + home-or-tmp "^1.0.0" + is-integer "^1.0.4" + js-tokens "1.0.1" + json5 "^0.4.0" + lodash "^3.10.0" + minimatch "^2.0.3" + output-file-sync "^1.1.0" + path-exists "^1.0.0" + path-is-absolute "^1.0.0" + private "^0.1.6" + regenerator "0.8.40" + regexpu "^1.3.0" + repeating "^1.1.2" + resolve "^1.1.6" + shebang-regex "^1.0.0" + slash "^1.0.0" + source-map "^0.5.0" + source-map-support "^0.2.10" + to-fast-properties "^1.0.0" + trim-right "^1.0.0" + try-resolve "^1.0.0" + +babel-core@^6.0.0, babel-core@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.24.1" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-eslint@^4.1.3: + version "4.1.8" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-4.1.8.tgz#4f79e7a4f5879ecf03f48cb16f552a355fcc31b2" + dependencies: + acorn-to-esprima "^1.0.5" + babel-core "^5.8.33" + lodash.assign "^3.2.0" + lodash.pick "^3.1.0" + +babel-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-constant-folding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz#8361d364c98e449c3692bdba51eff0844290aa8e" + +babel-plugin-dead-code-elimination@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz#5f7c451274dcd7cccdbfbb3e0b85dd28121f0f65" + +babel-plugin-eval@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz#a2faed25ce6be69ade4bfec263f70169195950da" + +babel-plugin-inline-environment-variables@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz#1f58ce91207ad6a826a8bf645fafe68ff5fe3ffe" + +babel-plugin-jscript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz#8f342c38276e87a47d5fa0a8bd3d5eb6ccad8fcc" + +babel-plugin-member-expression-literals@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz#cc5edb0faa8dc927170e74d6d1c02440021624d3" + +babel-plugin-property-literals@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz#0252301900192980b1c118efea48ce93aab83336" + +babel-plugin-proto-to-assign@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz#c49e7afd02f577bc4da05ea2df002250cf7cd123" + dependencies: + lodash "^3.9.3" + +babel-plugin-react-constant-elements@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz#946736e8378429cbc349dcff62f51c143b34e35a" + +babel-plugin-react-display-name@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz#754fe38926e8424a4e7b15ab6ea6139dee0514fc" + +babel-plugin-remove-console@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz#d8f24556c3a05005d42aaaafd27787f53ff013a7" + +babel-plugin-remove-debugger@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz#fd2ea3cd61a428ad1f3b9c89882ff4293e8c14c7" + +babel-plugin-runtime@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz#bf7c7d966dd56ecd5c17fa1cb253c9acb7e54aaf" + +babel-plugin-undeclared-variables-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz#5cf1aa539d813ff64e99641290af620965f65dee" + dependencies: + leven "^1.0.2" + +babel-plugin-undefined-to-void@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz#7f578ef8b78dfae6003385d8417a61eda06e2f81" + +babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + dependencies: + babel-core "^6.24.1" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +"babel-runtime@<= 5.8.23": + version "5.8.20" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-5.8.20.tgz#4e38a2a96330c51c0a80ee0a180b853553fa5574" + dependencies: + core-js "^1.0.0" + +babel-runtime@^5.5.4: + version "5.8.38" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-5.8.38.tgz#1c0b02eb63312f5f087ff20450827b425c9d4c19" + dependencies: + core-js "^1.0.0" + +babel-runtime@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-template@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babel@^5.8.23: + version "5.8.38" + resolved "https://registry.yarnpkg.com/babel/-/babel-5.8.38.tgz#dfb087c22894917c576fb67ce9cf328d458629fb" + dependencies: + babel-core "^5.6.21" + chokidar "^1.0.0" + commander "^2.6.0" + convert-source-map "^1.1.0" + fs-readdir-recursive "^0.1.0" + glob "^5.0.5" + lodash "^3.2.0" + output-file-sync "^1.1.0" + path-exists "^1.0.0" + path-is-absolute "^1.0.0" + slash "^1.0.0" + source-map "^0.5.0" + +babelify@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/babelify/-/babelify-6.4.0.tgz#caf43888ba731b876b5567b643eecc66147693a5" + dependencies: + babel-core "^5.0.0" + object-assign "^4.0.0" + +babylon@^5.8.38: + version "5.8.38" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd" + +babylon@^6.11.0, babylon@^6.15.0: + version "6.16.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + +bal-util@~1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/bal-util/-/bal-util-1.18.0.tgz#4e2e2d90816d1a6b7e37174020042a2ce258421d" + dependencies: + ambi "~2.0.0" + eachr "~2.0.2" + extendr "~2.0.1" + getsetdeep "~2.0.0" + safecallback "~1.0.1" + safefs "~2.0.3" + taskgroup "~2.0.0" + typechecker "~2.0.1" + +balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + +base64-js@0.0.7, base64-js@~0.0.4: + version "0.0.7" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.7.tgz#54400dc91d696cec32a8a47902f971522fee8f48" + +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + +base64-js@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + +basic-auth@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" + +batch@0.5.3, batch@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +beeper@^1.0.0, beeper@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + +binary-extensions@^1.0.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + +bl@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e" + dependencies: + readable-stream "~2.0.5" + +blob@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bluebird@^2.9.27, bluebird@^2.9.33: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + +body-parser@^1.12.4: + version "1.17.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.1.tgz#75b3bc98ddd6e7e0d8ffe750dfaca5c66993fa47" + dependencies: + bytes "2.4.0" + content-type "~1.0.2" + debug "2.6.1" + depd "~1.1.0" + http-errors "~1.6.1" + iconv-lite "0.4.15" + on-finished "~2.3.0" + qs "6.4.0" + raw-body "~2.2.0" + type-is "~1.6.14" + +body-parser@~1.14.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.14.2.tgz#1015cb1fe2c443858259581db53332f8d0cf50f9" + dependencies: + bytes "2.2.0" + content-type "~1.0.1" + debug "~2.2.0" + depd "~1.1.0" + http-errors "~1.3.1" + iconv-lite "0.4.13" + on-finished "~2.3.0" + qs "5.2.0" + raw-body "~2.1.5" + type-is "~1.6.10" + +boom@0.4.x: + version "0.4.2" + resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" + dependencies: + hoek "0.9.x" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +bower@^1.3.12: + version "1.8.0" + resolved "https://registry.yarnpkg.com/bower/-/bower-1.8.0.tgz#55dbebef0ad9155382d9e9d3e497c1372345b44a" + +brace-expansion@^1.0.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^0.1.2: + version "0.1.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" + dependencies: + expand-range "^0.1.0" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +breakable@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/breakable/-/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browser-pack@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-3.2.0.tgz#faa1cbc41487b1acc4747e373e1148adffd0e2d9" + dependencies: + JSONStream "~0.8.4" + combine-source-map "~0.3.0" + concat-stream "~1.4.1" + defined "~0.0.0" + through2 "~0.5.1" + umd "^2.1.0" + +browser-pack@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-5.0.1.tgz#4197719b20c6e0aaa09451c5111e53efb6fbc18d" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.6.1" + defined "^1.0.0" + through2 "^1.0.0" + umd "^3.0.0" + +browser-pack@^6.0.0, browser-pack@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.2.tgz#f86cd6cef4f5300c8e63e07a4d512f65fbff4531" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.7.1" + defined "^1.0.0" + through2 "^2.0.0" + umd "^3.0.0" + +browser-pack@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-2.0.1.tgz#5d1c527f56c582677411c4db2a128648ff6bf150" + dependencies: + JSONStream "~0.6.4" + combine-source-map "~0.3.0" + through "~2.3.4" + +"browser-request@>= 0.3.1 < 0.4.0": + version "0.3.3" + resolved "https://registry.yarnpkg.com/browser-request/-/browser-request-0.3.3.tgz#9ece5b5aca89a29932242e18bf933def9876cc17" + +browser-resolve@^1.11.0, browser-resolve@^1.3.0, browser-resolve@^1.7.0, browser-resolve@^1.7.1: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +browser-resolve@~1.2.1, browser-resolve@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.2.4.tgz#59ae7820a82955ecd32f5fb7c468ac21c4723806" + dependencies: + resolve "0.6.3" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + dependencies: + buffer-xor "^1.0.2" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + inherits "^2.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-shim@~2.0.10: + version "2.0.10" + resolved "https://registry.yarnpkg.com/browserify-shim/-/browserify-shim-2.0.10.tgz#74a0ed5b9b784a5a287906513a896d31f54a84b8" + dependencies: + through "~2.3.4" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +browserify@10.2.3, browserify@^10.0.0: + version "10.2.3" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-10.2.3.tgz#f6a18d4d6ab31113f9fdf83f103fa01728a8206a" + dependencies: + JSONStream "^1.0.3" + assert "~1.3.0" + browser-pack "^5.0.0" + browser-resolve "^1.7.1" + browserify-zlib "~0.1.2" + buffer "^3.0.0" + builtins "~0.0.3" + commondir "0.0.1" + concat-stream "~1.4.1" + console-browserify "^1.1.0" + constants-browserify "~0.0.1" + crypto-browserify "^3.0.0" + deep-equal "^1.0.0" + defined "^1.0.0" + deps-sort "^1.3.7" + domain-browser "~1.1.0" + duplexer2 "~0.0.2" + events "~1.0.0" + glob "^4.0.5" + has "^1.0.0" + htmlescape "^1.1.0" + http-browserify "^1.4.0" + https-browserify "~0.0.0" + inherits "~2.0.1" + insert-module-globals "^6.4.1" + isarray "0.0.1" + labeled-stream-splicer "^1.0.0" + module-deps "^3.7.11" + os-browserify "~0.1.1" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^1.1.1" + readable-stream "^1.1.13" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "~0.0.1" + stream-browserify "^1.0.0" + string_decoder "~0.10.0" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^1.0.0" + timers-browserify "^1.0.1" + tty-browserify "~0.0.0" + url "~0.10.1" + util "~0.10.1" + vm-browserify "~0.0.1" + xtend "^4.0.0" + +browserify@3.x: + version "3.46.1" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-3.46.1.tgz#2c2e4a7f2f408178e78c223b5b57b37c2185ad8e" + dependencies: + JSONStream "~0.7.1" + assert "~1.1.0" + browser-pack "~2.0.0" + browser-resolve "~1.2.1" + browserify-zlib "~0.1.2" + buffer "~2.1.4" + builtins "~0.0.3" + commondir "0.0.1" + concat-stream "~1.4.1" + console-browserify "~1.0.1" + constants-browserify "~0.0.1" + crypto-browserify "~1.0.9" + deep-equal "~0.1.0" + defined "~0.0.0" + deps-sort "~0.1.1" + derequire "~0.8.0" + domain-browser "~1.1.0" + duplexer "~0.1.1" + events "~1.0.0" + glob "~3.2.8" + http-browserify "~1.3.1" + https-browserify "~0.0.0" + inherits "~2.0.1" + insert-module-globals "~6.0.0" + module-deps "~2.0.0" + os-browserify "~0.1.1" + parents "~0.0.1" + path-browserify "~0.0.0" + process "^0.7.0" + punycode "~1.2.3" + querystring-es3 "0.2.0" + resolve "~0.6.1" + shallow-copy "0.0.1" + shell-quote "~0.0.1" + stream-browserify "~0.1.0" + stream-combiner "~0.0.2" + string_decoder "~0.0.0" + subarg "0.0.1" + syntax-error "~1.1.0" + through2 "~0.4.1" + timers-browserify "~1.0.1" + tty-browserify "~0.0.0" + umd "~2.0.0" + url "~0.10.1" + util "~0.10.1" + vm-browserify "~0.0.1" + xtend "^3.0.0" + +browserify@^14.0.0: + version "14.3.0" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-14.3.0.tgz#fd003a2386ac1aec127f097885a3cc6373b745c4" + dependencies: + JSONStream "^1.0.3" + assert "^1.4.0" + browser-pack "^6.0.1" + browser-resolve "^1.11.0" + browserify-zlib "~0.1.2" + buffer "^5.0.2" + cached-path-relative "^1.0.0" + concat-stream "~1.5.1" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "~1.1.0" + duplexer2 "~0.1.2" + events "~1.1.0" + glob "^7.1.0" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "^1.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + labeled-stream-splicer "^2.0.0" + module-deps "^4.0.8" + os-browserify "~0.1.1" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.6.1" + stream-browserify "^2.0.0" + stream-http "^2.0.0" + string_decoder "~0.10.0" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "~0.0.0" + url "~0.11.0" + util "~0.10.1" + vm-browserify "~0.0.1" + xtend "^4.0.0" + +browserify@~6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-6.2.0.tgz#e1ab4c357f7751ed8d1503a08cb1d55217bcdd64" + dependencies: + JSONStream "~0.8.3" + assert "~1.1.0" + browser-pack "^3.2.0" + browser-resolve "^1.3.0" + browserify-zlib "~0.1.2" + buffer "^2.3.0" + builtins "~0.0.3" + commondir "0.0.1" + concat-stream "~1.4.1" + console-browserify "^1.1.0" + constants-browserify "~0.0.1" + crypto-browserify "^3.0.0" + deep-equal "~0.2.1" + defined "~0.0.0" + deps-sort "^1.3.5" + domain-browser "~1.1.0" + duplexer2 "~0.0.2" + events "~1.0.0" + glob "^4.0.5" + http-browserify "^1.4.0" + https-browserify "~0.0.0" + inherits "~2.0.1" + insert-module-globals "^6.1.0" + isarray "0.0.1" + labeled-stream-splicer "^1.0.0" + module-deps "^3.5.0" + os-browserify "~0.1.1" + parents "~0.0.1" + path-browserify "~0.0.0" + process "^0.8.0" + punycode "~1.2.3" + querystring-es3 "~0.2.0" + readable-stream "^1.0.33-1" + resolve "~0.7.1" + shallow-copy "0.0.1" + shasum "^1.0.0" + shell-quote "~0.0.1" + stream-browserify "^1.0.0" + string_decoder "~0.10.0" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^1.0.0" + timers-browserify "^1.0.1" + tty-browserify "~0.0.0" + umd "~2.1.0" + url "~0.10.1" + util "~0.10.1" + vm-browserify "~0.0.1" + xtend "^3.0.0" + +buffer-shims@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +buffer-xor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^2.3.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-2.8.2.tgz#d73c214c0334384dc29b04ee0ff5f5527c7974e7" + dependencies: + base64-js "0.0.7" + ieee754 "^1.1.4" + is-array "^1.0.1" + +buffer@^3.0.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-3.6.0.tgz#a72c936f77b96bf52f5f7e7b467180628551defb" + dependencies: + base64-js "0.0.8" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.0.2: + version "5.0.6" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.6.tgz#2ea669f7eec0b6eda05b08f8b5ff661b28573588" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +buffer@~2.1.4: + version "2.1.13" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-2.1.13.tgz#c88838ebf79f30b8b4a707788470bea8a62c2355" + dependencies: + base64-js "~0.0.4" + ieee754 "~1.1.1" + +bufferstreams@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/bufferstreams/-/bufferstreams-0.0.1.tgz#6ba7773de6acb6eb85dbce710c321808c79be849" + +bufferstreams@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bufferstreams/-/bufferstreams-1.0.1.tgz#cfb1ad9568d3ba3cfe935ba9abdd952de88aab2a" + dependencies: + readable-stream "^1.0.33" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +builtins@~0.0.3: + version "0.0.7" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-0.0.7.tgz#355219cd6cf18dbe7c01cc7fd2dce765cfdc549a" + +bytes@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.2.0.tgz#fd35464a403f6f9117c2de3609ecff9cae000588" + +bytes@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + +cached-path-relative@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" + +callsite@1.0.0, callsite@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^1.0.2, camelcase@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^0.5.0, chalk@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" + dependencies: + ansi-styles "^1.1.0" + escape-string-regexp "^1.0.0" + has-ansi "^0.1.0" + strip-ansi "^0.3.0" + supports-color "^0.2.0" + +chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chokidar@^1.0.0, chokidar@^1.4.1, chokidar@^1.4.3: + version "1.6.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" + dependencies: + inherits "^2.0.1" + +circular-json@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + +cjson@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/cjson/-/cjson-0.3.0.tgz#e6439b90703d312ff6e2224097bea92ce3d02a14" + dependencies: + jsonlint "1.6.0" + +cli-cursor@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cli-width@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-1.1.1.tgz#a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d" + +cli@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" + dependencies: + exit "0.1.2" + glob "^7.1.1" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +clone-stats@^0.0.1, clone-stats@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" + +clone@^1.0.0, clone@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +codeclimate-test-reporter@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/codeclimate-test-reporter/-/codeclimate-test-reporter-0.0.4.tgz#b06198911d72c43313fa0cd20c2b0481ee107220" + dependencies: + async "~0.7.0" + lcov-parse "0.0.6" + request "~2.34.0" + +colors@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" + +colors@^1.1.0, colors@latest: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combine-source-map@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.3.0.tgz#d9e74f593d9cd43807312cb5d846d451efaa9eb7" + dependencies: + convert-source-map "~0.3.0" + inline-source-map "~0.3.0" + source-map "~0.1.31" + +combine-source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.6.1.tgz#9b4a09c316033d768e0f11e029fa2730e079ad96" + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.5.0" + lodash.memoize "~3.0.3" + source-map "~0.4.2" + +combine-source-map@~0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e" + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.6.0" + lodash.memoize "~3.0.3" + source-map "~0.5.3" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +combined-stream@~0.0.4: + version "0.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" + dependencies: + delayed-stream "0.0.5" + +commander@^2.5.0, commander@^2.6.0, commander@^2.9.0, commander@~2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commondir@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-0.0.1.tgz#89f00fdcd51b519c578733fec563e6a6da7f5be2" + +commoner@~0.10.3: + version "0.10.8" + resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" + dependencies: + commander "^2.5.0" + detective "^4.3.1" + glob "^5.0.15" + graceful-fs "^4.1.2" + iconv-lite "^0.4.5" + mkdirp "^0.5.0" + private "^0.1.6" + q "^1.1.2" + recast "^0.11.17" + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + +component-emitter@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + +concat-stream@^1.4.6: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@~1.4.1, concat-stream@~1.4.5: + version "1.4.10" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.4.10.tgz#acc3bbf5602cb8cc980c6ac840fa7d8603e3ef36" + dependencies: + inherits "~2.0.1" + readable-stream "~1.1.9" + typedarray "~0.0.5" + +concat-stream@~1.5.0, concat-stream@~1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + +concat-with-sourcemaps@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz#f55b3be2aeb47601b10a2d5259ccfb70fd2f1dd6" + dependencies: + source-map "^0.5.1" + +connect@3.4.x, connect@^3.3.5: + version "3.4.1" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.4.1.tgz#a21361d3f4099ef761cda6dc4a973bb1ebb0a34d" + dependencies: + debug "~2.2.0" + finalhandler "0.4.1" + parseurl "~1.3.1" + utils-merge "1.0.0" + +console-browserify@1.1.x, console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-browserify@~1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.0.3.tgz#d3898d2c3a93102f364197f8874b4f92b5286a8e" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-0.0.1.tgz#92577db527ba6c4cf0a4568d84bc031f441e21f2" + +constants-browserify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.1, content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +convert-source-map@^1.1.0, convert-source-map@^1.2.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + +convert-source-map@~0.3.0, convert-source-map@~0.3.3: + version "0.3.5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + +convert-source-map@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-js@^2.1.0, core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^1.0.0" + sha.js "^2.3.6" + +create-hmac@^1.1.0, create-hmac@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" + dependencies: + create-hash "^1.1.0" + inherits "^2.0.1" + +cryptiles@0.2.x: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" + dependencies: + boom "0.4.x" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +crypto-browserify@^3.0.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + +crypto-browserify@~1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-1.0.9.tgz#cc5449685dfb85eb11c9828acc7cb87ab5bbfcc0" + +cssom@0.2.x: + version "0.2.5" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.2.5.tgz#2682709b5902e7212df529116ff788cd5b254894" + +cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.29 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +ctype@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + +d3@3.5.6, d3@^3.3.8: + version "3.5.6" + resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.6.tgz#9451c651ca733fb9672c81fb7f2655164a73a42d" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +dagre-d3@0.4.10: + version "0.4.10" + resolved "https://registry.yarnpkg.com/dagre-d3/-/dagre-d3-0.4.10.tgz#6c9aa0c52a38ee8176f3cc96d42a1210d799018f" + dependencies: + d3 "^3.3.8" + dagre "^0.7.3" + graphlib "^1.0.5" + lodash "^3.10.0" + +dagre@^0.7.3, dagre@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/dagre/-/dagre-0.7.4.tgz#de72f0e74a550ce11ce638f0a136fed712398022" + dependencies: + graphlib "^1.0.5" + lodash "^3.10.0" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +dateformat@^1.0.11, dateformat@^1.0.7-1.2.3: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +dateformat@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" + +debug@*, debug@2.6.3, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" + dependencies: + ms "0.7.2" + +debug@0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" + +debug@2.2.0, debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +debug@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" + dependencies: + ms "0.7.2" + +debug@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" + dependencies: + ms "0.7.2" + +decamelize@^1.0.0, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-equal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-equal@~0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-0.1.2.tgz#b246c2b80a570a47c11be1d9bd1070ec878b87ce" + +deep-equal@~0.2.0, deep-equal@~0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-0.2.2.tgz#84b745896f34c684e98f2ce0e42abaf43bba017d" + +deep-extend@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + +deep-is@~0.1.2, deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +"deepmerge@>=0.2.7 <0.3.0-0": + version "0.2.10" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-0.2.10.tgz#8906bf9e525a4fbf1b203b2afcb4640249821219" + +defaults@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + dependencies: + clone "^1.0.2" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +defined@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-0.0.0.tgz#f35eea7d705e933baf13b2f03b3f83d921403b3e" + +defs@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/defs/-/defs-1.1.1.tgz#b22609f2c7a11ba7a3db116805c139b1caffa9d2" + dependencies: + alter "~0.2.0" + ast-traverse "~0.1.1" + breakable "~1.0.0" + esprima-fb "~15001.1001.0-dev-harmony-fb" + simple-fmt "~0.1.0" + simple-is "~0.2.0" + stringmap "~0.2.2" + stringset "~0.2.1" + tryor "~0.1.2" + yargs "~3.27.0" + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@1.1.0, depd@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + +deprecated@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" + +deps-sort@^1.3.5, deps-sort@^1.3.7: + version "1.3.9" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-1.3.9.tgz#29dfff53e17b36aecae7530adbbbf622c2ed1a71" + dependencies: + JSONStream "^1.0.3" + shasum "^1.0.0" + subarg "^1.0.0" + through2 "^1.0.0" + +deps-sort@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" + dependencies: + JSONStream "^1.0.3" + shasum "^1.0.0" + subarg "^1.0.0" + through2 "^2.0.0" + +deps-sort@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-0.1.2.tgz#daa2fb614a17c9637d801e2f55339ae370f3611a" + dependencies: + JSONStream "~0.6.4" + minimist "~0.0.1" + through "~2.3.4" + +derequire@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/derequire/-/derequire-0.8.0.tgz#c1f7f1da2cede44adede047378f03f444e9c4c0d" + dependencies: + esprima-fb "^3001.1.0-dev-harmony-fb" + esrefactor "~0.1.0" + estraverse "~1.5.0" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-file@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" + dependencies: + fs-exists-sync "^0.1.0" + +detect-indent@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75" + dependencies: + get-stdin "^4.0.1" + minimist "^1.1.0" + repeating "^1.1.0" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +detective@^4.0.0, detective@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.1.1.tgz#9c4bac1e9fb8bb34f7f18cae080ea1d03aff2cda" + dependencies: + acorn "^1.0.3" + defined "^1.0.0" + escodegen "^1.4.1" + +detective@^4.3.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" + dependencies: + acorn "^4.0.3" + defined "^1.0.0" + +detective@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-3.1.0.tgz#77782444ab752b88ca1be2e9d0a0395f1da25eed" + dependencies: + escodegen "~1.1.0" + esprima-fb "3001.1.0-dev-harmony-fb" + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +doctrine@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" + dependencies: + esutils "^1.1.6" + isarray "0.0.1" + +dom-serialize@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domain-browser@~1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@2.3, domhandler@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + dependencies: + domelementtype "1" + +domutils@1.5, domutils@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +dox@^0.8.0: + version "0.8.1" + resolved "https://registry.yarnpkg.com/dox/-/dox-0.8.1.tgz#d7ade34333691bb90d7886055becf49f92afd06f" + dependencies: + commander "~2.9.0" + jsdoctypeparser "^1.2.0" + marked "~0.3.5" + +duplexer2@0.0.2, duplexer2@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" + +duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + dependencies: + readable-stream "^2.0.2" + +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +eachr@~2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/eachr/-/eachr-2.0.4.tgz#466f7caa10708f610509e32c807aafe57fc122bf" + dependencies: + typechecker "^2.0.8" + +ebnf-parser@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/ebnf-parser/-/ebnf-parser-0.1.10.tgz#cd1f6ba477c5638c40c97ed9b572db5bab5d8331" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +end-of-stream@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" + dependencies: + once "~1.3.0" + +engine.io-client@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.3.tgz#1798ed93451246453d4c6f635d7a201fe940d5ab" + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "2.3.3" + engine.io-parser "1.3.2" + has-cors "1.1.0" + indexof "0.0.1" + parsejson "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + ws "1.1.2" + xmlhttprequest-ssl "1.5.3" + yeast "0.1.2" + +engine.io-parser@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a" + dependencies: + after "0.8.2" + arraybuffer.slice "0.0.6" + base64-arraybuffer "0.1.5" + blob "0.0.4" + has-binary "0.1.7" + wtf-8 "1.0.0" + +engine.io@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.3.tgz#8de7f97895d20d39b85f88eeee777b2bd42b13d4" + dependencies: + accepts "1.3.3" + base64id "1.0.0" + cookie "0.3.1" + debug "2.3.3" + engine.io-parser "1.3.2" + ws "1.1.2" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + +entities@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +errno@^0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.15" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" + dependencies: + es6-iterator "2" + es6-symbol "~3.1" + +es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-symbol "^3.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-promise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-1.0.0.tgz#f90d3629faa7c26166ae4df77c89bacdeb8dca7f" + +es6-promise@^3.0.2: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + +es6-promisify@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-1.1.1.tgz#b896a8b14f9c66b2be9f8105b619c1856e79be3b" + dependencies: + es6-promise "^1.0.0" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@1.3.x: + version "1.3.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.3.3.tgz#f024016f5a88e046fd12005055e939802e6c5f23" + dependencies: + esprima "~1.1.1" + estraverse "~1.5.0" + esutils "~1.0.0" + optionalDependencies: + source-map "~0.1.33" + +escodegen@1.7.x: + version "1.7.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.7.1.tgz#30ecfcf66ca98dc67cd2fd162abeb6eafa8ce6fc" + dependencies: + esprima "^1.2.2" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.5.0" + optionalDependencies: + source-map "~0.2.0" + +escodegen@^1.4.1, escodegen@^1.6.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +escodegen@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.1.0.tgz#c663923f6e20aad48d0c0fa49f31c6d4f49360cf" + dependencies: + esprima "~1.0.4" + estraverse "~1.5.0" + esutils "~1.0.0" + optionalDependencies: + source-map "~0.1.30" + +escope@^3.3.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +escope@~0.0.13: + version "0.0.16" + resolved "https://registry.yarnpkg.com/escope/-/escope-0.0.16.tgz#418c7a0afca721dafe659193fd986283e746538f" + dependencies: + estraverse ">= 0.0.2" + +eslint-watch@^2.1.2: + version "2.1.14" + resolved "https://registry.yarnpkg.com/eslint-watch/-/eslint-watch-2.1.14.tgz#a9d200aefb158349f3631ec91a2ec484d152cbfe" + dependencies: + chalk "^1.1.3" + chokidar "^1.4.3" + debug "^2.2.0" + keypress "^0.2.1" + lodash "^4.13.1" + optionator "^0.8.1" + text-table "^0.2.0" + +eslint@^1.6.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-1.10.3.tgz#fb19a91b13c158082bbca294b17d979bc8353a0a" + dependencies: + chalk "^1.0.0" + concat-stream "^1.4.6" + debug "^2.1.1" + doctrine "^0.7.1" + escape-string-regexp "^1.0.2" + escope "^3.3.0" + espree "^2.2.4" + estraverse "^4.1.1" + estraverse-fb "^1.3.1" + esutils "^2.0.2" + file-entry-cache "^1.1.1" + glob "^5.0.14" + globals "^8.11.0" + handlebars "^4.0.0" + inquirer "^0.11.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "3.4.5" + json-stable-stringify "^1.0.0" + lodash.clonedeep "^3.0.1" + lodash.merge "^3.3.2" + lodash.omit "^3.1.0" + minimatch "^3.0.0" + mkdirp "^0.5.0" + object-assign "^4.0.1" + optionator "^0.6.0" + path-is-absolute "^1.0.0" + path-is-inside "^1.0.1" + shelljs "^0.5.3" + strip-json-comments "~1.0.1" + text-table "~0.2.0" + user-home "^2.0.0" + xml-escape "~1.0.0" + +espree@^2.2.4: + version "2.2.5" + resolved "https://registry.yarnpkg.com/espree/-/espree-2.2.5.tgz#df691b9310889402aeb29cc066708c56690b854b" + +esprima-fb@3001.1.0-dev-harmony-fb, esprima-fb@^3001.1.0-dev-harmony-fb: + version "3001.1.0-dev-harmony-fb" + resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz#b77d37abcd38ea0b77426bb8bc2922ce6b426411" + +esprima-fb@~15001.1001.0-dev-harmony-fb: + version "15001.1001.0-dev-harmony-fb" + resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659" + +esprima@1.1.x, esprima@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.1.1.tgz#5b6f1547f4d102e670e140c509be6771d6aeb549" + +esprima@2.5.x: + version "2.5.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.5.0.tgz#f387a46fd344c1b1a39baf8c20bfb43b6d0058cc" + +esprima@^1.2.2: + version "1.2.5" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" + +esprima@^2.6.0, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.1, esprima@~3.1.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@~1.0.2, esprima@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" + +esrecurse@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + dependencies: + estraverse "~4.1.0" + object-assign "^4.0.1" + +esrefactor@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/esrefactor/-/esrefactor-0.1.0.tgz#d142795a282339ab81e936b5b7a21b11bf197b13" + dependencies: + escope "~0.0.13" + esprima "~1.0.2" + estraverse "~0.0.4" + +estraverse-fb@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/estraverse-fb/-/estraverse-fb-1.3.1.tgz#160e75a80e605b08ce894bcce2fe3e429abf92bf" + +"estraverse@>= 0.0.2", estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +estraverse@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-0.0.4.tgz#01a0932dfee574684a598af5a67c3bf9b6428db2" + +estraverse@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" + +estraverse@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" + +esutils@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +esutils@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" + +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +event-stream@^3.1.7, event-stream@^3.2.0, event-stream@^3.3.1, event-stream@latest: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + +events@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/events/-/events-1.0.2.tgz#75849dcfe93d10fb057c30055afdbd51d06a8e24" + +events@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +evp_bytestokey@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" + dependencies: + create-hash "^1.1.1" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +exit@0.1.2, exit@0.1.x, exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + +expand-braces@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" + dependencies: + array-slice "^0.2.3" + array-unique "^0.2.1" + braces "^0.1.2" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" + dependencies: + is-number "^0.1.1" + repeat-string "^0.2.2" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +expand-tilde@^1.2.1, expand-tilde@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" + dependencies: + os-homedir "^1.0.1" + +express@^4.12.2: + version "4.15.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.2" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.1" + depd "~1.1.0" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + finalhandler "~1.0.0" + fresh "0.5.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.3" + qs "6.4.0" + range-parser "~1.2.0" + send "0.15.1" + serve-static "1.12.1" + setprototypeof "1.0.3" + statuses "~1.3.1" + type-is "~1.6.14" + utils-merge "1.0.0" + vary "~1.1.0" + +extend@^3.0.0, extend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +extendr@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extendr/-/extendr-2.0.1.tgz#d8ab375fcbb833e4ba2cd228540f04e4aa07de90" + dependencies: + typechecker "~2.0.1" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extract-zip@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.5.0.tgz#92ccf6d81ef70a9fa4c1747114ccef6d8688a6c4" + dependencies: + concat-stream "1.5.0" + debug "0.7.4" + mkdirp "0.5.0" + yauzl "2.4.1" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fancy-log@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" + dependencies: + chalk "^1.1.1" + time-stamp "^1.0.0" + +fast-levenshtein@~1.0.0, fast-levenshtein@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz#0178dcdee023b92905193af0959e8a7639cfdcb9" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +faye-websocket@0.10.x: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.7.3.tgz#cc4074c7f4a4dfd03af54dd65c354b135132ce11" + dependencies: + websocket-driver ">=0.3.6" + +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + dependencies: + pend "~1.2.0" + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-entry-cache@^1.1.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +filename-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + +fileset@0.2.x: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.2.1.tgz#588ef8973c6623b2a76df465105696b96aac8067" + dependencies: + glob "5.x" + minimatch "2.x" + +fill-keys@^1.0.0, fill-keys@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fill-keys/-/fill-keys-1.0.2.tgz#9a8fa36f4e8ad634e3bf6b4f3c8882551452eb20" + dependencies: + is-object "~1.0.1" + merge-descriptors "~1.0.0" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +finalhandler@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.1.tgz#85a17c6c59a94717d262d61230d4b0ebe3d4a14d" + dependencies: + debug "~2.2.0" + escape-html "~1.0.3" + on-finished "~2.3.0" + unpipe "~1.0.0" + +finalhandler@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" + dependencies: + debug "2.6.3" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-index@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +findup-sync@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" + dependencies: + detect-file "^0.1.0" + is-glob "^2.0.1" + micromatch "^2.3.7" + resolve-dir "^0.1.0" + +fined@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.0.2.tgz#5b28424b760d7598960b7ef8480dff8ad3660e97" + dependencies: + expand-tilde "^1.2.1" + lodash.assignwith "^4.0.7" + lodash.isempty "^4.2.1" + lodash.isplainobject "^4.0.4" + lodash.isstring "^4.0.1" + lodash.pick "^4.2.1" + parse-filepath "^1.0.1" + +first-chunk-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" + +flagged-respawn@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5" + +flat-cache@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +foreachasync@3.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/foreachasync/-/foreachasync-3.0.0.tgz#5502987dc8714be3392097f32e0071c9dee07cf6" + +forever-agent@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +fork-stream@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/fork-stream/-/fork-stream-0.0.4.tgz#db849fce77f6708a5f8f386ae533a0907b54ae70" + +form-data@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" + dependencies: + async "~0.9.0" + combined-stream "~0.0.4" + mime "~1.2.11" + +form-data@~1.0.0-rc3: + version "1.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" + dependencies: + async "^2.0.1" + combined-stream "^1.0.5" + mime-types "^2.1.11" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" + +foundation@^4.2.1-1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/foundation/-/foundation-4.2.1.tgz#f2646e6520c678f9f7302a68f3031220f44d5e7e" + dependencies: + stylus "~0.32.1" + stylus-type-utils "~0.0.3" + +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + +front-matter@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-0.2.3.tgz#48fbaa2de1856ca475b5d38dff0b2d6d125196db" + dependencies: + yaml-js "^0.1.0" + +front-matter@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.2.tgz#f75983b9f2f413be658c93dfd7bd8ce4078f5cdb" + dependencies: + js-yaml "^3.4.6" + +fs-exists-sync@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" + +fs-extra@~0.26.4: + version "0.26.7" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-readdir-recursive@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz#315b4fb8c1ca5b8c47defef319d073dad3568059" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +gauge@~2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" + dependencies: + globule "~0.1.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +getpass@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + dependencies: + assert-plus "^1.0.0" + +getsetdeep@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/getsetdeep/-/getsetdeep-2.0.0.tgz#f13384fe656d0a3f41c214cbdf31001a57c12492" + dependencies: + typechecker "~2.0.1" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob-stream@^3.1.5: + version "3.1.18" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" + dependencies: + glob "^4.3.1" + glob2base "^0.0.12" + minimatch "^2.0.1" + ordered-read-streams "^0.1.0" + through2 "^0.6.1" + unique-stream "^1.0.0" + +glob-watcher@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" + dependencies: + gaze "^0.5.1" + +glob2base@^0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" + dependencies: + find-index "^0.1.1" + +glob@5.x, glob@^5.0.14, glob@^5.0.15, glob@^5.0.5: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^3.2.11, glob@~3.2.8, glob@~3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" + dependencies: + inherits "2" + minimatch "0.3" + +glob@^4.0.5, glob@^4.3.1: + version "4.5.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "^2.0.1" + once "^1.3.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~3.1.21: + version "3.1.21" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" + dependencies: + graceful-fs "~1.2.0" + inherits "1" + minimatch "~0.2.11" + +global-modules@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" + dependencies: + global-prefix "^0.1.4" + is-windows "^0.2.0" + +global-prefix@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" + dependencies: + homedir-polyfill "^1.0.0" + ini "^1.3.4" + is-windows "^0.2.0" + which "^1.2.12" + +globals@^6.4.0: + version "6.4.1" + resolved "https://registry.yarnpkg.com/globals/-/globals-6.4.1.tgz#8498032b3b6d1cc81eebc5f79690d8fe29fabf4f" + +globals@^8.11.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" + +globals@^9.0.0: + version "9.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globule@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" + dependencies: + glob "~3.1.21" + lodash "~1.0.1" + minimatch "~0.2.11" + +glogg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" + dependencies: + sparkles "^1.0.0" + +graceful-fs@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" + dependencies: + natives "^1.1.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +graceful-fs@~1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +graphlib@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-1.0.7.tgz#0cab2df0ffe6abe070b2625bfa1edb6ec967b8b1" + dependencies: + lodash "^3.10.0" + +gulp-bower@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/gulp-bower/-/gulp-bower-0.0.10.tgz#11cce5e6284981cda6462e699bdec5279ec4eaae" + dependencies: + bower "^1.3.12" + gulp-util "3.0.1" + through2 "0.6.2" + walk "2.3.3" + +gulp-browserify@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/gulp-browserify/-/gulp-browserify-0.5.1.tgz#820108ac2554a954adb8be17d23958b0c04be083" + dependencies: + browserify "3.x" + browserify-shim "~2.0.10" + gulp-util "~2.2.5" + readable-stream "~1.1.10" + through2 "~0.4.0" + +gulp-bump@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/gulp-bump/-/gulp-bump-0.1.13.tgz#4e1b0da8d56267566c3d8b832da8c0833939f702" + dependencies: + gulp-util "^3.0.1" + semver "^2.3.2" + through2 "^0.5.1" + +gulp-concat@~2.4.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.4.3.tgz#dd913c3773b02f9dfb3f70e30215dc07a5cf32f7" + dependencies: + concat-with-sourcemaps "^1.0.0" + gulp-util "^3.0.1" + through "^2.3.4" + +gulp-data@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/gulp-data/-/gulp-data-1.2.1.tgz#a94b54de7d4f3b8ea1f40ef859749c24578cf12b" + dependencies: + gulp-util "^3.0.7" + through2 "^2.0.0" + util-extend "^1.0.1" + +gulp-dox@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/gulp-dox/-/gulp-dox-0.1.6.tgz#9ac7c483a3a6ad3a67c5f3d0f571908795a88d45" + dependencies: + dox "^0.8.0" + gulp-util "^3.0.4" + through2 "^2.0.0" + +gulp-ext-replace@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/gulp-ext-replace/-/gulp-ext-replace-0.2.0.tgz#cb27c0f1eb2b31a5fd79e999f7b90a688d1b66e6" + dependencies: + through2 "~0.6.5" + +gulp-filelog@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/gulp-filelog/-/gulp-filelog-0.4.1.tgz#bbfa62f45fd1fca8a046b1dc96e4e03c87a96392" + dependencies: + gulp-util "~3.0.1" + through2 "*" + +gulp-front-matter@^1.2.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/gulp-front-matter/-/gulp-front-matter-1.3.0.tgz#5ee466fbfafb33420bcd5e0267bb6819444ab06d" + dependencies: + front-matter "^2.0.0" + gulp-util "^3.0.6" + object-path "^0.9.2" + readable-stream "^2.0.3" + tryit "^1.0.1" + vinyl-bufferstream "^1.0.1" + +gulp-git@~0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/gulp-git/-/gulp-git-0.3.6.tgz#77ec3da22925c246edd796ca10d4163965d8140a" + dependencies: + any-shell-escape "^0.1.1" + gulp-util "~2.2.14" + map-stream "~0.1.0" + through2 "^0.4.1" + +gulp-hogan@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/gulp-hogan/-/gulp-hogan-1.2.1.tgz#977bdc74ad18c103cb3a4d4666d16dda587078fc" + dependencies: + event-stream "^3.1.7" + gulp-util "^3.0.1" + hogan.js "^3.0.2" + map-stream "^0.0.6" + +gulp-if@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/gulp-if/-/gulp-if-1.2.5.tgz#9bd9c16032ecc28e0154bfb05828d233166f2da9" + dependencies: + gulp-match "~0.2.1" + ternary-stream "^1.2.0" + through2 "~0.6.2" + +gulp-insert@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/gulp-insert/-/gulp-insert-0.4.0.tgz#781213f110de39e9b36ca8c3bb502e045a58cdfd" + dependencies: + readable-stream "^1.0.26-4" + streamqueue "0.0.6" + +gulp-istanbul@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/gulp-istanbul/-/gulp-istanbul-0.4.0.tgz#a46c0d3adc21ecc8757888fab73a1b7f09874ecf" + dependencies: + gulp-util "^3.0.1" + istanbul "^0.3.2" + lodash "^2.4.1" + through2 "^0.6.3" + +gulp-jasmine-browser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/gulp-jasmine-browser/-/gulp-jasmine-browser-0.2.3.tgz#a5875affc90cd1e29f0fbffa32613ca00fadf3f5" + dependencies: + babel-runtime "^5.5.4" + es6-promisify "^1.1.1" + event-stream "^3.3.1" + express "^4.12.2" + jasmine-core "^2.2.0" + lazypipe "^1.0.1" + lodash.once "^3.0.1" + mime "^1.3.4" + portfinder "^0.4.0" + serve-favicon "^2.3.0" + stream-reduce "^1.0.3" + through2 "^1.1.1" + vinyl "^0.4.6" + +gulp-jasmine@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/gulp-jasmine/-/gulp-jasmine-2.1.0.tgz#7a588336cb68fd88c227f63c49758b1a4d13cc99" + dependencies: + arrify "^1.0.0" + gulp-util "^3.0.0" + jasmine "^2.1.0" + jasmine-terminal-reporter "^1.0.0" + through2 "^2.0.0" + +gulp-jison@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gulp-jison/-/gulp-jison-1.2.0.tgz#3a81fdb5c58d40709578dc08183fa38a4112aa49" + dependencies: + gulp-util "~3.0.4" + jison "~0.4.15" + through2 "~0.6.3" + +gulp-jshint@^1.9.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/gulp-jshint/-/gulp-jshint-1.12.0.tgz#23fbd1bafdd6fbfe61ea64667a74809a961d03de" + dependencies: + gulp-util "^3.0.0" + jshint "^2.7.0" + lodash "^3.0.1" + minimatch "^2.0.1" + rcloader "0.1.2" + through2 "~0.6.1" + +gulp-less@^3.0.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/gulp-less/-/gulp-less-3.3.0.tgz#d085565da3c810307fde7c7874e86520dc503234" + dependencies: + accord "^0.26.3" + gulp-util "^3.0.7" + less "2.6.x || ^2.7.1" + object-assign "^4.0.1" + through2 "^2.0.0" + vinyl-sourcemaps-apply "^0.2.0" + +gulp-livereload@^3.8.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/gulp-livereload/-/gulp-livereload-3.8.1.tgz#00f744b2d749d3e9e3746589c8a44acac779b50f" + dependencies: + chalk "^0.5.1" + debug "^2.1.0" + event-stream "^3.1.7" + gulp-util "^3.0.2" + lodash.assign "^3.0.0" + mini-lr "^0.1.8" + +gulp-marked@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulp-marked/-/gulp-marked-1.0.0.tgz#4d09826680a1708eff400e2711a2990a63f43229" + dependencies: + bufferstreams "0.0.1" + gulp-util "~2.2.9" + lodash "^2.4.1" + marked "~0.3.2" + +gulp-match@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/gulp-match/-/gulp-match-0.2.1.tgz#0bed08da8bd6e89686f89ffb004337f8bad06d22" + dependencies: + minimatch "^1.0.0" + +gulp-mdvars@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/gulp-mdvars/-/gulp-mdvars-2.0.0.tgz#7850864311ce4efe77743f56b5238bf28ab843fc" + dependencies: + gulp-util "~3.0.6" + mdvars "1.0.1" + readable-stream "^2.0.1" + +gulp-qunit@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/gulp-qunit/-/gulp-qunit-1.2.1.tgz#d175e8b94890bf3f79f10b27c471fb6264692c23" + dependencies: + chalk "^0.5.1" + gulp-util "^3.0.0" + phantomjs "^1.9.12" + qunit-phantomjs-runner "^2.1.0" + through2 "^0.6.1" + +gulp-rename@~1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817" + +gulp-shell@^0.2.10: + version "0.2.11" + resolved "https://registry.yarnpkg.com/gulp-shell/-/gulp-shell-0.2.11.tgz#19ba680b65a866f6042ede0b0e34b62db71f2139" + dependencies: + async "~0.9.0" + gulp-util "~3.0.1" + lodash "~2.4.1" + through2 "~0.6.3" + +gulp-tag-version@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/gulp-tag-version/-/gulp-tag-version-1.3.0.tgz#8448c87eed1866db8e6cb598bc419be2df7c47db" + dependencies: + gulp-git "~0.3.6" + gulp-util "~2.2.14" + map-stream "~0.1.0" + +gulp-uglify@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-1.0.2.tgz#d759829e483b97205f86dc86229e85f56c8974d6" + dependencies: + deepmerge ">=0.2.7 <0.3.0-0" + gulp-util ">=3.0.0 <4.0.0-0" + through2 ">=0.6.1 <1.0.0-0" + uglify-js "2.4.15" + vinyl-sourcemaps-apply ">=0.1.1 <0.2.0-0" + +gulp-util@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.1.tgz#8214894d05c2bb6cc7f5544918a51ddf88180f00" + dependencies: + chalk "^0.5.0" + dateformat "^1.0.7-1.2.3" + lodash "^2.4.1" + lodash._reinterpolate "^2.4.1" + lodash.template "^2.4.1" + minimist "^1.1.0" + multipipe "^0.1.0" + through2 "^0.6.1" + vinyl "^0.4.0" + +"gulp-util@>=3.0.0 <4.0.0-0", gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.2, gulp-util@^3.0.4, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.1, gulp-util@~3.0.4, gulp-util@~3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulp-util@~2.2.14, gulp-util@~2.2.5, gulp-util@~2.2.9: + version "2.2.20" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-2.2.20.tgz#d7146e5728910bd8f047a6b0b1e549bc22dbd64c" + dependencies: + chalk "^0.5.0" + dateformat "^1.0.7-1.2.3" + lodash._reinterpolate "^2.4.1" + lodash.template "^2.4.1" + minimist "^0.2.0" + multipipe "^0.1.0" + through2 "^0.5.0" + vinyl "^0.2.1" + +gulp-vartree@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/gulp-vartree/-/gulp-vartree-2.0.1.tgz#5898564e822bdade785c5566a2e0b60033d85605" + dependencies: + gulp-util "~3.0.6" + readable-stream "^2.0.1" + +gulp@~3.9.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" + dependencies: + archy "^1.0.0" + chalk "^1.0.0" + deprecated "^0.0.1" + gulp-util "^3.0.0" + interpret "^1.0.0" + liftoff "^2.1.0" + minimist "^1.1.0" + orchestrator "^0.3.0" + pretty-hrtime "^1.0.0" + semver "^4.1.0" + tildify "^1.0.0" + v8flags "^2.0.2" + vinyl-fs "^0.3.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + dependencies: + glogg "^1.0.0" + +handlebars@^4.0.0, handlebars@^4.0.1: + version "4.0.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~2.0.2: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" + dependencies: + ansi-regex "^0.2.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-binary@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c" + dependencies: + isarray "0.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + dependencies: + sparkles "^1.0.0" + +has-require@^1.1.0, has-require@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/has-require/-/has-require-1.2.2.tgz#921675ab130dbd9768fc8da8f1a8e242dfa41774" + dependencies: + escape-string-regexp "^1.0.3" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" + dependencies: + inherits "^2.0.1" + +hasha@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1" + dependencies: + is-stream "^1.0.1" + pinkie-promise "^2.0.0" + +hat@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a" + +hawk@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.0.0.tgz#b90bb169807285411da7ffcb8dd2598502d3b52d" + dependencies: + boom "0.4.x" + cryptiles "0.2.x" + hoek "0.9.x" + sntp "0.2.x" + +hawk@~3.1.0, hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +he@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/he/-/he-0.5.0.tgz#2c05ffaef90b68e860f3fd2b54ef580989277ee2" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@0.9.x: + version "0.9.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hogan.js@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" + dependencies: + mkdirp "0.3.0" + nopt "1.0.10" + +home-or-tmp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-1.0.0.tgz#4b9f1e40800c3e50c6c27f781676afcce71f3985" + dependencies: + os-tmpdir "^1.0.1" + user-home "^1.1.1" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +homedir-polyfill@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.4.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.1.tgz#4b0445e41c004a8bd1337773a4ff790ca40318c8" + +htmlescape@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" + +htmlparser2@3.8.x: + version "3.8.3" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" + dependencies: + domelementtype "1" + domhandler "2.3" + domutils "1.5" + entities "1.0" + readable-stream "1.1" + +"htmlparser2@>= 3.7.3 < 4.0.0": + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +http-browserify@^1.4.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.7.0.tgz#33795ade72df88acfbfd36773cefeda764735b20" + dependencies: + Base64 "~0.2.0" + inherits "~2.0.1" + +http-browserify@~1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.3.2.tgz#b562c34479349a690d7a6597df495aefa8c604f5" + dependencies: + Base64 "~0.2.0" + inherits "~2.0.1" + +http-errors@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz#197e22cdebd4198585e8694ef6786197b91ed942" + dependencies: + inherits "~2.0.1" + statuses "1" + +http-errors@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" + dependencies: + inherits "2.0.3" + setprototypeof "1.0.2" + statuses ">= 1.3.1 < 2" + +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-proxy@^1.13.0: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + +http-signature@~0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" + dependencies: + asn1 "0.1.11" + assert-plus "^0.1.5" + ctype "0.5.3" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + +https-browserify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + +iconv-lite@0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + +iconv-lite@0.4.15, iconv-lite@^0.4.5: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + +ieee754@^1.1.4, ieee754@~1.1.1: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +image-size@~0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.1.tgz#28eea8548a4b1443480ddddc1e083ae54652439f" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +indx@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/indx/-/indx-0.2.3.tgz#15dcf56ee9cf65c0234c513c27fbd580e70fbc50" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@^1.3.4, ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +inline-source-map@~0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.3.1.tgz#a528b514e689fce90db3089e870d92f527acb5eb" + dependencies: + source-map "~0.3.0" + +inline-source-map@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.5.0.tgz#4a4c5dd8e4fb5e9b3cda60c822dfadcaee66e0af" + dependencies: + source-map "~0.4.0" + +inline-source-map@~0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" + dependencies: + source-map "~0.5.3" + +inquirer@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.11.4.tgz#81e3374e8361beaff2d97016206d359d0b32fa4d" + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^1.0.1" + figures "^1.3.5" + lodash "^3.3.1" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + +insert-module-globals@^6.1.0, insert-module-globals@^6.4.1: + version "6.6.3" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-6.6.3.tgz#20638e29a30f9ed1ca2e3a825fbc2cba5246ddfc" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.6.1" + concat-stream "~1.4.1" + is-buffer "^1.1.0" + lexical-scope "^1.2.0" + process "~0.11.0" + through2 "^1.0.0" + xtend "^4.0.0" + +insert-module-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.1.tgz#c03bf4e01cb086d5b5e5ace8ad0afe7889d638c3" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.7.1" + concat-stream "~1.5.1" + is-buffer "^1.1.0" + lexical-scope "^1.2.0" + process "~0.11.0" + through2 "^2.0.0" + xtend "^4.0.0" + +insert-module-globals@~6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-6.0.0.tgz#ee8aeb9dee16819e33aa14588a558824af0c15dc" + dependencies: + JSONStream "~0.7.1" + concat-stream "~1.4.1" + lexical-scope "~1.1.0" + process "~0.6.0" + through "~2.3.4" + xtend "^3.0.0" + +interpret@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.2.tgz#f4f623f0bb7122f15f5717c8e254b8161b5c5b2d" + +invariant@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +ipaddr.js@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" + +irregular-plurals@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.2.0.tgz#38f299834ba8c00c30be9c554e137269752ff3ac" + +is-absolute@^0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" + dependencies: + is-relative "^0.2.1" + is-windows "^0.2.0" + +is-array@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-array/-/is-array-1.0.1.tgz#e9850cc2cc860c3bc0977e84ccf0dd464584279a" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.0.2, is-buffer@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-integer@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.6.tgz#5273819fada880d123e1ac00a938e7172dd8d95e" + dependencies: + is-finite "^1.0.0" + +is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: + version "2.16.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-number@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-object@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-relative@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" + dependencies: + is-unc-path "^0.1.1" + +is-resolvable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + dependencies: + tryit "^1.0.1" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-unc-path@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" + dependencies: + unc-path-regex "^0.1.0" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-windows@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" + +isarray@0.0.1, isarray@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isbinaryfile@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul@^0.3.2: + version "0.3.22" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.3.22.tgz#3e164d85021fe19c985d1f0e7ef0c3e22d012eb6" + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.7.x" + esprima "2.5.x" + fileset "0.2.x" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +jasmine-core@^2.2.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297" + +jasmine-core@~2.3.0: + version "2.3.4" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.3.4.tgz#ad772662b32d16c564ee25c863edae1d65a038f2" + +jasmine-es6@0.0.18: + version "0.0.18" + resolved "https://registry.yarnpkg.com/jasmine-es6/-/jasmine-es6-0.0.18.tgz#3fbae403e7e1bf2e29b890182325a330caae3f49" + dependencies: + babel "^5.8.23" + babel-runtime "<= 5.8.23" + es6-promise "^3.0.2" + jasmine "^2.3.2" + +jasmine-terminal-reporter@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/jasmine-terminal-reporter/-/jasmine-terminal-reporter-1.0.3.tgz#896f1ec8fdf4bf6aecdd41c503eda7347f61526b" + dependencies: + indent-string "^2.1.0" + pluralize "^1.2.1" + +jasmine@2.3.2, jasmine@^2.1.0, jasmine@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.3.2.tgz#febf0e4b4afff63c2d09211f077da0b859f5f191" + dependencies: + exit "^0.1.2" + glob "^3.2.11" + jasmine-core "~2.3.0" + +jison-lex@0.3.x: + version "0.3.4" + resolved "https://registry.yarnpkg.com/jison-lex/-/jison-lex-0.3.4.tgz#81ca28d84f84499dfa8c594dcde3d8a3f26ec7a5" + dependencies: + lex-parser "0.1.x" + nomnom "1.5.2" + +jison@zaach/jison: + version "0.4.17" + resolved "https://codeload.github.com/zaach/jison/tar.gz/7653842e5120510b0b77484ac90d6c569cf146fd" + dependencies: + JSONSelect "0.4.0" + cjson "0.3.0" + ebnf-parser "0.1.10" + escodegen "1.3.x" + esprima "1.1.x" + jison-lex "0.3.x" + lex-parser "~0.1.3" + nomnom "1.5.2" + +jison@~0.4.15: + version "0.4.17" + resolved "https://registry.yarnpkg.com/jison/-/jison-0.4.17.tgz#bc12d46c5845e6fee89ccf35bd2a8cc73eba17f3" + dependencies: + JSONSelect "0.4.0" + cjson "0.3.0" + ebnf-parser "0.1.10" + escodegen "1.3.x" + esprima "1.1.x" + jison-lex "0.3.x" + lex-parser "~0.1.3" + nomnom "1.5.2" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-string-escape@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + +js-tokens@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.1.tgz#cc435a5c8b94ad15acb7983140fc80182c89aeae" + +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + +js-yaml@3.4.5: + version "3.4.5" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.4.5.tgz#c3403797df12b91866574f2de23646fe8cafb44d" + dependencies: + argparse "^1.0.2" + esprima "^2.6.0" + +js-yaml@3.x, js-yaml@^3.4.6: + version "3.8.3" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdoctypeparser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz#e7dedc153a11849ffc5141144ae86a7ef0c25392" + dependencies: + lodash "^3.7.0" + +jsdom@^6.5.0, jsdom@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-6.5.1.tgz#b6064d6a7651081af41d576edc56bc51e00122c0" + dependencies: + acorn "^2.4.0" + acorn-globals "^1.0.4" + browser-request ">= 0.3.1 < 0.4.0" + cssom ">= 0.3.0 < 0.4.0" + cssstyle ">= 0.2.29 < 0.3.0" + escodegen "^1.6.1" + htmlparser2 ">= 3.7.3 < 4.0.0" + nwmatcher ">= 1.3.6 < 2.0.0" + parse5 "^1.4.2" + request "^2.55.0" + symbol-tree ">= 3.1.0 < 4.0.0" + tough-cookie "^2.0.0" + whatwg-url-compat "~0.6.5" + xml-name-validator ">= 2.0.1 < 3.0.0" + xmlhttprequest ">= 1.6.0 < 2.0.0" + xtend "^4.0.0" + +jsdom@^7.0.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-7.2.2.tgz#40b402770c2bda23469096bee91ab675e3b1fc6e" + dependencies: + abab "^1.0.0" + acorn "^2.4.0" + acorn-globals "^1.0.4" + cssom ">= 0.3.0 < 0.4.0" + cssstyle ">= 0.2.29 < 0.3.0" + escodegen "^1.6.1" + nwmatcher ">= 1.3.7 < 2.0.0" + parse5 "^1.5.1" + request "^2.55.0" + sax "^1.1.4" + symbol-tree ">= 3.1.0 < 4.0.0" + tough-cookie "^2.2.0" + webidl-conversions "^2.0.0" + whatwg-url-compat "~0.6.5" + xml-name-validator ">= 2.0.1 < 3.0.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +jshint-stylish@^2.0.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/jshint-stylish/-/jshint-stylish-2.2.1.tgz#242082a2c035ae03fd81044e0570cc4208cf6e61" + dependencies: + beeper "^1.1.0" + chalk "^1.0.0" + log-symbols "^1.0.0" + plur "^2.1.0" + string-length "^1.0.0" + text-table "^0.2.0" + +jshint@^2.7.0: + version "2.9.4" + resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.9.4.tgz#5e3ba97848d5290273db514aee47fe24cf592934" + dependencies: + cli "~1.0.0" + console-browserify "1.1.x" + exit "0.1.x" + htmlparser2 "3.8.x" + lodash "3.7.x" + minimatch "~3.0.2" + shelljs "0.3.x" + strip-json-comments "1.0.x" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stable-stringify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonlint@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/jsonlint/-/jsonlint-1.6.0.tgz#88aa46bc289a7ac93bb46cae2d58a187a9bb494a" + dependencies: + JSV ">= 4.0.x" + nomnom ">= 1.5.x" + +jsonparse@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-0.0.5.tgz#330542ad3f0a654665b778f3eb2d9a9fa507ac64" + +jsonparse@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.0.tgz#85fc245b1d9259acc6941960b905adf64e7de0e8" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + dependencies: + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +karma-babel-preprocessor@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/karma-babel-preprocessor/-/karma-babel-preprocessor-6.0.1.tgz#7ae1d3e64950dbe11f421b74040ab08fb5a66c21" + dependencies: + babel-core "^6.0.0" + +karma-browserify@^4.4.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/karma-browserify/-/karma-browserify-4.4.2.tgz#412ee1fc6332ed2489d80c7997caa3ce6b3ad461" + dependencies: + browserify "10.2.3" + convert-source-map "~0.3.3" + hat "0.0.3" + js-string-escape "^1.0.0" + lodash "^3.10.1" + minimatch "^1.0.0" + os-shim "~0.1.2" + watchify "3.2.1" + +karma-jasmine@^0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-0.3.8.tgz#5b6457791ad9b89aa173f079e3ebe1b8c805236c" + +karma-phantomjs-launcher@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-0.2.3.tgz#77f68243fad7852c5b321bcf9d691f1223cc0809" + dependencies: + lodash "^3.10.1" + +karma@^0.13.15: + version "0.13.22" + resolved "https://registry.yarnpkg.com/karma/-/karma-0.13.22.tgz#07750b1bd063d7e7e7b91bcd2e6354d8f2aa8744" + dependencies: + batch "^0.5.3" + bluebird "^2.9.27" + body-parser "^1.12.4" + chokidar "^1.4.1" + colors "^1.1.0" + connect "^3.3.5" + core-js "^2.1.0" + di "^0.0.1" + dom-serialize "^2.2.0" + expand-braces "^0.1.1" + glob "^7.0.0" + graceful-fs "^4.1.2" + http-proxy "^1.13.0" + isbinaryfile "^3.0.0" + lodash "^3.8.0" + log4js "^0.6.31" + mime "^1.3.4" + minimatch "^3.0.0" + optimist "^0.6.1" + rimraf "^2.3.3" + socket.io "^1.4.5" + source-map "^0.5.3" + useragent "^2.1.6" + +kew@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" + +keypress@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.2.1.tgz#1e80454250018dbad4c3fe94497d6e67b6269c77" + +kind-of@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" + dependencies: + is-buffer "^1.0.2" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" + +labeled-stream-splicer@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz#4615331537784981e8fd264e1f3a434c4e0ddd65" + dependencies: + inherits "^2.0.1" + isarray "~0.0.1" + stream-splicer "^1.1.0" + +labeled-stream-splicer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59" + dependencies: + inherits "^2.0.1" + isarray "~0.0.1" + stream-splicer "^2.0.0" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lazypipe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazypipe/-/lazypipe-1.0.1.tgz#1471aef6b37a340d51c34df44699dcef064c1940" + dependencies: + stream-combiner "*" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +lcov-parse@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.6.tgz#819e5da8bf0791f9d3f39eea5ed1868187f11175" + +"less@2.6.x || ^2.7.1": + version "2.7.2" + resolved "https://registry.yarnpkg.com/less/-/less-2.7.2.tgz#368d6cc73e1fb03981183280918743c5dcf9b3df" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.2.11" + mkdirp "^0.5.0" + promise "^7.1.1" + request "^2.72.0" + source-map "^0.5.3" + +leven@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" + +levn@~0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.2.5.tgz#ba8d339d0ca4a610e3a3f145b9caf48807155054" + dependencies: + prelude-ls "~1.1.0" + type-check "~0.3.1" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lex-parser@0.1.x, lex-parser@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/lex-parser/-/lex-parser-0.1.4.tgz#64c4f025f17fd53bfb45763faeb16f015a747550" + +lexical-scope@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" + dependencies: + astw "^2.0.0" + +lexical-scope@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.1.1.tgz#debac1067435f1359d90fcfd9e94bcb2ee47b2bf" + dependencies: + astw "^2.0.0" + +liftoff@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385" + dependencies: + extend "^3.0.0" + findup-sync "^0.4.2" + fined "^1.0.1" + flagged-respawn "^0.3.2" + lodash.isplainobject "^4.0.4" + lodash.isstring "^4.0.1" + lodash.mapvalues "^4.4.0" + rechoir "^0.6.2" + resolve "^1.1.7" + +live-server@^0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/live-server/-/live-server-0.9.2.tgz#8bcb58e846331f3f2b6d172f95d4f70a4fcf3760" + dependencies: + colors latest + connect "3.4.x" + event-stream latest + faye-websocket "0.10.x" + morgan "^1.6.1" + object-assign latest + opn latest + send latest + serve-index "^1.7.2" + watchr "2.3.x" + +livereload-js@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.2.2.tgz#6c87257e648ab475bc24ea257457edcc1f8d0bc2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +lodash._arraycopy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" + +lodash._arrayeach@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" + +lodash._arraymap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz#1a8fd0f4c0df4b61dea076d717cdc97f0a3c3e66" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._baseclone@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" + dependencies: + lodash._arraycopy "^3.0.0" + lodash._arrayeach "^3.0.0" + lodash._baseassign "^3.0.0" + lodash._basefor "^3.0.0" + lodash.isarray "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basedifference@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basedifference/-/lodash._basedifference-3.0.3.tgz#f2c204296c2a78e02b389081b6edcac933cf629c" + dependencies: + lodash._baseindexof "^3.0.0" + lodash._cacheindexof "^3.0.0" + lodash._createcache "^3.0.0" + +lodash._baseflatten@^3.0.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7" + dependencies: + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash._basefor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" + +lodash._baseindexof@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + +lodash._cacheindexof@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + +lodash._createassigner@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" + dependencies: + lodash._bindcallback "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.restparam "^3.0.0" + +lodash._createcache@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + dependencies: + lodash._getnative "^3.0.0" + +lodash._escapehtmlchar@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz#df67c3bb6b7e8e1e831ab48bfa0795b92afe899d" + dependencies: + lodash._htmlescapes "~2.4.1" + +lodash._escapestringchar@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz#ecfe22618a2ade50bfeea43937e51df66f0edb72" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._htmlescapes@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz#32d14bf0844b6de6f8b62a051b4f67c228b624cb" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._isnative@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c" + +lodash._objecttypes@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" + +lodash._pickbyarray@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._pickbyarray/-/lodash._pickbyarray-3.0.2.tgz#1f898d9607eb560b0e167384b77c7c6d108aa4c5" + +lodash._pickbycallback@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._pickbycallback/-/lodash._pickbycallback-3.0.0.tgz#ff61b9a017a7b3af7d30e6c53de28afa19b8750a" + dependencies: + lodash._basefor "^3.0.0" + lodash.keysin "^3.0.0" + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + +lodash._reinterpolate@^2.4.1, lodash._reinterpolate@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz#4f1227aa5a8711fc632f5b07a1f4607aab8b3222" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash._reunescapedhtml@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz#747c4fc40103eb3bb8a0976e571f7a2659e93ba7" + dependencies: + lodash._htmlescapes "~2.4.1" + lodash.keys "~2.4.1" + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + +lodash._shimkeys@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203" + dependencies: + lodash._objecttypes "~2.4.1" + +lodash.assign@^3.0.0, lodash.assign@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" + dependencies: + lodash._baseassign "^3.0.0" + lodash._createassigner "^3.0.0" + lodash.keys "^3.0.0" + +lodash.assignwith@^4.0.7: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz#127a97f02adc41751a954d24b0de17e100e038eb" + +lodash.before@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.before/-/lodash.before-3.0.3.tgz#687783660ea1a8fac4f01e2774de0f5206b161ce" + +lodash.clone@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" + +lodash.clonedeep@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" + dependencies: + lodash._baseclone "^3.0.0" + lodash._bindcallback "^3.0.0" + +lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + +lodash.defaults@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz#a7e8885f05e68851144b6e12a8f3678026bc4c54" + dependencies: + lodash._objecttypes "~2.4.1" + lodash.keys "~2.4.1" + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + dependencies: + lodash._root "^3.0.0" + +lodash.escape@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-2.4.1.tgz#2ce12c5e084db0a57dda5e5d1eeeb9f5d175a3b4" + dependencies: + lodash._escapehtmlchar "~2.4.1" + lodash._reunescapedhtml "~2.4.1" + lodash.keys "~2.4.1" + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isempty@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" + +lodash.isobject@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" + dependencies: + lodash._objecttypes "~2.4.1" + +lodash.isplainobject@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5" + dependencies: + lodash._basefor "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.keysin "^3.0.0" + +lodash.isplainobject@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + +lodash.istypedarray@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.keys@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727" + dependencies: + lodash._isnative "~2.4.1" + lodash._shimkeys "~2.4.1" + lodash.isobject "~2.4.1" + +lodash.keysin@^3.0.0: + version "3.0.8" + resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" + dependencies: + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.mapvalues@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + +lodash.memoize@~3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + +lodash.merge@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994" + dependencies: + lodash._arraycopy "^3.0.0" + lodash._arrayeach "^3.0.0" + lodash._createassigner "^3.0.0" + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.isplainobject "^3.0.0" + lodash.istypedarray "^3.0.0" + lodash.keys "^3.0.0" + lodash.keysin "^3.0.0" + lodash.toplainobject "^3.0.0" + +lodash.merge@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + +lodash.omit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-3.1.0.tgz#897fe382e6413d9ac97c61f78ed1e057a00af9f3" + dependencies: + lodash._arraymap "^3.0.0" + lodash._basedifference "^3.0.0" + lodash._baseflatten "^3.0.0" + lodash._bindcallback "^3.0.0" + lodash._pickbyarray "^3.0.0" + lodash._pickbycallback "^3.0.0" + lodash.keysin "^3.0.0" + lodash.restparam "^3.0.0" + +lodash.once@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-3.0.1.tgz#18137ec96fa3cce868226f3dabb9ea70d0bc128f" + dependencies: + lodash.before "^3.0.0" + +lodash.partialright@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.partialright/-/lodash.partialright-4.2.1.tgz#0130d80e83363264d40074f329b8a3e7a8a1cc4b" + +lodash.pick@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-3.1.0.tgz#f252a855b2046b61bcd3904b26f76bd2efc65550" + dependencies: + lodash._baseflatten "^3.0.0" + lodash._bindcallback "^3.0.0" + lodash._pickbyarray "^3.0.0" + lodash._pickbycallback "^3.0.0" + lodash.restparam "^3.0.0" + +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.template@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-2.4.1.tgz#9e611007edf629129a974ab3c48b817b3e1cf20d" + dependencies: + lodash._escapestringchar "~2.4.1" + lodash._reinterpolate "~2.4.1" + lodash.defaults "~2.4.1" + lodash.escape "~2.4.1" + lodash.keys "~2.4.1" + lodash.templatesettings "~2.4.1" + lodash.values "~2.4.1" + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash.templatesettings@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz#ea76c75d11eb86d4dbe89a83893bb861929ac699" + dependencies: + lodash._reinterpolate "~2.4.1" + lodash.escape "~2.4.1" + +lodash.toplainobject@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keysin "^3.0.0" + +lodash.uniq@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + +lodash.values@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.4.1.tgz#abf514436b3cb705001627978cbcf30b1280eea4" + dependencies: + lodash.keys "~2.4.1" + +lodash@3.7.x: + version "3.7.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.7.0.tgz#3678bd8ab995057c07ade836ed2ef087da811d45" + +lodash@^2.4.1, lodash@~2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" + +lodash@^3.0.1, lodash@^3.10.0, lodash@^3.10.1, lodash@^3.2.0, lodash@^3.3.1, lodash@^3.7.0, lodash@^3.8.0, lodash@^3.9.3: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +lodash@^4.13.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.6.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +lodash@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" + +log-symbols@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + dependencies: + chalk "^1.0.0" + +log4js@^0.6.31: + version "0.6.38" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" + dependencies: + readable-stream "~1.0.2" + semver "~4.3.3" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +lru-cache@2.2.x: + version "2.2.4" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" + +map-cache@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +map-stream@0.0.6, map-stream@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.6.tgz#d2ef4eb811a28644c7a8989985c69c2fdd496827" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + +marked@^0.3.2, marked@~0.3.2, marked@~0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" + +mdvars@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdvars/-/mdvars-1.0.1.tgz#e939751ed7fef17a2e42fde68cbbddd138291420" + dependencies: + varstream "0.3.x" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1, merge-descriptors@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +merge-stream@~0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-0.1.8.tgz#48a07b3b4a121d74a3edbfdcdb4b08adbf0240b1" + dependencies: + through2 "^0.6.1" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5, micromatch@^2.3.7: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +miller-rabin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + +mime@1.3.4, mime@^1.2.11, mime@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +mime@~1.2.11, mime@~1.2.9: + version "1.2.11" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + +mini-lr@^0.1.8: + version "0.1.9" + resolved "https://registry.yarnpkg.com/mini-lr/-/mini-lr-0.1.9.tgz#02199d27347953d1fd1d6dbded4261f187b2d0f6" + dependencies: + body-parser "~1.14.0" + debug "^2.2.0" + faye-websocket "~0.7.2" + livereload-js "^2.2.0" + parseurl "~1.3.0" + qs "~2.2.3" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +minimatch@0.3: + version "0.3.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +minimatch@2.x, minimatch@^2.0.1, minimatch@^2.0.3: + version "2.0.10" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" + dependencies: + brace-expansion "^1.0.0" + +minimatch@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-1.0.0.tgz#e0dd2120b49e1b724ce8d714c520822a9438576d" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimatch@~0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.0.tgz#4dffe525dae2b864c66c2e23c6271d7afdecefce" + +minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.7, minimist@~0.0.9: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +mkdirp@0.3.0, mkdirp@0.3.x: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + +mkdirp@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" + dependencies: + minimist "0.0.8" + +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mock-browser@^0.91.34: + version "0.91.34" + resolved "https://registry.yarnpkg.com/mock-browser/-/mock-browser-0.91.34.tgz#945c137c0909d964440264a32303d68bfb13105f" + dependencies: + jsdom "^6.5.0" + lodash "^3.10.1" + +module-deps@^3.5.0, module-deps@^3.7.11: + version "3.9.1" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-3.9.1.tgz#ea75caf9199090d25b0d5512b5acacb96e7f87f3" + dependencies: + JSONStream "^1.0.3" + browser-resolve "^1.7.0" + concat-stream "~1.4.5" + defined "^1.0.0" + detective "^4.0.0" + duplexer2 "0.0.2" + inherits "^2.0.1" + parents "^1.0.0" + readable-stream "^1.1.13" + resolve "^1.1.3" + stream-combiner2 "~1.0.0" + subarg "^1.0.0" + through2 "^1.0.0" + xtend "^4.0.0" + +module-deps@^4.0.8: + version "4.1.1" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd" + dependencies: + JSONStream "^1.0.3" + browser-resolve "^1.7.0" + cached-path-relative "^1.0.0" + concat-stream "~1.5.0" + defined "^1.0.0" + detective "^4.0.0" + duplexer2 "^0.1.2" + inherits "^2.0.1" + parents "^1.0.0" + readable-stream "^2.0.2" + resolve "^1.1.3" + stream-combiner2 "^1.1.1" + subarg "^1.0.0" + through2 "^2.0.0" + xtend "^4.0.0" + +module-deps@~2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-2.0.6.tgz#b999321c73ac33580f00712c0f3075fdca42563f" + dependencies: + JSONStream "~0.7.1" + browser-resolve "~1.2.4" + concat-stream "~1.4.5" + detective "~3.1.0" + duplexer2 "0.0.2" + inherits "~2.0.1" + minimist "~0.0.9" + parents "0.0.2" + readable-stream "^1.0.27-1" + resolve "~0.6.3" + stream-combiner "~0.1.0" + through2 "~0.4.1" + +module-not-found-error@^1.0.0, module-not-found-error@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/module-not-found-error/-/module-not-found-error-1.0.1.tgz#cf8b4ff4f29640674d6cdd02b0e3bc523c2bbdc0" + +moment@^2.9.0: + version "2.18.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" + +morgan@^1.6.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.8.1.tgz#f93023d3887bd27b78dfd6023cea7892ee27a4b1" + dependencies: + basic-auth "~1.1.0" + debug "2.6.1" + depd "~1.1.0" + on-finished "~2.3.0" + on-headers "~1.0.1" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + +ms@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-1.0.0.tgz#59adcd22edc543f7b5381862d31387b1f4bc9473" + +multipipe@^0.1.0, multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + dependencies: + duplexer2 "0.0.2" + +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + +nan@^2.3.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.1.tgz#8c84f7b14c96b89f57fbc838012180ec8ca39a01" + +natives@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +node-pre-gyp@^0.6.29: + version "0.6.34" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" + dependencies: + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "^2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +node-uuid@~1.4.0, node-uuid@~1.4.7: + version "1.4.8" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" + +nomnom@1.5.2, "nomnom@>= 1.5.x": + version "1.5.2" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.5.2.tgz#f4345448a853cfbd5c0d26320f2477ab0526fe2f" + dependencies: + colors "0.5.x" + underscore "1.1.x" + +nopt@1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + dependencies: + abbrev "1" + +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.3.6" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npmlog@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.1" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +"nwmatcher@>= 1.3.6 < 2.0.0", "nwmatcher@>= 1.3.7 < 2.0.0": + version "1.3.9" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" + +oauth-sign@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e" + +oauth-sign@~0.8.0, oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@latest: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + +object-inspect@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-0.4.0.tgz#f5157c116c1455b243b06ee97703392c5ad89fec" + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + +object-path@^0.9.2: + version "0.9.2" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@1.x, once@^1.3.0, once@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +opn@latest: + version "4.0.2" + resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optimist@~0.3.5: + version "0.3.7" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" + dependencies: + wordwrap "~0.0.2" + +optionator@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.5.0.tgz#b75a8995a2d417df25b6e4e3862f50aa88651368" + dependencies: + deep-is "~0.1.2" + fast-levenshtein "~1.0.0" + levn "~0.2.5" + prelude-ls "~1.1.1" + type-check "~0.3.1" + wordwrap "~0.0.2" + +optionator@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.6.0.tgz#b63ecbbf0e315fad4bc9827b45dc7ba45284fcb6" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~1.0.6" + levn "~0.2.5" + prelude-ls "~1.1.1" + type-check "~0.3.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + +orchestrator@^0.3.0: + version "0.3.8" + resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" + dependencies: + end-of-stream "~0.1.5" + sequencify "~0.0.7" + stream-consume "~0.1.0" + +ordered-read-streams@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" + +os-browserify@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" + +os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-shim@~0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +outpipe@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" + dependencies: + shell-quote "^1.4.2" + +output-file-sync@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +parents@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/parents/-/parents-0.0.2.tgz#67147826e497d40759aaf5ba4c99659b6034d302" + +parents@^1.0.0, parents@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + dependencies: + path-platform "~0.11.15" + +parents@~0.0.1: + version "0.0.3" + resolved "https://registry.yarnpkg.com/parents/-/parents-0.0.3.tgz#fa212f024d9fa6318dbb6b4ce676c8be493b9c43" + dependencies: + path-platform "^0.0.1" + +parse-asn1@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-filepath@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73" + dependencies: + is-absolute "^0.2.3" + map-cache "^0.2.0" + path-root "^0.1.1" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + +parse5@^1.4.2, parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +parsejson@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab" + dependencies: + better-assert "~1.0.0" + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.0, parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +patch-text@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/patch-text/-/patch-text-1.0.2.tgz#4bf36e65e51733d6e98f0cf62e09034daa0348ac" + +path-browserify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-exists@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-platform@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.0.1.tgz#b5585d7c3c463d89aa0060d86611cf1afd617e2a" + +path-platform@~0.11.15: + version "0.11.15" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + dependencies: + path-root-regex "^0.1.0" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path@^0.4.9: + version "0.4.10" + resolved "https://registry.yarnpkg.com/path/-/path-0.4.10.tgz#22fef27b7cd6eaf30fb13fc027801e956e518ef1" + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + dependencies: + through "~2.3" + +pbkdf2@^3.0.3: + version "3.0.9" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + dependencies: + create-hmac "^1.1.2" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pff@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pff/-/pff-1.0.0.tgz#ea5f09ee6571cae292a78fc280905a3865668e78" + +phantomjs@^1.9.12: + version "1.9.20" + resolved "https://registry.yarnpkg.com/phantomjs/-/phantomjs-1.9.20.tgz#4424aca20e14d255c0b0889af6f6b8973da10e0d" + dependencies: + extract-zip "~1.5.0" + fs-extra "~0.26.4" + hasha "^2.2.0" + kew "~0.7.0" + progress "~1.1.8" + request "~2.67.0" + request-progress "~2.0.1" + which "~1.2.2" + +phantomjs@^2.1.3: + version "2.1.7+deprecated" + resolved "https://registry.yarnpkg.com/phantomjs/-/phantomjs-2.1.7.tgz#c6910f67935c37285b6114329fc2f27d5f3e3134" + dependencies: + extract-zip "~1.5.0" + fs-extra "~0.26.4" + hasha "^2.2.0" + kew "~0.7.0" + progress "~1.1.8" + request "~2.67.0" + request-progress "~2.0.1" + which "~1.2.2" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +plur@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a" + dependencies: + irregular-plurals "^1.0.0" + +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" + +portfinder@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-0.4.0.tgz#a3ffadffafe4fb98e0601a85eda27c27ce84ca1e" + dependencies: + async "0.9.0" + mkdirp "0.5.x" + +prelude-ls@~1.1.0, prelude-ls@~1.1.1, prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-hrtime@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + +private@^0.1.6, private@~0.1.5: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/process/-/process-0.7.0.tgz#c52208161a34adf3812344ae85d3e6150469389d" + +process@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/process/-/process-0.8.0.tgz#7bbaf7187fe6ded3fd5be0cb6103fba9cacb9798" + +process@~0.11.0: + version "0.11.9" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + +process@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/process/-/process-0.6.0.tgz#7dd9be80ffaaedd4cb628f1827f1cbab6dc0918f" + +progress@~1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + +promise@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" + dependencies: + asap "~2.0.3" + +proxy-addr@~1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.3.0" + +proxyquire-universal@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/proxyquire-universal/-/proxyquire-universal-1.0.8.tgz#2d0884365f76baf8da910b1be6c7f9c942d8640a" + dependencies: + replace-requires "~1.0.1" + through2 "~0.6.3" + transformify "^0.1.2" + +proxyquire@^1.7.3: + version "1.7.11" + resolved "https://registry.yarnpkg.com/proxyquire/-/proxyquire-1.7.11.tgz#13b494eb1e71fb21cc3ebe3699e637d3bec1af9e" + dependencies: + fill-keys "^1.0.2" + module-not-found-error "^1.0.0" + resolve "~1.1.7" + +proxyquireify@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/proxyquireify/-/proxyquireify-3.2.1.tgz#15bee101360acc91dcd86ee4d9a445f8a971eea0" + dependencies: + browser-pack "^6.0.0" + detective "~4.1.0" + fill-keys "^1.0.0" + has-require "^1.1.0" + module-not-found-error "~1.0.1" + require-deps "~1.0.1" + through "~2.2.7" + xtend "^3.0.0" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.3.2, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@~1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.2.4.tgz#54008ac972aec74175def9cba6df7fa9d3918740" + +q@^1.1.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" + +qs@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.0.tgz#a9f31142af468cb72b25b30136ba2456834916be" + +qs@6.4.0, qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +qs@~0.6.0: + version "0.6.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.6.tgz#6e015098ff51968b8a3c819001d5f2c89bc4b107" + +qs@~2.2.3: + version "2.2.5" + resolved "https://registry.yarnpkg.com/qs/-/qs-2.2.5.tgz#1088abaf9dcc0ae5ae45b709e6c6b5888b23923c" + +qs@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.1.tgz#801fee030e0b9450d6385adc48a4cc55b44aedfc" + +querystring-es3@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.0.tgz#c365a08a69c443accfeb3a9deab35e3f0abaa476" + +querystring-es3@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +qunit-phantomjs-runner@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/qunit-phantomjs-runner/-/qunit-phantomjs-runner-2.3.0.tgz#270acb197c0f2fcaaf06676ab0a48fd5aca66a99" + dependencies: + qunit-reporter-junit "^1.0.2" + +qunit-reporter-junit@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/qunit-reporter-junit/-/qunit-reporter-junit-1.1.1.tgz#eeb6226457896993e795a11940f18af6afa579b4" + +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +randombytes@^2.0.0, randombytes@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@~2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.13" + unpipe "1.0.0" + +raw-body@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.15" + unpipe "1.0.0" + +rc@^1.1.7: + version "1.2.1" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +rcfinder@~0.1.6: + version "0.1.9" + resolved "https://registry.yarnpkg.com/rcfinder/-/rcfinder-0.1.9.tgz#f3e80f387ddf9ae80ae30a4100329642eae81115" + dependencies: + lodash.clonedeep "^4.3.2" + +rcloader@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/rcloader/-/rcloader-0.1.2.tgz#a0963a6437d09ef8cb92d932d2dad497b0d1736c" + dependencies: + lodash "~2.4.1" + rcfinder "~0.1.6" + +read-only-stream@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-1.1.1.tgz#5da77c799ed1388d3ef88a18471bb5924f8a0ba1" + dependencies: + readable-stream "^1.0.31" + readable-wrap "^1.0.0" + +read-only-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" + dependencies: + readable-stream "^2.0.2" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@1.1, "readable-stream@>=1.1.13-1 <1.2.0-0", readable-stream@^1.0.26-2, readable-stream@^1.0.26-4, readable-stream@^1.0.27-1, readable-stream@^1.0.31, readable-stream@^1.0.33, readable-stream@^1.0.33-1, readable-stream@^1.1.13, readable-stream@^1.1.13-1, readable-stream@~1.1.10, readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +"readable-stream@>=1.0.28 <1.1.0-0", "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17, readable-stream@~1.0.2: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.3, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6: + version "2.2.9" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" + dependencies: + buffer-shims "~1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~1.0.0" + util-deprecate "~1.0.1" + +readable-stream@~2.0.0, readable-stream@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readable-wrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/readable-wrap/-/readable-wrap-1.0.0.tgz#3b5a211c631e12303a54991c806c17e7ae206bff" + dependencies: + readable-stream "^1.1.13-1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + +recast@0.10.33, recast@^0.10.10: + version "0.10.33" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697" + dependencies: + ast-types "0.8.12" + esprima-fb "~15001.1001.0-dev-harmony-fb" + private "~0.1.5" + source-map "~0.5.0" + +recast@^0.11.17: + version "0.11.23" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" + dependencies: + ast-types "0.9.6" + esprima "~3.1.0" + private "~0.1.5" + source-map "~0.5.0" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" + +regenerator@0.8.40: + version "0.8.40" + resolved "https://registry.yarnpkg.com/regenerator/-/regenerator-0.8.40.tgz#a0e457c58ebdbae575c9f8cd75127e93756435d8" + dependencies: + commoner "~0.10.3" + defs "~1.1.0" + esprima-fb "~15001.1001.0-dev-harmony-fb" + private "~0.1.5" + recast "0.10.33" + through "~2.3.8" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +regexpu@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexpu/-/regexpu-1.3.0.tgz#e534dc991a9e5846050c98de6d7dd4a55c9ea16d" + dependencies: + esprima "^2.6.0" + recast "^0.10.10" + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^1.1.0, repeating@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" + dependencies: + is-finite "^1.0.0" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +replace-requires@~1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/replace-requires/-/replace-requires-1.0.3.tgz#73e85df05bab562fe84df45d97d78c0fa13a7041" + dependencies: + detective "~4.1.0" + has-require "~1.2.1" + patch-text "~1.0.2" + xtend "~4.0.0" + +request-progress@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08" + dependencies: + throttleit "^1.0.0" + +request@^2.55.0, request@^2.72.0, request@^2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +request@~2.34.0: + version "2.34.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.34.0.tgz#b5d8b9526add4a2d4629f4d417124573996445ae" + dependencies: + forever-agent "~0.5.0" + json-stringify-safe "~5.0.0" + mime "~1.2.9" + node-uuid "~1.4.0" + qs "~0.6.0" + optionalDependencies: + aws-sign2 "~0.5.0" + form-data "~0.1.0" + hawk "~1.0.0" + http-signature "~0.10.0" + oauth-sign "~0.3.0" + tough-cookie ">=0.12.0" + tunnel-agent "~0.3.0" + +request@~2.67.0: + version "2.67.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.67.0.tgz#8af74780e2bf11ea0ae9aa965c11f11afd272742" + dependencies: + aws-sign2 "~0.6.0" + bl "~1.0.0" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~1.0.0-rc3" + har-validator "~2.0.2" + hawk "~3.1.0" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + node-uuid "~1.4.7" + oauth-sign "~0.8.0" + qs "~5.2.0" + stringstream "~0.0.4" + tough-cookie "~2.2.0" + tunnel-agent "~0.4.1" + +require-deps@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-deps/-/require-deps-1.0.1.tgz#2415cf49c35bd36a5d3177395108d3f237205263" + dependencies: + pff "~1.0.0" + +require-dir@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/require-dir/-/require-dir-0.3.1.tgz#b5a8e28bae0343bb0d0cc38ab1f531e1931b264a" + +requires-port@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-dir@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" + dependencies: + expand-tilde "^1.2.2" + global-modules "^0.2.3" + +resolve@0.6.3, resolve@~0.6.1, resolve@~0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46" + +resolve@1.1.7, resolve@1.1.x, resolve@~1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7: + version "1.3.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" + dependencies: + path-parse "^1.0.5" + +resolve@~0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.3.1.tgz#34c63447c664c70598d1c9b126fc43b2a24310a4" + +resolve@~0.7.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.7.4.tgz#395a9ef9e873fbfe12bd14408bd91bb936003d69" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + dependencies: + through "~2.3.4" + +rewire@^2.1.3: + version "2.5.2" + resolved "https://registry.yarnpkg.com/rewire/-/rewire-2.5.2.tgz#6427de7b7feefa7d36401507eb64a5385bc58dc7" + +rfile@~1.0, rfile@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rfile/-/rfile-1.0.0.tgz#59708cf90ca1e74c54c3cfc5c36fdb9810435261" + dependencies: + callsite "~1.0.0" + resolve "~0.3.0" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +ripemd160@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" + +ruglify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ruglify/-/ruglify-1.0.0.tgz#dc8930e2a9544a274301cc9972574c0d0986b675" + dependencies: + rfile "~1.0" + uglify-js "~2.2" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + +safe-buffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + +safecallback@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safecallback/-/safecallback-1.0.1.tgz#07c7f12b4a8d9abf1b8fcddba7852eb0b8b6ed41" + +safefs@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/safefs/-/safefs-2.0.3.tgz#2db2b2de4c4161d6dba6609fee05ecab062c4de5" + +sax@^1.1.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +semver@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" + +semver@^4.1.0, semver@^4.1.1, semver@~4.3.3: + version "4.3.6" + resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" + +send@0.15.1, send@latest: + version "0.15.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" + dependencies: + debug "2.6.1" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" + mime "1.3.4" + ms "0.7.2" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +sequencify@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" + +serve-favicon@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.4.2.tgz#aed1d8de67d5b83192cf31fdf53d2ea29464363e" + dependencies: + etag "~1.8.0" + fresh "0.5.0" + ms "1.0.0" + parseurl "~1.3.1" + +serve-index@^1.7.2: + version "1.8.0" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b" + dependencies: + accepts "~1.3.3" + batch "0.5.3" + debug "~2.2.0" + escape-html "~1.0.3" + http-errors "~1.5.0" + mime-types "~2.1.11" + parseurl "~1.3.1" + +serve-static@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.15.1" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setprototypeof@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +sha.js@^2.3.6, sha.js@~2.4.4: + version "2.4.8" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + dependencies: + inherits "^2.0.1" + +shallow-copy@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" + +shasum@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + dependencies: + json-stable-stringify "~0.0.0" + sha.js "~2.4.4" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +shell-quote@^1.4.2, shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +shell-quote@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-0.0.1.tgz#1a41196f3c0333c482323593d6886ecf153dd986" + +shelljs@0.3.x: + version "0.3.0" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" + +shelljs@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.5.3.tgz#c54982b996c76ef0c1e6b59fbdc5825f5b713113" + +sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +simple-fmt@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/simple-fmt/-/simple-fmt-0.1.0.tgz#191bf566a59e6530482cb25ab53b4a8dc85c3a6b" + +simple-is@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz#2abb75aade39deb5cc815ce10e6191164850baf0" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +sntp@0.2.x: + version "0.2.4" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" + dependencies: + hoek "0.9.x" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +socket.io-adapter@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b" + dependencies: + debug "2.3.3" + socket.io-parser "2.3.1" + +socket.io-client@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.3.tgz#b30e86aa10d5ef3546601c09cde4765e381da377" + dependencies: + backo2 "1.0.2" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "2.3.3" + engine.io-client "1.8.3" + has-binary "0.1.7" + indexof "0.0.1" + object-component "0.0.3" + parseuri "0.0.5" + socket.io-parser "2.3.1" + to-array "0.1.4" + +socket.io-parser@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0" + dependencies: + component-emitter "1.1.2" + debug "2.2.0" + isarray "0.0.1" + json3 "3.3.2" + +socket.io@^1.4.5: + version "1.7.3" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.3.tgz#b8af9caba00949e568e369f1327ea9be9ea2461b" + dependencies: + debug "2.3.3" + engine.io "1.8.3" + has-binary "0.1.7" + object-assign "4.1.0" + socket.io-adapter "0.5.0" + socket.io-client "1.7.3" + socket.io-parser "2.3.1" + +source-map-support@^0.2.10: + version "0.2.10" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.2.10.tgz#ea5a3900a1c1cb25096a0ae8cc5c2b4b10ded3dc" + dependencies: + source-map "0.1.32" + +source-map-support@^0.4.2: + version "0.4.14" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" + dependencies: + source-map "^0.5.6" + +source-map@0.1.32: + version "0.1.32" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" + dependencies: + amdefine ">=0.0.4" + +source-map@0.1.34: + version "0.1.34" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.34.tgz#a7cfe89aec7b1682c3b198d0acfb47d7d090566b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.1.39, source-map@~0.1.30, source-map@~0.1.31, source-map@~0.1.33, source-map@~0.1.7: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.4.4, source-map@~0.4.0, source-map@~0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.3.0.tgz#8586fb9a5a005e5b501e21cd18b6f21b457ad1f9" + dependencies: + amdefine ">=0.0.4" + +sparkles@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stable@~0.1.3: + version "0.1.6" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.6.tgz#910f5d2aed7b520c6e777499c1f32e139fdecb10" + +statuses@1, "statuses@>= 1.3.1 < 2", statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +stream-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-1.0.0.tgz#bf9b4abfb42b274d751479e44e0ff2656b6f1193" + dependencies: + inherits "~2.0.1" + readable-stream "^1.0.27-1" + +stream-browserify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-browserify@~0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-0.1.3.tgz#95cf1b369772e27adaf46352265152689c6c4be9" + dependencies: + inherits "~2.0.1" + process "~0.5.1" + +stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +stream-combiner2@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.0.2.tgz#ba72a6b50cbfabfa950fc8bc87604bd01eb60671" + dependencies: + duplexer2 "~0.0.2" + through2 "~0.5.1" + +stream-combiner@*, stream-combiner@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.1.0.tgz#0dc389a3c203f8f4d56368f95dde52eb9269b5be" + dependencies: + duplexer "~0.1.1" + through "~2.3.4" + +stream-combiner@~0.0.2, stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + +stream-consume@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" + +stream-http@^2.0.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.2.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-reduce@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/stream-reduce/-/stream-reduce-1.0.3.tgz#56d3621fa84370619ae402ffc0468528991b36a9" + dependencies: + through "~2.3.4" + +stream-splicer@^1.1.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-1.3.2.tgz#3c0441be15b9bf4e226275e6dc83964745546661" + dependencies: + indexof "0.0.1" + inherits "^2.0.1" + isarray "~0.0.1" + readable-stream "^1.1.13-1" + readable-wrap "^1.0.0" + through2 "^1.0.0" + +stream-splicer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.2" + +streamqueue@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/streamqueue/-/streamqueue-0.0.6.tgz#66f5f5ec94e9b8af249e4aec2dd1f741bfe94de3" + dependencies: + readable-stream "^1.0.26-2" + +string-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string_decoder@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.0.1.tgz#f5472d0a8d1650ec823752d24e6fd627b39bf141" + +string_decoder@~0.10.0, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" + dependencies: + buffer-shims "~1.0.0" + +stringmap@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stringmap/-/stringmap-0.2.2.tgz#556c137b258f942b8776f5b2ef582aa069d7d1b1" + +stringset@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/stringset/-/stringset-0.2.1.tgz#ef259c4e349344377fcd1c913dd2e848c9c042b5" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" + dependencies: + ansi-regex "^0.2.1" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" + dependencies: + first-chunk-stream "^1.0.0" + is-utf8 "^0.2.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@1.0.x, strip-json-comments@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +stylus-type-utils@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/stylus-type-utils/-/stylus-type-utils-0.0.3.tgz#f048334728bb5144ecd599c627553db64ea0a6bb" + +stylus@~0.32.1: + version "0.32.1" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.32.1.tgz#3d28275bd9f181085f8dd0fa52a8559696978212" + dependencies: + cssom "0.2.x" + debug "*" + mkdirp "0.3.x" + +subarg@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-0.0.1.tgz#3d56b07dacfbc45bbb63f7672b43b63e46368e3a" + dependencies: + minimist "~0.0.7" + +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + dependencies: + minimist "^1.1.0" + +supports-color@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +"symbol-tree@>= 3.1.0 < 4.0.0": + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +syntax-error@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.3.0.tgz#1ed9266c4d40be75dc55bf9bb1cb77062bb96ca1" + dependencies: + acorn "^4.0.3" + +syntax-error@~1.1.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.1.6.tgz#b4549706d386cc1c1dc7c2423f18579b6cade710" + dependencies: + acorn "^2.7.0" + +tape@^3.0.3: + version "3.6.1" + resolved "https://registry.yarnpkg.com/tape/-/tape-3.6.1.tgz#4893dd53e280a5f58c0ceb30c2c0ebb3bcd51e1f" + dependencies: + deep-equal "~0.2.0" + defined "~0.0.0" + glob "~3.2.9" + inherits "~2.0.1" + object-inspect "~0.4.0" + resumer "~0.0.0" + through "~2.3.4" + +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +taskgroup@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/taskgroup/-/taskgroup-2.0.0.tgz#184944a42b5684aad751189a5263c030f6174446" + dependencies: + ambi "~2.0.0" + typechecker "~2.0.1" + +ternary-stream@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/ternary-stream/-/ternary-stream-1.2.3.tgz#f1969f83847f9642261bc142e17ee200aada83fd" + dependencies: + duplexer2 "~0.0.2" + fork-stream "~0.0.4" + merge-stream "~0.1.6" + through2 "~0.6.3" + +testdom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/testdom/-/testdom-2.0.0.tgz#d13643a0038ec5851475adc14e50341babb03acf" + dependencies: + jsdom "^6.5.1" + +text-table@^0.2.0, text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +throttleit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" + +through2@*, through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through2@0.6.2, through2@~0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.2.tgz#53265824c555e7fcdc4111dcdc52c7de64636c75" + dependencies: + readable-stream ">=1.0.28 <1.1.0-0" + xtend ">=4.0.0 <4.1.0-0" + +"through2@>=0.6.1 <1.0.0-0", through2@^0.6.1, through2@^0.6.3, through2@~0.6.1, through2@~0.6.3, through2@~0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + dependencies: + readable-stream ">=1.0.33-1 <1.1.0-0" + xtend ">=4.0.0 <4.1.0-0" + +through2@^0.4.1, through2@~0.4.0, through2@~0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" + dependencies: + readable-stream "~1.0.17" + xtend "~2.1.1" + +through2@^0.5.0, through2@^0.5.1, through2@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7" + dependencies: + readable-stream "~1.0.17" + xtend "~3.0.0" + +through2@^1.0.0, through2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-1.1.1.tgz#0847cbc4449f3405574dbdccd9bb841b83ac3545" + dependencies: + readable-stream ">=1.1.13-1 <1.2.0-0" + xtend ">=4.0.0 <4.1.0-0" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@~2.3, through@~2.3.1, through@~2.3.4, through@~2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +through@~2.2.7: + version "2.2.7" + resolved "https://registry.yarnpkg.com/through/-/through-2.2.7.tgz#6e8e21200191d4eb6a99f6f010df46aa1c6eb2bd" + +tildify@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" + dependencies: + os-homedir "^1.0.0" + +time-stamp@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" + +timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + dependencies: + process "~0.11.0" + +timers-browserify@~1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.0.3.tgz#ffba70c9c12eed916fd67318e629ac6f32295551" + dependencies: + process "~0.5.1" + +tmp@0.0.x: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + dependencies: + os-tmpdir "~1.0.1" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-fast-properties@^1.0.0, to-fast-properties@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" + +tough-cookie@>=0.12.0, tough-cookie@^2.0.0, tough-cookie@^2.2.0, tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +tough-cookie@~2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.2.2.tgz#c83a1830f4e5ef0b93ef2a3488e724f8de016ac7" + +tr46@~0.0.1: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +transformify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/transformify/-/transformify-0.1.2.tgz#9a4f42a154433dd727b80575428a3c9e5489ebf1" + dependencies: + readable-stream "~1.1.9" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-right@^1.0.0, trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +try-resolve@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912" + +tryit@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + +tryor@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b" + +tty-browserify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tunnel-agent@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.3.0.tgz#ad681b68f5321ad2827c4cfb1b7d5df2cfe942ee" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.1, type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.10, type-is@~1.6.14: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +typechecker@^2.0.8, typechecker@~2.0.1: + version "2.0.8" + resolved "https://registry.yarnpkg.com/typechecker/-/typechecker-2.0.8.tgz#e83da84bb64c584ccb345838576c40b0337db82e" + +typedarray@^0.0.6, typedarray@~0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +uglify-js@2.4.15, uglify-js@~2.4.0: + version "2.4.15" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.4.15.tgz#12bc6d84345fbc306e13f7075d6437a8bf64d7e3" + dependencies: + async "~0.2.6" + optimist "~0.3.5" + source-map "0.1.34" + uglify-to-browserify "~1.0.0" + +uglify-js@^2.6, uglify-js@^2.7.0: + version "2.8.22" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-js@~2.2: + version "2.2.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.2.5.tgz#a6e02a70d839792b9780488b7b8b184c095c99c7" + dependencies: + optimist "~0.3.5" + source-map "~0.1.7" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uglifyjs@^2.4.10: + version "2.4.10" + resolved "https://registry.yarnpkg.com/uglifyjs/-/uglifyjs-2.4.10.tgz#632927319fa6a3da3fc91f9773ac27bfe6c3ee92" + dependencies: + async "~0.2.6" + source-map "0.1.34" + uglify-to-browserify "~1.0.0" + yargs "~1.3.3" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + +umd@^2.1.0, umd@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/umd/-/umd-2.1.0.tgz#4a6307b762f17f02d201b5fa154e673396c263cf" + dependencies: + rfile "~1.0.0" + ruglify "~1.0.0" + through "~2.3.4" + uglify-js "~2.4.0" + +umd@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e" + +umd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/umd/-/umd-2.0.0.tgz#749683b0d514728ae0e1b6195f5774afc0ad4f8f" + dependencies: + rfile "~1.0.0" + ruglify "~1.0.0" + through "~2.3.4" + uglify-js "~2.4.0" + +unc-path-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + +underscore@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.1.7.tgz#40bab84bad19d230096e8d6ef628bff055d83db0" + +unique-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +url@~0.10.1: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +url@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + dependencies: + os-homedir "^1.0.0" + +useragent@^2.1.6: + version "2.1.13" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.13.tgz#bba43e8aa24d5ceb83c2937473e102e21df74c10" + dependencies: + lru-cache "2.2.x" + tmp "0.0.x" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util-extend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + +util@0.10.3, util@~0.10.1: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +v8flags@^2.0.2: + version "2.0.12" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.12.tgz#73235d9f7176f8e8833fb286795445f7938d84e5" + dependencies: + user-home "^1.1.1" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +varstream@0.3.x: + version "0.3.2" + resolved "https://registry.yarnpkg.com/varstream/-/varstream-0.3.2.tgz#18ac6494765f3ff1a35ad9a4be053bec188a5de1" + dependencies: + readable-stream "^1.0.33" + +vary@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vinyl-bufferstream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vinyl-bufferstream/-/vinyl-bufferstream-1.0.1.tgz#0537869f580effa4ca45acb47579e4b9fe63081a" + dependencies: + bufferstreams "1.0.1" + +vinyl-fs@^0.3.0: + version "0.3.14" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" + dependencies: + defaults "^1.0.0" + glob-stream "^3.1.5" + glob-watcher "^0.0.6" + graceful-fs "^3.0.0" + mkdirp "^0.5.0" + strip-bom "^1.0.0" + through2 "^0.6.1" + vinyl "^0.4.0" + +vinyl-source-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vinyl-source-stream/-/vinyl-source-stream-1.1.0.tgz#44cbe5108205279deb0c5653c094a2887938b1ab" + dependencies: + through2 "^0.6.1" + vinyl "^0.4.3" + +"vinyl-sourcemaps-apply@>=0.1.1 <0.2.0-0": + version "0.1.4" + resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.1.4.tgz#c5fcbd43e2f238423c2dc98bddd6f79b72bc345b" + dependencies: + source-map "^0.1.39" + +vinyl-sourcemaps-apply@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705" + dependencies: + source-map "^0.5.1" + +vinyl@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.2.3.tgz#bca938209582ec5a49ad538a00fa1f125e513252" + dependencies: + clone-stats "~0.0.1" + +vinyl@^0.4.0, vinyl@^0.4.3, vinyl@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" + dependencies: + clone "^0.2.0" + clone-stats "^0.0.1" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +vm-browserify@~0.0.1: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + +walk@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/walk/-/walk-2.3.3.tgz#b4c0e8c42464c16dbbe1d71666765eac07819e5f" + dependencies: + foreachasync "3.x" + +watchify@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.2.1.tgz#19bcfd7bfcbf41d7f4fe3c29740bce45f764e203" + dependencies: + browserify "^10.0.0" + chokidar "^1.0.0" + defined "^1.0.0" + outpipe "^1.1.0" + through2 "~0.6.3" + xtend "^4.0.0" + +watchify@^3.6.1: + version "3.9.0" + resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.9.0.tgz#f075fd2e8a86acde84cedba6e5c2a0bedd523d9e" + dependencies: + anymatch "^1.3.0" + browserify "^14.0.0" + chokidar "^1.0.0" + defined "^1.0.0" + outpipe "^1.1.0" + through2 "^2.0.0" + xtend "^4.0.0" + +watchr@2.3.x: + version "2.3.10" + resolved "https://registry.yarnpkg.com/watchr/-/watchr-2.3.10.tgz#2fe0af537071cae6a776d4523356f8f3a230b7ce" + dependencies: + bal-util "~1.18.0" + +webidl-conversions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-2.0.1.tgz#3bf8258f7d318c7443c36f2e169402a1a6703506" + +websocket-driver@>=0.3.6, websocket-driver@>=0.5.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + dependencies: + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" + +whatwg-url-compat@~0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz#00898111af689bb097541cd5a45ca6c8798445bf" + dependencies: + tr46 "~0.0.1" + +when@^3.7.7: + version "3.7.8" + resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" + +which@^1.0.8, which@^1.1.1, which@^1.2.12, which@~1.2.2: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +window-size@^0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +ws@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +wtf-8@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" + +xml-escape@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/xml-escape/-/xml-escape-1.0.0.tgz#00963d697b2adf0c185c4e04e73174ba9b288eb2" + +"xml-name-validator@>= 2.0.1 < 3.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + +xmlhttprequest-ssl@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" + +"xmlhttprequest@>= 1.6.0 < 2.0.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +xtend@^3.0.0, xtend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" + +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + dependencies: + object-keys "~0.4.0" + +y18n@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yaml-js@^0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/yaml-js/-/yaml-js-0.1.4.tgz#ac965488a94daad5b65a92cab28c262407730fc0" + +yargs@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.3.3.tgz#054de8b61f22eefdb7207059eaef9d6b83fb931a" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + +yargs@~3.27.0: + version "3.27.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.27.0.tgz#21205469316e939131d59f2da0c6d7f98221ea40" + dependencies: + camelcase "^1.2.1" + cliui "^2.1.0" + decamelize "^1.0.0" + os-locale "^1.4.0" + window-size "^0.1.2" + y18n "^3.2.0" + +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + dependencies: + fd-slicer "~1.0.1" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" From 23dd96be97b2c39f24f586d6eb93ad9e2d73ace8 Mon Sep 17 00:00:00 2001 From: Tyler Long Date: Mon, 10 Apr 2017 16:53:32 +0800 Subject: [PATCH 04/66] Update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 145aed740a..08aa58ad08 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,4 @@ bower_components coverage test/tmp_* -test/fixtures/samples/*.actual.* +test/fixtures/samples/*.actual* From e1e7be07f75bffbb8ffc27acedee463fdd1985ba Mon Sep 17 00:00:00 2001 From: Tyler Long Date: Mon, 10 Apr 2017 17:09:21 +0800 Subject: [PATCH 05/66] Remove auto generated js file from dist folder --- .gitignore | 2 + dist/mermaid.js | 60271 ---------------------------------- dist/mermaid.min.js | 27 - dist/mermaid.slim.js | 50766 ---------------------------- dist/mermaid.slim.min.js | 18 - dist/mermaidAPI.js | 59670 --------------------------------- dist/mermaidAPI.min.js | 19 - dist/mermaidAPI.slim.js | 50165 ---------------------------- dist/mermaidAPI.slim.min.js | 17 - 9 files changed, 2 insertions(+), 220953 deletions(-) delete mode 100644 dist/mermaid.js delete mode 100644 dist/mermaid.min.js delete mode 100644 dist/mermaid.slim.js delete mode 100644 dist/mermaid.slim.min.js delete mode 100644 dist/mermaidAPI.js delete mode 100644 dist/mermaidAPI.min.js delete mode 100644 dist/mermaidAPI.slim.js delete mode 100644 dist/mermaidAPI.slim.min.js diff --git a/.gitignore b/.gitignore index 08aa58ad08..d10c651127 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ coverage test/tmp_* test/fixtures/samples/*.actual* + +dist/*.js diff --git a/dist/mermaid.js b/dist/mermaid.js deleted file mode 100644 index 8f51a3b005..0000000000 --- a/dist/mermaid.js +++ /dev/null @@ -1,60271 +0,0 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.mermaid=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o b ? 1 : a >= b ? 0 : NaN; - } - d3.descending = function(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; - }; - d3.min = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n) if ((b = array[i]) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = array[i]) != null && a > b) a = b; - } else { - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; - } - return a; - }; - d3.max = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n) if ((b = array[i]) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = array[i]) != null && b > a) a = b; - } else { - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; - } - return a; - }; - d3.extent = function(array, f) { - var i = -1, n = array.length, a, b, c; - if (arguments.length === 1) { - while (++i < n) if ((b = array[i]) != null && b >= b) { - a = c = b; - break; - } - while (++i < n) if ((b = array[i]) != null) { - if (a > b) a = b; - if (c < b) c = b; - } - } else { - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { - a = c = b; - break; - } - while (++i < n) if ((b = f.call(array, array[i], i)) != null) { - if (a > b) a = b; - if (c < b) c = b; - } - } - return [ a, c ]; - }; - function d3_number(x) { - return x === null ? NaN : +x; - } - function d3_numeric(x) { - return !isNaN(x); - } - d3.sum = function(array, f) { - var s = 0, n = array.length, a, i = -1; - if (arguments.length === 1) { - while (++i < n) if (d3_numeric(a = +array[i])) s += a; - } else { - while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a; - } - return s; - }; - d3.mean = function(array, f) { - var s = 0, n = array.length, a, i = -1, j = n; - if (arguments.length === 1) { - while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j; - } else { - while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j; - } - if (j) return s / j; - }; - d3.quantile = function(values, p) { - var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h; - return e ? v + e * (values[h] - v) : v; - }; - d3.median = function(array, f) { - var numbers = [], n = array.length, a, i = -1; - if (arguments.length === 1) { - while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a); - } else { - while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a); - } - if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5); - }; - d3.variance = function(array, f) { - var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0; - if (arguments.length === 1) { - while (++i < n) { - if (d3_numeric(a = d3_number(array[i]))) { - d = a - m; - m += d / ++j; - s += d * (a - m); - } - } - } else { - while (++i < n) { - if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) { - d = a - m; - m += d / ++j; - s += d * (a - m); - } - } - } - if (j > 1) return s / (j - 1); - }; - d3.deviation = function() { - var v = d3.variance.apply(this, arguments); - return v ? Math.sqrt(v) : v; - }; - function d3_bisector(compare) { - return { - left: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1; - } - return lo; - } - }; - } - var d3_bisect = d3_bisector(d3_ascending); - d3.bisectLeft = d3_bisect.left; - d3.bisect = d3.bisectRight = d3_bisect.right; - d3.bisector = function(f) { - return d3_bisector(f.length === 1 ? function(d, x) { - return d3_ascending(f(d), x); - } : f); - }; - d3.shuffle = function(array, i0, i1) { - if ((m = arguments.length) < 3) { - i1 = array.length; - if (m < 2) i0 = 0; - } - var m = i1 - i0, t, i; - while (m) { - i = Math.random() * m-- | 0; - t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t; - } - return array; - }; - d3.permute = function(array, indexes) { - var i = indexes.length, permutes = new Array(i); - while (i--) permutes[i] = array[indexes[i]]; - return permutes; - }; - d3.pairs = function(array) { - var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n); - while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ]; - return pairs; - }; - d3.zip = function() { - if (!(n = arguments.length)) return []; - for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) { - for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) { - zip[j] = arguments[j][i]; - } - } - return zips; - }; - function d3_zipLength(d) { - return d.length; - } - d3.transpose = function(matrix) { - return d3.zip.apply(d3, matrix); - }; - d3.keys = function(map) { - var keys = []; - for (var key in map) keys.push(key); - return keys; - }; - d3.values = function(map) { - var values = []; - for (var key in map) values.push(map[key]); - return values; - }; - d3.entries = function(map) { - var entries = []; - for (var key in map) entries.push({ - key: key, - value: map[key] - }); - return entries; - }; - d3.merge = function(arrays) { - var n = arrays.length, m, i = -1, j = 0, merged, array; - while (++i < n) j += arrays[i].length; - merged = new Array(j); - while (--n >= 0) { - array = arrays[n]; - m = array.length; - while (--m >= 0) { - merged[--j] = array[m]; - } - } - return merged; - }; - var abs = Math.abs; - d3.range = function(start, stop, step) { - if (arguments.length < 3) { - step = 1; - if (arguments.length < 2) { - stop = start; - start = 0; - } - } - if ((stop - start) / step === Infinity) throw new Error("infinite range"); - var range = [], k = d3_range_integerScale(abs(step)), i = -1, j; - start *= k, stop *= k, step *= k; - if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k); - return range; - }; - function d3_range_integerScale(x) { - var k = 1; - while (x * k % 1) k *= 10; - return k; - } - function d3_class(ctor, properties) { - for (var key in properties) { - Object.defineProperty(ctor.prototype, key, { - value: properties[key], - enumerable: false - }); - } - } - d3.map = function(object, f) { - var map = new d3_Map(); - if (object instanceof d3_Map) { - object.forEach(function(key, value) { - map.set(key, value); - }); - } else if (Array.isArray(object)) { - var i = -1, n = object.length, o; - if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o); - } else { - for (var key in object) map.set(key, object[key]); - } - return map; - }; - function d3_Map() { - this._ = Object.create(null); - } - var d3_map_proto = "__proto__", d3_map_zero = "\x00"; - d3_class(d3_Map, { - has: d3_map_has, - get: function(key) { - return this._[d3_map_escape(key)]; - }, - set: function(key, value) { - return this._[d3_map_escape(key)] = value; - }, - remove: d3_map_remove, - keys: d3_map_keys, - values: function() { - var values = []; - for (var key in this._) values.push(this._[key]); - return values; - }, - entries: function() { - var entries = []; - for (var key in this._) entries.push({ - key: d3_map_unescape(key), - value: this._[key] - }); - return entries; - }, - size: d3_map_size, - empty: d3_map_empty, - forEach: function(f) { - for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]); - } - }); - function d3_map_escape(key) { - return (key += "") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key; - } - function d3_map_unescape(key) { - return (key += "")[0] === d3_map_zero ? key.slice(1) : key; - } - function d3_map_has(key) { - return d3_map_escape(key) in this._; - } - function d3_map_remove(key) { - return (key = d3_map_escape(key)) in this._ && delete this._[key]; - } - function d3_map_keys() { - var keys = []; - for (var key in this._) keys.push(d3_map_unescape(key)); - return keys; - } - function d3_map_size() { - var size = 0; - for (var key in this._) ++size; - return size; - } - function d3_map_empty() { - for (var key in this._) return false; - return true; - } - d3.nest = function() { - var nest = {}, keys = [], sortKeys = [], sortValues, rollup; - function map(mapType, array, depth) { - if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array; - var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values; - while (++i < n) { - if (values = valuesByKey.get(keyValue = key(object = array[i]))) { - values.push(object); - } else { - valuesByKey.set(keyValue, [ object ]); - } - } - if (mapType) { - object = mapType(); - setter = function(keyValue, values) { - object.set(keyValue, map(mapType, values, depth)); - }; - } else { - object = {}; - setter = function(keyValue, values) { - object[keyValue] = map(mapType, values, depth); - }; - } - valuesByKey.forEach(setter); - return object; - } - function entries(map, depth) { - if (depth >= keys.length) return map; - var array = [], sortKey = sortKeys[depth++]; - map.forEach(function(key, keyMap) { - array.push({ - key: key, - values: entries(keyMap, depth) - }); - }); - return sortKey ? array.sort(function(a, b) { - return sortKey(a.key, b.key); - }) : array; - } - nest.map = function(array, mapType) { - return map(mapType, array, 0); - }; - nest.entries = function(array) { - return entries(map(d3.map, array, 0), 0); - }; - nest.key = function(d) { - keys.push(d); - return nest; - }; - nest.sortKeys = function(order) { - sortKeys[keys.length - 1] = order; - return nest; - }; - nest.sortValues = function(order) { - sortValues = order; - return nest; - }; - nest.rollup = function(f) { - rollup = f; - return nest; - }; - return nest; - }; - d3.set = function(array) { - var set = new d3_Set(); - if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]); - return set; - }; - function d3_Set() { - this._ = Object.create(null); - } - d3_class(d3_Set, { - has: d3_map_has, - add: function(key) { - this._[d3_map_escape(key += "")] = true; - return key; - }, - remove: d3_map_remove, - values: d3_map_keys, - size: d3_map_size, - empty: d3_map_empty, - forEach: function(f) { - for (var key in this._) f.call(this, d3_map_unescape(key)); - } - }); - d3.behavior = {}; - function d3_identity(d) { - return d; - } - d3.rebind = function(target, source) { - var i = 1, n = arguments.length, method; - while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); - return target; - }; - function d3_rebind(target, source, method) { - return function() { - var value = method.apply(source, arguments); - return value === source ? target : value; - }; - } - function d3_vendorSymbol(object, name) { - if (name in object) return name; - name = name.charAt(0).toUpperCase() + name.slice(1); - for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) { - var prefixName = d3_vendorPrefixes[i] + name; - if (prefixName in object) return prefixName; - } - } - var d3_vendorPrefixes = [ "webkit", "ms", "moz", "Moz", "o", "O" ]; - function d3_noop() {} - d3.dispatch = function() { - var dispatch = new d3_dispatch(), i = -1, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - return dispatch; - }; - function d3_dispatch() {} - d3_dispatch.prototype.on = function(type, listener) { - var i = type.indexOf("."), name = ""; - if (i >= 0) { - name = type.slice(i + 1); - type = type.slice(0, i); - } - if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener); - if (arguments.length === 2) { - if (listener == null) for (type in this) { - if (this.hasOwnProperty(type)) this[type].on(name, null); - } - return this; - } - }; - function d3_dispatch_event(dispatch) { - var listeners = [], listenerByName = new d3_Map(); - function event() { - var z = listeners, i = -1, n = z.length, l; - while (++i < n) if (l = z[i].on) l.apply(this, arguments); - return dispatch; - } - event.on = function(name, listener) { - var l = listenerByName.get(name), i; - if (arguments.length < 2) return l && l.on; - if (l) { - l.on = null; - listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)); - listenerByName.remove(name); - } - if (listener) listeners.push(listenerByName.set(name, { - on: listener - })); - return dispatch; - }; - return event; - } - d3.event = null; - function d3_eventPreventDefault() { - d3.event.preventDefault(); - } - function d3_eventSource() { - var e = d3.event, s; - while (s = e.sourceEvent) e = s; - return e; - } - function d3_eventDispatch(target) { - var dispatch = new d3_dispatch(), i = 0, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - dispatch.of = function(thiz, argumentz) { - return function(e1) { - try { - var e0 = e1.sourceEvent = d3.event; - e1.target = target; - d3.event = e1; - dispatch[e1.type].apply(thiz, argumentz); - } finally { - d3.event = e0; - } - }; - }; - return dispatch; - } - d3.requote = function(s) { - return s.replace(d3_requote_re, "\\$&"); - }; - var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; - var d3_subclass = {}.__proto__ ? function(object, prototype) { - object.__proto__ = prototype; - } : function(object, prototype) { - for (var property in prototype) object[property] = prototype[property]; - }; - function d3_selection(groups) { - d3_subclass(groups, d3_selectionPrototype); - return groups; - } - var d3_select = function(s, n) { - return n.querySelector(s); - }, d3_selectAll = function(s, n) { - return n.querySelectorAll(s); - }, d3_selectMatches = function(n, s) { - var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, "matchesSelector")]; - d3_selectMatches = function(n, s) { - return d3_selectMatcher.call(n, s); - }; - return d3_selectMatches(n, s); - }; - if (typeof Sizzle === "function") { - d3_select = function(s, n) { - return Sizzle(s, n)[0] || null; - }; - d3_selectAll = Sizzle; - d3_selectMatches = Sizzle.matchesSelector; - } - d3.selection = function() { - return d3.select(d3_document.documentElement); - }; - var d3_selectionPrototype = d3.selection.prototype = []; - d3_selectionPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, group, node; - selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(subnode = selector.call(node, node.__data__, i, j)); - if (subnode && "__data__" in node) subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_selector(selector) { - return typeof selector === "function" ? selector : function() { - return d3_select(selector, this); - }; - } - d3_selectionPrototype.selectAll = function(selector) { - var subgroups = [], subgroup, node; - selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j))); - subgroup.parentNode = node; - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_selectorAll(selector) { - return typeof selector === "function" ? selector : function() { - return d3_selectAll(selector, this); - }; - } - var d3_nsPrefix = { - svg: "http://www.w3.org/2000/svg", - xhtml: "http://www.w3.org/1999/xhtml", - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" - }; - d3.ns = { - prefix: d3_nsPrefix, - qualify: function(name) { - var i = name.indexOf(":"), prefix = name; - if (i >= 0) { - prefix = name.slice(0, i); - name = name.slice(i + 1); - } - return d3_nsPrefix.hasOwnProperty(prefix) ? { - space: d3_nsPrefix[prefix], - local: name - } : name; - } - }; - d3_selectionPrototype.attr = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(); - name = d3.ns.qualify(name); - return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name); - } - for (value in name) this.each(d3_selection_attr(value, name[value])); - return this; - } - return this.each(d3_selection_attr(name, value)); - }; - function d3_selection_attr(name, value) { - name = d3.ns.qualify(name); - function attrNull() { - this.removeAttribute(name); - } - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - function attrConstant() { - this.setAttribute(name, value); - } - function attrConstantNS() { - this.setAttributeNS(name.space, name.local, value); - } - function attrFunction() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttribute(name); else this.setAttribute(name, x); - } - function attrFunctionNS() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x); - } - return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant; - } - function d3_collapse(s) { - return s.trim().replace(/\s+/g, " "); - } - d3_selectionPrototype.classed = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1; - if (value = node.classList) { - while (++i < n) if (!value.contains(name[i])) return false; - } else { - value = node.getAttribute("class"); - while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false; - } - return true; - } - for (value in name) this.each(d3_selection_classed(value, name[value])); - return this; - } - return this.each(d3_selection_classed(name, value)); - }; - function d3_selection_classedRe(name) { - return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g"); - } - function d3_selection_classes(name) { - return (name + "").trim().split(/^|\s+/); - } - function d3_selection_classed(name, value) { - name = d3_selection_classes(name).map(d3_selection_classedName); - var n = name.length; - function classedConstant() { - var i = -1; - while (++i < n) name[i](this, value); - } - function classedFunction() { - var i = -1, x = value.apply(this, arguments); - while (++i < n) name[i](this, x); - } - return typeof value === "function" ? classedFunction : classedConstant; - } - function d3_selection_classedName(name) { - var re = d3_selection_classedRe(name); - return function(node, value) { - if (c = node.classList) return value ? c.add(name) : c.remove(name); - var c = node.getAttribute("class") || ""; - if (value) { - re.lastIndex = 0; - if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name)); - } else { - node.setAttribute("class", d3_collapse(c.replace(re, " "))); - } - }; - } - d3_selectionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.each(d3_selection_style(priority, name[priority], value)); - return this; - } - if (n < 2) { - var node = this.node(); - return d3_window(node).getComputedStyle(node, null).getPropertyValue(name); - } - priority = ""; - } - return this.each(d3_selection_style(name, value, priority)); - }; - function d3_selection_style(name, value, priority) { - function styleNull() { - this.style.removeProperty(name); - } - function styleConstant() { - this.style.setProperty(name, value, priority); - } - function styleFunction() { - var x = value.apply(this, arguments); - if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority); - } - return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant; - } - d3_selectionPrototype.property = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") return this.node()[name]; - for (value in name) this.each(d3_selection_property(value, name[value])); - return this; - } - return this.each(d3_selection_property(name, value)); - }; - function d3_selection_property(name, value) { - function propertyNull() { - delete this[name]; - } - function propertyConstant() { - this[name] = value; - } - function propertyFunction() { - var x = value.apply(this, arguments); - if (x == null) delete this[name]; else this[name] = x; - } - return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant; - } - d3_selectionPrototype.text = function(value) { - return arguments.length ? this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.textContent = v == null ? "" : v; - } : value == null ? function() { - this.textContent = ""; - } : function() { - this.textContent = value; - }) : this.node().textContent; - }; - d3_selectionPrototype.html = function(value) { - return arguments.length ? this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.innerHTML = v == null ? "" : v; - } : value == null ? function() { - this.innerHTML = ""; - } : function() { - this.innerHTML = value; - }) : this.node().innerHTML; - }; - d3_selectionPrototype.append = function(name) { - name = d3_selection_creator(name); - return this.select(function() { - return this.appendChild(name.apply(this, arguments)); - }); - }; - function d3_selection_creator(name) { - function create() { - var document = this.ownerDocument, namespace = this.namespaceURI; - return namespace ? document.createElementNS(namespace, name) : document.createElement(name); - } - function createNS() { - return this.ownerDocument.createElementNS(name.space, name.local); - } - return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? createNS : create; - } - d3_selectionPrototype.insert = function(name, before) { - name = d3_selection_creator(name); - before = d3_selection_selector(before); - return this.select(function() { - return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null); - }); - }; - d3_selectionPrototype.remove = function() { - return this.each(d3_selectionRemove); - }; - function d3_selectionRemove() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); - } - d3_selectionPrototype.data = function(value, key) { - var i = -1, n = this.length, group, node; - if (!arguments.length) { - value = new Array(n = (group = this[0]).length); - while (++i < n) { - if (node = group[i]) { - value[i] = node.__data__; - } - } - return value; - } - function bind(group, groupData) { - var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData; - if (key) { - var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue; - for (i = -1; ++i < n; ) { - if (nodeByKeyValue.has(keyValue = key.call(node = group[i], node.__data__, i))) { - exitNodes[i] = node; - } else { - nodeByKeyValue.set(keyValue, node); - } - keyValues[i] = keyValue; - } - for (i = -1; ++i < m; ) { - if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) { - enterNodes[i] = d3_selection_dataNode(nodeData); - } else if (node !== true) { - updateNodes[i] = node; - node.__data__ = nodeData; - } - nodeByKeyValue.set(keyValue, true); - } - for (i = -1; ++i < n; ) { - if (nodeByKeyValue.get(keyValues[i]) !== true) { - exitNodes[i] = group[i]; - } - } - } else { - for (i = -1; ++i < n0; ) { - node = group[i]; - nodeData = groupData[i]; - if (node) { - node.__data__ = nodeData; - updateNodes[i] = node; - } else { - enterNodes[i] = d3_selection_dataNode(nodeData); - } - } - for (;i < m; ++i) { - enterNodes[i] = d3_selection_dataNode(groupData[i]); - } - for (;i < n; ++i) { - exitNodes[i] = group[i]; - } - } - enterNodes.update = updateNodes; - enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode; - enter.push(enterNodes); - update.push(updateNodes); - exit.push(exitNodes); - } - var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]); - if (typeof value === "function") { - while (++i < n) { - bind(group = this[i], value.call(group, group.parentNode.__data__, i)); - } - } else { - while (++i < n) { - bind(group = this[i], value); - } - } - update.enter = function() { - return enter; - }; - update.exit = function() { - return exit; - }; - return update; - }; - function d3_selection_dataNode(data) { - return { - __data__: data - }; - } - d3_selectionPrototype.datum = function(value) { - return arguments.length ? this.property("__data__", value) : this.property("__data__"); - }; - d3_selectionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { - subgroup.push(node); - } - } - } - return d3_selection(subgroups); - }; - function d3_selection_filter(selector) { - return function() { - return d3_selectMatches(this, selector); - }; - } - d3_selectionPrototype.order = function() { - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) { - if (node = group[i]) { - if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); - next = node; - } - } - } - return this; - }; - d3_selectionPrototype.sort = function(comparator) { - comparator = d3_selection_sortComparator.apply(this, arguments); - for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator); - return this.order(); - }; - function d3_selection_sortComparator(comparator) { - if (!arguments.length) comparator = d3_ascending; - return function(a, b) { - return a && b ? comparator(a.__data__, b.__data__) : !a - !b; - }; - } - d3_selectionPrototype.each = function(callback) { - return d3_selection_each(this, function(node, i, j) { - callback.call(node, node.__data__, i, j); - }); - }; - function d3_selection_each(groups, callback) { - for (var j = 0, m = groups.length; j < m; j++) { - for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) { - if (node = group[i]) callback(node, i, j); - } - } - return groups; - } - d3_selectionPrototype.call = function(callback) { - var args = d3_array(arguments); - callback.apply(args[0] = this, args); - return this; - }; - d3_selectionPrototype.empty = function() { - return !this.node(); - }; - d3_selectionPrototype.node = function() { - for (var j = 0, m = this.length; j < m; j++) { - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - var node = group[i]; - if (node) return node; - } - } - return null; - }; - d3_selectionPrototype.size = function() { - var n = 0; - d3_selection_each(this, function() { - ++n; - }); - return n; - }; - function d3_selection_enter(selection) { - d3_subclass(selection, d3_selection_enterPrototype); - return selection; - } - var d3_selection_enterPrototype = []; - d3.selection.enter = d3_selection_enter; - d3.selection.enter.prototype = d3_selection_enterPrototype; - d3_selection_enterPrototype.append = d3_selectionPrototype.append; - d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; - d3_selection_enterPrototype.node = d3_selectionPrototype.node; - d3_selection_enterPrototype.call = d3_selectionPrototype.call; - d3_selection_enterPrototype.size = d3_selectionPrototype.size; - d3_selection_enterPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, upgroup, group, node; - for (var j = -1, m = this.length; ++j < m; ) { - upgroup = (group = this[j]).update; - subgroups.push(subgroup = []); - subgroup.parentNode = group.parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j)); - subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - return d3_selection(subgroups); - }; - d3_selection_enterPrototype.insert = function(name, before) { - if (arguments.length < 2) before = d3_selection_enterInsertBefore(this); - return d3_selectionPrototype.insert.call(this, name, before); - }; - function d3_selection_enterInsertBefore(enter) { - var i0, j0; - return function(d, i, j) { - var group = enter[j].update, n = group.length, node; - if (j != j0) j0 = j, i0 = 0; - if (i >= i0) i0 = i + 1; - while (!(node = group[i0]) && ++i0 < n) ; - return node; - }; - } - d3.select = function(node) { - var group; - if (typeof node === "string") { - group = [ d3_select(node, d3_document) ]; - group.parentNode = d3_document.documentElement; - } else { - group = [ node ]; - group.parentNode = d3_documentElement(node); - } - return d3_selection([ group ]); - }; - d3.selectAll = function(nodes) { - var group; - if (typeof nodes === "string") { - group = d3_array(d3_selectAll(nodes, d3_document)); - group.parentNode = d3_document.documentElement; - } else { - group = nodes; - group.parentNode = null; - } - return d3_selection([ group ]); - }; - d3_selectionPrototype.on = function(type, listener, capture) { - var n = arguments.length; - if (n < 3) { - if (typeof type !== "string") { - if (n < 2) listener = false; - for (capture in type) this.each(d3_selection_on(capture, type[capture], listener)); - return this; - } - if (n < 2) return (n = this.node()["__on" + type]) && n._; - capture = false; - } - return this.each(d3_selection_on(type, listener, capture)); - }; - function d3_selection_on(type, listener, capture) { - var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener; - if (i > 0) type = type.slice(0, i); - var filter = d3_selection_onFilters.get(type); - if (filter) type = filter, wrap = d3_selection_onFilter; - function onRemove() { - var l = this[name]; - if (l) { - this.removeEventListener(type, l, l.$); - delete this[name]; - } - } - function onAdd() { - var l = wrap(listener, d3_array(arguments)); - onRemove.call(this); - this.addEventListener(type, this[name] = l, l.$ = capture); - l._ = listener; - } - function removeAll() { - var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match; - for (var name in this) { - if (match = name.match(re)) { - var l = this[name]; - this.removeEventListener(match[1], l, l.$); - delete this[name]; - } - } - } - return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll; - } - var d3_selection_onFilters = d3.map({ - mouseenter: "mouseover", - mouseleave: "mouseout" - }); - if (d3_document) { - d3_selection_onFilters.forEach(function(k) { - if ("on" + k in d3_document) d3_selection_onFilters.remove(k); - }); - } - function d3_selection_onListener(listener, argumentz) { - return function(e) { - var o = d3.event; - d3.event = e; - argumentz[0] = this.__data__; - try { - listener.apply(this, argumentz); - } finally { - d3.event = o; - } - }; - } - function d3_selection_onFilter(listener, argumentz) { - var l = d3_selection_onListener(listener, argumentz); - return function(e) { - var target = this, related = e.relatedTarget; - if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) { - l.call(target, e); - } - }; - } - var d3_event_dragSelect, d3_event_dragId = 0; - function d3_event_dragSuppress(node) { - var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window(node)).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault); - if (d3_event_dragSelect == null) { - d3_event_dragSelect = "onselectstart" in node ? false : d3_vendorSymbol(node.style, "userSelect"); - } - if (d3_event_dragSelect) { - var style = d3_documentElement(node).style, select = style[d3_event_dragSelect]; - style[d3_event_dragSelect] = "none"; - } - return function(suppressClick) { - w.on(name, null); - if (d3_event_dragSelect) style[d3_event_dragSelect] = select; - if (suppressClick) { - var off = function() { - w.on(click, null); - }; - w.on(click, function() { - d3_eventPreventDefault(); - off(); - }, true); - setTimeout(off, 0); - } - }; - } - d3.mouse = function(container) { - return d3_mousePoint(container, d3_eventSource()); - }; - var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0; - function d3_mousePoint(container, e) { - if (e.changedTouches) e = e.changedTouches[0]; - var svg = container.ownerSVGElement || container; - if (svg.createSVGPoint) { - var point = svg.createSVGPoint(); - if (d3_mouse_bug44083 < 0) { - var window = d3_window(container); - if (window.scrollX || window.scrollY) { - svg = d3.select("body").append("svg").style({ - position: "absolute", - top: 0, - left: 0, - margin: 0, - padding: 0, - border: "none" - }, "important"); - var ctm = svg[0][0].getScreenCTM(); - d3_mouse_bug44083 = !(ctm.f || ctm.e); - svg.remove(); - } - } - if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, - point.y = e.clientY; - point = point.matrixTransform(container.getScreenCTM().inverse()); - return [ point.x, point.y ]; - } - var rect = container.getBoundingClientRect(); - return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ]; - } - d3.touch = function(container, touches, identifier) { - if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches; - if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) { - if ((touch = touches[i]).identifier === identifier) { - return d3_mousePoint(container, touch); - } - } - }; - d3.behavior.drag = function() { - var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, "touchmove", "touchend"); - function drag() { - this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart); - } - function dragstart(id, position, subject, move, end) { - return function() { - var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId); - if (origin) { - dragOffset = origin.apply(that, arguments); - dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ]; - } else { - dragOffset = [ 0, 0 ]; - } - dispatch({ - type: "dragstart" - }); - function moved() { - var position1 = position(parent, dragId), dx, dy; - if (!position1) return; - dx = position1[0] - position0[0]; - dy = position1[1] - position0[1]; - dragged |= dx | dy; - position0 = position1; - dispatch({ - type: "drag", - x: position1[0] + dragOffset[0], - y: position1[1] + dragOffset[1], - dx: dx, - dy: dy - }); - } - function ended() { - if (!position(parent, dragId)) return; - dragSubject.on(move + dragName, null).on(end + dragName, null); - dragRestore(dragged && d3.event.target === target); - dispatch({ - type: "dragend" - }); - } - }; - } - drag.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - return drag; - }; - return d3.rebind(drag, event, "on"); - }; - function d3_behavior_dragTouchId() { - return d3.event.changedTouches[0].identifier; - } - d3.touches = function(container, touches) { - if (arguments.length < 2) touches = d3_eventSource().touches; - return touches ? d3_array(touches).map(function(touch) { - var point = d3_mousePoint(container, touch); - point.identifier = touch.identifier; - return point; - }) : []; - }; - var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π; - function d3_sgn(x) { - return x > 0 ? 1 : x < 0 ? -1 : 0; - } - function d3_cross2d(a, b, c) { - return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); - } - function d3_acos(x) { - return x > 1 ? 0 : x < -1 ? π : Math.acos(x); - } - function d3_asin(x) { - return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x); - } - function d3_sinh(x) { - return ((x = Math.exp(x)) - 1 / x) / 2; - } - function d3_cosh(x) { - return ((x = Math.exp(x)) + 1 / x) / 2; - } - function d3_tanh(x) { - return ((x = Math.exp(2 * x)) - 1) / (x + 1); - } - function d3_haversin(x) { - return (x = Math.sin(x / 2)) * x; - } - var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4; - d3.interpolateZoom = function(p0, p1) { - var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2]; - var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ; - function interpolate(t) { - var s = t * S; - if (dr) { - var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0)); - return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ]; - } - return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ]; - } - interpolate.duration = S * 1e3; - return interpolate; - }; - d3.behavior.zoom = function() { - var view = { - x: 0, - y: 0, - k: 1 - }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1; - if (!d3_behavior_zoomWheel) { - d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() { - return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1); - }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() { - return d3.event.wheelDelta; - }, "mousewheel") : (d3_behavior_zoomDelta = function() { - return -d3.event.detail; - }, "MozMousePixelScroll"); - } - function zoom(g) { - g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted); - } - zoom.event = function(g) { - g.each(function() { - var dispatch = event.of(this, arguments), view1 = view; - if (d3_transitionInheritId) { - d3.select(this).transition().each("start.zoom", function() { - view = this.__chart__ || { - x: 0, - y: 0, - k: 1 - }; - zoomstarted(dispatch); - }).tween("zoom:zoom", function() { - var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]); - return function(t) { - var l = i(t), k = dx / l[2]; - this.__chart__ = view = { - x: cx - l[0] * k, - y: cy - l[1] * k, - k: k - }; - zoomed(dispatch); - }; - }).each("interrupt.zoom", function() { - zoomended(dispatch); - }).each("end.zoom", function() { - zoomended(dispatch); - }); - } else { - this.__chart__ = view; - zoomstarted(dispatch); - zoomed(dispatch); - zoomended(dispatch); - } - }); - }; - zoom.translate = function(_) { - if (!arguments.length) return [ view.x, view.y ]; - view = { - x: +_[0], - y: +_[1], - k: view.k - }; - rescale(); - return zoom; - }; - zoom.scale = function(_) { - if (!arguments.length) return view.k; - view = { - x: view.x, - y: view.y, - k: +_ - }; - rescale(); - return zoom; - }; - zoom.scaleExtent = function(_) { - if (!arguments.length) return scaleExtent; - scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ]; - return zoom; - }; - zoom.center = function(_) { - if (!arguments.length) return center; - center = _ && [ +_[0], +_[1] ]; - return zoom; - }; - zoom.size = function(_) { - if (!arguments.length) return size; - size = _ && [ +_[0], +_[1] ]; - return zoom; - }; - zoom.duration = function(_) { - if (!arguments.length) return duration; - duration = +_; - return zoom; - }; - zoom.x = function(z) { - if (!arguments.length) return x1; - x1 = z; - x0 = z.copy(); - view = { - x: 0, - y: 0, - k: 1 - }; - return zoom; - }; - zoom.y = function(z) { - if (!arguments.length) return y1; - y1 = z; - y0 = z.copy(); - view = { - x: 0, - y: 0, - k: 1 - }; - return zoom; - }; - function location(p) { - return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ]; - } - function point(l) { - return [ l[0] * view.k + view.x, l[1] * view.k + view.y ]; - } - function scaleTo(s) { - view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)); - } - function translateTo(p, l) { - l = point(l); - view.x += p[0] - l[0]; - view.y += p[1] - l[1]; - } - function zoomTo(that, p, l, k) { - that.__chart__ = { - x: view.x, - y: view.y, - k: view.k - }; - scaleTo(Math.pow(2, k)); - translateTo(center0 = p, l); - that = d3.select(that); - if (duration > 0) that = that.transition().duration(duration); - that.call(zoom.event); - } - function rescale() { - if (x1) x1.domain(x0.range().map(function(x) { - return (x - view.x) / view.k; - }).map(x0.invert)); - if (y1) y1.domain(y0.range().map(function(y) { - return (y - view.y) / view.k; - }).map(y0.invert)); - } - function zoomstarted(dispatch) { - if (!zooming++) dispatch({ - type: "zoomstart" - }); - } - function zoomed(dispatch) { - rescale(); - dispatch({ - type: "zoom", - scale: view.k, - translate: [ view.x, view.y ] - }); - } - function zoomended(dispatch) { - if (!--zooming) dispatch({ - type: "zoomend" - }), center0 = null; - } - function mousedowned() { - var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that); - d3_selection_interrupt.call(that); - zoomstarted(dispatch); - function moved() { - dragged = 1; - translateTo(d3.mouse(that), location0); - zoomed(dispatch); - } - function ended() { - subject.on(mousemove, null).on(mouseup, null); - dragRestore(dragged && d3.event.target === target); - zoomended(dispatch); - } - } - function touchstarted() { - var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that); - started(); - zoomstarted(dispatch); - subject.on(mousedown, null).on(touchstart, started); - function relocate() { - var touches = d3.touches(that); - scale0 = view.k; - touches.forEach(function(t) { - if (t.identifier in locations0) locations0[t.identifier] = location(t); - }); - return touches; - } - function started() { - var target = d3.event.target; - d3.select(target).on(touchmove, moved).on(touchend, ended); - targets.push(target); - var changed = d3.event.changedTouches; - for (var i = 0, n = changed.length; i < n; ++i) { - locations0[changed[i].identifier] = null; - } - var touches = relocate(), now = Date.now(); - if (touches.length === 1) { - if (now - touchtime < 500) { - var p = touches[0]; - zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1); - d3_eventPreventDefault(); - } - touchtime = now; - } else if (touches.length > 1) { - var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1]; - distance0 = dx * dx + dy * dy; - } - } - function moved() { - var touches = d3.touches(that), p0, l0, p1, l1; - d3_selection_interrupt.call(that); - for (var i = 0, n = touches.length; i < n; ++i, l1 = null) { - p1 = touches[i]; - if (l1 = locations0[p1.identifier]) { - if (l0) break; - p0 = p1, l0 = l1; - } - } - if (l1) { - var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0); - p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ]; - l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ]; - scaleTo(scale1 * scale0); - } - touchtime = null; - translateTo(p0, l0); - zoomed(dispatch); - } - function ended() { - if (d3.event.touches.length) { - var changed = d3.event.changedTouches; - for (var i = 0, n = changed.length; i < n; ++i) { - delete locations0[changed[i].identifier]; - } - for (var identifier in locations0) { - return void relocate(); - } - } - d3.selectAll(targets).on(zoomName, null); - subject.on(mousedown, mousedowned).on(touchstart, touchstarted); - dragRestore(); - zoomended(dispatch); - } - } - function mousewheeled() { - var dispatch = event.of(this, arguments); - if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), - translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch); - mousewheelTimer = setTimeout(function() { - mousewheelTimer = null; - zoomended(dispatch); - }, 50); - d3_eventPreventDefault(); - scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k); - translateTo(center0, translate0); - zoomed(dispatch); - } - function dblclicked() { - var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2; - zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1); - } - return d3.rebind(zoom, event, "on"); - }; - var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel; - d3.color = d3_color; - function d3_color() {} - d3_color.prototype.toString = function() { - return this.rgb() + ""; - }; - d3.hsl = d3_hsl; - function d3_hsl(h, s, l) { - return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l); - } - var d3_hslPrototype = d3_hsl.prototype = new d3_color(); - d3_hslPrototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_hsl(this.h, this.s, this.l / k); - }; - d3_hslPrototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_hsl(this.h, this.s, k * this.l); - }; - d3_hslPrototype.rgb = function() { - return d3_hsl_rgb(this.h, this.s, this.l); - }; - function d3_hsl_rgb(h, s, l) { - var m1, m2; - h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h; - s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s; - l = l < 0 ? 0 : l > 1 ? 1 : l; - m2 = l <= .5 ? l * (1 + s) : l + s - l * s; - m1 = 2 * l - m2; - function v(h) { - if (h > 360) h -= 360; else if (h < 0) h += 360; - if (h < 60) return m1 + (m2 - m1) * h / 60; - if (h < 180) return m2; - if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; - return m1; - } - function vv(h) { - return Math.round(v(h) * 255); - } - return new d3_rgb(vv(h + 120), vv(h), vv(h - 120)); - } - d3.hcl = d3_hcl; - function d3_hcl(h, c, l) { - return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l); - } - var d3_hclPrototype = d3_hcl.prototype = new d3_color(); - d3_hclPrototype.brighter = function(k) { - return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); - }; - d3_hclPrototype.darker = function(k) { - return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); - }; - d3_hclPrototype.rgb = function() { - return d3_hcl_lab(this.h, this.c, this.l).rgb(); - }; - function d3_hcl_lab(h, c, l) { - if (isNaN(h)) h = 0; - if (isNaN(c)) c = 0; - return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c); - } - d3.lab = d3_lab; - function d3_lab(l, a, b) { - return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b); - } - var d3_lab_K = 18; - var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883; - var d3_labPrototype = d3_lab.prototype = new d3_color(); - d3_labPrototype.brighter = function(k) { - return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_labPrototype.darker = function(k) { - return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_labPrototype.rgb = function() { - return d3_lab_rgb(this.l, this.a, this.b); - }; - function d3_lab_rgb(l, a, b) { - var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200; - x = d3_lab_xyz(x) * d3_lab_X; - y = d3_lab_xyz(y) * d3_lab_Y; - z = d3_lab_xyz(z) * d3_lab_Z; - return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z)); - } - function d3_lab_hcl(l, a, b) { - return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l); - } - function d3_lab_xyz(x) { - return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037; - } - function d3_xyz_lab(x) { - return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29; - } - function d3_xyz_rgb(r) { - return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055)); - } - d3.rgb = d3_rgb; - function d3_rgb(r, g, b) { - return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b); - } - function d3_rgbNumber(value) { - return new d3_rgb(value >> 16, value >> 8 & 255, value & 255); - } - function d3_rgbString(value) { - return d3_rgbNumber(value) + ""; - } - var d3_rgbPrototype = d3_rgb.prototype = new d3_color(); - d3_rgbPrototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - var r = this.r, g = this.g, b = this.b, i = 30; - if (!r && !g && !b) return new d3_rgb(i, i, i); - if (r && r < i) r = i; - if (g && g < i) g = i; - if (b && b < i) b = i; - return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k)); - }; - d3_rgbPrototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_rgb(k * this.r, k * this.g, k * this.b); - }; - d3_rgbPrototype.hsl = function() { - return d3_rgb_hsl(this.r, this.g, this.b); - }; - d3_rgbPrototype.toString = function() { - return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); - }; - function d3_rgb_hex(v) { - return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16); - } - function d3_rgb_parse(format, rgb, hsl) { - format = format.toLowerCase(); - var r = 0, g = 0, b = 0, m1, m2, color; - m1 = /([a-z]+)\((.*)\)/.exec(format); - if (m1) { - m2 = m1[2].split(","); - switch (m1[1]) { - case "hsl": - { - return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100); - } - - case "rgb": - { - return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])); - } - } - } - if (color = d3_rgb_names.get(format)) { - return rgb(color.r, color.g, color.b); - } - if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.slice(1), 16))) { - if (format.length === 4) { - r = (color & 3840) >> 4; - r = r >> 4 | r; - g = color & 240; - g = g >> 4 | g; - b = color & 15; - b = b << 4 | b; - } else if (format.length === 7) { - r = (color & 16711680) >> 16; - g = (color & 65280) >> 8; - b = color & 255; - } - } - return rgb(r, g, b); - } - function d3_rgb_hsl(r, g, b) { - var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2; - if (d) { - s = l < .5 ? d / (max + min) : d / (2 - max - min); - if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4; - h *= 60; - } else { - h = NaN; - s = l > 0 && l < 1 ? 0 : h; - } - return new d3_hsl(h, s, l); - } - function d3_rgb_lab(r, g, b) { - r = d3_rgb_xyz(r); - g = d3_rgb_xyz(g); - b = d3_rgb_xyz(b); - var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z); - return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z)); - } - function d3_rgb_xyz(r) { - return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4); - } - function d3_rgb_parseNumber(c) { - var f = parseFloat(c); - return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; - } - var d3_rgb_names = d3.map({ - aliceblue: 15792383, - antiquewhite: 16444375, - aqua: 65535, - aquamarine: 8388564, - azure: 15794175, - beige: 16119260, - bisque: 16770244, - black: 0, - blanchedalmond: 16772045, - blue: 255, - blueviolet: 9055202, - brown: 10824234, - burlywood: 14596231, - cadetblue: 6266528, - chartreuse: 8388352, - chocolate: 13789470, - coral: 16744272, - cornflowerblue: 6591981, - cornsilk: 16775388, - crimson: 14423100, - cyan: 65535, - darkblue: 139, - darkcyan: 35723, - darkgoldenrod: 12092939, - darkgray: 11119017, - darkgreen: 25600, - darkgrey: 11119017, - darkkhaki: 12433259, - darkmagenta: 9109643, - darkolivegreen: 5597999, - darkorange: 16747520, - darkorchid: 10040012, - darkred: 9109504, - darksalmon: 15308410, - darkseagreen: 9419919, - darkslateblue: 4734347, - darkslategray: 3100495, - darkslategrey: 3100495, - darkturquoise: 52945, - darkviolet: 9699539, - deeppink: 16716947, - deepskyblue: 49151, - dimgray: 6908265, - dimgrey: 6908265, - dodgerblue: 2003199, - firebrick: 11674146, - floralwhite: 16775920, - forestgreen: 2263842, - fuchsia: 16711935, - gainsboro: 14474460, - ghostwhite: 16316671, - gold: 16766720, - goldenrod: 14329120, - gray: 8421504, - green: 32768, - greenyellow: 11403055, - grey: 8421504, - honeydew: 15794160, - hotpink: 16738740, - indianred: 13458524, - indigo: 4915330, - ivory: 16777200, - khaki: 15787660, - lavender: 15132410, - lavenderblush: 16773365, - lawngreen: 8190976, - lemonchiffon: 16775885, - lightblue: 11393254, - lightcoral: 15761536, - lightcyan: 14745599, - lightgoldenrodyellow: 16448210, - lightgray: 13882323, - lightgreen: 9498256, - lightgrey: 13882323, - lightpink: 16758465, - lightsalmon: 16752762, - lightseagreen: 2142890, - lightskyblue: 8900346, - lightslategray: 7833753, - lightslategrey: 7833753, - lightsteelblue: 11584734, - lightyellow: 16777184, - lime: 65280, - limegreen: 3329330, - linen: 16445670, - magenta: 16711935, - maroon: 8388608, - mediumaquamarine: 6737322, - mediumblue: 205, - mediumorchid: 12211667, - mediumpurple: 9662683, - mediumseagreen: 3978097, - mediumslateblue: 8087790, - mediumspringgreen: 64154, - mediumturquoise: 4772300, - mediumvioletred: 13047173, - midnightblue: 1644912, - mintcream: 16121850, - mistyrose: 16770273, - moccasin: 16770229, - navajowhite: 16768685, - navy: 128, - oldlace: 16643558, - olive: 8421376, - olivedrab: 7048739, - orange: 16753920, - orangered: 16729344, - orchid: 14315734, - palegoldenrod: 15657130, - palegreen: 10025880, - paleturquoise: 11529966, - palevioletred: 14381203, - papayawhip: 16773077, - peachpuff: 16767673, - peru: 13468991, - pink: 16761035, - plum: 14524637, - powderblue: 11591910, - purple: 8388736, - rebeccapurple: 6697881, - red: 16711680, - rosybrown: 12357519, - royalblue: 4286945, - saddlebrown: 9127187, - salmon: 16416882, - sandybrown: 16032864, - seagreen: 3050327, - seashell: 16774638, - sienna: 10506797, - silver: 12632256, - skyblue: 8900331, - slateblue: 6970061, - slategray: 7372944, - slategrey: 7372944, - snow: 16775930, - springgreen: 65407, - steelblue: 4620980, - tan: 13808780, - teal: 32896, - thistle: 14204888, - tomato: 16737095, - turquoise: 4251856, - violet: 15631086, - wheat: 16113331, - white: 16777215, - whitesmoke: 16119285, - yellow: 16776960, - yellowgreen: 10145074 - }); - d3_rgb_names.forEach(function(key, value) { - d3_rgb_names.set(key, d3_rgbNumber(value)); - }); - function d3_functor(v) { - return typeof v === "function" ? v : function() { - return v; - }; - } - d3.functor = d3_functor; - d3.xhr = d3_xhrType(d3_identity); - function d3_xhrType(response) { - return function(url, mimeType, callback) { - if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType, - mimeType = null; - return d3_xhr(url, mimeType, response, callback); - }; - } - function d3_xhr(url, mimeType, response, callback) { - var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null; - if (this.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest(); - "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() { - request.readyState > 3 && respond(); - }; - function respond() { - var status = request.status, result; - if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) { - try { - result = response.call(xhr, request); - } catch (e) { - dispatch.error.call(xhr, e); - return; - } - dispatch.load.call(xhr, result); - } else { - dispatch.error.call(xhr, request); - } - } - request.onprogress = function(event) { - var o = d3.event; - d3.event = event; - try { - dispatch.progress.call(xhr, request); - } finally { - d3.event = o; - } - }; - xhr.header = function(name, value) { - name = (name + "").toLowerCase(); - if (arguments.length < 2) return headers[name]; - if (value == null) delete headers[name]; else headers[name] = value + ""; - return xhr; - }; - xhr.mimeType = function(value) { - if (!arguments.length) return mimeType; - mimeType = value == null ? null : value + ""; - return xhr; - }; - xhr.responseType = function(value) { - if (!arguments.length) return responseType; - responseType = value; - return xhr; - }; - xhr.response = function(value) { - response = value; - return xhr; - }; - [ "get", "post" ].forEach(function(method) { - xhr[method] = function() { - return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments))); - }; - }); - xhr.send = function(method, data, callback) { - if (arguments.length === 2 && typeof data === "function") callback = data, data = null; - request.open(method, url, true); - if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*"; - if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]); - if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType); - if (responseType != null) request.responseType = responseType; - if (callback != null) xhr.on("error", callback).on("load", function(request) { - callback(null, request); - }); - dispatch.beforesend.call(xhr, request); - request.send(data == null ? null : data); - return xhr; - }; - xhr.abort = function() { - request.abort(); - return xhr; - }; - d3.rebind(xhr, dispatch, "on"); - return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback)); - } - function d3_xhr_fixCallback(callback) { - return callback.length === 1 ? function(error, request) { - callback(error == null ? request : null); - } : callback; - } - function d3_xhrHasResponse(request) { - var type = request.responseType; - return type && type !== "text" ? request.response : request.responseText; - } - d3.dsv = function(delimiter, mimeType) { - var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0); - function dsv(url, row, callback) { - if (arguments.length < 3) callback = row, row = null; - var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback); - xhr.row = function(_) { - return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row; - }; - return xhr; - } - function response(request) { - return dsv.parse(request.responseText); - } - function typedResponse(f) { - return function(request) { - return dsv.parse(request.responseText, f); - }; - } - dsv.parse = function(text, f) { - var o; - return dsv.parseRows(text, function(row, i) { - if (o) return o(row, i - 1); - var a = new Function("d", "return {" + row.map(function(name, i) { - return JSON.stringify(name) + ": d[" + i + "]"; - }).join(",") + "}"); - o = f ? function(row, i) { - return f(a(row), i); - } : a; - }); - }; - dsv.parseRows = function(text, f) { - var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol; - function token() { - if (I >= N) return EOF; - if (eol) return eol = false, EOL; - var j = I; - if (text.charCodeAt(j) === 34) { - var i = j; - while (i++ < N) { - if (text.charCodeAt(i) === 34) { - if (text.charCodeAt(i + 1) !== 34) break; - ++i; - } - } - I = i + 2; - var c = text.charCodeAt(i + 1); - if (c === 13) { - eol = true; - if (text.charCodeAt(i + 2) === 10) ++I; - } else if (c === 10) { - eol = true; - } - return text.slice(j + 1, i).replace(/""/g, '"'); - } - while (I < N) { - var c = text.charCodeAt(I++), k = 1; - if (c === 10) eol = true; else if (c === 13) { - eol = true; - if (text.charCodeAt(I) === 10) ++I, ++k; - } else if (c !== delimiterCode) continue; - return text.slice(j, I - k); - } - return text.slice(j); - } - while ((t = token()) !== EOF) { - var a = []; - while (t !== EOL && t !== EOF) { - a.push(t); - t = token(); - } - if (f && (a = f(a, n++)) == null) continue; - rows.push(a); - } - return rows; - }; - dsv.format = function(rows) { - if (Array.isArray(rows[0])) return dsv.formatRows(rows); - var fieldSet = new d3_Set(), fields = []; - rows.forEach(function(row) { - for (var field in row) { - if (!fieldSet.has(field)) { - fields.push(fieldSet.add(field)); - } - } - }); - return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) { - return fields.map(function(field) { - return formatValue(row[field]); - }).join(delimiter); - })).join("\n"); - }; - dsv.formatRows = function(rows) { - return rows.map(formatRow).join("\n"); - }; - function formatRow(row) { - return row.map(formatValue).join(delimiter); - } - function formatValue(text) { - return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text; - } - return dsv; - }; - d3.csv = d3.dsv(",", "text/csv"); - d3.tsv = d3.dsv(" ", "text/tab-separated-values"); - var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = this[d3_vendorSymbol(this, "requestAnimationFrame")] || function(callback) { - setTimeout(callback, 17); - }; - d3.timer = function(callback, delay, then) { - var n = arguments.length; - if (n < 2) delay = 0; - if (n < 3) then = Date.now(); - var time = then + delay, timer = { - c: callback, - t: time, - f: false, - n: null - }; - if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer; - d3_timer_queueTail = timer; - if (!d3_timer_interval) { - d3_timer_timeout = clearTimeout(d3_timer_timeout); - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - }; - function d3_timer_step() { - var now = d3_timer_mark(), delay = d3_timer_sweep() - now; - if (delay > 24) { - if (isFinite(delay)) { - clearTimeout(d3_timer_timeout); - d3_timer_timeout = setTimeout(d3_timer_step, delay); - } - d3_timer_interval = 0; - } else { - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - } - d3.timer.flush = function() { - d3_timer_mark(); - d3_timer_sweep(); - }; - function d3_timer_mark() { - var now = Date.now(); - d3_timer_active = d3_timer_queueHead; - while (d3_timer_active) { - if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t); - d3_timer_active = d3_timer_active.n; - } - return now; - } - function d3_timer_sweep() { - var t0, t1 = d3_timer_queueHead, time = Infinity; - while (t1) { - if (t1.f) { - t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n; - } else { - if (t1.t < time) time = t1.t; - t1 = (t0 = t1).n; - } - } - d3_timer_queueTail = t0; - return time; - } - function d3_format_precision(x, p) { - return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1); - } - d3.round = function(x, n) { - return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x); - }; - var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix); - d3.formatPrefix = function(value, precision) { - var i = 0; - if (value) { - if (value < 0) value *= -1; - if (precision) value = d3.round(value, d3_format_precision(value, precision)); - i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); - i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3)); - } - return d3_formatPrefixes[8 + i / 3]; - }; - function d3_formatPrefix(d, i) { - var k = Math.pow(10, abs(8 - i) * 3); - return { - scale: i > 8 ? function(d) { - return d / k; - } : function(d) { - return d * k; - }, - symbol: d - }; - } - function d3_locale_numberFormat(locale) { - var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) { - var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0; - while (i > 0 && g > 0) { - if (length + g + 1 > width) g = Math.max(1, width - length); - t.push(value.substring(i -= g, i + g)); - if ((length += g + 1) > width) break; - g = locale_grouping[j = (j + 1) % locale_grouping.length]; - } - return t.reverse().join(locale_thousands); - } : d3_identity; - return function(specifier) { - var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "-", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false, exponent = true; - if (precision) precision = +precision.substring(1); - if (zfill || fill === "0" && align === "=") { - zfill = fill = "0"; - align = "="; - } - switch (type) { - case "n": - comma = true; - type = "g"; - break; - - case "%": - scale = 100; - suffix = "%"; - type = "f"; - break; - - case "p": - scale = 100; - suffix = "%"; - type = "r"; - break; - - case "b": - case "o": - case "x": - case "X": - if (symbol === "#") prefix = "0" + type.toLowerCase(); - - case "c": - exponent = false; - - case "d": - integer = true; - precision = 0; - break; - - case "s": - scale = -1; - type = "r"; - break; - } - if (symbol === "$") prefix = locale_currency[0], suffix = locale_currency[1]; - if (type == "r" && !precision) type = "g"; - if (precision != null) { - if (type == "g") precision = Math.max(1, Math.min(21, precision)); else if (type == "e" || type == "f") precision = Math.max(0, Math.min(20, precision)); - } - type = d3_format_types.get(type) || d3_format_typeDefault; - var zcomma = zfill && comma; - return function(value) { - var fullSuffix = suffix; - if (integer && value % 1) return ""; - var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign === "-" ? "" : sign; - if (scale < 0) { - var unit = d3.formatPrefix(value, precision); - value = unit.scale(value); - fullSuffix = unit.symbol + suffix; - } else { - value *= scale; - } - value = type(value, precision); - var i = value.lastIndexOf("."), before, after; - if (i < 0) { - var j = exponent ? value.lastIndexOf("e") : -1; - if (j < 0) before = value, after = ""; else before = value.substring(0, j), after = value.substring(j); - } else { - before = value.substring(0, i); - after = locale_decimal + value.substring(i + 1); - } - if (!zfill && comma) before = formatGroup(before, Infinity); - var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : ""; - if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity); - negative += prefix; - value = before + after; - return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix; - }; - }; - } - var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i; - var d3_format_types = d3.map({ - b: function(x) { - return x.toString(2); - }, - c: function(x) { - return String.fromCharCode(x); - }, - o: function(x) { - return x.toString(8); - }, - x: function(x) { - return x.toString(16); - }, - X: function(x) { - return x.toString(16).toUpperCase(); - }, - g: function(x, p) { - return x.toPrecision(p); - }, - e: function(x, p) { - return x.toExponential(p); - }, - f: function(x, p) { - return x.toFixed(p); - }, - r: function(x, p) { - return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p)))); - } - }); - function d3_format_typeDefault(x) { - return x + ""; - } - var d3_time = d3.time = {}, d3_date = Date; - function d3_date_utc() { - this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]); - } - d3_date_utc.prototype = { - getDate: function() { - return this._.getUTCDate(); - }, - getDay: function() { - return this._.getUTCDay(); - }, - getFullYear: function() { - return this._.getUTCFullYear(); - }, - getHours: function() { - return this._.getUTCHours(); - }, - getMilliseconds: function() { - return this._.getUTCMilliseconds(); - }, - getMinutes: function() { - return this._.getUTCMinutes(); - }, - getMonth: function() { - return this._.getUTCMonth(); - }, - getSeconds: function() { - return this._.getUTCSeconds(); - }, - getTime: function() { - return this._.getTime(); - }, - getTimezoneOffset: function() { - return 0; - }, - valueOf: function() { - return this._.valueOf(); - }, - setDate: function() { - d3_time_prototype.setUTCDate.apply(this._, arguments); - }, - setDay: function() { - d3_time_prototype.setUTCDay.apply(this._, arguments); - }, - setFullYear: function() { - d3_time_prototype.setUTCFullYear.apply(this._, arguments); - }, - setHours: function() { - d3_time_prototype.setUTCHours.apply(this._, arguments); - }, - setMilliseconds: function() { - d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); - }, - setMinutes: function() { - d3_time_prototype.setUTCMinutes.apply(this._, arguments); - }, - setMonth: function() { - d3_time_prototype.setUTCMonth.apply(this._, arguments); - }, - setSeconds: function() { - d3_time_prototype.setUTCSeconds.apply(this._, arguments); - }, - setTime: function() { - d3_time_prototype.setTime.apply(this._, arguments); - } - }; - var d3_time_prototype = Date.prototype; - function d3_time_interval(local, step, number) { - function round(date) { - var d0 = local(date), d1 = offset(d0, 1); - return date - d0 < d1 - date ? d0 : d1; - } - function ceil(date) { - step(date = local(new d3_date(date - 1)), 1); - return date; - } - function offset(date, k) { - step(date = new d3_date(+date), k); - return date; - } - function range(t0, t1, dt) { - var time = ceil(t0), times = []; - if (dt > 1) { - while (time < t1) { - if (!(number(time) % dt)) times.push(new Date(+time)); - step(time, 1); - } - } else { - while (time < t1) times.push(new Date(+time)), step(time, 1); - } - return times; - } - function range_utc(t0, t1, dt) { - try { - d3_date = d3_date_utc; - var utc = new d3_date_utc(); - utc._ = t0; - return range(utc, t1, dt); - } finally { - d3_date = Date; - } - } - local.floor = local; - local.round = round; - local.ceil = ceil; - local.offset = offset; - local.range = range; - var utc = local.utc = d3_time_interval_utc(local); - utc.floor = utc; - utc.round = d3_time_interval_utc(round); - utc.ceil = d3_time_interval_utc(ceil); - utc.offset = d3_time_interval_utc(offset); - utc.range = range_utc; - return local; - } - function d3_time_interval_utc(method) { - return function(date, k) { - try { - d3_date = d3_date_utc; - var utc = new d3_date_utc(); - utc._ = date; - return method(utc, k)._; - } finally { - d3_date = Date; - } - }; - } - d3_time.year = d3_time_interval(function(date) { - date = d3_time.day(date); - date.setMonth(0, 1); - return date; - }, function(date, offset) { - date.setFullYear(date.getFullYear() + offset); - }, function(date) { - return date.getFullYear(); - }); - d3_time.years = d3_time.year.range; - d3_time.years.utc = d3_time.year.utc.range; - d3_time.day = d3_time_interval(function(date) { - var day = new d3_date(2e3, 0); - day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); - return day; - }, function(date, offset) { - date.setDate(date.getDate() + offset); - }, function(date) { - return date.getDate() - 1; - }); - d3_time.days = d3_time.day.range; - d3_time.days.utc = d3_time.day.utc.range; - d3_time.dayOfYear = function(date) { - var year = d3_time.year(date); - return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5); - }; - [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ].forEach(function(day, i) { - i = 7 - i; - var interval = d3_time[day] = d3_time_interval(function(date) { - (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7); - return date; - }, function(date, offset) { - date.setDate(date.getDate() + Math.floor(offset) * 7); - }, function(date) { - var day = d3_time.year(date).getDay(); - return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i); - }); - d3_time[day + "s"] = interval.range; - d3_time[day + "s"].utc = interval.utc.range; - d3_time[day + "OfYear"] = function(date) { - var day = d3_time.year(date).getDay(); - return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7); - }; - }); - d3_time.week = d3_time.sunday; - d3_time.weeks = d3_time.sunday.range; - d3_time.weeks.utc = d3_time.sunday.utc.range; - d3_time.weekOfYear = d3_time.sundayOfYear; - function d3_locale_timeFormat(locale) { - var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths; - function d3_time_format(template) { - var n = template.length; - function format(date) { - var string = [], i = -1, j = 0, c, p, f; - while (++i < n) { - if (template.charCodeAt(i) === 37) { - string.push(template.slice(j, i)); - if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i); - if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p); - string.push(c); - j = i + 1; - } - } - string.push(template.slice(j, i)); - return string.join(""); - } - format.parse = function(string) { - var d = { - y: 1900, - m: 0, - d: 1, - H: 0, - M: 0, - S: 0, - L: 0, - Z: null - }, i = d3_time_parse(d, template, string, 0); - if (i != string.length) return null; - if ("p" in d) d.H = d.H % 12 + d.p * 12; - var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)(); - if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("w" in d && ("W" in d || "U" in d)) { - date.setFullYear(d.y, 0, 1); - date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7); - } else date.setFullYear(d.y, d.m, d.d); - date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L); - return localZ ? date._ : date; - }; - format.toString = function() { - return template; - }; - return format; - } - function d3_time_parse(date, template, string, j) { - var c, p, t, i = 0, n = template.length, m = string.length; - while (i < n) { - if (j >= m) return -1; - c = template.charCodeAt(i++); - if (c === 37) { - t = template.charAt(i++); - p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t]; - if (!p || (j = p(date, string, j)) < 0) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } - } - return j; - } - d3_time_format.utc = function(template) { - var local = d3_time_format(template); - function format(date) { - try { - d3_date = d3_date_utc; - var utc = new d3_date(); - utc._ = date; - return local(utc); - } finally { - d3_date = Date; - } - } - format.parse = function(string) { - try { - d3_date = d3_date_utc; - var date = local.parse(string); - return date && date._; - } finally { - d3_date = Date; - } - }; - format.toString = local.toString; - return format; - }; - d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti; - var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths); - locale_periods.forEach(function(p, i) { - d3_time_periodLookup.set(p.toLowerCase(), i); - }); - var d3_time_formats = { - a: function(d) { - return locale_shortDays[d.getDay()]; - }, - A: function(d) { - return locale_days[d.getDay()]; - }, - b: function(d) { - return locale_shortMonths[d.getMonth()]; - }, - B: function(d) { - return locale_months[d.getMonth()]; - }, - c: d3_time_format(locale_dateTime), - d: function(d, p) { - return d3_time_formatPad(d.getDate(), p, 2); - }, - e: function(d, p) { - return d3_time_formatPad(d.getDate(), p, 2); - }, - H: function(d, p) { - return d3_time_formatPad(d.getHours(), p, 2); - }, - I: function(d, p) { - return d3_time_formatPad(d.getHours() % 12 || 12, p, 2); - }, - j: function(d, p) { - return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3); - }, - L: function(d, p) { - return d3_time_formatPad(d.getMilliseconds(), p, 3); - }, - m: function(d, p) { - return d3_time_formatPad(d.getMonth() + 1, p, 2); - }, - M: function(d, p) { - return d3_time_formatPad(d.getMinutes(), p, 2); - }, - p: function(d) { - return locale_periods[+(d.getHours() >= 12)]; - }, - S: function(d, p) { - return d3_time_formatPad(d.getSeconds(), p, 2); - }, - U: function(d, p) { - return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2); - }, - w: function(d) { - return d.getDay(); - }, - W: function(d, p) { - return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2); - }, - x: d3_time_format(locale_date), - X: d3_time_format(locale_time), - y: function(d, p) { - return d3_time_formatPad(d.getFullYear() % 100, p, 2); - }, - Y: function(d, p) { - return d3_time_formatPad(d.getFullYear() % 1e4, p, 4); - }, - Z: d3_time_zone, - "%": function() { - return "%"; - } - }; - var d3_time_parsers = { - a: d3_time_parseWeekdayAbbrev, - A: d3_time_parseWeekday, - b: d3_time_parseMonthAbbrev, - B: d3_time_parseMonth, - c: d3_time_parseLocaleFull, - d: d3_time_parseDay, - e: d3_time_parseDay, - H: d3_time_parseHour24, - I: d3_time_parseHour24, - j: d3_time_parseDayOfYear, - L: d3_time_parseMilliseconds, - m: d3_time_parseMonthNumber, - M: d3_time_parseMinutes, - p: d3_time_parseAmPm, - S: d3_time_parseSeconds, - U: d3_time_parseWeekNumberSunday, - w: d3_time_parseWeekdayNumber, - W: d3_time_parseWeekNumberMonday, - x: d3_time_parseLocaleDate, - X: d3_time_parseLocaleTime, - y: d3_time_parseYear, - Y: d3_time_parseFullYear, - Z: d3_time_parseZone, - "%": d3_time_parseLiteralPercent - }; - function d3_time_parseWeekdayAbbrev(date, string, i) { - d3_time_dayAbbrevRe.lastIndex = 0; - var n = d3_time_dayAbbrevRe.exec(string.slice(i)); - return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseWeekday(date, string, i) { - d3_time_dayRe.lastIndex = 0; - var n = d3_time_dayRe.exec(string.slice(i)); - return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseMonthAbbrev(date, string, i) { - d3_time_monthAbbrevRe.lastIndex = 0; - var n = d3_time_monthAbbrevRe.exec(string.slice(i)); - return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseMonth(date, string, i) { - d3_time_monthRe.lastIndex = 0; - var n = d3_time_monthRe.exec(string.slice(i)); - return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseLocaleFull(date, string, i) { - return d3_time_parse(date, d3_time_formats.c.toString(), string, i); - } - function d3_time_parseLocaleDate(date, string, i) { - return d3_time_parse(date, d3_time_formats.x.toString(), string, i); - } - function d3_time_parseLocaleTime(date, string, i) { - return d3_time_parse(date, d3_time_formats.X.toString(), string, i); - } - function d3_time_parseAmPm(date, string, i) { - var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase()); - return n == null ? -1 : (date.p = n, i); - } - return d3_time_format; - } - var d3_time_formatPads = { - "-": "", - _: " ", - "0": "0" - }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/; - function d3_time_formatPad(value, fill, width) { - var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length; - return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); - } - function d3_time_formatRe(names) { - return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i"); - } - function d3_time_formatLookup(names) { - var map = new d3_Map(), i = -1, n = names.length; - while (++i < n) map.set(names[i].toLowerCase(), i); - return map; - } - function d3_time_parseWeekdayNumber(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 1)); - return n ? (date.w = +n[0], i + n[0].length) : -1; - } - function d3_time_parseWeekNumberSunday(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i)); - return n ? (date.U = +n[0], i + n[0].length) : -1; - } - function d3_time_parseWeekNumberMonday(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i)); - return n ? (date.W = +n[0], i + n[0].length) : -1; - } - function d3_time_parseFullYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 4)); - return n ? (date.y = +n[0], i + n[0].length) : -1; - } - function d3_time_parseYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1; - } - function d3_time_parseZone(date, string, i) { - return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, - i + 5) : -1; - } - function d3_time_expandYear(d) { - return d + (d > 68 ? 1900 : 2e3); - } - function d3_time_parseMonthNumber(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.m = n[0] - 1, i + n[0].length) : -1; - } - function d3_time_parseDay(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.d = +n[0], i + n[0].length) : -1; - } - function d3_time_parseDayOfYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 3)); - return n ? (date.j = +n[0], i + n[0].length) : -1; - } - function d3_time_parseHour24(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.H = +n[0], i + n[0].length) : -1; - } - function d3_time_parseMinutes(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.M = +n[0], i + n[0].length) : -1; - } - function d3_time_parseSeconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.S = +n[0], i + n[0].length) : -1; - } - function d3_time_parseMilliseconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 3)); - return n ? (date.L = +n[0], i + n[0].length) : -1; - } - function d3_time_zone(d) { - var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = abs(z) / 60 | 0, zm = abs(z) % 60; - return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2); - } - function d3_time_parseLiteralPercent(date, string, i) { - d3_time_percentRe.lastIndex = 0; - var n = d3_time_percentRe.exec(string.slice(i, i + 1)); - return n ? i + n[0].length : -1; - } - function d3_time_formatMulti(formats) { - var n = formats.length, i = -1; - while (++i < n) formats[i][0] = this(formats[i][0]); - return function(date) { - var i = 0, f = formats[i]; - while (!f[1](date)) f = formats[++i]; - return f[0](date); - }; - } - d3.locale = function(locale) { - return { - numberFormat: d3_locale_numberFormat(locale), - timeFormat: d3_locale_timeFormat(locale) - }; - }; - var d3_locale_enUS = d3.locale({ - decimal: ".", - thousands: ",", - grouping: [ 3 ], - currency: [ "$", "" ], - dateTime: "%a %b %e %X %Y", - date: "%m/%d/%Y", - time: "%H:%M:%S", - periods: [ "AM", "PM" ], - days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], - shortDays: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], - months: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], - shortMonths: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] - }); - d3.format = d3_locale_enUS.numberFormat; - d3.geo = {}; - function d3_adder() {} - d3_adder.prototype = { - s: 0, - t: 0, - add: function(y) { - d3_adderSum(y, this.t, d3_adderTemp); - d3_adderSum(d3_adderTemp.s, this.s, this); - if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t; - }, - reset: function() { - this.s = this.t = 0; - }, - valueOf: function() { - return this.s; - } - }; - var d3_adderTemp = new d3_adder(); - function d3_adderSum(a, b, o) { - var x = o.s = a + b, bv = x - a, av = x - bv; - o.t = a - av + (b - bv); - } - d3.geo.stream = function(object, listener) { - if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) { - d3_geo_streamObjectType[object.type](object, listener); - } else { - d3_geo_streamGeometry(object, listener); - } - }; - function d3_geo_streamGeometry(geometry, listener) { - if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) { - d3_geo_streamGeometryType[geometry.type](geometry, listener); - } - } - var d3_geo_streamObjectType = { - Feature: function(feature, listener) { - d3_geo_streamGeometry(feature.geometry, listener); - }, - FeatureCollection: function(object, listener) { - var features = object.features, i = -1, n = features.length; - while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener); - } - }; - var d3_geo_streamGeometryType = { - Sphere: function(object, listener) { - listener.sphere(); - }, - Point: function(object, listener) { - object = object.coordinates; - listener.point(object[0], object[1], object[2]); - }, - MultiPoint: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]); - }, - LineString: function(object, listener) { - d3_geo_streamLine(object.coordinates, listener, 0); - }, - MultiLineString: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0); - }, - Polygon: function(object, listener) { - d3_geo_streamPolygon(object.coordinates, listener); - }, - MultiPolygon: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamPolygon(coordinates[i], listener); - }, - GeometryCollection: function(object, listener) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) d3_geo_streamGeometry(geometries[i], listener); - } - }; - function d3_geo_streamLine(coordinates, listener, closed) { - var i = -1, n = coordinates.length - closed, coordinate; - listener.lineStart(); - while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]); - listener.lineEnd(); - } - function d3_geo_streamPolygon(coordinates, listener) { - var i = -1, n = coordinates.length; - listener.polygonStart(); - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1); - listener.polygonEnd(); - } - d3.geo.area = function(object) { - d3_geo_areaSum = 0; - d3.geo.stream(object, d3_geo_area); - return d3_geo_areaSum; - }; - var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder(); - var d3_geo_area = { - sphere: function() { - d3_geo_areaSum += 4 * π; - }, - point: d3_noop, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: function() { - d3_geo_areaRingSum.reset(); - d3_geo_area.lineStart = d3_geo_areaRingStart; - }, - polygonEnd: function() { - var area = 2 * d3_geo_areaRingSum; - d3_geo_areaSum += area < 0 ? 4 * π + area : area; - d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop; - } - }; - function d3_geo_areaRingStart() { - var λ00, φ00, λ0, cosφ0, sinφ0; - d3_geo_area.point = function(λ, φ) { - d3_geo_area.point = nextPoint; - λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), - sinφ0 = Math.sin(φ); - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - φ = φ * d3_radians / 2 + π / 4; - var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ); - d3_geo_areaRingSum.add(Math.atan2(v, u)); - λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ; - } - d3_geo_area.lineEnd = function() { - nextPoint(λ00, φ00); - }; - } - function d3_geo_cartesian(spherical) { - var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ); - return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ]; - } - function d3_geo_cartesianDot(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; - } - function d3_geo_cartesianCross(a, b) { - return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ]; - } - function d3_geo_cartesianAdd(a, b) { - a[0] += b[0]; - a[1] += b[1]; - a[2] += b[2]; - } - function d3_geo_cartesianScale(vector, k) { - return [ vector[0] * k, vector[1] * k, vector[2] * k ]; - } - function d3_geo_cartesianNormalize(d) { - var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); - d[0] /= l; - d[1] /= l; - d[2] /= l; - } - function d3_geo_spherical(cartesian) { - return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ]; - } - function d3_geo_sphericalEqual(a, b) { - return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε; - } - d3.geo.bounds = function() { - var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range; - var bound = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - bound.point = ringPoint; - bound.lineStart = ringStart; - bound.lineEnd = ringEnd; - dλSum = 0; - d3_geo_area.polygonStart(); - }, - polygonEnd: function() { - d3_geo_area.polygonEnd(); - bound.point = point; - bound.lineStart = lineStart; - bound.lineEnd = lineEnd; - if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90; - range[0] = λ0, range[1] = λ1; - } - }; - function point(λ, φ) { - ranges.push(range = [ λ0 = λ, λ1 = λ ]); - if (φ < φ0) φ0 = φ; - if (φ > φ1) φ1 = φ; - } - function linePoint(λ, φ) { - var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]); - if (p0) { - var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal); - d3_geo_cartesianNormalize(inflection); - inflection = d3_geo_spherical(inflection); - var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180; - if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) { - var φi = inflection[1] * d3_degrees; - if (φi > φ1) φ1 = φi; - } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) { - var φi = -inflection[1] * d3_degrees; - if (φi < φ0) φ0 = φi; - } else { - if (φ < φ0) φ0 = φ; - if (φ > φ1) φ1 = φ; - } - if (antimeridian) { - if (λ < λ_) { - if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; - } else { - if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; - } - } else { - if (λ1 >= λ0) { - if (λ < λ0) λ0 = λ; - if (λ > λ1) λ1 = λ; - } else { - if (λ > λ_) { - if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; - } else { - if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; - } - } - } - } else { - point(λ, φ); - } - p0 = p, λ_ = λ; - } - function lineStart() { - bound.point = linePoint; - } - function lineEnd() { - range[0] = λ0, range[1] = λ1; - bound.point = point; - p0 = null; - } - function ringPoint(λ, φ) { - if (p0) { - var dλ = λ - λ_; - dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ; - } else λ__ = λ, φ__ = φ; - d3_geo_area.point(λ, φ); - linePoint(λ, φ); - } - function ringStart() { - d3_geo_area.lineStart(); - } - function ringEnd() { - ringPoint(λ__, φ__); - d3_geo_area.lineEnd(); - if (abs(dλSum) > ε) λ0 = -(λ1 = 180); - range[0] = λ0, range[1] = λ1; - p0 = null; - } - function angle(λ0, λ1) { - return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1; - } - function compareRanges(a, b) { - return a[0] - b[0]; - } - function withinRange(x, range) { - return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; - } - return function(feature) { - φ1 = λ1 = -(λ0 = φ0 = Infinity); - ranges = []; - d3.geo.stream(feature, bound); - var n = ranges.length; - if (n) { - ranges.sort(compareRanges); - for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) { - b = ranges[i]; - if (withinRange(b[0], a) || withinRange(b[1], a)) { - if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; - if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; - } else { - merged.push(a = b); - } - } - var best = -Infinity, dλ; - for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) { - b = merged[i]; - if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1]; - } - } - ranges = range = null; - return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ]; - }; - }(); - d3.geo.centroid = function(object) { - d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; - d3.geo.stream(object, d3_geo_centroid); - var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z; - if (m < ε2) { - x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1; - if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0; - m = x * x + y * y + z * z; - if (m < ε2) return [ NaN, NaN ]; - } - return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ]; - }; - var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2; - var d3_geo_centroid = { - sphere: d3_noop, - point: d3_geo_centroidPoint, - lineStart: d3_geo_centroidLineStart, - lineEnd: d3_geo_centroidLineEnd, - polygonStart: function() { - d3_geo_centroid.lineStart = d3_geo_centroidRingStart; - }, - polygonEnd: function() { - d3_geo_centroid.lineStart = d3_geo_centroidLineStart; - } - }; - function d3_geo_centroidPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ)); - } - function d3_geo_centroidPointXYZ(x, y, z) { - ++d3_geo_centroidW0; - d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0; - d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0; - d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0; - } - function d3_geo_centroidLineStart() { - var x0, y0, z0; - d3_geo_centroid.point = function(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - x0 = cosφ * Math.cos(λ); - y0 = cosφ * Math.sin(λ); - z0 = Math.sin(φ); - d3_geo_centroid.point = nextPoint; - d3_geo_centroidPointXYZ(x0, y0, z0); - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); - d3_geo_centroidW1 += w; - d3_geo_centroidX1 += w * (x0 + (x0 = x)); - d3_geo_centroidY1 += w * (y0 + (y0 = y)); - d3_geo_centroidZ1 += w * (z0 + (z0 = z)); - d3_geo_centroidPointXYZ(x0, y0, z0); - } - } - function d3_geo_centroidLineEnd() { - d3_geo_centroid.point = d3_geo_centroidPoint; - } - function d3_geo_centroidRingStart() { - var λ00, φ00, x0, y0, z0; - d3_geo_centroid.point = function(λ, φ) { - λ00 = λ, φ00 = φ; - d3_geo_centroid.point = nextPoint; - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - x0 = cosφ * Math.cos(λ); - y0 = cosφ * Math.sin(λ); - z0 = Math.sin(φ); - d3_geo_centroidPointXYZ(x0, y0, z0); - }; - d3_geo_centroid.lineEnd = function() { - nextPoint(λ00, φ00); - d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd; - d3_geo_centroid.point = d3_geo_centroidPoint; - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u); - d3_geo_centroidX2 += v * cx; - d3_geo_centroidY2 += v * cy; - d3_geo_centroidZ2 += v * cz; - d3_geo_centroidW1 += w; - d3_geo_centroidX1 += w * (x0 + (x0 = x)); - d3_geo_centroidY1 += w * (y0 + (y0 = y)); - d3_geo_centroidZ1 += w * (z0 + (z0 = z)); - d3_geo_centroidPointXYZ(x0, y0, z0); - } - } - function d3_geo_compose(a, b) { - function compose(x, y) { - return x = a(x, y), b(x[0], x[1]); - } - if (a.invert && b.invert) compose.invert = function(x, y) { - return x = b.invert(x, y), x && a.invert(x[0], x[1]); - }; - return compose; - } - function d3_true() { - return true; - } - function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) { - var subject = [], clip = []; - segments.forEach(function(segment) { - if ((n = segment.length - 1) <= 0) return; - var n, p0 = segment[0], p1 = segment[n]; - if (d3_geo_sphericalEqual(p0, p1)) { - listener.lineStart(); - for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]); - listener.lineEnd(); - return; - } - var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false); - a.o = b; - subject.push(a); - clip.push(b); - a = new d3_geo_clipPolygonIntersection(p1, segment, null, false); - b = new d3_geo_clipPolygonIntersection(p1, null, a, true); - a.o = b; - subject.push(a); - clip.push(b); - }); - clip.sort(compare); - d3_geo_clipPolygonLinkCircular(subject); - d3_geo_clipPolygonLinkCircular(clip); - if (!subject.length) return; - for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) { - clip[i].e = entry = !entry; - } - var start = subject[0], points, point; - while (1) { - var current = start, isSubject = true; - while (current.v) if ((current = current.n) === start) return; - points = current.z; - listener.lineStart(); - do { - current.v = current.o.v = true; - if (current.e) { - if (isSubject) { - for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.n.x, 1, listener); - } - current = current.n; - } else { - if (isSubject) { - points = current.p.z; - for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.p.x, -1, listener); - } - current = current.p; - } - current = current.o; - points = current.z; - isSubject = !isSubject; - } while (!current.v); - listener.lineEnd(); - } - } - function d3_geo_clipPolygonLinkCircular(array) { - if (!(n = array.length)) return; - var n, i = 0, a = array[0], b; - while (++i < n) { - a.n = b = array[i]; - b.p = a; - a = b; - } - a.n = b = array[0]; - b.p = a; - } - function d3_geo_clipPolygonIntersection(point, points, other, entry) { - this.x = point; - this.z = points; - this.o = other; - this.e = entry; - this.v = false; - this.n = this.p = null; - } - function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) { - return function(rotate, listener) { - var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]); - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - clip.point = pointRing; - clip.lineStart = ringStart; - clip.lineEnd = ringEnd; - segments = []; - polygon = []; - }, - polygonEnd: function() { - clip.point = point; - clip.lineStart = lineStart; - clip.lineEnd = lineEnd; - segments = d3.merge(segments); - var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon); - if (segments.length) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener); - } else if (clipStartInside) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - } - if (polygonStarted) listener.polygonEnd(), polygonStarted = false; - segments = polygon = null; - }, - sphere: function() { - listener.polygonStart(); - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - listener.polygonEnd(); - } - }; - function point(λ, φ) { - var point = rotate(λ, φ); - if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ); - } - function pointLine(λ, φ) { - var point = rotate(λ, φ); - line.point(point[0], point[1]); - } - function lineStart() { - clip.point = pointLine; - line.lineStart(); - } - function lineEnd() { - clip.point = point; - line.lineEnd(); - } - var segments; - var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring; - function pointRing(λ, φ) { - ring.push([ λ, φ ]); - var point = rotate(λ, φ); - ringListener.point(point[0], point[1]); - } - function ringStart() { - ringListener.lineStart(); - ring = []; - } - function ringEnd() { - pointRing(ring[0][0], ring[0][1]); - ringListener.lineEnd(); - var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length; - ring.pop(); - polygon.push(ring); - ring = null; - if (!n) return; - if (clean & 1) { - segment = ringSegments[0]; - var n = segment.length - 1, i = -1, point; - if (n > 0) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - listener.lineStart(); - while (++i < n) listener.point((point = segment[i])[0], point[1]); - listener.lineEnd(); - } - return; - } - if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); - segments.push(ringSegments.filter(d3_geo_clipSegmentLength1)); - } - return clip; - }; - } - function d3_geo_clipSegmentLength1(segment) { - return segment.length > 1; - } - function d3_geo_clipBufferListener() { - var lines = [], line; - return { - lineStart: function() { - lines.push(line = []); - }, - point: function(λ, φ) { - line.push([ λ, φ ]); - }, - lineEnd: d3_noop, - buffer: function() { - var buffer = lines; - lines = []; - line = null; - return buffer; - }, - rejoin: function() { - if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); - } - }; - } - function d3_geo_clipSort(a, b) { - return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]); - } - var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]); - function d3_geo_clipAntimeridianLine(listener) { - var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean; - return { - lineStart: function() { - listener.lineStart(); - clean = 1; - }, - point: function(λ1, φ1) { - var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0); - if (abs(dλ - π) < ε) { - listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - listener.point(λ1, φ0); - clean = 0; - } else if (sλ0 !== sλ1 && dλ >= π) { - if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε; - if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε; - φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - clean = 0; - } - listener.point(λ0 = λ1, φ0 = φ1); - sλ0 = sλ1; - }, - lineEnd: function() { - listener.lineEnd(); - λ0 = φ0 = NaN; - }, - clean: function() { - return 2 - clean; - } - }; - } - function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) { - var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1); - return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2; - } - function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) { - var φ; - if (from == null) { - φ = direction * halfπ; - listener.point(-π, φ); - listener.point(0, φ); - listener.point(π, φ); - listener.point(π, 0); - listener.point(π, -φ); - listener.point(0, -φ); - listener.point(-π, -φ); - listener.point(-π, 0); - listener.point(-π, φ); - } else if (abs(from[0] - to[0]) > ε) { - var s = from[0] < to[0] ? π : -π; - φ = direction * s / 2; - listener.point(-s, φ); - listener.point(0, φ); - listener.point(s, φ); - } else { - listener.point(to[0], to[1]); - } - } - function d3_geo_pointInPolygon(point, polygon) { - var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0; - d3_geo_areaRingSum.reset(); - for (var i = 0, n = polygon.length; i < n; ++i) { - var ring = polygon[i], m = ring.length; - if (!m) continue; - var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1; - while (true) { - if (j === m) j = 0; - point = ring[j]; - var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ; - d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ))); - polarAngle += antimeridian ? dλ + sdλ * τ : dλ; - if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) { - var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point)); - d3_geo_cartesianNormalize(arc); - var intersection = d3_geo_cartesianCross(meridianNormal, arc); - d3_geo_cartesianNormalize(intersection); - var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]); - if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) { - winding += antimeridian ^ dλ >= 0 ? 1 : -1; - } - } - if (!j++) break; - λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point; - } - } - return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1; - } - function d3_geo_clipCircle(radius) { - var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians); - return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]); - function visible(λ, φ) { - return Math.cos(λ) * Math.cos(φ) > cr; - } - function clipLine(listener) { - var point0, c0, v0, v00, clean; - return { - lineStart: function() { - v00 = v0 = false; - clean = 1; - }, - point: function(λ, φ) { - var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0; - if (!point0 && (v00 = v0 = v)) listener.lineStart(); - if (v !== v0) { - point2 = intersect(point0, point1); - if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) { - point1[0] += ε; - point1[1] += ε; - v = visible(point1[0], point1[1]); - } - } - if (v !== v0) { - clean = 0; - if (v) { - listener.lineStart(); - point2 = intersect(point1, point0); - listener.point(point2[0], point2[1]); - } else { - point2 = intersect(point0, point1); - listener.point(point2[0], point2[1]); - listener.lineEnd(); - } - point0 = point2; - } else if (notHemisphere && point0 && smallRadius ^ v) { - var t; - if (!(c & c0) && (t = intersect(point1, point0, true))) { - clean = 0; - if (smallRadius) { - listener.lineStart(); - listener.point(t[0][0], t[0][1]); - listener.point(t[1][0], t[1][1]); - listener.lineEnd(); - } else { - listener.point(t[1][0], t[1][1]); - listener.lineEnd(); - listener.lineStart(); - listener.point(t[0][0], t[0][1]); - } - } - } - if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) { - listener.point(point1[0], point1[1]); - } - point0 = point1, v0 = v, c0 = c; - }, - lineEnd: function() { - if (v0) listener.lineEnd(); - point0 = null; - }, - clean: function() { - return clean | (v00 && v0) << 1; - } - }; - } - function intersect(a, b, two) { - var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b); - var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2; - if (!determinant) return !two && a; - var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2); - d3_geo_cartesianAdd(A, B); - var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1); - if (t2 < 0) return; - var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu); - d3_geo_cartesianAdd(q, A); - q = d3_geo_spherical(q); - if (!two) return q; - var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z; - if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z; - var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε; - if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z; - if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) { - var q1 = d3_geo_cartesianScale(u, (-w + t) / uu); - d3_geo_cartesianAdd(q1, A); - return [ q, d3_geo_spherical(q1) ]; - } - } - function code(λ, φ) { - var r = smallRadius ? radius : π - radius, code = 0; - if (λ < -r) code |= 1; else if (λ > r) code |= 2; - if (φ < -r) code |= 4; else if (φ > r) code |= 8; - return code; - } - } - function d3_geom_clipLine(x0, y0, x1, y1) { - return function(line) { - var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r; - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - if (t0 > 0) line.a = { - x: ax + t0 * dx, - y: ay + t0 * dy - }; - if (t1 < 1) line.b = { - x: ax + t1 * dx, - y: ay + t1 * dy - }; - return line; - }; - } - var d3_geo_clipExtentMAX = 1e9; - d3.geo.clipExtent = function() { - var x0, y0, x1, y1, stream, clip, clipExtent = { - stream: function(output) { - if (stream) stream.valid = false; - stream = clip(output); - stream.valid = true; - return stream; - }, - extent: function(_) { - if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; - clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]); - if (stream) stream.valid = false, stream = null; - return clipExtent; - } - }; - return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]); - }; - function d3_geo_clipExtent(x0, y0, x1, y1) { - return function(listener) { - var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring; - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - listener = bufferListener; - segments = []; - polygon = []; - clean = true; - }, - polygonEnd: function() { - listener = listener_; - segments = d3.merge(segments); - var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length; - if (inside || visible) { - listener.polygonStart(); - if (inside) { - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - } - if (visible) { - d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener); - } - listener.polygonEnd(); - } - segments = polygon = ring = null; - } - }; - function insidePolygon(p) { - var wn = 0, n = polygon.length, y = p[1]; - for (var i = 0; i < n; ++i) { - for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) { - b = v[j]; - if (a[1] <= y) { - if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn; - } else { - if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn; - } - a = b; - } - } - return wn !== 0; - } - function interpolate(from, to, direction, listener) { - var a = 0, a1 = 0; - if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) { - do { - listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); - } while ((a = (a + direction + 4) % 4) !== a1); - } else { - listener.point(to[0], to[1]); - } - } - function pointVisible(x, y) { - return x0 <= x && x <= x1 && y0 <= y && y <= y1; - } - function point(x, y) { - if (pointVisible(x, y)) listener.point(x, y); - } - var x__, y__, v__, x_, y_, v_, first, clean; - function lineStart() { - clip.point = linePoint; - if (polygon) polygon.push(ring = []); - first = true; - v_ = false; - x_ = y_ = NaN; - } - function lineEnd() { - if (segments) { - linePoint(x__, y__); - if (v__ && v_) bufferListener.rejoin(); - segments.push(bufferListener.buffer()); - } - clip.point = point; - if (v_) listener.lineEnd(); - } - function linePoint(x, y) { - x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x)); - y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y)); - var v = pointVisible(x, y); - if (polygon) ring.push([ x, y ]); - if (first) { - x__ = x, y__ = y, v__ = v; - first = false; - if (v) { - listener.lineStart(); - listener.point(x, y); - } - } else { - if (v && v_) listener.point(x, y); else { - var l = { - a: { - x: x_, - y: y_ - }, - b: { - x: x, - y: y - } - }; - if (clipLine(l)) { - if (!v_) { - listener.lineStart(); - listener.point(l.a.x, l.a.y); - } - listener.point(l.b.x, l.b.y); - if (!v) listener.lineEnd(); - clean = false; - } else if (v) { - listener.lineStart(); - listener.point(x, y); - clean = false; - } - } - } - x_ = x, y_ = y, v_ = v; - } - return clip; - }; - function corner(p, direction) { - return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2; - } - function compare(a, b) { - return comparePoints(a.x, b.x); - } - function comparePoints(a, b) { - var ca = corner(a, 1), cb = corner(b, 1); - return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0]; - } - } - function d3_geo_conic(projectAt) { - var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1); - p.parallels = function(_) { - if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ]; - return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180); - }; - return p; - } - function d3_geo_conicEqualArea(φ0, φ1) { - var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n; - function forward(λ, φ) { - var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n; - return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = ρ0 - y; - return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ]; - }; - return forward; - } - (d3.geo.conicEqualArea = function() { - return d3_geo_conic(d3_geo_conicEqualArea); - }).raw = d3_geo_conicEqualArea; - d3.geo.albers = function() { - return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070); - }; - d3.geo.albersUsa = function() { - var lower48 = d3.geo.albers(); - var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]); - var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]); - var point, pointStream = { - point: function(x, y) { - point = [ x, y ]; - } - }, lower48Point, alaskaPoint, hawaiiPoint; - function albersUsa(coordinates) { - var x = coordinates[0], y = coordinates[1]; - point = null; - (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y); - return point; - } - albersUsa.invert = function(coordinates) { - var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k; - return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates); - }; - albersUsa.stream = function(stream) { - var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream); - return { - point: function(x, y) { - lower48Stream.point(x, y); - alaskaStream.point(x, y); - hawaiiStream.point(x, y); - }, - sphere: function() { - lower48Stream.sphere(); - alaskaStream.sphere(); - hawaiiStream.sphere(); - }, - lineStart: function() { - lower48Stream.lineStart(); - alaskaStream.lineStart(); - hawaiiStream.lineStart(); - }, - lineEnd: function() { - lower48Stream.lineEnd(); - alaskaStream.lineEnd(); - hawaiiStream.lineEnd(); - }, - polygonStart: function() { - lower48Stream.polygonStart(); - alaskaStream.polygonStart(); - hawaiiStream.polygonStart(); - }, - polygonEnd: function() { - lower48Stream.polygonEnd(); - alaskaStream.polygonEnd(); - hawaiiStream.polygonEnd(); - } - }; - }; - albersUsa.precision = function(_) { - if (!arguments.length) return lower48.precision(); - lower48.precision(_); - alaska.precision(_); - hawaii.precision(_); - return albersUsa; - }; - albersUsa.scale = function(_) { - if (!arguments.length) return lower48.scale(); - lower48.scale(_); - alaska.scale(_ * .35); - hawaii.scale(_); - return albersUsa.translate(lower48.translate()); - }; - albersUsa.translate = function(_) { - if (!arguments.length) return lower48.translate(); - var k = lower48.scale(), x = +_[0], y = +_[1]; - lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point; - alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; - hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; - return albersUsa; - }; - return albersUsa.scale(1070); - }; - var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = { - point: d3_noop, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: function() { - d3_geo_pathAreaPolygon = 0; - d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart; - }, - polygonEnd: function() { - d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop; - d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2); - } - }; - function d3_geo_pathAreaRingStart() { - var x00, y00, x0, y0; - d3_geo_pathArea.point = function(x, y) { - d3_geo_pathArea.point = nextPoint; - x00 = x0 = x, y00 = y0 = y; - }; - function nextPoint(x, y) { - d3_geo_pathAreaPolygon += y0 * x - x0 * y; - x0 = x, y0 = y; - } - d3_geo_pathArea.lineEnd = function() { - nextPoint(x00, y00); - }; - } - var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1; - var d3_geo_pathBounds = { - point: d3_geo_pathBoundsPoint, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: d3_noop, - polygonEnd: d3_noop - }; - function d3_geo_pathBoundsPoint(x, y) { - if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x; - if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x; - if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y; - if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y; - } - function d3_geo_pathBuffer() { - var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = []; - var stream = { - point: point, - lineStart: function() { - stream.point = pointLineStart; - }, - lineEnd: lineEnd, - polygonStart: function() { - stream.lineEnd = lineEndPolygon; - }, - polygonEnd: function() { - stream.lineEnd = lineEnd; - stream.point = point; - }, - pointRadius: function(_) { - pointCircle = d3_geo_pathBufferCircle(_); - return stream; - }, - result: function() { - if (buffer.length) { - var result = buffer.join(""); - buffer = []; - return result; - } - } - }; - function point(x, y) { - buffer.push("M", x, ",", y, pointCircle); - } - function pointLineStart(x, y) { - buffer.push("M", x, ",", y); - stream.point = pointLine; - } - function pointLine(x, y) { - buffer.push("L", x, ",", y); - } - function lineEnd() { - stream.point = point; - } - function lineEndPolygon() { - buffer.push("Z"); - } - return stream; - } - function d3_geo_pathBufferCircle(radius) { - return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z"; - } - var d3_geo_pathCentroid = { - point: d3_geo_pathCentroidPoint, - lineStart: d3_geo_pathCentroidLineStart, - lineEnd: d3_geo_pathCentroidLineEnd, - polygonStart: function() { - d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart; - }, - polygonEnd: function() { - d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; - d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart; - d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd; - } - }; - function d3_geo_pathCentroidPoint(x, y) { - d3_geo_centroidX0 += x; - d3_geo_centroidY0 += y; - ++d3_geo_centroidZ0; - } - function d3_geo_pathCentroidLineStart() { - var x0, y0; - d3_geo_pathCentroid.point = function(x, y) { - d3_geo_pathCentroid.point = nextPoint; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - }; - function nextPoint(x, y) { - var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); - d3_geo_centroidX1 += z * (x0 + x) / 2; - d3_geo_centroidY1 += z * (y0 + y) / 2; - d3_geo_centroidZ1 += z; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - } - } - function d3_geo_pathCentroidLineEnd() { - d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; - } - function d3_geo_pathCentroidRingStart() { - var x00, y00, x0, y0; - d3_geo_pathCentroid.point = function(x, y) { - d3_geo_pathCentroid.point = nextPoint; - d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y); - }; - function nextPoint(x, y) { - var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); - d3_geo_centroidX1 += z * (x0 + x) / 2; - d3_geo_centroidY1 += z * (y0 + y) / 2; - d3_geo_centroidZ1 += z; - z = y0 * x - x0 * y; - d3_geo_centroidX2 += z * (x0 + x); - d3_geo_centroidY2 += z * (y0 + y); - d3_geo_centroidZ2 += z * 3; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - } - d3_geo_pathCentroid.lineEnd = function() { - nextPoint(x00, y00); - }; - } - function d3_geo_pathContext(context) { - var pointRadius = 4.5; - var stream = { - point: point, - lineStart: function() { - stream.point = pointLineStart; - }, - lineEnd: lineEnd, - polygonStart: function() { - stream.lineEnd = lineEndPolygon; - }, - polygonEnd: function() { - stream.lineEnd = lineEnd; - stream.point = point; - }, - pointRadius: function(_) { - pointRadius = _; - return stream; - }, - result: d3_noop - }; - function point(x, y) { - context.moveTo(x + pointRadius, y); - context.arc(x, y, pointRadius, 0, τ); - } - function pointLineStart(x, y) { - context.moveTo(x, y); - stream.point = pointLine; - } - function pointLine(x, y) { - context.lineTo(x, y); - } - function lineEnd() { - stream.point = point; - } - function lineEndPolygon() { - context.closePath(); - } - return stream; - } - function d3_geo_resample(project) { - var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16; - function resample(stream) { - return (maxDepth ? resampleRecursive : resampleNone)(stream); - } - function resampleNone(stream) { - return d3_geo_transformPoint(stream, function(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - }); - } - function resampleRecursive(stream) { - var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0; - var resample = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - stream.polygonStart(); - resample.lineStart = ringStart; - }, - polygonEnd: function() { - stream.polygonEnd(); - resample.lineStart = lineStart; - } - }; - function point(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - } - function lineStart() { - x0 = NaN; - resample.point = linePoint; - stream.lineStart(); - } - function linePoint(λ, φ) { - var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ); - resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); - stream.point(x0, y0); - } - function lineEnd() { - resample.point = point; - stream.lineEnd(); - } - function ringStart() { - lineStart(); - resample.point = ringPoint; - resample.lineEnd = ringEnd; - } - function ringPoint(λ, φ) { - linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; - resample.point = linePoint; - } - function ringEnd() { - resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream); - resample.lineEnd = lineEnd; - lineEnd(); - } - return resample; - } - function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) { - var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy; - if (d2 > 4 * δ2 && depth--) { - var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2; - if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { - resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream); - stream.point(x2, y2); - resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream); - } - } - } - resample.precision = function(_) { - if (!arguments.length) return Math.sqrt(δ2); - maxDepth = (δ2 = _ * _) > 0 && 16; - return resample; - }; - return resample; - } - d3.geo.path = function() { - var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream; - function path(object) { - if (object) { - if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); - if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream); - d3.geo.stream(object, cacheStream); - } - return contextStream.result(); - } - path.area = function(object) { - d3_geo_pathAreaSum = 0; - d3.geo.stream(object, projectStream(d3_geo_pathArea)); - return d3_geo_pathAreaSum; - }; - path.centroid = function(object) { - d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; - d3.geo.stream(object, projectStream(d3_geo_pathCentroid)); - return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ]; - }; - path.bounds = function(object) { - d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity); - d3.geo.stream(object, projectStream(d3_geo_pathBounds)); - return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ]; - }; - path.projection = function(_) { - if (!arguments.length) return projection; - projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity; - return reset(); - }; - path.context = function(_) { - if (!arguments.length) return context; - contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_); - if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); - return reset(); - }; - path.pointRadius = function(_) { - if (!arguments.length) return pointRadius; - pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); - return path; - }; - function reset() { - cacheStream = null; - return path; - } - return path.projection(d3.geo.albersUsa()).context(null); - }; - function d3_geo_pathProjectStream(project) { - var resample = d3_geo_resample(function(x, y) { - return project([ x * d3_degrees, y * d3_degrees ]); - }); - return function(stream) { - return d3_geo_projectionRadians(resample(stream)); - }; - } - d3.geo.transform = function(methods) { - return { - stream: function(stream) { - var transform = new d3_geo_transform(stream); - for (var k in methods) transform[k] = methods[k]; - return transform; - } - }; - }; - function d3_geo_transform(stream) { - this.stream = stream; - } - d3_geo_transform.prototype = { - point: function(x, y) { - this.stream.point(x, y); - }, - sphere: function() { - this.stream.sphere(); - }, - lineStart: function() { - this.stream.lineStart(); - }, - lineEnd: function() { - this.stream.lineEnd(); - }, - polygonStart: function() { - this.stream.polygonStart(); - }, - polygonEnd: function() { - this.stream.polygonEnd(); - } - }; - function d3_geo_transformPoint(stream, point) { - return { - point: point, - sphere: function() { - stream.sphere(); - }, - lineStart: function() { - stream.lineStart(); - }, - lineEnd: function() { - stream.lineEnd(); - }, - polygonStart: function() { - stream.polygonStart(); - }, - polygonEnd: function() { - stream.polygonEnd(); - } - }; - } - d3.geo.projection = d3_geo_projection; - d3.geo.projectionMutator = d3_geo_projectionMutator; - function d3_geo_projection(project) { - return d3_geo_projectionMutator(function() { - return project; - })(); - } - function d3_geo_projectionMutator(projectAt) { - var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) { - x = project(x, y); - return [ x[0] * k + δx, δy - x[1] * k ]; - }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream; - function projection(point) { - point = projectRotate(point[0] * d3_radians, point[1] * d3_radians); - return [ point[0] * k + δx, δy - point[1] * k ]; - } - function invert(point) { - point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k); - return point && [ point[0] * d3_degrees, point[1] * d3_degrees ]; - } - projection.stream = function(output) { - if (stream) stream.valid = false; - stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output)))); - stream.valid = true; - return stream; - }; - projection.clipAngle = function(_) { - if (!arguments.length) return clipAngle; - preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians); - return invalidate(); - }; - projection.clipExtent = function(_) { - if (!arguments.length) return clipExtent; - clipExtent = _; - postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity; - return invalidate(); - }; - projection.scale = function(_) { - if (!arguments.length) return k; - k = +_; - return reset(); - }; - projection.translate = function(_) { - if (!arguments.length) return [ x, y ]; - x = +_[0]; - y = +_[1]; - return reset(); - }; - projection.center = function(_) { - if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ]; - λ = _[0] % 360 * d3_radians; - φ = _[1] % 360 * d3_radians; - return reset(); - }; - projection.rotate = function(_) { - if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ]; - δλ = _[0] % 360 * d3_radians; - δφ = _[1] % 360 * d3_radians; - δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0; - return reset(); - }; - d3.rebind(projection, projectResample, "precision"); - function reset() { - projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project); - var center = project(λ, φ); - δx = x - center[0] * k; - δy = y + center[1] * k; - return invalidate(); - } - function invalidate() { - if (stream) stream.valid = false, stream = null; - return projection; - } - return function() { - project = projectAt.apply(this, arguments); - projection.invert = project.invert && invert; - return reset(); - }; - } - function d3_geo_projectionRadians(stream) { - return d3_geo_transformPoint(stream, function(x, y) { - stream.point(x * d3_radians, y * d3_radians); - }); - } - function d3_geo_equirectangular(λ, φ) { - return [ λ, φ ]; - } - (d3.geo.equirectangular = function() { - return d3_geo_projection(d3_geo_equirectangular); - }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular; - d3.geo.rotation = function(rotate) { - rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0); - function forward(coordinates) { - coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - } - forward.invert = function(coordinates) { - coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - }; - return forward; - }; - function d3_geo_identityRotation(λ, φ) { - return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; - } - d3_geo_identityRotation.invert = d3_geo_equirectangular; - function d3_geo_rotation(δλ, δφ, δγ) { - return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation; - } - function d3_geo_forwardRotationλ(δλ) { - return function(λ, φ) { - return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; - }; - } - function d3_geo_rotationλ(δλ) { - var rotation = d3_geo_forwardRotationλ(δλ); - rotation.invert = d3_geo_forwardRotationλ(-δλ); - return rotation; - } - function d3_geo_rotationφγ(δφ, δγ) { - var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ); - function rotation(λ, φ) { - var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ; - return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ]; - } - rotation.invert = function(λ, φ) { - var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ; - return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ]; - }; - return rotation; - } - d3.geo.circle = function() { - var origin = [ 0, 0 ], angle, precision = 6, interpolate; - function circle() { - var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = []; - interpolate(null, null, 1, { - point: function(x, y) { - ring.push(x = rotate(x, y)); - x[0] *= d3_degrees, x[1] *= d3_degrees; - } - }); - return { - type: "Polygon", - coordinates: [ ring ] - }; - } - circle.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - return circle; - }; - circle.angle = function(x) { - if (!arguments.length) return angle; - interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians); - return circle; - }; - circle.precision = function(_) { - if (!arguments.length) return precision; - interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians); - return circle; - }; - return circle.angle(90); - }; - function d3_geo_circleInterpolate(radius, precision) { - var cr = Math.cos(radius), sr = Math.sin(radius); - return function(from, to, direction, listener) { - var step = direction * precision; - if (from != null) { - from = d3_geo_circleAngle(cr, from); - to = d3_geo_circleAngle(cr, to); - if (direction > 0 ? from < to : from > to) from += direction * τ; - } else { - from = radius + direction * τ; - to = radius - .5 * step; - } - for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) { - listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]); - } - }; - } - function d3_geo_circleAngle(cr, point) { - var a = d3_geo_cartesian(point); - a[0] -= cr; - d3_geo_cartesianNormalize(a); - var angle = d3_acos(-a[1]); - return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI); - } - d3.geo.distance = function(a, b) { - var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t; - return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ); - }; - d3.geo.graticule = function() { - var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5; - function graticule() { - return { - type: "MultiLineString", - coordinates: lines() - }; - } - function lines() { - return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) { - return abs(x % DX) > ε; - }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) { - return abs(y % DY) > ε; - }).map(y)); - } - graticule.lines = function() { - return lines().map(function(coordinates) { - return { - type: "LineString", - coordinates: coordinates - }; - }); - }; - graticule.outline = function() { - return { - type: "Polygon", - coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ] - }; - }; - graticule.extent = function(_) { - if (!arguments.length) return graticule.minorExtent(); - return graticule.majorExtent(_).minorExtent(_); - }; - graticule.majorExtent = function(_) { - if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ]; - X0 = +_[0][0], X1 = +_[1][0]; - Y0 = +_[0][1], Y1 = +_[1][1]; - if (X0 > X1) _ = X0, X0 = X1, X1 = _; - if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; - return graticule.precision(precision); - }; - graticule.minorExtent = function(_) { - if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; - x0 = +_[0][0], x1 = +_[1][0]; - y0 = +_[0][1], y1 = +_[1][1]; - if (x0 > x1) _ = x0, x0 = x1, x1 = _; - if (y0 > y1) _ = y0, y0 = y1, y1 = _; - return graticule.precision(precision); - }; - graticule.step = function(_) { - if (!arguments.length) return graticule.minorStep(); - return graticule.majorStep(_).minorStep(_); - }; - graticule.majorStep = function(_) { - if (!arguments.length) return [ DX, DY ]; - DX = +_[0], DY = +_[1]; - return graticule; - }; - graticule.minorStep = function(_) { - if (!arguments.length) return [ dx, dy ]; - dx = +_[0], dy = +_[1]; - return graticule; - }; - graticule.precision = function(_) { - if (!arguments.length) return precision; - precision = +_; - x = d3_geo_graticuleX(y0, y1, 90); - y = d3_geo_graticuleY(x0, x1, precision); - X = d3_geo_graticuleX(Y0, Y1, 90); - Y = d3_geo_graticuleY(X0, X1, precision); - return graticule; - }; - return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]); - }; - function d3_geo_graticuleX(y0, y1, dy) { - var y = d3.range(y0, y1 - ε, dy).concat(y1); - return function(x) { - return y.map(function(y) { - return [ x, y ]; - }); - }; - } - function d3_geo_graticuleY(x0, x1, dx) { - var x = d3.range(x0, x1 - ε, dx).concat(x1); - return function(y) { - return x.map(function(x) { - return [ x, y ]; - }); - }; - } - function d3_source(d) { - return d.source; - } - function d3_target(d) { - return d.target; - } - d3.geo.greatArc = function() { - var source = d3_source, source_, target = d3_target, target_; - function greatArc() { - return { - type: "LineString", - coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ] - }; - } - greatArc.distance = function() { - return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments)); - }; - greatArc.source = function(_) { - if (!arguments.length) return source; - source = _, source_ = typeof _ === "function" ? null : _; - return greatArc; - }; - greatArc.target = function(_) { - if (!arguments.length) return target; - target = _, target_ = typeof _ === "function" ? null : _; - return greatArc; - }; - greatArc.precision = function() { - return arguments.length ? greatArc : 0; - }; - return greatArc; - }; - d3.geo.interpolate = function(source, target) { - return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians); - }; - function d3_geo_interpolate(x0, y0, x1, y1) { - var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d); - var interpolate = d ? function(t) { - var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1; - return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ]; - } : function() { - return [ x0 * d3_degrees, y0 * d3_degrees ]; - }; - interpolate.distance = d; - return interpolate; - } - d3.geo.length = function(object) { - d3_geo_lengthSum = 0; - d3.geo.stream(object, d3_geo_length); - return d3_geo_lengthSum; - }; - var d3_geo_lengthSum; - var d3_geo_length = { - sphere: d3_noop, - point: d3_noop, - lineStart: d3_geo_lengthLineStart, - lineEnd: d3_noop, - polygonStart: d3_noop, - polygonEnd: d3_noop - }; - function d3_geo_lengthLineStart() { - var λ0, sinφ0, cosφ0; - d3_geo_length.point = function(λ, φ) { - λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ); - d3_geo_length.point = nextPoint; - }; - d3_geo_length.lineEnd = function() { - d3_geo_length.point = d3_geo_length.lineEnd = d3_noop; - }; - function nextPoint(λ, φ) { - var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t); - d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ); - λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ; - } - } - function d3_geo_azimuthal(scale, angle) { - function azimuthal(λ, φ) { - var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ); - return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ]; - } - azimuthal.invert = function(x, y) { - var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c); - return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ]; - }; - return azimuthal; - } - var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) { - return Math.sqrt(2 / (1 + cosλcosφ)); - }, function(ρ) { - return 2 * Math.asin(ρ / 2); - }); - (d3.geo.azimuthalEqualArea = function() { - return d3_geo_projection(d3_geo_azimuthalEqualArea); - }).raw = d3_geo_azimuthalEqualArea; - var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) { - var c = Math.acos(cosλcosφ); - return c && c / Math.sin(c); - }, d3_identity); - (d3.geo.azimuthalEquidistant = function() { - return d3_geo_projection(d3_geo_azimuthalEquidistant); - }).raw = d3_geo_azimuthalEquidistant; - function d3_geo_conicConformal(φ0, φ1) { - var cosφ0 = Math.cos(φ0), t = function(φ) { - return Math.tan(π / 4 + φ / 2); - }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n; - if (!n) return d3_geo_mercator; - function forward(λ, φ) { - if (F > 0) { - if (φ < -halfπ + ε) φ = -halfπ + ε; - } else { - if (φ > halfπ - ε) φ = halfπ - ε; - } - var ρ = F / Math.pow(t(φ), n); - return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y); - return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ]; - }; - return forward; - } - (d3.geo.conicConformal = function() { - return d3_geo_conic(d3_geo_conicConformal); - }).raw = d3_geo_conicConformal; - function d3_geo_conicEquidistant(φ0, φ1) { - var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0; - if (abs(n) < ε) return d3_geo_equirectangular; - function forward(λ, φ) { - var ρ = G - φ; - return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = G - y; - return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ]; - }; - return forward; - } - (d3.geo.conicEquidistant = function() { - return d3_geo_conic(d3_geo_conicEquidistant); - }).raw = d3_geo_conicEquidistant; - var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) { - return 1 / cosλcosφ; - }, Math.atan); - (d3.geo.gnomonic = function() { - return d3_geo_projection(d3_geo_gnomonic); - }).raw = d3_geo_gnomonic; - function d3_geo_mercator(λ, φ) { - return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ]; - } - d3_geo_mercator.invert = function(x, y) { - return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ]; - }; - function d3_geo_mercatorProjection(project) { - var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto; - m.scale = function() { - var v = scale.apply(m, arguments); - return v === m ? clipAuto ? m.clipExtent(null) : m : v; - }; - m.translate = function() { - var v = translate.apply(m, arguments); - return v === m ? clipAuto ? m.clipExtent(null) : m : v; - }; - m.clipExtent = function(_) { - var v = clipExtent.apply(m, arguments); - if (v === m) { - if (clipAuto = _ == null) { - var k = π * scale(), t = translate(); - clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]); - } - } else if (clipAuto) { - v = null; - } - return v; - }; - return m.clipExtent(null); - } - (d3.geo.mercator = function() { - return d3_geo_mercatorProjection(d3_geo_mercator); - }).raw = d3_geo_mercator; - var d3_geo_orthographic = d3_geo_azimuthal(function() { - return 1; - }, Math.asin); - (d3.geo.orthographic = function() { - return d3_geo_projection(d3_geo_orthographic); - }).raw = d3_geo_orthographic; - var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) { - return 1 / (1 + cosλcosφ); - }, function(ρ) { - return 2 * Math.atan(ρ); - }); - (d3.geo.stereographic = function() { - return d3_geo_projection(d3_geo_stereographic); - }).raw = d3_geo_stereographic; - function d3_geo_transverseMercator(λ, φ) { - return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ]; - } - d3_geo_transverseMercator.invert = function(x, y) { - return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ]; - }; - (d3.geo.transverseMercator = function() { - var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate; - projection.center = function(_) { - return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]); - }; - projection.rotate = function(_) { - return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), - [ _[0], _[1], _[2] - 90 ]); - }; - return rotate([ 0, 0, 90 ]); - }).raw = d3_geo_transverseMercator; - d3.geom = {}; - function d3_geom_pointX(d) { - return d[0]; - } - function d3_geom_pointY(d) { - return d[1]; - } - d3.geom.hull = function(vertices) { - var x = d3_geom_pointX, y = d3_geom_pointY; - if (arguments.length) return hull(vertices); - function hull(data) { - if (data.length < 3) return []; - var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = []; - for (i = 0; i < n; i++) { - points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]); - } - points.sort(d3_geom_hullOrder); - for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]); - var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints); - var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = []; - for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]); - for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]); - return polygon; - } - hull.x = function(_) { - return arguments.length ? (x = _, hull) : x; - }; - hull.y = function(_) { - return arguments.length ? (y = _, hull) : y; - }; - return hull; - }; - function d3_geom_hullUpper(points) { - var n = points.length, hull = [ 0, 1 ], hs = 2; - for (var i = 2; i < n; i++) { - while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs; - hull[hs++] = i; - } - return hull.slice(0, hs); - } - function d3_geom_hullOrder(a, b) { - return a[0] - b[0] || a[1] - b[1]; - } - d3.geom.polygon = function(coordinates) { - d3_subclass(coordinates, d3_geom_polygonPrototype); - return coordinates; - }; - var d3_geom_polygonPrototype = d3.geom.polygon.prototype = []; - d3_geom_polygonPrototype.area = function() { - var i = -1, n = this.length, a, b = this[n - 1], area = 0; - while (++i < n) { - a = b; - b = this[i]; - area += a[1] * b[0] - a[0] * b[1]; - } - return area * .5; - }; - d3_geom_polygonPrototype.centroid = function(k) { - var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c; - if (!arguments.length) k = -1 / (6 * this.area()); - while (++i < n) { - a = b; - b = this[i]; - c = a[0] * b[1] - b[0] * a[1]; - x += (a[0] + b[0]) * c; - y += (a[1] + b[1]) * c; - } - return [ x * k, y * k ]; - }; - d3_geom_polygonPrototype.clip = function(subject) { - var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d; - while (++i < n) { - input = subject.slice(); - subject.length = 0; - b = this[i]; - c = input[(m = input.length - closed) - 1]; - j = -1; - while (++j < m) { - d = input[j]; - if (d3_geom_polygonInside(d, a, b)) { - if (!d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - subject.push(d); - } else if (d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - c = d; - } - if (closed) subject.push(subject[0]); - a = b; - } - return subject; - }; - function d3_geom_polygonInside(p, a, b) { - return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]); - } - function d3_geom_polygonIntersect(c, d, a, b) { - var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21); - return [ x1 + ua * x21, y1 + ua * y21 ]; - } - function d3_geom_polygonClosed(coordinates) { - var a = coordinates[0], b = coordinates[coordinates.length - 1]; - return !(a[0] - b[0] || a[1] - b[1]); - } - var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = []; - function d3_geom_voronoiBeach() { - d3_geom_voronoiRedBlackNode(this); - this.edge = this.site = this.circle = null; - } - function d3_geom_voronoiCreateBeach(site) { - var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach(); - beach.site = site; - return beach; - } - function d3_geom_voronoiDetachBeach(beach) { - d3_geom_voronoiDetachCircle(beach); - d3_geom_voronoiBeaches.remove(beach); - d3_geom_voronoiBeachPool.push(beach); - d3_geom_voronoiRedBlackNode(beach); - } - function d3_geom_voronoiRemoveBeach(beach) { - var circle = beach.circle, x = circle.x, y = circle.cy, vertex = { - x: x, - y: y - }, previous = beach.P, next = beach.N, disappearing = [ beach ]; - d3_geom_voronoiDetachBeach(beach); - var lArc = previous; - while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) { - previous = lArc.P; - disappearing.unshift(lArc); - d3_geom_voronoiDetachBeach(lArc); - lArc = previous; - } - disappearing.unshift(lArc); - d3_geom_voronoiDetachCircle(lArc); - var rArc = next; - while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) { - next = rArc.N; - disappearing.push(rArc); - d3_geom_voronoiDetachBeach(rArc); - rArc = next; - } - disappearing.push(rArc); - d3_geom_voronoiDetachCircle(rArc); - var nArcs = disappearing.length, iArc; - for (iArc = 1; iArc < nArcs; ++iArc) { - rArc = disappearing[iArc]; - lArc = disappearing[iArc - 1]; - d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); - } - lArc = disappearing[0]; - rArc = disappearing[nArcs - 1]; - rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - } - function d3_geom_voronoiAddBeach(site) { - var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._; - while (node) { - dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x; - if (dxl > ε) node = node.L; else { - dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix); - if (dxr > ε) { - if (!node.R) { - lArc = node; - break; - } - node = node.R; - } else { - if (dxl > -ε) { - lArc = node.P; - rArc = node; - } else if (dxr > -ε) { - lArc = node; - rArc = node.N; - } else { - lArc = rArc = node; - } - break; - } - } - } - var newArc = d3_geom_voronoiCreateBeach(site); - d3_geom_voronoiBeaches.insert(lArc, newArc); - if (!lArc && !rArc) return; - if (lArc === rArc) { - d3_geom_voronoiDetachCircle(lArc); - rArc = d3_geom_voronoiCreateBeach(lArc.site); - d3_geom_voronoiBeaches.insert(newArc, rArc); - newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - return; - } - if (!rArc) { - newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); - return; - } - d3_geom_voronoiDetachCircle(lArc); - d3_geom_voronoiDetachCircle(rArc); - var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = { - x: (cy * hb - by * hc) / d + ax, - y: (bx * hc - cx * hb) / d + ay - }; - d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex); - newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex); - rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - } - function d3_geom_voronoiLeftBreakPoint(arc, directrix) { - var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix; - if (!pby2) return rfocx; - var lArc = arc.P; - if (!lArc) return -Infinity; - site = lArc.site; - var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix; - if (!plby2) return lfocx; - var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2; - if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; - return (rfocx + lfocx) / 2; - } - function d3_geom_voronoiRightBreakPoint(arc, directrix) { - var rArc = arc.N; - if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix); - var site = arc.site; - return site.y === directrix ? site.x : Infinity; - } - function d3_geom_voronoiCell(site) { - this.site = site; - this.edges = []; - } - d3_geom_voronoiCell.prototype.prepare = function() { - var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge; - while (iHalfEdge--) { - edge = halfEdges[iHalfEdge].edge; - if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1); - } - halfEdges.sort(d3_geom_voronoiHalfEdgeOrder); - return halfEdges.length; - }; - function d3_geom_voronoiCloseCells(extent) { - var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end; - while (iCell--) { - cell = cells[iCell]; - if (!cell || !cell.prepare()) continue; - halfEdges = cell.edges; - nHalfEdges = halfEdges.length; - iHalfEdge = 0; - while (iHalfEdge < nHalfEdges) { - end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y; - start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y; - if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) { - halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? { - x: x0, - y: abs(x2 - x0) < ε ? y2 : y1 - } : abs(y3 - y1) < ε && x1 - x3 > ε ? { - x: abs(y2 - y1) < ε ? x2 : x1, - y: y1 - } : abs(x3 - x1) < ε && y3 - y0 > ε ? { - x: x1, - y: abs(x2 - x1) < ε ? y2 : y0 - } : abs(y3 - y0) < ε && x3 - x0 > ε ? { - x: abs(y2 - y0) < ε ? x2 : x0, - y: y0 - } : null), cell.site, null)); - ++nHalfEdges; - } - } - } - } - function d3_geom_voronoiHalfEdgeOrder(a, b) { - return b.angle - a.angle; - } - function d3_geom_voronoiCircle() { - d3_geom_voronoiRedBlackNode(this); - this.x = this.y = this.arc = this.site = this.cy = null; - } - function d3_geom_voronoiAttachCircle(arc) { - var lArc = arc.P, rArc = arc.N; - if (!lArc || !rArc) return; - var lSite = lArc.site, cSite = arc.site, rSite = rArc.site; - if (lSite === rSite) return; - var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by; - var d = 2 * (ax * cy - ay * cx); - if (d >= -ε2) return; - var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by; - var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle(); - circle.arc = arc; - circle.site = cSite; - circle.x = x + bx; - circle.y = cy + Math.sqrt(x * x + y * y); - circle.cy = cy; - arc.circle = circle; - var before = null, node = d3_geom_voronoiCircles._; - while (node) { - if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) { - if (node.L) node = node.L; else { - before = node.P; - break; - } - } else { - if (node.R) node = node.R; else { - before = node; - break; - } - } - } - d3_geom_voronoiCircles.insert(before, circle); - if (!before) d3_geom_voronoiFirstCircle = circle; - } - function d3_geom_voronoiDetachCircle(arc) { - var circle = arc.circle; - if (circle) { - if (!circle.P) d3_geom_voronoiFirstCircle = circle.N; - d3_geom_voronoiCircles.remove(circle); - d3_geom_voronoiCirclePool.push(circle); - d3_geom_voronoiRedBlackNode(circle); - arc.circle = null; - } - } - function d3_geom_voronoiClipEdges(extent) { - var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e; - while (i--) { - e = edges[i]; - if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) { - e.a = e.b = null; - edges.splice(i, 1); - } - } - } - function d3_geom_voronoiConnectEdge(edge, extent) { - var vb = edge.b; - if (vb) return true; - var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb; - if (ry === ly) { - if (fx < x0 || fx >= x1) return; - if (lx > rx) { - if (!va) va = { - x: fx, - y: y0 - }; else if (va.y >= y1) return; - vb = { - x: fx, - y: y1 - }; - } else { - if (!va) va = { - x: fx, - y: y1 - }; else if (va.y < y0) return; - vb = { - x: fx, - y: y0 - }; - } - } else { - fm = (lx - rx) / (ry - ly); - fb = fy - fm * fx; - if (fm < -1 || fm > 1) { - if (lx > rx) { - if (!va) va = { - x: (y0 - fb) / fm, - y: y0 - }; else if (va.y >= y1) return; - vb = { - x: (y1 - fb) / fm, - y: y1 - }; - } else { - if (!va) va = { - x: (y1 - fb) / fm, - y: y1 - }; else if (va.y < y0) return; - vb = { - x: (y0 - fb) / fm, - y: y0 - }; - } - } else { - if (ly < ry) { - if (!va) va = { - x: x0, - y: fm * x0 + fb - }; else if (va.x >= x1) return; - vb = { - x: x1, - y: fm * x1 + fb - }; - } else { - if (!va) va = { - x: x1, - y: fm * x1 + fb - }; else if (va.x < x0) return; - vb = { - x: x0, - y: fm * x0 + fb - }; - } - } - } - edge.a = va; - edge.b = vb; - return true; - } - function d3_geom_voronoiEdge(lSite, rSite) { - this.l = lSite; - this.r = rSite; - this.a = this.b = null; - } - function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) { - var edge = new d3_geom_voronoiEdge(lSite, rSite); - d3_geom_voronoiEdges.push(edge); - if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va); - if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb); - d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite)); - d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite)); - return edge; - } - function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) { - var edge = new d3_geom_voronoiEdge(lSite, null); - edge.a = va; - edge.b = vb; - d3_geom_voronoiEdges.push(edge); - return edge; - } - function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) { - if (!edge.a && !edge.b) { - edge.a = vertex; - edge.l = lSite; - edge.r = rSite; - } else if (edge.l === rSite) { - edge.b = vertex; - } else { - edge.a = vertex; - } - } - function d3_geom_voronoiHalfEdge(edge, lSite, rSite) { - var va = edge.a, vb = edge.b; - this.edge = edge; - this.site = lSite; - this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y); - } - d3_geom_voronoiHalfEdge.prototype = { - start: function() { - return this.edge.l === this.site ? this.edge.a : this.edge.b; - }, - end: function() { - return this.edge.l === this.site ? this.edge.b : this.edge.a; - } - }; - function d3_geom_voronoiRedBlackTree() { - this._ = null; - } - function d3_geom_voronoiRedBlackNode(node) { - node.U = node.C = node.L = node.R = node.P = node.N = null; - } - d3_geom_voronoiRedBlackTree.prototype = { - insert: function(after, node) { - var parent, grandpa, uncle; - if (after) { - node.P = after; - node.N = after.N; - if (after.N) after.N.P = node; - after.N = node; - if (after.R) { - after = after.R; - while (after.L) after = after.L; - after.L = node; - } else { - after.R = node; - } - parent = after; - } else if (this._) { - after = d3_geom_voronoiRedBlackFirst(this._); - node.P = null; - node.N = after; - after.P = after.L = node; - parent = after; - } else { - node.P = node.N = null; - this._ = node; - parent = null; - } - node.L = node.R = null; - node.U = parent; - node.C = true; - after = node; - while (parent && parent.C) { - grandpa = parent.U; - if (parent === grandpa.L) { - uncle = grandpa.R; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.R) { - d3_geom_voronoiRedBlackRotateLeft(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - d3_geom_voronoiRedBlackRotateRight(this, grandpa); - } - } else { - uncle = grandpa.L; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.L) { - d3_geom_voronoiRedBlackRotateRight(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, grandpa); - } - } - parent = after.U; - } - this._.C = false; - }, - remove: function(node) { - if (node.N) node.N.P = node.P; - if (node.P) node.P.N = node.N; - node.N = node.P = null; - var parent = node.U, sibling, left = node.L, right = node.R, next, red; - if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right); - if (parent) { - if (parent.L === node) parent.L = next; else parent.R = next; - } else { - this._ = next; - } - if (left && right) { - red = next.C; - next.C = node.C; - next.L = left; - left.U = next; - if (next !== right) { - parent = next.U; - next.U = node.U; - node = next.R; - parent.L = node; - next.R = right; - right.U = next; - } else { - next.U = parent; - parent = next; - node = next.R; - } - } else { - red = node.C; - node = next; - } - if (node) node.U = parent; - if (red) return; - if (node && node.C) { - node.C = false; - return; - } - do { - if (node === this._) break; - if (node === parent.L) { - sibling = parent.R; - if (sibling.C) { - sibling.C = false; - parent.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, parent); - sibling = parent.R; - } - if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { - if (!sibling.R || !sibling.R.C) { - sibling.L.C = false; - sibling.C = true; - d3_geom_voronoiRedBlackRotateRight(this, sibling); - sibling = parent.R; - } - sibling.C = parent.C; - parent.C = sibling.R.C = false; - d3_geom_voronoiRedBlackRotateLeft(this, parent); - node = this._; - break; - } - } else { - sibling = parent.L; - if (sibling.C) { - sibling.C = false; - parent.C = true; - d3_geom_voronoiRedBlackRotateRight(this, parent); - sibling = parent.L; - } - if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { - if (!sibling.L || !sibling.L.C) { - sibling.R.C = false; - sibling.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, sibling); - sibling = parent.L; - } - sibling.C = parent.C; - parent.C = sibling.L.C = false; - d3_geom_voronoiRedBlackRotateRight(this, parent); - node = this._; - break; - } - } - sibling.C = true; - node = parent; - parent = parent.U; - } while (!node.C); - if (node) node.C = false; - } - }; - function d3_geom_voronoiRedBlackRotateLeft(tree, node) { - var p = node, q = node.R, parent = p.U; - if (parent) { - if (parent.L === p) parent.L = q; else parent.R = q; - } else { - tree._ = q; - } - q.U = parent; - p.U = q; - p.R = q.L; - if (p.R) p.R.U = p; - q.L = p; - } - function d3_geom_voronoiRedBlackRotateRight(tree, node) { - var p = node, q = node.L, parent = p.U; - if (parent) { - if (parent.L === p) parent.L = q; else parent.R = q; - } else { - tree._ = q; - } - q.U = parent; - p.U = q; - p.L = q.R; - if (p.L) p.L.U = p; - q.R = p; - } - function d3_geom_voronoiRedBlackFirst(node) { - while (node.L) node = node.L; - return node; - } - function d3_geom_voronoi(sites, bbox) { - var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle; - d3_geom_voronoiEdges = []; - d3_geom_voronoiCells = new Array(sites.length); - d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree(); - d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree(); - while (true) { - circle = d3_geom_voronoiFirstCircle; - if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) { - if (site.x !== x0 || site.y !== y0) { - d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site); - d3_geom_voronoiAddBeach(site); - x0 = site.x, y0 = site.y; - } - site = sites.pop(); - } else if (circle) { - d3_geom_voronoiRemoveBeach(circle.arc); - } else { - break; - } - } - if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox); - var diagram = { - cells: d3_geom_voronoiCells, - edges: d3_geom_voronoiEdges - }; - d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null; - return diagram; - } - function d3_geom_voronoiVertexOrder(a, b) { - return b.y - a.y || b.x - a.x; - } - d3.geom.voronoi = function(points) { - var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent; - if (points) return voronoi(points); - function voronoi(data) { - var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1]; - d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) { - var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) { - var s = e.start(); - return [ s.x, s.y ]; - }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : []; - polygon.point = data[i]; - }); - return polygons; - } - function sites(data) { - return data.map(function(d, i) { - return { - x: Math.round(fx(d, i) / ε) * ε, - y: Math.round(fy(d, i) / ε) * ε, - i: i - }; - }); - } - voronoi.links = function(data) { - return d3_geom_voronoi(sites(data)).edges.filter(function(edge) { - return edge.l && edge.r; - }).map(function(edge) { - return { - source: data[edge.l.i], - target: data[edge.r.i] - }; - }); - }; - voronoi.triangles = function(data) { - var triangles = []; - d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) { - var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l; - while (++j < m) { - e0 = e1; - s0 = s1; - e1 = edges[j].edge; - s1 = e1.l === site ? e1.r : e1.l; - if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) { - triangles.push([ data[i], data[s0.i], data[s1.i] ]); - } - } - }); - return triangles; - }; - voronoi.x = function(_) { - return arguments.length ? (fx = d3_functor(x = _), voronoi) : x; - }; - voronoi.y = function(_) { - return arguments.length ? (fy = d3_functor(y = _), voronoi) : y; - }; - voronoi.clipExtent = function(_) { - if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent; - clipExtent = _ == null ? d3_geom_voronoiClipExtent : _; - return voronoi; - }; - voronoi.size = function(_) { - if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1]; - return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]); - }; - return voronoi; - }; - var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ]; - function d3_geom_voronoiTriangleArea(a, b, c) { - return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y); - } - d3.geom.delaunay = function(vertices) { - return d3.geom.voronoi().triangles(vertices); - }; - d3.geom.quadtree = function(points, x1, y1, x2, y2) { - var x = d3_geom_pointX, y = d3_geom_pointY, compat; - if (compat = arguments.length) { - x = d3_geom_quadtreeCompatX; - y = d3_geom_quadtreeCompatY; - if (compat === 3) { - y2 = y1; - x2 = x1; - y1 = x1 = 0; - } - return quadtree(points); - } - function quadtree(data) { - var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_; - if (x1 != null) { - x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2; - } else { - x2_ = y2_ = -(x1_ = y1_ = Infinity); - xs = [], ys = []; - n = data.length; - if (compat) for (i = 0; i < n; ++i) { - d = data[i]; - if (d.x < x1_) x1_ = d.x; - if (d.y < y1_) y1_ = d.y; - if (d.x > x2_) x2_ = d.x; - if (d.y > y2_) y2_ = d.y; - xs.push(d.x); - ys.push(d.y); - } else for (i = 0; i < n; ++i) { - var x_ = +fx(d = data[i], i), y_ = +fy(d, i); - if (x_ < x1_) x1_ = x_; - if (y_ < y1_) y1_ = y_; - if (x_ > x2_) x2_ = x_; - if (y_ > y2_) y2_ = y_; - xs.push(x_); - ys.push(y_); - } - } - var dx = x2_ - x1_, dy = y2_ - y1_; - if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy; - function insert(n, d, x, y, x1, y1, x2, y2) { - if (isNaN(x) || isNaN(y)) return; - if (n.leaf) { - var nx = n.x, ny = n.y; - if (nx != null) { - if (abs(nx - x) + abs(ny - y) < .01) { - insertChild(n, d, x, y, x1, y1, x2, y2); - } else { - var nPoint = n.point; - n.x = n.y = n.point = null; - insertChild(n, nPoint, nx, ny, x1, y1, x2, y2); - insertChild(n, d, x, y, x1, y1, x2, y2); - } - } else { - n.x = x, n.y = y, n.point = d; - } - } else { - insertChild(n, d, x, y, x1, y1, x2, y2); - } - } - function insertChild(n, d, x, y, x1, y1, x2, y2) { - var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right; - n.leaf = false; - n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()); - if (right) x1 = xm; else x2 = xm; - if (below) y1 = ym; else y2 = ym; - insert(n, d, x, y, x1, y1, x2, y2); - } - var root = d3_geom_quadtreeNode(); - root.add = function(d) { - insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_); - }; - root.visit = function(f) { - d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_); - }; - root.find = function(point) { - return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_); - }; - i = -1; - if (x1 == null) { - while (++i < n) { - insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_); - } - --i; - } else data.forEach(root.add); - xs = ys = data = d = null; - return root; - } - quadtree.x = function(_) { - return arguments.length ? (x = _, quadtree) : x; - }; - quadtree.y = function(_) { - return arguments.length ? (y = _, quadtree) : y; - }; - quadtree.extent = function(_) { - if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ]; - if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], - y2 = +_[1][1]; - return quadtree; - }; - quadtree.size = function(_) { - if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ]; - if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1]; - return quadtree; - }; - return quadtree; - }; - function d3_geom_quadtreeCompatX(d) { - return d.x; - } - function d3_geom_quadtreeCompatY(d) { - return d.y; - } - function d3_geom_quadtreeNode() { - return { - leaf: true, - nodes: [], - point: null, - x: null, - y: null - }; - } - function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) { - if (!f(node, x1, y1, x2, y2)) { - var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes; - if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy); - if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy); - if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2); - if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2); - } - } - function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) { - var minDistance2 = Infinity, closestPoint; - (function find(node, x1, y1, x2, y2) { - if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return; - if (point = node.point) { - var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy; - if (distance2 < minDistance2) { - var distance = Math.sqrt(minDistance2 = distance2); - x0 = x - distance, y0 = y - distance; - x3 = x + distance, y3 = y + distance; - closestPoint = point; - } - } - var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym; - for (var i = below << 1 | right, j = i + 4; i < j; ++i) { - if (node = children[i & 3]) switch (i & 3) { - case 0: - find(node, x1, y1, xm, ym); - break; - - case 1: - find(node, xm, y1, x2, ym); - break; - - case 2: - find(node, x1, ym, xm, y2); - break; - - case 3: - find(node, xm, ym, x2, y2); - break; - } - } - })(root, x0, y0, x3, y3); - return closestPoint; - } - d3.interpolateRgb = d3_interpolateRgb; - function d3_interpolateRgb(a, b) { - a = d3.rgb(a); - b = d3.rgb(b); - var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab; - return function(t) { - return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t)); - }; - } - d3.interpolateObject = d3_interpolateObject; - function d3_interpolateObject(a, b) { - var i = {}, c = {}, k; - for (k in a) { - if (k in b) { - i[k] = d3_interpolate(a[k], b[k]); - } else { - c[k] = a[k]; - } - } - for (k in b) { - if (!(k in a)) { - c[k] = b[k]; - } - } - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; - } - d3.interpolateNumber = d3_interpolateNumber; - function d3_interpolateNumber(a, b) { - a = +a, b = +b; - return function(t) { - return a * (1 - t) + b * t; - }; - } - d3.interpolateString = d3_interpolateString; - function d3_interpolateString(a, b) { - var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = []; - a = a + "", b = b + ""; - while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) { - if ((bs = bm.index) > bi) { - bs = b.slice(bi, bs); - if (s[i]) s[i] += bs; else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { - if (s[i]) s[i] += bm; else s[++i] = bm; - } else { - s[++i] = null; - q.push({ - i: i, - x: d3_interpolateNumber(am, bm) - }); - } - bi = d3_interpolate_numberB.lastIndex; - } - if (bi < b.length) { - bs = b.slice(bi); - if (s[i]) s[i] += bs; else s[++i] = bs; - } - return s.length < 2 ? q[0] ? (b = q[0].x, function(t) { - return b(t) + ""; - }) : function() { - return b; - } : (b = q.length, function(t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }); - } - var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g"); - d3.interpolate = d3_interpolate; - function d3_interpolate(a, b) { - var i = d3.interpolators.length, f; - while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; - return f; - } - d3.interpolators = [ function(a, b) { - var t = typeof b; - return (t === "string" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\(|hsl\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b); - } ]; - d3.interpolateArray = d3_interpolateArray; - function d3_interpolateArray(a, b) { - var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i; - for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i])); - for (;i < na; ++i) c[i] = a[i]; - for (;i < nb; ++i) c[i] = b[i]; - return function(t) { - for (i = 0; i < n0; ++i) c[i] = x[i](t); - return c; - }; - } - var d3_ease_default = function() { - return d3_identity; - }; - var d3_ease = d3.map({ - linear: d3_ease_default, - poly: d3_ease_poly, - quad: function() { - return d3_ease_quad; - }, - cubic: function() { - return d3_ease_cubic; - }, - sin: function() { - return d3_ease_sin; - }, - exp: function() { - return d3_ease_exp; - }, - circle: function() { - return d3_ease_circle; - }, - elastic: d3_ease_elastic, - back: d3_ease_back, - bounce: function() { - return d3_ease_bounce; - } - }); - var d3_ease_mode = d3.map({ - "in": d3_identity, - out: d3_ease_reverse, - "in-out": d3_ease_reflect, - "out-in": function(f) { - return d3_ease_reflect(d3_ease_reverse(f)); - } - }); - d3.ease = function(name) { - var i = name.indexOf("-"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : "in"; - t = d3_ease.get(t) || d3_ease_default; - m = d3_ease_mode.get(m) || d3_identity; - return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))); - }; - function d3_ease_clamp(f) { - return function(t) { - return t <= 0 ? 0 : t >= 1 ? 1 : f(t); - }; - } - function d3_ease_reverse(f) { - return function(t) { - return 1 - f(1 - t); - }; - } - function d3_ease_reflect(f) { - return function(t) { - return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t)); - }; - } - function d3_ease_quad(t) { - return t * t; - } - function d3_ease_cubic(t) { - return t * t * t; - } - function d3_ease_cubicInOut(t) { - if (t <= 0) return 0; - if (t >= 1) return 1; - var t2 = t * t, t3 = t2 * t; - return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75); - } - function d3_ease_poly(e) { - return function(t) { - return Math.pow(t, e); - }; - } - function d3_ease_sin(t) { - return 1 - Math.cos(t * halfπ); - } - function d3_ease_exp(t) { - return Math.pow(2, 10 * (t - 1)); - } - function d3_ease_circle(t) { - return 1 - Math.sqrt(1 - t * t); - } - function d3_ease_elastic(a, p) { - var s; - if (arguments.length < 2) p = .45; - if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4; - return function(t) { - return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p); - }; - } - function d3_ease_back(s) { - if (!s) s = 1.70158; - return function(t) { - return t * t * ((s + 1) * t - s); - }; - } - function d3_ease_bounce(t) { - return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; - } - d3.interpolateHcl = d3_interpolateHcl; - function d3_interpolateHcl(a, b) { - a = d3.hcl(a); - b = d3.hcl(b); - var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al; - if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac; - if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; - return function(t) { - return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + ""; - }; - } - d3.interpolateHsl = d3_interpolateHsl; - function d3_interpolateHsl(a, b) { - a = d3.hsl(a); - b = d3.hsl(b); - var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al; - if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as; - if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; - return function(t) { - return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + ""; - }; - } - d3.interpolateLab = d3_interpolateLab; - function d3_interpolateLab(a, b) { - a = d3.lab(a); - b = d3.lab(b); - var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab; - return function(t) { - return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; - }; - } - d3.interpolateRound = d3_interpolateRound; - function d3_interpolateRound(a, b) { - b -= a; - return function(t) { - return Math.round(a + b * t); - }; - } - d3.transform = function(string) { - var g = d3_document.createElementNS(d3.ns.prefix.svg, "g"); - return (d3.transform = function(string) { - if (string != null) { - g.setAttribute("transform", string); - var t = g.transform.baseVal.consolidate(); - } - return new d3_transform(t ? t.matrix : d3_transformIdentity); - })(string); - }; - function d3_transform(m) { - var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; - if (r0[0] * r1[1] < r1[0] * r0[1]) { - r0[0] *= -1; - r0[1] *= -1; - kx *= -1; - kz *= -1; - } - this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees; - this.translate = [ m.e, m.f ]; - this.scale = [ kx, ky ]; - this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0; - } - d3_transform.prototype.toString = function() { - return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; - }; - function d3_transformDot(a, b) { - return a[0] * b[0] + a[1] * b[1]; - } - function d3_transformNormalize(a) { - var k = Math.sqrt(d3_transformDot(a, a)); - if (k) { - a[0] /= k; - a[1] /= k; - } - return k; - } - function d3_transformCombine(a, b, k) { - a[0] += k * b[0]; - a[1] += k * b[1]; - return a; - } - var d3_transformIdentity = { - a: 1, - b: 0, - c: 0, - d: 1, - e: 0, - f: 0 - }; - d3.interpolateTransform = d3_interpolateTransform; - function d3_interpolateTransform(a, b) { - var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale; - if (ta[0] != tb[0] || ta[1] != tb[1]) { - s.push("translate(", null, ",", null, ")"); - q.push({ - i: 1, - x: d3_interpolateNumber(ta[0], tb[0]) - }, { - i: 3, - x: d3_interpolateNumber(ta[1], tb[1]) - }); - } else if (tb[0] || tb[1]) { - s.push("translate(" + tb + ")"); - } else { - s.push(""); - } - if (ra != rb) { - if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; - q.push({ - i: s.push(s.pop() + "rotate(", null, ")") - 2, - x: d3_interpolateNumber(ra, rb) - }); - } else if (rb) { - s.push(s.pop() + "rotate(" + rb + ")"); - } - if (wa != wb) { - q.push({ - i: s.push(s.pop() + "skewX(", null, ")") - 2, - x: d3_interpolateNumber(wa, wb) - }); - } else if (wb) { - s.push(s.pop() + "skewX(" + wb + ")"); - } - if (ka[0] != kb[0] || ka[1] != kb[1]) { - n = s.push(s.pop() + "scale(", null, ",", null, ")"); - q.push({ - i: n - 4, - x: d3_interpolateNumber(ka[0], kb[0]) - }, { - i: n - 2, - x: d3_interpolateNumber(ka[1], kb[1]) - }); - } else if (kb[0] != 1 || kb[1] != 1) { - s.push(s.pop() + "scale(" + kb + ")"); - } - n = q.length; - return function(t) { - var i = -1, o; - while (++i < n) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; - } - function d3_uninterpolateNumber(a, b) { - b = (b -= a = +a) || 1 / b; - return function(x) { - return (x - a) / b; - }; - } - function d3_uninterpolateClamp(a, b) { - b = (b -= a = +a) || 1 / b; - return function(x) { - return Math.max(0, Math.min(1, (x - a) / b)); - }; - } - d3.layout = {}; - d3.layout.bundle = function() { - return function(links) { - var paths = [], i = -1, n = links.length; - while (++i < n) paths.push(d3_layout_bundlePath(links[i])); - return paths; - }; - }; - function d3_layout_bundlePath(link) { - var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ]; - while (start !== lca) { - start = start.parent; - points.push(start); - } - var k = points.length; - while (end !== lca) { - points.splice(k, 0, end); - end = end.parent; - } - return points; - } - function d3_layout_bundleAncestors(node) { - var ancestors = [], parent = node.parent; - while (parent != null) { - ancestors.push(node); - node = parent; - parent = parent.parent; - } - ancestors.push(node); - return ancestors; - } - function d3_layout_bundleLeastCommonAncestor(a, b) { - if (a === b) return a; - var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null; - while (aNode === bNode) { - sharedNode = aNode; - aNode = aNodes.pop(); - bNode = bNodes.pop(); - } - return sharedNode; - } - d3.layout.chord = function() { - var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords; - function relayout() { - var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j; - chords = []; - groups = []; - k = 0, i = -1; - while (++i < n) { - x = 0, j = -1; - while (++j < n) { - x += matrix[i][j]; - } - groupSums.push(x); - subgroupIndex.push(d3.range(n)); - k += x; - } - if (sortGroups) { - groupIndex.sort(function(a, b) { - return sortGroups(groupSums[a], groupSums[b]); - }); - } - if (sortSubgroups) { - subgroupIndex.forEach(function(d, i) { - d.sort(function(a, b) { - return sortSubgroups(matrix[i][a], matrix[i][b]); - }); - }); - } - k = (τ - padding * n) / k; - x = 0, i = -1; - while (++i < n) { - x0 = x, j = -1; - while (++j < n) { - var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k; - subgroups[di + "-" + dj] = { - index: di, - subindex: dj, - startAngle: a0, - endAngle: a1, - value: v - }; - } - groups[di] = { - index: di, - startAngle: x0, - endAngle: x, - value: (x - x0) / k - }; - x += padding; - } - i = -1; - while (++i < n) { - j = i - 1; - while (++j < n) { - var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i]; - if (source.value || target.value) { - chords.push(source.value < target.value ? { - source: target, - target: source - } : { - source: source, - target: target - }); - } - } - } - if (sortChords) resort(); - } - function resort() { - chords.sort(function(a, b) { - return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2); - }); - } - chord.matrix = function(x) { - if (!arguments.length) return matrix; - n = (matrix = x) && matrix.length; - chords = groups = null; - return chord; - }; - chord.padding = function(x) { - if (!arguments.length) return padding; - padding = x; - chords = groups = null; - return chord; - }; - chord.sortGroups = function(x) { - if (!arguments.length) return sortGroups; - sortGroups = x; - chords = groups = null; - return chord; - }; - chord.sortSubgroups = function(x) { - if (!arguments.length) return sortSubgroups; - sortSubgroups = x; - chords = null; - return chord; - }; - chord.sortChords = function(x) { - if (!arguments.length) return sortChords; - sortChords = x; - if (chords) resort(); - return chord; - }; - chord.chords = function() { - if (!chords) relayout(); - return chords; - }; - chord.groups = function() { - if (!groups) relayout(); - return groups; - }; - return chord; - }; - d3.layout.force = function() { - var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges; - function repulse(node) { - return function(quad, x1, _, x2) { - if (quad.point !== node) { - var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy; - if (dw * dw / theta2 < dn) { - if (dn < chargeDistance2) { - var k = quad.charge / dn; - node.px -= dx * k; - node.py -= dy * k; - } - return true; - } - if (quad.point && dn && dn < chargeDistance2) { - var k = quad.pointCharge / dn; - node.px -= dx * k; - node.py -= dy * k; - } - } - return !quad.charge; - }; - } - force.tick = function() { - if ((alpha *= .99) < .005) { - event.end({ - type: "end", - alpha: alpha = 0 - }); - return true; - } - var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y; - for (i = 0; i < m; ++i) { - o = links[i]; - s = o.source; - t = o.target; - x = t.x - s.x; - y = t.y - s.y; - if (l = x * x + y * y) { - l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l; - x *= l; - y *= l; - t.x -= x * (k = s.weight / (t.weight + s.weight)); - t.y -= y * k; - s.x += x * (k = 1 - k); - s.y += y * k; - } - } - if (k = alpha * gravity) { - x = size[0] / 2; - y = size[1] / 2; - i = -1; - if (k) while (++i < n) { - o = nodes[i]; - o.x += (x - o.x) * k; - o.y += (y - o.y) * k; - } - } - if (charge) { - d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges); - i = -1; - while (++i < n) { - if (!(o = nodes[i]).fixed) { - q.visit(repulse(o)); - } - } - } - i = -1; - while (++i < n) { - o = nodes[i]; - if (o.fixed) { - o.x = o.px; - o.y = o.py; - } else { - o.x -= (o.px - (o.px = o.x)) * friction; - o.y -= (o.py - (o.py = o.y)) * friction; - } - } - event.tick({ - type: "tick", - alpha: alpha - }); - }; - force.nodes = function(x) { - if (!arguments.length) return nodes; - nodes = x; - return force; - }; - force.links = function(x) { - if (!arguments.length) return links; - links = x; - return force; - }; - force.size = function(x) { - if (!arguments.length) return size; - size = x; - return force; - }; - force.linkDistance = function(x) { - if (!arguments.length) return linkDistance; - linkDistance = typeof x === "function" ? x : +x; - return force; - }; - force.distance = force.linkDistance; - force.linkStrength = function(x) { - if (!arguments.length) return linkStrength; - linkStrength = typeof x === "function" ? x : +x; - return force; - }; - force.friction = function(x) { - if (!arguments.length) return friction; - friction = +x; - return force; - }; - force.charge = function(x) { - if (!arguments.length) return charge; - charge = typeof x === "function" ? x : +x; - return force; - }; - force.chargeDistance = function(x) { - if (!arguments.length) return Math.sqrt(chargeDistance2); - chargeDistance2 = x * x; - return force; - }; - force.gravity = function(x) { - if (!arguments.length) return gravity; - gravity = +x; - return force; - }; - force.theta = function(x) { - if (!arguments.length) return Math.sqrt(theta2); - theta2 = x * x; - return force; - }; - force.alpha = function(x) { - if (!arguments.length) return alpha; - x = +x; - if (alpha) { - if (x > 0) alpha = x; else alpha = 0; - } else if (x > 0) { - event.start({ - type: "start", - alpha: alpha = x - }); - d3.timer(force.tick); - } - return force; - }; - force.start = function() { - var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o; - for (i = 0; i < n; ++i) { - (o = nodes[i]).index = i; - o.weight = 0; - } - for (i = 0; i < m; ++i) { - o = links[i]; - if (typeof o.source == "number") o.source = nodes[o.source]; - if (typeof o.target == "number") o.target = nodes[o.target]; - ++o.source.weight; - ++o.target.weight; - } - for (i = 0; i < n; ++i) { - o = nodes[i]; - if (isNaN(o.x)) o.x = position("x", w); - if (isNaN(o.y)) o.y = position("y", h); - if (isNaN(o.px)) o.px = o.x; - if (isNaN(o.py)) o.py = o.y; - } - distances = []; - if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance; - strengths = []; - if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength; - charges = []; - if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge; - function position(dimension, size) { - if (!neighbors) { - neighbors = new Array(n); - for (j = 0; j < n; ++j) { - neighbors[j] = []; - } - for (j = 0; j < m; ++j) { - var o = links[j]; - neighbors[o.source.index].push(o.target); - neighbors[o.target.index].push(o.source); - } - } - var candidates = neighbors[i], j = -1, l = candidates.length, x; - while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x; - return Math.random() * size; - } - return force.resume(); - }; - force.resume = function() { - return force.alpha(.1); - }; - force.stop = function() { - return force.alpha(0); - }; - force.drag = function() { - if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend); - if (!arguments.length) return drag; - this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag); - }; - function dragmove(d) { - d.px = d3.event.x, d.py = d3.event.y; - force.resume(); - } - return d3.rebind(force, event, "on"); - }; - function d3_layout_forceDragstart(d) { - d.fixed |= 2; - } - function d3_layout_forceDragend(d) { - d.fixed &= ~6; - } - function d3_layout_forceMouseover(d) { - d.fixed |= 4; - d.px = d.x, d.py = d.y; - } - function d3_layout_forceMouseout(d) { - d.fixed &= ~4; - } - function d3_layout_forceAccumulate(quad, alpha, charges) { - var cx = 0, cy = 0; - quad.charge = 0; - if (!quad.leaf) { - var nodes = quad.nodes, n = nodes.length, i = -1, c; - while (++i < n) { - c = nodes[i]; - if (c == null) continue; - d3_layout_forceAccumulate(c, alpha, charges); - quad.charge += c.charge; - cx += c.charge * c.cx; - cy += c.charge * c.cy; - } - } - if (quad.point) { - if (!quad.leaf) { - quad.point.x += Math.random() - .5; - quad.point.y += Math.random() - .5; - } - var k = alpha * charges[quad.point.index]; - quad.charge += quad.pointCharge = k; - cx += k * quad.point.x; - cy += k * quad.point.y; - } - quad.cx = cx / quad.charge; - quad.cy = cy / quad.charge; - } - var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity; - d3.layout.hierarchy = function() { - var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue; - function hierarchy(root) { - var stack = [ root ], nodes = [], node; - root.depth = 0; - while ((node = stack.pop()) != null) { - nodes.push(node); - if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) { - var n, childs, child; - while (--n >= 0) { - stack.push(child = childs[n]); - child.parent = node; - child.depth = node.depth + 1; - } - if (value) node.value = 0; - node.children = childs; - } else { - if (value) node.value = +value.call(hierarchy, node, node.depth) || 0; - delete node.children; - } - } - d3_layout_hierarchyVisitAfter(root, function(node) { - var childs, parent; - if (sort && (childs = node.children)) childs.sort(sort); - if (value && (parent = node.parent)) parent.value += node.value; - }); - return nodes; - } - hierarchy.sort = function(x) { - if (!arguments.length) return sort; - sort = x; - return hierarchy; - }; - hierarchy.children = function(x) { - if (!arguments.length) return children; - children = x; - return hierarchy; - }; - hierarchy.value = function(x) { - if (!arguments.length) return value; - value = x; - return hierarchy; - }; - hierarchy.revalue = function(root) { - if (value) { - d3_layout_hierarchyVisitBefore(root, function(node) { - if (node.children) node.value = 0; - }); - d3_layout_hierarchyVisitAfter(root, function(node) { - var parent; - if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0; - if (parent = node.parent) parent.value += node.value; - }); - } - return root; - }; - return hierarchy; - }; - function d3_layout_hierarchyRebind(object, hierarchy) { - d3.rebind(object, hierarchy, "sort", "children", "value"); - object.nodes = object; - object.links = d3_layout_hierarchyLinks; - return object; - } - function d3_layout_hierarchyVisitBefore(node, callback) { - var nodes = [ node ]; - while ((node = nodes.pop()) != null) { - callback(node); - if ((children = node.children) && (n = children.length)) { - var n, children; - while (--n >= 0) nodes.push(children[n]); - } - } - } - function d3_layout_hierarchyVisitAfter(node, callback) { - var nodes = [ node ], nodes2 = []; - while ((node = nodes.pop()) != null) { - nodes2.push(node); - if ((children = node.children) && (n = children.length)) { - var i = -1, n, children; - while (++i < n) nodes.push(children[i]); - } - } - while ((node = nodes2.pop()) != null) { - callback(node); - } - } - function d3_layout_hierarchyChildren(d) { - return d.children; - } - function d3_layout_hierarchyValue(d) { - return d.value; - } - function d3_layout_hierarchySort(a, b) { - return b.value - a.value; - } - function d3_layout_hierarchyLinks(nodes) { - return d3.merge(nodes.map(function(parent) { - return (parent.children || []).map(function(child) { - return { - source: parent, - target: child - }; - }); - })); - } - d3.layout.partition = function() { - var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ]; - function position(node, x, dx, dy) { - var children = node.children; - node.x = x; - node.y = node.depth * dy; - node.dx = dx; - node.dy = dy; - if (children && (n = children.length)) { - var i = -1, n, c, d; - dx = node.value ? dx / node.value : 0; - while (++i < n) { - position(c = children[i], x, d = c.value * dx, dy); - x += d; - } - } - } - function depth(node) { - var children = node.children, d = 0; - if (children && (n = children.length)) { - var i = -1, n; - while (++i < n) d = Math.max(d, depth(children[i])); - } - return 1 + d; - } - function partition(d, i) { - var nodes = hierarchy.call(this, d, i); - position(nodes[0], 0, size[0], size[1] / depth(nodes[0])); - return nodes; - } - partition.size = function(x) { - if (!arguments.length) return size; - size = x; - return partition; - }; - return d3_layout_hierarchyRebind(partition, hierarchy); - }; - d3.layout.pie = function() { - var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0; - function pie(data) { - var n = data.length, values = data.map(function(d, i) { - return +value.call(pie, d, i); - }), a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === "function" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), k = (da - n * pa) / d3.sum(values), index = d3.range(n), arcs = [], v; - if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) { - return values[j] - values[i]; - } : function(i, j) { - return sort(data[i], data[j]); - }); - index.forEach(function(i) { - arcs[i] = { - data: data[i], - value: v = values[i], - startAngle: a, - endAngle: a += v * k + pa, - padAngle: p - }; - }); - return arcs; - } - pie.value = function(_) { - if (!arguments.length) return value; - value = _; - return pie; - }; - pie.sort = function(_) { - if (!arguments.length) return sort; - sort = _; - return pie; - }; - pie.startAngle = function(_) { - if (!arguments.length) return startAngle; - startAngle = _; - return pie; - }; - pie.endAngle = function(_) { - if (!arguments.length) return endAngle; - endAngle = _; - return pie; - }; - pie.padAngle = function(_) { - if (!arguments.length) return padAngle; - padAngle = _; - return pie; - }; - return pie; - }; - var d3_layout_pieSortByValue = {}; - d3.layout.stack = function() { - var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY; - function stack(data, index) { - if (!(n = data.length)) return data; - var series = data.map(function(d, i) { - return values.call(stack, d, i); - }); - var points = series.map(function(d) { - return d.map(function(v, i) { - return [ x.call(stack, v, i), y.call(stack, v, i) ]; - }); - }); - var orders = order.call(stack, points, index); - series = d3.permute(series, orders); - points = d3.permute(points, orders); - var offsets = offset.call(stack, points, index); - var m = series[0].length, n, i, j, o; - for (j = 0; j < m; ++j) { - out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); - for (i = 1; i < n; ++i) { - out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); - } - } - return data; - } - stack.values = function(x) { - if (!arguments.length) return values; - values = x; - return stack; - }; - stack.order = function(x) { - if (!arguments.length) return order; - order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault; - return stack; - }; - stack.offset = function(x) { - if (!arguments.length) return offset; - offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero; - return stack; - }; - stack.x = function(z) { - if (!arguments.length) return x; - x = z; - return stack; - }; - stack.y = function(z) { - if (!arguments.length) return y; - y = z; - return stack; - }; - stack.out = function(z) { - if (!arguments.length) return out; - out = z; - return stack; - }; - return stack; - }; - function d3_layout_stackX(d) { - return d.x; - } - function d3_layout_stackY(d) { - return d.y; - } - function d3_layout_stackOut(d, y0, y) { - d.y0 = y0; - d.y = y; - } - var d3_layout_stackOrders = d3.map({ - "inside-out": function(data) { - var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) { - return max[a] - max[b]; - }), top = 0, bottom = 0, tops = [], bottoms = []; - for (i = 0; i < n; ++i) { - j = index[i]; - if (top < bottom) { - top += sums[j]; - tops.push(j); - } else { - bottom += sums[j]; - bottoms.push(j); - } - } - return bottoms.reverse().concat(tops); - }, - reverse: function(data) { - return d3.range(data.length).reverse(); - }, - "default": d3_layout_stackOrderDefault - }); - var d3_layout_stackOffsets = d3.map({ - silhouette: function(data) { - var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o > max) max = o; - sums.push(o); - } - for (j = 0; j < m; ++j) { - y0[j] = (max - sums[j]) / 2; - } - return y0; - }, - wiggle: function(data) { - var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = []; - y0[0] = o = o0 = 0; - for (j = 1; j < m; ++j) { - for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1]; - for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { - for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { - s3 += (data[k][j][1] - data[k][j - 1][1]) / dx; - } - s2 += s3 * data[i][j][1]; - } - y0[j] = o -= s1 ? s2 / s1 * dx : 0; - if (o < o0) o0 = o; - } - for (j = 0; j < m; ++j) y0[j] -= o0; - return y0; - }, - expand: function(data) { - var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k; - } - for (j = 0; j < m; ++j) y0[j] = 0; - return y0; - }, - zero: d3_layout_stackOffsetZero - }); - function d3_layout_stackOrderDefault(data) { - return d3.range(data.length); - } - function d3_layout_stackOffsetZero(data) { - var j = -1, m = data[0].length, y0 = []; - while (++j < m) y0[j] = 0; - return y0; - } - function d3_layout_stackMaxIndex(array) { - var i = 1, j = 0, v = array[0][1], k, n = array.length; - for (;i < n; ++i) { - if ((k = array[i][1]) > v) { - j = i; - v = k; - } - } - return j; - } - function d3_layout_stackReduceSum(d) { - return d.reduce(d3_layout_stackSum, 0); - } - function d3_layout_stackSum(p, d) { - return p + d[1]; - } - d3.layout.histogram = function() { - var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges; - function histogram(data, i) { - var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x; - while (++i < m) { - bin = bins[i] = []; - bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]); - bin.y = 0; - } - if (m > 0) { - i = -1; - while (++i < n) { - x = values[i]; - if (x >= range[0] && x <= range[1]) { - bin = bins[d3.bisect(thresholds, x, 1, m) - 1]; - bin.y += k; - bin.push(data[i]); - } - } - } - return bins; - } - histogram.value = function(x) { - if (!arguments.length) return valuer; - valuer = x; - return histogram; - }; - histogram.range = function(x) { - if (!arguments.length) return ranger; - ranger = d3_functor(x); - return histogram; - }; - histogram.bins = function(x) { - if (!arguments.length) return binner; - binner = typeof x === "number" ? function(range) { - return d3_layout_histogramBinFixed(range, x); - } : d3_functor(x); - return histogram; - }; - histogram.frequency = function(x) { - if (!arguments.length) return frequency; - frequency = !!x; - return histogram; - }; - return histogram; - }; - function d3_layout_histogramBinSturges(range, values) { - return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)); - } - function d3_layout_histogramBinFixed(range, n) { - var x = -1, b = +range[0], m = (range[1] - b) / n, f = []; - while (++x <= n) f[x] = m * x + b; - return f; - } - function d3_layout_histogramRange(values) { - return [ d3.min(values), d3.max(values) ]; - } - d3.layout.pack = function() { - var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius; - function pack(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === "function" ? radius : function() { - return radius; - }; - root.x = root.y = 0; - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r = +r(d.value); - }); - d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); - if (padding) { - var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2; - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r += dr; - }); - d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r -= dr; - }); - } - d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h)); - return nodes; - } - pack.size = function(_) { - if (!arguments.length) return size; - size = _; - return pack; - }; - pack.radius = function(_) { - if (!arguments.length) return radius; - radius = _ == null || typeof _ === "function" ? _ : +_; - return pack; - }; - pack.padding = function(_) { - if (!arguments.length) return padding; - padding = +_; - return pack; - }; - return d3_layout_hierarchyRebind(pack, hierarchy); - }; - function d3_layout_packSort(a, b) { - return a.value - b.value; - } - function d3_layout_packInsert(a, b) { - var c = a._pack_next; - a._pack_next = b; - b._pack_prev = a; - b._pack_next = c; - c._pack_prev = b; - } - function d3_layout_packSplice(a, b) { - a._pack_next = b; - b._pack_prev = a; - } - function d3_layout_packIntersects(a, b) { - var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r; - return .999 * dr * dr > dx * dx + dy * dy; - } - function d3_layout_packSiblings(node) { - if (!(nodes = node.children) || !(n = nodes.length)) return; - var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n; - function bound(node) { - xMin = Math.min(node.x - node.r, xMin); - xMax = Math.max(node.x + node.r, xMax); - yMin = Math.min(node.y - node.r, yMin); - yMax = Math.max(node.y + node.r, yMax); - } - nodes.forEach(d3_layout_packLink); - a = nodes[0]; - a.x = -a.r; - a.y = 0; - bound(a); - if (n > 1) { - b = nodes[1]; - b.x = b.r; - b.y = 0; - bound(b); - if (n > 2) { - c = nodes[2]; - d3_layout_packPlace(a, b, c); - bound(c); - d3_layout_packInsert(a, c); - a._pack_prev = c; - d3_layout_packInsert(c, b); - b = a._pack_next; - for (i = 3; i < n; i++) { - d3_layout_packPlace(a, b, c = nodes[i]); - var isect = 0, s1 = 1, s2 = 1; - for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { - if (d3_layout_packIntersects(j, c)) { - isect = 1; - break; - } - } - if (isect == 1) { - for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { - if (d3_layout_packIntersects(k, c)) { - break; - } - } - } - if (isect) { - if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b); - i--; - } else { - d3_layout_packInsert(a, c); - b = c; - bound(c); - } - } - } - } - var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0; - for (i = 0; i < n; i++) { - c = nodes[i]; - c.x -= cx; - c.y -= cy; - cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y)); - } - node.r = cr; - nodes.forEach(d3_layout_packUnlink); - } - function d3_layout_packLink(node) { - node._pack_next = node._pack_prev = node; - } - function d3_layout_packUnlink(node) { - delete node._pack_next; - delete node._pack_prev; - } - function d3_layout_packTransform(node, x, y, k) { - var children = node.children; - node.x = x += k * node.x; - node.y = y += k * node.y; - node.r *= k; - if (children) { - var i = -1, n = children.length; - while (++i < n) d3_layout_packTransform(children[i], x, y, k); - } - } - function d3_layout_packPlace(a, b, c) { - var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y; - if (db && (dx || dy)) { - var da = b.r + c.r, dc = dx * dx + dy * dy; - da *= da; - db *= db; - var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); - c.x = a.x + x * dx + y * dy; - c.y = a.y + x * dy - y * dx; - } else { - c.x = a.x + db; - c.y = a.y; - } - } - d3.layout.tree = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null; - function tree(d, i) { - var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0); - d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z; - d3_layout_hierarchyVisitBefore(root1, secondWalk); - if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else { - var left = root0, right = root0, bottom = root0; - d3_layout_hierarchyVisitBefore(root0, function(node) { - if (node.x < left.x) left = node; - if (node.x > right.x) right = node; - if (node.depth > bottom.depth) bottom = node; - }); - var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1); - d3_layout_hierarchyVisitBefore(root0, function(node) { - node.x = (node.x + tx) * kx; - node.y = node.depth * ky; - }); - } - return nodes; - } - function wrapTree(root0) { - var root1 = { - A: null, - children: [ root0 ] - }, queue = [ root1 ], node1; - while ((node1 = queue.pop()) != null) { - for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) { - queue.push((children[i] = child = { - _: children[i], - parent: node1, - children: (child = children[i].children) && child.slice() || [], - A: null, - a: null, - z: 0, - m: 0, - c: 0, - s: 0, - t: null, - i: i - }).a = child); - } - } - return root1.children[0]; - } - function firstWalk(v) { - var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null; - if (children.length) { - d3_layout_treeShift(v); - var midpoint = (children[0].z + children[children.length - 1].z) / 2; - if (w) { - v.z = w.z + separation(v._, w._); - v.m = v.z - midpoint; - } else { - v.z = midpoint; - } - } else if (w) { - v.z = w.z + separation(v._, w._); - } - v.parent.A = apportion(v, w, v.parent.A || siblings[0]); - } - function secondWalk(v) { - v._.x = v.z + v.parent.m; - v.m += v.parent.m; - } - function apportion(v, w, ancestor) { - if (w) { - var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift; - while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { - vom = d3_layout_treeLeft(vom); - vop = d3_layout_treeRight(vop); - vop.a = v; - shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); - if (shift > 0) { - d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift); - sip += shift; - sop += shift; - } - sim += vim.m; - sip += vip.m; - som += vom.m; - sop += vop.m; - } - if (vim && !d3_layout_treeRight(vop)) { - vop.t = vim; - vop.m += sim - sop; - } - if (vip && !d3_layout_treeLeft(vom)) { - vom.t = vip; - vom.m += sip - som; - ancestor = v; - } - } - return ancestor; - } - function sizeNode(node) { - node.x *= size[0]; - node.y = node.depth * size[1]; - } - tree.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return tree; - }; - tree.size = function(x) { - if (!arguments.length) return nodeSize ? null : size; - nodeSize = (size = x) == null ? sizeNode : null; - return tree; - }; - tree.nodeSize = function(x) { - if (!arguments.length) return nodeSize ? size : null; - nodeSize = (size = x) == null ? null : sizeNode; - return tree; - }; - return d3_layout_hierarchyRebind(tree, hierarchy); - }; - function d3_layout_treeSeparation(a, b) { - return a.parent == b.parent ? 1 : 2; - } - function d3_layout_treeLeft(v) { - var children = v.children; - return children.length ? children[0] : v.t; - } - function d3_layout_treeRight(v) { - var children = v.children, n; - return (n = children.length) ? children[n - 1] : v.t; - } - function d3_layout_treeMove(wm, wp, shift) { - var change = shift / (wp.i - wm.i); - wp.c -= change; - wp.s += shift; - wm.c += change; - wp.z += shift; - wp.m += shift; - } - function d3_layout_treeShift(v) { - var shift = 0, change = 0, children = v.children, i = children.length, w; - while (--i >= 0) { - w = children[i]; - w.z += shift; - w.m += shift; - shift += w.s + (change += w.c); - } - } - function d3_layout_treeAncestor(vim, v, ancestor) { - return vim.a.parent === v.parent ? vim.a : ancestor; - } - d3.layout.cluster = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false; - function cluster(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0; - d3_layout_hierarchyVisitAfter(root, function(node) { - var children = node.children; - if (children && children.length) { - node.x = d3_layout_clusterX(children); - node.y = d3_layout_clusterY(children); - } else { - node.x = previousNode ? x += separation(node, previousNode) : 0; - node.y = 0; - previousNode = node; - } - }); - var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2; - d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) { - node.x = (node.x - root.x) * size[0]; - node.y = (root.y - node.y) * size[1]; - } : function(node) { - node.x = (node.x - x0) / (x1 - x0) * size[0]; - node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1]; - }); - return nodes; - } - cluster.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return cluster; - }; - cluster.size = function(x) { - if (!arguments.length) return nodeSize ? null : size; - nodeSize = (size = x) == null; - return cluster; - }; - cluster.nodeSize = function(x) { - if (!arguments.length) return nodeSize ? size : null; - nodeSize = (size = x) != null; - return cluster; - }; - return d3_layout_hierarchyRebind(cluster, hierarchy); - }; - function d3_layout_clusterY(children) { - return 1 + d3.max(children, function(child) { - return child.y; - }); - } - function d3_layout_clusterX(children) { - return children.reduce(function(x, child) { - return x + child.x; - }, 0) / children.length; - } - function d3_layout_clusterLeft(node) { - var children = node.children; - return children && children.length ? d3_layout_clusterLeft(children[0]) : node; - } - function d3_layout_clusterRight(node) { - var children = node.children, n; - return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node; - } - d3.layout.treemap = function() { - var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5)); - function scale(children, k) { - var i = -1, n = children.length, child, area; - while (++i < n) { - area = (child = children[i]).value * (k < 0 ? 0 : k); - child.area = isNaN(area) || area <= 0 ? 0 : area; - } - } - function squarify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while ((n = remaining.length) > 0) { - row.push(child = remaining[n - 1]); - row.area += child.area; - if (mode !== "squarify" || (score = worst(row, u)) <= best) { - remaining.pop(); - best = score; - } else { - row.area -= row.pop().area; - position(row, u, rect, false); - u = Math.min(rect.dx, rect.dy); - row.length = row.area = 0; - best = Infinity; - } - } - if (row.length) { - position(row, u, rect, true); - row.length = row.area = 0; - } - children.forEach(squarify); - } - } - function stickify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), remaining = children.slice(), child, row = []; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while (child = remaining.pop()) { - row.push(child); - row.area += child.area; - if (child.z != null) { - position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length); - row.length = row.area = 0; - } - } - children.forEach(stickify); - } - } - function worst(row, u) { - var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length; - while (++i < n) { - if (!(r = row[i].area)) continue; - if (r < rmin) rmin = r; - if (r > rmax) rmax = r; - } - s *= s; - u *= u; - return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity; - } - function position(row, u, rect, flush) { - var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o; - if (u == rect.dx) { - if (flush || v > rect.dy) v = rect.dy; - while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dy = v; - x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0); - } - o.z = true; - o.dx += rect.x + rect.dx - x; - rect.y += v; - rect.dy -= v; - } else { - if (flush || v > rect.dx) v = rect.dx; - while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dx = v; - y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0); - } - o.z = false; - o.dy += rect.y + rect.dy - y; - rect.x += v; - rect.dx -= v; - } - } - function treemap(d) { - var nodes = stickies || hierarchy(d), root = nodes[0]; - root.x = 0; - root.y = 0; - root.dx = size[0]; - root.dy = size[1]; - if (stickies) hierarchy.revalue(root); - scale([ root ], root.dx * root.dy / root.value); - (stickies ? stickify : squarify)(root); - if (sticky) stickies = nodes; - return nodes; - } - treemap.size = function(x) { - if (!arguments.length) return size; - size = x; - return treemap; - }; - treemap.padding = function(x) { - if (!arguments.length) return padding; - function padFunction(node) { - var p = x.call(treemap, node, node.depth); - return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p); - } - function padConstant(node) { - return d3_layout_treemapPad(node, x); - } - var type; - pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], - padConstant) : padConstant; - return treemap; - }; - treemap.round = function(x) { - if (!arguments.length) return round != Number; - round = x ? Math.round : Number; - return treemap; - }; - treemap.sticky = function(x) { - if (!arguments.length) return sticky; - sticky = x; - stickies = null; - return treemap; - }; - treemap.ratio = function(x) { - if (!arguments.length) return ratio; - ratio = x; - return treemap; - }; - treemap.mode = function(x) { - if (!arguments.length) return mode; - mode = x + ""; - return treemap; - }; - return d3_layout_hierarchyRebind(treemap, hierarchy); - }; - function d3_layout_treemapPadNull(node) { - return { - x: node.x, - y: node.y, - dx: node.dx, - dy: node.dy - }; - } - function d3_layout_treemapPad(node, padding) { - var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2]; - if (dx < 0) { - x += dx / 2; - dx = 0; - } - if (dy < 0) { - y += dy / 2; - dy = 0; - } - return { - x: x, - y: y, - dx: dx, - dy: dy - }; - } - d3.random = { - normal: function(µ, σ) { - var n = arguments.length; - if (n < 2) σ = 1; - if (n < 1) µ = 0; - return function() { - var x, y, r; - do { - x = Math.random() * 2 - 1; - y = Math.random() * 2 - 1; - r = x * x + y * y; - } while (!r || r > 1); - return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r); - }; - }, - logNormal: function() { - var random = d3.random.normal.apply(d3, arguments); - return function() { - return Math.exp(random()); - }; - }, - bates: function(m) { - var random = d3.random.irwinHall(m); - return function() { - return random() / m; - }; - }, - irwinHall: function(m) { - return function() { - for (var s = 0, j = 0; j < m; j++) s += Math.random(); - return s; - }; - } - }; - d3.scale = {}; - function d3_scaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [ start, stop ] : [ stop, start ]; - } - function d3_scaleRange(scale) { - return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()); - } - function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { - var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]); - return function(x) { - return i(u(x)); - }; - } - function d3_scale_nice(domain, nice) { - var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx; - if (x1 < x0) { - dx = i0, i0 = i1, i1 = dx; - dx = x0, x0 = x1, x1 = dx; - } - domain[i0] = nice.floor(x0); - domain[i1] = nice.ceil(x1); - return domain; - } - function d3_scale_niceStep(step) { - return step ? { - floor: function(x) { - return Math.floor(x / step) * step; - }, - ceil: function(x) { - return Math.ceil(x / step) * step; - } - } : d3_scale_niceIdentity; - } - var d3_scale_niceIdentity = { - floor: d3_identity, - ceil: d3_identity - }; - function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { - var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1; - if (domain[k] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); - } - while (++j <= k) { - u.push(uninterpolate(domain[j - 1], domain[j])); - i.push(interpolate(range[j - 1], range[j])); - } - return function(x) { - var j = d3.bisect(domain, x, 1, k) - 1; - return i[j](u[j](x)); - }; - } - d3.scale.linear = function() { - return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false); - }; - function d3_scale_linear(domain, range, interpolate, clamp) { - var output, input; - function rescale() { - var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; - output = linear(domain, range, uninterpolate, interpolate); - input = linear(range, domain, uninterpolate, d3_interpolate); - return scale; - } - function scale(x) { - return output(x); - } - scale.invert = function(y) { - return input(y); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.map(Number); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.rangeRound = function(x) { - return scale.range(x).interpolate(d3_interpolateRound); - }; - scale.clamp = function(x) { - if (!arguments.length) return clamp; - clamp = x; - return rescale(); - }; - scale.interpolate = function(x) { - if (!arguments.length) return interpolate; - interpolate = x; - return rescale(); - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - scale.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - scale.nice = function(m) { - d3_scale_linearNice(domain, m); - return rescale(); - }; - scale.copy = function() { - return d3_scale_linear(domain, range, interpolate, clamp); - }; - return rescale(); - } - function d3_scale_linearRebind(scale, linear) { - return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); - } - function d3_scale_linearNice(domain, m) { - return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2])); - } - function d3_scale_linearTickRange(domain, m) { - if (m == null) m = 10; - var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step; - if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2; - extent[0] = Math.ceil(extent[0] / step) * step; - extent[1] = Math.floor(extent[1] / step) * step + step * .5; - extent[2] = step; - return extent; - } - function d3_scale_linearTicks(domain, m) { - return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); - } - function d3_scale_linearTickFormat(domain, m, format) { - var range = d3_scale_linearTickRange(domain, m); - if (format) { - var match = d3_format_re.exec(format); - match.shift(); - if (match[8] === "s") { - var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1]))); - if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2])); - match[8] = "f"; - format = d3.format(match.join("")); - return function(d) { - return format(prefix.scale(d)) + prefix.symbol; - }; - } - if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range); - format = match.join(""); - } else { - format = ",." + d3_scale_linearPrecision(range[2]) + "f"; - } - return d3.format(format); - } - var d3_scale_linearFormatSignificant = { - s: 1, - g: 1, - p: 1, - r: 1, - e: 1 - }; - function d3_scale_linearPrecision(value) { - return -Math.floor(Math.log(value) / Math.LN10 + .01); - } - function d3_scale_linearFormatPrecision(type, range) { - var p = d3_scale_linearPrecision(range[2]); - return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2; - } - d3.scale.log = function() { - return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]); - }; - function d3_scale_log(linear, base, positive, domain) { - function log(x) { - return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base); - } - function pow(x) { - return positive ? Math.pow(base, x) : -Math.pow(base, -x); - } - function scale(x) { - return linear(log(x)); - } - scale.invert = function(x) { - return pow(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - positive = x[0] >= 0; - linear.domain((domain = x.map(Number)).map(log)); - return scale; - }; - scale.base = function(_) { - if (!arguments.length) return base; - base = +_; - linear.domain(domain.map(log)); - return scale; - }; - scale.nice = function() { - var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative); - linear.domain(niced); - domain = niced.map(pow); - return scale; - }; - scale.ticks = function() { - var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base; - if (isFinite(j - i)) { - if (positive) { - for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k); - ticks.push(pow(i)); - } else { - ticks.push(pow(i)); - for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k); - } - for (i = 0; ticks[i] < u; i++) {} - for (j = ticks.length; ticks[j - 1] > v; j--) {} - ticks = ticks.slice(i, j); - } - return ticks; - }; - scale.tickFormat = function(n, format) { - if (!arguments.length) return d3_scale_logFormat; - if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format); - var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12, - Math.floor), e; - return function(d) { - return d / pow(f(log(d) + e)) <= k ? format(d) : ""; - }; - }; - scale.copy = function() { - return d3_scale_log(linear.copy(), base, positive, domain); - }; - return d3_scale_linearRebind(scale, linear); - } - var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = { - floor: function(x) { - return -Math.ceil(-x); - }, - ceil: function(x) { - return -Math.floor(-x); - } - }; - d3.scale.pow = function() { - return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]); - }; - function d3_scale_pow(linear, exponent, domain) { - var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent); - function scale(x) { - return linear(powp(x)); - } - scale.invert = function(x) { - return powb(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - linear.domain((domain = x.map(Number)).map(powp)); - return scale; - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - scale.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - scale.nice = function(m) { - return scale.domain(d3_scale_linearNice(domain, m)); - }; - scale.exponent = function(x) { - if (!arguments.length) return exponent; - powp = d3_scale_powPow(exponent = x); - powb = d3_scale_powPow(1 / exponent); - linear.domain(domain.map(powp)); - return scale; - }; - scale.copy = function() { - return d3_scale_pow(linear.copy(), exponent, domain); - }; - return d3_scale_linearRebind(scale, linear); - } - function d3_scale_powPow(e) { - return function(x) { - return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); - }; - } - d3.scale.sqrt = function() { - return d3.scale.pow().exponent(.5); - }; - d3.scale.ordinal = function() { - return d3_scale_ordinal([], { - t: "range", - a: [ [] ] - }); - }; - function d3_scale_ordinal(domain, ranger) { - var index, range, rangeBand; - function scale(x) { - return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length]; - } - function steps(start, step) { - return d3.range(domain.length).map(function(i) { - return start + step * i; - }); - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = []; - index = new d3_Map(); - var i = -1, n = x.length, xi; - while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi)); - return scale[ranger.t].apply(scale, ranger.a); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - rangeBand = 0; - ranger = { - t: "range", - a: arguments - }; - return scale; - }; - scale.rangePoints = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, - 0) : (stop - start) / (domain.length - 1 + padding); - range = steps(start + step * padding / 2, step); - rangeBand = 0; - ranger = { - t: "rangePoints", - a: arguments - }; - return scale; - }; - scale.rangeRoundPoints = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), - 0) : (stop - start) / (domain.length - 1 + padding) | 0; - range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step); - rangeBand = 0; - ranger = { - t: "rangeRoundPoints", - a: arguments - }; - return scale; - }; - scale.rangeBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding); - range = steps(start + step * outerPadding, step); - if (reverse) range.reverse(); - rangeBand = step * (1 - padding); - ranger = { - t: "rangeBands", - a: arguments - }; - return scale; - }; - scale.rangeRoundBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)); - range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step); - if (reverse) range.reverse(); - rangeBand = Math.round(step * (1 - padding)); - ranger = { - t: "rangeRoundBands", - a: arguments - }; - return scale; - }; - scale.rangeBand = function() { - return rangeBand; - }; - scale.rangeExtent = function() { - return d3_scaleExtent(ranger.a[0]); - }; - scale.copy = function() { - return d3_scale_ordinal(domain, ranger); - }; - return scale.domain(domain); - } - d3.scale.category10 = function() { - return d3.scale.ordinal().range(d3_category10); - }; - d3.scale.category20 = function() { - return d3.scale.ordinal().range(d3_category20); - }; - d3.scale.category20b = function() { - return d3.scale.ordinal().range(d3_category20b); - }; - d3.scale.category20c = function() { - return d3.scale.ordinal().range(d3_category20c); - }; - var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString); - var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString); - var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString); - var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString); - d3.scale.quantile = function() { - return d3_scale_quantile([], []); - }; - function d3_scale_quantile(domain, range) { - var thresholds; - function rescale() { - var k = 0, q = range.length; - thresholds = []; - while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); - return scale; - } - function scale(x) { - if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)]; - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.quantiles = function() { - return thresholds; - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ]; - }; - scale.copy = function() { - return d3_scale_quantile(domain, range); - }; - return rescale(); - } - d3.scale.quantize = function() { - return d3_scale_quantize(0, 1, [ 0, 1 ]); - }; - function d3_scale_quantize(x0, x1, range) { - var kx, i; - function scale(x) { - return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; - } - function rescale() { - kx = range.length / (x1 - x0); - i = range.length - 1; - return scale; - } - scale.domain = function(x) { - if (!arguments.length) return [ x0, x1 ]; - x0 = +x[0]; - x1 = +x[x.length - 1]; - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - y = y < 0 ? NaN : y / kx + x0; - return [ y, y + 1 / kx ]; - }; - scale.copy = function() { - return d3_scale_quantize(x0, x1, range); - }; - return rescale(); - } - d3.scale.threshold = function() { - return d3_scale_threshold([ .5 ], [ 0, 1 ]); - }; - function d3_scale_threshold(domain, range) { - function scale(x) { - if (x <= x) return range[d3.bisect(domain, x)]; - } - scale.domain = function(_) { - if (!arguments.length) return domain; - domain = _; - return scale; - }; - scale.range = function(_) { - if (!arguments.length) return range; - range = _; - return scale; - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - return [ domain[y - 1], domain[y] ]; - }; - scale.copy = function() { - return d3_scale_threshold(domain, range); - }; - return scale; - } - d3.scale.identity = function() { - return d3_scale_identity([ 0, 1 ]); - }; - function d3_scale_identity(domain) { - function identity(x) { - return +x; - } - identity.invert = identity; - identity.domain = identity.range = function(x) { - if (!arguments.length) return domain; - domain = x.map(identity); - return identity; - }; - identity.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - identity.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - identity.copy = function() { - return d3_scale_identity(domain); - }; - return identity; - } - d3.svg = {}; - function d3_zero() { - return 0; - } - d3.svg.arc = function() { - var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle; - function arc() { - var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1; - if (r1 < r0) rc = r1, r1 = r0, r0 = rc; - if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : "") + "Z"; - var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = []; - if (ap = (+padAngle.apply(this, arguments) || 0) / 2) { - rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments); - if (!cw) p1 *= -1; - if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap)); - if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap)); - } - if (r1) { - x0 = r1 * Math.cos(a0 + p1); - y0 = r1 * Math.sin(a0 + p1); - x1 = r1 * Math.cos(a1 - p1); - y1 = r1 * Math.sin(a1 - p1); - var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1; - if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) { - var h1 = (a0 + a1) / 2; - x0 = r1 * Math.cos(h1); - y0 = r1 * Math.sin(h1); - x1 = y1 = null; - } - } else { - x0 = y0 = 0; - } - if (r0) { - x2 = r0 * Math.cos(a1 - p0); - y2 = r0 * Math.sin(a1 - p0); - x3 = r0 * Math.cos(a0 + p0); - y3 = r0 * Math.sin(a0 + p0); - var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1; - if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) { - var h0 = (a0 + a1) / 2; - x2 = r0 * Math.cos(h0); - y2 = r0 * Math.sin(h0); - x3 = y3 = null; - } - } else { - x2 = y2 = 0; - } - if ((rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) { - cr = r0 < r1 ^ cw ? 0 : 1; - var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]); - if (x1 != null) { - var rc1 = Math.min(rc, (r1 - lc) / (kc + 1)), t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw); - if (rc === rc1) { - path.push("M", t30[0], "A", rc1, ",", rc1, " 0 0,", cr, " ", t30[1], "A", r1, ",", r1, " 0 ", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), ",", cw, " ", t12[1], "A", rc1, ",", rc1, " 0 0,", cr, " ", t12[0]); - } else { - path.push("M", t30[0], "A", rc1, ",", rc1, " 0 1,", cr, " ", t12[0]); - } - } else { - path.push("M", x0, ",", y0); - } - if (x3 != null) { - var rc0 = Math.min(rc, (r0 - lc) / (kc - 1)), t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw); - if (rc === rc0) { - path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t21[1], "A", r0, ",", r0, " 0 ", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), ",", 1 - cw, " ", t03[1], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]); - } else { - path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]); - } - } else { - path.push("L", x2, ",", y2); - } - } else { - path.push("M", x0, ",", y0); - if (x1 != null) path.push("A", r1, ",", r1, " 0 ", l1, ",", cw, " ", x1, ",", y1); - path.push("L", x2, ",", y2); - if (x3 != null) path.push("A", r0, ",", r0, " 0 ", l0, ",", 1 - cw, " ", x3, ",", y3); - } - path.push("Z"); - return path.join(""); - } - function circleSegment(r1, cw) { - return "M0," + r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + -r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + r1; - } - arc.innerRadius = function(v) { - if (!arguments.length) return innerRadius; - innerRadius = d3_functor(v); - return arc; - }; - arc.outerRadius = function(v) { - if (!arguments.length) return outerRadius; - outerRadius = d3_functor(v); - return arc; - }; - arc.cornerRadius = function(v) { - if (!arguments.length) return cornerRadius; - cornerRadius = d3_functor(v); - return arc; - }; - arc.padRadius = function(v) { - if (!arguments.length) return padRadius; - padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v); - return arc; - }; - arc.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return arc; - }; - arc.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return arc; - }; - arc.padAngle = function(v) { - if (!arguments.length) return padAngle; - padAngle = d3_functor(v); - return arc; - }; - arc.centroid = function() { - var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ; - return [ Math.cos(a) * r, Math.sin(a) * r ]; - }; - return arc; - }; - var d3_svg_arcAuto = "auto"; - function d3_svg_arcInnerRadius(d) { - return d.innerRadius; - } - function d3_svg_arcOuterRadius(d) { - return d.outerRadius; - } - function d3_svg_arcStartAngle(d) { - return d.startAngle; - } - function d3_svg_arcEndAngle(d) { - return d.endAngle; - } - function d3_svg_arcPadAngle(d) { - return d && d.padAngle; - } - function d3_svg_arcSweep(x0, y0, x1, y1) { - return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1; - } - function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) { - var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(r * r * d2 - D * D), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3; - if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; - return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ]; - } - function d3_svg_line(projection) { - var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7; - function line(data) { - var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y); - function segment() { - segments.push("M", interpolate(projection(points), tension)); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]); - } else if (points.length) { - segment(); - points = []; - } - } - if (points.length) segment(); - return segments.length ? segments.join("") : null; - } - line.x = function(_) { - if (!arguments.length) return x; - x = _; - return line; - }; - line.y = function(_) { - if (!arguments.length) return y; - y = _; - return line; - }; - line.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return line; - }; - line.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - return line; - }; - line.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return line; - }; - return line; - } - d3.svg.line = function() { - return d3_svg_line(d3_identity); - }; - var d3_svg_lineInterpolators = d3.map({ - linear: d3_svg_lineLinear, - "linear-closed": d3_svg_lineLinearClosed, - step: d3_svg_lineStep, - "step-before": d3_svg_lineStepBefore, - "step-after": d3_svg_lineStepAfter, - basis: d3_svg_lineBasis, - "basis-open": d3_svg_lineBasisOpen, - "basis-closed": d3_svg_lineBasisClosed, - bundle: d3_svg_lineBundle, - cardinal: d3_svg_lineCardinal, - "cardinal-open": d3_svg_lineCardinalOpen, - "cardinal-closed": d3_svg_lineCardinalClosed, - monotone: d3_svg_lineMonotone - }); - d3_svg_lineInterpolators.forEach(function(key, value) { - value.key = key; - value.closed = /-closed$/.test(key); - }); - function d3_svg_lineLinear(points) { - return points.join("L"); - } - function d3_svg_lineLinearClosed(points) { - return d3_svg_lineLinear(points) + "Z"; - } - function d3_svg_lineStep(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]); - if (n > 1) path.push("H", p[0]); - return path.join(""); - } - function d3_svg_lineStepBefore(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); - return path.join(""); - } - function d3_svg_lineStepAfter(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); - return path.join(""); - } - function d3_svg_lineCardinalOpen(points, tension) { - return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineCardinalClosed(points, tension) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), - points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)); - } - function d3_svg_lineCardinal(points, tension) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineHermite(points, tangents) { - if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) { - return d3_svg_lineLinear(points); - } - var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1; - if (quad) { - path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1]; - p0 = points[1]; - pi = 2; - } - if (tangents.length > 1) { - t = tangents[1]; - p = points[pi]; - pi++; - path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; - for (var i = 2; i < tangents.length; i++, pi++) { - p = points[pi]; - t = tangents[i]; - path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; - } - } - if (quad) { - var lp = points[pi]; - path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1]; - } - return path; - } - function d3_svg_lineCardinalTangents(points, tension) { - var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length; - while (++i < n) { - p0 = p1; - p1 = p2; - p2 = points[i]; - tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]); - } - return tangents; - } - function d3_svg_lineBasis(points) { - if (points.length < 3) return d3_svg_lineLinear(points); - var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0, "L", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; - points.push(points[n - 1]); - while (++i <= n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - points.pop(); - path.push("L", pi); - return path.join(""); - } - function d3_svg_lineBasisOpen(points) { - if (points.length < 4) return d3_svg_lineLinear(points); - var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ]; - while (++i < 3) { - pi = points[i]; - px.push(pi[0]); - py.push(pi[1]); - } - path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); - --i; - while (++i < n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBasisClosed(points) { - var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = []; - while (++i < 4) { - pi = points[i % n]; - px.push(pi[0]); - py.push(pi[1]); - } - path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; - --i; - while (++i < m) { - pi = points[i % n]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBundle(points, tension) { - var n = points.length - 1; - if (n) { - var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t; - while (++i <= n) { - p = points[i]; - t = i / n; - p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); - p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); - } - } - return d3_svg_lineBasis(points); - } - function d3_svg_lineDot4(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; - } - var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ]; - function d3_svg_lineBasisBezier(path, x, y) { - path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); - } - function d3_svg_lineSlope(p0, p1) { - return (p1[1] - p0[1]) / (p1[0] - p0[0]); - } - function d3_svg_lineFiniteDifferences(points) { - var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1); - while (++i < j) { - m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2; - } - m[i] = d; - return m; - } - function d3_svg_lineMonotoneTangents(points) { - var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1; - while (++i < j) { - d = d3_svg_lineSlope(points[i], points[i + 1]); - if (abs(d) < ε) { - m[i] = m[i + 1] = 0; - } else { - a = m[i] / d; - b = m[i + 1] / d; - s = a * a + b * b; - if (s > 9) { - s = d * 3 / Math.sqrt(s); - m[i] = s * a; - m[i + 1] = s * b; - } - } - } - i = -1; - while (++i <= j) { - s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i])); - tangents.push([ s || 0, m[i] * s || 0 ]); - } - return tangents; - } - function d3_svg_lineMonotone(points) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); - } - d3.svg.line.radial = function() { - var line = d3_svg_line(d3_svg_lineRadial); - line.radius = line.x, delete line.x; - line.angle = line.y, delete line.y; - return line; - }; - function d3_svg_lineRadial(points) { - var point, i = -1, n = points.length, r, a; - while (++i < n) { - point = points[i]; - r = point[0]; - a = point[1] - halfπ; - point[0] = r * Math.cos(a); - point[1] = r * Math.sin(a); - } - return points; - } - function d3_svg_area(projection) { - var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7; - function area(data) { - var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() { - return x; - } : d3_functor(x1), fy1 = y0 === y1 ? function() { - return y; - } : d3_functor(y1), x, y; - function segment() { - segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z"); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]); - points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]); - } else if (points0.length) { - segment(); - points0 = []; - points1 = []; - } - } - if (points0.length) segment(); - return segments.length ? segments.join("") : null; - } - area.x = function(_) { - if (!arguments.length) return x1; - x0 = x1 = _; - return area; - }; - area.x0 = function(_) { - if (!arguments.length) return x0; - x0 = _; - return area; - }; - area.x1 = function(_) { - if (!arguments.length) return x1; - x1 = _; - return area; - }; - area.y = function(_) { - if (!arguments.length) return y1; - y0 = y1 = _; - return area; - }; - area.y0 = function(_) { - if (!arguments.length) return y0; - y0 = _; - return area; - }; - area.y1 = function(_) { - if (!arguments.length) return y1; - y1 = _; - return area; - }; - area.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return area; - }; - area.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - interpolateReverse = interpolate.reverse || interpolate; - L = interpolate.closed ? "M" : "L"; - return area; - }; - area.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return area; - }; - return area; - } - d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; - d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; - d3.svg.area = function() { - return d3_svg_area(d3_identity); - }; - d3.svg.area.radial = function() { - var area = d3_svg_area(d3_svg_lineRadial); - area.radius = area.x, delete area.x; - area.innerRadius = area.x0, delete area.x0; - area.outerRadius = area.x1, delete area.x1; - area.angle = area.y, delete area.y; - area.startAngle = area.y0, delete area.y0; - area.endAngle = area.y1, delete area.y1; - return area; - }; - d3.svg.chord = function() { - var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; - function chord(d, i) { - var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i); - return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z"; - } - function subgroup(self, f, d, i) { - var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ; - return { - r: r, - a0: a0, - a1: a1, - p0: [ r * Math.cos(a0), r * Math.sin(a0) ], - p1: [ r * Math.cos(a1), r * Math.sin(a1) ] - }; - } - function equals(a, b) { - return a.a0 == b.a0 && a.a1 == b.a1; - } - function arc(r, p, a) { - return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p; - } - function curve(r0, p0, r1, p1) { - return "Q 0,0 " + p1; - } - chord.radius = function(v) { - if (!arguments.length) return radius; - radius = d3_functor(v); - return chord; - }; - chord.source = function(v) { - if (!arguments.length) return source; - source = d3_functor(v); - return chord; - }; - chord.target = function(v) { - if (!arguments.length) return target; - target = d3_functor(v); - return chord; - }; - chord.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return chord; - }; - chord.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return chord; - }; - return chord; - }; - function d3_svg_chordRadius(d) { - return d.radius; - } - d3.svg.diagonal = function() { - var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection; - function diagonal(d, i) { - var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, { - x: p0.x, - y: m - }, { - x: p3.x, - y: m - }, p3 ]; - p = p.map(projection); - return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; - } - diagonal.source = function(x) { - if (!arguments.length) return source; - source = d3_functor(x); - return diagonal; - }; - diagonal.target = function(x) { - if (!arguments.length) return target; - target = d3_functor(x); - return diagonal; - }; - diagonal.projection = function(x) { - if (!arguments.length) return projection; - projection = x; - return diagonal; - }; - return diagonal; - }; - function d3_svg_diagonalProjection(d) { - return [ d.x, d.y ]; - } - d3.svg.diagonal.radial = function() { - var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection; - diagonal.projection = function(x) { - return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection; - }; - return diagonal; - }; - function d3_svg_diagonalRadialProjection(projection) { - return function() { - var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ; - return [ r * Math.cos(a), r * Math.sin(a) ]; - }; - } - d3.svg.symbol = function() { - var type = d3_svg_symbolType, size = d3_svg_symbolSize; - function symbol(d, i) { - return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i)); - } - symbol.type = function(x) { - if (!arguments.length) return type; - type = d3_functor(x); - return symbol; - }; - symbol.size = function(x) { - if (!arguments.length) return size; - size = d3_functor(x); - return symbol; - }; - return symbol; - }; - function d3_svg_symbolSize() { - return 64; - } - function d3_svg_symbolType() { - return "circle"; - } - function d3_svg_symbolCircle(size) { - var r = Math.sqrt(size / π); - return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z"; - } - var d3_svg_symbols = d3.map({ - circle: d3_svg_symbolCircle, - cross: function(size) { - var r = Math.sqrt(size / 5) / 2; - return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z"; - }, - diamond: function(size) { - var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30; - return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z"; - }, - square: function(size) { - var r = Math.sqrt(size) / 2; - return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z"; - }, - "triangle-down": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z"; - }, - "triangle-up": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z"; - } - }); - d3.svg.symbolTypes = d3_svg_symbols.keys(); - var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians); - d3_selectionPrototype.transition = function(name) { - var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || { - time: Date.now(), - ease: d3_ease_cubicInOut, - delay: 0, - duration: 250 - }; - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) d3_transitionNode(node, i, ns, id, transition); - subgroup.push(node); - } - } - return d3_transition(subgroups, ns, id); - }; - d3_selectionPrototype.interrupt = function(name) { - return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name))); - }; - var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace()); - function d3_selection_interruptNS(ns) { - return function() { - var lock, active; - if ((lock = this[ns]) && (active = lock[lock.active])) { - if (--lock.count) delete lock[lock.active]; else delete this[ns]; - lock.active += .5; - active.event && active.event.interrupt.call(this, this.__data__, active.index); - } - }; - } - function d3_transition(groups, ns, id) { - d3_subclass(groups, d3_transitionPrototype); - groups.namespace = ns; - groups.id = id; - return groups; - } - var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit; - d3_transitionPrototype.call = d3_selectionPrototype.call; - d3_transitionPrototype.empty = d3_selectionPrototype.empty; - d3_transitionPrototype.node = d3_selectionPrototype.node; - d3_transitionPrototype.size = d3_selectionPrototype.size; - d3.transition = function(selection, name) { - return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection); - }; - d3.transition.prototype = d3_transitionPrototype; - d3_transitionPrototype.select = function(selector) { - var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node; - selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - d3_transitionNode(subnode, i, ns, id, node[ns][id]); - subgroup.push(subnode); - } else { - subgroup.push(null); - } - } - } - return d3_transition(subgroups, ns, id); - }; - d3_transitionPrototype.selectAll = function(selector) { - var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition; - selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - transition = node[ns][id]; - subnodes = selector.call(node, node.__data__, i, j); - subgroups.push(subgroup = []); - for (var k = -1, o = subnodes.length; ++k < o; ) { - if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition); - subgroup.push(subnode); - } - } - } - } - return d3_transition(subgroups, ns, id); - }; - d3_transitionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { - subgroup.push(node); - } - } - } - return d3_transition(subgroups, this.namespace, this.id); - }; - d3_transitionPrototype.tween = function(name, tween) { - var id = this.id, ns = this.namespace; - if (arguments.length < 2) return this.node()[ns][id].tween.get(name); - return d3_selection_each(this, tween == null ? function(node) { - node[ns][id].tween.remove(name); - } : function(node) { - node[ns][id].tween.set(name, tween); - }); - }; - function d3_transition_tween(groups, name, value, tween) { - var id = groups.id, ns = groups.namespace; - return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) { - node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j))); - } : (value = tween(value), function(node) { - node[ns][id].tween.set(name, value); - })); - } - d3_transitionPrototype.attr = function(nameNS, value) { - if (arguments.length < 2) { - for (value in nameNS) this.attr(value, nameNS[value]); - return this; - } - var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS); - function attrNull() { - this.removeAttribute(name); - } - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - function attrTween(b) { - return b == null ? attrNull : (b += "", function() { - var a = this.getAttribute(name), i; - return a !== b && (i = interpolate(a, b), function(t) { - this.setAttribute(name, i(t)); - }); - }); - } - function attrTweenNS(b) { - return b == null ? attrNullNS : (b += "", function() { - var a = this.getAttributeNS(name.space, name.local), i; - return a !== b && (i = interpolate(a, b), function(t) { - this.setAttributeNS(name.space, name.local, i(t)); - }); - }); - } - return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween); - }; - d3_transitionPrototype.attrTween = function(nameNS, tween) { - var name = d3.ns.qualify(nameNS); - function attrTween(d, i) { - var f = tween.call(this, d, i, this.getAttribute(name)); - return f && function(t) { - this.setAttribute(name, f(t)); - }; - } - function attrTweenNS(d, i) { - var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); - return f && function(t) { - this.setAttributeNS(name.space, name.local, f(t)); - }; - } - return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); - }; - d3_transitionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.style(priority, name[priority], value); - return this; - } - priority = ""; - } - function styleNull() { - this.style.removeProperty(name); - } - function styleString(b) { - return b == null ? styleNull : (b += "", function() { - var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i; - return a !== b && (i = d3_interpolate(a, b), function(t) { - this.style.setProperty(name, i(t), priority); - }); - }); - } - return d3_transition_tween(this, "style." + name, value, styleString); - }; - d3_transitionPrototype.styleTween = function(name, tween, priority) { - if (arguments.length < 3) priority = ""; - function styleTween(d, i) { - var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name)); - return f && function(t) { - this.style.setProperty(name, f(t), priority); - }; - } - return this.tween("style." + name, styleTween); - }; - d3_transitionPrototype.text = function(value) { - return d3_transition_tween(this, "text", value, d3_transition_text); - }; - function d3_transition_text(b) { - if (b == null) b = ""; - return function() { - this.textContent = b; - }; - } - d3_transitionPrototype.remove = function() { - var ns = this.namespace; - return this.each("end.transition", function() { - var p; - if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this); - }); - }; - d3_transitionPrototype.ease = function(value) { - var id = this.id, ns = this.namespace; - if (arguments.length < 1) return this.node()[ns][id].ease; - if (typeof value !== "function") value = d3.ease.apply(d3, arguments); - return d3_selection_each(this, function(node) { - node[ns][id].ease = value; - }); - }; - d3_transitionPrototype.delay = function(value) { - var id = this.id, ns = this.namespace; - if (arguments.length < 1) return this.node()[ns][id].delay; - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node[ns][id].delay = +value.call(node, node.__data__, i, j); - } : (value = +value, function(node) { - node[ns][id].delay = value; - })); - }; - d3_transitionPrototype.duration = function(value) { - var id = this.id, ns = this.namespace; - if (arguments.length < 1) return this.node()[ns][id].duration; - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j)); - } : (value = Math.max(1, value), function(node) { - node[ns][id].duration = value; - })); - }; - d3_transitionPrototype.each = function(type, listener) { - var id = this.id, ns = this.namespace; - if (arguments.length < 2) { - var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId; - try { - d3_transitionInheritId = id; - d3_selection_each(this, function(node, i, j) { - d3_transitionInherit = node[ns][id]; - type.call(node, node.__data__, i, j); - }); - } finally { - d3_transitionInherit = inherit; - d3_transitionInheritId = inheritId; - } - } else { - d3_selection_each(this, function(node) { - var transition = node[ns][id]; - (transition.event || (transition.event = d3.dispatch("start", "end", "interrupt"))).on(type, listener); - }); - } - return this; - }; - d3_transitionPrototype.transition = function() { - var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition; - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - if (node = group[i]) { - transition = node[ns][id0]; - d3_transitionNode(node, i, ns, id1, { - time: transition.time, - ease: transition.ease, - delay: transition.delay + transition.duration, - duration: transition.duration - }); - } - subgroup.push(node); - } - } - return d3_transition(subgroups, ns, id1); - }; - function d3_transitionNamespace(name) { - return name == null ? "__transition__" : "__transition_" + name + "__"; - } - function d3_transitionNode(node, i, ns, id, inherit) { - var lock = node[ns] || (node[ns] = { - active: 0, - count: 0 - }), transition = lock[id]; - if (!transition) { - var time = inherit.time; - transition = lock[id] = { - tween: new d3_Map(), - time: time, - delay: inherit.delay, - duration: inherit.duration, - ease: inherit.ease, - index: i - }; - inherit = null; - ++lock.count; - d3.timer(function(elapsed) { - var delay = transition.delay, duration, ease, timer = d3_timer_active, tweened = []; - timer.t = delay + time; - if (delay <= elapsed) return start(elapsed - delay); - timer.c = start; - function start(elapsed) { - if (lock.active > id) return stop(); - var active = lock[lock.active]; - if (active) { - --lock.count; - delete lock[lock.active]; - active.event && active.event.interrupt.call(node, node.__data__, active.index); - } - lock.active = id; - transition.event && transition.event.start.call(node, node.__data__, i); - transition.tween.forEach(function(key, value) { - if (value = value.call(node, node.__data__, i)) { - tweened.push(value); - } - }); - ease = transition.ease; - duration = transition.duration; - d3.timer(function() { - timer.c = tick(elapsed || 1) ? d3_true : tick; - return 1; - }, 0, time); - } - function tick(elapsed) { - if (lock.active !== id) return 1; - var t = elapsed / duration, e = ease(t), n = tweened.length; - while (n > 0) { - tweened[--n].call(node, e); - } - if (t >= 1) { - transition.event && transition.event.end.call(node, node.__data__, i); - return stop(); - } - } - function stop() { - if (--lock.count) delete lock[id]; else delete node[ns]; - return 1; - } - }, 0, time); - } - } - d3.svg.axis = function() { - var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_; - function axis(g) { - g.each(function() { - var g = d3.select(this); - var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy(); - var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform; - var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"), - d3.transition(path)); - tickEnter.append("line"); - tickEnter.append("text"); - var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"), sign = orient === "top" || orient === "left" ? -1 : 1, x1, x2, y1, y2; - if (orient === "bottom" || orient === "top") { - tickTransform = d3_svg_axisX, x1 = "x", y1 = "y", x2 = "x2", y2 = "y2"; - text.attr("dy", sign < 0 ? "0em" : ".71em").style("text-anchor", "middle"); - pathUpdate.attr("d", "M" + range[0] + "," + sign * outerTickSize + "V0H" + range[1] + "V" + sign * outerTickSize); - } else { - tickTransform = d3_svg_axisY, x1 = "y", y1 = "x", x2 = "y2", y2 = "x2"; - text.attr("dy", ".32em").style("text-anchor", sign < 0 ? "end" : "start"); - pathUpdate.attr("d", "M" + sign * outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + sign * outerTickSize); - } - lineEnter.attr(y2, sign * innerTickSize); - textEnter.attr(y1, sign * tickSpacing); - lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize); - textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing); - if (scale1.rangeBand) { - var x = scale1, dx = x.rangeBand() / 2; - scale0 = scale1 = function(d) { - return x(d) + dx; - }; - } else if (scale0.rangeBand) { - scale0 = scale1; - } else { - tickExit.call(tickTransform, scale1, scale0); - } - tickEnter.call(tickTransform, scale0, scale1); - tickUpdate.call(tickTransform, scale1, scale1); - }); - } - axis.scale = function(x) { - if (!arguments.length) return scale; - scale = x; - return axis; - }; - axis.orient = function(x) { - if (!arguments.length) return orient; - orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient; - return axis; - }; - axis.ticks = function() { - if (!arguments.length) return tickArguments_; - tickArguments_ = arguments; - return axis; - }; - axis.tickValues = function(x) { - if (!arguments.length) return tickValues; - tickValues = x; - return axis; - }; - axis.tickFormat = function(x) { - if (!arguments.length) return tickFormat_; - tickFormat_ = x; - return axis; - }; - axis.tickSize = function(x) { - var n = arguments.length; - if (!n) return innerTickSize; - innerTickSize = +x; - outerTickSize = +arguments[n - 1]; - return axis; - }; - axis.innerTickSize = function(x) { - if (!arguments.length) return innerTickSize; - innerTickSize = +x; - return axis; - }; - axis.outerTickSize = function(x) { - if (!arguments.length) return outerTickSize; - outerTickSize = +x; - return axis; - }; - axis.tickPadding = function(x) { - if (!arguments.length) return tickPadding; - tickPadding = +x; - return axis; - }; - axis.tickSubdivide = function() { - return arguments.length && axis; - }; - return axis; - }; - var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = { - top: 1, - right: 1, - bottom: 1, - left: 1 - }; - function d3_svg_axisX(selection, x0, x1) { - selection.attr("transform", function(d) { - var v0 = x0(d); - return "translate(" + (isFinite(v0) ? v0 : x1(d)) + ",0)"; - }); - } - function d3_svg_axisY(selection, y0, y1) { - selection.attr("transform", function(d) { - var v0 = y0(d); - return "translate(0," + (isFinite(v0) ? v0 : y1(d)) + ")"; - }); - } - d3.svg.brush = function() { - var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0]; - function brush(g) { - g.each(function() { - var g = d3.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart); - var background = g.selectAll(".background").data([ 0 ]); - background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"); - g.selectAll(".extent").data([ 0 ]).enter().append("rect").attr("class", "extent").style("cursor", "move"); - var resize = g.selectAll(".resize").data(resizes, d3_identity); - resize.exit().remove(); - resize.enter().append("g").attr("class", function(d) { - return "resize " + d; - }).style("cursor", function(d) { - return d3_svg_brushCursor[d]; - }).append("rect").attr("x", function(d) { - return /[ew]$/.test(d) ? -3 : null; - }).attr("y", function(d) { - return /^[ns]/.test(d) ? -3 : null; - }).attr("width", 6).attr("height", 6).style("visibility", "hidden"); - resize.style("display", brush.empty() ? "none" : null); - var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range; - if (x) { - range = d3_scaleRange(x); - backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]); - redrawX(gUpdate); - } - if (y) { - range = d3_scaleRange(y); - backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]); - redrawY(gUpdate); - } - redraw(gUpdate); - }); - } - brush.event = function(g) { - g.each(function() { - var event_ = event.of(this, arguments), extent1 = { - x: xExtent, - y: yExtent, - i: xExtentDomain, - j: yExtentDomain - }, extent0 = this.__chart__ || extent1; - this.__chart__ = extent1; - if (d3_transitionInheritId) { - d3.select(this).transition().each("start.brush", function() { - xExtentDomain = extent0.i; - yExtentDomain = extent0.j; - xExtent = extent0.x; - yExtent = extent0.y; - event_({ - type: "brushstart" - }); - }).tween("brush:brush", function() { - var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y); - xExtentDomain = yExtentDomain = null; - return function(t) { - xExtent = extent1.x = xi(t); - yExtent = extent1.y = yi(t); - event_({ - type: "brush", - mode: "resize" - }); - }; - }).each("end.brush", function() { - xExtentDomain = extent1.i; - yExtentDomain = extent1.j; - event_({ - type: "brush", - mode: "resize" - }); - event_({ - type: "brushend" - }); - }); - } else { - event_({ - type: "brushstart" - }); - event_({ - type: "brush", - mode: "resize" - }); - event_({ - type: "brushend" - }); - } - }); - }; - function redraw(g) { - g.selectAll(".resize").attr("transform", function(d) { - return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")"; - }); - } - function redrawX(g) { - g.select(".extent").attr("x", xExtent[0]); - g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]); - } - function redrawY(g) { - g.select(".extent").attr("y", yExtent[0]); - g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]); - } - function brushstart() { - var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset; - var w = d3.select(d3_window(target)).on("keydown.brush", keydown).on("keyup.brush", keyup); - if (d3.event.changedTouches) { - w.on("touchmove.brush", brushmove).on("touchend.brush", brushend); - } else { - w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend); - } - g.interrupt().selectAll("*").interrupt(); - if (dragging) { - origin[0] = xExtent[0] - origin[0]; - origin[1] = yExtent[0] - origin[1]; - } else if (resizing) { - var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing); - offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ]; - origin[0] = xExtent[ex]; - origin[1] = yExtent[ey]; - } else if (d3.event.altKey) center = origin.slice(); - g.style("pointer-events", "none").selectAll(".resize").style("display", null); - d3.select("body").style("cursor", eventTarget.style("cursor")); - event_({ - type: "brushstart" - }); - brushmove(); - function keydown() { - if (d3.event.keyCode == 32) { - if (!dragging) { - center = null; - origin[0] -= xExtent[1]; - origin[1] -= yExtent[1]; - dragging = 2; - } - d3_eventPreventDefault(); - } - } - function keyup() { - if (d3.event.keyCode == 32 && dragging == 2) { - origin[0] += xExtent[1]; - origin[1] += yExtent[1]; - dragging = 0; - d3_eventPreventDefault(); - } - } - function brushmove() { - var point = d3.mouse(target), moved = false; - if (offset) { - point[0] += offset[0]; - point[1] += offset[1]; - } - if (!dragging) { - if (d3.event.altKey) { - if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ]; - origin[0] = xExtent[+(point[0] < center[0])]; - origin[1] = yExtent[+(point[1] < center[1])]; - } else center = null; - } - if (resizingX && move1(point, x, 0)) { - redrawX(g); - moved = true; - } - if (resizingY && move1(point, y, 1)) { - redrawY(g); - moved = true; - } - if (moved) { - redraw(g); - event_({ - type: "brush", - mode: dragging ? "move" : "resize" - }); - } - } - function move1(point, scale, i) { - var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max; - if (dragging) { - r0 -= position; - r1 -= size + position; - } - min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i]; - if (dragging) { - max = (min += position) + size; - } else { - if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)); - if (position < min) { - max = min; - min = position; - } else { - max = position; - } - } - if (extent[0] != min || extent[1] != max) { - if (i) yExtentDomain = null; else xExtentDomain = null; - extent[0] = min; - extent[1] = max; - return true; - } - } - function brushend() { - brushmove(); - g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null); - d3.select("body").style("cursor", null); - w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null); - dragRestore(); - event_({ - type: "brushend" - }); - } - } - brush.x = function(z) { - if (!arguments.length) return x; - x = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.y = function(z) { - if (!arguments.length) return y; - y = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.clamp = function(z) { - if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null; - if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z; - return brush; - }; - brush.extent = function(z) { - var x0, x1, y0, y1, t; - if (!arguments.length) { - if (x) { - if (xExtentDomain) { - x0 = xExtentDomain[0], x1 = xExtentDomain[1]; - } else { - x0 = xExtent[0], x1 = xExtent[1]; - if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; - } - } - if (y) { - if (yExtentDomain) { - y0 = yExtentDomain[0], y1 = yExtentDomain[1]; - } else { - y0 = yExtent[0], y1 = yExtent[1]; - if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - } - } - return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ]; - } - if (x) { - x0 = z[0], x1 = z[1]; - if (y) x0 = x0[0], x1 = x1[0]; - xExtentDomain = [ x0, x1 ]; - if (x.invert) x0 = x(x0), x1 = x(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; - if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ]; - } - if (y) { - y0 = z[0], y1 = z[1]; - if (x) y0 = y0[1], y1 = y1[1]; - yExtentDomain = [ y0, y1 ]; - if (y.invert) y0 = y(y0), y1 = y(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ]; - } - return brush; - }; - brush.clear = function() { - if (!brush.empty()) { - xExtent = [ 0, 0 ], yExtent = [ 0, 0 ]; - xExtentDomain = yExtentDomain = null; - } - return brush; - }; - brush.empty = function() { - return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1]; - }; - return d3.rebind(brush, event, "on"); - }; - var d3_svg_brushCursor = { - n: "ns-resize", - e: "ew-resize", - s: "ns-resize", - w: "ew-resize", - nw: "nwse-resize", - ne: "nesw-resize", - se: "nwse-resize", - sw: "nesw-resize" - }; - var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ]; - var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat; - var d3_time_formatUtc = d3_time_format.utc; - var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ"); - d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso; - function d3_time_formatIsoNative(date) { - return date.toISOString(); - } - d3_time_formatIsoNative.parse = function(string) { - var date = new Date(string); - return isNaN(date) ? null : date; - }; - d3_time_formatIsoNative.toString = d3_time_formatIso.toString; - d3_time.second = d3_time_interval(function(date) { - return new d3_date(Math.floor(date / 1e3) * 1e3); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 1e3); - }, function(date) { - return date.getSeconds(); - }); - d3_time.seconds = d3_time.second.range; - d3_time.seconds.utc = d3_time.second.utc.range; - d3_time.minute = d3_time_interval(function(date) { - return new d3_date(Math.floor(date / 6e4) * 6e4); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 6e4); - }, function(date) { - return date.getMinutes(); - }); - d3_time.minutes = d3_time.minute.range; - d3_time.minutes.utc = d3_time.minute.utc.range; - d3_time.hour = d3_time_interval(function(date) { - var timezone = date.getTimezoneOffset() / 60; - return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 36e5); - }, function(date) { - return date.getHours(); - }); - d3_time.hours = d3_time.hour.range; - d3_time.hours.utc = d3_time.hour.utc.range; - d3_time.month = d3_time_interval(function(date) { - date = d3_time.day(date); - date.setDate(1); - return date; - }, function(date, offset) { - date.setMonth(date.getMonth() + offset); - }, function(date) { - return date.getMonth(); - }); - d3_time.months = d3_time.month.range; - d3_time.months.utc = d3_time.month.utc.range; - function d3_time_scale(linear, methods, format) { - function scale(x) { - return linear(x); - } - scale.invert = function(x) { - return d3_time_scaleDate(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return linear.domain().map(d3_time_scaleDate); - linear.domain(x); - return scale; - }; - function tickMethod(extent, count) { - var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target); - return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) { - return d / 31536e6; - }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i]; - } - scale.nice = function(interval, skip) { - var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval); - if (method) interval = method[0], skip = method[1]; - function skipped(date) { - return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length; - } - return scale.domain(d3_scale_nice(domain, skip > 1 ? { - floor: function(date) { - while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1); - return date; - }, - ceil: function(date) { - while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1); - return date; - } - } : interval)); - }; - scale.ticks = function(interval, skip) { - var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ { - range: interval - }, skip ]; - if (method) interval = method[0], skip = method[1]; - return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip); - }; - scale.tickFormat = function() { - return format; - }; - scale.copy = function() { - return d3_time_scale(linear.copy(), methods, format); - }; - return d3_scale_linearRebind(scale, linear); - } - function d3_time_scaleDate(t) { - return new Date(t); - } - var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ]; - var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ]; - var d3_time_scaleLocalFormat = d3_time_format.multi([ [ ".%L", function(d) { - return d.getMilliseconds(); - } ], [ ":%S", function(d) { - return d.getSeconds(); - } ], [ "%I:%M", function(d) { - return d.getMinutes(); - } ], [ "%I %p", function(d) { - return d.getHours(); - } ], [ "%a %d", function(d) { - return d.getDay() && d.getDate() != 1; - } ], [ "%b %d", function(d) { - return d.getDate() != 1; - } ], [ "%B", function(d) { - return d.getMonth(); - } ], [ "%Y", d3_true ] ]); - var d3_time_scaleMilliseconds = { - range: function(start, stop, step) { - return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate); - }, - floor: d3_identity, - ceil: d3_identity - }; - d3_time_scaleLocalMethods.year = d3_time.year; - d3_time.scale = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat); - }; - var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) { - return [ m[0].utc, m[1] ]; - }); - var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ ".%L", function(d) { - return d.getUTCMilliseconds(); - } ], [ ":%S", function(d) { - return d.getUTCSeconds(); - } ], [ "%I:%M", function(d) { - return d.getUTCMinutes(); - } ], [ "%I %p", function(d) { - return d.getUTCHours(); - } ], [ "%a %d", function(d) { - return d.getUTCDay() && d.getUTCDate() != 1; - } ], [ "%b %d", function(d) { - return d.getUTCDate() != 1; - } ], [ "%B", function(d) { - return d.getUTCMonth(); - } ], [ "%Y", d3_true ] ]); - d3_time_scaleUtcMethods.year = d3_time.year.utc; - d3_time.scale.utc = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat); - }; - d3.text = d3_xhrType(function(request) { - return request.responseText; - }); - d3.json = function(url, callback) { - return d3_xhr(url, "application/json", d3_json, callback); - }; - function d3_json(request) { - return JSON.parse(request.responseText); - } - d3.html = function(url, callback) { - return d3_xhr(url, "text/html", d3_html, callback); - }; - function d3_html(request) { - var range = d3_document.createRange(); - range.selectNode(d3_document.body); - return range.createContextualFragment(request.responseText); - } - d3.xml = d3_xhrType(function(request) { - return request.responseXML; - }); - if (typeof define === "function" && define.amd) define(d3); else if (typeof module === "object" && module.exports) module.exports = d3; - this.d3 = d3; -}(); -},{}],3:[function(require,module,exports){ -/** - * @license - * Copyright (c) 2012-2013 Chris Pettitt - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -module.exports = { - graphlib: require("./lib/graphlib"), - dagre: require("./lib/dagre"), - intersect: require("./lib/intersect"), - render: require("./lib/render"), - util: require("./lib/util"), - version: require("./lib/version") -}; - -},{"./lib/dagre":10,"./lib/graphlib":11,"./lib/intersect":12,"./lib/render":27,"./lib/util":29,"./lib/version":30}],4:[function(require,module,exports){ -var util = require("./util"); - -module.exports = { - "default": normal, - "normal": normal, - "vee": vee, - "undirected": undirected -}; - -function normal(parent, id, edge, type) { - var marker = parent.append("marker") - .attr("id", id) - .attr("viewBox", "0 0 10 10") - .attr("refX", 9) - .attr("refY", 5) - .attr("markerUnits", "strokeWidth") - .attr("markerWidth", 8) - .attr("markerHeight", 6) - .attr("orient", "auto"); - - var path = marker.append("path") - .attr("d", "M 0 0 L 10 5 L 0 10 z") - .style("stroke-width", 1) - .style("stroke-dasharray", "1,0"); - util.applyStyle(path, edge[type + "Style"]); -} - -function vee(parent, id, edge, type) { - var marker = parent.append("marker") - .attr("id", id) - .attr("viewBox", "0 0 10 10") - .attr("refX", 9) - .attr("refY", 5) - .attr("markerUnits", "strokeWidth") - .attr("markerWidth", 8) - .attr("markerHeight", 6) - .attr("orient", "auto"); - - var path = marker.append("path") - .attr("d", "M 0 0 L 10 5 L 0 10 L 4 5 z") - .style("stroke-width", 1) - .style("stroke-dasharray", "1,0"); - util.applyStyle(path, edge[type + "Style"]); -} - -function undirected(parent, id, edge, type) { - var marker = parent.append("marker") - .attr("id", id) - .attr("viewBox", "0 0 10 10") - .attr("refX", 9) - .attr("refY", 5) - .attr("markerUnits", "strokeWidth") - .attr("markerWidth", 8) - .attr("markerHeight", 6) - .attr("orient", "auto"); - - var path = marker.append("path") - .attr("d", "M 0 5 L 10 5") - .style("stroke-width", 1) - .style("stroke-dasharray", "1,0"); - util.applyStyle(path, edge[type + "Style"]); -} - -},{"./util":29}],5:[function(require,module,exports){ -var util = require("./util"), - addLabel = require("./label/add-label"); - -module.exports = createClusters; - -function createClusters(selection, g) { - var clusters = g.nodes().filter(function(v) { return util.isSubgraph(g, v); }), - svgClusters = selection.selectAll("g.cluster") - .data(clusters, function(v) { return v; }); - - svgClusters.selectAll("*").remove(); - svgClusters.enter() - .append("g") - .attr("class", "cluster") - .attr("id",function(v){ - var node = g.node(v); - return node.id; - }) - .style("opacity", 0); - - util.applyTransition(svgClusters, g) - .style("opacity", 1); - - svgClusters.each(function(v) { - var node = g.node(v), - thisGroup = d3.select(this); - d3.select(this).append("rect"); - var labelGroup = thisGroup.append("g").attr("class", "label"); - addLabel(labelGroup, node, node.clusterLabelPos); - }); - - svgClusters.selectAll("rect").each(function(c) { - var node = g.node(c); - var domCluster = d3.select(this); - util.applyStyle(domCluster, node.style); - }); - - util.applyTransition(svgClusters.exit(), g) - .style("opacity", 0) - .remove(); - - return svgClusters; -} - -},{"./label/add-label":20,"./util":29}],6:[function(require,module,exports){ -"use strict"; - -var _ = require("./lodash"), - addLabel = require("./label/add-label"), - util = require("./util"), - d3 = require("./d3"); - -module.exports = createEdgeLabels; - -function createEdgeLabels(selection, g) { - var svgEdgeLabels = selection.selectAll("g.edgeLabel") - .data(g.edges(), function(e) { return util.edgeToId(e); }) - .classed("update", true); - - svgEdgeLabels.selectAll("*").remove(); - svgEdgeLabels.enter() - .append("g") - .classed("edgeLabel", true) - .style("opacity", 0); - svgEdgeLabels.each(function(e) { - var edge = g.edge(e), - label = addLabel(d3.select(this), g.edge(e), 0, 0).classed("label", true), - bbox = label.node().getBBox(); - - if (edge.labelId) { label.attr("id", edge.labelId); } - if (!_.has(edge, "width")) { edge.width = bbox.width; } - if (!_.has(edge, "height")) { edge.height = bbox.height; } - }); - - util.applyTransition(svgEdgeLabels.exit(), g) - .style("opacity", 0) - .remove(); - - return svgEdgeLabels; -} - -},{"./d3":9,"./label/add-label":20,"./lodash":23,"./util":29}],7:[function(require,module,exports){ -"use strict"; - -var _ = require("./lodash"), - intersectNode = require("./intersect/intersect-node"), - util = require("./util"), - d3 = require("./d3"); - -module.exports = createEdgePaths; - -function createEdgePaths(selection, g, arrows) { - var svgPaths = selection.selectAll("g.edgePath") - .data(g.edges(), function(e) { return util.edgeToId(e); }) - .classed("update", true); - - enter(svgPaths, g); - exit(svgPaths, g); - - util.applyTransition(svgPaths, g) - .style("opacity", 1); - - // Save DOM element in the path group, and set ID and class - svgPaths.each(function(e) { - var domEdge = d3.select(this); - var edge = g.edge(e); - edge.elem = this; - - if (edge.id) { - domEdge.attr("id", edge.id); - } - - util.applyClass(domEdge, edge["class"], - (domEdge.classed("update") ? "update " : "") + "edgePath"); - }); - - svgPaths.selectAll("path.path") - .each(function(e) { - var edge = g.edge(e); - edge.arrowheadId = _.uniqueId("arrowhead"); - - var domEdge = d3.select(this) - .attr("marker-end", function() { - return "url(#" + edge.arrowheadId + ")"; - }) - .style("fill", "none"); - - util.applyTransition(domEdge, g) - .attr("d", function(e) { return calcPoints(g, e); }); - - util.applyStyle(domEdge, edge.style); - }); - - svgPaths.selectAll("defs *").remove(); - svgPaths.selectAll("defs") - .each(function(e) { - var edge = g.edge(e), - arrowhead = arrows[edge.arrowhead]; - arrowhead(d3.select(this), edge.arrowheadId, edge, "arrowhead"); - }); - - return svgPaths; -} - -function calcPoints(g, e) { - var edge = g.edge(e), - tail = g.node(e.v), - head = g.node(e.w), - points = edge.points.slice(1, edge.points.length - 1); - points.unshift(intersectNode(tail, points[0])); - points.push(intersectNode(head, points[points.length - 1])); - - return createLine(edge, points); -} - -function createLine(edge, points) { - var line = d3.svg.line() - .x(function(d) { return d.x; }) - .y(function(d) { return d.y; }); - - if (_.has(edge, "lineInterpolate")) { - line.interpolate(edge.lineInterpolate); - } - - if (_.has(edge, "lineTension")) { - line.tension(Number(edge.lineTension)); - } - - return line(points); -} - -function getCoords(elem) { - var bbox = elem.getBBox(), - matrix = elem.getTransformToElement(elem.ownerSVGElement) - .translate(bbox.width / 2, bbox.height / 2); - return { x: matrix.e, y: matrix.f }; -} - -function enter(svgPaths, g) { - var svgPathsEnter = svgPaths.enter() - .append("g") - .attr("class", "edgePath") - .style("opacity", 0); - svgPathsEnter.append("path") - .attr("class", "path") - .attr("d", function(e) { - var edge = g.edge(e), - sourceElem = g.node(e.v).elem, - points = _.range(edge.points.length).map(function() { return getCoords(sourceElem); }); - return createLine(edge, points); - }); - svgPathsEnter.append("defs"); -} - -function exit(svgPaths, g) { - var svgPathExit = svgPaths.exit(); - util.applyTransition(svgPathExit, g) - .style("opacity", 0) - .remove(); - - util.applyTransition(svgPathExit.select("path.path"), g) - .attr("d", function(e) { - var source = g.node(e.v); - - if (source) { - var points = _.range(this.pathSegList.length).map(function() { return source; }); - return createLine({}, points); - } else { - return d3.select(this).attr("d"); - } - }); -} - -},{"./d3":9,"./intersect/intersect-node":16,"./lodash":23,"./util":29}],8:[function(require,module,exports){ -"use strict"; - -var _ = require("./lodash"), - addLabel = require("./label/add-label"), - util = require("./util"), - d3 = require("./d3"); - -module.exports = createNodes; - -function createNodes(selection, g, shapes) { - var simpleNodes = g.nodes().filter(function(v) { return !util.isSubgraph(g, v); }); - var svgNodes = selection.selectAll("g.node") - .data(simpleNodes, function(v) { return v; }) - .classed("update", true); - - svgNodes.selectAll("*").remove(); - svgNodes.enter() - .append("g") - .attr("class", "node") - .style("opacity", 0); - svgNodes.each(function(v) { - var node = g.node(v), - thisGroup = d3.select(this), - labelGroup = thisGroup.append("g").attr("class", "label"), - labelDom = addLabel(labelGroup, node), - shape = shapes[node.shape], - bbox = _.pick(labelDom.node().getBBox(), "width", "height"); - - node.elem = this; - - if (node.id) { thisGroup.attr("id", node.id); } - if (node.labelId) { labelGroup.attr("id", node.labelId); } - util.applyClass(thisGroup, node["class"], - (thisGroup.classed("update") ? "update " : "") + "node"); - - if (_.has(node, "width")) { bbox.width = node.width; } - if (_.has(node, "height")) { bbox.height = node.height; } - - bbox.width += node.paddingLeft + node.paddingRight; - bbox.height += node.paddingTop + node.paddingBottom; - labelGroup.attr("transform", "translate(" + - ((node.paddingLeft - node.paddingRight) / 2) + "," + - ((node.paddingTop - node.paddingBottom) / 2) + ")"); - - var shapeSvg = shape(d3.select(this), bbox, node); - util.applyStyle(shapeSvg, node.style); - - var shapeBBox = shapeSvg.node().getBBox(); - node.width = shapeBBox.width; - node.height = shapeBBox.height; - }); - - util.applyTransition(svgNodes.exit(), g) - .style("opacity", 0) - .remove(); - - return svgNodes; -} - -},{"./d3":9,"./label/add-label":20,"./lodash":23,"./util":29}],9:[function(require,module,exports){ -// Stub to get D3 either via NPM or from the global object -module.exports = window.d3; - -},{}],10:[function(require,module,exports){ -/* global window */ - -var dagre; - -if (require) { - try { - dagre = require("dagre"); - } catch (e) {} -} - -if (!dagre) { - dagre = window.dagre; -} - -module.exports = dagre; - -},{"dagre":32}],11:[function(require,module,exports){ -/* global window */ - -var graphlib; - -if (require) { - try { - graphlib = require("graphlib"); - } catch (e) {} -} - -if (!graphlib) { - graphlib = window.graphlib; -} - -module.exports = graphlib; - -},{"graphlib":63}],12:[function(require,module,exports){ -module.exports = { - node: require("./intersect-node"), - circle: require("./intersect-circle"), - ellipse: require("./intersect-ellipse"), - polygon: require("./intersect-polygon"), - rect: require("./intersect-rect") -}; - -},{"./intersect-circle":13,"./intersect-ellipse":14,"./intersect-node":16,"./intersect-polygon":17,"./intersect-rect":18}],13:[function(require,module,exports){ -var intersectEllipse = require("./intersect-ellipse"); - -module.exports = intersectCircle; - -function intersectCircle(node, rx, point) { - return intersectEllipse(node, rx, rx, point); -} - -},{"./intersect-ellipse":14}],14:[function(require,module,exports){ -module.exports = intersectEllipse; - -function intersectEllipse(node, rx, ry, point) { - // Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html - - var cx = node.x; - var cy = node.y; - - var px = cx - point.x; - var py = cy - point.y; - - var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); - - var dx = Math.abs(rx * ry * px / det); - if (point.x < cx) { - dx = -dx; - } - var dy = Math.abs(rx * ry * py / det); - if (point.y < cy) { - dy = -dy; - } - - return {x: cx + dx, y: cy + dy}; -} - - -},{}],15:[function(require,module,exports){ -module.exports = intersectLine; - -/* - * Returns the point at which two lines, p and q, intersect or returns - * undefined if they do not intersect. - */ -function intersectLine(p1, p2, q1, q2) { - // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994, - // p7 and p473. - - var a1, a2, b1, b2, c1, c2; - var r1, r2 , r3, r4; - var denom, offset, num; - var x, y; - - // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x + - // b1 y + c1 = 0. - a1 = p2.y - p1.y; - b1 = p1.x - p2.x; - c1 = (p2.x * p1.y) - (p1.x * p2.y); - - // Compute r3 and r4. - r3 = ((a1 * q1.x) + (b1 * q1.y) + c1); - r4 = ((a1 * q2.x) + (b1 * q2.y) + c1); - - // Check signs of r3 and r4. If both point 3 and point 4 lie on - // same side of line 1, the line segments do not intersect. - if ((r3 !== 0) && (r4 !== 0) && sameSign(r3, r4)) { - return /*DONT_INTERSECT*/; - } - - // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0 - a2 = q2.y - q1.y; - b2 = q1.x - q2.x; - c2 = (q2.x * q1.y) - (q1.x * q2.y); - - // Compute r1 and r2 - r1 = (a2 * p1.x) + (b2 * p1.yy) + c2; - r2 = (a2 * p2.x) + (b2 * p2.y) + c2; - - // Check signs of r1 and r2. If both point 1 and point 2 lie - // on same side of second line segment, the line segments do - // not intersect. - if ((r1 !== 0) && (r2 !== 0) && (sameSign(r1, r2))) { - return /*DONT_INTERSECT*/; - } - - // Line segments intersect: compute intersection point. - denom = (a1 * b2) - (a2 * b1); - if (denom === 0) { - return /*COLLINEAR*/; - } - - offset = Math.abs(denom / 2); - - // The denom/2 is to get rounding instead of truncating. It - // is added or subtracted to the numerator, depending upon the - // sign of the numerator. - num = (b1 * c2) - (b2 * c1); - x = (num < 0) ? ((num - offset) / denom) : ((num + offset) / denom); - - num = (a2 * c1) - (a1 * c2); - y = (num < 0) ? ((num - offset) / denom) : ((num + offset) / denom); - - return { x: x, y: y }; -} - -function sameSign(r1, r2) { - return r1 * r2 > 0; -} - -},{}],16:[function(require,module,exports){ -module.exports = intersectNode; - -function intersectNode(node, point) { - return node.intersect(point); -} - -},{}],17:[function(require,module,exports){ -var intersectLine = require("./intersect-line"); - -module.exports = intersectPolygon; - -/* - * Returns the point ({x, y}) at which the point argument intersects with the - * node argument assuming that it has the shape specified by polygon. - */ -function intersectPolygon(node, polyPoints, point) { - var x1 = node.x; - var y1 = node.y; - - var intersections = []; - - var minX = Number.POSITIVE_INFINITY, - minY = Number.POSITIVE_INFINITY; - polyPoints.forEach(function(entry) { - minX = Math.min(minX, entry.x); - minY = Math.min(minY, entry.y); - }); - - var left = x1 - node.width / 2 - minX; - var top = y1 - node.height / 2 - minY; - - for (var i = 0; i < polyPoints.length; i++) { - var p1 = polyPoints[i]; - var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; - var intersect = intersectLine(node, point, - {x: left + p1.x, y: top + p1.y}, {x: left + p2.x, y: top + p2.y}); - if (intersect) { - intersections.push(intersect); - } - } - - if (!intersections.length) { - console.log("NO INTERSECTION FOUND, RETURN NODE CENTER", node); - return node; - } - - if (intersections.length > 1) { - // More intersections, find the one nearest to edge end point - intersections.sort(function(p, q) { - var pdx = p.x - point.x, - pdy = p.y - point.y, - distp = Math.sqrt(pdx * pdx + pdy * pdy), - - qdx = q.x - point.x, - qdy = q.y - point.y, - distq = Math.sqrt(qdx * qdx + qdy * qdy); - - return (distp < distq) ? -1 : (distp === distq ? 0 : 1); - }); - } - return intersections[0]; -} - -},{"./intersect-line":15}],18:[function(require,module,exports){ -module.exports = intersectRect; - -function intersectRect(node, point) { - var x = node.x; - var y = node.y; - - // Rectangle intersection algorithm from: - // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = node.width / 2; - var h = node.height / 2; - - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = dy === 0 ? 0 : h * dx / dy; - sy = h; - } else { - // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = dx === 0 ? 0 : w * dy / dx; - } - - return {x: x + sx, y: y + sy}; -} - -},{}],19:[function(require,module,exports){ -var util = require("../util"); - -module.exports = addHtmlLabel; - -function addHtmlLabel(root, node) { - var fo = root - .append("foreignObject") - .attr("width", "100000"); - - var div = fo - .append("xhtml:div"); - - var label = node.label; - switch(typeof label) { - case "function": - div.insert(label); - break; - case "object": - // Currently we assume this is a DOM object. - div.insert(function() { return label; }); - break; - default: div.html(label); - } - - util.applyStyle(div, node.labelStyle); - div.style("display", "inline-block"); - // Fix for firefox - div.style("white-space", "nowrap"); - - // TODO find a better way to get dimensions for foreignObjects... - var w, h; - div - .each(function() { - w = this.clientWidth; - h = this.clientHeight; - }); - - fo - .attr("width", w) - .attr("height", h); - - return fo; -} - -},{"../util":29}],20:[function(require,module,exports){ -var addTextLabel = require("./add-text-label"), - addHtmlLabel = require("./add-html-label"), - addSVGLabel = require("./add-svg-label"); - -module.exports = addLabel; - -function addLabel(root, node, location) { - var label = node.label; - var labelSvg = root.append("g"); - - // Allow the label to be a string, a function that returns a DOM element, or - // a DOM element itself. - if (node.labelType === "svg") { - addSVGLabel(labelSvg, node); - } else if (typeof label !== "string" || node.labelType === "html") { - addHtmlLabel(labelSvg, node); - } else { - addTextLabel(labelSvg, node); - } - - var labelBBox = labelSvg.node().getBBox(); - var y; - switch(location) { - case "top": - y = (-node.height / 2); - break; - case "bottom": - y = (node.height / 2) - labelBBox.height; - break; - default: - y = (-labelBBox.height / 2); - } - labelSvg.attr("transform", - "translate(" + (-labelBBox.width / 2) + "," + y + ")"); - - return labelSvg; -} - -},{"./add-html-label":19,"./add-svg-label":21,"./add-text-label":22}],21:[function(require,module,exports){ -var util = require("../util"); - -module.exports = addSVGLabel; - -function addSVGLabel(root, node) { - var domNode = root; - - domNode.node().appendChild(node.label); - - util.applyStyle(domNode, node.labelStyle); - - return domNode; -} - -},{"../util":29}],22:[function(require,module,exports){ -var util = require("../util"); - -module.exports = addTextLabel; - -/* - * Attaches a text label to the specified root. Handles escape sequences. - */ -function addTextLabel(root, node) { - var domNode = root.append("text"); - - var lines = processEscapeSequences(node.label).split("\n"); - for (var i = 0; i < lines.length; i++) { - domNode - .append("tspan") - .attr("xml:space", "preserve") - .attr("dy", "1em") - .attr("x", "1") - .text(lines[i]); - } - - util.applyStyle(domNode, node.labelStyle); - - return domNode; -} - -function processEscapeSequences(text) { - var newText = "", - escaped = false, - ch; - for (var i = 0; i < text.length; ++i) { - ch = text[i]; - if (escaped) { - switch(ch) { - case "n": newText += "\n"; break; - default: newText += ch; - } - escaped = false; - } else if (ch === "\\") { - escaped = true; - } else { - newText += ch; - } - } - return newText; -} - -},{"../util":29}],23:[function(require,module,exports){ -/* global window */ - -var lodash; - -if (require) { - try { - lodash = require("lodash"); - } catch (e) {} -} - -if (!lodash) { - lodash = window._; -} - -module.exports = lodash; - -},{"lodash":31}],24:[function(require,module,exports){ -"use strict"; - -var util = require("./util"), - d3 = require("./d3"); - -module.exports = positionClusters; - -function positionClusters(selection, g) { - var created = selection.filter(function() { return !d3.select(this).classed("update"); }); - - function translate(v) { - var node = g.node(v); - return "translate(" + node.x + "," + node.y + ")"; - } - - created.attr("transform", translate); - - util.applyTransition(selection, g) - .style("opacity", 1) - .attr("transform", translate); - - util.applyTransition(created.selectAll("rect"), g) - .attr("width", function(v) { return g.node(v).width; }) - .attr("height", function(v) { return g.node(v).height; }) - .attr("x", function(v) { - var node = g.node(v); - return -node.width / 2; - }) - .attr("y", function(v) { - var node = g.node(v); - return -node.height / 2; - }); - -} - -},{"./d3":9,"./util":29}],25:[function(require,module,exports){ -"use strict"; - -var util = require("./util"), - d3 = require("./d3"), - _ = require("./lodash"); - -module.exports = positionEdgeLabels; - -function positionEdgeLabels(selection, g) { - var created = selection.filter(function() { return !d3.select(this).classed("update"); }); - - function translate(e) { - var edge = g.edge(e); - return _.has(edge, "x") ? "translate(" + edge.x + "," + edge.y + ")" : ""; - } - - created.attr("transform", translate); - - util.applyTransition(selection, g) - .style("opacity", 1) - .attr("transform", translate); -} - -},{"./d3":9,"./lodash":23,"./util":29}],26:[function(require,module,exports){ -"use strict"; - -var util = require("./util"), - d3 = require("./d3"); - -module.exports = positionNodes; - -function positionNodes(selection, g) { - var created = selection.filter(function() { return !d3.select(this).classed("update"); }); - - function translate(v) { - var node = g.node(v); - return "translate(" + node.x + "," + node.y + ")"; - } - - created.attr("transform", translate); - - util.applyTransition(selection, g) - .style("opacity", 1) - .attr("transform", translate); -} - -},{"./d3":9,"./util":29}],27:[function(require,module,exports){ -var _ = require("./lodash"), - layout = require("./dagre").layout; - -module.exports = render; - -// This design is based on http://bost.ocks.org/mike/chart/. -function render() { - var createNodes = require("./create-nodes"), - createClusters = require("./create-clusters"), - createEdgeLabels = require("./create-edge-labels"), - createEdgePaths = require("./create-edge-paths"), - positionNodes = require("./position-nodes"), - positionEdgeLabels = require("./position-edge-labels"), - positionClusters = require("./position-clusters"), - shapes = require("./shapes"), - arrows = require("./arrows"); - - var fn = function(svg, g) { - preProcessGraph(g); - - var outputGroup = createOrSelectGroup(svg, "output"), - clustersGroup = createOrSelectGroup(outputGroup, "clusters"), - edgePathsGroup = createOrSelectGroup(outputGroup, "edgePaths"), - edgeLabels = createEdgeLabels(createOrSelectGroup(outputGroup, "edgeLabels"), g), - nodes = createNodes(createOrSelectGroup(outputGroup, "nodes"), g, shapes); - - layout(g); - - positionNodes(nodes, g); - positionEdgeLabels(edgeLabels, g); - createEdgePaths(edgePathsGroup, g, arrows); - - var clusters = createClusters(clustersGroup, g); - positionClusters(clusters, g); - - postProcessGraph(g); - }; - - fn.createNodes = function(value) { - if (!arguments.length) return createNodes; - createNodes = value; - return fn; - }; - - fn.createClusters = function(value) { - if (!arguments.length) return createClusters; - createClusters = value; - return fn; - }; - - fn.createEdgeLabels = function(value) { - if (!arguments.length) return createEdgeLabels; - createEdgeLabels = value; - return fn; - }; - - fn.createEdgePaths = function(value) { - if (!arguments.length) return createEdgePaths; - createEdgePaths = value; - return fn; - }; - - fn.shapes = function(value) { - if (!arguments.length) return shapes; - shapes = value; - return fn; - }; - - fn.arrows = function(value) { - if (!arguments.length) return arrows; - arrows = value; - return fn; - }; - - return fn; -} - -var NODE_DEFAULT_ATTRS = { - paddingLeft: 10, - paddingRight: 10, - paddingTop: 10, - paddingBottom: 10, - rx: 0, - ry: 0, - shape: "rect" -}; - -var EDGE_DEFAULT_ATTRS = { - arrowhead: "normal", - lineInterpolate: "linear" -}; - -function preProcessGraph(g) { - g.nodes().forEach(function(v) { - var node = g.node(v); - if (!_.has(node, "label") && !g.children(v).length) { node.label = v; } - - if (_.has(node, "paddingX")) { - _.defaults(node, { - paddingLeft: node.paddingX, - paddingRight: node.paddingX - }); - } - - if (_.has(node, "paddingY")) { - _.defaults(node, { - paddingTop: node.paddingY, - paddingBottom: node.paddingY - }); - } - - if (_.has(node, "padding")) { - _.defaults(node, { - paddingLeft: node.padding, - paddingRight: node.padding, - paddingTop: node.padding, - paddingBottom: node.padding - }); - } - - _.defaults(node, NODE_DEFAULT_ATTRS); - - _.each(["paddingLeft", "paddingRight", "paddingTop", "paddingBottom"], function(k) { - node[k] = Number(node[k]); - }); - - // Save dimensions for restore during post-processing - if (_.has(node, "width")) { node._prevWidth = node.width; } - if (_.has(node, "height")) { node._prevHeight = node.height; } - }); - - g.edges().forEach(function(e) { - var edge = g.edge(e); - if (!_.has(edge, "label")) { edge.label = ""; } - _.defaults(edge, EDGE_DEFAULT_ATTRS); - }); -} - -function postProcessGraph(g) { - _.each(g.nodes(), function(v) { - var node = g.node(v); - - // Restore original dimensions - if (_.has(node, "_prevWidth")) { - node.width = node._prevWidth; - } else { - delete node.width; - } - - if (_.has(node, "_prevHeight")) { - node.height = node._prevHeight; - } else { - delete node.height; - } - - delete node._prevWidth; - delete node._prevHeight; - }); -} - -function createOrSelectGroup(root, name) { - var selection = root.select("g." + name); - if (selection.empty()) { - selection = root.append("g").attr("class", name); - } - return selection; -} - -},{"./arrows":4,"./create-clusters":5,"./create-edge-labels":6,"./create-edge-paths":7,"./create-nodes":8,"./dagre":10,"./lodash":23,"./position-clusters":24,"./position-edge-labels":25,"./position-nodes":26,"./shapes":28}],28:[function(require,module,exports){ -"use strict"; - -var intersectRect = require("./intersect/intersect-rect"), - intersectEllipse = require("./intersect/intersect-ellipse"), - intersectCircle = require("./intersect/intersect-circle"), - intersectPolygon = require("./intersect/intersect-polygon"); - -module.exports = { - rect: rect, - ellipse: ellipse, - circle: circle, - diamond: diamond -}; - -function rect(parent, bbox, node) { - var shapeSvg = parent.insert("rect", ":first-child") - .attr("rx", node.rx) - .attr("ry", node.ry) - .attr("x", -bbox.width / 2) - .attr("y", -bbox.height / 2) - .attr("width", bbox.width) - .attr("height", bbox.height); - - node.intersect = function(point) { - return intersectRect(node, point); - }; - - return shapeSvg; -} - -function ellipse(parent, bbox, node) { - var rx = bbox.width / 2, - ry = bbox.height / 2, - shapeSvg = parent.insert("ellipse", ":first-child") - .attr("x", -bbox.width / 2) - .attr("y", -bbox.height / 2) - .attr("rx", rx) - .attr("ry", ry); - - node.intersect = function(point) { - return intersectEllipse(node, rx, ry, point); - }; - - return shapeSvg; -} - -function circle(parent, bbox, node) { - var r = Math.max(bbox.width, bbox.height) / 2, - shapeSvg = parent.insert("circle", ":first-child") - .attr("x", -bbox.width / 2) - .attr("y", -bbox.height / 2) - .attr("r", r); - - node.intersect = function(point) { - return intersectCircle(node, r, point); - }; - - return shapeSvg; -} - -// Circumscribe an ellipse for the bounding box with a diamond shape. I derived -// the function to calculate the diamond shape from: -// http://mathforum.org/kb/message.jspa?messageID=3750236 -function diamond(parent, bbox, node) { - var w = (bbox.width * Math.SQRT2) / 2, - h = (bbox.height * Math.SQRT2) / 2, - points = [ - { x: 0, y: -h }, - { x: -w, y: 0 }, - { x: 0, y: h }, - { x: w, y: 0 } - ], - shapeSvg = parent.insert("polygon", ":first-child") - .attr("points", points.map(function(p) { return p.x + "," + p.y; }).join(" ")); - - node.intersect = function(p) { - return intersectPolygon(node, points, p); - }; - - return shapeSvg; -} - -},{"./intersect/intersect-circle":13,"./intersect/intersect-ellipse":14,"./intersect/intersect-polygon":17,"./intersect/intersect-rect":18}],29:[function(require,module,exports){ -var _ = require("./lodash"); - -// Public utility functions -module.exports = { - isSubgraph: isSubgraph, - edgeToId: edgeToId, - applyStyle: applyStyle, - applyClass: applyClass, - applyTransition: applyTransition -}; - -/* - * Returns true if the specified node in the graph is a subgraph node. A - * subgraph node is one that contains other nodes. - */ -function isSubgraph(g, v) { - return !!g.children(v).length; -} - -function edgeToId(e) { - return escapeId(e.v) + ":" + escapeId(e.w) + ":" + escapeId(e.name); -} - -var ID_DELIM = /:/g; -function escapeId(str) { - return str ? String(str).replace(ID_DELIM, "\\:") : ""; -} - -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} - -function applyClass(dom, classFn, otherClasses) { - if (classFn) { - dom - .attr("class", classFn) - .attr("class", otherClasses + " " + dom.attr("class")); - } -} - -function applyTransition(selection, g) { - var graph = g.graph(); - - if (_.isPlainObject(graph)) { - var transition = graph.transition; - if (_.isFunction(transition)) { - return transition(selection); - } - } - - return selection; -} - -},{"./lodash":23}],30:[function(require,module,exports){ -module.exports = "0.4.10"; - -},{}],31:[function(require,module,exports){ -(function (global){ -/** - * @license - * lodash 3.10.1 (Custom Build) - * Build: `lodash modern -d -o ./index.js` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '3.10.1'; - - /** Used to compose bitmasks for wrapper metadata. */ - var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_BOUND_FLAG = 4, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64, - ARY_FLAG = 128, - REARG_FLAG = 256; - - /** Used as default options for `_.trunc`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; - - /** Used to detect when a function becomes hot. */ - var HOT_COUNT = 150, - HOT_SPAN = 16; - - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; - - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2; - - /** Used as the `TypeError` message for "Functions" methods. */ - var FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - - var arrayBufferTag = '[object ArrayBuffer]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, - reUnescapedHtml = /[&<>"'`]/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g; - - /** - * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns) - * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern). - */ - var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g, - reHasRegExpChars = RegExp(reRegExpChars.source); - - /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */ - var reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g; - - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; - - /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; - - /** Used to detect hexadecimal string values. */ - var reHasHexPrefix = /^0[xX]/; - - /** Used to detect host constructors (Safari > 5). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^\d+$/; - - /** Used to match latin-1 supplementary letters (excluding mathematical operators). */ - var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; - - /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; - - /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - - /** Used to match words to create compound words. */ - var reWords = (function() { - var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]', - lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+'; - - return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g'); - }()); - - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array', - 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number', - 'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite', - 'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array', - 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap' - ]; - - /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dateTag] = typedArrayTags[errorTag] = - typedArrayTags[funcTag] = typedArrayTags[mapTag] = - typedArrayTags[numberTag] = typedArrayTags[objectTag] = - typedArrayTags[regexpTag] = typedArrayTags[setTag] = - typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; - - /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = - cloneableTags[dateTag] = cloneableTags[float32Tag] = - cloneableTags[float64Tag] = cloneableTags[int8Tag] = - cloneableTags[int16Tag] = cloneableTags[int32Tag] = - cloneableTags[numberTag] = cloneableTags[objectTag] = - cloneableTags[regexpTag] = cloneableTags[stringTag] = - cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[mapTag] = cloneableTags[setTag] = - cloneableTags[weakMapTag] = false; - - /** Used to map latin-1 supplementary letters to basic latin letters. */ - var deburredLetters = { - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss' - }; - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'", - '`': '`' - }; - - /** Used to determine if values are of the language type `Object`. */ - var objectTypes = { - 'function': true, - 'object': true - }; - - /** Used to escape characters for inclusion in compiled regexes. */ - var regexpEscapes = { - '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34', - '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39', - 'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46', - 'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66', - 'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78' - }; - - /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - /** Detect free variable `exports`. */ - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global; - - /** Detect free variable `self`. */ - var freeSelf = objectTypes[typeof self] && self && self.Object && self; - - /** Detect free variable `window`. */ - var freeWindow = objectTypes[typeof window] && window && window.Object && window; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; - - /** - * Used as a reference to the global object. - * - * The `this` value is used if it's the global object to avoid Greasemonkey's - * restricted `window` object, otherwise the `window` object is used. - */ - var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this; - - /*--------------------------------------------------------------------------*/ - - /** - * The base implementation of `compareAscending` which compares values and - * sorts them in ascending order without guaranteeing a stable sort. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function baseCompareAscending(value, other) { - if (value !== other) { - var valIsNull = value === null, - valIsUndef = value === undefined, - valIsReflexive = value === value; - - var othIsNull = other === null, - othIsUndef = other === undefined, - othIsReflexive = other === other; - - if ((value > other && !othIsNull) || !valIsReflexive || - (valIsNull && !othIsUndef && othIsReflexive) || - (valIsUndef && othIsReflexive)) { - return 1; - } - if ((value < other && !valIsNull) || !othIsReflexive || - (othIsNull && !valIsUndef && valIsReflexive) || - (othIsUndef && valIsReflexive)) { - return -1; - } - } - return 0; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for callback shorthands and `this` binding. - * - * @private - * @param {Array} array The array to search. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.indexOf` without support for binary searches. - * - * @private - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - if (value !== value) { - return indexOfNaN(array, fromIndex); - } - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.isFunction` without support for environments - * with incorrect `typeof` results. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - */ - function baseIsFunction(value) { - // Avoid a Chakra JIT bug in compatibility modes of IE 11. - // See https://github.com/jashkenas/underscore/issues/1621 for more details. - return typeof value == 'function' || false; - } - - /** - * Converts `value` to a string if it's not one. An empty string is returned - * for `null` or `undefined` values. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - return value == null ? '' : (value + ''); - } - - /** - * Used by `_.trim` and `_.trimLeft` to get the index of the first character - * of `string` that is not found in `chars`. - * - * @private - * @param {string} string The string to inspect. - * @param {string} chars The characters to find. - * @returns {number} Returns the index of the first character not found in `chars`. - */ - function charsLeftIndex(string, chars) { - var index = -1, - length = string.length; - - while (++index < length && chars.indexOf(string.charAt(index)) > -1) {} - return index; - } - - /** - * Used by `_.trim` and `_.trimRight` to get the index of the last character - * of `string` that is not found in `chars`. - * - * @private - * @param {string} string The string to inspect. - * @param {string} chars The characters to find. - * @returns {number} Returns the index of the last character not found in `chars`. - */ - function charsRightIndex(string, chars) { - var index = string.length; - - while (index-- && chars.indexOf(string.charAt(index)) > -1) {} - return index; - } - - /** - * Used by `_.sortBy` to compare transformed elements of a collection and stable - * sort them in ascending order. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareAscending(object, other) { - return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index); - } - - /** - * Used by `_.sortByOrder` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise, - * a value is sorted in ascending order if its corresponding order is "asc", and - * descending if "desc". - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = baseCompareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * ((order === 'asc' || order === true) ? 1 : -1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://code.google.com/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } - - /** - * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ - function deburrLetter(letter) { - return deburredLetters[letter]; - } - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeHtmlChar(chr) { - return htmlEscapes[chr]; - } - - /** - * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes. - * - * @private - * @param {string} chr The matched character to escape. - * @param {string} leadingChar The capture group for a leading character. - * @param {string} whitespaceChar The capture group for a whitespace character. - * @returns {string} Returns the escaped character. - */ - function escapeRegExpChar(chr, leadingChar, whitespaceChar) { - if (leadingChar) { - chr = regexpEscapes[chr]; - } else if (whitespaceChar) { - chr = stringEscapes[chr]; - } - return '\\' + chr; - } - - /** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; - } - - /** - * Gets the index at which the first occurrence of `NaN` is found in `array`. - * - * @private - * @param {Array} array The array to search. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched `NaN`, else `-1`. - */ - function indexOfNaN(array, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 0 : -1); - - while ((fromRight ? index-- : ++index < length)) { - var other = array[index]; - if (other !== other) { - return index; - } - } - return -1; - } - - /** - * Checks if `value` is object-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - */ - function isObjectLike(value) { - return !!value && typeof value == 'object'; - } - - /** - * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a - * character code is whitespace. - * - * @private - * @param {number} charCode The character code to inspect. - * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`. - */ - function isSpace(charCode) { - return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 || - (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279))); - } - - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = -1, - result = []; - - while (++index < length) { - if (array[index] === placeholder) { - array[index] = PLACEHOLDER; - result[++resIndex] = index; - } - } - return result; - } - - /** - * An implementation of `_.uniq` optimized for sorted arrays without support - * for callback shorthands and `this` binding. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The function invoked per iteration. - * @returns {Array} Returns the new duplicate-value-free array. - */ - function sortedUniq(array, iteratee) { - var seen, - index = -1, - length = array.length, - resIndex = -1, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value, index, array) : value; - - if (!index || seen !== computed) { - seen = computed; - result[++resIndex] = value; - } - } - return result; - } - - /** - * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the first non-whitespace character. - */ - function trimmedLeftIndex(string) { - var index = -1, - length = string.length; - - while (++index < length && isSpace(string.charCodeAt(index))) {} - return index; - } - - /** - * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ - function trimmedRightIndex(string) { - var index = string.length; - - while (index-- && isSpace(string.charCodeAt(index))) {} - return index; - } - - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - function unescapeHtmlChar(chr) { - return htmlUnescapes[chr]; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new pristine `lodash` function using the given `context` object. - * - * @static - * @memberOf _ - * @category Utility - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `lodash` function. - * @example - * - * _.mixin({ 'foo': _.constant('foo') }); - * - * var lodash = _.runInContext(); - * lodash.mixin({ 'bar': lodash.constant('bar') }); - * - * _.isFunction(_.foo); - * // => true - * _.isFunction(_.bar); - * // => false - * - * lodash.isFunction(lodash.foo); - * // => false - * lodash.isFunction(lodash.bar); - * // => true - * - * // using `context` to mock `Date#getTime` use in `_.now` - * var mock = _.runInContext({ - * 'Date': function() { - * return { 'getTime': getTimeMock }; - * } - * }); - * - * // or creating a suped-up `defer` in Node.js - * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; - */ - function runInContext(context) { - // Avoid issues with some ES3 environments that attempt to use values, named - // after built-in constructors like `Object`, for the creation of literals. - // ES5 clears this up by stating that literals must use built-in constructors. - // See https://es5.github.io/#x11.1.5 for more details. - context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; - - /** Native constructor references. */ - var Array = context.Array, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Number = context.Number, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; - - /** Used for native method references. */ - var arrayProto = Array.prototype, - objectProto = Object.prototype, - stringProto = String.prototype; - - /** Used to resolve the decompiled source of functions. */ - var fnToString = Function.prototype.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** - * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ - var objToString = objectProto.toString; - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** Native method references. */ - var ArrayBuffer = context.ArrayBuffer, - clearTimeout = context.clearTimeout, - parseFloat = context.parseFloat, - pow = Math.pow, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - Set = getNative(context, 'Set'), - setTimeout = context.setTimeout, - splice = arrayProto.splice, - Uint8Array = context.Uint8Array, - WeakMap = getNative(context, 'WeakMap'); - - /* Native method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeCreate = getNative(Object, 'create'), - nativeFloor = Math.floor, - nativeIsArray = getNative(Array, 'isArray'), - nativeIsFinite = context.isFinite, - nativeKeys = getNative(Object, 'keys'), - nativeMax = Math.max, - nativeMin = Math.min, - nativeNow = getNative(Date, 'now'), - nativeParseInt = context.parseInt, - nativeRandom = Math.random; - - /** Used as references for `-Infinity` and `Infinity`. */ - var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY, - POSITIVE_INFINITY = Number.POSITIVE_INFINITY; - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - - /** - * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) - * of an array-like value. - */ - var MAX_SAFE_INTEGER = 9007199254740991; - - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; - - /** Used to lookup unminified function names. */ - var realNames = {}; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit chaining. - * Methods that operate on and return arrays, collections, and functions can - * be chained together. Methods that retrieve a single value or may return a - * primitive value will automatically end the chain returning the unwrapped - * value. Explicit chaining may be enabled using `_.chain`. The execution of - * chained methods is lazy, that is, execution is deferred until `_#value` - * is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. Shortcut - * fusion is an optimization strategy which merge iteratee calls; this can help - * to avoid the creation of intermediate data structures and greatly reduce the - * number of iteratee executions. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, - * `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`, - * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`, - * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`, - * and `where` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`, - * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`, - * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`, - * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`, - * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`, - * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, - * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, - * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, - * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`, - * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`, - * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`, - * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`, - * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`, - * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`, - * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`, - * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`, - * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`, - * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, - * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`, - * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`, - * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, - * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`, - * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`, - * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`, - * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`, - * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`, - * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`, - * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`, - * `unescape`, `uniqueId`, `value`, and `words` - * - * The wrapper method `sample` will return a wrapped value when `n` is provided, - * otherwise an unwrapped value is returned. - * - * @name _ - * @constructor - * @category Chain - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var wrapped = _([1, 2, 3]); - * - * // returns an unwrapped value - * wrapped.reduce(function(total, n) { - * return total + n; - * }); - * // => 6 - * - * // returns a wrapped value - * var squares = wrapped.map(function(n) { - * return n * n; - * }); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } - - /** - * The function whose prototype all chaining wrappers inherit from. - * - * @private - */ - function baseLodash() { - // No operation performed. - } - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable chaining for all wrapper methods. - * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value. - */ - function LodashWrapper(value, chainAll, actions) { - this.__wrapped__ = value; - this.__actions__ = actions || []; - this.__chain__ = !!chainAll; - } - - /** - * An object environment feature flags. - * - * @static - * @memberOf _ - * @type Object - */ - var support = lodash.support = {}; - - /** - * By default, the template delimiters used by lodash are like those in - * embedded Ruby (ERB). Change the following template settings to use - * alternative delimiters. - * - * @static - * @memberOf _ - * @type Object - */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'escape': reEscape, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'evaluate': reEvaluate, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type RegExp - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type string - */ - 'variable': '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type Object - */ - 'imports': { - - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type Function - */ - '_': lodash - } - }; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @param {*} value The value to wrap. - */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = POSITIVE_INFINITY; - this.__views__ = []; - } - - /** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = arrayCopy(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = arrayCopy(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = arrayCopy(this.__views__); - return result; - } - - /** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } - - /** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) { - return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a cache object to store key/value pairs. - * - * @private - * @static - * @name Cache - * @memberOf _.memoize - */ - function MapCache() { - this.__data__ = {}; - } - - /** - * Removes `key` and its value from the cache. - * - * @private - * @name delete - * @memberOf _.memoize.Cache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`. - */ - function mapDelete(key) { - return this.has(key) && delete this.__data__[key]; - } - - /** - * Gets the cached value for `key`. - * - * @private - * @name get - * @memberOf _.memoize.Cache - * @param {string} key The key of the value to get. - * @returns {*} Returns the cached value. - */ - function mapGet(key) { - return key == '__proto__' ? undefined : this.__data__[key]; - } - - /** - * Checks if a cached value for `key` exists. - * - * @private - * @name has - * @memberOf _.memoize.Cache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function mapHas(key) { - return key != '__proto__' && hasOwnProperty.call(this.__data__, key); - } - - /** - * Sets `value` to `key` of the cache. - * - * @private - * @name set - * @memberOf _.memoize.Cache - * @param {string} key The key of the value to cache. - * @param {*} value The value to cache. - * @returns {Object} Returns the cache object. - */ - function mapSet(key, value) { - if (key != '__proto__') { - this.__data__[key] = value; - } - return this; - } - - /*------------------------------------------------------------------------*/ - - /** - * - * Creates a cache object to store unique values. - * - * @private - * @param {Array} [values] The values to cache. - */ - function SetCache(values) { - var length = values ? values.length : 0; - - this.data = { 'hash': nativeCreate(null), 'set': new Set }; - while (length--) { - this.push(values[length]); - } - } - - /** - * Checks if `value` is in `cache` mimicking the return signature of - * `_.indexOf` by returning `0` if the value is found, else `-1`. - * - * @private - * @param {Object} cache The cache to search. - * @param {*} value The value to search for. - * @returns {number} Returns `0` if `value` is found, else `-1`. - */ - function cacheIndexOf(cache, value) { - var data = cache.data, - result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value]; - - return result ? 0 : -1; - } - - /** - * Adds `value` to the cache. - * - * @private - * @name push - * @memberOf SetCache - * @param {*} value The value to cache. - */ - function cachePush(value) { - var data = this.data; - if (typeof value == 'string' || isObject(value)) { - data.set.add(value); - } else { - data.hash[value] = true; - } - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a new array joining `array` with `other`. - * - * @private - * @param {Array} array The array to join. - * @param {Array} other The other array to join. - * @returns {Array} Returns the new concatenated array. - */ - function arrayConcat(array, other) { - var index = -1, - length = array.length, - othIndex = -1, - othLength = other.length, - result = Array(length + othLength); - - while (++index < length) { - result[index] = array[index]; - } - while (++othIndex < othLength) { - result[index++] = other[othIndex]; - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function arrayCopy(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** - * A specialized version of `_.forEach` for arrays without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.forEachRight` for arrays without support for - * callback shorthands and `this` binding. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEachRight(array, iteratee) { - var length = array.length; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.every` for arrays without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array.length; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } - - /** - * A specialized version of `baseExtremum` for arrays which invokes `iteratee` - * with one argument: (value). - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} comparator The function used to compare values. - * @param {*} exValue The initial extremum value. - * @returns {*} Returns the extremum value. - */ - function arrayExtremum(array, iteratee, comparator, exValue) { - var index = -1, - length = array.length, - computed = exValue, - result = computed; - - while (++index < length) { - var value = array[index], - current = +iteratee(value); - - if (comparator(current, computed)) { - computed = current; - result = value; - } - } - return result; - } - - /** - * A specialized version of `_.filter` for arrays without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array.length, - resIndex = -1, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[++resIndex] = value; - } - } - return result; - } - - /** - * A specialized version of `_.map` for arrays without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } - - /** - * A specialized version of `_.reduce` for arrays without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initFromArray] Specify using the first element of `array` - * as the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initFromArray) { - var index = -1, - length = array.length; - - if (initFromArray && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - - /** - * A specialized version of `_.reduceRight` for arrays without support for - * callback shorthands and `this` binding. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initFromArray] Specify using the last element of `array` - * as the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduceRight(array, iteratee, accumulator, initFromArray) { - var length = array.length; - if (initFromArray && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } - - /** - * A specialized version of `_.some` for arrays without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - - /** - * A specialized version of `_.sum` for arrays without support for callback - * shorthands and `this` binding.. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function arraySum(array, iteratee) { - var length = array.length, - result = 0; - - while (length--) { - result += +iteratee(array[length]) || 0; - } - return result; - } - - /** - * Used by `_.defaults` to customize its `_.assign` use. - * - * @private - * @param {*} objectValue The destination object property value. - * @param {*} sourceValue The source object property value. - * @returns {*} Returns the value to assign to the destination object. - */ - function assignDefaults(objectValue, sourceValue) { - return objectValue === undefined ? sourceValue : objectValue; - } - - /** - * Used by `_.template` to customize its `_.assign` use. - * - * **Note:** This function is like `assignDefaults` except that it ignores - * inherited property values when checking if a property is `undefined`. - * - * @private - * @param {*} objectValue The destination object property value. - * @param {*} sourceValue The source object property value. - * @param {string} key The key associated with the object and source values. - * @param {Object} object The destination object. - * @returns {*} Returns the value to assign to the destination object. - */ - function assignOwnDefaults(objectValue, sourceValue, key, object) { - return (objectValue === undefined || !hasOwnProperty.call(object, key)) - ? sourceValue - : objectValue; - } - - /** - * A specialized version of `_.assign` for customizing assigned values without - * support for argument juggling, multiple sources, and `this` binding `customizer` - * functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - */ - function assignWith(object, source, customizer) { - var index = -1, - props = keys(source), - length = props.length; - - while (++index < length) { - var key = props[index], - value = object[key], - result = customizer(value, source[key], key, object, source); - - if ((result === result ? (result !== value) : (value === value)) || - (value === undefined && !(key in object))) { - object[key] = result; - } - } - return object; - } - - /** - * The base implementation of `_.assign` without support for argument juggling, - * multiple sources, and `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return source == null - ? object - : baseCopy(source, keys(source), object); - } - - /** - * The base implementation of `_.at` without support for string collections - * and individual key arguments. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {number[]|string[]} props The property names or indexes of elements to pick. - * @returns {Array} Returns the new array of picked elements. - */ - function baseAt(collection, props) { - var index = -1, - isNil = collection == null, - isArr = !isNil && isArrayLike(collection), - length = isArr ? collection.length : 0, - propsLength = props.length, - result = Array(propsLength); - - while(++index < propsLength) { - var key = props[index]; - if (isArr) { - result[index] = isIndex(key, length) ? collection[key] : undefined; - } else { - result[index] = isNil ? undefined : collection[key]; - } - } - return result; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property names to copy. - * @param {Object} [object={}] The object to copy properties to. - * @returns {Object} Returns `object`. - */ - function baseCopy(source, props, object) { - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - object[key] = source[key]; - } - return object; - } - - /** - * The base implementation of `_.callback` which supports specifying the - * number of arguments to provide to `func`. - * - * @private - * @param {*} [func=_.identity] The value to convert to a callback. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {number} [argCount] The number of arguments to provide to `func`. - * @returns {Function} Returns the callback. - */ - function baseCallback(func, thisArg, argCount) { - var type = typeof func; - if (type == 'function') { - return thisArg === undefined - ? func - : bindCallback(func, thisArg, argCount); - } - if (func == null) { - return identity; - } - if (type == 'object') { - return baseMatches(func); - } - return thisArg === undefined - ? property(func) - : baseMatchesProperty(func, thisArg); - } - - /** - * The base implementation of `_.clone` without support for argument juggling - * and `this` binding `customizer` functions. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @param {Function} [customizer] The function to customize cloning values. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The object `value` belongs to. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates clones with source counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { - var result; - if (customizer) { - result = object ? customizer(value, key, object) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return arrayCopy(value, result); - } - } else { - var tag = objToString.call(value), - isFunc = tag == funcTag; - - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return baseAssign(result, value); - } - } else { - return cloneableTags[tag] - ? initCloneByTag(value, tag, isDeep) - : (object ? value : {}); - } - } - // Check for circular references and return its corresponding clone. - stackA || (stackA = []); - stackB || (stackB = []); - - var length = stackA.length; - while (length--) { - if (stackA[length] == value) { - return stackB[length]; - } - } - // Add the source value to the stack of traversed objects and associate it with its clone. - stackA.push(value); - stackB.push(result); - - // Recursively populate clone (susceptible to call stack limits). - (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { - result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); - }); - return result; - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} prototype The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function() { - function object() {} - return function(prototype) { - if (isObject(prototype)) { - object.prototype = prototype; - var result = new object; - object.prototype = undefined; - } - return result || {}; - }; - }()); - - /** - * The base implementation of `_.delay` and `_.defer` which accepts an index - * of where to slice the arguments to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Object} args The arguments provide to `func`. - * @returns {number} Returns the timer id. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of `_.difference` which accepts a single array - * of values to exclude. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @returns {Array} Returns the new array of filtered values. - */ - function baseDifference(array, values) { - var length = array ? array.length : 0, - result = []; - - if (!length) { - return result; - } - var index = -1, - indexOf = getIndexOf(), - isCommon = indexOf == baseIndexOf, - cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null, - valuesLength = values.length; - - if (cache) { - indexOf = cacheIndexOf; - isCommon = false; - values = cache; - } - outer: - while (++index < length) { - var value = array[index]; - - if (isCommon && value === value) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === value) { - continue outer; - } - } - result.push(value); - } - else if (indexOf(values, value, 0) < 0) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.forEach` without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object|string} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.forEachRight` without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object|string} Returns `collection`. - */ - var baseEachRight = createBaseEach(baseForOwnRight, true); - - /** - * The base implementation of `_.every` without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * Gets the extremum value of `collection` invoking `iteratee` for each value - * in `collection` to generate the criterion by which the value is ranked. - * The `iteratee` is invoked with three arguments: (value, index|key, collection). - * - * @private - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} comparator The function used to compare values. - * @param {*} exValue The initial extremum value. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(collection, iteratee, comparator, exValue) { - var computed = exValue, - result = computed; - - baseEach(collection, function(value, index, collection) { - var current = +iteratee(value, index, collection); - if (comparator(current, computed) || (current === exValue && current === result)) { - computed = current; - result = value; - } - }); - return result; - } - - /** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ - function baseFill(array, value, start, end) { - var length = array.length; - - start = start == null ? 0 : (+start || 0); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : (+end || 0); - if (end < 0) { - end += length; - } - length = start > end ? 0 : (end >>> 0); - start >>>= 0; - - while (start < length) { - array[start++] = value; - } - return array; - } - - /** - * The base implementation of `_.filter` without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`, - * without support for callback shorthands and `this` binding, which iterates - * over `collection` using the provided `eachFunc`. - * - * @private - * @param {Array|Object|string} collection The collection to search. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @param {boolean} [retKey] Specify returning the key of the found element - * instead of the element itself. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFind(collection, predicate, eachFunc, retKey) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = retKey ? key : value; - return false; - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with added support for restricting - * flattening and specifying the start index. - * - * @private - * @param {Array} array The array to flatten. - * @param {boolean} [isDeep] Specify a deep flatten. - * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, isDeep, isStrict, result) { - result || (result = []); - - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index]; - if (isObjectLike(value) && isArrayLike(value) && - (isStrict || isArray(value) || isArguments(value))) { - if (isDeep) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, isDeep, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForIn` and `baseForOwn` which iterates - * over `object` properties returned by `keysFunc` invoking `iteratee` for - * each property. Iteratee functions may exit iteration early by explicitly - * returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseForRight = createBaseFor(true); - - /** - * The base implementation of `_.forIn` without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForIn(object, iteratee) { - return baseFor(object, iteratee, keysIn); - } - - /** - * The base implementation of `_.forOwn` without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.forOwnRight` without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwnRight(object, iteratee) { - return baseForRight(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from those provided. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the new array of filtered property names. - */ - function baseFunctions(object, props) { - var index = -1, - length = props.length, - resIndex = -1, - result = []; - - while (++index < length) { - var key = props[index]; - if (isFunction(object[key])) { - result[++resIndex] = key; - } - } - return result; - } - - /** - * The base implementation of `get` without support for string paths - * and default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path of the property to get. - * @param {string} [pathKey] The key representation of path. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path, pathKey) { - if (object == null) { - return; - } - if (pathKey !== undefined && pathKey in toObject(object)) { - path = [pathKey]; - } - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[path[index++]]; - } - return (index && index == length) ? object : undefined; - } - - /** - * The base implementation of `_.isEqual` without support for `this` binding - * `customizer` functions. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparing values. - * @param {boolean} [isLoose] Specify performing partial comparisons. - * @param {Array} [stackA] Tracks traversed `value` objects. - * @param {Array} [stackB] Tracks traversed `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparing objects. - * @param {boolean} [isLoose] Specify performing partial comparisons. - * @param {Array} [stackA=[]] Tracks traversed `value` objects. - * @param {Array} [stackB=[]] Tracks traversed `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = objToString.call(object); - if (objTag == argsTag) { - objTag = objectTag; - } else if (objTag != objectTag) { - objIsArr = isTypedArray(object); - } - } - if (!othIsArr) { - othTag = objToString.call(other); - if (othTag == argsTag) { - othTag = objectTag; - } else if (othTag != objectTag) { - othIsArr = isTypedArray(other); - } - } - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && !(objIsArr || objIsObj)) { - return equalByTag(object, other, objTag); - } - if (!isLoose) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB); - } - } - if (!isSameTag) { - return false; - } - // Assume cyclic values are equal. - // For more information on detecting circular references see https://es5.github.io/#JO. - stackA || (stackA = []); - stackB || (stackB = []); - - var length = stackA.length; - while (length--) { - if (stackA[length] == object) { - return stackB[length] == other; - } - } - // Add `object` and `other` to the stack of traversed objects. - stackA.push(object); - stackB.push(other); - - var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB); - - stackA.pop(); - stackB.pop(); - - return result; - } - - /** - * The base implementation of `_.isMatch` without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} matchData The propery names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparing objects. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ - function baseIsMatch(object, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = toObject(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var result = customizer ? customizer(objValue, srcValue, key) : undefined; - if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) { - return false; - } - } - } - return true; - } - - /** - * The base implementation of `_.map` without support for callback shorthands - * and `this` binding. - * - * @private - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which does not clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new function. - */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - var key = matchData[0][0], - value = matchData[0][1]; - - return function(object) { - if (object == null) { - return false; - } - return object[key] === value && (value !== undefined || (key in toObject(object))); - }; - } - return function(object) { - return baseIsMatch(object, matchData); - }; - } - - /** - * The base implementation of `_.matchesProperty` which does not clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to compare. - * @returns {Function} Returns the new function. - */ - function baseMatchesProperty(path, srcValue) { - var isArr = isArray(path), - isCommon = isKey(path) && isStrictComparable(srcValue), - pathKey = (path + ''); - - path = toPath(path); - return function(object) { - if (object == null) { - return false; - } - var key = pathKey; - object = toObject(object); - if ((isArr || !isCommon) && !(key in object)) { - object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - if (object == null) { - return false; - } - key = last(path); - object = toObject(object); - } - return object[key] === srcValue - ? (srcValue !== undefined || (key in object)) - : baseIsEqual(srcValue, object[key], undefined, true); - }; - } - - /** - * The base implementation of `_.merge` without support for argument juggling, - * multiple sources, and `this` binding `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {Function} [customizer] The function to customize merged values. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates values with source counterparts. - * @returns {Object} Returns `object`. - */ - function baseMerge(object, source, customizer, stackA, stackB) { - if (!isObject(object)) { - return object; - } - var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)), - props = isSrcArr ? undefined : keys(source); - - arrayEach(props || source, function(srcValue, key) { - if (props) { - key = srcValue; - srcValue = source[key]; - } - if (isObjectLike(srcValue)) { - stackA || (stackA = []); - stackB || (stackB = []); - baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB); - } - else { - var value = object[key], - result = customizer ? customizer(value, srcValue, key, object, source) : undefined, - isCommon = result === undefined; - - if (isCommon) { - result = srcValue; - } - if ((result !== undefined || (isSrcArr && !(key in object))) && - (isCommon || (result === result ? (result !== value) : (value === value)))) { - object[key] = result; - } - } - }); - return object; - } - - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize merged values. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates values with source counterparts. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) { - var length = stackA.length, - srcValue = source[key]; - - while (length--) { - if (stackA[length] == srcValue) { - object[key] = stackB[length]; - return; - } - } - var value = object[key], - result = customizer ? customizer(value, srcValue, key, object, source) : undefined, - isCommon = result === undefined; - - if (isCommon) { - result = srcValue; - if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) { - result = isArray(value) - ? value - : (isArrayLike(value) ? arrayCopy(value) : []); - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - result = isArguments(value) - ? toPlainObject(value) - : (isPlainObject(value) ? value : {}); - } - else { - isCommon = false; - } - } - // Add the source value to the stack of traversed objects and associate - // it with its merged value. - stackA.push(srcValue); - stackB.push(result); - - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB); - } else if (result === result ? (result !== value) : (value === value)) { - object[key] = result; - } - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new function. - */ - function basePropertyDeep(path) { - var pathKey = (path + ''); - path = toPath(path); - return function(object) { - return baseGet(object, path, pathKey); - }; - } - - /** - * The base implementation of `_.pullAt` without support for individual - * index arguments and capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0; - while (length--) { - var index = indexes[length]; - if (index != previous && isIndex(index)) { - var previous = index; - splice.call(array, index, 1); - } - } - return array; - } - - /** - * The base implementation of `_.random` without support for argument juggling - * and returning floating-point numbers. - * - * @private - * @param {number} min The minimum possible value. - * @param {number} max The maximum possible value. - * @returns {number} Returns the random number. - */ - function baseRandom(min, max) { - return min + nativeFloor(nativeRandom() * (max - min + 1)); - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight` without support - * for callback shorthands and `this` binding, which iterates over `collection` - * using the provided `eachFunc`. - * - * @private - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initFromCollection Specify using the first or last element - * of `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initFromCollection - ? (initFromCollection = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `setData` without support for hot loop detection. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - start = start == null ? 0 : (+start || 0); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : (+end || 0); - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * The base implementation of `_.some` without support for callback shorthands - * and `this` binding. - * - * @private - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `_.sortBy` which uses `comparer` to define - * the sort order of `array` and replaces criteria objects with their - * corresponding values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } - - /** - * The base implementation of `_.sortByOrder` without param guards. - * - * @private - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {boolean[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ - function baseSortByOrder(collection, iteratees, orders) { - var callback = getCallback(), - index = -1; - - iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); }); - - var result = baseMap(collection, function(value) { - var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } - - /** - * The base implementation of `_.sum` without support for callback shorthands - * and `this` binding. - * - * @private - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function baseSum(collection, iteratee) { - var result = 0; - baseEach(collection, function(value, index, collection) { - result += +iteratee(value, index, collection) || 0; - }); - return result; - } - - /** - * The base implementation of `_.uniq` without support for callback shorthands - * and `this` binding. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The function invoked per iteration. - * @returns {Array} Returns the new duplicate-value-free array. - */ - function baseUniq(array, iteratee) { - var index = -1, - indexOf = getIndexOf(), - length = array.length, - isCommon = indexOf == baseIndexOf, - isLarge = isCommon && length >= LARGE_ARRAY_SIZE, - seen = isLarge ? createCache() : null, - result = []; - - if (seen) { - indexOf = cacheIndexOf; - isCommon = false; - } else { - isLarge = false; - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value, index, array) : value; - - if (isCommon && value === value) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (indexOf(seen, computed, 0) < 0) { - if (iteratee || isLarge) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - var index = -1, - length = props.length, - result = Array(length); - - while (++index < length) { - result[index] = object[props[index]]; - } - return result; - } - - /** - * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`, - * and `_.takeWhile` without support for callback shorthands and `this` binding. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to peform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - var index = -1, - length = actions.length; - - while (++index < length) { - var action = actions[index]; - result = action.func.apply(action.thisArg, arrayPush([result], action.args)); - } - return result; - } - - /** - * Performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function binaryIndex(array, value, retHighest) { - var low = 0, - high = array ? array.length : low; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return binaryIndexBy(array, value, identity, retHighest); - } - - /** - * This function is like `binaryIndex` except that it invokes `iteratee` for - * `value` and each element of `array` to compute their sort ranking. The - * iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The function invoked per iteration. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function binaryIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array ? array.length : 0, - valIsNaN = value !== value, - valIsNull = value === null, - valIsUndef = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - isDef = computed !== undefined, - isReflexive = computed === computed; - - if (valIsNaN) { - var setLow = isReflexive || retHighest; - } else if (valIsNull) { - setLow = isReflexive && isDef && (retHighest || computed != null); - } else if (valIsUndef) { - setLow = isReflexive && (retHighest || isDef); - } else if (computed == null) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - - /** - * A specialized version of `baseCallback` which only supports `this` binding - * and specifying the number of arguments to provide to `func`. - * - * @private - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {number} [argCount] The number of arguments to provide to `func`. - * @returns {Function} Returns the callback. - */ - function bindCallback(func, thisArg, argCount) { - if (typeof func != 'function') { - return identity; - } - if (thisArg === undefined) { - return func; - } - switch (argCount) { - case 1: return function(value) { - return func.call(thisArg, value); - }; - case 3: return function(value, index, collection) { - return func.call(thisArg, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(thisArg, accumulator, value, index, collection); - }; - case 5: return function(value, other, key, object, source) { - return func.call(thisArg, value, other, key, object, source); - }; - } - return function() { - return func.apply(thisArg, arguments); - }; - } - - /** - * Creates a clone of the given array buffer. - * - * @private - * @param {ArrayBuffer} buffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function bufferClone(buffer) { - var result = new ArrayBuffer(buffer.byteLength), - view = new Uint8Array(result); - - view.set(new Uint8Array(buffer)); - return result; - } - - /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array|Object} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgs(args, partials, holders) { - var holdersLength = holders.length, - argsIndex = -1, - argsLength = nativeMax(args.length - holdersLength, 0), - leftIndex = -1, - leftLength = partials.length, - result = Array(leftLength + argsLength); - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - while (argsLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } - - /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array|Object} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgsRight(args, partials, holders) { - var holdersIndex = -1, - holdersLength = holders.length, - argsIndex = -1, - argsLength = nativeMax(args.length - holdersLength, 0), - rightIndex = -1, - rightLength = partials.length, - result = Array(argsLength + rightLength); - - while (++argsIndex < argsLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - return result; - } - - /** - * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function. - * - * @private - * @param {Function} setter The function to set keys and values of the accumulator object. - * @param {Function} [initializer] The function to initialize the accumulator object. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter, initializer) { - return function(collection, iteratee, thisArg) { - var result = initializer ? initializer() : {}; - iteratee = getCallback(iteratee, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - setter(result, value, iteratee(value, index, collection), collection); - } - } else { - baseEach(collection, function(value, key, collection) { - setter(result, value, iteratee(value, key, collection), collection); - }); - } - return result; - }; - } - - /** - * Creates a `_.assign`, `_.defaults`, or `_.merge` function. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return restParam(function(object, sources) { - var index = -1, - length = object == null ? 0 : sources.length, - customizer = length > 2 ? sources[length - 2] : undefined, - guard = length > 2 ? sources[2] : undefined, - thisArg = length > 1 ? sources[length - 1] : undefined; - - if (typeof customizer == 'function') { - customizer = bindCallback(customizer, thisArg, 5); - length -= 2; - } else { - customizer = typeof thisArg == 'function' ? thisArg : undefined; - length -= (customizer ? 1 : 0); - } - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - var length = collection ? getLength(collection) : 0; - if (!isLength(length)) { - return eachFunc(collection, iteratee); - } - var index = fromRight ? length : -1, - iterable = toObject(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for `_.forIn` or `_.forInRight`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var iterable = toObject(object), - props = keysFunc(object), - length = props.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length)) { - var key = props[index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that wraps `func` and invokes it with the `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to bind. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new bound function. - */ - function createBindWrapper(func, thisArg) { - var Ctor = createCtorWrapper(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(thisArg, arguments); - } - return wrapper; - } - - /** - * Creates a `Set` cache object to optimize linear searches of large arrays. - * - * @private - * @param {Array} [values] The values to cache. - * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`. - */ - function createCache(values) { - return (nativeCreate && Set) ? new SetCache(values) : null; - } - - /** - * Creates a function that produces compound words out of the words in a - * given string. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ - function createCompounder(callback) { - return function(string) { - var index = -1, - array = words(deburr(string)), - length = array.length, - result = ''; - - while (++index < length) { - result = callback(result, array[index], index); - } - return result; - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtorWrapper(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. - // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a `_.curry` or `_.curryRight` function. - * - * @private - * @param {boolean} flag The curry bit flag. - * @returns {Function} Returns the new curry function. - */ - function createCurry(flag) { - function curryFunc(func, arity, guard) { - if (guard && isIterateeCall(func, arity, guard)) { - arity = undefined; - } - var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryFunc.placeholder; - return result; - } - return curryFunc; - } - - /** - * Creates a `_.defaults` or `_.defaultsDeep` function. - * - * @private - * @param {Function} assigner The function to assign values. - * @param {Function} customizer The function to customize assigned values. - * @returns {Function} Returns the new defaults function. - */ - function createDefaults(assigner, customizer) { - return restParam(function(args) { - var object = args[0]; - if (object == null) { - return object; - } - args.push(customizer); - return assigner.apply(undefined, args); - }); - } - - /** - * Creates a `_.max` or `_.min` function. - * - * @private - * @param {Function} comparator The function used to compare values. - * @param {*} exValue The initial extremum value. - * @returns {Function} Returns the new extremum function. - */ - function createExtremum(comparator, exValue) { - return function(collection, iteratee, thisArg) { - if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { - iteratee = undefined; - } - iteratee = getCallback(iteratee, thisArg, 3); - if (iteratee.length == 1) { - collection = isArray(collection) ? collection : toIterable(collection); - var result = arrayExtremum(collection, iteratee, comparator, exValue); - if (!(collection.length && result === exValue)) { - return result; - } - } - return baseExtremum(collection, iteratee, comparator, exValue); - }; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new find function. - */ - function createFind(eachFunc, fromRight) { - return function(collection, predicate, thisArg) { - predicate = getCallback(predicate, thisArg, 3); - if (isArray(collection)) { - var index = baseFindIndex(collection, predicate, fromRight); - return index > -1 ? collection[index] : undefined; - } - return baseFind(collection, predicate, eachFunc); - }; - } - - /** - * Creates a `_.findIndex` or `_.findLastIndex` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new find function. - */ - function createFindIndex(fromRight) { - return function(array, predicate, thisArg) { - if (!(array && array.length)) { - return -1; - } - predicate = getCallback(predicate, thisArg, 3); - return baseFindIndex(array, predicate, fromRight); - }; - } - - /** - * Creates a `_.findKey` or `_.findLastKey` function. - * - * @private - * @param {Function} objectFunc The function to iterate over an object. - * @returns {Function} Returns the new find function. - */ - function createFindKey(objectFunc) { - return function(object, predicate, thisArg) { - predicate = getCallback(predicate, thisArg, 3); - return baseFind(object, predicate, objectFunc, true); - }; - } - - /** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ - function createFlow(fromRight) { - return function() { - var wrapper, - length = arguments.length, - index = fromRight ? length : -1, - leftIndex = 0, - funcs = Array(length); - - while ((fromRight ? index-- : ++index < length)) { - var func = funcs[leftIndex++] = arguments[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') { - wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? -1 : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }; - } - - /** - * Creates a function for `_.forEach` or `_.forEachRight`. - * - * @private - * @param {Function} arrayFunc The function to iterate over an array. - * @param {Function} eachFunc The function to iterate over a collection. - * @returns {Function} Returns the new each function. - */ - function createForEach(arrayFunc, eachFunc) { - return function(collection, iteratee, thisArg) { - return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) - ? arrayFunc(collection, iteratee) - : eachFunc(collection, bindCallback(iteratee, thisArg, 3)); - }; - } - - /** - * Creates a function for `_.forIn` or `_.forInRight`. - * - * @private - * @param {Function} objectFunc The function to iterate over an object. - * @returns {Function} Returns the new each function. - */ - function createForIn(objectFunc) { - return function(object, iteratee, thisArg) { - if (typeof iteratee != 'function' || thisArg !== undefined) { - iteratee = bindCallback(iteratee, thisArg, 3); - } - return objectFunc(object, iteratee, keysIn); - }; - } - - /** - * Creates a function for `_.forOwn` or `_.forOwnRight`. - * - * @private - * @param {Function} objectFunc The function to iterate over an object. - * @returns {Function} Returns the new each function. - */ - function createForOwn(objectFunc) { - return function(object, iteratee, thisArg) { - if (typeof iteratee != 'function' || thisArg !== undefined) { - iteratee = bindCallback(iteratee, thisArg, 3); - } - return objectFunc(object, iteratee); - }; - } - - /** - * Creates a function for `_.mapKeys` or `_.mapValues`. - * - * @private - * @param {boolean} [isMapKeys] Specify mapping keys instead of values. - * @returns {Function} Returns the new map function. - */ - function createObjectMapper(isMapKeys) { - return function(object, iteratee, thisArg) { - var result = {}; - iteratee = getCallback(iteratee, thisArg, 3); - - baseForOwn(object, function(value, key, object) { - var mapped = iteratee(value, key, object); - key = isMapKeys ? mapped : key; - value = isMapKeys ? value : mapped; - result[key] = value; - }); - return result; - }; - } - - /** - * Creates a function for `_.padLeft` or `_.padRight`. - * - * @private - * @param {boolean} [fromRight] Specify padding from the right. - * @returns {Function} Returns the new pad function. - */ - function createPadDir(fromRight) { - return function(string, length, chars) { - string = baseToString(string); - return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string); - }; - } - - /** - * Creates a `_.partial` or `_.partialRight` function. - * - * @private - * @param {boolean} flag The partial bit flag. - * @returns {Function} Returns the new partial function. - */ - function createPartial(flag) { - var partialFunc = restParam(function(func, partials) { - var holders = replaceHolders(partials, partialFunc.placeholder); - return createWrapper(func, flag, undefined, partials, holders); - }); - return partialFunc; - } - - /** - * Creates a function for `_.reduce` or `_.reduceRight`. - * - * @private - * @param {Function} arrayFunc The function to iterate over an array. - * @param {Function} eachFunc The function to iterate over a collection. - * @returns {Function} Returns the new each function. - */ - function createReduce(arrayFunc, eachFunc) { - return function(collection, iteratee, accumulator, thisArg) { - var initFromArray = arguments.length < 3; - return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) - ? arrayFunc(collection, iteratee, accumulator, initFromArray) - : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc); - }; - } - - /** - * Creates a function that wraps `func` and invokes it with optional `this` - * binding of, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to reference. - * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & ARY_FLAG, - isBind = bitmask & BIND_FLAG, - isBindKey = bitmask & BIND_KEY_FLAG, - isCurry = bitmask & CURRY_FLAG, - isCurryBound = bitmask & CURRY_BOUND_FLAG, - isCurryRight = bitmask & CURRY_RIGHT_FLAG, - Ctor = isBindKey ? undefined : createCtorWrapper(func); - - function wrapper() { - // Avoid `arguments` object use disqualifying optimizations by - // converting it to an array before providing it to other functions. - var length = arguments.length, - index = length, - args = Array(length); - - while (index--) { - args[index] = arguments[index]; - } - if (partials) { - args = composeArgs(args, partials, holders); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight); - } - if (isCurry || isCurryRight) { - var placeholder = wrapper.placeholder, - argsHolders = replaceHolders(args, placeholder); - - length -= argsHolders.length; - if (length < arity) { - var newArgPos = argPos ? arrayCopy(argPos) : undefined, - newArity = nativeMax(arity - length, 0), - newsHolders = isCurry ? argsHolders : undefined, - newHoldersRight = isCurry ? undefined : argsHolders, - newPartials = isCurry ? args : undefined, - newPartialsRight = isCurry ? undefined : args; - - bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); - - if (!isCurryBound) { - bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); - } - var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity], - result = createHybridWrapper.apply(undefined, newData); - - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return result; - } - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - if (argPos) { - args = reorder(args, argPos); - } - if (isAry && ary < args.length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtorWrapper(func); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - - /** - * Creates the padding required for `string` based on the given `length`. - * The `chars` string is truncated if the number of characters exceeds `length`. - * - * @private - * @param {string} string The string to create padding for. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the pad for `string`. - */ - function createPadding(string, length, chars) { - var strLength = string.length; - length = +length; - - if (strLength >= length || !nativeIsFinite(length)) { - return ''; - } - var padLength = length - strLength; - chars = chars == null ? ' ' : (chars + ''); - return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength); - } - - /** - * Creates a function that wraps `func` and invokes it with the optional `this` - * binding of `thisArg` and the `partials` prepended to those provided to - * the wrapper. - * - * @private - * @param {Function} func The function to partially apply arguments to. - * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to the new function. - * @returns {Function} Returns the new bound function. - */ - function createPartialWrapper(func, bitmask, thisArg, partials) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtorWrapper(func); - - function wrapper() { - // Avoid `arguments` object use disqualifying optimizations by - // converting it to an array before providing it `func`. - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength); - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * Creates a `_.ceil`, `_.floor`, or `_.round` function. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - precision = precision === undefined ? 0 : (+precision || 0); - if (precision) { - precision = pow(10, precision); - return func(number * precision) / precision; - } - return func(number); - }; - } - - /** - * Creates a `_.sortedIndex` or `_.sortedLastIndex` function. - * - * @private - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {Function} Returns the new index function. - */ - function createSortedIndex(retHighest) { - return function(array, value, iteratee, thisArg) { - var callback = getCallback(iteratee); - return (iteratee == null && callback === baseCallback) - ? binaryIndex(array, value, retHighest) - : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest); - }; - } - - /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to reference. - * @param {number} bitmask The bitmask of flags. - * The bitmask may be composed of the following flags: - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - length -= (holders ? holders.length : 0); - if (bitmask & PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func), - newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity]; - - if (data) { - mergeData(newData, data); - bitmask = newData[1]; - arity = newData[9]; - } - newData[9] = arity == null - ? (isBindKey ? 0 : func.length) - : (nativeMax(arity - length, 0) || 0); - - if (bitmask == BIND_FLAG) { - var result = createBindWrapper(newData[0], newData[2]); - } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) { - result = createPartialWrapper.apply(undefined, newData); - } else { - result = createHybridWrapper.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setter(result, newData); - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparing arrays. - * @param {boolean} [isLoose] Specify performing partial comparisons. - * @param {Array} [stackA] Tracks traversed `value` objects. - * @param {Array} [stackB] Tracks traversed `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) { - var index = -1, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isLoose && othLength > arrLength)) { - return false; - } - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index], - result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined; - - if (result !== undefined) { - if (result) { - continue; - } - return false; - } - // Recursively compare arrays (susceptible to call stack limits). - if (isLoose) { - if (!arraySome(other, function(othValue) { - return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); - })) { - return false; - } - } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) { - return false; - } - } - return true; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag) { - switch (tag) { - case boolTag: - case dateTag: - // Coerce dates and booleans to numbers, dates to milliseconds and booleans - // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. - return +object == +other; - - case errorTag: - return object.name == other.name && object.message == other.message; - - case numberTag: - // Treat `NaN` vs. `NaN` as equal. - return (object != +object) - ? other != +other - : object == +other; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings primitives and string - // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. - return object == (other + ''); - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparing values. - * @param {boolean} [isLoose] Specify performing partial comparisons. - * @param {Array} [stackA] Tracks traversed `value` objects. - * @param {Array} [stackB] Tracks traversed `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { - var objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isLoose) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - var skipCtor = isLoose; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key], - result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined; - - // Recursively compare objects (susceptible to call stack limits). - if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) { - return false; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (!skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - return false; - } - } - return true; - } - - /** - * Gets the appropriate "callback" function. If the `_.callback` method is - * customized this function returns the custom method, otherwise it returns - * the `baseCallback` function. If arguments are provided the chosen function - * is invoked with them and its result is returned. - * - * @private - * @returns {Function} Returns the chosen function or its result. - */ - function getCallback(func, thisArg, argCount) { - var result = lodash.callback || callback; - result = result === callback ? baseCallback : result; - return argCount ? result(func, thisArg, argCount) : result; - } - - /** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - - /** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ - function getFuncName(func) { - var result = func.name, - array = realNames[result], - length = array ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } - - /** - * Gets the appropriate "indexOf" function. If the `_.indexOf` method is - * customized this function returns the custom method, otherwise it returns - * the `baseIndexOf` function. If arguments are provided the chosen function - * is invoked with them and its result is returned. - * - * @private - * @returns {Function|number} Returns the chosen function or its result. - */ - function getIndexOf(collection, target, fromIndex) { - var result = lodash.indexOf || indexOf; - result = result === indexOf ? baseIndexOf : result; - return collection ? result(collection, target, fromIndex) : result; - } - - /** - * Gets the "length" property value of `object`. - * - * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) - * that affects Safari on at least iOS 8.1-8.3 ARM64. - * - * @private - * @param {Object} object The object to query. - * @returns {*} Returns the "length" value. - */ - var getLength = baseProperty('length'); - - /** - * Gets the propery names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ - function getMatchData(object) { - var result = pairs(object), - length = result.length; - - while (length--) { - result[length][2] = isStrictComparable(result[length][1]); - } - return result; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = object == null ? undefined : object[key]; - return isNative(value) ? value : undefined; - } - - /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; - } - - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add array properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - var Ctor = object.constructor; - if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { - Ctor = Object; - } - return new Ctor; - } - - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return bufferClone(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - var buffer = object.buffer; - return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - var result = new Ctor(object.source, reFlags.exec(object)); - result.lastIndex = object.lastIndex; - } - return result; - } - - /** - * Invokes the method at `path` on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ - function invokePath(object, path, args) { - if (object != null && !isKey(path, object)) { - path = toPath(path); - object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - path = last(path); - } - var func = object == null ? object : object[path]; - return func == null ? undefined : func.apply(object, args); - } - - /** - * Checks if `value` is array-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - */ - function isArrayLike(value) { - return value != null && isLength(getLength(value)); - } - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; - length = length == null ? MAX_SAFE_INTEGER : length; - return value > -1 && value % 1 == 0 && value < length; - } - - /** - * Checks if the provided arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object)) { - var other = object[index]; - return value === value ? (value === other) : (other !== other); - } - return false; - } - - /** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ - function isKey(value, object) { - var type = typeof value; - if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { - return true; - } - if (isArray(value)) { - return false; - } - var result = !reIsDeepProp.test(value); - return result || (object != null && value in toObject(object)); - } - - /** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. - */ - function isLaziable(func) { - var funcName = getFuncName(func); - if (!(funcName in LazyWrapper.prototype)) { - return false; - } - var other = lodash[funcName]; - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - */ - function isLength(value) { - return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } - - /** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers required to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg` - * augment function arguments, making the order in which they are executed important, - * preventing the merging of metadata. However, we make an exception for a safe - * common case where curried functions have `_.ary` and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < ARY_FLAG; - - var isCombo = - (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) || - (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) || - (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value); - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]); - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value); - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]); - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = arrayCopy(value); - } - // Use source `ary` if it's smaller. - if (srcBitmask & ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; - } - - /** - * Used by `_.defaultsDeep` to customize its `_.merge` use. - * - * @private - * @param {*} objectValue The destination object property value. - * @param {*} sourceValue The source object property value. - * @returns {*} Returns the value to assign to the destination object. - */ - function mergeDefaults(objectValue, sourceValue) { - return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults); - } - - /** - * A specialized version of `_.pick` which picks `object` properties specified - * by `props`. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property names to pick. - * @returns {Object} Returns the new object. - */ - function pickByArray(object, props) { - object = toObject(object); - - var index = -1, - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index]; - if (key in object) { - result[key] = object[key]; - } - } - return result; - } - - /** - * A specialized version of `_.pick` which picks `object` properties `predicate` - * returns truthy for. - * - * @private - * @param {Object} object The source object. - * @param {Function} predicate The function invoked per iteration. - * @returns {Object} Returns the new object. - */ - function pickByCallback(object, predicate) { - var result = {}; - baseForIn(object, function(value, key, object) { - if (predicate(value, key, object)) { - result[key] = value; - } - }); - return result; - } - - /** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = arrayCopy(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; - } - - /** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity function - * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var setData = (function() { - var count = 0, - lastCalled = 0; - - return function(key, value) { - var stamp = now(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return key; - } - } else { - count = 0; - } - return baseSetData(key, value); - }; - }()); - - /** - * A fallback implementation of `Object.keys` which creates an array of the - * own enumerable property names of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function shimKeys(object) { - var props = keysIn(object), - propsLength = props.length, - length = propsLength && object.length; - - var allowIndexes = !!length && isLength(length) && - (isArray(object) || isArguments(object)); - - var index = -1, - result = []; - - while (++index < propsLength) { - var key = props[index]; - if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { - result.push(key); - } - } - return result; - } - - /** - * Converts `value` to an array-like object if it's not one. - * - * @private - * @param {*} value The value to process. - * @returns {Array|Object} Returns the array-like object. - */ - function toIterable(value) { - if (value == null) { - return []; - } - if (!isArrayLike(value)) { - return values(value); - } - return isObject(value) ? value : Object(value); - } - - /** - * Converts `value` to an object if it's not one. - * - * @private - * @param {*} value The value to process. - * @returns {Object} Returns the object. - */ - function toObject(value) { - return isObject(value) ? value : Object(value); - } - - /** - * Converts `value` to property path array if it's not one. - * - * @private - * @param {*} value The value to process. - * @returns {Array} Returns the property path array. - */ - function toPath(value) { - if (isArray(value)) { - return value; - } - var result = []; - baseToString(value).replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - } - - /** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ - function wrapperClone(wrapper) { - return wrapper instanceof LazyWrapper - ? wrapper.clone() - : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of elements split into groups the length of `size`. - * If `collection` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Array} Returns the new array containing chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ - function chunk(array, size, guard) { - if (guard ? isIterateeCall(array, size, guard) : size == null) { - size = 1; - } else { - size = nativeMax(nativeFloor(size) || 1, 1); - } - var index = 0, - length = array ? array.length : 0, - resIndex = -1, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[++resIndex] = baseSlice(array, index, (index += size)); - } - return result; - } - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - resIndex = -1, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[++resIndex] = value; - } - } - return result; - } - - /** - * Creates an array of unique `array` values not included in the other - * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The arrays of values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.difference([1, 2, 3], [4, 2]); - * // => [1, 3] - */ - var difference = restParam(function(array, values) { - return (isObjectLike(array) && isArrayLike(array)) - ? baseDifference(array, baseFlatten(values, false, true)) - : []; - }); - - /** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function drop(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (guard ? isIterateeCall(array, n, guard) : n == null) { - n = 1; - } - return baseSlice(array, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function dropRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (guard ? isIterateeCall(array, n, guard) : n == null) { - n = 1; - } - n = length - (+n || 0); - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * bound to `thisArg` and invoked with three arguments: (value, index, array). - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that match the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRightWhile([1, 2, 3], function(n) { - * return n > 1; - * }); - * // => [1] - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * // using the `_.matches` callback shorthand - * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); - * // => ['barney', 'fred'] - * - * // using the `_.matchesProperty` callback shorthand - * _.pluck(_.dropRightWhile(users, 'active', false), 'user'); - * // => ['barney'] - * - * // using the `_.property` callback shorthand - * _.pluck(_.dropRightWhile(users, 'active'), 'user'); - * // => ['barney', 'fred', 'pebbles'] - */ - function dropRightWhile(array, predicate, thisArg) { - return (array && array.length) - ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true) - : []; - } - - /** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * bound to `thisArg` and invoked with three arguments: (value, index, array). - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropWhile([1, 2, 3], function(n) { - * return n < 3; - * }); - * // => [3] - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * // using the `_.matches` callback shorthand - * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user'); - * // => ['fred', 'pebbles'] - * - * // using the `_.matchesProperty` callback shorthand - * _.pluck(_.dropWhile(users, 'active', false), 'user'); - * // => ['pebbles'] - * - * // using the `_.property` callback shorthand - * _.pluck(_.dropWhile(users, 'active'), 'user'); - * // => ['barney', 'fred', 'pebbles'] - */ - function dropWhile(array, predicate, thisArg) { - return (array && array.length) - ? baseWhile(array, getCallback(predicate, thisArg, 3), true) - : []; - } - - /** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8], '*', 1, 2); - * // => [4, '*', 8] - */ - function fill(array, value, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(chr) { - * return chr.user == 'barney'; - * }); - * // => 0 - * - * // using the `_.matches` callback shorthand - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // using the `_.matchesProperty` callback shorthand - * _.findIndex(users, 'active', false); - * // => 0 - * - * // using the `_.property` callback shorthand - * _.findIndex(users, 'active'); - * // => 2 - */ - var findIndex = createFindIndex(); - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(chr) { - * return chr.user == 'pebbles'; - * }); - * // => 2 - * - * // using the `_.matches` callback shorthand - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // using the `_.matchesProperty` callback shorthand - * _.findLastIndex(users, 'active', false); - * // => 2 - * - * // using the `_.property` callback shorthand - * _.findLastIndex(users, 'active'); - * // => 0 - */ - var findLastIndex = createFindIndex(true); - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @alias head - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.first([1, 2, 3]); - * // => 1 - * - * _.first([]); - * // => undefined - */ - function first(array) { - return array ? array[0] : undefined; - } - - /** - * Flattens a nested array. If `isDeep` is `true` the array is recursively - * flattened, otherwise it is only flattened a single level. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to flatten. - * @param {boolean} [isDeep] Specify a deep flatten. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, 3, [4]]]); - * // => [1, 2, 3, [4]] - * - * // using `isDeep` - * _.flatten([1, [2, 3, [4]]], true); - * // => [1, 2, 3, 4] - */ - function flatten(array, isDeep, guard) { - var length = array ? array.length : 0; - if (guard && isIterateeCall(array, isDeep, guard)) { - isDeep = false; - } - return length ? baseFlatten(array, isDeep) : []; - } - - /** - * Recursively flattens a nested array. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to recursively flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, 3, [4]]]); - * // => [1, 2, 3, 4] - */ - function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, true) : []; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it is used as the offset - * from the end of `array`. If `array` is sorted providing `true` for `fromIndex` - * performs a faster binary search. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {boolean|number} [fromIndex=0] The index to search from or `true` - * to perform a binary search on a sorted array. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // using `fromIndex` - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - * - * // performing a binary search - * _.indexOf([1, 1, 2, 2], 2, true); - * // => 2 - */ - function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - if (typeof fromIndex == 'number') { - fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; - } else if (fromIndex) { - var index = binaryIndex(array, value); - if (index < length && - (value === value ? (value === array[index]) : (array[index] !== array[index]))) { - return index; - } - return -1; - } - return baseIndexOf(array, value, fromIndex || 0); - } - - /** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ - function initial(array) { - return dropRight(array, 1); - } - - /** - * Creates an array of unique values that are included in all of the provided - * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of shared values. - * @example - * _.intersection([1, 2], [4, 2], [2, 1]); - * // => [2] - */ - var intersection = restParam(function(arrays) { - var othLength = arrays.length, - othIndex = othLength, - caches = Array(length), - indexOf = getIndexOf(), - isCommon = indexOf == baseIndexOf, - result = []; - - while (othIndex--) { - var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : []; - caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null; - } - var array = arrays[0], - index = -1, - length = array ? array.length : 0, - seen = caches[0]; - - outer: - while (++index < length) { - value = array[index]; - if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) { - var othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) { - continue outer; - } - } - if (seen) { - seen.push(value); - } - result.push(value); - } - } - return result; - }); - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; - } - - /** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {boolean|number} [fromIndex=array.length-1] The index to search from - * or `true` to perform a binary search on a sorted array. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // using `fromIndex` - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - * - * // performing a binary search - * _.lastIndexOf([1, 1, 2, 2], 2, true); - * // => 3 - */ - function lastIndexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length; - if (typeof fromIndex == 'number') { - index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1; - } else if (fromIndex) { - index = binaryIndex(array, value, true) - 1; - var other = array[index]; - if (value === value ? (value === other) : (other !== other)) { - return index; - } - return -1; - } - if (value !== value) { - return indexOfNaN(array, index, true); - } - while (index--) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * Removes all provided values from `array` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.without`, this method mutates `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to modify. - * @param {...*} [values] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3, 1, 2, 3]; - * - * _.pull(array, 2, 3); - * console.log(array); - * // => [1, 1] - */ - function pull() { - var args = arguments, - array = args[0]; - - if (!(array && array.length)) { - return array; - } - var index = 0, - indexOf = getIndexOf(), - length = args.length; - - while (++index < length) { - var fromIndex = 0, - value = args[index]; - - while ((fromIndex = indexOf(array, value, fromIndex)) > -1) { - splice.call(array, fromIndex, 1); - } - } - return array; - } - - /** - * Removes elements from `array` corresponding to the given indexes and returns - * an array of the removed elements. Indexes may be specified as an array of - * indexes or as individual arguments. - * - * **Note:** Unlike `_.at`, this method mutates `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to modify. - * @param {...(number|number[])} [indexes] The indexes of elements to remove, - * specified as individual indexes or arrays of indexes. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [5, 10, 15, 20]; - * var evens = _.pullAt(array, 1, 3); - * - * console.log(array); - * // => [5, 15] - * - * console.log(evens); - * // => [10, 20] - */ - var pullAt = restParam(function(array, indexes) { - indexes = baseFlatten(indexes); - - var result = baseAt(array, indexes); - basePullAt(array, indexes.sort(baseCompareAscending)); - return result; - }); - - /** - * Removes all elements from `array` that `predicate` returns truthy for - * and returns an array of the removed elements. The predicate is bound to - * `thisArg` and invoked with three arguments: (value, index, array). - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * **Note:** Unlike `_.filter`, this method mutates `array`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to modify. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4]; - * var evens = _.remove(array, function(n) { - * return n % 2 == 0; - * }); - * - * console.log(array); - * // => [1, 3] - * - * console.log(evens); - * // => [2, 4] - */ - function remove(array, predicate, thisArg) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, - indexes = [], - length = array.length; - - predicate = getCallback(predicate, thisArg, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } - - /** - * Gets all but the first element of `array`. - * - * @static - * @memberOf _ - * @alias tail - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.rest([1, 2, 3]); - * // => [2, 3] - */ - function rest(array) { - return drop(array, 1); - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of `Array#slice` to support node - * lists in IE < 9 and to ensure dense arrays are returned. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - return baseSlice(array, start, end); - } - - /** - * Uses a binary search to determine the lowest index at which `value` should - * be inserted into `array` in order to maintain its sort order. If an iteratee - * function is provided it is invoked for `value` and each element of `array` - * to compute their sort ranking. The iteratee is bound to `thisArg` and - * invoked with one argument; (value). - * - * If a property name is provided for `iteratee` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `iteratee` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([30, 50], 40); - * // => 1 - * - * _.sortedIndex([4, 4, 5, 5], 5); - * // => 2 - * - * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } }; - * - * // using an iteratee function - * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) { - * return this.data[word]; - * }, dict); - * // => 1 - * - * // using the `_.property` callback shorthand - * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); - * // => 1 - */ - var sortedIndex = createSortedIndex(); - - /** - * This method is like `_.sortedIndex` except that it returns the highest - * index at which `value` should be inserted into `array` in order to - * maintain its sort order. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedLastIndex([4, 4, 5, 5], 5); - * // => 4 - */ - var sortedLastIndex = createSortedIndex(true); - - /** - * Creates a slice of `array` with `n` elements taken from the beginning. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.take([1, 2, 3]); - * // => [1] - * - * _.take([1, 2, 3], 2); - * // => [1, 2] - * - * _.take([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.take([1, 2, 3], 0); - * // => [] - */ - function take(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (guard ? isIterateeCall(array, n, guard) : n == null) { - n = 1; - } - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` with `n` elements taken from the end. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRight([1, 2, 3]); - * // => [3] - * - * _.takeRight([1, 2, 3], 2); - * // => [2, 3] - * - * _.takeRight([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.takeRight([1, 2, 3], 0); - * // => [] - */ - function takeRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (guard ? isIterateeCall(array, n, guard) : n == null) { - n = 1; - } - n = length - (+n || 0); - return baseSlice(array, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` with elements taken from the end. Elements are - * taken until `predicate` returns falsey. The predicate is bound to `thisArg` - * and invoked with three arguments: (value, index, array). - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRightWhile([1, 2, 3], function(n) { - * return n > 1; - * }); - * // => [2, 3] - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * // using the `_.matches` callback shorthand - * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); - * // => ['pebbles'] - * - * // using the `_.matchesProperty` callback shorthand - * _.pluck(_.takeRightWhile(users, 'active', false), 'user'); - * // => ['fred', 'pebbles'] - * - * // using the `_.property` callback shorthand - * _.pluck(_.takeRightWhile(users, 'active'), 'user'); - * // => [] - */ - function takeRightWhile(array, predicate, thisArg) { - return (array && array.length) - ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true) - : []; - } - - /** - * Creates a slice of `array` with elements taken from the beginning. Elements - * are taken until `predicate` returns falsey. The predicate is bound to - * `thisArg` and invoked with three arguments: (value, index, array). - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to query. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeWhile([1, 2, 3], function(n) { - * return n < 3; - * }); - * // => [1, 2] - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false}, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * // using the `_.matches` callback shorthand - * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user'); - * // => ['barney'] - * - * // using the `_.matchesProperty` callback shorthand - * _.pluck(_.takeWhile(users, 'active', false), 'user'); - * // => ['barney', 'fred'] - * - * // using the `_.property` callback shorthand - * _.pluck(_.takeWhile(users, 'active'), 'user'); - * // => [] - */ - function takeWhile(array, predicate, thisArg) { - return (array && array.length) - ? baseWhile(array, getCallback(predicate, thisArg, 3)) - : []; - } - - /** - * Creates an array of unique values, in order, from all of the provided arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([1, 2], [4, 2], [2, 1]); - * // => [1, 2, 4] - */ - var union = restParam(function(arrays) { - return baseUniq(baseFlatten(arrays, false, true)); - }); - - /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurence of each element - * is kept. Providing `true` for `isSorted` performs a faster search algorithm - * for sorted arrays. If an iteratee function is provided it is invoked for - * each element in the array to generate the criterion by which uniqueness - * is computed. The `iteratee` is bound to `thisArg` and invoked with three - * arguments: (value, index, array). - * - * If a property name is provided for `iteratee` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `iteratee` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @alias unique - * @category Array - * @param {Array} array The array to inspect. - * @param {boolean} [isSorted] Specify the array is sorted. - * @param {Function|Object|string} [iteratee] The function invoked per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Array} Returns the new duplicate-value-free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - * - * // using `isSorted` - * _.uniq([1, 1, 2], true); - * // => [1, 2] - * - * // using an iteratee function - * _.uniq([1, 2.5, 1.5, 2], function(n) { - * return this.floor(n); - * }, Math); - * // => [1, 2.5] - * - * // using the `_.property` callback shorthand - * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniq(array, isSorted, iteratee, thisArg) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (isSorted != null && typeof isSorted != 'boolean') { - thisArg = iteratee; - iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted; - isSorted = false; - } - var callback = getCallback(); - if (!(iteratee == null && callback === baseCallback)) { - iteratee = callback(iteratee, thisArg, 3); - } - return (isSorted && getIndexOf() == baseIndexOf) - ? sortedUniq(array, iteratee) - : baseUniq(array, iteratee); - } - - /** - * This method is like `_.zip` except that it accepts an array of grouped - * elements and creates an array regrouping the elements to their pre-zip - * configuration. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array of grouped elements to process. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); - * // => [['fred', 30, true], ['barney', 40, false]] - * - * _.unzip(zipped); - * // => [['fred', 'barney'], [30, 40], [true, false]] - */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var index = -1, - length = 0; - - array = arrayFilter(array, function(group) { - if (isArrayLike(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - var result = Array(length); - while (++index < length) { - result[index] = arrayMap(array, baseProperty(index)); - } - return result; - } - - /** - * This method is like `_.unzip` except that it accepts an iteratee to specify - * how regrouped values should be combined. The `iteratee` is bound to `thisArg` - * and invoked with four arguments: (accumulator, value, index, group). - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array of grouped elements to process. - * @param {Function} [iteratee] The function to combine regrouped values. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip([1, 2], [10, 20], [100, 200]); - * // => [[1, 10, 100], [2, 20, 200]] - * - * _.unzipWith(zipped, _.add); - * // => [3, 30, 300] - */ - function unzipWith(array, iteratee, thisArg) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - iteratee = bindCallback(iteratee, thisArg, 4); - return arrayMap(result, function(group) { - return arrayReduce(group, iteratee, undefined, true); - }); - } - - /** - * Creates an array excluding all provided values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @category Array - * @param {Array} array The array to filter. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.without([1, 2, 1, 3], 1, 2); - * // => [3] - */ - var without = restParam(function(array, values) { - return isArrayLike(array) - ? baseDifference(array, values) - : []; - }); - - /** - * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) - * of the provided arrays. - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of values. - * @example - * - * _.xor([1, 2], [4, 2]); - * // => [1, 4] - */ - function xor() { - var index = -1, - length = arguments.length; - - while (++index < length) { - var array = arguments[index]; - if (isArrayLike(array)) { - var result = result - ? arrayPush(baseDifference(result, array), baseDifference(array, result)) - : array; - } - } - return result ? baseUniq(result) : []; - } - - /** - * Creates an array of grouped elements, the first of which contains the first - * elements of the given arrays, the second of which contains the second elements - * of the given arrays, and so on. - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zip(['fred', 'barney'], [30, 40], [true, false]); - * // => [['fred', 30, true], ['barney', 40, false]] - */ - var zip = restParam(unzip); - - /** - * The inverse of `_.pairs`; this method returns an object composed from arrays - * of property names and values. Provide either a single two dimensional array, - * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names - * and one of corresponding values. - * - * @static - * @memberOf _ - * @alias object - * @category Array - * @param {Array} props The property names. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject([['fred', 30], ['barney', 40]]); - * // => { 'fred': 30, 'barney': 40 } - * - * _.zipObject(['fred', 'barney'], [30, 40]); - * // => { 'fred': 30, 'barney': 40 } - */ - function zipObject(props, values) { - var index = -1, - length = props ? props.length : 0, - result = {}; - - if (length && !values && !isArray(props[0])) { - values = []; - } - while (++index < length) { - var key = props[index]; - if (values) { - result[key] = values[index]; - } else if (key) { - result[key[0]] = key[1]; - } - } - return result; - } - - /** - * This method is like `_.zip` except that it accepts an iteratee to specify - * how grouped values should be combined. The `iteratee` is bound to `thisArg` - * and invoked with four arguments: (accumulator, value, index, group). - * - * @static - * @memberOf _ - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @param {Function} [iteratee] The function to combine grouped values. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zipWith([1, 2], [10, 20], [100, 200], _.add); - * // => [111, 222] - */ - var zipWith = restParam(function(arrays) { - var length = arrays.length, - iteratee = length > 2 ? arrays[length - 2] : undefined, - thisArg = length > 1 ? arrays[length - 1] : undefined; - - if (length > 2 && typeof iteratee == 'function') { - length -= 2; - } else { - iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined; - thisArg = undefined; - } - arrays.length = length; - return unzipWith(arrays, iteratee, thisArg); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object that wraps `value` with explicit method - * chaining enabled. - * - * @static - * @memberOf _ - * @category Chain - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _.chain(users) - * .sortBy('age') - * .map(function(chr) { - * return chr.user + ' is ' + chr.age; - * }) - * .first() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor is - * bound to `thisArg` and invoked with one argument; (value). The purpose of - * this method is to "tap into" a method chain in order to perform operations - * on intermediate results within the chain. - * - * @static - * @memberOf _ - * @category Chain - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @param {*} [thisArg] The `this` binding of `interceptor`. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor, thisArg) { - interceptor.call(thisArg, value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * - * @static - * @memberOf _ - * @category Chain - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @param {*} [thisArg] The `this` binding of `interceptor`. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor, thisArg) { - return interceptor.call(thisArg, value); - } - - /** - * Enables explicit method chaining on the wrapper object. - * - * @name chain - * @memberOf _ - * @category Chain - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // without explicit chaining - * _(users).first(); - * // => { 'user': 'barney', 'age': 36 } - * - * // with explicit chaining - * _(users).chain() - * .first() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chained sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @category Chain - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - - /** - * Creates a new array joining a wrapped array with any additional arrays - * and/or values. - * - * @name concat - * @memberOf _ - * @category Chain - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var wrapped = _(array).concat(2, [3], [[4]]); - * - * console.log(wrapped.value()); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - var wrapperConcat = restParam(function(values) { - values = baseFlatten(values); - return this.thru(function(array) { - return arrayConcat(isArray(array) ? array : [toObject(array)], values); - }); - }); - - /** - * Creates a clone of the chained sequence planting `value` as the wrapped value. - * - * @name plant - * @memberOf _ - * @category Chain - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).map(function(value) { - * return Math.pow(value, 2); - * }); - * - * var other = [3, 4]; - * var otherWrapped = wrapped.plant(other); - * - * otherWrapped.value(); - * // => [9, 16] - * - * wrapped.value(); - * // => [1, 4] - */ - function wrapperPlant(value) { - var result, - parent = this; - - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } - - /** - * Reverses the wrapped array so the first element becomes the last, the - * second element becomes the second to last, and so on. - * - * **Note:** This method mutates the wrapped array. - * - * @name reverse - * @memberOf _ - * @category Chain - * @returns {Object} Returns the new reversed `lodash` wrapper instance. - * @example - * - * var array = [1, 2, 3]; - * - * _(array).reverse().value() - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function wrapperReverse() { - var value = this.__wrapped__; - - var interceptor = function(value) { - return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse(); - }; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(interceptor); - } - - /** - * Produces the result of coercing the unwrapped value to a string. - * - * @name toString - * @memberOf _ - * @category Chain - * @returns {string} Returns the coerced string value. - * @example - * - * _([1, 2, 3]).toString(); - * // => '1,2,3' - */ - function wrapperToString() { - return (this.value() + ''); - } - - /** - * Executes the chained sequence to extract the unwrapped value. - * - * @name value - * @memberOf _ - * @alias run, toJSON, valueOf - * @category Chain - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of elements corresponding to the given keys, or indexes, - * of `collection`. Keys may be specified as individual arguments or as arrays - * of keys. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {...(number|number[]|string|string[])} [props] The property names - * or indexes of elements to pick, specified individually or in arrays. - * @returns {Array} Returns the new array of picked elements. - * @example - * - * _.at(['a', 'b', 'c'], [0, 2]); - * // => ['a', 'c'] - * - * _.at(['barney', 'fred', 'pebbles'], 0, 2); - * // => ['barney', 'pebbles'] - */ - var at = restParam(function(collection, props) { - return baseAt(collection, baseFlatten(props)); - }); - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` through `iteratee`. The corresponding value - * of each key is the number of times the key was returned by `iteratee`. - * The `iteratee` is bound to `thisArg` and invoked with three arguments: - * (value, index|key, collection). - * - * If a property name is provided for `iteratee` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `iteratee` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([4.3, 6.1, 6.4], function(n) { - * return Math.floor(n); - * }); - * // => { '4': 1, '6': 2 } - * - * _.countBy([4.3, 6.1, 6.4], function(n) { - * return this.floor(n); - * }, Math); - * // => { '4': 1, '6': 2 } - * - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); - }); - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * The predicate is bound to `thisArg` and invoked with three arguments: - * (value, index|key, collection). - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @alias all - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // using the `_.matches` callback shorthand - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // using the `_.matchesProperty` callback shorthand - * _.every(users, 'active', false); - * // => true - * - * // using the `_.property` callback shorthand - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, thisArg) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (thisArg && isIterateeCall(collection, predicate, thisArg)) { - predicate = undefined; - } - if (typeof predicate != 'function' || thisArg !== undefined) { - predicate = getCallback(predicate, thisArg, 3); - } - return func(collection, predicate); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is bound to `thisArg` and - * invoked with three arguments: (value, index|key, collection). - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @alias select - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {Array} Returns the new filtered array. - * @example - * - * _.filter([4, 5, 6], function(n) { - * return n % 2 == 0; - * }); - * // => [4, 6] - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // using the `_.matches` callback shorthand - * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user'); - * // => ['barney'] - * - * // using the `_.matchesProperty` callback shorthand - * _.pluck(_.filter(users, 'active', false), 'user'); - * // => ['fred'] - * - * // using the `_.property` callback shorthand - * _.pluck(_.filter(users, 'active'), 'user'); - * // => ['barney'] - */ - function filter(collection, predicate, thisArg) { - var func = isArray(collection) ? arrayFilter : baseFilter; - predicate = getCallback(predicate, thisArg, 3); - return func(collection, predicate); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is bound to `thisArg` and - * invoked with three arguments: (value, index|key, collection). - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @alias detect - * @category Collection - * @param {Array|Object|string} collection The collection to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.result(_.find(users, function(chr) { - * return chr.age < 40; - * }), 'user'); - * // => 'barney' - * - * // using the `_.matches` callback shorthand - * _.result(_.find(users, { 'age': 1, 'active': true }), 'user'); - * // => 'pebbles' - * - * // using the `_.matchesProperty` callback shorthand - * _.result(_.find(users, 'active', false), 'user'); - * // => 'fred' - * - * // using the `_.property` callback shorthand - * _.result(_.find(users, 'active'), 'user'); - * // => 'barney' - */ - var find = createFind(baseEach); - - /** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ - var findLast = createFind(baseEachRight, true); - - /** - * Performs a deep comparison between each element in `collection` and the - * source object, returning the first element that has equivalent property - * values. - * - * **Note:** This method supports comparing arrays, booleans, `Date` objects, - * numbers, `Object` objects, regexes, and strings. Objects are compared by - * their own, not inherited, enumerable properties. For comparing a single - * own or inherited property value see `_.matchesProperty`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to search. - * @param {Object} source The object of property values to match. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user'); - * // => 'barney' - * - * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user'); - * // => 'fred' - */ - function findWhere(collection, source) { - return find(collection, baseMatches(source)); - } - - /** - * Iterates over elements of `collection` invoking `iteratee` for each element. - * The `iteratee` is bound to `thisArg` and invoked with three arguments: - * (value, index|key, collection). Iteratee functions may exit iteration early - * by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" property - * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` - * may be used for object iteration. - * - * @static - * @memberOf _ - * @alias each - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Array|Object|string} Returns `collection`. - * @example - * - * _([1, 2]).forEach(function(n) { - * console.log(n); - * }).value(); - * // => logs each value from left to right and returns the array - * - * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) { - * console.log(n, key); - * }); - * // => logs each value-key pair and returns the object (iteration order is not guaranteed) - */ - var forEach = createForEach(arrayEach, baseEach); - - /** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @alias eachRight - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Array|Object|string} Returns `collection`. - * @example - * - * _([1, 2]).forEachRight(function(n) { - * console.log(n); - * }).value(); - * // => logs each value from right to left and returns the array - */ - var forEachRight = createForEach(arrayEachRight, baseEachRight); - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` through `iteratee`. The corresponding value - * of each key is an array of the elements responsible for generating the key. - * The `iteratee` is bound to `thisArg` and invoked with three arguments: - * (value, index|key, collection). - * - * If a property name is provided for `iteratee` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `iteratee` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([4.2, 6.1, 6.4], function(n) { - * return Math.floor(n); - * }); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * _.groupBy([4.2, 6.1, 6.4], function(n) { - * return this.floor(n); - * }, Math); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * // using the `_.property` callback shorthand - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - result[key] = [value]; - } - }); - - /** - * Checks if `value` is in `collection` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it is used as the offset - * from the end of `collection`. - * - * @static - * @memberOf _ - * @alias contains, include - * @category Collection - * @param {Array|Object|string} collection The collection to search. - * @param {*} target The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. - * @returns {boolean} Returns `true` if a matching element is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); - * // => true - * - * _.includes('pebbles', 'eb'); - * // => true - */ - function includes(collection, target, fromIndex, guard) { - var length = collection ? getLength(collection) : 0; - if (!isLength(length)) { - collection = values(collection); - length = collection.length; - } - if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { - fromIndex = 0; - } else { - fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0); - } - return (typeof collection == 'string' || !isArray(collection) && isString(collection)) - ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1) - : (!!length && getIndexOf(collection, target, fromIndex) > -1); - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` through `iteratee`. The corresponding value - * of each key is the last element responsible for generating the key. The - * iteratee function is bound to `thisArg` and invoked with three arguments: - * (value, index|key, collection). - * - * If a property name is provided for `iteratee` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `iteratee` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var keyData = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.indexBy(keyData, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - * - * _.indexBy(keyData, function(object) { - * return String.fromCharCode(object.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.indexBy(keyData, function(object) { - * return this.fromCharCode(object.code); - * }, String); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - */ - var indexBy = createAggregator(function(result, value, key) { - result[key] = value; - }); - - /** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `methodName` is a function it is - * invoked for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invoke([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - var invoke = restParam(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - isProp = isKey(path), - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); - result[++index] = func ? func.apply(value, args) : invokePath(value, path, args); - }); - return result; - }); - - /** - * Creates an array of values by running each element in `collection` through - * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three - * arguments: (value, index|key, collection). - * - * If a property name is provided for `iteratee` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `iteratee` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`, - * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`, - * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`, - * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`, - * `sum`, `uniq`, and `words` - * - * @static - * @memberOf _ - * @alias collect - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Array} Returns the new mapped array. - * @example - * - * function timesThree(n) { - * return n * 3; - * } - * - * _.map([1, 2], timesThree); - * // => [3, 6] - * - * _.map({ 'a': 1, 'b': 2 }, timesThree); - * // => [3, 6] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // using the `_.property` callback shorthand - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee, thisArg) { - var func = isArray(collection) ? arrayMap : baseMap; - iteratee = getCallback(iteratee, thisArg, 3); - return func(collection, iteratee); - } - - /** - * Creates an array of elements split into two groups, the first of which - * contains elements `predicate` returns truthy for, while the second of which - * contains elements `predicate` returns falsey for. The predicate is bound - * to `thisArg` and invoked with three arguments: (value, index|key, collection). - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {Array} Returns the array of grouped elements. - * @example - * - * _.partition([1, 2, 3], function(n) { - * return n % 2; - * }); - * // => [[1, 3], [2]] - * - * _.partition([1.2, 2.3, 3.4], function(n) { - * return this.floor(n) % 2; - * }, Math); - * // => [[1.2, 3.4], [2.3]] - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true }, - * { 'user': 'pebbles', 'age': 1, 'active': false } - * ]; - * - * var mapper = function(array) { - * return _.pluck(array, 'user'); - * }; - * - * // using the `_.matches` callback shorthand - * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper); - * // => [['pebbles'], ['barney', 'fred']] - * - * // using the `_.matchesProperty` callback shorthand - * _.map(_.partition(users, 'active', false), mapper); - * // => [['barney', 'pebbles'], ['fred']] - * - * // using the `_.property` callback shorthand - * _.map(_.partition(users, 'active'), mapper); - * // => [['fred'], ['barney', 'pebbles']] - */ - var partition = createAggregator(function(result, value, key) { - result[key ? 0 : 1].push(value); - }, function() { return [[], []]; }); - - /** - * Gets the property value of `path` from all elements in `collection`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Array|string} path The path of the property to pluck. - * @returns {Array} Returns the property values. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * _.pluck(users, 'user'); - * // => ['barney', 'fred'] - * - * var userIndex = _.indexBy(users, 'user'); - * _.pluck(userIndex, 'age'); - * // => [36, 40] (iteration order is not guaranteed) - */ - function pluck(collection, path) { - return map(collection, property(path)); - } - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` through `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not provided the first element of `collection` is used as the initial - * value. The `iteratee` is bound to `thisArg` and invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`, - * and `sortByOrder` - * - * @static - * @memberOf _ - * @alias foldl, inject - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {*} Returns the accumulated value. - * @example - * - * _.reduce([1, 2], function(total, n) { - * return total + n; - * }); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) { - * result[key] = n * 3; - * return result; - * }, {}); - * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed) - */ - var reduce = createReduce(arrayReduce, baseEach); - - /** - * This method is like `_.reduce` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @alias foldr - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {*} Returns the accumulated value. - * @example - * - * var array = [[0, 1], [2, 3], [4, 5]]; - * - * _.reduceRight(array, function(flattened, other) { - * return flattened.concat(other); - * }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - var reduceRight = createReduce(arrayReduceRight, baseEachRight); - - /** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {Array} Returns the new filtered array. - * @example - * - * _.reject([1, 2, 3, 4], function(n) { - * return n % 2 == 0; - * }); - * // => [1, 3] - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * // using the `_.matches` callback shorthand - * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user'); - * // => ['barney'] - * - * // using the `_.matchesProperty` callback shorthand - * _.pluck(_.reject(users, 'active', false), 'user'); - * // => ['fred'] - * - * // using the `_.property` callback shorthand - * _.pluck(_.reject(users, 'active'), 'user'); - * // => ['barney'] - */ - function reject(collection, predicate, thisArg) { - var func = isArray(collection) ? arrayFilter : baseFilter; - predicate = getCallback(predicate, thisArg, 3); - return func(collection, function(value, index, collection) { - return !predicate(value, index, collection); - }); - } - - /** - * Gets a random element or `n` random elements from a collection. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to sample. - * @param {number} [n] The number of elements to sample. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {*} Returns the random sample(s). - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - * - * _.sample([1, 2, 3, 4], 2); - * // => [3, 1] - */ - function sample(collection, n, guard) { - if (guard ? isIterateeCall(collection, n, guard) : n == null) { - collection = toIterable(collection); - var length = collection.length; - return length > 0 ? collection[baseRandom(0, length - 1)] : undefined; - } - var index = -1, - result = toArray(collection), - length = result.length, - lastIndex = length - 1; - - n = nativeMin(n < 0 ? 0 : (+n || 0), length); - while (++index < n) { - var rand = baseRandom(index, lastIndex), - value = result[rand]; - - result[rand] = result[index]; - result[index] = value; - } - result.length = n; - return result; - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle(collection) { - return sample(collection, POSITIVE_INFINITY); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable properties for objects. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the size of `collection`. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - var length = collection ? getLength(collection) : 0; - return isLength(length) ? length : keys(collection).length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * The function returns as soon as it finds a passing value and does not iterate - * over the entire collection. The predicate is bound to `thisArg` and invoked - * with three arguments: (value, index|key, collection). - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @alias any - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // using the `_.matches` callback shorthand - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // using the `_.matchesProperty` callback shorthand - * _.some(users, 'active', false); - * // => true - * - * // using the `_.property` callback shorthand - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, thisArg) { - var func = isArray(collection) ? arraySome : baseSome; - if (thisArg && isIterateeCall(collection, predicate, thisArg)) { - predicate = undefined; - } - if (typeof predicate != 'function' || thisArg !== undefined) { - predicate = getCallback(predicate, thisArg, 3); - } - return func(collection, predicate); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection through `iteratee`. This method performs - * a stable sort, that is, it preserves the original sort order of equal elements. - * The `iteratee` is bound to `thisArg` and invoked with three arguments: - * (value, index|key, collection). - * - * If a property name is provided for `iteratee` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `iteratee` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Array} Returns the new sorted array. - * @example - * - * _.sortBy([1, 2, 3], function(n) { - * return Math.sin(n); - * }); - * // => [3, 1, 2] - * - * _.sortBy([1, 2, 3], function(n) { - * return this.sin(n); - * }, Math); - * // => [3, 1, 2] - * - * var users = [ - * { 'user': 'fred' }, - * { 'user': 'pebbles' }, - * { 'user': 'barney' } - * ]; - * - * // using the `_.property` callback shorthand - * _.pluck(_.sortBy(users, 'user'), 'user'); - * // => ['barney', 'fred', 'pebbles'] - */ - function sortBy(collection, iteratee, thisArg) { - if (collection == null) { - return []; - } - if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { - iteratee = undefined; - } - var index = -1; - iteratee = getCallback(iteratee, thisArg, 3); - - var result = baseMap(collection, function(value, key, collection) { - return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value }; - }); - return baseSortBy(result, compareAscending); - } - - /** - * This method is like `_.sortBy` except that it can sort by multiple iteratees - * or property names. - * - * If a property name is provided for an iteratee the created `_.property` - * style callback returns the property value of the given element. - * - * If an object is provided for an iteratee the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees - * The iteratees to sort by, specified as individual values or arrays of values. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 42 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.map(_.sortByAll(users, ['user', 'age']), _.values); - * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] - * - * _.map(_.sortByAll(users, 'user', function(chr) { - * return Math.floor(chr.age / 10); - * }), _.values); - * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] - */ - var sortByAll = restParam(function(collection, iteratees) { - if (collection == null) { - return []; - } - var guard = iteratees[2]; - if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) { - iteratees.length = 1; - } - return baseSortByOrder(collection, baseFlatten(iteratees), []); - }); - - /** - * This method is like `_.sortByAll` except that it allows specifying the - * sort orders of the iteratees to sort by. If `orders` is unspecified, all - * values are sorted in ascending order. Otherwise, a value is sorted in - * ascending order if its corresponding order is "asc", and descending if "desc". - * - * If a property name is provided for an iteratee the created `_.property` - * style callback returns the property value of the given element. - * - * If an object is provided for an iteratee the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {boolean[]} [orders] The sort orders of `iteratees`. - * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 34 }, - * { 'user': 'fred', 'age': 42 }, - * { 'user': 'barney', 'age': 36 } - * ]; - * - * // sort by `user` in ascending order and by `age` in descending order - * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values); - * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] - */ - function sortByOrder(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (guard && isIterateeCall(iteratees, orders, guard)) { - orders = undefined; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseSortByOrder(collection, iteratees, orders); - } - - /** - * Performs a deep comparison between each element in `collection` and the - * source object, returning an array of all elements that have equivalent - * property values. - * - * **Note:** This method supports comparing arrays, booleans, `Date` objects, - * numbers, `Object` objects, regexes, and strings. Objects are compared by - * their own, not inherited, enumerable properties. For comparing a single - * own or inherited property value see `_.matchesProperty`. - * - * @static - * @memberOf _ - * @category Collection - * @param {Array|Object|string} collection The collection to search. - * @param {Object} source The object of property values to match. - * @returns {Array} Returns the new filtered array. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] }, - * { 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] } - * ]; - * - * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user'); - * // => ['barney'] - * - * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user'); - * // => ['fred'] - */ - function where(collection, source) { - return filter(collection, baseMatches(source)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Gets the number of milliseconds that have elapsed since the Unix epoch - * (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @category Date - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => logs the number of milliseconds it took for the deferred function to be invoked - */ - var now = nativeNow || function() { - return new Date().getTime(); - }; - - /*------------------------------------------------------------------------*/ - - /** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it is called `n` or more times. - * - * @static - * @memberOf _ - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => logs 'done saving!' after the two async saves have completed - */ - function after(n, func) { - if (typeof func != 'function') { - if (typeof n == 'function') { - var temp = n; - n = func; - func = temp; - } else { - throw new TypeError(FUNC_ERROR_TEXT); - } - } - n = nativeIsFinite(n = +n) ? n : 0; - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that accepts up to `n` arguments ignoring any - * additional arguments. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Function} Returns the new function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ - function ary(func, n, guard) { - if (guard && isIterateeCall(func, n, guard)) { - n = undefined; - } - n = (func && n == null) ? func.length : nativeMax(+n || 0, 0); - return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); - } - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it is called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery('#add').on('click', _.before(5, addContactToList)); - * // => allows adding up to 4 contacts to the list - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - if (typeof n == 'function') { - var temp = n; - n = func; - func = temp; - } else { - throw new TypeError(FUNC_ERROR_TEXT); - } - } - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and prepends any additional `_.bind` arguments to those provided to the - * bound function. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind` this method does not set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var greet = function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * }; - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // using placeholders - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = restParam(function(func, thisArg, partials) { - var bitmask = BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, bind.placeholder); - bitmask |= PARTIAL_FLAG; - } - return createWrapper(func, bitmask, thisArg, partials, holders); - }); - - /** - * Binds methods of an object to the object itself, overwriting the existing - * method. Method names may be specified as individual arguments or as arrays - * of method names. If no method names are provided all enumerable function - * properties, own and inherited, of `object` are bound. - * - * **Note:** This method does not set the "length" property of bound functions. - * - * @static - * @memberOf _ - * @category Function - * @param {Object} object The object to bind and assign the bound methods to. - * @param {...(string|string[])} [methodNames] The object method names to bind, - * specified as individual method names or arrays of method names. - * @returns {Object} Returns `object`. - * @example - * - * var view = { - * 'label': 'docs', - * 'onClick': function() { - * console.log('clicked ' + this.label); - * } - * }; - * - * _.bindAll(view); - * jQuery('#docs').on('click', view.onClick); - * // => logs 'clicked docs' when the element is clicked - */ - var bindAll = restParam(function(object, methodNames) { - methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object); - - var index = -1, - length = methodNames.length; - - while (++index < length) { - var key = methodNames[index]; - object[key] = createWrapper(object[key], BIND_FLAG, object); - } - return object; - }); - - /** - * Creates a function that invokes the method at `object[key]` and prepends - * any additional `_.bindKey` arguments to those provided to the bound function. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. - * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @category Function - * @param {Object} object The object the method belongs to. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // using placeholders - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ - var bindKey = restParam(function(object, key, partials) { - var bitmask = BIND_FLAG | BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, bindKey.placeholder); - bitmask |= PARTIAL_FLAG; - } - return createWrapper(key, bitmask, object, partials, holders); - }); - - /** - * Creates a function that accepts one or more arguments of `func` that when - * called either invokes `func` returning its result, if all `func` arguments - * have been provided, or returns a function that accepts one or more of the - * remaining `func` arguments, and so on. The arity of `func` may be specified - * if `func.length` is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method does not set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // using placeholders - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ - var curry = createCurry(CURRY_FLAG); - - /** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method does not set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // using placeholders - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ - var curryRight = createCurry(CURRY_RIGHT_FLAG); - - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed invocations. Provide an options object to indicate that `func` - * should be invoked on the leading and/or trailing edge of the `wait` timeout. - * Subsequent calls to the debounced function return the result of the last - * `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked - * on the trailing edge of the timeout only if the the debounced function is - * invoked more than once during the `wait` timeout. - * - * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=false] Specify invoking on the leading - * edge of the timeout. - * @param {number} [options.maxWait] The maximum time `func` is allowed to be - * delayed before it is invoked. - * @param {boolean} [options.trailing=true] Specify invoking on the trailing - * edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // avoid costly calculations while the window size is in flux - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // invoke `sendMail` when the click event is fired, debouncing subsequent calls - * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // ensure `batchLog` is invoked once after 1 second of debounced calls - * var source = new EventSource('/stream'); - * jQuery(source).on('message', _.debounce(batchLog, 250, { - * 'maxWait': 1000 - * })); - * - * // cancel a debounced call - * var todoChanges = _.debounce(batchLog, 1000); - * Object.observe(models.todo, todoChanges); - * - * Object.observe(models, function(changes) { - * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) { - * todoChanges.cancel(); - * } - * }, ['delete']); - * - * // ...at some point `models.todo` is changed - * models.todo.completed = true; - * - * // ...before 1 second has passed `models.todo` is deleted - * // which cancels the debounced `todoChanges` call - * delete models.todo; - */ - function debounce(func, wait, options) { - var args, - maxTimeoutId, - result, - stamp, - thisArg, - timeoutId, - trailingCall, - lastCalled = 0, - maxWait = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = wait < 0 ? 0 : (+wait || 0); - if (options === true) { - var leading = true; - trailing = false; - } else if (isObject(options)) { - leading = !!options.leading; - maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait); - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function cancel() { - if (timeoutId) { - clearTimeout(timeoutId); - } - if (maxTimeoutId) { - clearTimeout(maxTimeoutId); - } - lastCalled = 0; - maxTimeoutId = timeoutId = trailingCall = undefined; - } - - function complete(isCalled, id) { - if (id) { - clearTimeout(id); - } - maxTimeoutId = timeoutId = trailingCall = undefined; - if (isCalled) { - lastCalled = now(); - result = func.apply(thisArg, args); - if (!timeoutId && !maxTimeoutId) { - args = thisArg = undefined; - } - } - } - - function delayed() { - var remaining = wait - (now() - stamp); - if (remaining <= 0 || remaining > wait) { - complete(trailingCall, maxTimeoutId); - } else { - timeoutId = setTimeout(delayed, remaining); - } - } - - function maxDelayed() { - complete(trailing, timeoutId); - } - - function debounced() { - args = arguments; - stamp = now(); - thisArg = this; - trailingCall = trailing && (timeoutId || !leading); - - if (maxWait === false) { - var leadingCall = leading && !timeoutId; - } else { - if (!maxTimeoutId && !leading) { - lastCalled = stamp; - } - var remaining = maxWait - (stamp - lastCalled), - isCalled = remaining <= 0 || remaining > maxWait; - - if (isCalled) { - if (maxTimeoutId) { - maxTimeoutId = clearTimeout(maxTimeoutId); - } - lastCalled = stamp; - result = func.apply(thisArg, args); - } - else if (!maxTimeoutId) { - maxTimeoutId = setTimeout(maxDelayed, remaining); - } - } - if (isCalled && timeoutId) { - timeoutId = clearTimeout(timeoutId); - } - else if (!timeoutId && wait !== maxWait) { - timeoutId = setTimeout(delayed, wait); - } - if (leadingCall) { - isCalled = true; - result = func.apply(thisArg, args); - } - if (isCalled && !timeoutId && !maxTimeoutId) { - args = thisArg = undefined; - } - return result; - } - debounced.cancel = cancel; - return debounced; - } - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it is invoked. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke the function with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // logs 'deferred' after one or more milliseconds - */ - var defer = restParam(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it is invoked. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke the function with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => logs 'later' after one second - */ - var delay = restParam(function(func, wait, args) { - return baseDelay(func, wait, args); - }); - - /** - * Creates a function that returns the result of invoking the provided - * functions with the `this` binding of the created function, where each - * successive invocation is supplied the return value of the previous. - * - * @static - * @memberOf _ - * @category Function - * @param {...Function} [funcs] Functions to invoke. - * @returns {Function} Returns the new function. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var addSquare = _.flow(_.add, square); - * addSquare(1, 2); - * // => 9 - */ - var flow = createFlow(); - - /** - * This method is like `_.flow` except that it creates a function that - * invokes the provided functions from right to left. - * - * @static - * @memberOf _ - * @alias backflow, compose - * @category Function - * @param {...Function} [funcs] Functions to invoke. - * @returns {Function} Returns the new function. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var addSquare = _.flowRight(square, _.add); - * addSquare(1, 2); - * // => 9 - */ - var flowRight = createFlow(true); - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is coerced to a string and used as the - * cache key. The `func` is invoked with the `this` binding of the memoized - * function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object) - * method interface of `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoizing function. - * @example - * - * var upperCase = _.memoize(function(string) { - * return string.toUpperCase(); - * }); - * - * upperCase('fred'); - * // => 'FRED' - * - * // modifying the result cache - * upperCase.cache.set('fred', 'BARNEY'); - * upperCase('fred'); - * // => 'BARNEY' - * - * // replacing `_.memoize.Cache` - * var object = { 'user': 'fred' }; - * var other = { 'user': 'barney' }; - * var identity = _.memoize(_.identity); - * - * identity(object); - * // => { 'user': 'fred' } - * identity(other); - * // => { 'user': 'fred' } - * - * _.memoize.Cache = WeakMap; - * var identity = _.memoize(_.identity); - * - * identity(object); - * // => { 'user': 'fred' } - * identity(other); - * // => { 'user': 'barney' } - */ - function memoize(func, resolver) { - if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result); - return result; - }; - memoized.cache = new memoize.Cache; - return memoized; - } - - /** - * Creates a function that runs each argument through a corresponding - * transform function. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to wrap. - * @param {...(Function|Function[])} [transforms] The functions to transform - * arguments, specified as individual functions or arrays of functions. - * @returns {Function} Returns the new function. - * @example - * - * function doubled(n) { - * return n * 2; - * } - * - * function square(n) { - * return n * n; - * } - * - * var modded = _.modArgs(function(x, y) { - * return [x, y]; - * }, square, doubled); - * - * modded(1, 2); - * // => [1, 4] - * - * modded(5, 10); - * // => [25, 20] - */ - var modArgs = restParam(function(func, transforms) { - transforms = baseFlatten(transforms); - if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = transforms.length; - return restParam(function(args) { - var index = nativeMin(args.length, length); - while (index--) { - args[index] = transforms[index](args[index]); - } - return func.apply(this, args); - }); - }); - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - return !predicate.apply(this, arguments); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first call. The `func` is invoked - * with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // `initialize` invokes `createApplication` once - */ - function once(func) { - return before(2, func); - } - - /** - * Creates a function that invokes `func` with `partial` arguments prepended - * to those provided to the new function. This method is like `_.bind` except - * it does **not** alter the `this` binding. - * - * The `_.partial.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method does not set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var greet = function(greeting, name) { - * return greeting + ' ' + name; - * }; - * - * var sayHelloTo = _.partial(greet, 'hello'); - * sayHelloTo('fred'); - * // => 'hello fred' - * - * // using placeholders - * var greetFred = _.partial(greet, _, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - */ - var partial = createPartial(PARTIAL_FLAG); - - /** - * This method is like `_.partial` except that partially applied arguments - * are appended to those provided to the new function. - * - * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method does not set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * var greet = function(greeting, name) { - * return greeting + ' ' + name; - * }; - * - * var greetFred = _.partialRight(greet, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - * - * // using placeholders - * var sayHelloTo = _.partialRight(greet, 'hello', _); - * sayHelloTo('fred'); - * // => 'hello fred' - */ - var partialRight = createPartial(PARTIAL_RIGHT_FLAG); - - /** - * Creates a function that invokes `func` with arguments arranged according - * to the specified indexes where the argument value at the first index is - * provided as the first argument, the argument value at the second index is - * provided as the second argument, and so on. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to rearrange arguments for. - * @param {...(number|number[])} indexes The arranged argument indexes, - * specified as individual indexes or arrays of indexes. - * @returns {Function} Returns the new function. - * @example - * - * var rearged = _.rearg(function(a, b, c) { - * return [a, b, c]; - * }, 2, 0, 1); - * - * rearged('b', 'c', 'a') - * // => ['a', 'b', 'c'] - * - * var map = _.rearg(_.map, [1, 0]); - * map(function(n) { - * return n * 3; - * }, [1, 2, 3]); - * // => [3, 6, 9] - */ - var rearg = restParam(function(func, indexes) { - return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes)); - }); - - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as an array. - * - * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters). - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.restParam(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function restParam(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - rest = Array(length); - - while (++index < length) { - rest[index] = args[start + index]; - } - switch (start) { - case 0: return func.call(this, rest); - case 1: return func.call(this, args[0], rest); - case 2: return func.call(this, args[0], args[1], rest); - } - var otherArgs = Array(start + 1); - index = -1; - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = rest; - return func.apply(this, otherArgs); - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of the created - * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3). - * - * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator). - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to spread arguments over. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.spread(function(who, what) { - * return who + ' says ' + what; - * }); - * - * say(['fred', 'hello']); - * // => 'fred says hello' - * - * // with a Promise - * var numbers = Promise.all([ - * Promise.resolve(40), - * Promise.resolve(36) - * ]); - * - * numbers.then(_.spread(function(x, y) { - * return x + y; - * })); - * // => a Promise of 76 - */ - function spread(func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function(array) { - return func.apply(this, array); - }; - } - - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed invocations. Provide an options object to indicate - * that `func` should be invoked on the leading and/or trailing edge of the - * `wait` timeout. Subsequent calls to the throttled function return the - * result of the last `func` call. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked - * on the trailing edge of the timeout only if the the throttled function is - * invoked more than once during the `wait` timeout. - * - * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=true] Specify invoking on the leading - * edge of the timeout. - * @param {boolean} [options.trailing=true] Specify invoking on the trailing - * edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // avoid excessively updating the position while scrolling - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes - * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { - * 'trailing': false - * })); - * - * // cancel a trailing throttled call - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (options === false) { - leading = false; - } else if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing }); - } - - /** - * Creates a function that provides `value` to the wrapper function as its - * first argument. Any additional arguments provided to the function are - * appended to those provided to the wrapper function. The wrapper is invoked - * with the `this` binding of the created function. - * - * @static - * @memberOf _ - * @category Function - * @param {*} value The value to wrap. - * @param {Function} wrapper The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('fred, barney, & pebbles'); - * // => '

fred, barney, & pebbles

' - */ - function wrap(value, wrapper) { - wrapper = wrapper == null ? identity : wrapper; - return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned, - * otherwise they are assigned by reference. If `customizer` is provided it is - * invoked to produce the cloned values. If `customizer` returns `undefined` - * cloning is handled by the method instead. The `customizer` is bound to - * `thisArg` and invoked with two argument; (value [, index|key, object]). - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). - * The enumerable properties of `arguments` objects and objects created by - * constructors other than `Object` are cloned to plain `Object` objects. An - * empty object is returned for uncloneable values such as functions, DOM nodes, - * Maps, Sets, and WeakMaps. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @param {Function} [customizer] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `customizer`. - * @returns {*} Returns the cloned value. - * @example - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * var shallow = _.clone(users); - * shallow[0] === users[0]; - * // => true - * - * var deep = _.clone(users, true); - * deep[0] === users[0]; - * // => false - * - * // using a customizer callback - * var el = _.clone(document.body, function(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * }); - * - * el === document.body - * // => false - * el.nodeName - * // => BODY - * el.childNodes.length; - * // => 0 - */ - function clone(value, isDeep, customizer, thisArg) { - if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) { - isDeep = false; - } - else if (typeof isDeep == 'function') { - thisArg = customizer; - customizer = isDeep; - isDeep = false; - } - return typeof customizer == 'function' - ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1)) - : baseClone(value, isDeep); - } - - /** - * Creates a deep clone of `value`. If `customizer` is provided it is invoked - * to produce the cloned values. If `customizer` returns `undefined` cloning - * is handled by the method instead. The `customizer` is bound to `thisArg` - * and invoked with two argument; (value [, index|key, object]). - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). - * The enumerable properties of `arguments` objects and objects created by - * constructors other than `Object` are cloned to plain `Object` objects. An - * empty object is returned for uncloneable values such as functions, DOM nodes, - * Maps, Sets, and WeakMaps. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to deep clone. - * @param {Function} [customizer] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `customizer`. - * @returns {*} Returns the deep cloned value. - * @example - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * var deep = _.cloneDeep(users); - * deep[0] === users[0]; - * // => false - * - * // using a customizer callback - * var el = _.cloneDeep(document.body, function(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * }); - * - * el === document.body - * // => false - * el.nodeName - * // => BODY - * el.childNodes.length; - * // => 20 - */ - function cloneDeep(value, customizer, thisArg) { - return typeof customizer == 'function' - ? baseClone(value, true, bindCallback(customizer, thisArg, 1)) - : baseClone(value, true); - } - - /** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ - function gt(value, other) { - return value > other; - } - - /** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`. - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ - function gte(value, other) { - return value >= other; - } - - /** - * Checks if `value` is classified as an `arguments` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - function isArguments(value) { - return isObjectLike(value) && isArrayLike(value) && - hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); - } - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(function() { return arguments; }()); - * // => false - */ - var isArray = nativeIsArray || function(value) { - return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; - }; - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag); - } - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - function isDate(value) { - return isObjectLike(value) && objToString.call(value) == dateTag; - } - - /** - * Checks if `value` is a DOM element. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ - function isElement(value) { - return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); - } - - /** - * Checks if `value` is empty. A value is considered empty unless it is an - * `arguments` object, array, string, or jQuery-like collection with a length - * greater than `0` or an object with own enumerable properties. - * - * @static - * @memberOf _ - * @category Lang - * @param {Array|Object|string} value The value to inspect. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || - (isObjectLike(value) && isFunction(value.splice)))) { - return !value.length; - } - return !keys(value).length; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. If `customizer` is provided it is invoked to compare values. - * If `customizer` returns `undefined` comparisons are handled by the method - * instead. The `customizer` is bound to `thisArg` and invoked with three - * arguments: (value, other [, index|key]). - * - * **Note:** This method supports comparing arrays, booleans, `Date` objects, - * numbers, `Object` objects, regexes, and strings. Objects are compared by - * their own, not inherited, enumerable properties. Functions and DOM nodes - * are **not** supported. Provide a customizer function to extend support - * for comparing other values. - * - * @static - * @memberOf _ - * @alias eq - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize value comparisons. - * @param {*} [thisArg] The `this` binding of `customizer`. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'user': 'fred' }; - * var other = { 'user': 'fred' }; - * - * object == other; - * // => false - * - * _.isEqual(object, other); - * // => true - * - * // using a customizer callback - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqual(array, other, function(value, other) { - * if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) { - * return true; - * } - * }); - * // => true - */ - function isEqual(value, other, customizer, thisArg) { - customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, customizer) : !!result; - } - - /** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ - function isError(value) { - return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag; - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite). - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(10); - * // => true - * - * _.isFinite('10'); - * // => false - * - * _.isFinite(true); - * // => false - * - * _.isFinite(Object(10)); - * // => false - * - * _.isFinite(Infinity); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in older versions of Chrome and Safari which return 'function' for regexes - // and Safari 8 equivalents which return 'object' for typed array constructors. - return isObject(value) && objToString.call(value) == funcTag; - } - - /** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ - function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); - } - - /** - * Performs a deep comparison between `object` and `source` to determine if - * `object` contains equivalent property values. If `customizer` is provided - * it is invoked to compare values. If `customizer` returns `undefined` - * comparisons are handled by the method instead. The `customizer` is bound - * to `thisArg` and invoked with three arguments: (value, other, index|key). - * - * **Note:** This method supports comparing properties of arrays, booleans, - * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions - * and DOM nodes are **not** supported. Provide a customizer function to extend - * support for comparing other values. - * - * @static - * @memberOf _ - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize value comparisons. - * @param {*} [thisArg] The `this` binding of `customizer`. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'user': 'fred', 'age': 40 }; - * - * _.isMatch(object, { 'age': 40 }); - * // => true - * - * _.isMatch(object, { 'age': 36 }); - * // => false - * - * // using a customizer callback - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatch(object, source, function(value, other) { - * return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined; - * }); - * // => true - */ - function isMatch(object, source, customizer, thisArg) { - customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; - return baseIsMatch(object, getMatchData(source), customizer); - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) - * which returns `true` for `undefined` and other non-numeric values. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some host objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is a native function. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ - function isNative(value) { - if (value == null) { - return false; - } - if (isFunction(value)) { - return reIsNative.test(fnToString.call(value)); - } - return isObjectLike(value) && reIsHostCtor.test(value); - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified - * as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isNumber(8.4); - * // => true - * - * _.isNumber(NaN); - * // => true - * - * _.isNumber('8.4'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag); - } - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * **Note:** This method assumes objects created by the `Object` constructor - * have no inherited enumerable properties. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - var Ctor; - - // Exit early for non `Object` objects. - if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) || - (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) { - return false; - } - // IE < 9 iterates inherited properties before own properties. If the first - // iterated property is an object's own property then there are no inherited - // enumerable properties. - var result; - // In most environments an object's own properties are iterated before - // its inherited properties. If the last iterated property is an object's - // own property then there are no inherited enumerable properties. - baseForIn(value, function(subValue, key) { - result = key; - }); - return result === undefined || hasOwnProperty.call(value, result); - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - function isRegExp(value) { - return isObject(value) && objToString.call(value) == regexpTag; - } - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); - } - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - function isTypedArray(value) { - return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; - } - - /** - * Checks if `value` is `undefined`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Checks if `value` is less than `other`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`. - * @example - * - * _.lt(1, 3); - * // => true - * - * _.lt(3, 3); - * // => false - * - * _.lt(3, 1); - * // => false - */ - function lt(value, other) { - return value < other; - } - - /** - * Checks if `value` is less than or equal to `other`. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`. - * @example - * - * _.lte(1, 3); - * // => true - * - * _.lte(3, 3); - * // => true - * - * _.lte(3, 1); - * // => false - */ - function lte(value, other) { - return value <= other; - } - - /** - * Converts `value` to an array. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * (function() { - * return _.toArray(arguments).slice(1); - * }(1, 2, 3)); - * // => [2, 3] - */ - function toArray(value) { - var length = value ? getLength(value) : 0; - if (!isLength(length)) { - return values(value); - } - if (!length) { - return []; - } - return arrayCopy(value); - } - - /** - * Converts `value` to a plain object flattening inherited enumerable - * properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return baseCopy(value, keysIn(value)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Recursively merges own enumerable properties of the source object(s), that - * don't resolve to `undefined` into the destination object. Subsequent sources - * overwrite property assignments of previous sources. If `customizer` is - * provided it is invoked to produce the merged values of the destination and - * source properties. If `customizer` returns `undefined` merging is handled - * by the method instead. The `customizer` is bound to `thisArg` and invoked - * with five arguments: (objectValue, sourceValue, key, object, source). - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @param {*} [thisArg] The `this` binding of `customizer`. - * @returns {Object} Returns `object`. - * @example - * - * var users = { - * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] - * }; - * - * var ages = { - * 'data': [{ 'age': 36 }, { 'age': 40 }] - * }; - * - * _.merge(users, ages); - * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } - * - * // using a customizer callback - * var object = { - * 'fruits': ['apple'], - * 'vegetables': ['beet'] - * }; - * - * var other = { - * 'fruits': ['banana'], - * 'vegetables': ['carrot'] - * }; - * - * _.merge(object, other, function(a, b) { - * if (_.isArray(a)) { - * return a.concat(b); - * } - * }); - * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } - */ - var merge = createAssigner(baseMerge); - - /** - * Assigns own enumerable properties of source object(s) to the destination - * object. Subsequent sources overwrite property assignments of previous sources. - * If `customizer` is provided it is invoked to produce the assigned values. - * The `customizer` is bound to `thisArg` and invoked with five arguments: - * (objectValue, sourceValue, key, object, source). - * - * **Note:** This method mutates `object` and is based on - * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign). - * - * @static - * @memberOf _ - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @param {*} [thisArg] The `this` binding of `customizer`. - * @returns {Object} Returns `object`. - * @example - * - * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); - * // => { 'user': 'fred', 'age': 40 } - * - * // using a customizer callback - * var defaults = _.partialRight(_.assign, function(value, other) { - * return _.isUndefined(value) ? other : value; - * }); - * - * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); - * // => { 'user': 'barney', 'age': 36 } - */ - var assign = createAssigner(function(object, source, customizer) { - return customizer - ? assignWith(object, source, customizer) - : baseAssign(object, source); - }); - - /** - * Creates an object that inherits from the given `prototype` object. If a - * `properties` object is provided its own enumerable properties are assigned - * to the created object. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties, guard) { - var result = baseCreate(prototype); - if (guard && isIterateeCall(prototype, properties, guard)) { - properties = undefined; - } - return properties ? baseAssign(result, properties) : result; - } - - /** - * Assigns own enumerable properties of source object(s) to the destination - * object for all destination properties that resolve to `undefined`. Once a - * property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); - * // => { 'user': 'barney', 'age': 36 } - */ - var defaults = createDefaults(assign, assignDefaults); - - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); - * // => { 'user': { 'name': 'barney', 'age': 36 } } - * - */ - var defaultsDeep = createDefaults(merge, mergeDefaults); - - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {string|undefined} Returns the key of the matched element, else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(chr) { - * return chr.age < 40; - * }); - * // => 'barney' (iteration order is not guaranteed) - * - * // using the `_.matches` callback shorthand - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // using the `_.matchesProperty` callback shorthand - * _.findKey(users, 'active', false); - * // => 'fred' - * - * // using the `_.property` callback shorthand - * _.findKey(users, 'active'); - * // => 'barney' - */ - var findKey = createFindKey(baseForOwn); - - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * If a property name is provided for `predicate` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `predicate` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to search. - * @param {Function|Object|string} [predicate=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {string|undefined} Returns the key of the matched element, else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(chr) { - * return chr.age < 40; - * }); - * // => returns `pebbles` assuming `_.findKey` returns `barney` - * - * // using the `_.matches` callback shorthand - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // using the `_.matchesProperty` callback shorthand - * _.findLastKey(users, 'active', false); - * // => 'fred' - * - * // using the `_.property` callback shorthand - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - var findLastKey = createFindKey(baseForOwnRight); - - /** - * Iterates over own and inherited enumerable properties of an object invoking - * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Object} Returns `object`. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed) - */ - var forIn = createForIn(baseFor); - - /** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Object} Returns `object`. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c' - */ - var forInRight = createForIn(baseForRight); - - /** - * Iterates over own enumerable properties of an object invoking `iteratee` - * for each property. The `iteratee` is bound to `thisArg` and invoked with - * three arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Object} Returns `object`. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => logs 'a' and 'b' (iteration order is not guaranteed) - */ - var forOwn = createForOwn(baseForOwn); - - /** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Object} Returns `object`. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b' - */ - var forOwnRight = createForOwn(baseForOwnRight); - - /** - * Creates an array of function property names from all enumerable properties, - * own and inherited, of `object`. - * - * @static - * @memberOf _ - * @alias methods - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the new array of property names. - * @example - * - * _.functions(_); - * // => ['after', 'ary', 'assign', ...] - */ - function functions(object) { - return baseFunctions(object, keysIn(object)); - } - - /** - * Gets the property value at `path` of `object`. If the resolved value is - * `undefined` the `defaultValue` is used in its place. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, toPath(path), path + ''); - return result === undefined ? defaultValue : result; - } - - /** - * Checks if `path` is a direct property. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` is a direct property, else `false`. - * @example - * - * var object = { 'a': { 'b': { 'c': 3 } } }; - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b.c'); - * // => true - * - * _.has(object, ['a', 'b', 'c']); - * // => true - */ - function has(object, path) { - if (object == null) { - return false; - } - var result = hasOwnProperty.call(object, path); - if (!result && !isKey(path)) { - path = toPath(path); - object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - if (object == null) { - return false; - } - path = last(path); - result = hasOwnProperty.call(object, path); - } - return result || (isLength(object.length) && isIndex(path, object.length) && - (isArray(object) || isArguments(object))); - } - - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite property - * assignments of previous values unless `multiValue` is `true`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to invert. - * @param {boolean} [multiValue] Allow multiple values per key. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - * - * // with `multiValue` - * _.invert(object, true); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ - function invert(object, multiValue, guard) { - if (guard && isIterateeCall(object, multiValue, guard)) { - multiValue = undefined; - } - var index = -1, - props = keys(object), - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index], - value = object[key]; - - if (multiValue) { - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - } - else { - result[value] = key; - } - } - return result; - } - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) - * for more details. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - var keys = !nativeKeys ? shimKeys : function(object) { - var Ctor = object == null ? undefined : object.constructor; - if ((typeof Ctor == 'function' && Ctor.prototype === object) || - (typeof object != 'function' && isArrayLike(object))) { - return shimKeys(object); - } - return isObject(object) ? nativeKeys(object) : []; - }; - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - if (object == null) { - return []; - } - if (!isObject(object)) { - object = Object(object); - } - var length = object.length; - length = (length && isLength(length) && - (isArray(object) || isArguments(object)) && length) || 0; - - var Ctor = object.constructor, - index = -1, - isProto = typeof Ctor == 'function' && Ctor.prototype === object, - result = Array(length), - skipIndexes = length > 0; - - while (++index < length) { - result[index] = (index + ''); - } - for (var key in object) { - if (!(skipIndexes && isIndex(key, length)) && - !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - /** - * The opposite of `_.mapValues`; this method creates an object with the - * same values as `object` and keys generated by running each own enumerable - * property of `object` through `iteratee`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Object} Returns the new mapped object. - * @example - * - * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { - * return key + value; - * }); - * // => { 'a1': 1, 'b2': 2 } - */ - var mapKeys = createObjectMapper(true); - - /** - * Creates an object with the same keys as `object` and values generated by - * running each own enumerable property of `object` through `iteratee`. The - * iteratee function is bound to `thisArg` and invoked with three arguments: - * (value, key, object). - * - * If a property name is provided for `iteratee` the created `_.property` - * style callback returns the property value of the given element. - * - * If a value is also provided for `thisArg` the created `_.matchesProperty` - * style callback returns `true` for elements that have a matching property - * value, else `false`. - * - * If an object is provided for `iteratee` the created `_.matches` style - * callback returns `true` for elements that have the properties of the given - * object, else `false`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function|Object|string} [iteratee=_.identity] The function invoked - * per iteration. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {Object} Returns the new mapped object. - * @example - * - * _.mapValues({ 'a': 1, 'b': 2 }, function(n) { - * return n * 3; - * }); - * // => { 'a': 3, 'b': 6 } - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * // using the `_.property` callback shorthand - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ - var mapValues = createObjectMapper(); - - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable properties of `object` that are not omitted. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {Function|...(string|string[])} [predicate] The function invoked per - * iteration or property names to omit, specified as individual property - * names or arrays of property names. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'user': 'fred', 'age': 40 }; - * - * _.omit(object, 'age'); - * // => { 'user': 'fred' } - * - * _.omit(object, _.isNumber); - * // => { 'user': 'fred' } - */ - var omit = restParam(function(object, props) { - if (object == null) { - return {}; - } - if (typeof props[0] != 'function') { - var props = arrayMap(baseFlatten(props), String); - return pickByArray(object, baseDifference(keysIn(object), props)); - } - var predicate = bindCallback(props[0], props[1], 3); - return pickByCallback(object, function(value, key, object) { - return !predicate(value, key, object); - }); - }); - - /** - * Creates a two dimensional array of the key-value pairs for `object`, - * e.g. `[[key1, value1], [key2, value2]]`. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the new array of key-value pairs. - * @example - * - * _.pairs({ 'barney': 36, 'fred': 40 }); - * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed) - */ - function pairs(object) { - object = toObject(object); - - var index = -1, - props = keys(object), - length = props.length, - result = Array(length); - - while (++index < length) { - var key = props[index]; - result[index] = [key, object[key]]; - } - return result; - } - - /** - * Creates an object composed of the picked `object` properties. Property - * names may be specified as individual arguments or as arrays of property - * names. If `predicate` is provided it is invoked for each property of `object` - * picking the properties `predicate` returns truthy for. The predicate is - * bound to `thisArg` and invoked with three arguments: (value, key, object). - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {Function|...(string|string[])} [predicate] The function invoked per - * iteration or property names to pick, specified as individual property - * names or arrays of property names. - * @param {*} [thisArg] The `this` binding of `predicate`. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'user': 'fred', 'age': 40 }; - * - * _.pick(object, 'user'); - * // => { 'user': 'fred' } - * - * _.pick(object, _.isString); - * // => { 'user': 'fred' } - */ - var pick = restParam(function(object, props) { - if (object == null) { - return {}; - } - return typeof props[0] == 'function' - ? pickByCallback(object, bindCallback(props[0], props[1], 3)) - : pickByArray(object, baseFlatten(props)); - }); - - /** - * This method is like `_.get` except that if the resolved value is a function - * it is invoked with the `this` binding of its parent object and its result - * is returned. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a.b.c', 'default'); - * // => 'default' - * - * _.result(object, 'a.b.c', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - var result = object == null ? undefined : object[path]; - if (result === undefined) { - if (object != null && !isKey(path, object)) { - path = toPath(path); - object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - result = object == null ? undefined : object[last(path)]; - } - result = result === undefined ? defaultValue : result; - } - return isFunction(result) ? result.call(object) : result; - } - - /** - * Sets the property value of `path` on `object`. If a portion of `path` - * does not exist it is created. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to augment. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, 'x[0].y.z', 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - if (object == null) { - return object; - } - var pathKey = (path + ''); - path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = path[index]; - if (isObject(nested)) { - if (index == lastIndex) { - nested[key] = value; - } else if (nested[key] == null) { - nested[key] = isIndex(path[index + 1]) ? [] : {}; - } - } - nested = nested[key]; - } - return object; - } - - /** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own enumerable - * properties through `iteratee`, with each invocation potentially mutating - * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked - * with four arguments: (accumulator, value, key, object). Iteratee functions - * may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @category Object - * @param {Array|Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @param {*} [thisArg] The `this` binding of `iteratee`. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) { - * result[key] = n * 3; - * }); - * // => { 'a': 3, 'b': 6 } - */ - function transform(object, iteratee, accumulator, thisArg) { - var isArr = isArray(object) || isTypedArray(object); - iteratee = getCallback(iteratee, thisArg, 4); - - if (accumulator == null) { - if (isArr || isObject(object)) { - var Ctor = object.constructor; - if (isArr) { - accumulator = isArray(object) ? new Ctor : []; - } else { - accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined); - } - } else { - accumulator = {}; - } - } - (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; - } - - /** - * Creates an array of the own enumerable property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return baseValues(object, keys(object)); - } - - /** - * Creates an array of the own and inherited enumerable property values - * of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.valuesIn(new Foo); - * // => [1, 2, 3] (iteration order is not guaranteed) - */ - function valuesIn(object) { - return baseValues(object, keysIn(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Checks if `n` is between `start` and up to but not including, `end`. If - * `end` is not specified it is set to `start` with `start` then set to `0`. - * - * @static - * @memberOf _ - * @category Number - * @param {number} n The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `n` is in the range, else `false`. - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - */ - function inRange(value, start, end) { - start = +start || 0; - if (end === undefined) { - end = start; - start = 0; - } else { - end = +end || 0; - } - return value >= nativeMin(start, end) && value < nativeMax(start, end); - } - - /** - * Produces a random number between `min` and `max` (inclusive). If only one - * argument is provided a number between `0` and the given number is returned. - * If `floating` is `true`, or either `min` or `max` are floats, a floating-point - * number is returned instead of an integer. - * - * @static - * @memberOf _ - * @category Number - * @param {number} [min=0] The minimum possible value. - * @param {number} [max=1] The maximum possible value. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(min, max, floating) { - if (floating && isIterateeCall(min, max, floating)) { - max = floating = undefined; - } - var noMin = min == null, - noMax = max == null; - - if (floating == null) { - if (noMax && typeof min == 'boolean') { - floating = min; - min = 1; - } - else if (typeof max == 'boolean') { - floating = max; - noMax = true; - } - } - if (noMin && noMax) { - max = 1; - noMax = false; - } - min = +min || 0; - if (noMax) { - max = min; - min = 0; - } else { - max = +max || 0; - } - if (floating || min % 1 || max % 1) { - var rand = nativeRandom(); - return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max); - } - return baseRandom(min, max); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar'); - * // => 'fooBar' - * - * _.camelCase('__foo_bar__'); - * // => 'fooBar' - */ - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word); - }); - - /** - * Capitalizes the first character of `string`. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('fred'); - * // => 'Fred' - */ - function capitalize(string) { - string = baseToString(string); - return string && (string.charAt(0).toUpperCase() + string.slice(1)); - } - - /** - * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ - function deburr(string) { - string = baseToString(string); - return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); - } - - /** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to search. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search from. - * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ - function endsWith(string, target, position) { - string = baseToString(string); - target = (target + ''); - - var length = string.length; - position = position === undefined - ? length - : nativeMin(position < 0 ? 0 : (+position || 0), length); - - position -= target.length; - return position >= 0 && string.indexOf(target, position) == position; - } - - /** - * Converts the characters "&", "<", ">", '"', "'", and "\`", in `string` to - * their corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional characters - * use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. - * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * Backticks are escaped because in Internet Explorer < 9, they can break out - * of attribute values or HTML comments. See [#59](https://html5sec.org/#59), - * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and - * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) - * for more details. - * - * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) - * to reduce XSS vectors. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - // Reset `lastIndex` because in IE < 9 `String#replace` does not. - string = baseToString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /** - * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?", - * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https:\/\/lodash\.com\/\)' - */ - function escapeRegExp(string) { - string = baseToString(string); - return (string && reHasRegExpChars.test(string)) - ? string.replace(reRegExpChars, escapeRegExpChar) - : (string || '(?:)'); - } - - /** - * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__foo_bar__'); - * // => 'foo-bar' - */ - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); - - /** - * Pads `string` on the left and right sides if it's shorter than `length`. - * Padding characters are truncated if they can't be evenly divided by `length`. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.pad('abc', 8); - * // => ' abc ' - * - * _.pad('abc', 8, '_-'); - * // => '_-abc_-_' - * - * _.pad('abc', 3); - * // => 'abc' - */ - function pad(string, length, chars) { - string = baseToString(string); - length = +length; - - var strLength = string.length; - if (strLength >= length || !nativeIsFinite(length)) { - return string; - } - var mid = (length - strLength) / 2, - leftLength = nativeFloor(mid), - rightLength = nativeCeil(mid); - - chars = createPadding('', rightLength, chars); - return chars.slice(0, leftLength) + string + chars; - } - - /** - * Pads `string` on the left side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padLeft('abc', 6); - * // => ' abc' - * - * _.padLeft('abc', 6, '_-'); - * // => '_-_abc' - * - * _.padLeft('abc', 3); - * // => 'abc' - */ - var padLeft = createPadDir(); - - /** - * Pads `string` on the right side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padRight('abc', 6); - * // => 'abc ' - * - * _.padRight('abc', 6, '_-'); - * // => 'abc_-_' - * - * _.padRight('abc', 3); - * // => 'abc' - */ - var padRight = createPadDir(true); - - /** - * Converts `string` to an integer of the specified radix. If `radix` is - * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal, - * in which case a `radix` of `16` is used. - * - * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E) - * of `parseInt`. - * - * @static - * @memberOf _ - * @category String - * @param {string} string The string to convert. - * @param {number} [radix] The radix to interpret `value` by. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {number} Returns the converted integer. - * @example - * - * _.parseInt('08'); - * // => 8 - * - * _.map(['6', '08', '10'], _.parseInt); - * // => [6, 8, 10] - */ - function parseInt(string, radix, guard) { - // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`. - // Chrome fails to trim leading whitespace characters. - // See https://code.google.com/p/v8/issues/detail?id=3109 for more details. - if (guard ? isIterateeCall(string, radix, guard) : radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - string = trim(string); - return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)); - } - - /** - * Repeats the given string `n` times. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to repeat. - * @param {number} [n=0] The number of times to repeat the string. - * @returns {string} Returns the repeated string. - * @example - * - * _.repeat('*', 3); - * // => '***' - * - * _.repeat('abc', 2); - * // => 'abcabc' - * - * _.repeat('abc', 0); - * // => '' - */ - function repeat(string, n) { - var result = ''; - string = baseToString(string); - n = +n; - if (n < 1 || !string || !nativeIsFinite(n)) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - string += string; - } while (n); - - return result; - } - - /** - * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the snake cased string. - * @example - * - * _.snakeCase('Foo Bar'); - * // => 'foo_bar' - * - * _.snakeCase('fooBar'); - * // => 'foo_bar' - * - * _.snakeCase('--foo-bar'); - * // => 'foo_bar' - */ - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); - - /** - * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the start cased string. - * @example - * - * _.startCase('--foo-bar'); - * // => 'Foo Bar' - * - * _.startCase('fooBar'); - * // => 'Foo Bar' - * - * _.startCase('__foo_bar__'); - * // => 'Foo Bar' - */ - var startCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1)); - }); - - /** - * Checks if `string` starts with the given target string. - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The string to search. - * @param {string} [target] The string to search for. - * @param {number} [position=0] The position to search from. - * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`. - * @example - * - * _.startsWith('abc', 'a'); - * // => true - * - * _.startsWith('abc', 'b'); - * // => false - * - * _.startsWith('abc', 'b', 1); - * // => true - */ - function startsWith(string, target, position) { - string = baseToString(string); - position = position == null - ? 0 - : nativeMin(position < 0 ? 0 : (+position || 0), string.length); - - return string.lastIndexOf(target, position) == position; - } - - /** - * Creates a compiled template function that can interpolate data properties - * in "interpolate" delimiters, HTML-escape interpolated data properties in - * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data - * properties may be accessed as free variables in the template. If a setting - * object is provided it takes precedence over `_.templateSettings` values. - * - * **Note:** In the development build `_.template` utilizes - * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * for easier debugging. - * - * For more information on precompiling templates see - * [lodash's custom builds documentation](https://lodash.com/custom-builds). - * - * For more information on Chrome extension sandboxes see - * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). - * - * @static - * @memberOf _ - * @category String - * @param {string} [string=''] The template string. - * @param {Object} [options] The options object. - * @param {RegExp} [options.escape] The HTML "escape" delimiter. - * @param {RegExp} [options.evaluate] The "evaluate" delimiter. - * @param {Object} [options.imports] An object to import into the template as free variables. - * @param {RegExp} [options.interpolate] The "interpolate" delimiter. - * @param {string} [options.sourceURL] The sourceURL of the template's compiled source. - * @param {string} [options.variable] The data object variable name. - * @param- {Object} [otherOptions] Enables the legacy `options` param signature. - * @returns {Function} Returns the compiled template function. - * @example - * - * // using the "interpolate" delimiter to create a compiled template - * var compiled = _.template('hello <%= user %>!'); - * compiled({ 'user': 'fred' }); - * // => 'hello fred!' - * - * // using the HTML "escape" delimiter to escape data property values - * var compiled = _.template('<%- value %>'); - * compiled({ 'value': '",rE:!0,sL:"javascript"}},e,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},c]}]}});hljs.registerLanguage("markdown",function(){return{aliases:["md","mkdown","mkd"],c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:"^\\[.+\\]:",rB:!0,c:[{cN:"link_reference",b:"\\[",e:"\\]:",eB:!0,eE:!0,starts:{cN:"link_url",e:"$"}}]}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)\}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",c={cN:"yardoctag",b:"@[A-Za-z]+"},a={cN:"value",b:"#<",e:">"},s={cN:"comment",v:[{b:"#",e:"$",c:[c]},{b:"^\\=begin",e:"^\\=end",c:[c],r:10},{b:"^__END__",e:"\\n$"}]},n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]},i={cN:"params",b:"\\(",e:"\\)",k:r},d=[t,a,s,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]},s]},{cN:"function",bK:"def",e:" |$|;",r:0,c:[e.inherit(e.TM,{b:b}),i,s]},{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:[a,s,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],r:0}];n.c=d,i.c=d;var l="[>?]>",u="[\\w#]+\\(\\w+\\):\\d+:\\d+>",N="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",o=[{b:/^\s*=>/,cN:"status",starts:{e:"$",c:d}},{cN:"prompt",b:"^("+l+"|"+u+"|"+N+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,c:[s].concat(o).concat(d)}});hljs.registerLanguage("javascript",function(r){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document"},c:[{cN:"pi",r:10,v:[{b:/^\s*('|")use strict('|")/},{b:/^\s*('|")use asm('|")/}]},r.ASM,r.QSM,r.CLCM,r.CBCM,r.CNM,{b:"("+r.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[r.CLCM,r.CBCM,r.RM,{b:/;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[r.inherit(r.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[r.CLCM,r.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+r.IR,r:0}]}});hljs.registerLanguage("json",function(e){var t={literal:"true false null"},i=[e.QSM,e.CNM],l={cN:"value",e:",",eW:!0,eE:!0,c:i,k:t},c={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:!0,eE:!0,c:[e.BE],i:"\\n",starts:l}],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(l,{cN:null})],i:"\\S"};return i.splice(i.length,0,c,n),{c:i,k:t,i:"\\S"}});hljs.registerLanguage("http",function(){return{i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:!0}}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("};return{cI:!0,i:"[=/|']",c:[e.CBCM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[e.CBCM,{cN:"rule",b:"[^\\s]",rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]}]}]}}); \ No newline at end of file +!(function (e) { typeof exports !== 'undefined' ? e(exports) : (window.hljs = e({}), typeof define === 'function' && define.amd && define([], function () { return window.hljs })) }(function (e) { function n (e) { return e.replace(/&/gm, '&').replace(//gm, '>') } function t (e) { return e.nodeName.toLowerCase() } function r (e, n) { var t = e && e.exec(n); return t && t.index == 0 } function a (e) { var n = (e.className + ' ' + (e.parentNode ? e.parentNode.className : '')).split(/\s+/); return n = n.map(function (e) { return e.replace(/^lang(uage)?-/, '') }), n.filter(function (e) { return N(e) || /no(-?)highlight/.test(e) })[0] } function o (e, n) { var t = {}; for (var r in e)t[r] = e[r]; if (n) for (var r in n)t[r] = n[r]; return t } function i (e) { var n = []; return (function r (e, a) { for (var o = e.firstChild; o; o = o.nextSibling)o.nodeType == 3 ? a += o.nodeValue.length : o.nodeType == 1 && (n.push({event: 'start', offset: a, node: o}), a = r(o, a), t(o).match(/br|hr|img|input/) || n.push({event: 'stop', offset: a, node: o})); return a }(e, 0)), n } function c (e, r, a) { function o () { return e.length && r.length ? e[0].offset != r[0].offset ? e[0].offset < r[0].offset ? e : r : r[0].event == 'start' ? e : r : e.length ? e : r } function i (e) { function r (e) { return ' ' + e.nodeName + '="' + n(e.value) + '"' }l += '<' + t(e) + Array.prototype.map.call(e.attributes, r).join('') + '>' } function c (e) { l += '' } function u (e) { (e.event == 'start' ? i : c)(e.node) } for (var s = 0, l = '', f = []; e.length || r.length;) { var g = o(); if (l += n(a.substr(s, g[0].offset - s)), s = g[0].offset, g == e) { f.reverse().forEach(c); do u(g.splice(0, 1)[0]), g = o(); while (g == e && g.length && g[0].offset == s);f.reverse().forEach(i) } else g[0].event == 'start' ? f.push(g[0].node) : f.pop(), u(g.splice(0, 1)[0]) } return l + n(a.substr(s)) } function u (e) { function n (e) { return e && e.source || e } function t (t, r) { return RegExp(n(t), 'm' + (e.cI ? 'i' : '') + (r ? 'g' : '')) } function r (a, i) { if (!a.compiled) { if (a.compiled = !0, a.k = a.k || a.bK, a.k) { var c = {}, u = function (n, t) { e.cI && (t = t.toLowerCase()), t.split(' ').forEach(function (e) { var t = e.split('|'); c[t[0]] = [n, t[1] ? Number(t[1]) : 1] }) }; typeof a.k === 'string' ? u('keyword', a.k) : Object.keys(a.k).forEach(function (e) { u(e, a.k[e]) }), a.k = c }a.lR = t(a.l || /\b[A-Za-z0-9_]+\b/, !0), i && (a.bK && (a.b = '\\b(' + a.bK.split(' ').join('|') + ')\\b'), a.b || (a.b = /\B|\b/), a.bR = t(a.b), a.e || a.eW || (a.e = /\B|\b/), a.e && (a.eR = t(a.e)), a.tE = n(a.e) || '', a.eW && i.tE && (a.tE += (a.e ? '|' : '') + i.tE)), a.i && (a.iR = t(a.i)), void 0 === a.r && (a.r = 1), a.c || (a.c = []); var s = []; a.c.forEach(function (e) { e.v ? e.v.forEach(function (n) { s.push(o(e, n)) }) : s.push(e == 'self' ? a : e) }), a.c = s, a.c.forEach(function (e) { r(e, a) }), a.starts && r(a.starts, i); var l = a.c.map(function (e) { return e.bK ? '\\.?(' + e.b + ')\\.?' : e.b }).concat([a.tE, a.i]).map(n).filter(Boolean); a.t = l.length ? t(l.join('|'), !0) : {exec: function () { return null }} } }r(e) } function s (e, t, a, o) { function i (e, n) { for (var t = 0; t < n.c.length; t++) if (r(n.c[t].bR, e)) return n.c[t] } function c (e, n) { return r(e.eR, n) ? e : e.eW ? c(e.parent, n) : void 0 } function f (e, n) { return !a && r(n.iR, e) } function g (e, n) { var t = x.cI ? n[0].toLowerCase() : n[0]; return e.k.hasOwnProperty(t) && e.k[t] } function p (e, n, t, r) { var a = r ? '' : E.classPrefix, o = '', o + n + i } function d () { if (!w.k) return n(y); var e = '', t = 0; w.lR.lastIndex = 0; for (var r = w.lR.exec(y); r;) { e += n(y.substr(t, r.index - t)); var a = g(w, r); a ? (B += a[1], e += p(a[0], n(r[0]))) : e += n(r[0]), t = w.lR.lastIndex, r = w.lR.exec(y) } return e + n(y.substr(t)) } function h () { if (w.sL && !R[w.sL]) return n(y); var e = w.sL ? s(w.sL, y, !0, L[w.sL]) : l(y); return w.r > 0 && (B += e.r), w.subLanguageMode == 'continuous' && (L[w.sL] = e.top), p(e.language, e.value, !1, !0) } function v () { return void 0 !== w.sL ? h() : d() } function b (e, t) { var r = e.cN ? p(e.cN, '', !0) : ''; e.rB ? (M += r, y = '') : e.eB ? (M += n(t) + r, y = '') : (M += r, y = t), w = Object.create(e, {parent: {value: w}}) } function m (e, t) { if (y += e, void 0 === t) return M += v(), 0; var r = i(t, w); if (r) return M += v(), b(r, t), r.rB ? 0 : t.length; var a = c(w, t); if (a) { var o = w; o.rE || o.eE || (y += t), M += v(); do w.cN && (M += ''), B += w.r, w = w.parent; while (w != a.parent);return o.eE && (M += n(t)), y = '', a.starts && b(a.starts, ''), o.rE ? 0 : t.length } if (f(t, w)) throw new Error('Illegal lexeme "' + t + '" for mode "' + (w.cN || '') + '"'); return y += t, t.length || 1 } var x = N(e); if (!x) throw new Error('Unknown language: "' + e + '"'); u(x); for (var w = o || x, L = {}, M = '', k = w; k != x; k = k.parent)k.cN && (M = p(k.cN, '', !0) + M); var y = '', B = 0; try { for (var C, j, I = 0; ;) { if (w.t.lastIndex = I, C = w.t.exec(t), !C) break; j = m(t.substr(I, C.index - I), C[0]), I = C.index + j }m(t.substr(I)); for (var k = w; k.parent; k = k.parent)k.cN && (M += ''); return {r: B, value: M, language: e, top: w} } catch (A) { if (A.message.indexOf('Illegal') != -1) return {r: 0, value: n(t)}; throw A } } function l (e, t) { t = t || E.languages || Object.keys(R); var r = {r: 0, value: n(e)}, a = r; return t.forEach(function (n) { if (N(n)) { var t = s(n, e, !1); t.language = n, t.r > a.r && (a = t), t.r > r.r && (a = r, r = t) } }), a.language && (r.second_best = a), r } function f (e) { return E.tabReplace && (e = e.replace(/^((<[^>]+>|\t)+)/gm, function (e, n) { return n.replace(/\t/g, E.tabReplace) })), E.useBR && (e = e.replace(/\n/g, '
')), e } function g (e, n, t) { var r = n ? x[n] : t, a = [e.trim()]; return e.match(/(\s|^)hljs(\s|$)/) || a.push('hljs'), r && a.push(r), a.join(' ').trim() } function p (e) { var n = a(e); if (!/no(-?)highlight/.test(n)) { var t; E.useBR ? (t = document.createElementNS('http://www.w3.org/1999/xhtml', 'div'), t.innerHTML = e.innerHTML.replace(/\n/g, '').replace(//g, '\n')) : t = e; var r = t.textContent, o = n ? s(n, r, !0) : l(r), u = i(t); if (u.length) { var p = document.createElementNS('http://www.w3.org/1999/xhtml', 'div'); p.innerHTML = o.value, o.value = c(u, i(p), r) }o.value = f(o.value), e.innerHTML = o.value, e.className = g(e.className, n, o.language), e.result = {language: o.language, re: o.r}, o.second_best && (e.second_best = {language: o.second_best.language, re: o.second_best.r}) } } function d (e) { E = o(E, e) } function h () { if (!h.called) { h.called = !0; var e = document.querySelectorAll('pre code'); Array.prototype.forEach.call(e, p) } } function v () { addEventListener('DOMContentLoaded', h, !1), addEventListener('load', h, !1) } function b (n, t) { var r = R[n] = t(e); r.aliases && r.aliases.forEach(function (e) { x[e] = n }) } function m () { return Object.keys(R) } function N (e) { return R[e] || R[x[e]] } var E = {classPrefix: 'hljs-', tabReplace: null, useBR: !1, languages: void 0}, R = {}, x = {}; return e.highlight = s, e.highlightAuto = l, e.fixMarkup = f, e.highlightBlock = p, e.configure = d, e.initHighlighting = h, e.initHighlightingOnLoad = v, e.registerLanguage = b, e.listLanguages = m, e.getLanguage = N, e.inherit = o, e.IR = '[a-zA-Z][a-zA-Z0-9_]*', e.UIR = '[a-zA-Z_][a-zA-Z0-9_]*', e.NR = '\\b\\d+(\\.\\d+)?', e.CNR = '(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)', e.BNR = '\\b(0b[01]+)', e.RSR = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~', e.BE = {b: '\\\\[\\s\\S]', r: 0}, e.ASM = {cN: 'string', b: "'", e: "'", i: '\\n', c: [e.BE]}, e.QSM = {cN: 'string', b: '"', e: '"', i: '\\n', c: [e.BE]}, e.PWM = {b: /\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/}, e.CLCM = {cN: 'comment', b: '//', e: '$', c: [e.PWM]}, e.CBCM = {cN: 'comment', b: '/\\*', e: '\\*/', c: [e.PWM]}, e.HCM = {cN: 'comment', b: '#', e: '$', c: [e.PWM]}, e.NM = {cN: 'number', b: e.NR, r: 0}, e.CNM = {cN: 'number', b: e.CNR, r: 0}, e.BNM = {cN: 'number', b: e.BNR, r: 0}, e.CSSNM = {cN: 'number', b: e.NR + '(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?', r: 0}, e.RM = {cN: 'regexp', b: /\//, e: /\/[gimuy]*/, i: /\n/, c: [e.BE, {b: /\[/, e: /\]/, r: 0, c: [e.BE]}]}, e.TM = {cN: 'title', b: e.IR, r: 0}, e.UTM = {cN: 'title', b: e.UIR, r: 0}, e })); hljs.registerLanguage('coffeescript', function (e) { var c = {keyword: 'in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not', literal: 'true false null undefined yes no on off', reserved: 'case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf', built_in: 'npm require console print module global window document'}, n = '[A-Za-z$_][0-9A-Za-z$_]*', t = {cN: 'subst', b: /#\{/, e: /}/, k: c}, r = [e.BNM, e.inherit(e.CNM, {starts: {e: '(\\s*/)?', r: 0}}), {cN: 'string', v: [{b: /'''/, e: /'''/, c: [e.BE]}, {b: /'/, e: /'/, c: [e.BE]}, {b: /"""/, e: /"""/, c: [e.BE, t]}, {b: /"/, e: /"/, c: [e.BE, t]}]}, {cN: 'regexp', v: [{b: '///', e: '///', c: [t, e.HCM]}, {b: '//[gim]*', r: 0}, {b: /\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]}, {cN: 'property', b: '@' + n}, {b: '`', e: '`', eB: !0, eE: !0, sL: 'javascript'}]; t.c = r; var i = e.inherit(e.TM, {b: n}), s = '(\\(.*\\))?\\s*\\B[-=]>', o = {cN: 'params', b: '\\([^\\(]', rB: !0, c: [{b: /\(/, e: /\)/, k: c, c: ['self'].concat(r)}]}; return {aliases: ['coffee', 'cson', 'iced'], k: c, i: /\/\*/, c: r.concat([{cN: 'comment', b: '###', e: '###', c: [e.PWM]}, e.HCM, {cN: 'function', b: '^\\s*' + n + '\\s*=\\s*' + s, e: '[-=]>', rB: !0, c: [i, o]}, {b: /[:\(,=]\s*/, r: 0, c: [{cN: 'function', b: s, e: '[-=]>', rB: !0, c: [o]}]}, {cN: 'class', bK: 'class', e: '$', i: /[:="\[\]]/, c: [{bK: 'extends', eW: !0, i: /[:="\[\]]/, c: [i]}, i]}, {cN: 'attribute', b: n + ':', e: ':', rB: !0, rE: !0, r: 0}])} }); hljs.registerLanguage('xml', function () { var t = '[A-Za-z0-9\\._:-]+', e = {b: /<\?(php)?(?!\w)/, e: /\?>/, sL: 'php', subLanguageMode: 'continuous'}, c = {eW: !0, i: /]+/}]}]}]}; return {aliases: ['html', 'xhtml', 'rss', 'atom', 'xsl', 'plist'], cI: !0, c: [{cN: 'doctype', b: '', r: 10, c: [{b: '\\[', e: '\\]'}]}, {cN: 'comment', b: '', r: 10}, {cN: 'cdata', b: '<\\!\\[CDATA\\[', e: '\\]\\]>', r: 10}, {cN: 'tag', b: '|$)', e: '>', k: {title: 'style'}, c: [c], starts: {e: '', rE: !0, sL: 'css'}}, {cN: 'tag', b: '|$)', e: '>', k: {title: 'script'}, c: [c], starts: {e: '', rE: !0, sL: 'javascript'}}, e, {cN: 'pi', b: /<\?\w+/, e: /\?>/, r: 10}, {cN: 'tag', b: '', c: [{cN: 'title', b: /[^ \/><\n\t]+/, r: 0}, c]}]} }); hljs.registerLanguage('markdown', function () { return {aliases: ['md', 'mkdown', 'mkd'], c: [{cN: 'header', v: [{b: '^#{1,6}', e: '$'}, {b: '^.+?\\n[=-]{2,}$'}]}, {b: '<', e: '>', sL: 'xml', r: 0}, {cN: 'bullet', b: '^([*+-]|(\\d+\\.))\\s+'}, {cN: 'strong', b: '[*_]{2}.+?[*_]{2}'}, {cN: 'emphasis', v: [{b: '\\*.+?\\*'}, {b: '_.+?_', r: 0}]}, {cN: 'blockquote', b: '^>\\s+', e: '$'}, {cN: 'code', v: [{b: '`.+?`'}, {b: '^( {4}| )', e: '$', r: 0}]}, {cN: 'horizontal_rule', b: '^[-\\*]{3,}', e: '$'}, {b: '\\[.+?\\][\\(\\[].*?[\\)\\]]', rB: !0, c: [{cN: 'link_label', b: '\\[', e: '\\]', eB: !0, rE: !0, r: 0}, {cN: 'link_url', b: '\\]\\(', e: '\\)', eB: !0, eE: !0}, {cN: 'link_reference', b: '\\]\\[', e: '\\]', eB: !0, eE: !0}], r: 10}, {b: '^\\[.+\\]:', rB: !0, c: [{cN: 'link_reference', b: '\\[', e: '\\]:', eB: !0, eE: !0, starts: {cN: 'link_url', e: '$'}}]}]} }); hljs.registerLanguage('bash', function (e) { var t = {cN: 'variable', v: [{b: /\$[\w\d#@][\w\d_]*/}, {b: /\$\{(.*?)\}/}]}, s = {cN: 'string', b: /"/, e: /"/, c: [e.BE, t, {cN: 'variable', b: /\$\(/, e: /\)/, c: [e.BE]}]}, a = {cN: 'string', b: /'/, e: /'/}; return {aliases: ['sh', 'zsh'], l: /-?[a-z\.]+/, k: {keyword: 'if then else elif fi for while in do done case esac function', literal: 'true false', built_in: 'break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp', operator: '-ne -eq -lt -gt -f -d -e -s -l -a'}, c: [{cN: 'shebang', b: /^#![^\n]+sh\s*$/, r: 10}, {cN: 'function', b: /\w[\w\d_]*\s*\(\s*\)\s*\{/, rB: !0, c: [e.inherit(e.TM, {b: /\w[\w\d_]*/})], r: 0}, e.HCM, e.NM, s, a, t]} }); hljs.registerLanguage('ruby', function (e) { var b = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?', r = 'and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor', c = {cN: 'yardoctag', b: '@[A-Za-z]+'}, a = {cN: 'value', b: '#<', e: '>'}, s = {cN: 'comment', v: [{b: '#', e: '$', c: [c]}, {b: '^\\=begin', e: '^\\=end', c: [c], r: 10}, {b: '^__END__', e: '\\n$'}]}, n = {cN: 'subst', b: '#\\{', e: '}', k: r}, t = {cN: 'string', c: [e.BE, n], v: [{b: /'/, e: /'/}, {b: /"/, e: /"/}, {b: /`/, e: /`/}, {b: '%[qQwWx]?\\(', e: '\\)'}, {b: '%[qQwWx]?\\[', e: '\\]'}, {b: '%[qQwWx]?{', e: '}'}, {b: '%[qQwWx]?<', e: '>'}, {b: '%[qQwWx]?/', e: '/'}, {b: '%[qQwWx]?%', e: '%'}, {b: '%[qQwWx]?-', e: '-'}, {b: '%[qQwWx]?\\|', e: '\\|'}, {b: /\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]}, i = {cN: 'params', b: '\\(', e: '\\)', k: r}, d = [t, a, s, {cN: 'class', bK: 'class module', e: '$|;', i: /=/, c: [e.inherit(e.TM, {b: '[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?'}), {cN: 'inheritance', b: '<\\s*', c: [{cN: 'parent', b: '(' + e.IR + '::)?' + e.IR}]}, s]}, {cN: 'function', bK: 'def', e: ' |$|;', r: 0, c: [e.inherit(e.TM, {b: b}), i, s]}, {cN: 'constant', b: '(::)?(\\b[A-Z]\\w*(::)?)+', r: 0}, {cN: 'symbol', b: e.UIR + '(\\!|\\?)?:', r: 0}, {cN: 'symbol', b: ':', c: [t, {b: b}], r: 0}, {cN: 'number', b: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b', r: 0}, {cN: 'variable', b: '(\\$\\W)|((\\$|\\@\\@?)(\\w+))'}, {b: '(' + e.RSR + ')\\s*', c: [a, s, {cN: 'regexp', c: [e.BE, n], i: /\n/, v: [{b: '/', e: '/[a-z]*'}, {b: '%r{', e: '}[a-z]*'}, {b: '%r\\(', e: '\\)[a-z]*'}, {b: '%r!', e: '![a-z]*'}, {b: '%r\\[', e: '\\][a-z]*'}]}], r: 0}]; n.c = d, i.c = d; var l = '[>?]>', u = '[\\w#]+\\(\\w+\\):\\d+:\\d+>', N = '(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>', o = [{b: /^\s*=>/, cN: 'status', starts: {e: '$', c: d}}, {cN: 'prompt', b: '^(' + l + '|' + u + '|' + N + ')', starts: {e: '$', c: d}}]; return {aliases: ['rb', 'gemspec', 'podspec', 'thor', 'irb'], k: r, c: [s].concat(o).concat(d)} }); hljs.registerLanguage('javascript', function (r) { return {aliases: ['js'], k: {keyword: 'in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class', literal: 'true false null undefined NaN Infinity', built_in: 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document'}, c: [{cN: 'pi', r: 10, v: [{b: /^\s*('|")use strict('|")/}, {b: /^\s*('|")use asm('|")/}]}, r.ASM, r.QSM, r.CLCM, r.CBCM, r.CNM, {b: '(' + r.RSR + '|\\b(case|return|throw)\\b)\\s*', k: 'return throw case', c: [r.CLCM, r.CBCM, r.RM, {b: /;/, r: 0, sL: 'xml'}], r: 0}, {cN: 'function', bK: 'function', e: /\{/, eE: !0, c: [r.inherit(r.TM, {b: /[A-Za-z$_][0-9A-Za-z$_]*/}), {cN: 'params', b: /\(/, e: /\)/, c: [r.CLCM, r.CBCM], i: /["'\(]/}], i: /\[|%/}, {b: /\$[(.]/}, {b: '\\.' + r.IR, r: 0}]} }); hljs.registerLanguage('json', function (e) { var t = {literal: 'true false null'}, i = [e.QSM, e.CNM], l = {cN: 'value', e: ',', eW: !0, eE: !0, c: i, k: t}, c = {b: '{', e: '}', c: [{cN: 'attribute', b: '\\s*"', e: '"\\s*:\\s*', eB: !0, eE: !0, c: [e.BE], i: '\\n', starts: l}], i: '\\S'}, n = {b: '\\[', e: '\\]', c: [e.inherit(l, {cN: null})], i: '\\S'}; return i.splice(i.length, 0, c, n), {c: i, k: t, i: '\\S'} }); hljs.registerLanguage('http', function () { return {i: '\\S', c: [{cN: 'status', b: '^HTTP/[0-9\\.]+', e: '$', c: [{cN: 'number', b: '\\b\\d{3}\\b'}]}, {cN: 'request', b: '^[A-Z]+ (.*?) HTTP/[0-9\\.]+$', rB: !0, e: '$', c: [{cN: 'string', b: ' ', e: ' ', eB: !0, eE: !0}]}, {cN: 'attribute', b: '^\\w', e: ': ', eE: !0, i: '\\n|\\s|=', starts: {cN: 'string', e: '$'}}, {b: '\\n\\n', starts: {sL: '', eW: !0}}]} }); hljs.registerLanguage('css', function (e) { var c = '[a-zA-Z-][a-zA-Z0-9_-]*', a = {cN: 'function', b: c + '\\(', rB: !0, eE: !0, e: '\\('}; return {cI: !0, i: "[=/|']", c: [e.CBCM, {cN: 'id', b: '\\#[A-Za-z0-9_-]+'}, {cN: 'class', b: '\\.[A-Za-z0-9_-]+', r: 0}, {cN: 'attr_selector', b: '\\[', e: '\\]', i: '$'}, {cN: 'pseudo', b: ":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"}, {cN: 'at_rule', b: '@(font-face|page)', l: '[a-z-]+', k: 'font-face page'}, {cN: 'at_rule', b: '@', e: '[{;]', c: [{cN: 'keyword', b: /\S+/}, {b: /\s/, eW: !0, eE: !0, r: 0, c: [a, e.ASM, e.QSM, e.CSSNM]}]}, {cN: 'tag', b: c, r: 0}, {cN: 'rules', b: '{', e: '}', i: '[^\\s]', r: 0, c: [e.CBCM, {cN: 'rule', b: '[^\\s]', rB: !0, e: ';', eW: !0, c: [{cN: 'attribute', b: '[A-Z\\_\\.\\-]+', e: ':', eE: !0, i: '[^\\s]', starts: {cN: 'value', eW: !0, eE: !0, c: [a, e.CSSNM, e.QSM, e.ASM, e.CBCM, {cN: 'hexcolor', b: '#[0-9A-Fa-f]+'}, {cN: 'important', b: '!important'}]}}]}]}]} }) diff --git a/dist/www/javascripts/lib/mermaid.js b/dist/www/javascripts/lib/mermaid.js index 5a825d8ad4..955ab1c29a 100644 --- a/dist/www/javascripts/lib/mermaid.js +++ b/dist/www/javascripts/lib/mermaid.js @@ -1,9509 +1,9585 @@ -!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.mermaid=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o b ? 1 : a >= b ? 0 : NaN; - } - d3.descending = function(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; - }; - d3.min = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n) if ((b = array[i]) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = array[i]) != null && a > b) a = b; - } else { - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; - } - return a; - }; - d3.max = function(array, f) { - var i = -1, n = array.length, a, b; - if (arguments.length === 1) { - while (++i < n) if ((b = array[i]) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = array[i]) != null && b > a) a = b; - } else { - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { - a = b; - break; - } - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; - } - return a; - }; - d3.extent = function(array, f) { - var i = -1, n = array.length, a, b, c; - if (arguments.length === 1) { - while (++i < n) if ((b = array[i]) != null && b >= b) { - a = c = b; - break; - } - while (++i < n) if ((b = array[i]) != null) { - if (a > b) a = b; - if (c < b) c = b; - } - } else { - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { - a = c = b; - break; - } - while (++i < n) if ((b = f.call(array, array[i], i)) != null) { - if (a > b) a = b; - if (c < b) c = b; +!(function (e) { if (typeof exports === 'object')module.exports = e(); else if (typeof define === 'function' && define.amd)define(e); else { var f; typeof window !== 'undefined' ? f = window : typeof global !== 'undefined' ? f = global : typeof self !== 'undefined' && (f = self), f.mermaid = e() } }(function () { + var define, module, exports; return (function e (t, n, r) { function s (o, u) { if (!n[o]) { if (!t[o]) { var a = typeof require === 'function' && require; if (!u && a) return a(o, !0); if (i) return i(o, !0); throw new Error("Cannot find module '" + o + "'") } var f = n[o] = {exports: {}}; t[o][0].call(f.exports, function (e) { var n = t[o][1][e]; return s(n || e) }, f, f.exports, e, t, n, r) } return n[o].exports } var i = typeof require === 'function' && require; for (var o = 0; o < r.length; o++)s(r[o]); return s })({1: [function (_dereq_, module, exports) { + !(function () { + var d3 = { + version: '3.5.6' } - } - return [ a, c ]; - }; - function d3_number(x) { - return x === null ? NaN : +x; - } - function d3_numeric(x) { - return !isNaN(x); - } - d3.sum = function(array, f) { - var s = 0, n = array.length, a, i = -1; - if (arguments.length === 1) { - while (++i < n) if (d3_numeric(a = +array[i])) s += a; - } else { - while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a; - } - return s; - }; - d3.mean = function(array, f) { - var s = 0, n = array.length, a, i = -1, j = n; - if (arguments.length === 1) { - while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j; - } else { - while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j; - } - if (j) return s / j; - }; - d3.quantile = function(values, p) { - var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h; - return e ? v + e * (values[h] - v) : v; - }; - d3.median = function(array, f) { - var numbers = [], n = array.length, a, i = -1; - if (arguments.length === 1) { - while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a); - } else { - while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a); - } - if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5); - }; - d3.variance = function(array, f) { - var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0; - if (arguments.length === 1) { - while (++i < n) { - if (d3_numeric(a = d3_number(array[i]))) { - d = a - m; - m += d / ++j; - s += d * (a - m); - } - } - } else { - while (++i < n) { - if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) { - d = a - m; - m += d / ++j; - s += d * (a - m); + var d3_arraySlice = [].slice, d3_array = function (list) { + return d3_arraySlice.call(list) } + var d3_document = this.document + function d3_documentElement (node) { + return node && (node.ownerDocument || node.document || node).documentElement } - } - if (j > 1) return s / (j - 1); - }; - d3.deviation = function() { - var v = d3.variance.apply(this, arguments); - return v ? Math.sqrt(v) : v; - }; - function d3_bisector(compare) { - return { - left: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1; - } - return lo; - } - }; - } - var d3_bisect = d3_bisector(d3_ascending); - d3.bisectLeft = d3_bisect.left; - d3.bisect = d3.bisectRight = d3_bisect.right; - d3.bisector = function(f) { - return d3_bisector(f.length === 1 ? function(d, x) { - return d3_ascending(f(d), x); - } : f); - }; - d3.shuffle = function(array, i0, i1) { - if ((m = arguments.length) < 3) { - i1 = array.length; - if (m < 2) i0 = 0; - } - var m = i1 - i0, t, i; - while (m) { - i = Math.random() * m-- | 0; - t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t; - } - return array; - }; - d3.permute = function(array, indexes) { - var i = indexes.length, permutes = new Array(i); - while (i--) permutes[i] = array[indexes[i]]; - return permutes; - }; - d3.pairs = function(array) { - var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n); - while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ]; - return pairs; - }; - d3.zip = function() { - if (!(n = arguments.length)) return []; - for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) { - for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) { - zip[j] = arguments[j][i]; + function d3_window (node) { + return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView) } - } - return zips; - }; - function d3_zipLength(d) { - return d.length; - } - d3.transpose = function(matrix) { - return d3.zip.apply(d3, matrix); - }; - d3.keys = function(map) { - var keys = []; - for (var key in map) keys.push(key); - return keys; - }; - d3.values = function(map) { - var values = []; - for (var key in map) values.push(map[key]); - return values; - }; - d3.entries = function(map) { - var entries = []; - for (var key in map) entries.push({ - key: key, - value: map[key] - }); - return entries; - }; - d3.merge = function(arrays) { - var n = arrays.length, m, i = -1, j = 0, merged, array; - while (++i < n) j += arrays[i].length; - merged = new Array(j); - while (--n >= 0) { - array = arrays[n]; - m = array.length; - while (--m >= 0) { - merged[--j] = array[m]; + if (d3_document) { + try { + d3_array(d3_document.documentElement.childNodes)[0].nodeType + } catch (e) { + d3_array = function (list) { + var i = list.length, array = new Array(i) + while (i--) array[i] = list[i] + return array + } + } } - } - return merged; - }; - var abs = Math.abs; - d3.range = function(start, stop, step) { - if (arguments.length < 3) { - step = 1; - if (arguments.length < 2) { - stop = start; - start = 0; + if (!Date.now) { + Date.now = function () { + return +new Date() + } } - } - if ((stop - start) / step === Infinity) throw new Error("infinite range"); - var range = [], k = d3_range_integerScale(abs(step)), i = -1, j; - start *= k, stop *= k, step *= k; - if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k); - return range; - }; - function d3_range_integerScale(x) { - var k = 1; - while (x * k % 1) k *= 10; - return k; - } - function d3_class(ctor, properties) { - for (var key in properties) { - Object.defineProperty(ctor.prototype, key, { - value: properties[key], - enumerable: false - }); - } - } - d3.map = function(object, f) { - var map = new d3_Map(); - if (object instanceof d3_Map) { - object.forEach(function(key, value) { - map.set(key, value); - }); - } else if (Array.isArray(object)) { - var i = -1, n = object.length, o; - if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o); - } else { - for (var key in object) map.set(key, object[key]); - } - return map; - }; - function d3_Map() { - this._ = Object.create(null); - } - var d3_map_proto = "__proto__", d3_map_zero = "\x00"; - d3_class(d3_Map, { - has: d3_map_has, - get: function(key) { - return this._[d3_map_escape(key)]; - }, - set: function(key, value) { - return this._[d3_map_escape(key)] = value; - }, - remove: d3_map_remove, - keys: d3_map_keys, - values: function() { - var values = []; - for (var key in this._) values.push(this._[key]); - return values; - }, - entries: function() { - var entries = []; - for (var key in this._) entries.push({ - key: d3_map_unescape(key), - value: this._[key] - }); - return entries; - }, - size: d3_map_size, - empty: d3_map_empty, - forEach: function(f) { - for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]); - } - }); - function d3_map_escape(key) { - return (key += "") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key; - } - function d3_map_unescape(key) { - return (key += "")[0] === d3_map_zero ? key.slice(1) : key; - } - function d3_map_has(key) { - return d3_map_escape(key) in this._; - } - function d3_map_remove(key) { - return (key = d3_map_escape(key)) in this._ && delete this._[key]; - } - function d3_map_keys() { - var keys = []; - for (var key in this._) keys.push(d3_map_unescape(key)); - return keys; - } - function d3_map_size() { - var size = 0; - for (var key in this._) ++size; - return size; - } - function d3_map_empty() { - for (var key in this._) return false; - return true; - } - d3.nest = function() { - var nest = {}, keys = [], sortKeys = [], sortValues, rollup; - function map(mapType, array, depth) { - if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array; - var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values; - while (++i < n) { - if (values = valuesByKey.get(keyValue = key(object = array[i]))) { - values.push(object); - } else { - valuesByKey.set(keyValue, [ object ]); + if (d3_document) { + try { + d3_document.createElement('DIV').style.setProperty('opacity', 0, '') + } catch (error) { + var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty + d3_element_prototype.setAttribute = function (name, value) { + d3_element_setAttribute.call(this, name, value + '') + } + d3_element_prototype.setAttributeNS = function (space, local, value) { + d3_element_setAttributeNS.call(this, space, local, value + '') + } + d3_style_prototype.setProperty = function (name, value, priority) { + d3_style_setProperty.call(this, name, value + '', priority) + } } } - if (mapType) { - object = mapType(); - setter = function(keyValue, values) { - object.set(keyValue, map(mapType, values, depth)); - }; - } else { - object = {}; - setter = function(keyValue, values) { - object[keyValue] = map(mapType, values, depth); - }; + d3.ascending = d3_ascending + function d3_ascending (a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN } - valuesByKey.forEach(setter); - return object; - } - function entries(map, depth) { - if (depth >= keys.length) return map; - var array = [], sortKey = sortKeys[depth++]; - map.forEach(function(key, keyMap) { - array.push({ - key: key, - values: entries(keyMap, depth) - }); - }); - return sortKey ? array.sort(function(a, b) { - return sortKey(a.key, b.key); - }) : array; - } - nest.map = function(array, mapType) { - return map(mapType, array, 0); - }; - nest.entries = function(array) { - return entries(map(d3.map, array, 0), 0); - }; - nest.key = function(d) { - keys.push(d); - return nest; - }; - nest.sortKeys = function(order) { - sortKeys[keys.length - 1] = order; - return nest; - }; - nest.sortValues = function(order) { - sortValues = order; - return nest; - }; - nest.rollup = function(f) { - rollup = f; - return nest; - }; - return nest; - }; - d3.set = function(array) { - var set = new d3_Set(); - if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]); - return set; - }; - function d3_Set() { - this._ = Object.create(null); - } - d3_class(d3_Set, { - has: d3_map_has, - add: function(key) { - this._[d3_map_escape(key += "")] = true; - return key; - }, - remove: d3_map_remove, - values: d3_map_keys, - size: d3_map_size, - empty: d3_map_empty, - forEach: function(f) { - for (var key in this._) f.call(this, d3_map_unescape(key)); - } - }); - d3.behavior = {}; - function d3_identity(d) { - return d; - } - d3.rebind = function(target, source) { - var i = 1, n = arguments.length, method; - while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); - return target; - }; - function d3_rebind(target, source, method) { - return function() { - var value = method.apply(source, arguments); - return value === source ? target : value; - }; - } - function d3_vendorSymbol(object, name) { - if (name in object) return name; - name = name.charAt(0).toUpperCase() + name.slice(1); - for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) { - var prefixName = d3_vendorPrefixes[i] + name; - if (prefixName in object) return prefixName; - } - } - var d3_vendorPrefixes = [ "webkit", "ms", "moz", "Moz", "o", "O" ]; - function d3_noop() {} - d3.dispatch = function() { - var dispatch = new d3_dispatch(), i = -1, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - return dispatch; - }; - function d3_dispatch() {} - d3_dispatch.prototype.on = function(type, listener) { - var i = type.indexOf("."), name = ""; - if (i >= 0) { - name = type.slice(i + 1); - type = type.slice(0, i); - } - if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener); - if (arguments.length === 2) { - if (listener == null) for (type in this) { - if (this.hasOwnProperty(type)) this[type].on(name, null); + d3.descending = function (a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN } - return this; - } - }; - function d3_dispatch_event(dispatch) { - var listeners = [], listenerByName = new d3_Map(); - function event() { - var z = listeners, i = -1, n = z.length, l; - while (++i < n) if (l = z[i].on) l.apply(this, arguments); - return dispatch; - } - event.on = function(name, listener) { - var l = listenerByName.get(name), i; - if (arguments.length < 2) return l && l.on; - if (l) { - l.on = null; - listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)); - listenerByName.remove(name); - } - if (listener) listeners.push(listenerByName.set(name, { - on: listener - })); - return dispatch; - }; - return event; - } - d3.event = null; - function d3_eventPreventDefault() { - d3.event.preventDefault(); - } - function d3_eventSource() { - var e = d3.event, s; - while (s = e.sourceEvent) e = s; - return e; - } - function d3_eventDispatch(target) { - var dispatch = new d3_dispatch(), i = 0, n = arguments.length; - while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); - dispatch.of = function(thiz, argumentz) { - return function(e1) { - try { - var e0 = e1.sourceEvent = d3.event; - e1.target = target; - d3.event = e1; - dispatch[e1.type].apply(thiz, argumentz); - } finally { - d3.event = e0; + d3.min = function (array, f) { + var i = -1, n = array.length, a, b + if (arguments.length === 1) { + while (++i < n) { + if ((b = array[i]) != null && b >= b) { + a = b + break + } + } + while (++i < n) if ((b = array[i]) != null && a > b) a = b + } else { + while (++i < n) { + if ((b = f.call(array, array[i], i)) != null && b >= b) { + a = b + break + } + } + while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b } - }; - }; - return dispatch; - } - d3.requote = function(s) { - return s.replace(d3_requote_re, "\\$&"); - }; - var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; - var d3_subclass = {}.__proto__ ? function(object, prototype) { - object.__proto__ = prototype; - } : function(object, prototype) { - for (var property in prototype) object[property] = prototype[property]; - }; - function d3_selection(groups) { - d3_subclass(groups, d3_selectionPrototype); - return groups; - } - var d3_select = function(s, n) { - return n.querySelector(s); - }, d3_selectAll = function(s, n) { - return n.querySelectorAll(s); - }, d3_selectMatches = function(n, s) { - var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, "matchesSelector")]; - d3_selectMatches = function(n, s) { - return d3_selectMatcher.call(n, s); - }; - return d3_selectMatches(n, s); - }; - if (typeof Sizzle === "function") { - d3_select = function(s, n) { - return Sizzle(s, n)[0] || null; - }; - d3_selectAll = Sizzle; - d3_selectMatches = Sizzle.matchesSelector; - } - d3.selection = function() { - return d3.select(d3_document.documentElement); - }; - var d3_selectionPrototype = d3.selection.prototype = []; - d3_selectionPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, group, node; - selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(subnode = selector.call(node, node.__data__, i, j)); - if (subnode && "__data__" in node) subnode.__data__ = node.__data__; + return a + } + d3.max = function (array, f) { + var i = -1, n = array.length, a, b + if (arguments.length === 1) { + while (++i < n) { + if ((b = array[i]) != null && b >= b) { + a = b + break + } + } + while (++i < n) if ((b = array[i]) != null && b > a) a = b } else { - subgroup.push(null); + while (++i < n) { + if ((b = f.call(array, array[i], i)) != null && b >= b) { + a = b + break + } + } + while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b } + return a } - } - return d3_selection(subgroups); - }; - function d3_selection_selector(selector) { - return typeof selector === "function" ? selector : function() { - return d3_select(selector, this); - }; - } - d3_selectionPrototype.selectAll = function(selector) { - var subgroups = [], subgroup, node; - selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j))); - subgroup.parentNode = node; + d3.extent = function (array, f) { + var i = -1, n = array.length, a, b, c + if (arguments.length === 1) { + while (++i < n) { + if ((b = array[i]) != null && b >= b) { + a = c = b + break + } + } + while (++i < n) { + if ((b = array[i]) != null) { + if (a > b) a = b + if (c < b) c = b + } + } + } else { + while (++i < n) { + if ((b = f.call(array, array[i], i)) != null && b >= b) { + a = c = b + break + } + } + while (++i < n) { + if ((b = f.call(array, array[i], i)) != null) { + if (a > b) a = b + if (c < b) c = b + } + } } + return [ a, c ] } - } - return d3_selection(subgroups); - }; - function d3_selection_selectorAll(selector) { - return typeof selector === "function" ? selector : function() { - return d3_selectAll(selector, this); - }; - } - var d3_nsPrefix = { - svg: "http://www.w3.org/2000/svg", - xhtml: "http://www.w3.org/1999/xhtml", - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" - }; - d3.ns = { - prefix: d3_nsPrefix, - qualify: function(name) { - var i = name.indexOf(":"), prefix = name; - if (i >= 0) { - prefix = name.slice(0, i); - name = name.slice(i + 1); - } - return d3_nsPrefix.hasOwnProperty(prefix) ? { - space: d3_nsPrefix[prefix], - local: name - } : name; - } - }; - d3_selectionPrototype.attr = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(); - name = d3.ns.qualify(name); - return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name); - } - for (value in name) this.each(d3_selection_attr(value, name[value])); - return this; - } - return this.each(d3_selection_attr(name, value)); - }; - function d3_selection_attr(name, value) { - name = d3.ns.qualify(name); - function attrNull() { - this.removeAttribute(name); - } - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - function attrConstant() { - this.setAttribute(name, value); - } - function attrConstantNS() { - this.setAttributeNS(name.space, name.local, value); - } - function attrFunction() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttribute(name); else this.setAttribute(name, x); - } - function attrFunctionNS() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x); - } - return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant; - } - function d3_collapse(s) { - return s.trim().replace(/\s+/g, " "); - } - d3_selectionPrototype.classed = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") { - var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1; - if (value = node.classList) { - while (++i < n) if (!value.contains(name[i])) return false; + function d3_number (x) { + return x === null ? NaN : +x + } + function d3_numeric (x) { + return !isNaN(x) + } + d3.sum = function (array, f) { + var s = 0, n = array.length, a, i = -1 + if (arguments.length === 1) { + while (++i < n) if (d3_numeric(a = +array[i])) s += a } else { - value = node.getAttribute("class"); - while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false; + while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a } - return true; + return s } - for (value in name) this.each(d3_selection_classed(value, name[value])); - return this; - } - return this.each(d3_selection_classed(name, value)); - }; - function d3_selection_classedRe(name) { - return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g"); - } - function d3_selection_classes(name) { - return (name + "").trim().split(/^|\s+/); - } - function d3_selection_classed(name, value) { - name = d3_selection_classes(name).map(d3_selection_classedName); - var n = name.length; - function classedConstant() { - var i = -1; - while (++i < n) name[i](this, value); - } - function classedFunction() { - var i = -1, x = value.apply(this, arguments); - while (++i < n) name[i](this, x); - } - return typeof value === "function" ? classedFunction : classedConstant; - } - function d3_selection_classedName(name) { - var re = d3_selection_classedRe(name); - return function(node, value) { - if (c = node.classList) return value ? c.add(name) : c.remove(name); - var c = node.getAttribute("class") || ""; - if (value) { - re.lastIndex = 0; - if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name)); - } else { - node.setAttribute("class", d3_collapse(c.replace(re, " "))); + d3.mean = function (array, f) { + var s = 0, n = array.length, a, i = -1, j = n + if (arguments.length === 1) { + while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j + } else { + while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j + } + if (j) return s / j } - }; - } - d3_selectionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.each(d3_selection_style(priority, name[priority], value)); - return this; - } - if (n < 2) { - var node = this.node(); - return d3_window(node).getComputedStyle(node, null).getPropertyValue(name); - } - priority = ""; - } - return this.each(d3_selection_style(name, value, priority)); - }; - function d3_selection_style(name, value, priority) { - function styleNull() { - this.style.removeProperty(name); - } - function styleConstant() { - this.style.setProperty(name, value, priority); - } - function styleFunction() { - var x = value.apply(this, arguments); - if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority); - } - return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant; - } - d3_selectionPrototype.property = function(name, value) { - if (arguments.length < 2) { - if (typeof name === "string") return this.node()[name]; - for (value in name) this.each(d3_selection_property(value, name[value])); - return this; - } - return this.each(d3_selection_property(name, value)); - }; - function d3_selection_property(name, value) { - function propertyNull() { - delete this[name]; - } - function propertyConstant() { - this[name] = value; - } - function propertyFunction() { - var x = value.apply(this, arguments); - if (x == null) delete this[name]; else this[name] = x; - } - return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant; - } - d3_selectionPrototype.text = function(value) { - return arguments.length ? this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.textContent = v == null ? "" : v; - } : value == null ? function() { - this.textContent = ""; - } : function() { - this.textContent = value; - }) : this.node().textContent; - }; - d3_selectionPrototype.html = function(value) { - return arguments.length ? this.each(typeof value === "function" ? function() { - var v = value.apply(this, arguments); - this.innerHTML = v == null ? "" : v; - } : value == null ? function() { - this.innerHTML = ""; - } : function() { - this.innerHTML = value; - }) : this.node().innerHTML; - }; - d3_selectionPrototype.append = function(name) { - name = d3_selection_creator(name); - return this.select(function() { - return this.appendChild(name.apply(this, arguments)); - }); - }; - function d3_selection_creator(name) { - function create() { - var document = this.ownerDocument, namespace = this.namespaceURI; - return namespace ? document.createElementNS(namespace, name) : document.createElement(name); - } - function createNS() { - return this.ownerDocument.createElementNS(name.space, name.local); - } - return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? createNS : create; - } - d3_selectionPrototype.insert = function(name, before) { - name = d3_selection_creator(name); - before = d3_selection_selector(before); - return this.select(function() { - return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null); - }); - }; - d3_selectionPrototype.remove = function() { - return this.each(d3_selectionRemove); - }; - function d3_selectionRemove() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); - } - d3_selectionPrototype.data = function(value, key) { - var i = -1, n = this.length, group, node; - if (!arguments.length) { - value = new Array(n = (group = this[0]).length); - while (++i < n) { - if (node = group[i]) { - value[i] = node.__data__; + d3.quantile = function (values, p) { + var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h + return e ? v + e * (values[h] - v) : v + } + d3.median = function (array, f) { + var numbers = [], n = array.length, a, i = -1 + if (arguments.length === 1) { + while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a) + } else { + while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a) + } + if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), 0.5) + } + d3.variance = function (array, f) { + var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0 + if (arguments.length === 1) { + while (++i < n) { + if (d3_numeric(a = d3_number(array[i]))) { + d = a - m + m += d / ++j + s += d * (a - m) + } + } + } else { + while (++i < n) { + if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) { + d = a - m + m += d / ++j + s += d * (a - m) + } + } } + if (j > 1) return s / (j - 1) } - return value; - } - function bind(group, groupData) { - var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData; - if (key) { - var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue; - for (i = -1; ++i < n; ) { - if (nodeByKeyValue.has(keyValue = key.call(node = group[i], node.__data__, i))) { - exitNodes[i] = node; - } else { - nodeByKeyValue.set(keyValue, node); + d3.deviation = function () { + var v = d3.variance.apply(this, arguments) + return v ? Math.sqrt(v) : v + } + function d3_bisector (compare) { + return { + left: function (a, x, lo, hi) { + if (arguments.length < 3) lo = 0 + if (arguments.length < 4) hi = a.length + while (lo < hi) { + var mid = lo + hi >>> 1 + if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid + } + return lo + }, + right: function (a, x, lo, hi) { + if (arguments.length < 3) lo = 0 + if (arguments.length < 4) hi = a.length + while (lo < hi) { + var mid = lo + hi >>> 1 + if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1 + } + return lo } - keyValues[i] = keyValue; } - for (i = -1; ++i < m; ) { - if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) { - enterNodes[i] = d3_selection_dataNode(nodeData); - } else if (node !== true) { - updateNodes[i] = node; - node.__data__ = nodeData; + } + var d3_bisect = d3_bisector(d3_ascending) + d3.bisectLeft = d3_bisect.left + d3.bisect = d3.bisectRight = d3_bisect.right + d3.bisector = function (f) { + return d3_bisector(f.length === 1 ? function (d, x) { + return d3_ascending(f(d), x) + } : f) + } + d3.shuffle = function (array, i0, i1) { + if ((m = arguments.length) < 3) { + i1 = array.length + if (m < 2) i0 = 0 + } + var m = i1 - i0, t, i + while (m) { + i = Math.random() * m-- | 0 + t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t + } + return array + } + d3.permute = function (array, indexes) { + var i = indexes.length, permutes = new Array(i) + while (i--) permutes[i] = array[indexes[i]] + return permutes + } + d3.pairs = function (array) { + var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n) + while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ] + return pairs + } + d3.zip = function () { + if (!(n = arguments.length)) return [] + for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) { + for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) { + zip[j] = arguments[j][i] } - nodeByKeyValue.set(keyValue, true); } - for (i = -1; ++i < n; ) { - if (nodeByKeyValue.get(keyValues[i]) !== true) { - exitNodes[i] = group[i]; + return zips + } + function d3_zipLength (d) { + return d.length + } + d3.transpose = function (matrix) { + return d3.zip.apply(d3, matrix) + } + d3.keys = function (map) { + var keys = [] + for (var key in map) keys.push(key) + return keys + } + d3.values = function (map) { + var values = [] + for (var key in map) values.push(map[key]) + return values + } + d3.entries = function (map) { + var entries = [] + for (var key in map) { + entries.push({ + key: key, + value: map[key] + }) + } + return entries + } + d3.merge = function (arrays) { + var n = arrays.length, m, i = -1, j = 0, merged, array + while (++i < n) j += arrays[i].length + merged = new Array(j) + while (--n >= 0) { + array = arrays[n] + m = array.length + while (--m >= 0) { + merged[--j] = array[m] } } - } else { - for (i = -1; ++i < n0; ) { - node = group[i]; - nodeData = groupData[i]; - if (node) { - node.__data__ = nodeData; - updateNodes[i] = node; + return merged + } + var abs = Math.abs + d3.range = function (start, stop, step) { + if (arguments.length < 3) { + step = 1 + if (arguments.length < 2) { + stop = start + start = 0 + } + } + if ((stop - start) / step === Infinity) throw new Error('infinite range') + var range = [], k = d3_range_integerScale(abs(step)), i = -1, j + start *= k, stop *= k, step *= k + if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k) + return range + } + function d3_range_integerScale (x) { + var k = 1 + while (x * k % 1) k *= 10 + return k + } + function d3_class (ctor, properties) { + for (var key in properties) { + Object.defineProperty(ctor.prototype, key, { + value: properties[key], + enumerable: false + }) + } + } + d3.map = function (object, f) { + var map = new d3_Map() + if (object instanceof d3_Map) { + object.forEach(function (key, value) { + map.set(key, value) + }) + } else if (Array.isArray(object)) { + var i = -1, n = object.length, o + if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o) + } else { + for (var key in object) map.set(key, object[key]) + } + return map + } + function d3_Map () { + this._ = Object.create(null) + } + var d3_map_proto = '__proto__', d3_map_zero = '\x00' + d3_class(d3_Map, { + has: d3_map_has, + get: function (key) { + return this._[d3_map_escape(key)] + }, + set: function (key, value) { + return this._[d3_map_escape(key)] = value + }, + remove: d3_map_remove, + keys: d3_map_keys, + values: function () { + var values = [] + for (var key in this._) values.push(this._[key]) + return values + }, + entries: function () { + var entries = [] + for (var key in this._) { + entries.push({ + key: d3_map_unescape(key), + value: this._[key] + }) + } + return entries + }, + size: d3_map_size, + empty: d3_map_empty, + forEach: function (f) { + for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]) + } + }) + function d3_map_escape (key) { + return (key += '') === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key + } + function d3_map_unescape (key) { + return (key += '')[0] === d3_map_zero ? key.slice(1) : key + } + function d3_map_has (key) { + return d3_map_escape(key) in this._ + } + function d3_map_remove (key) { + return (key = d3_map_escape(key)) in this._ && delete this._[key] + } + function d3_map_keys () { + var keys = [] + for (var key in this._) keys.push(d3_map_unescape(key)) + return keys + } + function d3_map_size () { + var size = 0 + for (var key in this._) ++size + return size + } + function d3_map_empty () { + for (var key in this._) return false + return true + } + d3.nest = function () { + var nest = {}, keys = [], sortKeys = [], sortValues, rollup + function map (mapType, array, depth) { + if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array + var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values + while (++i < n) { + if (values = valuesByKey.get(keyValue = key(object = array[i]))) { + values.push(object) + } else { + valuesByKey.set(keyValue, [ object ]) + } + } + if (mapType) { + object = mapType() + setter = function (keyValue, values) { + object.set(keyValue, map(mapType, values, depth)) + } } else { - enterNodes[i] = d3_selection_dataNode(nodeData); + object = {} + setter = function (keyValue, values) { + object[keyValue] = map(mapType, values, depth) + } } + valuesByKey.forEach(setter) + return object + } + function entries (map, depth) { + if (depth >= keys.length) return map + var array = [], sortKey = sortKeys[depth++] + map.forEach(function (key, keyMap) { + array.push({ + key: key, + values: entries(keyMap, depth) + }) + }) + return sortKey ? array.sort(function (a, b) { + return sortKey(a.key, b.key) + }) : array } - for (;i < m; ++i) { - enterNodes[i] = d3_selection_dataNode(groupData[i]); + nest.map = function (array, mapType) { + return map(mapType, array, 0) } - for (;i < n; ++i) { - exitNodes[i] = group[i]; + nest.entries = function (array) { + return entries(map(d3.map, array, 0), 0) + } + nest.key = function (d) { + keys.push(d) + return nest + } + nest.sortKeys = function (order) { + sortKeys[keys.length - 1] = order + return nest + } + nest.sortValues = function (order) { + sortValues = order + return nest } + nest.rollup = function (f) { + rollup = f + return nest + } + return nest } - enterNodes.update = updateNodes; - enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode; - enter.push(enterNodes); - update.push(updateNodes); - exit.push(exitNodes); - } - var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]); - if (typeof value === "function") { - while (++i < n) { - bind(group = this[i], value.call(group, group.parentNode.__data__, i)); + d3.set = function (array) { + var set = new d3_Set() + if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]) + return set } - } else { - while (++i < n) { - bind(group = this[i], value); + function d3_Set () { + this._ = Object.create(null) } - } - update.enter = function() { - return enter; - }; - update.exit = function() { - return exit; - }; - return update; - }; - function d3_selection_dataNode(data) { - return { - __data__: data - }; - } - d3_selectionPrototype.datum = function(value) { - return arguments.length ? this.property("__data__", value) : this.property("__data__"); - }; - d3_selectionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { - subgroup.push(node); + d3_class(d3_Set, { + has: d3_map_has, + add: function (key) { + this._[d3_map_escape(key += '')] = true + return key + }, + remove: d3_map_remove, + values: d3_map_keys, + size: d3_map_size, + empty: d3_map_empty, + forEach: function (f) { + for (var key in this._) f.call(this, d3_map_unescape(key)) } + }) + d3.behavior = {} + function d3_identity (d) { + return d } - } - return d3_selection(subgroups); - }; - function d3_selection_filter(selector) { - return function() { - return d3_selectMatches(this, selector); - }; - } - d3_selectionPrototype.order = function() { - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) { - if (node = group[i]) { - if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); - next = node; + d3.rebind = function (target, source) { + var i = 1, n = arguments.length, method + while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]) + return target + } + function d3_rebind (target, source, method) { + return function () { + var value = method.apply(source, arguments) + return value === source ? target : value + } + } + function d3_vendorSymbol (object, name) { + if (name in object) return name + name = name.charAt(0).toUpperCase() + name.slice(1) + for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) { + var prefixName = d3_vendorPrefixes[i] + name + if (prefixName in object) return prefixName + } + } + var d3_vendorPrefixes = [ 'webkit', 'ms', 'moz', 'Moz', 'o', 'O' ] + function d3_noop () {} + d3.dispatch = function () { + var dispatch = new d3_dispatch(), i = -1, n = arguments.length + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch) + return dispatch + } + function d3_dispatch () {} + d3_dispatch.prototype.on = function (type, listener) { + var i = type.indexOf('.'), name = '' + if (i >= 0) { + name = type.slice(i + 1) + type = type.slice(0, i) + } + if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener) + if (arguments.length === 2) { + if (listener == null) { + for (type in this) { + if (this.hasOwnProperty(type)) this[type].on(name, null) + } + } + return this + } + } + function d3_dispatch_event (dispatch) { + var listeners = [], listenerByName = new d3_Map() + function event () { + var z = listeners, i = -1, n = z.length, l + while (++i < n) if (l = z[i].on) l.apply(this, arguments) + return dispatch + } + event.on = function (name, listener) { + var l = listenerByName.get(name), i + if (arguments.length < 2) return l && l.on + if (l) { + l.on = null + listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)) + listenerByName.remove(name) + } + if (listener) { + listeners.push(listenerByName.set(name, { + on: listener + })) + } + return dispatch } + return event } - } - return this; - }; - d3_selectionPrototype.sort = function(comparator) { - comparator = d3_selection_sortComparator.apply(this, arguments); - for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator); - return this.order(); - }; - function d3_selection_sortComparator(comparator) { - if (!arguments.length) comparator = d3_ascending; - return function(a, b) { - return a && b ? comparator(a.__data__, b.__data__) : !a - !b; - }; - } - d3_selectionPrototype.each = function(callback) { - return d3_selection_each(this, function(node, i, j) { - callback.call(node, node.__data__, i, j); - }); - }; - function d3_selection_each(groups, callback) { - for (var j = 0, m = groups.length; j < m; j++) { - for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) { - if (node = group[i]) callback(node, i, j); + d3.event = null + function d3_eventPreventDefault () { + d3.event.preventDefault() } - } - return groups; - } - d3_selectionPrototype.call = function(callback) { - var args = d3_array(arguments); - callback.apply(args[0] = this, args); - return this; - }; - d3_selectionPrototype.empty = function() { - return !this.node(); - }; - d3_selectionPrototype.node = function() { - for (var j = 0, m = this.length; j < m; j++) { - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - var node = group[i]; - if (node) return node; + function d3_eventSource () { + var e = d3.event, s + while (s = e.sourceEvent) e = s + return e } - } - return null; - }; - d3_selectionPrototype.size = function() { - var n = 0; - d3_selection_each(this, function() { - ++n; - }); - return n; - }; - function d3_selection_enter(selection) { - d3_subclass(selection, d3_selection_enterPrototype); - return selection; - } - var d3_selection_enterPrototype = []; - d3.selection.enter = d3_selection_enter; - d3.selection.enter.prototype = d3_selection_enterPrototype; - d3_selection_enterPrototype.append = d3_selectionPrototype.append; - d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; - d3_selection_enterPrototype.node = d3_selectionPrototype.node; - d3_selection_enterPrototype.call = d3_selectionPrototype.call; - d3_selection_enterPrototype.size = d3_selectionPrototype.size; - d3_selection_enterPrototype.select = function(selector) { - var subgroups = [], subgroup, subnode, upgroup, group, node; - for (var j = -1, m = this.length; ++j < m; ) { - upgroup = (group = this[j]).update; - subgroups.push(subgroup = []); - subgroup.parentNode = group.parentNode; - for (var i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j)); - subnode.__data__ = node.__data__; - } else { - subgroup.push(null); + function d3_eventDispatch (target) { + var dispatch = new d3_dispatch(), i = 0, n = arguments.length + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch) + dispatch.of = function (thiz, argumentz) { + return function (e1) { + try { + var e0 = e1.sourceEvent = d3.event + e1.target = target + d3.event = e1 + dispatch[e1.type].apply(thiz, argumentz) + } finally { + d3.event = e0 + } + } + } + return dispatch + } + d3.requote = function (s) { + return s.replace(d3_requote_re, '\\$&') + } + var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g + var d3_subclass = {}.__proto__ ? function (object, prototype) { + object.__proto__ = prototype + } : function (object, prototype) { + for (var property in prototype) object[property] = prototype[property] + } + function d3_selection (groups) { + d3_subclass(groups, d3_selectionPrototype) + return groups + } + var d3_select = function (s, n) { + return n.querySelector(s) + }, d3_selectAll = function (s, n) { + return n.querySelectorAll(s) + }, d3_selectMatches = function (n, s) { + var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, 'matchesSelector')] + d3_selectMatches = function (n, s) { + return d3_selectMatcher.call(n, s) + } + return d3_selectMatches(n, s) + } + if (typeof Sizzle === 'function') { + d3_select = function (s, n) { + return Sizzle(s, n)[0] || null + } + d3_selectAll = Sizzle + d3_selectMatches = Sizzle.matchesSelector + } + d3.selection = function () { + return d3.select(d3_document.documentElement) + } + var d3_selectionPrototype = d3.selection.prototype = [] + d3_selectionPrototype.select = function (selector) { + var subgroups = [], subgroup, subnode, group, node + selector = d3_selection_selector(selector) + for (var j = -1, m = this.length; ++j < m;) { + subgroups.push(subgroup = []) + subgroup.parentNode = (group = this[j]).parentNode + for (var i = -1, n = group.length; ++i < n;) { + if (node = group[i]) { + subgroup.push(subnode = selector.call(node, node.__data__, i, j)) + if (subnode && '__data__' in node) subnode.__data__ = node.__data__ + } else { + subgroup.push(null) + } + } } + return d3_selection(subgroups) } - } - return d3_selection(subgroups); - }; - d3_selection_enterPrototype.insert = function(name, before) { - if (arguments.length < 2) before = d3_selection_enterInsertBefore(this); - return d3_selectionPrototype.insert.call(this, name, before); - }; - function d3_selection_enterInsertBefore(enter) { - var i0, j0; - return function(d, i, j) { - var group = enter[j].update, n = group.length, node; - if (j != j0) j0 = j, i0 = 0; - if (i >= i0) i0 = i + 1; - while (!(node = group[i0]) && ++i0 < n) ; - return node; - }; - } - d3.select = function(node) { - var group; - if (typeof node === "string") { - group = [ d3_select(node, d3_document) ]; - group.parentNode = d3_document.documentElement; - } else { - group = [ node ]; - group.parentNode = d3_documentElement(node); - } - return d3_selection([ group ]); - }; - d3.selectAll = function(nodes) { - var group; - if (typeof nodes === "string") { - group = d3_array(d3_selectAll(nodes, d3_document)); - group.parentNode = d3_document.documentElement; - } else { - group = nodes; - group.parentNode = null; - } - return d3_selection([ group ]); - }; - d3_selectionPrototype.on = function(type, listener, capture) { - var n = arguments.length; - if (n < 3) { - if (typeof type !== "string") { - if (n < 2) listener = false; - for (capture in type) this.each(d3_selection_on(capture, type[capture], listener)); - return this; - } - if (n < 2) return (n = this.node()["__on" + type]) && n._; - capture = false; - } - return this.each(d3_selection_on(type, listener, capture)); - }; - function d3_selection_on(type, listener, capture) { - var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener; - if (i > 0) type = type.slice(0, i); - var filter = d3_selection_onFilters.get(type); - if (filter) type = filter, wrap = d3_selection_onFilter; - function onRemove() { - var l = this[name]; - if (l) { - this.removeEventListener(type, l, l.$); - delete this[name]; + function d3_selection_selector (selector) { + return typeof selector === 'function' ? selector : function () { + return d3_select(selector, this) + } } - } - function onAdd() { - var l = wrap(listener, d3_array(arguments)); - onRemove.call(this); - this.addEventListener(type, this[name] = l, l.$ = capture); - l._ = listener; - } - function removeAll() { - var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match; - for (var name in this) { - if (match = name.match(re)) { - var l = this[name]; - this.removeEventListener(match[1], l, l.$); - delete this[name]; + d3_selectionPrototype.selectAll = function (selector) { + var subgroups = [], subgroup, node + selector = d3_selection_selectorAll(selector) + for (var j = -1, m = this.length; ++j < m;) { + for (var group = this[j], i = -1, n = group.length; ++i < n;) { + if (node = group[i]) { + subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j))) + subgroup.parentNode = node + } + } } + return d3_selection(subgroups) } - } - return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll; - } - var d3_selection_onFilters = d3.map({ - mouseenter: "mouseover", - mouseleave: "mouseout" - }); - if (d3_document) { - d3_selection_onFilters.forEach(function(k) { - if ("on" + k in d3_document) d3_selection_onFilters.remove(k); - }); - } - function d3_selection_onListener(listener, argumentz) { - return function(e) { - var o = d3.event; - d3.event = e; - argumentz[0] = this.__data__; - try { - listener.apply(this, argumentz); - } finally { - d3.event = o; - } - }; - } - function d3_selection_onFilter(listener, argumentz) { - var l = d3_selection_onListener(listener, argumentz); - return function(e) { - var target = this, related = e.relatedTarget; - if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) { - l.call(target, e); - } - }; - } - var d3_event_dragSelect, d3_event_dragId = 0; - function d3_event_dragSuppress(node) { - var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window(node)).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault); - if (d3_event_dragSelect == null) { - d3_event_dragSelect = "onselectstart" in node ? false : d3_vendorSymbol(node.style, "userSelect"); - } - if (d3_event_dragSelect) { - var style = d3_documentElement(node).style, select = style[d3_event_dragSelect]; - style[d3_event_dragSelect] = "none"; - } - return function(suppressClick) { - w.on(name, null); - if (d3_event_dragSelect) style[d3_event_dragSelect] = select; - if (suppressClick) { - var off = function() { - w.on(click, null); - }; - w.on(click, function() { - d3_eventPreventDefault(); - off(); - }, true); - setTimeout(off, 0); + function d3_selection_selectorAll (selector) { + return typeof selector === 'function' ? selector : function () { + return d3_selectAll(selector, this) + } } - }; - } - d3.mouse = function(container) { - return d3_mousePoint(container, d3_eventSource()); - }; - var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0; - function d3_mousePoint(container, e) { - if (e.changedTouches) e = e.changedTouches[0]; - var svg = container.ownerSVGElement || container; - if (svg.createSVGPoint) { - var point = svg.createSVGPoint(); - if (d3_mouse_bug44083 < 0) { - var window = d3_window(container); - if (window.scrollX || window.scrollY) { - svg = d3.select("body").append("svg").style({ - position: "absolute", - top: 0, - left: 0, - margin: 0, - padding: 0, - border: "none" - }, "important"); - var ctm = svg[0][0].getScreenCTM(); - d3_mouse_bug44083 = !(ctm.f || ctm.e); - svg.remove(); - } - } - if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, - point.y = e.clientY; - point = point.matrixTransform(container.getScreenCTM().inverse()); - return [ point.x, point.y ]; - } - var rect = container.getBoundingClientRect(); - return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ]; - } - d3.touch = function(container, touches, identifier) { - if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches; - if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) { - if ((touch = touches[i]).identifier === identifier) { - return d3_mousePoint(container, touch); + var d3_nsPrefix = { + svg: 'http://www.w3.org/2000/svg', + xhtml: 'http://www.w3.org/1999/xhtml', + xlink: 'http://www.w3.org/1999/xlink', + xml: 'http://www.w3.org/XML/1998/namespace', + xmlns: 'http://www.w3.org/2000/xmlns/' } - } - }; - d3.behavior.drag = function() { - var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, "touchmove", "touchend"); - function drag() { - this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart); - } - function dragstart(id, position, subject, move, end) { - return function() { - var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId); - if (origin) { - dragOffset = origin.apply(that, arguments); - dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ]; - } else { - dragOffset = [ 0, 0 ]; - } - dispatch({ - type: "dragstart" - }); - function moved() { - var position1 = position(parent, dragId), dx, dy; - if (!position1) return; - dx = position1[0] - position0[0]; - dy = position1[1] - position0[1]; - dragged |= dx | dy; - position0 = position1; - dispatch({ - type: "drag", - x: position1[0] + dragOffset[0], - y: position1[1] + dragOffset[1], - dx: dx, - dy: dy - }); - } - function ended() { - if (!position(parent, dragId)) return; - dragSubject.on(move + dragName, null).on(end + dragName, null); - dragRestore(dragged && d3.event.target === target); - dispatch({ - type: "dragend" - }); + d3.ns = { + prefix: d3_nsPrefix, + qualify: function (name) { + var i = name.indexOf(':'), prefix = name + if (i >= 0) { + prefix = name.slice(0, i) + name = name.slice(i + 1) + } + return d3_nsPrefix.hasOwnProperty(prefix) ? { + space: d3_nsPrefix[prefix], + local: name + } : name + } + } + d3_selectionPrototype.attr = function (name, value) { + if (arguments.length < 2) { + if (typeof name === 'string') { + var node = this.node() + name = d3.ns.qualify(name) + return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name) + } + for (value in name) this.each(d3_selection_attr(value, name[value])) + return this } - }; - } - drag.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - return drag; - }; - return d3.rebind(drag, event, "on"); - }; - function d3_behavior_dragTouchId() { - return d3.event.changedTouches[0].identifier; - } - d3.touches = function(container, touches) { - if (arguments.length < 2) touches = d3_eventSource().touches; - return touches ? d3_array(touches).map(function(touch) { - var point = d3_mousePoint(container, touch); - point.identifier = touch.identifier; - return point; - }) : []; - }; - var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π; - function d3_sgn(x) { - return x > 0 ? 1 : x < 0 ? -1 : 0; - } - function d3_cross2d(a, b, c) { - return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); - } - function d3_acos(x) { - return x > 1 ? 0 : x < -1 ? π : Math.acos(x); - } - function d3_asin(x) { - return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x); - } - function d3_sinh(x) { - return ((x = Math.exp(x)) - 1 / x) / 2; - } - function d3_cosh(x) { - return ((x = Math.exp(x)) + 1 / x) / 2; - } - function d3_tanh(x) { - return ((x = Math.exp(2 * x)) - 1) / (x + 1); - } - function d3_haversin(x) { - return (x = Math.sin(x / 2)) * x; - } - var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4; - d3.interpolateZoom = function(p0, p1) { - var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2]; - var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ; - function interpolate(t) { - var s = t * S; - if (dr) { - var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0)); - return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ]; - } - return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ]; - } - interpolate.duration = S * 1e3; - return interpolate; - }; - d3.behavior.zoom = function() { - var view = { - x: 0, - y: 0, - k: 1 - }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1; - if (!d3_behavior_zoomWheel) { - d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() { - return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1); - }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() { - return d3.event.wheelDelta; - }, "mousewheel") : (d3_behavior_zoomDelta = function() { - return -d3.event.detail; - }, "MozMousePixelScroll"); - } - function zoom(g) { - g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted); - } - zoom.event = function(g) { - g.each(function() { - var dispatch = event.of(this, arguments), view1 = view; - if (d3_transitionInheritId) { - d3.select(this).transition().each("start.zoom", function() { - view = this.__chart__ || { - x: 0, - y: 0, - k: 1 - }; - zoomstarted(dispatch); - }).tween("zoom:zoom", function() { - var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]); - return function(t) { - var l = i(t), k = dx / l[2]; - this.__chart__ = view = { - x: cx - l[0] * k, - y: cy - l[1] * k, - k: k - }; - zoomed(dispatch); - }; - }).each("interrupt.zoom", function() { - zoomended(dispatch); - }).each("end.zoom", function() { - zoomended(dispatch); - }); + return this.each(d3_selection_attr(name, value)) + } + function d3_selection_attr (name, value) { + name = d3.ns.qualify(name) + function attrNull () { + this.removeAttribute(name) + } + function attrNullNS () { + this.removeAttributeNS(name.space, name.local) + } + function attrConstant () { + this.setAttribute(name, value) + } + function attrConstantNS () { + this.setAttributeNS(name.space, name.local, value) + } + function attrFunction () { + var x = value.apply(this, arguments) + if (x == null) this.removeAttribute(name); else this.setAttribute(name, x) + } + function attrFunctionNS () { + var x = value.apply(this, arguments) + if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x) + } + return value == null ? name.local ? attrNullNS : attrNull : typeof value === 'function' ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant + } + function d3_collapse (s) { + return s.trim().replace(/\s+/g, ' ') + } + d3_selectionPrototype.classed = function (name, value) { + if (arguments.length < 2) { + if (typeof name === 'string') { + var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1 + if (value = node.classList) { + while (++i < n) if (!value.contains(name[i])) return false + } else { + value = node.getAttribute('class') + while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false + } + return true + } + for (value in name) this.each(d3_selection_classed(value, name[value])) + return this + } + return this.each(d3_selection_classed(name, value)) + } + function d3_selection_classedRe (name) { + return new RegExp('(?:^|\\s+)' + d3.requote(name) + '(?:\\s+|$)', 'g') + } + function d3_selection_classes (name) { + return (name + '').trim().split(/^|\s+/) + } + function d3_selection_classed (name, value) { + name = d3_selection_classes(name).map(d3_selection_classedName) + var n = name.length + function classedConstant () { + var i = -1 + while (++i < n) name[i](this, value) + } + function classedFunction () { + var i = -1, x = value.apply(this, arguments) + while (++i < n) name[i](this, x) + } + return typeof value === 'function' ? classedFunction : classedConstant + } + function d3_selection_classedName (name) { + var re = d3_selection_classedRe(name) + return function (node, value) { + if (c = node.classList) return value ? c.add(name) : c.remove(name) + var c = node.getAttribute('class') || '' + if (value) { + re.lastIndex = 0 + if (!re.test(c)) node.setAttribute('class', d3_collapse(c + ' ' + name)) + } else { + node.setAttribute('class', d3_collapse(c.replace(re, ' '))) + } + } + } + d3_selectionPrototype.style = function (name, value, priority) { + var n = arguments.length + if (n < 3) { + if (typeof name !== 'string') { + if (n < 2) value = '' + for (priority in name) this.each(d3_selection_style(priority, name[priority], value)) + return this + } + if (n < 2) { + var node = this.node() + return d3_window(node).getComputedStyle(node, null).getPropertyValue(name) + } + priority = '' + } + return this.each(d3_selection_style(name, value, priority)) + } + function d3_selection_style (name, value, priority) { + function styleNull () { + this.style.removeProperty(name) + } + function styleConstant () { + this.style.setProperty(name, value, priority) + } + function styleFunction () { + var x = value.apply(this, arguments) + if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority) + } + return value == null ? styleNull : typeof value === 'function' ? styleFunction : styleConstant + } + d3_selectionPrototype.property = function (name, value) { + if (arguments.length < 2) { + if (typeof name === 'string') return this.node()[name] + for (value in name) this.each(d3_selection_property(value, name[value])) + return this + } + return this.each(d3_selection_property(name, value)) + } + function d3_selection_property (name, value) { + function propertyNull () { + delete this[name] + } + function propertyConstant () { + this[name] = value + } + function propertyFunction () { + var x = value.apply(this, arguments) + if (x == null) delete this[name]; else this[name] = x + } + return value == null ? propertyNull : typeof value === 'function' ? propertyFunction : propertyConstant + } + d3_selectionPrototype.text = function (value) { + return arguments.length ? this.each(typeof value === 'function' ? function () { + var v = value.apply(this, arguments) + this.textContent = v == null ? '' : v + } : value == null ? function () { + this.textContent = '' + } : function () { + this.textContent = value + }) : this.node().textContent + } + d3_selectionPrototype.html = function (value) { + return arguments.length ? this.each(typeof value === 'function' ? function () { + var v = value.apply(this, arguments) + this.innerHTML = v == null ? '' : v + } : value == null ? function () { + this.innerHTML = '' + } : function () { + this.innerHTML = value + }) : this.node().innerHTML + } + d3_selectionPrototype.append = function (name) { + name = d3_selection_creator(name) + return this.select(function () { + return this.appendChild(name.apply(this, arguments)) + }) + } + function d3_selection_creator (name) { + function create () { + var document = this.ownerDocument, namespace = this.namespaceURI + return namespace ? document.createElementNS(namespace, name) : document.createElement(name) + } + function createNS () { + return this.ownerDocument.createElementNS(name.space, name.local) + } + return typeof name === 'function' ? name : (name = d3.ns.qualify(name)).local ? createNS : create + } + d3_selectionPrototype.insert = function (name, before) { + name = d3_selection_creator(name) + before = d3_selection_selector(before) + return this.select(function () { + return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null) + }) + } + d3_selectionPrototype.remove = function () { + return this.each(d3_selectionRemove) + } + function d3_selectionRemove () { + var parent = this.parentNode + if (parent) parent.removeChild(this) + } + d3_selectionPrototype.data = function (value, key) { + var i = -1, n = this.length, group, node + if (!arguments.length) { + value = new Array(n = (group = this[0]).length) + while (++i < n) { + if (node = group[i]) { + value[i] = node.__data__ + } + } + return value + } + function bind (group, groupData) { + var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData + if (key) { + var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue + for (i = -1; ++i < n;) { + if (nodeByKeyValue.has(keyValue = key.call(node = group[i], node.__data__, i))) { + exitNodes[i] = node + } else { + nodeByKeyValue.set(keyValue, node) + } + keyValues[i] = keyValue + } + for (i = -1; ++i < m;) { + if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) { + enterNodes[i] = d3_selection_dataNode(nodeData) + } else if (node !== true) { + updateNodes[i] = node + node.__data__ = nodeData + } + nodeByKeyValue.set(keyValue, true) + } + for (i = -1; ++i < n;) { + if (nodeByKeyValue.get(keyValues[i]) !== true) { + exitNodes[i] = group[i] + } + } + } else { + for (i = -1; ++i < n0;) { + node = group[i] + nodeData = groupData[i] + if (node) { + node.__data__ = nodeData + updateNodes[i] = node + } else { + enterNodes[i] = d3_selection_dataNode(nodeData) + } + } + for (;i < m; ++i) { + enterNodes[i] = d3_selection_dataNode(groupData[i]) + } + for (;i < n; ++i) { + exitNodes[i] = group[i] + } + } + enterNodes.update = updateNodes + enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode + enter.push(enterNodes) + update.push(updateNodes) + exit.push(exitNodes) + } + var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]) + if (typeof value === 'function') { + while (++i < n) { + bind(group = this[i], value.call(group, group.parentNode.__data__, i)) + } } else { - this.__chart__ = view; - zoomstarted(dispatch); - zoomed(dispatch); - zoomended(dispatch); + while (++i < n) { + bind(group = this[i], value) + } } - }); - }; - zoom.translate = function(_) { - if (!arguments.length) return [ view.x, view.y ]; - view = { - x: +_[0], - y: +_[1], - k: view.k - }; - rescale(); - return zoom; - }; - zoom.scale = function(_) { - if (!arguments.length) return view.k; - view = { - x: view.x, - y: view.y, - k: +_ - }; - rescale(); - return zoom; - }; - zoom.scaleExtent = function(_) { - if (!arguments.length) return scaleExtent; - scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ]; - return zoom; - }; - zoom.center = function(_) { - if (!arguments.length) return center; - center = _ && [ +_[0], +_[1] ]; - return zoom; - }; - zoom.size = function(_) { - if (!arguments.length) return size; - size = _ && [ +_[0], +_[1] ]; - return zoom; - }; - zoom.duration = function(_) { - if (!arguments.length) return duration; - duration = +_; - return zoom; - }; - zoom.x = function(z) { - if (!arguments.length) return x1; - x1 = z; - x0 = z.copy(); - view = { - x: 0, - y: 0, - k: 1 - }; - return zoom; - }; - zoom.y = function(z) { - if (!arguments.length) return y1; - y1 = z; - y0 = z.copy(); - view = { - x: 0, - y: 0, - k: 1 - }; - return zoom; - }; - function location(p) { - return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ]; - } - function point(l) { - return [ l[0] * view.k + view.x, l[1] * view.k + view.y ]; - } - function scaleTo(s) { - view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)); - } - function translateTo(p, l) { - l = point(l); - view.x += p[0] - l[0]; - view.y += p[1] - l[1]; - } - function zoomTo(that, p, l, k) { - that.__chart__ = { - x: view.x, - y: view.y, - k: view.k - }; - scaleTo(Math.pow(2, k)); - translateTo(center0 = p, l); - that = d3.select(that); - if (duration > 0) that = that.transition().duration(duration); - that.call(zoom.event); - } - function rescale() { - if (x1) x1.domain(x0.range().map(function(x) { - return (x - view.x) / view.k; - }).map(x0.invert)); - if (y1) y1.domain(y0.range().map(function(y) { - return (y - view.y) / view.k; - }).map(y0.invert)); - } - function zoomstarted(dispatch) { - if (!zooming++) dispatch({ - type: "zoomstart" - }); - } - function zoomed(dispatch) { - rescale(); - dispatch({ - type: "zoom", - scale: view.k, - translate: [ view.x, view.y ] - }); - } - function zoomended(dispatch) { - if (!--zooming) dispatch({ - type: "zoomend" - }), center0 = null; - } - function mousedowned() { - var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that); - d3_selection_interrupt.call(that); - zoomstarted(dispatch); - function moved() { - dragged = 1; - translateTo(d3.mouse(that), location0); - zoomed(dispatch); - } - function ended() { - subject.on(mousemove, null).on(mouseup, null); - dragRestore(dragged && d3.event.target === target); - zoomended(dispatch); + update.enter = function () { + return enter + } + update.exit = function () { + return exit + } + return update } - } - function touchstarted() { - var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that); - started(); - zoomstarted(dispatch); - subject.on(mousedown, null).on(touchstart, started); - function relocate() { - var touches = d3.touches(that); - scale0 = view.k; - touches.forEach(function(t) { - if (t.identifier in locations0) locations0[t.identifier] = location(t); - }); - return touches; - } - function started() { - var target = d3.event.target; - d3.select(target).on(touchmove, moved).on(touchend, ended); - targets.push(target); - var changed = d3.event.changedTouches; - for (var i = 0, n = changed.length; i < n; ++i) { - locations0[changed[i].identifier] = null; - } - var touches = relocate(), now = Date.now(); - if (touches.length === 1) { - if (now - touchtime < 500) { - var p = touches[0]; - zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1); - d3_eventPreventDefault(); - } - touchtime = now; - } else if (touches.length > 1) { - var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1]; - distance0 = dx * dx + dy * dy; - } - } - function moved() { - var touches = d3.touches(that), p0, l0, p1, l1; - d3_selection_interrupt.call(that); - for (var i = 0, n = touches.length; i < n; ++i, l1 = null) { - p1 = touches[i]; - if (l1 = locations0[p1.identifier]) { - if (l0) break; - p0 = p1, l0 = l1; - } - } - if (l1) { - var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0); - p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ]; - l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ]; - scaleTo(scale1 * scale0); - } - touchtime = null; - translateTo(p0, l0); - zoomed(dispatch); - } - function ended() { - if (d3.event.touches.length) { - var changed = d3.event.changedTouches; - for (var i = 0, n = changed.length; i < n; ++i) { - delete locations0[changed[i].identifier]; - } - for (var identifier in locations0) { - return void relocate(); - } - } - d3.selectAll(targets).on(zoomName, null); - subject.on(mousedown, mousedowned).on(touchstart, touchstarted); - dragRestore(); - zoomended(dispatch); + function d3_selection_dataNode (data) { + return { + __data__: data + } } - } - function mousewheeled() { - var dispatch = event.of(this, arguments); - if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), - translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch); - mousewheelTimer = setTimeout(function() { - mousewheelTimer = null; - zoomended(dispatch); - }, 50); - d3_eventPreventDefault(); - scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k); - translateTo(center0, translate0); - zoomed(dispatch); - } - function dblclicked() { - var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2; - zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1); - } - return d3.rebind(zoom, event, "on"); - }; - var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel; - d3.color = d3_color; - function d3_color() {} - d3_color.prototype.toString = function() { - return this.rgb() + ""; - }; - d3.hsl = d3_hsl; - function d3_hsl(h, s, l) { - return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l); - } - var d3_hslPrototype = d3_hsl.prototype = new d3_color(); - d3_hslPrototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_hsl(this.h, this.s, this.l / k); - }; - d3_hslPrototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_hsl(this.h, this.s, k * this.l); - }; - d3_hslPrototype.rgb = function() { - return d3_hsl_rgb(this.h, this.s, this.l); - }; - function d3_hsl_rgb(h, s, l) { - var m1, m2; - h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h; - s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s; - l = l < 0 ? 0 : l > 1 ? 1 : l; - m2 = l <= .5 ? l * (1 + s) : l + s - l * s; - m1 = 2 * l - m2; - function v(h) { - if (h > 360) h -= 360; else if (h < 0) h += 360; - if (h < 60) return m1 + (m2 - m1) * h / 60; - if (h < 180) return m2; - if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; - return m1; - } - function vv(h) { - return Math.round(v(h) * 255); - } - return new d3_rgb(vv(h + 120), vv(h), vv(h - 120)); - } - d3.hcl = d3_hcl; - function d3_hcl(h, c, l) { - return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l); - } - var d3_hclPrototype = d3_hcl.prototype = new d3_color(); - d3_hclPrototype.brighter = function(k) { - return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); - }; - d3_hclPrototype.darker = function(k) { - return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); - }; - d3_hclPrototype.rgb = function() { - return d3_hcl_lab(this.h, this.c, this.l).rgb(); - }; - function d3_hcl_lab(h, c, l) { - if (isNaN(h)) h = 0; - if (isNaN(c)) c = 0; - return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c); - } - d3.lab = d3_lab; - function d3_lab(l, a, b) { - return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b); - } - var d3_lab_K = 18; - var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883; - var d3_labPrototype = d3_lab.prototype = new d3_color(); - d3_labPrototype.brighter = function(k) { - return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_labPrototype.darker = function(k) { - return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); - }; - d3_labPrototype.rgb = function() { - return d3_lab_rgb(this.l, this.a, this.b); - }; - function d3_lab_rgb(l, a, b) { - var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200; - x = d3_lab_xyz(x) * d3_lab_X; - y = d3_lab_xyz(y) * d3_lab_Y; - z = d3_lab_xyz(z) * d3_lab_Z; - return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z)); - } - function d3_lab_hcl(l, a, b) { - return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l); - } - function d3_lab_xyz(x) { - return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037; - } - function d3_xyz_lab(x) { - return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29; - } - function d3_xyz_rgb(r) { - return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055)); - } - d3.rgb = d3_rgb; - function d3_rgb(r, g, b) { - return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b); - } - function d3_rgbNumber(value) { - return new d3_rgb(value >> 16, value >> 8 & 255, value & 255); - } - function d3_rgbString(value) { - return d3_rgbNumber(value) + ""; - } - var d3_rgbPrototype = d3_rgb.prototype = new d3_color(); - d3_rgbPrototype.brighter = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - var r = this.r, g = this.g, b = this.b, i = 30; - if (!r && !g && !b) return new d3_rgb(i, i, i); - if (r && r < i) r = i; - if (g && g < i) g = i; - if (b && b < i) b = i; - return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k)); - }; - d3_rgbPrototype.darker = function(k) { - k = Math.pow(.7, arguments.length ? k : 1); - return new d3_rgb(k * this.r, k * this.g, k * this.b); - }; - d3_rgbPrototype.hsl = function() { - return d3_rgb_hsl(this.r, this.g, this.b); - }; - d3_rgbPrototype.toString = function() { - return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); - }; - function d3_rgb_hex(v) { - return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16); - } - function d3_rgb_parse(format, rgb, hsl) { - format = format.toLowerCase(); - var r = 0, g = 0, b = 0, m1, m2, color; - m1 = /([a-z]+)\((.*)\)/.exec(format); - if (m1) { - m2 = m1[2].split(","); - switch (m1[1]) { - case "hsl": - { - return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100); + d3_selectionPrototype.datum = function (value) { + return arguments.length ? this.property('__data__', value) : this.property('__data__') + } + d3_selectionPrototype.filter = function (filter) { + var subgroups = [], subgroup, group, node + if (typeof filter !== 'function') filter = d3_selection_filter(filter) + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []) + subgroup.parentNode = (group = this[j]).parentNode + for (var i = 0, n = group.length; i < n; i++) { + if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { + subgroup.push(node) + } + } } - - case "rgb": - { - return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])); + return d3_selection(subgroups) + } + function d3_selection_filter (selector) { + return function () { + return d3_selectMatches(this, selector) } } - } - if (color = d3_rgb_names.get(format)) { - return rgb(color.r, color.g, color.b); - } - if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.slice(1), 16))) { - if (format.length === 4) { - r = (color & 3840) >> 4; - r = r >> 4 | r; - g = color & 240; - g = g >> 4 | g; - b = color & 15; - b = b << 4 | b; - } else if (format.length === 7) { - r = (color & 16711680) >> 16; - g = (color & 65280) >> 8; - b = color & 255; + d3_selectionPrototype.order = function () { + for (var j = -1, m = this.length; ++j < m;) { + for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0;) { + if (node = group[i]) { + if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next) + next = node + } + } + } + return this } - } - return rgb(r, g, b); - } - function d3_rgb_hsl(r, g, b) { - var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2; - if (d) { - s = l < .5 ? d / (max + min) : d / (2 - max - min); - if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4; - h *= 60; - } else { - h = NaN; - s = l > 0 && l < 1 ? 0 : h; - } - return new d3_hsl(h, s, l); - } - function d3_rgb_lab(r, g, b) { - r = d3_rgb_xyz(r); - g = d3_rgb_xyz(g); - b = d3_rgb_xyz(b); - var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z); - return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z)); - } - function d3_rgb_xyz(r) { - return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4); - } - function d3_rgb_parseNumber(c) { - var f = parseFloat(c); - return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; - } - var d3_rgb_names = d3.map({ - aliceblue: 15792383, - antiquewhite: 16444375, - aqua: 65535, - aquamarine: 8388564, - azure: 15794175, - beige: 16119260, - bisque: 16770244, - black: 0, - blanchedalmond: 16772045, - blue: 255, - blueviolet: 9055202, - brown: 10824234, - burlywood: 14596231, - cadetblue: 6266528, - chartreuse: 8388352, - chocolate: 13789470, - coral: 16744272, - cornflowerblue: 6591981, - cornsilk: 16775388, - crimson: 14423100, - cyan: 65535, - darkblue: 139, - darkcyan: 35723, - darkgoldenrod: 12092939, - darkgray: 11119017, - darkgreen: 25600, - darkgrey: 11119017, - darkkhaki: 12433259, - darkmagenta: 9109643, - darkolivegreen: 5597999, - darkorange: 16747520, - darkorchid: 10040012, - darkred: 9109504, - darksalmon: 15308410, - darkseagreen: 9419919, - darkslateblue: 4734347, - darkslategray: 3100495, - darkslategrey: 3100495, - darkturquoise: 52945, - darkviolet: 9699539, - deeppink: 16716947, - deepskyblue: 49151, - dimgray: 6908265, - dimgrey: 6908265, - dodgerblue: 2003199, - firebrick: 11674146, - floralwhite: 16775920, - forestgreen: 2263842, - fuchsia: 16711935, - gainsboro: 14474460, - ghostwhite: 16316671, - gold: 16766720, - goldenrod: 14329120, - gray: 8421504, - green: 32768, - greenyellow: 11403055, - grey: 8421504, - honeydew: 15794160, - hotpink: 16738740, - indianred: 13458524, - indigo: 4915330, - ivory: 16777200, - khaki: 15787660, - lavender: 15132410, - lavenderblush: 16773365, - lawngreen: 8190976, - lemonchiffon: 16775885, - lightblue: 11393254, - lightcoral: 15761536, - lightcyan: 14745599, - lightgoldenrodyellow: 16448210, - lightgray: 13882323, - lightgreen: 9498256, - lightgrey: 13882323, - lightpink: 16758465, - lightsalmon: 16752762, - lightseagreen: 2142890, - lightskyblue: 8900346, - lightslategray: 7833753, - lightslategrey: 7833753, - lightsteelblue: 11584734, - lightyellow: 16777184, - lime: 65280, - limegreen: 3329330, - linen: 16445670, - magenta: 16711935, - maroon: 8388608, - mediumaquamarine: 6737322, - mediumblue: 205, - mediumorchid: 12211667, - mediumpurple: 9662683, - mediumseagreen: 3978097, - mediumslateblue: 8087790, - mediumspringgreen: 64154, - mediumturquoise: 4772300, - mediumvioletred: 13047173, - midnightblue: 1644912, - mintcream: 16121850, - mistyrose: 16770273, - moccasin: 16770229, - navajowhite: 16768685, - navy: 128, - oldlace: 16643558, - olive: 8421376, - olivedrab: 7048739, - orange: 16753920, - orangered: 16729344, - orchid: 14315734, - palegoldenrod: 15657130, - palegreen: 10025880, - paleturquoise: 11529966, - palevioletred: 14381203, - papayawhip: 16773077, - peachpuff: 16767673, - peru: 13468991, - pink: 16761035, - plum: 14524637, - powderblue: 11591910, - purple: 8388736, - rebeccapurple: 6697881, - red: 16711680, - rosybrown: 12357519, - royalblue: 4286945, - saddlebrown: 9127187, - salmon: 16416882, - sandybrown: 16032864, - seagreen: 3050327, - seashell: 16774638, - sienna: 10506797, - silver: 12632256, - skyblue: 8900331, - slateblue: 6970061, - slategray: 7372944, - slategrey: 7372944, - snow: 16775930, - springgreen: 65407, - steelblue: 4620980, - tan: 13808780, - teal: 32896, - thistle: 14204888, - tomato: 16737095, - turquoise: 4251856, - violet: 15631086, - wheat: 16113331, - white: 16777215, - whitesmoke: 16119285, - yellow: 16776960, - yellowgreen: 10145074 - }); - d3_rgb_names.forEach(function(key, value) { - d3_rgb_names.set(key, d3_rgbNumber(value)); - }); - function d3_functor(v) { - return typeof v === "function" ? v : function() { - return v; - }; - } - d3.functor = d3_functor; - d3.xhr = d3_xhrType(d3_identity); - function d3_xhrType(response) { - return function(url, mimeType, callback) { - if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType, - mimeType = null; - return d3_xhr(url, mimeType, response, callback); - }; - } - function d3_xhr(url, mimeType, response, callback) { - var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null; - if (this.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest(); - "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() { - request.readyState > 3 && respond(); - }; - function respond() { - var status = request.status, result; - if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) { - try { - result = response.call(xhr, request); - } catch (e) { - dispatch.error.call(xhr, e); - return; + d3_selectionPrototype.sort = function (comparator) { + comparator = d3_selection_sortComparator.apply(this, arguments) + for (var j = -1, m = this.length; ++j < m;) this[j].sort(comparator) + return this.order() + } + function d3_selection_sortComparator (comparator) { + if (!arguments.length) comparator = d3_ascending + return function (a, b) { + return a && b ? comparator(a.__data__, b.__data__) : !a - !b } - dispatch.load.call(xhr, result); - } else { - dispatch.error.call(xhr, request); } - } - request.onprogress = function(event) { - var o = d3.event; - d3.event = event; - try { - dispatch.progress.call(xhr, request); - } finally { - d3.event = o; - } - }; - xhr.header = function(name, value) { - name = (name + "").toLowerCase(); - if (arguments.length < 2) return headers[name]; - if (value == null) delete headers[name]; else headers[name] = value + ""; - return xhr; - }; - xhr.mimeType = function(value) { - if (!arguments.length) return mimeType; - mimeType = value == null ? null : value + ""; - return xhr; - }; - xhr.responseType = function(value) { - if (!arguments.length) return responseType; - responseType = value; - return xhr; - }; - xhr.response = function(value) { - response = value; - return xhr; - }; - [ "get", "post" ].forEach(function(method) { - xhr[method] = function() { - return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments))); - }; - }); - xhr.send = function(method, data, callback) { - if (arguments.length === 2 && typeof data === "function") callback = data, data = null; - request.open(method, url, true); - if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*"; - if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]); - if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType); - if (responseType != null) request.responseType = responseType; - if (callback != null) xhr.on("error", callback).on("load", function(request) { - callback(null, request); - }); - dispatch.beforesend.call(xhr, request); - request.send(data == null ? null : data); - return xhr; - }; - xhr.abort = function() { - request.abort(); - return xhr; - }; - d3.rebind(xhr, dispatch, "on"); - return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback)); - } - function d3_xhr_fixCallback(callback) { - return callback.length === 1 ? function(error, request) { - callback(error == null ? request : null); - } : callback; - } - function d3_xhrHasResponse(request) { - var type = request.responseType; - return type && type !== "text" ? request.response : request.responseText; - } - d3.dsv = function(delimiter, mimeType) { - var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0); - function dsv(url, row, callback) { - if (arguments.length < 3) callback = row, row = null; - var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback); - xhr.row = function(_) { - return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row; - }; - return xhr; - } - function response(request) { - return dsv.parse(request.responseText); - } - function typedResponse(f) { - return function(request) { - return dsv.parse(request.responseText, f); - }; - } - dsv.parse = function(text, f) { - var o; - return dsv.parseRows(text, function(row, i) { - if (o) return o(row, i - 1); - var a = new Function("d", "return {" + row.map(function(name, i) { - return JSON.stringify(name) + ": d[" + i + "]"; - }).join(",") + "}"); - o = f ? function(row, i) { - return f(a(row), i); - } : a; - }); - }; - dsv.parseRows = function(text, f) { - var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol; - function token() { - if (I >= N) return EOF; - if (eol) return eol = false, EOL; - var j = I; - if (text.charCodeAt(j) === 34) { - var i = j; - while (i++ < N) { - if (text.charCodeAt(i) === 34) { - if (text.charCodeAt(i + 1) !== 34) break; - ++i; - } - } - I = i + 2; - var c = text.charCodeAt(i + 1); - if (c === 13) { - eol = true; - if (text.charCodeAt(i + 2) === 10) ++I; - } else if (c === 10) { - eol = true; - } - return text.slice(j + 1, i).replace(/""/g, '"'); - } - while (I < N) { - var c = text.charCodeAt(I++), k = 1; - if (c === 10) eol = true; else if (c === 13) { - eol = true; - if (text.charCodeAt(I) === 10) ++I, ++k; - } else if (c !== delimiterCode) continue; - return text.slice(j, I - k); - } - return text.slice(j); - } - while ((t = token()) !== EOF) { - var a = []; - while (t !== EOL && t !== EOF) { - a.push(t); - t = token(); - } - if (f && (a = f(a, n++)) == null) continue; - rows.push(a); - } - return rows; - }; - dsv.format = function(rows) { - if (Array.isArray(rows[0])) return dsv.formatRows(rows); - var fieldSet = new d3_Set(), fields = []; - rows.forEach(function(row) { - for (var field in row) { - if (!fieldSet.has(field)) { - fields.push(fieldSet.add(field)); + d3_selectionPrototype.each = function (callback) { + return d3_selection_each(this, function (node, i, j) { + callback.call(node, node.__data__, i, j) + }) + } + function d3_selection_each (groups, callback) { + for (var j = 0, m = groups.length; j < m; j++) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) { + if (node = group[i]) callback(node, i, j) } } - }); - return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) { - return fields.map(function(field) { - return formatValue(row[field]); - }).join(delimiter); - })).join("\n"); - }; - dsv.formatRows = function(rows) { - return rows.map(formatRow).join("\n"); - }; - function formatRow(row) { - return row.map(formatValue).join(delimiter); - } - function formatValue(text) { - return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text; - } - return dsv; - }; - d3.csv = d3.dsv(",", "text/csv"); - d3.tsv = d3.dsv(" ", "text/tab-separated-values"); - var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = this[d3_vendorSymbol(this, "requestAnimationFrame")] || function(callback) { - setTimeout(callback, 17); - }; - d3.timer = function(callback, delay, then) { - var n = arguments.length; - if (n < 2) delay = 0; - if (n < 3) then = Date.now(); - var time = then + delay, timer = { - c: callback, - t: time, - f: false, - n: null - }; - if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer; - d3_timer_queueTail = timer; - if (!d3_timer_interval) { - d3_timer_timeout = clearTimeout(d3_timer_timeout); - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - }; - function d3_timer_step() { - var now = d3_timer_mark(), delay = d3_timer_sweep() - now; - if (delay > 24) { - if (isFinite(delay)) { - clearTimeout(d3_timer_timeout); - d3_timer_timeout = setTimeout(d3_timer_step, delay); - } - d3_timer_interval = 0; - } else { - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } - } - d3.timer.flush = function() { - d3_timer_mark(); - d3_timer_sweep(); - }; - function d3_timer_mark() { - var now = Date.now(); - d3_timer_active = d3_timer_queueHead; - while (d3_timer_active) { - if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t); - d3_timer_active = d3_timer_active.n; - } - return now; - } - function d3_timer_sweep() { - var t0, t1 = d3_timer_queueHead, time = Infinity; - while (t1) { - if (t1.f) { - t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n; - } else { - if (t1.t < time) time = t1.t; - t1 = (t0 = t1).n; + return groups } - } - d3_timer_queueTail = t0; - return time; - } - function d3_format_precision(x, p) { - return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1); - } - d3.round = function(x, n) { - return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x); - }; - var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix); - d3.formatPrefix = function(value, precision) { - var i = 0; - if (value) { - if (value < 0) value *= -1; - if (precision) value = d3.round(value, d3_format_precision(value, precision)); - i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); - i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3)); - } - return d3_formatPrefixes[8 + i / 3]; - }; - function d3_formatPrefix(d, i) { - var k = Math.pow(10, abs(8 - i) * 3); - return { - scale: i > 8 ? function(d) { - return d / k; - } : function(d) { - return d * k; - }, - symbol: d - }; - } - function d3_locale_numberFormat(locale) { - var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) { - var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0; - while (i > 0 && g > 0) { - if (length + g + 1 > width) g = Math.max(1, width - length); - t.push(value.substring(i -= g, i + g)); - if ((length += g + 1) > width) break; - g = locale_grouping[j = (j + 1) % locale_grouping.length]; - } - return t.reverse().join(locale_thousands); - } : d3_identity; - return function(specifier) { - var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "-", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false, exponent = true; - if (precision) precision = +precision.substring(1); - if (zfill || fill === "0" && align === "=") { - zfill = fill = "0"; - align = "="; - } - switch (type) { - case "n": - comma = true; - type = "g"; - break; - - case "%": - scale = 100; - suffix = "%"; - type = "f"; - break; - - case "p": - scale = 100; - suffix = "%"; - type = "r"; - break; - - case "b": - case "o": - case "x": - case "X": - if (symbol === "#") prefix = "0" + type.toLowerCase(); - - case "c": - exponent = false; - - case "d": - integer = true; - precision = 0; - break; - - case "s": - scale = -1; - type = "r"; - break; - } - if (symbol === "$") prefix = locale_currency[0], suffix = locale_currency[1]; - if (type == "r" && !precision) type = "g"; - if (precision != null) { - if (type == "g") precision = Math.max(1, Math.min(21, precision)); else if (type == "e" || type == "f") precision = Math.max(0, Math.min(20, precision)); - } - type = d3_format_types.get(type) || d3_format_typeDefault; - var zcomma = zfill && comma; - return function(value) { - var fullSuffix = suffix; - if (integer && value % 1) return ""; - var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign === "-" ? "" : sign; - if (scale < 0) { - var unit = d3.formatPrefix(value, precision); - value = unit.scale(value); - fullSuffix = unit.symbol + suffix; + d3_selectionPrototype.call = function (callback) { + var args = d3_array(arguments) + callback.apply(args[0] = this, args) + return this + } + d3_selectionPrototype.empty = function () { + return !this.node() + } + d3_selectionPrototype.node = function () { + for (var j = 0, m = this.length; j < m; j++) { + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + var node = group[i] + if (node) return node + } + } + return null + } + d3_selectionPrototype.size = function () { + var n = 0 + d3_selection_each(this, function () { + ++n + }) + return n + } + function d3_selection_enter (selection) { + d3_subclass(selection, d3_selection_enterPrototype) + return selection + } + var d3_selection_enterPrototype = [] + d3.selection.enter = d3_selection_enter + d3.selection.enter.prototype = d3_selection_enterPrototype + d3_selection_enterPrototype.append = d3_selectionPrototype.append + d3_selection_enterPrototype.empty = d3_selectionPrototype.empty + d3_selection_enterPrototype.node = d3_selectionPrototype.node + d3_selection_enterPrototype.call = d3_selectionPrototype.call + d3_selection_enterPrototype.size = d3_selectionPrototype.size + d3_selection_enterPrototype.select = function (selector) { + var subgroups = [], subgroup, subnode, upgroup, group, node + for (var j = -1, m = this.length; ++j < m;) { + upgroup = (group = this[j]).update + subgroups.push(subgroup = []) + subgroup.parentNode = group.parentNode + for (var i = -1, n = group.length; ++i < n;) { + if (node = group[i]) { + subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j)) + subnode.__data__ = node.__data__ + } else { + subgroup.push(null) + } + } + } + return d3_selection(subgroups) + } + d3_selection_enterPrototype.insert = function (name, before) { + if (arguments.length < 2) before = d3_selection_enterInsertBefore(this) + return d3_selectionPrototype.insert.call(this, name, before) + } + function d3_selection_enterInsertBefore (enter) { + var i0, j0 + return function (d, i, j) { + var group = enter[j].update, n = group.length, node + if (j != j0) j0 = j, i0 = 0 + if (i >= i0) i0 = i + 1 + while (!(node = group[i0]) && ++i0 < n) ; + return node + } + } + d3.select = function (node) { + var group + if (typeof node === 'string') { + group = [ d3_select(node, d3_document) ] + group.parentNode = d3_document.documentElement } else { - value *= scale; + group = [ node ] + group.parentNode = d3_documentElement(node) } - value = type(value, precision); - var i = value.lastIndexOf("."), before, after; - if (i < 0) { - var j = exponent ? value.lastIndexOf("e") : -1; - if (j < 0) before = value, after = ""; else before = value.substring(0, j), after = value.substring(j); + return d3_selection([ group ]) + } + d3.selectAll = function (nodes) { + var group + if (typeof nodes === 'string') { + group = d3_array(d3_selectAll(nodes, d3_document)) + group.parentNode = d3_document.documentElement } else { - before = value.substring(0, i); - after = locale_decimal + value.substring(i + 1); - } - if (!zfill && comma) before = formatGroup(before, Infinity); - var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : ""; - if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity); - negative += prefix; - value = before + after; - return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix; - }; - }; - } - var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i; - var d3_format_types = d3.map({ - b: function(x) { - return x.toString(2); - }, - c: function(x) { - return String.fromCharCode(x); - }, - o: function(x) { - return x.toString(8); - }, - x: function(x) { - return x.toString(16); - }, - X: function(x) { - return x.toString(16).toUpperCase(); - }, - g: function(x, p) { - return x.toPrecision(p); - }, - e: function(x, p) { - return x.toExponential(p); - }, - f: function(x, p) { - return x.toFixed(p); - }, - r: function(x, p) { - return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p)))); - } - }); - function d3_format_typeDefault(x) { - return x + ""; - } - var d3_time = d3.time = {}, d3_date = Date; - function d3_date_utc() { - this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]); - } - d3_date_utc.prototype = { - getDate: function() { - return this._.getUTCDate(); - }, - getDay: function() { - return this._.getUTCDay(); - }, - getFullYear: function() { - return this._.getUTCFullYear(); - }, - getHours: function() { - return this._.getUTCHours(); - }, - getMilliseconds: function() { - return this._.getUTCMilliseconds(); - }, - getMinutes: function() { - return this._.getUTCMinutes(); - }, - getMonth: function() { - return this._.getUTCMonth(); - }, - getSeconds: function() { - return this._.getUTCSeconds(); - }, - getTime: function() { - return this._.getTime(); - }, - getTimezoneOffset: function() { - return 0; - }, - valueOf: function() { - return this._.valueOf(); - }, - setDate: function() { - d3_time_prototype.setUTCDate.apply(this._, arguments); - }, - setDay: function() { - d3_time_prototype.setUTCDay.apply(this._, arguments); - }, - setFullYear: function() { - d3_time_prototype.setUTCFullYear.apply(this._, arguments); - }, - setHours: function() { - d3_time_prototype.setUTCHours.apply(this._, arguments); - }, - setMilliseconds: function() { - d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); - }, - setMinutes: function() { - d3_time_prototype.setUTCMinutes.apply(this._, arguments); - }, - setMonth: function() { - d3_time_prototype.setUTCMonth.apply(this._, arguments); - }, - setSeconds: function() { - d3_time_prototype.setUTCSeconds.apply(this._, arguments); - }, - setTime: function() { - d3_time_prototype.setTime.apply(this._, arguments); - } - }; - var d3_time_prototype = Date.prototype; - function d3_time_interval(local, step, number) { - function round(date) { - var d0 = local(date), d1 = offset(d0, 1); - return date - d0 < d1 - date ? d0 : d1; - } - function ceil(date) { - step(date = local(new d3_date(date - 1)), 1); - return date; - } - function offset(date, k) { - step(date = new d3_date(+date), k); - return date; - } - function range(t0, t1, dt) { - var time = ceil(t0), times = []; - if (dt > 1) { - while (time < t1) { - if (!(number(time) % dt)) times.push(new Date(+time)); - step(time, 1); + group = nodes + group.parentNode = null + } + return d3_selection([ group ]) + } + d3_selectionPrototype.on = function (type, listener, capture) { + var n = arguments.length + if (n < 3) { + if (typeof type !== 'string') { + if (n < 2) listener = false + for (capture in type) this.each(d3_selection_on(capture, type[capture], listener)) + return this + } + if (n < 2) return (n = this.node()['__on' + type]) && n._ + capture = false + } + return this.each(d3_selection_on(type, listener, capture)) + } + function d3_selection_on (type, listener, capture) { + var name = '__on' + type, i = type.indexOf('.'), wrap = d3_selection_onListener + if (i > 0) type = type.slice(0, i) + var filter = d3_selection_onFilters.get(type) + if (filter) type = filter, wrap = d3_selection_onFilter + function onRemove () { + var l = this[name] + if (l) { + this.removeEventListener(type, l, l.$) + delete this[name] + } } - } else { - while (time < t1) times.push(new Date(+time)), step(time, 1); + function onAdd () { + var l = wrap(listener, d3_array(arguments)) + onRemove.call(this) + this.addEventListener(type, this[name] = l, l.$ = capture) + l._ = listener + } + function removeAll () { + var re = new RegExp('^__on([^.]+)' + d3.requote(type) + '$'), match + for (var name in this) { + if (match = name.match(re)) { + var l = this[name] + this.removeEventListener(match[1], l, l.$) + delete this[name] + } + } + } + return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll } - return times; - } - function range_utc(t0, t1, dt) { - try { - d3_date = d3_date_utc; - var utc = new d3_date_utc(); - utc._ = t0; - return range(utc, t1, dt); - } finally { - d3_date = Date; + var d3_selection_onFilters = d3.map({ + mouseenter: 'mouseover', + mouseleave: 'mouseout' + }) + if (d3_document) { + d3_selection_onFilters.forEach(function (k) { + if ('on' + k in d3_document) d3_selection_onFilters.remove(k) + }) } - } - local.floor = local; - local.round = round; - local.ceil = ceil; - local.offset = offset; - local.range = range; - var utc = local.utc = d3_time_interval_utc(local); - utc.floor = utc; - utc.round = d3_time_interval_utc(round); - utc.ceil = d3_time_interval_utc(ceil); - utc.offset = d3_time_interval_utc(offset); - utc.range = range_utc; - return local; - } - function d3_time_interval_utc(method) { - return function(date, k) { - try { - d3_date = d3_date_utc; - var utc = new d3_date_utc(); - utc._ = date; - return method(utc, k)._; - } finally { - d3_date = Date; - } - }; - } - d3_time.year = d3_time_interval(function(date) { - date = d3_time.day(date); - date.setMonth(0, 1); - return date; - }, function(date, offset) { - date.setFullYear(date.getFullYear() + offset); - }, function(date) { - return date.getFullYear(); - }); - d3_time.years = d3_time.year.range; - d3_time.years.utc = d3_time.year.utc.range; - d3_time.day = d3_time_interval(function(date) { - var day = new d3_date(2e3, 0); - day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); - return day; - }, function(date, offset) { - date.setDate(date.getDate() + offset); - }, function(date) { - return date.getDate() - 1; - }); - d3_time.days = d3_time.day.range; - d3_time.days.utc = d3_time.day.utc.range; - d3_time.dayOfYear = function(date) { - var year = d3_time.year(date); - return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5); - }; - [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ].forEach(function(day, i) { - i = 7 - i; - var interval = d3_time[day] = d3_time_interval(function(date) { - (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7); - return date; - }, function(date, offset) { - date.setDate(date.getDate() + Math.floor(offset) * 7); - }, function(date) { - var day = d3_time.year(date).getDay(); - return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i); - }); - d3_time[day + "s"] = interval.range; - d3_time[day + "s"].utc = interval.utc.range; - d3_time[day + "OfYear"] = function(date) { - var day = d3_time.year(date).getDay(); - return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7); - }; - }); - d3_time.week = d3_time.sunday; - d3_time.weeks = d3_time.sunday.range; - d3_time.weeks.utc = d3_time.sunday.utc.range; - d3_time.weekOfYear = d3_time.sundayOfYear; - function d3_locale_timeFormat(locale) { - var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths; - function d3_time_format(template) { - var n = template.length; - function format(date) { - var string = [], i = -1, j = 0, c, p, f; - while (++i < n) { - if (template.charCodeAt(i) === 37) { - string.push(template.slice(j, i)); - if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i); - if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p); - string.push(c); - j = i + 1; - } - } - string.push(template.slice(j, i)); - return string.join(""); - } - format.parse = function(string) { - var d = { - y: 1900, - m: 0, - d: 1, - H: 0, - M: 0, - S: 0, - L: 0, - Z: null - }, i = d3_time_parse(d, template, string, 0); - if (i != string.length) return null; - if ("p" in d) d.H = d.H % 12 + d.p * 12; - var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)(); - if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("w" in d && ("W" in d || "U" in d)) { - date.setFullYear(d.y, 0, 1); - date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7); - } else date.setFullYear(d.y, d.m, d.d); - date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L); - return localZ ? date._ : date; - }; - format.toString = function() { - return template; - }; - return format; - } - function d3_time_parse(date, template, string, j) { - var c, p, t, i = 0, n = template.length, m = string.length; - while (i < n) { - if (j >= m) return -1; - c = template.charCodeAt(i++); - if (c === 37) { - t = template.charAt(i++); - p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t]; - if (!p || (j = p(date, string, j)) < 0) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } - } - return j; - } - d3_time_format.utc = function(template) { - var local = d3_time_format(template); - function format(date) { - try { - d3_date = d3_date_utc; - var utc = new d3_date(); - utc._ = date; - return local(utc); - } finally { - d3_date = Date; + function d3_selection_onListener (listener, argumentz) { + return function (e) { + var o = d3.event + d3.event = e + argumentz[0] = this.__data__ + try { + listener.apply(this, argumentz) + } finally { + d3.event = o + } } } - format.parse = function(string) { - try { - d3_date = d3_date_utc; - var date = local.parse(string); - return date && date._; - } finally { - d3_date = Date; + function d3_selection_onFilter (listener, argumentz) { + var l = d3_selection_onListener(listener, argumentz) + return function (e) { + var target = this, related = e.relatedTarget + if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) { + l.call(target, e) + } } - }; - format.toString = local.toString; - return format; - }; - d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti; - var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths); - locale_periods.forEach(function(p, i) { - d3_time_periodLookup.set(p.toLowerCase(), i); - }); - var d3_time_formats = { - a: function(d) { - return locale_shortDays[d.getDay()]; - }, - A: function(d) { - return locale_days[d.getDay()]; - }, - b: function(d) { - return locale_shortMonths[d.getMonth()]; - }, - B: function(d) { - return locale_months[d.getMonth()]; - }, - c: d3_time_format(locale_dateTime), - d: function(d, p) { - return d3_time_formatPad(d.getDate(), p, 2); - }, - e: function(d, p) { - return d3_time_formatPad(d.getDate(), p, 2); - }, - H: function(d, p) { - return d3_time_formatPad(d.getHours(), p, 2); - }, - I: function(d, p) { - return d3_time_formatPad(d.getHours() % 12 || 12, p, 2); - }, - j: function(d, p) { - return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3); - }, - L: function(d, p) { - return d3_time_formatPad(d.getMilliseconds(), p, 3); - }, - m: function(d, p) { - return d3_time_formatPad(d.getMonth() + 1, p, 2); - }, - M: function(d, p) { - return d3_time_formatPad(d.getMinutes(), p, 2); - }, - p: function(d) { - return locale_periods[+(d.getHours() >= 12)]; - }, - S: function(d, p) { - return d3_time_formatPad(d.getSeconds(), p, 2); - }, - U: function(d, p) { - return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2); - }, - w: function(d) { - return d.getDay(); - }, - W: function(d, p) { - return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2); - }, - x: d3_time_format(locale_date), - X: d3_time_format(locale_time), - y: function(d, p) { - return d3_time_formatPad(d.getFullYear() % 100, p, 2); - }, - Y: function(d, p) { - return d3_time_formatPad(d.getFullYear() % 1e4, p, 4); - }, - Z: d3_time_zone, - "%": function() { - return "%"; - } - }; - var d3_time_parsers = { - a: d3_time_parseWeekdayAbbrev, - A: d3_time_parseWeekday, - b: d3_time_parseMonthAbbrev, - B: d3_time_parseMonth, - c: d3_time_parseLocaleFull, - d: d3_time_parseDay, - e: d3_time_parseDay, - H: d3_time_parseHour24, - I: d3_time_parseHour24, - j: d3_time_parseDayOfYear, - L: d3_time_parseMilliseconds, - m: d3_time_parseMonthNumber, - M: d3_time_parseMinutes, - p: d3_time_parseAmPm, - S: d3_time_parseSeconds, - U: d3_time_parseWeekNumberSunday, - w: d3_time_parseWeekdayNumber, - W: d3_time_parseWeekNumberMonday, - x: d3_time_parseLocaleDate, - X: d3_time_parseLocaleTime, - y: d3_time_parseYear, - Y: d3_time_parseFullYear, - Z: d3_time_parseZone, - "%": d3_time_parseLiteralPercent - }; - function d3_time_parseWeekdayAbbrev(date, string, i) { - d3_time_dayAbbrevRe.lastIndex = 0; - var n = d3_time_dayAbbrevRe.exec(string.slice(i)); - return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseWeekday(date, string, i) { - d3_time_dayRe.lastIndex = 0; - var n = d3_time_dayRe.exec(string.slice(i)); - return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseMonthAbbrev(date, string, i) { - d3_time_monthAbbrevRe.lastIndex = 0; - var n = d3_time_monthAbbrevRe.exec(string.slice(i)); - return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseMonth(date, string, i) { - d3_time_monthRe.lastIndex = 0; - var n = d3_time_monthRe.exec(string.slice(i)); - return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; - } - function d3_time_parseLocaleFull(date, string, i) { - return d3_time_parse(date, d3_time_formats.c.toString(), string, i); - } - function d3_time_parseLocaleDate(date, string, i) { - return d3_time_parse(date, d3_time_formats.x.toString(), string, i); - } - function d3_time_parseLocaleTime(date, string, i) { - return d3_time_parse(date, d3_time_formats.X.toString(), string, i); - } - function d3_time_parseAmPm(date, string, i) { - var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase()); - return n == null ? -1 : (date.p = n, i); - } - return d3_time_format; - } - var d3_time_formatPads = { - "-": "", - _: " ", - "0": "0" - }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/; - function d3_time_formatPad(value, fill, width) { - var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length; - return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); - } - function d3_time_formatRe(names) { - return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i"); - } - function d3_time_formatLookup(names) { - var map = new d3_Map(), i = -1, n = names.length; - while (++i < n) map.set(names[i].toLowerCase(), i); - return map; - } - function d3_time_parseWeekdayNumber(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 1)); - return n ? (date.w = +n[0], i + n[0].length) : -1; - } - function d3_time_parseWeekNumberSunday(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i)); - return n ? (date.U = +n[0], i + n[0].length) : -1; - } - function d3_time_parseWeekNumberMonday(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i)); - return n ? (date.W = +n[0], i + n[0].length) : -1; - } - function d3_time_parseFullYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 4)); - return n ? (date.y = +n[0], i + n[0].length) : -1; - } - function d3_time_parseYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1; - } - function d3_time_parseZone(date, string, i) { - return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, - i + 5) : -1; - } - function d3_time_expandYear(d) { - return d + (d > 68 ? 1900 : 2e3); - } - function d3_time_parseMonthNumber(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.m = n[0] - 1, i + n[0].length) : -1; - } - function d3_time_parseDay(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.d = +n[0], i + n[0].length) : -1; - } - function d3_time_parseDayOfYear(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 3)); - return n ? (date.j = +n[0], i + n[0].length) : -1; - } - function d3_time_parseHour24(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.H = +n[0], i + n[0].length) : -1; - } - function d3_time_parseMinutes(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.M = +n[0], i + n[0].length) : -1; - } - function d3_time_parseSeconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 2)); - return n ? (date.S = +n[0], i + n[0].length) : -1; - } - function d3_time_parseMilliseconds(date, string, i) { - d3_time_numberRe.lastIndex = 0; - var n = d3_time_numberRe.exec(string.slice(i, i + 3)); - return n ? (date.L = +n[0], i + n[0].length) : -1; - } - function d3_time_zone(d) { - var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = abs(z) / 60 | 0, zm = abs(z) % 60; - return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2); - } - function d3_time_parseLiteralPercent(date, string, i) { - d3_time_percentRe.lastIndex = 0; - var n = d3_time_percentRe.exec(string.slice(i, i + 1)); - return n ? i + n[0].length : -1; - } - function d3_time_formatMulti(formats) { - var n = formats.length, i = -1; - while (++i < n) formats[i][0] = this(formats[i][0]); - return function(date) { - var i = 0, f = formats[i]; - while (!f[1](date)) f = formats[++i]; - return f[0](date); - }; - } - d3.locale = function(locale) { - return { - numberFormat: d3_locale_numberFormat(locale), - timeFormat: d3_locale_timeFormat(locale) - }; - }; - var d3_locale_enUS = d3.locale({ - decimal: ".", - thousands: ",", - grouping: [ 3 ], - currency: [ "$", "" ], - dateTime: "%a %b %e %X %Y", - date: "%m/%d/%Y", - time: "%H:%M:%S", - periods: [ "AM", "PM" ], - days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], - shortDays: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], - months: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], - shortMonths: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] - }); - d3.format = d3_locale_enUS.numberFormat; - d3.geo = {}; - function d3_adder() {} - d3_adder.prototype = { - s: 0, - t: 0, - add: function(y) { - d3_adderSum(y, this.t, d3_adderTemp); - d3_adderSum(d3_adderTemp.s, this.s, this); - if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t; - }, - reset: function() { - this.s = this.t = 0; - }, - valueOf: function() { - return this.s; - } - }; - var d3_adderTemp = new d3_adder(); - function d3_adderSum(a, b, o) { - var x = o.s = a + b, bv = x - a, av = x - bv; - o.t = a - av + (b - bv); - } - d3.geo.stream = function(object, listener) { - if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) { - d3_geo_streamObjectType[object.type](object, listener); - } else { - d3_geo_streamGeometry(object, listener); - } - }; - function d3_geo_streamGeometry(geometry, listener) { - if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) { - d3_geo_streamGeometryType[geometry.type](geometry, listener); - } - } - var d3_geo_streamObjectType = { - Feature: function(feature, listener) { - d3_geo_streamGeometry(feature.geometry, listener); - }, - FeatureCollection: function(object, listener) { - var features = object.features, i = -1, n = features.length; - while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener); - } - }; - var d3_geo_streamGeometryType = { - Sphere: function(object, listener) { - listener.sphere(); - }, - Point: function(object, listener) { - object = object.coordinates; - listener.point(object[0], object[1], object[2]); - }, - MultiPoint: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]); - }, - LineString: function(object, listener) { - d3_geo_streamLine(object.coordinates, listener, 0); - }, - MultiLineString: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0); - }, - Polygon: function(object, listener) { - d3_geo_streamPolygon(object.coordinates, listener); - }, - MultiPolygon: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamPolygon(coordinates[i], listener); - }, - GeometryCollection: function(object, listener) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) d3_geo_streamGeometry(geometries[i], listener); - } - }; - function d3_geo_streamLine(coordinates, listener, closed) { - var i = -1, n = coordinates.length - closed, coordinate; - listener.lineStart(); - while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]); - listener.lineEnd(); - } - function d3_geo_streamPolygon(coordinates, listener) { - var i = -1, n = coordinates.length; - listener.polygonStart(); - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1); - listener.polygonEnd(); - } - d3.geo.area = function(object) { - d3_geo_areaSum = 0; - d3.geo.stream(object, d3_geo_area); - return d3_geo_areaSum; - }; - var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder(); - var d3_geo_area = { - sphere: function() { - d3_geo_areaSum += 4 * π; - }, - point: d3_noop, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: function() { - d3_geo_areaRingSum.reset(); - d3_geo_area.lineStart = d3_geo_areaRingStart; - }, - polygonEnd: function() { - var area = 2 * d3_geo_areaRingSum; - d3_geo_areaSum += area < 0 ? 4 * π + area : area; - d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop; - } - }; - function d3_geo_areaRingStart() { - var λ00, φ00, λ0, cosφ0, sinφ0; - d3_geo_area.point = function(λ, φ) { - d3_geo_area.point = nextPoint; - λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), - sinφ0 = Math.sin(φ); - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - φ = φ * d3_radians / 2 + π / 4; - var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ); - d3_geo_areaRingSum.add(Math.atan2(v, u)); - λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ; - } - d3_geo_area.lineEnd = function() { - nextPoint(λ00, φ00); - }; - } - function d3_geo_cartesian(spherical) { - var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ); - return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ]; - } - function d3_geo_cartesianDot(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; - } - function d3_geo_cartesianCross(a, b) { - return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ]; - } - function d3_geo_cartesianAdd(a, b) { - a[0] += b[0]; - a[1] += b[1]; - a[2] += b[2]; - } - function d3_geo_cartesianScale(vector, k) { - return [ vector[0] * k, vector[1] * k, vector[2] * k ]; - } - function d3_geo_cartesianNormalize(d) { - var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); - d[0] /= l; - d[1] /= l; - d[2] /= l; - } - function d3_geo_spherical(cartesian) { - return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ]; - } - function d3_geo_sphericalEqual(a, b) { - return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε; - } - d3.geo.bounds = function() { - var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range; - var bound = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - bound.point = ringPoint; - bound.lineStart = ringStart; - bound.lineEnd = ringEnd; - dλSum = 0; - d3_geo_area.polygonStart(); - }, - polygonEnd: function() { - d3_geo_area.polygonEnd(); - bound.point = point; - bound.lineStart = lineStart; - bound.lineEnd = lineEnd; - if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90; - range[0] = λ0, range[1] = λ1; - } - }; - function point(λ, φ) { - ranges.push(range = [ λ0 = λ, λ1 = λ ]); - if (φ < φ0) φ0 = φ; - if (φ > φ1) φ1 = φ; - } - function linePoint(λ, φ) { - var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]); - if (p0) { - var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal); - d3_geo_cartesianNormalize(inflection); - inflection = d3_geo_spherical(inflection); - var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180; - if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) { - var φi = inflection[1] * d3_degrees; - if (φi > φ1) φ1 = φi; - } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) { - var φi = -inflection[1] * d3_degrees; - if (φi < φ0) φ0 = φi; - } else { - if (φ < φ0) φ0 = φ; - if (φ > φ1) φ1 = φ; + } + var d3_event_dragSelect, d3_event_dragId = 0 + function d3_event_dragSuppress (node) { + var name = '.dragsuppress-' + ++d3_event_dragId, click = 'click' + name, w = d3.select(d3_window(node)).on('touchmove' + name, d3_eventPreventDefault).on('dragstart' + name, d3_eventPreventDefault).on('selectstart' + name, d3_eventPreventDefault) + if (d3_event_dragSelect == null) { + d3_event_dragSelect = 'onselectstart' in node ? false : d3_vendorSymbol(node.style, 'userSelect') } - if (antimeridian) { - if (λ < λ_) { - if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; - } else { - if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; + if (d3_event_dragSelect) { + var style = d3_documentElement(node).style, select = style[d3_event_dragSelect] + style[d3_event_dragSelect] = 'none' + } + return function (suppressClick) { + w.on(name, null) + if (d3_event_dragSelect) style[d3_event_dragSelect] = select + if (suppressClick) { + var off = function () { + w.on(click, null) + } + w.on(click, function () { + d3_eventPreventDefault() + off() + }, true) + setTimeout(off, 0) } - } else { - if (λ1 >= λ0) { - if (λ < λ0) λ0 = λ; - if (λ > λ1) λ1 = λ; - } else { - if (λ > λ_) { - if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; - } else { - if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; + } + } + d3.mouse = function (container) { + return d3_mousePoint(container, d3_eventSource()) + } + var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0 + function d3_mousePoint (container, e) { + if (e.changedTouches) e = e.changedTouches[0] + var svg = container.ownerSVGElement || container + if (svg.createSVGPoint) { + var point = svg.createSVGPoint() + if (d3_mouse_bug44083 < 0) { + var window = d3_window(container) + if (window.scrollX || window.scrollY) { + svg = d3.select('body').append('svg').style({ + position: 'absolute', + top: 0, + left: 0, + margin: 0, + padding: 0, + border: 'none' + }, 'important') + var ctm = svg[0][0].getScreenCTM() + d3_mouse_bug44083 = !(ctm.f || ctm.e) + svg.remove() + } + } + if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else { + point.x = e.clientX, + point.y = e.clientY + } + point = point.matrixTransform(container.getScreenCTM().inverse()) + return [ point.x, point.y ] + } + var rect = container.getBoundingClientRect() + return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ] + } + d3.touch = function (container, touches, identifier) { + if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches + if (touches) { + for (var i = 0, n = touches.length, touch; i < n; ++i) { + if ((touch = touches[i]).identifier === identifier) { + return d3_mousePoint(container, touch) } } } - } else { - point(λ, φ); } - p0 = p, λ_ = λ; - } - function lineStart() { - bound.point = linePoint; - } - function lineEnd() { - range[0] = λ0, range[1] = λ1; - bound.point = point; - p0 = null; - } - function ringPoint(λ, φ) { - if (p0) { - var dλ = λ - λ_; - dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ; - } else λ__ = λ, φ__ = φ; - d3_geo_area.point(λ, φ); - linePoint(λ, φ); - } - function ringStart() { - d3_geo_area.lineStart(); - } - function ringEnd() { - ringPoint(λ__, φ__); - d3_geo_area.lineEnd(); - if (abs(dλSum) > ε) λ0 = -(λ1 = 180); - range[0] = λ0, range[1] = λ1; - p0 = null; - } - function angle(λ0, λ1) { - return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1; - } - function compareRanges(a, b) { - return a[0] - b[0]; - } - function withinRange(x, range) { - return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; - } - return function(feature) { - φ1 = λ1 = -(λ0 = φ0 = Infinity); - ranges = []; - d3.geo.stream(feature, bound); - var n = ranges.length; - if (n) { - ranges.sort(compareRanges); - for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) { - b = ranges[i]; - if (withinRange(b[0], a) || withinRange(b[1], a)) { - if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; - if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; + d3.behavior.drag = function () { + var event = d3_eventDispatch(drag, 'drag', 'dragstart', 'dragend'), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, 'mousemove', 'mouseup'), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, 'touchmove', 'touchend') + function drag () { + this.on('mousedown.drag', mousedown).on('touchstart.drag', touchstart) + } + function dragstart (id, position, subject, move, end) { + return function () { + var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = '.drag' + (dragId == null ? '' : '-' + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId) + if (origin) { + dragOffset = origin.apply(that, arguments) + dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ] + } else { + dragOffset = [ 0, 0 ] + } + dispatch({ + type: 'dragstart' + }) + function moved () { + var position1 = position(parent, dragId), dx, dy + if (!position1) return + dx = position1[0] - position0[0] + dy = position1[1] - position0[1] + dragged |= dx | dy + position0 = position1 + dispatch({ + type: 'drag', + x: position1[0] + dragOffset[0], + y: position1[1] + dragOffset[1], + dx: dx, + dy: dy + }) + } + function ended () { + if (!position(parent, dragId)) return + dragSubject.on(move + dragName, null).on(end + dragName, null) + dragRestore(dragged && d3.event.target === target) + dispatch({ + type: 'dragend' + }) + } + } + } + drag.origin = function (x) { + if (!arguments.length) return origin + origin = x + return drag + } + return d3.rebind(drag, event, 'on') + } + function d3_behavior_dragTouchId () { + return d3.event.changedTouches[0].identifier + } + d3.touches = function (container, touches) { + if (arguments.length < 2) touches = d3_eventSource().touches + return touches ? d3_array(touches).map(function (touch) { + var point = d3_mousePoint(container, touch) + point.identifier = touch.identifier + return point + }) : [] + } + var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π + function d3_sgn (x) { + return x > 0 ? 1 : x < 0 ? -1 : 0 + } + function d3_cross2d (a, b, c) { + return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]) + } + function d3_acos (x) { + return x > 1 ? 0 : x < -1 ? π : Math.acos(x) + } + function d3_asin (x) { + return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x) + } + function d3_sinh (x) { + return ((x = Math.exp(x)) - 1 / x) / 2 + } + function d3_cosh (x) { + return ((x = Math.exp(x)) + 1 / x) / 2 + } + function d3_tanh (x) { + return ((x = Math.exp(2 * x)) - 1) / (x + 1) + } + function d3_haversin (x) { + return (x = Math.sin(x / 2)) * x + } + var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4 + d3.interpolateZoom = function (p0, p1) { + var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2] + var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ + function interpolate (t) { + var s = t * S + if (dr) { + var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0)) + return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ] + } + return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ] + } + interpolate.duration = S * 1e3 + return interpolate + } + d3.behavior.zoom = function () { + var view = { + x: 0, + y: 0, + k: 1 + }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = 'mousedown.zoom', mousemove = 'mousemove.zoom', mouseup = 'mouseup.zoom', mousewheelTimer, touchstart = 'touchstart.zoom', touchtime, event = d3_eventDispatch(zoom, 'zoomstart', 'zoom', 'zoomend'), x0, x1, y0, y1 + if (!d3_behavior_zoomWheel) { + d3_behavior_zoomWheel = 'onwheel' in d3_document ? (d3_behavior_zoomDelta = function () { + return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1) + }, 'wheel') : 'onmousewheel' in d3_document ? (d3_behavior_zoomDelta = function () { + return d3.event.wheelDelta + }, 'mousewheel') : (d3_behavior_zoomDelta = function () { + return -d3.event.detail + }, 'MozMousePixelScroll') + } + function zoom (g) { + g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + '.zoom', mousewheeled).on('dblclick.zoom', dblclicked).on(touchstart, touchstarted) + } + zoom.event = function (g) { + g.each(function () { + var dispatch = event.of(this, arguments), view1 = view + if (d3_transitionInheritId) { + d3.select(this).transition().each('start.zoom', function () { + view = this.__chart__ || { + x: 0, + y: 0, + k: 1 + } + zoomstarted(dispatch) + }).tween('zoom:zoom', function () { + var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]) + return function (t) { + var l = i(t), k = dx / l[2] + this.__chart__ = view = { + x: cx - l[0] * k, + y: cy - l[1] * k, + k: k + } + zoomed(dispatch) + } + }).each('interrupt.zoom', function () { + zoomended(dispatch) + }).each('end.zoom', function () { + zoomended(dispatch) + }) + } else { + this.__chart__ = view + zoomstarted(dispatch) + zoomed(dispatch) + zoomended(dispatch) + } + }) + } + zoom.translate = function (_) { + if (!arguments.length) return [ view.x, view.y ] + view = { + x: +_[0], + y: +_[1], + k: view.k + } + rescale() + return zoom + } + zoom.scale = function (_) { + if (!arguments.length) return view.k + view = { + x: view.x, + y: view.y, + k: +_ + } + rescale() + return zoom + } + zoom.scaleExtent = function (_) { + if (!arguments.length) return scaleExtent + scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ] + return zoom + } + zoom.center = function (_) { + if (!arguments.length) return center + center = _ && [ +_[0], +_[1] ] + return zoom + } + zoom.size = function (_) { + if (!arguments.length) return size + size = _ && [ +_[0], +_[1] ] + return zoom + } + zoom.duration = function (_) { + if (!arguments.length) return duration + duration = +_ + return zoom + } + zoom.x = function (z) { + if (!arguments.length) return x1 + x1 = z + x0 = z.copy() + view = { + x: 0, + y: 0, + k: 1 + } + return zoom + } + zoom.y = function (z) { + if (!arguments.length) return y1 + y1 = z + y0 = z.copy() + view = { + x: 0, + y: 0, + k: 1 + } + return zoom + } + function location (p) { + return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ] + } + function point (l) { + return [ l[0] * view.k + view.x, l[1] * view.k + view.y ] + } + function scaleTo (s) { + view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)) + } + function translateTo (p, l) { + l = point(l) + view.x += p[0] - l[0] + view.y += p[1] - l[1] + } + function zoomTo (that, p, l, k) { + that.__chart__ = { + x: view.x, + y: view.y, + k: view.k + } + scaleTo(Math.pow(2, k)) + translateTo(center0 = p, l) + that = d3.select(that) + if (duration > 0) that = that.transition().duration(duration) + that.call(zoom.event) + } + function rescale () { + if (x1) { + x1.domain(x0.range().map(function (x) { + return (x - view.x) / view.k + }).map(x0.invert)) + } + if (y1) { + y1.domain(y0.range().map(function (y) { + return (y - view.y) / view.k + }).map(y0.invert)) + } + } + function zoomstarted (dispatch) { + if (!zooming++) { + dispatch({ + type: 'zoomstart' + }) + } + } + function zoomed (dispatch) { + rescale() + dispatch({ + type: 'zoom', + scale: view.k, + translate: [ view.x, view.y ] + }) + } + function zoomended (dispatch) { + if (!--zooming) { + dispatch({ + type: 'zoomend' + }), center0 = null + } + } + function mousedowned () { + var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that) + d3_selection_interrupt.call(that) + zoomstarted(dispatch) + function moved () { + dragged = 1 + translateTo(d3.mouse(that), location0) + zoomed(dispatch) + } + function ended () { + subject.on(mousemove, null).on(mouseup, null) + dragRestore(dragged && d3.event.target === target) + zoomended(dispatch) + } + } + function touchstarted () { + var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = '.zoom-' + d3.event.changedTouches[0].identifier, touchmove = 'touchmove' + zoomName, touchend = 'touchend' + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that) + started() + zoomstarted(dispatch) + subject.on(mousedown, null).on(touchstart, started) + function relocate () { + var touches = d3.touches(that) + scale0 = view.k + touches.forEach(function (t) { + if (t.identifier in locations0) locations0[t.identifier] = location(t) + }) + return touches + } + function started () { + var target = d3.event.target + d3.select(target).on(touchmove, moved).on(touchend, ended) + targets.push(target) + var changed = d3.event.changedTouches + for (var i = 0, n = changed.length; i < n; ++i) { + locations0[changed[i].identifier] = null + } + var touches = relocate(), now = Date.now() + if (touches.length === 1) { + if (now - touchtime < 500) { + var p = touches[0] + zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1) + d3_eventPreventDefault() + } + touchtime = now + } else if (touches.length > 1) { + var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1] + distance0 = dx * dx + dy * dy + } + } + function moved () { + var touches = d3.touches(that), p0, l0, p1, l1 + d3_selection_interrupt.call(that) + for (var i = 0, n = touches.length; i < n; ++i, l1 = null) { + p1 = touches[i] + if (l1 = locations0[p1.identifier]) { + if (l0) break + p0 = p1, l0 = l1 + } + } + if (l1) { + var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0) + p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ] + l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ] + scaleTo(scale1 * scale0) + } + touchtime = null + translateTo(p0, l0) + zoomed(dispatch) + } + function ended () { + if (d3.event.touches.length) { + var changed = d3.event.changedTouches + for (var i = 0, n = changed.length; i < n; ++i) { + delete locations0[changed[i].identifier] + } + for (var identifier in locations0) { + return void relocate() + } + } + d3.selectAll(targets).on(zoomName, null) + subject.on(mousedown, mousedowned).on(touchstart, touchstarted) + dragRestore() + zoomended(dispatch) + } + } + function mousewheeled () { + var dispatch = event.of(this, arguments) + if (mousewheelTimer) clearTimeout(mousewheelTimer); else { + d3_selection_interrupt.call(this), + translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch) + } + mousewheelTimer = setTimeout(function () { + mousewheelTimer = null + zoomended(dispatch) + }, 50) + d3_eventPreventDefault() + scaleTo(Math.pow(2, d3_behavior_zoomDelta() * 0.002) * view.k) + translateTo(center0, translate0) + zoomed(dispatch) + } + function dblclicked () { + var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2 + zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1) + } + return d3.rebind(zoom, event, 'on') + } + var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel + d3.color = d3_color + function d3_color () {} + d3_color.prototype.toString = function () { + return this.rgb() + '' + } + d3.hsl = d3_hsl + function d3_hsl (h, s, l) { + return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse('' + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l) + } + var d3_hslPrototype = d3_hsl.prototype = new d3_color() + d3_hslPrototype.brighter = function (k) { + k = Math.pow(0.7, arguments.length ? k : 1) + return new d3_hsl(this.h, this.s, this.l / k) + } + d3_hslPrototype.darker = function (k) { + k = Math.pow(0.7, arguments.length ? k : 1) + return new d3_hsl(this.h, this.s, k * this.l) + } + d3_hslPrototype.rgb = function () { + return d3_hsl_rgb(this.h, this.s, this.l) + } + function d3_hsl_rgb (h, s, l) { + var m1, m2 + h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h + s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s + l = l < 0 ? 0 : l > 1 ? 1 : l + m2 = l <= 0.5 ? l * (1 + s) : l + s - l * s + m1 = 2 * l - m2 + function v (h) { + if (h > 360) h -= 360; else if (h < 0) h += 360 + if (h < 60) return m1 + (m2 - m1) * h / 60 + if (h < 180) return m2 + if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60 + return m1 + } + function vv (h) { + return Math.round(v(h) * 255) + } + return new d3_rgb(vv(h + 120), vv(h), vv(h - 120)) + } + d3.hcl = d3_hcl + function d3_hcl (h, c, l) { + return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l) + } + var d3_hclPrototype = d3_hcl.prototype = new d3_color() + d3_hclPrototype.brighter = function (k) { + return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))) + } + d3_hclPrototype.darker = function (k) { + return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))) + } + d3_hclPrototype.rgb = function () { + return d3_hcl_lab(this.h, this.c, this.l).rgb() + } + function d3_hcl_lab (h, c, l) { + if (isNaN(h)) h = 0 + if (isNaN(c)) c = 0 + return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c) + } + d3.lab = d3_lab + function d3_lab (l, a, b) { + return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b) + } + var d3_lab_K = 18 + var d3_lab_X = 0.95047, d3_lab_Y = 1, d3_lab_Z = 1.08883 + var d3_labPrototype = d3_lab.prototype = new d3_color() + d3_labPrototype.brighter = function (k) { + return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b) + } + d3_labPrototype.darker = function (k) { + return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b) + } + d3_labPrototype.rgb = function () { + return d3_lab_rgb(this.l, this.a, this.b) + } + function d3_lab_rgb (l, a, b) { + var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200 + x = d3_lab_xyz(x) * d3_lab_X + y = d3_lab_xyz(y) * d3_lab_Y + z = d3_lab_xyz(z) * d3_lab_Z + return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z), d3_xyz_rgb(-0.969266 * x + 1.8760108 * y + 0.041556 * z), d3_xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z)) + } + function d3_lab_hcl (l, a, b) { + return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l) + } + function d3_lab_xyz (x) { + return x > 0.206893034 ? x * x * x : (x - 4 / 29) / 7.787037 + } + function d3_xyz_lab (x) { + return x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29 + } + function d3_xyz_rgb (r) { + return Math.round(255 * (r <= 0.00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - 0.055)) + } + d3.rgb = d3_rgb + function d3_rgb (r, g, b) { + return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse('' + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b) + } + function d3_rgbNumber (value) { + return new d3_rgb(value >> 16, value >> 8 & 255, value & 255) + } + function d3_rgbString (value) { + return d3_rgbNumber(value) + '' + } + var d3_rgbPrototype = d3_rgb.prototype = new d3_color() + d3_rgbPrototype.brighter = function (k) { + k = Math.pow(0.7, arguments.length ? k : 1) + var r = this.r, g = this.g, b = this.b, i = 30 + if (!r && !g && !b) return new d3_rgb(i, i, i) + if (r && r < i) r = i + if (g && g < i) g = i + if (b && b < i) b = i + return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k)) + } + d3_rgbPrototype.darker = function (k) { + k = Math.pow(0.7, arguments.length ? k : 1) + return new d3_rgb(k * this.r, k * this.g, k * this.b) + } + d3_rgbPrototype.hsl = function () { + return d3_rgb_hsl(this.r, this.g, this.b) + } + d3_rgbPrototype.toString = function () { + return '#' + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b) + } + function d3_rgb_hex (v) { + return v < 16 ? '0' + Math.max(0, v).toString(16) : Math.min(255, v).toString(16) + } + function d3_rgb_parse (format, rgb, hsl) { + format = format.toLowerCase() + var r = 0, g = 0, b = 0, m1, m2, color + m1 = /([a-z]+)\((.*)\)/.exec(format) + if (m1) { + m2 = m1[2].split(',') + switch (m1[1]) { + case 'hsl': + { + return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100) + } + + case 'rgb': + { + return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])) + } + } + } + if (color = d3_rgb_names.get(format)) { + return rgb(color.r, color.g, color.b) + } + if (format != null && format.charAt(0) === '#' && !isNaN(color = parseInt(format.slice(1), 16))) { + if (format.length === 4) { + r = (color & 3840) >> 4 + r = r >> 4 | r + g = color & 240 + g = g >> 4 | g + b = color & 15 + b = b << 4 | b + } else if (format.length === 7) { + r = (color & 16711680) >> 16 + g = (color & 65280) >> 8 + b = color & 255 + } + } + return rgb(r, g, b) + } + function d3_rgb_hsl (r, g, b) { + var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2 + if (d) { + s = l < 0.5 ? d / (max + min) : d / (2 - max - min) + if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4 + h *= 60 + } else { + h = NaN + s = l > 0 && l < 1 ? 0 : h + } + return new d3_hsl(h, s, l) + } + function d3_rgb_lab (r, g, b) { + r = d3_rgb_xyz(r) + g = d3_rgb_xyz(g) + b = d3_rgb_xyz(b) + var x = d3_xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / d3_lab_X), y = d3_xyz_lab((0.2126729 * r + 0.7151522 * g + 0.072175 * b) / d3_lab_Y), z = d3_xyz_lab((0.0193339 * r + 0.119192 * g + 0.9503041 * b) / d3_lab_Z) + return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z)) + } + function d3_rgb_xyz (r) { + return (r /= 255) <= 0.04045 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4) + } + function d3_rgb_parseNumber (c) { + var f = parseFloat(c) + return c.charAt(c.length - 1) === '%' ? Math.round(f * 2.55) : f + } + var d3_rgb_names = d3.map({ + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + }) + d3_rgb_names.forEach(function (key, value) { + d3_rgb_names.set(key, d3_rgbNumber(value)) + }) + function d3_functor (v) { + return typeof v === 'function' ? v : function () { + return v + } + } + d3.functor = d3_functor + d3.xhr = d3_xhrType(d3_identity) + function d3_xhrType (response) { + return function (url, mimeType, callback) { + if (arguments.length === 2 && typeof mimeType === 'function') { + callback = mimeType, + mimeType = null + } + return d3_xhr(url, mimeType, response, callback) + } + } + function d3_xhr (url, mimeType, response, callback) { + var xhr = {}, dispatch = d3.dispatch('beforesend', 'progress', 'load', 'error'), headers = {}, request = new XMLHttpRequest(), responseType = null + if (this.XDomainRequest && !('withCredentials' in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest() + 'onload' in request ? request.onload = request.onerror = respond : request.onreadystatechange = function () { + request.readyState > 3 && respond() + } + function respond () { + var status = request.status, result + if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) { + try { + result = response.call(xhr, request) + } catch (e) { + dispatch.error.call(xhr, e) + return + } + dispatch.load.call(xhr, result) + } else { + dispatch.error.call(xhr, request) + } + } + request.onprogress = function (event) { + var o = d3.event + d3.event = event + try { + dispatch.progress.call(xhr, request) + } finally { + d3.event = o + } + } + xhr.header = function (name, value) { + name = (name + '').toLowerCase() + if (arguments.length < 2) return headers[name] + if (value == null) delete headers[name]; else headers[name] = value + '' + return xhr + } + xhr.mimeType = function (value) { + if (!arguments.length) return mimeType + mimeType = value == null ? null : value + '' + return xhr + } + xhr.responseType = function (value) { + if (!arguments.length) return responseType + responseType = value + return xhr + } + xhr.response = function (value) { + response = value + return xhr + }; + [ 'get', 'post' ].forEach(function (method) { + xhr[method] = function () { + return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments))) + } + }) + xhr.send = function (method, data, callback) { + if (arguments.length === 2 && typeof data === 'function') callback = data, data = null + request.open(method, url, true) + if (mimeType != null && !('accept' in headers)) headers['accept'] = mimeType + ',*/*' + if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]) + if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType) + if (responseType != null) request.responseType = responseType + if (callback != null) { + xhr.on('error', callback).on('load', function (request) { + callback(null, request) + }) + } + dispatch.beforesend.call(xhr, request) + request.send(data == null ? null : data) + return xhr + } + xhr.abort = function () { + request.abort() + return xhr + } + d3.rebind(xhr, dispatch, 'on') + return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback)) + } + function d3_xhr_fixCallback (callback) { + return callback.length === 1 ? function (error, request) { + callback(error == null ? request : null) + } : callback + } + function d3_xhrHasResponse (request) { + var type = request.responseType + return type && type !== 'text' ? request.response : request.responseText + } + d3.dsv = function (delimiter, mimeType) { + var reFormat = new RegExp('["' + delimiter + '\n]'), delimiterCode = delimiter.charCodeAt(0) + function dsv (url, row, callback) { + if (arguments.length < 3) callback = row, row = null + var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback) + xhr.row = function (_) { + return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row + } + return xhr + } + function response (request) { + return dsv.parse(request.responseText) + } + function typedResponse (f) { + return function (request) { + return dsv.parse(request.responseText, f) + } + } + dsv.parse = function (text, f) { + var o + return dsv.parseRows(text, function (row, i) { + if (o) return o(row, i - 1) + var a = new Function('d', 'return {' + row.map(function (name, i) { + return JSON.stringify(name) + ': d[' + i + ']' + }).join(',') + '}') + o = f ? function (row, i) { + return f(a(row), i) + } : a + }) + } + dsv.parseRows = function (text, f) { + var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol + function token () { + if (I >= N) return EOF + if (eol) return eol = false, EOL + var j = I + if (text.charCodeAt(j) === 34) { + var i = j + while (i++ < N) { + if (text.charCodeAt(i) === 34) { + if (text.charCodeAt(i + 1) !== 34) break + ++i + } + } + I = i + 2 + var c = text.charCodeAt(i + 1) + if (c === 13) { + eol = true + if (text.charCodeAt(i + 2) === 10) ++I + } else if (c === 10) { + eol = true + } + return text.slice(j + 1, i).replace(/""/g, '"') + } + while (I < N) { + var c = text.charCodeAt(I++), k = 1 + if (c === 10) eol = true; else if (c === 13) { + eol = true + if (text.charCodeAt(I) === 10) ++I, ++k + } else if (c !== delimiterCode) continue + return text.slice(j, I - k) + } + return text.slice(j) + } + while ((t = token()) !== EOF) { + var a = [] + while (t !== EOL && t !== EOF) { + a.push(t) + t = token() + } + if (f && (a = f(a, n++)) == null) continue + rows.push(a) + } + return rows + } + dsv.format = function (rows) { + if (Array.isArray(rows[0])) return dsv.formatRows(rows) + var fieldSet = new d3_Set(), fields = [] + rows.forEach(function (row) { + for (var field in row) { + if (!fieldSet.has(field)) { + fields.push(fieldSet.add(field)) + } + } + }) + return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function (row) { + return fields.map(function (field) { + return formatValue(row[field]) + }).join(delimiter) + })).join('\n') + } + dsv.formatRows = function (rows) { + return rows.map(formatRow).join('\n') + } + function formatRow (row) { + return row.map(formatValue).join(delimiter) + } + function formatValue (text) { + return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text + } + return dsv + } + d3.csv = d3.dsv(',', 'text/csv') + d3.tsv = d3.dsv(' ', 'text/tab-separated-values') + var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = this[d3_vendorSymbol(this, 'requestAnimationFrame')] || function (callback) { + setTimeout(callback, 17) + } + d3.timer = function (callback, delay, then) { + var n = arguments.length + if (n < 2) delay = 0 + if (n < 3) then = Date.now() + var time = then + delay, timer = { + c: callback, + t: time, + f: false, + n: null + } + if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer + d3_timer_queueTail = timer + if (!d3_timer_interval) { + d3_timer_timeout = clearTimeout(d3_timer_timeout) + d3_timer_interval = 1 + d3_timer_frame(d3_timer_step) + } + } + function d3_timer_step () { + var now = d3_timer_mark(), delay = d3_timer_sweep() - now + if (delay > 24) { + if (isFinite(delay)) { + clearTimeout(d3_timer_timeout) + d3_timer_timeout = setTimeout(d3_timer_step, delay) + } + d3_timer_interval = 0 + } else { + d3_timer_interval = 1 + d3_timer_frame(d3_timer_step) + } + } + d3.timer.flush = function () { + d3_timer_mark() + d3_timer_sweep() + } + function d3_timer_mark () { + var now = Date.now() + d3_timer_active = d3_timer_queueHead + while (d3_timer_active) { + if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t) + d3_timer_active = d3_timer_active.n + } + return now + } + function d3_timer_sweep () { + var t0, t1 = d3_timer_queueHead, time = Infinity + while (t1) { + if (t1.f) { + t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n + } else { + if (t1.t < time) time = t1.t + t1 = (t0 = t1).n + } + } + d3_timer_queueTail = t0 + return time + } + function d3_format_precision (x, p) { + return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1) + } + d3.round = function (x, n) { + return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x) + } + var d3_formatPrefixes = [ 'y', 'z', 'a', 'f', 'p', 'n', 'µ', 'm', '', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y' ].map(d3_formatPrefix) + d3.formatPrefix = function (value, precision) { + var i = 0 + if (value) { + if (value < 0) value *= -1 + if (precision) value = d3.round(value, d3_format_precision(value, precision)) + i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10) + i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3)) + } + return d3_formatPrefixes[8 + i / 3] + } + function d3_formatPrefix (d, i) { + var k = Math.pow(10, abs(8 - i) * 3) + return { + scale: i > 8 ? function (d) { + return d / k + } : function (d) { + return d * k + }, + symbol: d + } + } + function d3_locale_numberFormat (locale) { + var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function (value, width) { + var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0 + while (i > 0 && g > 0) { + if (length + g + 1 > width) g = Math.max(1, width - length) + t.push(value.substring(i -= g, i + g)) + if ((length += g + 1) > width) break + g = locale_grouping[j = (j + 1) % locale_grouping.length] + } + return t.reverse().join(locale_thousands) + } : d3_identity + return function (specifier) { + var match = d3_format_re.exec(specifier), fill = match[1] || ' ', align = match[2] || '>', sign = match[3] || '-', symbol = match[4] || '', zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = '', suffix = '', integer = false, exponent = true + if (precision) precision = +precision.substring(1) + if (zfill || fill === '0' && align === '=') { + zfill = fill = '0' + align = '=' + } + switch (type) { + case 'n': + comma = true + type = 'g' + break + + case '%': + scale = 100 + suffix = '%' + type = 'f' + break + + case 'p': + scale = 100 + suffix = '%' + type = 'r' + break + + case 'b': + case 'o': + case 'x': + case 'X': + if (symbol === '#') prefix = '0' + type.toLowerCase() + + case 'c': + exponent = false + + case 'd': + integer = true + precision = 0 + break + + case 's': + scale = -1 + type = 'r' + break + } + if (symbol === '$') prefix = locale_currency[0], suffix = locale_currency[1] + if (type == 'r' && !precision) type = 'g' + if (precision != null) { + if (type == 'g') precision = Math.max(1, Math.min(21, precision)); else if (type == 'e' || type == 'f') precision = Math.max(0, Math.min(20, precision)) + } + type = d3_format_types.get(type) || d3_format_typeDefault + var zcomma = zfill && comma + return function (value) { + var fullSuffix = suffix + if (integer && value % 1) return '' + var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, '-') : sign === '-' ? '' : sign + if (scale < 0) { + var unit = d3.formatPrefix(value, precision) + value = unit.scale(value) + fullSuffix = unit.symbol + suffix + } else { + value *= scale + } + value = type(value, precision) + var i = value.lastIndexOf('.'), before, after + if (i < 0) { + var j = exponent ? value.lastIndexOf('e') : -1 + if (j < 0) before = value, after = ''; else before = value.substring(0, j), after = value.substring(j) + } else { + before = value.substring(0, i) + after = locale_decimal + value.substring(i + 1) + } + if (!zfill && comma) before = formatGroup(before, Infinity) + var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : '' + if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity) + negative += prefix + value = before + after + return (align === '<' ? negative + value + padding : align === '>' ? padding + negative + value : align === '^' ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix + } + } + } + var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i + var d3_format_types = d3.map({ + b: function (x) { + return x.toString(2) + }, + c: function (x) { + return String.fromCharCode(x) + }, + o: function (x) { + return x.toString(8) + }, + x: function (x) { + return x.toString(16) + }, + X: function (x) { + return x.toString(16).toUpperCase() + }, + g: function (x, p) { + return x.toPrecision(p) + }, + e: function (x, p) { + return x.toExponential(p) + }, + f: function (x, p) { + return x.toFixed(p) + }, + r: function (x, p) { + return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p)))) + } + }) + function d3_format_typeDefault (x) { + return x + '' + } + var d3_time = d3.time = {}, d3_date = Date + function d3_date_utc () { + this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]) + } + d3_date_utc.prototype = { + getDate: function () { + return this._.getUTCDate() + }, + getDay: function () { + return this._.getUTCDay() + }, + getFullYear: function () { + return this._.getUTCFullYear() + }, + getHours: function () { + return this._.getUTCHours() + }, + getMilliseconds: function () { + return this._.getUTCMilliseconds() + }, + getMinutes: function () { + return this._.getUTCMinutes() + }, + getMonth: function () { + return this._.getUTCMonth() + }, + getSeconds: function () { + return this._.getUTCSeconds() + }, + getTime: function () { + return this._.getTime() + }, + getTimezoneOffset: function () { + return 0 + }, + valueOf: function () { + return this._.valueOf() + }, + setDate: function () { + d3_time_prototype.setUTCDate.apply(this._, arguments) + }, + setDay: function () { + d3_time_prototype.setUTCDay.apply(this._, arguments) + }, + setFullYear: function () { + d3_time_prototype.setUTCFullYear.apply(this._, arguments) + }, + setHours: function () { + d3_time_prototype.setUTCHours.apply(this._, arguments) + }, + setMilliseconds: function () { + d3_time_prototype.setUTCMilliseconds.apply(this._, arguments) + }, + setMinutes: function () { + d3_time_prototype.setUTCMinutes.apply(this._, arguments) + }, + setMonth: function () { + d3_time_prototype.setUTCMonth.apply(this._, arguments) + }, + setSeconds: function () { + d3_time_prototype.setUTCSeconds.apply(this._, arguments) + }, + setTime: function () { + d3_time_prototype.setTime.apply(this._, arguments) + } + } + var d3_time_prototype = Date.prototype + function d3_time_interval (local, step, number) { + function round (date) { + var d0 = local(date), d1 = offset(d0, 1) + return date - d0 < d1 - date ? d0 : d1 + } + function ceil (date) { + step(date = local(new d3_date(date - 1)), 1) + return date + } + function offset (date, k) { + step(date = new d3_date(+date), k) + return date + } + function range (t0, t1, dt) { + var time = ceil(t0), times = [] + if (dt > 1) { + while (time < t1) { + if (!(number(time) % dt)) times.push(new Date(+time)) + step(time, 1) + } + } else { + while (time < t1) times.push(new Date(+time)), step(time, 1) + } + return times + } + function range_utc (t0, t1, dt) { + try { + d3_date = d3_date_utc + var utc = new d3_date_utc() + utc._ = t0 + return range(utc, t1, dt) + } finally { + d3_date = Date + } + } + local.floor = local + local.round = round + local.ceil = ceil + local.offset = offset + local.range = range + var utc = local.utc = d3_time_interval_utc(local) + utc.floor = utc + utc.round = d3_time_interval_utc(round) + utc.ceil = d3_time_interval_utc(ceil) + utc.offset = d3_time_interval_utc(offset) + utc.range = range_utc + return local + } + function d3_time_interval_utc (method) { + return function (date, k) { + try { + d3_date = d3_date_utc + var utc = new d3_date_utc() + utc._ = date + return method(utc, k)._ + } finally { + d3_date = Date + } + } + } + d3_time.year = d3_time_interval(function (date) { + date = d3_time.day(date) + date.setMonth(0, 1) + return date + }, function (date, offset) { + date.setFullYear(date.getFullYear() + offset) + }, function (date) { + return date.getFullYear() + }) + d3_time.years = d3_time.year.range + d3_time.years.utc = d3_time.year.utc.range + d3_time.day = d3_time_interval(function (date) { + var day = new d3_date(2e3, 0) + day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()) + return day + }, function (date, offset) { + date.setDate(date.getDate() + offset) + }, function (date) { + return date.getDate() - 1 + }) + d3_time.days = d3_time.day.range + d3_time.days.utc = d3_time.day.utc.range + d3_time.dayOfYear = function (date) { + var year = d3_time.year(date) + return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5) + }; + [ 'sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday' ].forEach(function (day, i) { + i = 7 - i + var interval = d3_time[day] = d3_time_interval(function (date) { + (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7) + return date + }, function (date, offset) { + date.setDate(date.getDate() + Math.floor(offset) * 7) + }, function (date) { + var day = d3_time.year(date).getDay() + return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i) + }) + d3_time[day + 's'] = interval.range + d3_time[day + 's'].utc = interval.utc.range + d3_time[day + 'OfYear'] = function (date) { + var day = d3_time.year(date).getDay() + return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) + } + }) + d3_time.week = d3_time.sunday + d3_time.weeks = d3_time.sunday.range + d3_time.weeks.utc = d3_time.sunday.utc.range + d3_time.weekOfYear = d3_time.sundayOfYear + function d3_locale_timeFormat (locale) { + var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths + function d3_time_format (template) { + var n = template.length + function format (date) { + var string = [], i = -1, j = 0, c, p, f + while (++i < n) { + if (template.charCodeAt(i) === 37) { + string.push(template.slice(j, i)) + if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i) + if (f = d3_time_formats[c]) c = f(date, p == null ? c === 'e' ? ' ' : '0' : p) + string.push(c) + j = i + 1 + } + } + string.push(template.slice(j, i)) + return string.join('') + } + format.parse = function (string) { + var d = { + y: 1900, + m: 0, + d: 1, + H: 0, + M: 0, + S: 0, + L: 0, + Z: null + }, i = d3_time_parse(d, template, string, 0) + if (i != string.length) return null + if ('p' in d) d.H = d.H % 12 + d.p * 12 + var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)() + if ('j' in d) date.setFullYear(d.y, 0, d.j); else if ('w' in d && ('W' in d || 'U' in d)) { + date.setFullYear(d.y, 0, 1) + date.setFullYear(d.y, 0, 'W' in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7) + } else date.setFullYear(d.y, d.m, d.d) + date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L) + return localZ ? date._ : date + } + format.toString = function () { + return template + } + return format + } + function d3_time_parse (date, template, string, j) { + var c, p, t, i = 0, n = template.length, m = string.length + while (i < n) { + if (j >= m) return -1 + c = template.charCodeAt(i++) + if (c === 37) { + t = template.charAt(i++) + p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t] + if (!p || (j = p(date, string, j)) < 0) return -1 + } else if (c != string.charCodeAt(j++)) { + return -1 + } + } + return j + } + d3_time_format.utc = function (template) { + var local = d3_time_format(template) + function format (date) { + try { + d3_date = d3_date_utc + var utc = new d3_date() + utc._ = date + return local(utc) + } finally { + d3_date = Date + } + } + format.parse = function (string) { + try { + d3_date = d3_date_utc + var date = local.parse(string) + return date && date._ + } finally { + d3_date = Date + } + } + format.toString = local.toString + return format + } + d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti + var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths) + locale_periods.forEach(function (p, i) { + d3_time_periodLookup.set(p.toLowerCase(), i) + }) + var d3_time_formats = { + a: function (d) { + return locale_shortDays[d.getDay()] + }, + A: function (d) { + return locale_days[d.getDay()] + }, + b: function (d) { + return locale_shortMonths[d.getMonth()] + }, + B: function (d) { + return locale_months[d.getMonth()] + }, + c: d3_time_format(locale_dateTime), + d: function (d, p) { + return d3_time_formatPad(d.getDate(), p, 2) + }, + e: function (d, p) { + return d3_time_formatPad(d.getDate(), p, 2) + }, + H: function (d, p) { + return d3_time_formatPad(d.getHours(), p, 2) + }, + I: function (d, p) { + return d3_time_formatPad(d.getHours() % 12 || 12, p, 2) + }, + j: function (d, p) { + return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3) + }, + L: function (d, p) { + return d3_time_formatPad(d.getMilliseconds(), p, 3) + }, + m: function (d, p) { + return d3_time_formatPad(d.getMonth() + 1, p, 2) + }, + M: function (d, p) { + return d3_time_formatPad(d.getMinutes(), p, 2) + }, + p: function (d) { + return locale_periods[+(d.getHours() >= 12)] + }, + S: function (d, p) { + return d3_time_formatPad(d.getSeconds(), p, 2) + }, + U: function (d, p) { + return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2) + }, + w: function (d) { + return d.getDay() + }, + W: function (d, p) { + return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2) + }, + x: d3_time_format(locale_date), + X: d3_time_format(locale_time), + y: function (d, p) { + return d3_time_formatPad(d.getFullYear() % 100, p, 2) + }, + Y: function (d, p) { + return d3_time_formatPad(d.getFullYear() % 1e4, p, 4) + }, + Z: d3_time_zone, + '%': function () { + return '%' + } + } + var d3_time_parsers = { + a: d3_time_parseWeekdayAbbrev, + A: d3_time_parseWeekday, + b: d3_time_parseMonthAbbrev, + B: d3_time_parseMonth, + c: d3_time_parseLocaleFull, + d: d3_time_parseDay, + e: d3_time_parseDay, + H: d3_time_parseHour24, + I: d3_time_parseHour24, + j: d3_time_parseDayOfYear, + L: d3_time_parseMilliseconds, + m: d3_time_parseMonthNumber, + M: d3_time_parseMinutes, + p: d3_time_parseAmPm, + S: d3_time_parseSeconds, + U: d3_time_parseWeekNumberSunday, + w: d3_time_parseWeekdayNumber, + W: d3_time_parseWeekNumberMonday, + x: d3_time_parseLocaleDate, + X: d3_time_parseLocaleTime, + y: d3_time_parseYear, + Y: d3_time_parseFullYear, + Z: d3_time_parseZone, + '%': d3_time_parseLiteralPercent + } + function d3_time_parseWeekdayAbbrev (date, string, i) { + d3_time_dayAbbrevRe.lastIndex = 0 + var n = d3_time_dayAbbrevRe.exec(string.slice(i)) + return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1 + } + function d3_time_parseWeekday (date, string, i) { + d3_time_dayRe.lastIndex = 0 + var n = d3_time_dayRe.exec(string.slice(i)) + return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1 + } + function d3_time_parseMonthAbbrev (date, string, i) { + d3_time_monthAbbrevRe.lastIndex = 0 + var n = d3_time_monthAbbrevRe.exec(string.slice(i)) + return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1 + } + function d3_time_parseMonth (date, string, i) { + d3_time_monthRe.lastIndex = 0 + var n = d3_time_monthRe.exec(string.slice(i)) + return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1 + } + function d3_time_parseLocaleFull (date, string, i) { + return d3_time_parse(date, d3_time_formats.c.toString(), string, i) + } + function d3_time_parseLocaleDate (date, string, i) { + return d3_time_parse(date, d3_time_formats.x.toString(), string, i) + } + function d3_time_parseLocaleTime (date, string, i) { + return d3_time_parse(date, d3_time_formats.X.toString(), string, i) + } + function d3_time_parseAmPm (date, string, i) { + var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase()) + return n == null ? -1 : (date.p = n, i) + } + return d3_time_format + } + var d3_time_formatPads = { + '-': '', + _: ' ', + '0': '0' + }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/ + function d3_time_formatPad (value, fill, width) { + var sign = value < 0 ? '-' : '', string = (sign ? -value : value) + '', length = string.length + return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string) + } + function d3_time_formatRe (names) { + return new RegExp('^(?:' + names.map(d3.requote).join('|') + ')', 'i') + } + function d3_time_formatLookup (names) { + var map = new d3_Map(), i = -1, n = names.length + while (++i < n) map.set(names[i].toLowerCase(), i) + return map + } + function d3_time_parseWeekdayNumber (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i, i + 1)) + return n ? (date.w = +n[0], i + n[0].length) : -1 + } + function d3_time_parseWeekNumberSunday (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i)) + return n ? (date.U = +n[0], i + n[0].length) : -1 + } + function d3_time_parseWeekNumberMonday (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i)) + return n ? (date.W = +n[0], i + n[0].length) : -1 + } + function d3_time_parseFullYear (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i, i + 4)) + return n ? (date.y = +n[0], i + n[0].length) : -1 + } + function d3_time_parseYear (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i, i + 2)) + return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1 + } + function d3_time_parseZone (date, string, i) { + return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, + i + 5) : -1 + } + function d3_time_expandYear (d) { + return d + (d > 68 ? 1900 : 2e3) + } + function d3_time_parseMonthNumber (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i, i + 2)) + return n ? (date.m = n[0] - 1, i + n[0].length) : -1 + } + function d3_time_parseDay (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i, i + 2)) + return n ? (date.d = +n[0], i + n[0].length) : -1 + } + function d3_time_parseDayOfYear (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i, i + 3)) + return n ? (date.j = +n[0], i + n[0].length) : -1 + } + function d3_time_parseHour24 (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i, i + 2)) + return n ? (date.H = +n[0], i + n[0].length) : -1 + } + function d3_time_parseMinutes (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i, i + 2)) + return n ? (date.M = +n[0], i + n[0].length) : -1 + } + function d3_time_parseSeconds (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i, i + 2)) + return n ? (date.S = +n[0], i + n[0].length) : -1 + } + function d3_time_parseMilliseconds (date, string, i) { + d3_time_numberRe.lastIndex = 0 + var n = d3_time_numberRe.exec(string.slice(i, i + 3)) + return n ? (date.L = +n[0], i + n[0].length) : -1 + } + function d3_time_zone (d) { + var z = d.getTimezoneOffset(), zs = z > 0 ? '-' : '+', zh = abs(z) / 60 | 0, zm = abs(z) % 60 + return zs + d3_time_formatPad(zh, '0', 2) + d3_time_formatPad(zm, '0', 2) + } + function d3_time_parseLiteralPercent (date, string, i) { + d3_time_percentRe.lastIndex = 0 + var n = d3_time_percentRe.exec(string.slice(i, i + 1)) + return n ? i + n[0].length : -1 + } + function d3_time_formatMulti (formats) { + var n = formats.length, i = -1 + while (++i < n) formats[i][0] = this(formats[i][0]) + return function (date) { + var i = 0, f = formats[i] + while (!f[1](date)) f = formats[++i] + return f[0](date) + } + } + d3.locale = function (locale) { + return { + numberFormat: d3_locale_numberFormat(locale), + timeFormat: d3_locale_timeFormat(locale) + } + } + var d3_locale_enUS = d3.locale({ + decimal: '.', + thousands: ',', + grouping: [ 3 ], + currency: [ '$', '' ], + dateTime: '%a %b %e %X %Y', + date: '%m/%d/%Y', + time: '%H:%M:%S', + periods: [ 'AM', 'PM' ], + days: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ], + shortDays: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ], + months: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ], + shortMonths: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ] + }) + d3.format = d3_locale_enUS.numberFormat + d3.geo = {} + function d3_adder () {} + d3_adder.prototype = { + s: 0, + t: 0, + add: function (y) { + d3_adderSum(y, this.t, d3_adderTemp) + d3_adderSum(d3_adderTemp.s, this.s, this) + if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t + }, + reset: function () { + this.s = this.t = 0 + }, + valueOf: function () { + return this.s + } + } + var d3_adderTemp = new d3_adder() + function d3_adderSum (a, b, o) { + var x = o.s = a + b, bv = x - a, av = x - bv + o.t = a - av + (b - bv) + } + d3.geo.stream = function (object, listener) { + if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) { + d3_geo_streamObjectType[object.type](object, listener) + } else { + d3_geo_streamGeometry(object, listener) + } + } + function d3_geo_streamGeometry (geometry, listener) { + if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) { + d3_geo_streamGeometryType[geometry.type](geometry, listener) + } + } + var d3_geo_streamObjectType = { + Feature: function (feature, listener) { + d3_geo_streamGeometry(feature.geometry, listener) + }, + FeatureCollection: function (object, listener) { + var features = object.features, i = -1, n = features.length + while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener) + } + } + var d3_geo_streamGeometryType = { + Sphere: function (object, listener) { + listener.sphere() + }, + Point: function (object, listener) { + object = object.coordinates + listener.point(object[0], object[1], object[2]) + }, + MultiPoint: function (object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length + while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]) + }, + LineString: function (object, listener) { + d3_geo_streamLine(object.coordinates, listener, 0) + }, + MultiLineString: function (object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length + while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0) + }, + Polygon: function (object, listener) { + d3_geo_streamPolygon(object.coordinates, listener) + }, + MultiPolygon: function (object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length + while (++i < n) d3_geo_streamPolygon(coordinates[i], listener) + }, + GeometryCollection: function (object, listener) { + var geometries = object.geometries, i = -1, n = geometries.length + while (++i < n) d3_geo_streamGeometry(geometries[i], listener) + } + } + function d3_geo_streamLine (coordinates, listener, closed) { + var i = -1, n = coordinates.length - closed, coordinate + listener.lineStart() + while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]) + listener.lineEnd() + } + function d3_geo_streamPolygon (coordinates, listener) { + var i = -1, n = coordinates.length + listener.polygonStart() + while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1) + listener.polygonEnd() + } + d3.geo.area = function (object) { + d3_geo_areaSum = 0 + d3.geo.stream(object, d3_geo_area) + return d3_geo_areaSum + } + var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder() + var d3_geo_area = { + sphere: function () { + d3_geo_areaSum += 4 * π + }, + point: d3_noop, + lineStart: d3_noop, + lineEnd: d3_noop, + polygonStart: function () { + d3_geo_areaRingSum.reset() + d3_geo_area.lineStart = d3_geo_areaRingStart + }, + polygonEnd: function () { + var area = 2 * d3_geo_areaRingSum + d3_geo_areaSum += area < 0 ? 4 * π + area : area + d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop + } + } + function d3_geo_areaRingStart () { + var λ00, φ00, λ0, cosφ0, sinφ0 + d3_geo_area.point = function (λ, φ) { + d3_geo_area.point = nextPoint + λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), + sinφ0 = Math.sin(φ) + } + function nextPoint (λ, φ) { + λ *= d3_radians + φ = φ * d3_radians / 2 + π / 4 + var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ) + d3_geo_areaRingSum.add(Math.atan2(v, u)) + λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ + } + d3_geo_area.lineEnd = function () { + nextPoint(λ00, φ00) + } + } + function d3_geo_cartesian (spherical) { + var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ) + return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ] + } + function d3_geo_cartesianDot (a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + } + function d3_geo_cartesianCross (a, b) { + return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ] + } + function d3_geo_cartesianAdd (a, b) { + a[0] += b[0] + a[1] += b[1] + a[2] += b[2] + } + function d3_geo_cartesianScale (vector, k) { + return [ vector[0] * k, vector[1] * k, vector[2] * k ] + } + function d3_geo_cartesianNormalize (d) { + var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]) + d[0] /= l + d[1] /= l + d[2] /= l + } + function d3_geo_spherical (cartesian) { + return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ] + } + function d3_geo_sphericalEqual (a, b) { + return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε + } + d3.geo.bounds = (function () { + var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range + var bound = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function () { + bound.point = ringPoint + bound.lineStart = ringStart + bound.lineEnd = ringEnd + dλSum = 0 + d3_geo_area.polygonStart() + }, + polygonEnd: function () { + d3_geo_area.polygonEnd() + bound.point = point + bound.lineStart = lineStart + bound.lineEnd = lineEnd + if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90 + range[0] = λ0, range[1] = λ1 + } + } + function point (λ, φ) { + ranges.push(range = [ λ0 = λ, λ1 = λ ]) + if (φ < φ0) φ0 = φ + if (φ > φ1) φ1 = φ + } + function linePoint (λ, φ) { + var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]) + if (p0) { + var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal) + d3_geo_cartesianNormalize(inflection) + inflection = d3_geo_spherical(inflection) + var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180 + if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) { + var φi = inflection[1] * d3_degrees + if (φi > φ1) φ1 = φi + } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) { + var φi = -inflection[1] * d3_degrees + if (φi < φ0) φ0 = φi + } else { + if (φ < φ0) φ0 = φ + if (φ > φ1) φ1 = φ + } + if (antimeridian) { + if (λ < λ_) { + if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ + } else { + if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ + } + } else { + if (λ1 >= λ0) { + if (λ < λ0) λ0 = λ + if (λ > λ1) λ1 = λ + } else { + if (λ > λ_) { + if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ + } else { + if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ + } + } + } + } else { + point(λ, φ) + } + p0 = p, λ_ = λ + } + function lineStart () { + bound.point = linePoint + } + function lineEnd () { + range[0] = λ0, range[1] = λ1 + bound.point = point + p0 = null + } + function ringPoint (λ, φ) { + if (p0) { + var dλ = λ - λ_ + dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ + } else λ__ = λ, φ__ = φ + d3_geo_area.point(λ, φ) + linePoint(λ, φ) + } + function ringStart () { + d3_geo_area.lineStart() + } + function ringEnd () { + ringPoint(λ__, φ__) + d3_geo_area.lineEnd() + if (abs(dλSum) > ε) λ0 = -(λ1 = 180) + range[0] = λ0, range[1] = λ1 + p0 = null + } + function angle (λ0, λ1) { + return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1 + } + function compareRanges (a, b) { + return a[0] - b[0] + } + function withinRange (x, range) { + return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x + } + return function (feature) { + φ1 = λ1 = -(λ0 = φ0 = Infinity) + ranges = [] + d3.geo.stream(feature, bound) + var n = ranges.length + if (n) { + ranges.sort(compareRanges) + for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) { + b = ranges[i] + if (withinRange(b[0], a) || withinRange(b[1], a)) { + if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1] + if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0] + } else { + merged.push(a = b) + } + } + var best = -Infinity, dλ + for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) { + b = merged[i] + if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1] + } + } + ranges = range = null + return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ] + } + }()) + d3.geo.centroid = function (object) { + d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0 + d3.geo.stream(object, d3_geo_centroid) + var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z + if (m < ε2) { + x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1 + if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0 + m = x * x + y * y + z * z + if (m < ε2) return [ NaN, NaN ] + } + return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ] + } + var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2 + var d3_geo_centroid = { + sphere: d3_noop, + point: d3_geo_centroidPoint, + lineStart: d3_geo_centroidLineStart, + lineEnd: d3_geo_centroidLineEnd, + polygonStart: function () { + d3_geo_centroid.lineStart = d3_geo_centroidRingStart + }, + polygonEnd: function () { + d3_geo_centroid.lineStart = d3_geo_centroidLineStart + } + } + function d3_geo_centroidPoint (λ, φ) { + λ *= d3_radians + var cosφ = Math.cos(φ *= d3_radians) + d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ)) + } + function d3_geo_centroidPointXYZ (x, y, z) { + ++d3_geo_centroidW0 + d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0 + d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0 + d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0 + } + function d3_geo_centroidLineStart () { + var x0, y0, z0 + d3_geo_centroid.point = function (λ, φ) { + λ *= d3_radians + var cosφ = Math.cos(φ *= d3_radians) + x0 = cosφ * Math.cos(λ) + y0 = cosφ * Math.sin(λ) + z0 = Math.sin(φ) + d3_geo_centroid.point = nextPoint + d3_geo_centroidPointXYZ(x0, y0, z0) + } + function nextPoint (λ, φ) { + λ *= d3_radians + var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z) + d3_geo_centroidW1 += w + d3_geo_centroidX1 += w * (x0 + (x0 = x)) + d3_geo_centroidY1 += w * (y0 + (y0 = y)) + d3_geo_centroidZ1 += w * (z0 + (z0 = z)) + d3_geo_centroidPointXYZ(x0, y0, z0) + } + } + function d3_geo_centroidLineEnd () { + d3_geo_centroid.point = d3_geo_centroidPoint + } + function d3_geo_centroidRingStart () { + var λ00, φ00, x0, y0, z0 + d3_geo_centroid.point = function (λ, φ) { + λ00 = λ, φ00 = φ + d3_geo_centroid.point = nextPoint + λ *= d3_radians + var cosφ = Math.cos(φ *= d3_radians) + x0 = cosφ * Math.cos(λ) + y0 = cosφ * Math.sin(λ) + z0 = Math.sin(φ) + d3_geo_centroidPointXYZ(x0, y0, z0) + } + d3_geo_centroid.lineEnd = function () { + nextPoint(λ00, φ00) + d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd + d3_geo_centroid.point = d3_geo_centroidPoint + } + function nextPoint (λ, φ) { + λ *= d3_radians + var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u) + d3_geo_centroidX2 += v * cx + d3_geo_centroidY2 += v * cy + d3_geo_centroidZ2 += v * cz + d3_geo_centroidW1 += w + d3_geo_centroidX1 += w * (x0 + (x0 = x)) + d3_geo_centroidY1 += w * (y0 + (y0 = y)) + d3_geo_centroidZ1 += w * (z0 + (z0 = z)) + d3_geo_centroidPointXYZ(x0, y0, z0) + } + } + function d3_geo_compose (a, b) { + function compose (x, y) { + return x = a(x, y), b(x[0], x[1]) + } + if (a.invert && b.invert) { + compose.invert = function (x, y) { + return x = b.invert(x, y), x && a.invert(x[0], x[1]) + } + } + return compose + } + function d3_true () { + return true + } + function d3_geo_clipPolygon (segments, compare, clipStartInside, interpolate, listener) { + var subject = [], clip = [] + segments.forEach(function (segment) { + if ((n = segment.length - 1) <= 0) return + var n, p0 = segment[0], p1 = segment[n] + if (d3_geo_sphericalEqual(p0, p1)) { + listener.lineStart() + for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]) + listener.lineEnd() + return + } + var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false) + a.o = b + subject.push(a) + clip.push(b) + a = new d3_geo_clipPolygonIntersection(p1, segment, null, false) + b = new d3_geo_clipPolygonIntersection(p1, null, a, true) + a.o = b + subject.push(a) + clip.push(b) + }) + clip.sort(compare) + d3_geo_clipPolygonLinkCircular(subject) + d3_geo_clipPolygonLinkCircular(clip) + if (!subject.length) return + for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) { + clip[i].e = entry = !entry + } + var start = subject[0], points, point + while (1) { + var current = start, isSubject = true + while (current.v) if ((current = current.n) === start) return + points = current.z + listener.lineStart() + do { + current.v = current.o.v = true + if (current.e) { + if (isSubject) { + for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]) + } else { + interpolate(current.x, current.n.x, 1, listener) + } + current = current.n + } else { + if (isSubject) { + points = current.p.z + for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]) + } else { + interpolate(current.x, current.p.x, -1, listener) + } + current = current.p + } + current = current.o + points = current.z + isSubject = !isSubject + } while (!current.v) + listener.lineEnd() + } + } + function d3_geo_clipPolygonLinkCircular (array) { + if (!(n = array.length)) return + var n, i = 0, a = array[0], b + while (++i < n) { + a.n = b = array[i] + b.p = a + a = b + } + a.n = b = array[0] + b.p = a + } + function d3_geo_clipPolygonIntersection (point, points, other, entry) { + this.x = point + this.z = points + this.o = other + this.e = entry + this.v = false + this.n = this.p = null + } + function d3_geo_clip (pointVisible, clipLine, interpolate, clipStart) { + return function (rotate, listener) { + var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]) + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function () { + clip.point = pointRing + clip.lineStart = ringStart + clip.lineEnd = ringEnd + segments = [] + polygon = [] + }, + polygonEnd: function () { + clip.point = point + clip.lineStart = lineStart + clip.lineEnd = lineEnd + segments = d3.merge(segments) + var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon) + if (segments.length) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true + d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener) + } else if (clipStartInside) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true + listener.lineStart() + interpolate(null, null, 1, listener) + listener.lineEnd() + } + if (polygonStarted) listener.polygonEnd(), polygonStarted = false + segments = polygon = null + }, + sphere: function () { + listener.polygonStart() + listener.lineStart() + interpolate(null, null, 1, listener) + listener.lineEnd() + listener.polygonEnd() + } + } + function point (λ, φ) { + var point = rotate(λ, φ) + if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ) + } + function pointLine (λ, φ) { + var point = rotate(λ, φ) + line.point(point[0], point[1]) + } + function lineStart () { + clip.point = pointLine + line.lineStart() + } + function lineEnd () { + clip.point = point + line.lineEnd() + } + var segments + var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring + function pointRing (λ, φ) { + ring.push([ λ, φ ]) + var point = rotate(λ, φ) + ringListener.point(point[0], point[1]) + } + function ringStart () { + ringListener.lineStart() + ring = [] + } + function ringEnd () { + pointRing(ring[0][0], ring[0][1]) + ringListener.lineEnd() + var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length + ring.pop() + polygon.push(ring) + ring = null + if (!n) return + if (clean & 1) { + segment = ringSegments[0] + var n = segment.length - 1, i = -1, point + if (n > 0) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true + listener.lineStart() + while (++i < n) listener.point((point = segment[i])[0], point[1]) + listener.lineEnd() + } + return + } + if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())) + segments.push(ringSegments.filter(d3_geo_clipSegmentLength1)) + } + return clip + } + } + function d3_geo_clipSegmentLength1 (segment) { + return segment.length > 1 + } + function d3_geo_clipBufferListener () { + var lines = [], line + return { + lineStart: function () { + lines.push(line = []) + }, + point: function (λ, φ) { + line.push([ λ, φ ]) + }, + lineEnd: d3_noop, + buffer: function () { + var buffer = lines + lines = [] + line = null + return buffer + }, + rejoin: function () { + if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())) + } + } + } + function d3_geo_clipSort (a, b) { + return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]) + } + var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]) + function d3_geo_clipAntimeridianLine (listener) { + var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean + return { + lineStart: function () { + listener.lineStart() + clean = 1 + }, + point: function (λ1, φ1) { + var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0) + if (abs(dλ - π) < ε) { + listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ) + listener.point(sλ0, φ0) + listener.lineEnd() + listener.lineStart() + listener.point(sλ1, φ0) + listener.point(λ1, φ0) + clean = 0 + } else if (sλ0 !== sλ1 && dλ >= π) { + if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε + if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε + φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) + listener.point(sλ0, φ0) + listener.lineEnd() + listener.lineStart() + listener.point(sλ1, φ0) + clean = 0 + } + listener.point(λ0 = λ1, φ0 = φ1) + sλ0 = sλ1 + }, + lineEnd: function () { + listener.lineEnd() + λ0 = φ0 = NaN + }, + clean: function () { + return 2 - clean + } + } + } + function d3_geo_clipAntimeridianIntersect (λ0, φ0, λ1, φ1) { + var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1) + return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2 + } + function d3_geo_clipAntimeridianInterpolate (from, to, direction, listener) { + var φ + if (from == null) { + φ = direction * halfπ + listener.point(-π, φ) + listener.point(0, φ) + listener.point(π, φ) + listener.point(π, 0) + listener.point(π, -φ) + listener.point(0, -φ) + listener.point(-π, -φ) + listener.point(-π, 0) + listener.point(-π, φ) + } else if (abs(from[0] - to[0]) > ε) { + var s = from[0] < to[0] ? π : -π + φ = direction * s / 2 + listener.point(-s, φ) + listener.point(0, φ) + listener.point(s, φ) + } else { + listener.point(to[0], to[1]) + } + } + function d3_geo_pointInPolygon (point, polygon) { + var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0 + d3_geo_areaRingSum.reset() + for (var i = 0, n = polygon.length; i < n; ++i) { + var ring = polygon[i], m = ring.length + if (!m) continue + var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1 + while (true) { + if (j === m) j = 0 + point = ring[j] + var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ + d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ))) + polarAngle += antimeridian ? dλ + sdλ * τ : dλ + if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) { + var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point)) + d3_geo_cartesianNormalize(arc) + var intersection = d3_geo_cartesianCross(meridianNormal, arc) + d3_geo_cartesianNormalize(intersection) + var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]) + if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) { + winding += antimeridian ^ dλ >= 0 ? 1 : -1 + } + } + if (!j++) break + λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point + } + } + return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1 + } + function d3_geo_clipCircle (radius) { + var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians) + return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]) + function visible (λ, φ) { + return Math.cos(λ) * Math.cos(φ) > cr + } + function clipLine (listener) { + var point0, c0, v0, v00, clean + return { + lineStart: function () { + v00 = v0 = false + clean = 1 + }, + point: function (λ, φ) { + var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0 + if (!point0 && (v00 = v0 = v)) listener.lineStart() + if (v !== v0) { + point2 = intersect(point0, point1) + if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) { + point1[0] += ε + point1[1] += ε + v = visible(point1[0], point1[1]) + } + } + if (v !== v0) { + clean = 0 + if (v) { + listener.lineStart() + point2 = intersect(point1, point0) + listener.point(point2[0], point2[1]) + } else { + point2 = intersect(point0, point1) + listener.point(point2[0], point2[1]) + listener.lineEnd() + } + point0 = point2 + } else if (notHemisphere && point0 && smallRadius ^ v) { + var t + if (!(c & c0) && (t = intersect(point1, point0, true))) { + clean = 0 + if (smallRadius) { + listener.lineStart() + listener.point(t[0][0], t[0][1]) + listener.point(t[1][0], t[1][1]) + listener.lineEnd() + } else { + listener.point(t[1][0], t[1][1]) + listener.lineEnd() + listener.lineStart() + listener.point(t[0][0], t[0][1]) + } + } + } + if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) { + listener.point(point1[0], point1[1]) + } + point0 = point1, v0 = v, c0 = c + }, + lineEnd: function () { + if (v0) listener.lineEnd() + point0 = null + }, + clean: function () { + return clean | (v00 && v0) << 1 + } + } + } + function intersect (a, b, two) { + var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b) + var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2 + if (!determinant) return !two && a + var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2) + d3_geo_cartesianAdd(A, B) + var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1) + if (t2 < 0) return + var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu) + d3_geo_cartesianAdd(q, A) + q = d3_geo_spherical(q) + if (!two) return q + var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z + if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z + var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε + if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z + if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) { + var q1 = d3_geo_cartesianScale(u, (-w + t) / uu) + d3_geo_cartesianAdd(q1, A) + return [ q, d3_geo_spherical(q1) ] + } + } + function code (λ, φ) { + var r = smallRadius ? radius : π - radius, code = 0 + if (λ < -r) code |= 1; else if (λ > r) code |= 2 + if (φ < -r) code |= 4; else if (φ > r) code |= 8 + return code + } + } + function d3_geom_clipLine (x0, y0, x1, y1) { + return function (line) { + var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r + r = x0 - ax + if (!dx && r > 0) return + r /= dx + if (dx < 0) { + if (r < t0) return + if (r < t1) t1 = r + } else if (dx > 0) { + if (r > t1) return + if (r > t0) t0 = r + } + r = x1 - ax + if (!dx && r < 0) return + r /= dx + if (dx < 0) { + if (r > t1) return + if (r > t0) t0 = r + } else if (dx > 0) { + if (r < t0) return + if (r < t1) t1 = r + } + r = y0 - ay + if (!dy && r > 0) return + r /= dy + if (dy < 0) { + if (r < t0) return + if (r < t1) t1 = r + } else if (dy > 0) { + if (r > t1) return + if (r > t0) t0 = r + } + r = y1 - ay + if (!dy && r < 0) return + r /= dy + if (dy < 0) { + if (r > t1) return + if (r > t0) t0 = r + } else if (dy > 0) { + if (r < t0) return + if (r < t1) t1 = r + } + if (t0 > 0) { + line.a = { + x: ax + t0 * dx, + y: ay + t0 * dy + } + } + if (t1 < 1) { + line.b = { + x: ax + t1 * dx, + y: ay + t1 * dy + } + } + return line + } + } + var d3_geo_clipExtentMAX = 1e9 + d3.geo.clipExtent = function () { + var x0, y0, x1, y1, stream, clip, clipExtent = { + stream: function (output) { + if (stream) stream.valid = false + stream = clip(output) + stream.valid = true + return stream + }, + extent: function (_) { + if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ] + clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]) + if (stream) stream.valid = false, stream = null + return clipExtent + } + } + return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]) + } + function d3_geo_clipExtent (x0, y0, x1, y1) { + return function (listener) { + var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function () { + listener = bufferListener + segments = [] + polygon = [] + clean = true + }, + polygonEnd: function () { + listener = listener_ + segments = d3.merge(segments) + var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length + if (inside || visible) { + listener.polygonStart() + if (inside) { + listener.lineStart() + interpolate(null, null, 1, listener) + listener.lineEnd() + } + if (visible) { + d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) + } + listener.polygonEnd() + } + segments = polygon = ring = null + } + } + function insidePolygon (p) { + var wn = 0, n = polygon.length, y = p[1] + for (var i = 0; i < n; ++i) { + for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) { + b = v[j] + if (a[1] <= y) { + if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn + } else { + if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn + } + a = b + } + } + return wn !== 0 + } + function interpolate (from, to, direction, listener) { + var a = 0, a1 = 0 + if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) { + do { + listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0) + } while ((a = (a + direction + 4) % 4) !== a1) + } else { + listener.point(to[0], to[1]) + } + } + function pointVisible (x, y) { + return x0 <= x && x <= x1 && y0 <= y && y <= y1 + } + function point (x, y) { + if (pointVisible(x, y)) listener.point(x, y) + } + var x__, y__, v__, x_, y_, v_, first, clean + function lineStart () { + clip.point = linePoint + if (polygon) polygon.push(ring = []) + first = true + v_ = false + x_ = y_ = NaN + } + function lineEnd () { + if (segments) { + linePoint(x__, y__) + if (v__ && v_) bufferListener.rejoin() + segments.push(bufferListener.buffer()) + } + clip.point = point + if (v_) listener.lineEnd() + } + function linePoint (x, y) { + x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x)) + y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y)) + var v = pointVisible(x, y) + if (polygon) ring.push([ x, y ]) + if (first) { + x__ = x, y__ = y, v__ = v + first = false + if (v) { + listener.lineStart() + listener.point(x, y) + } + } else { + if (v && v_) listener.point(x, y); else { + var l = { + a: { + x: x_, + y: y_ + }, + b: { + x: x, + y: y + } + } + if (clipLine(l)) { + if (!v_) { + listener.lineStart() + listener.point(l.a.x, l.a.y) + } + listener.point(l.b.x, l.b.y) + if (!v) listener.lineEnd() + clean = false + } else if (v) { + listener.lineStart() + listener.point(x, y) + clean = false + } + } + } + x_ = x, y_ = y, v_ = v + } + return clip + } + function corner (p, direction) { + return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2 + } + function compare (a, b) { + return comparePoints(a.x, b.x) + } + function comparePoints (a, b) { + var ca = corner(a, 1), cb = corner(b, 1) + return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0] + } + } + function d3_geo_conic (projectAt) { + var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1) + p.parallels = function (_) { + if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ] + return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180) + } + return p + } + function d3_geo_conicEqualArea (φ0, φ1) { + var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n + function forward (λ, φ) { + var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n + return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ] + } + forward.invert = function (x, y) { + var ρ0_y = ρ0 - y + return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ] + } + return forward + } + (d3.geo.conicEqualArea = function () { + return d3_geo_conic(d3_geo_conicEqualArea) + }).raw = d3_geo_conicEqualArea + d3.geo.albers = function () { + return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -0.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070) + } + d3.geo.albersUsa = function () { + var lower48 = d3.geo.albers() + var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]) + var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]) + var point, pointStream = { + point: function (x, y) { + point = [ x, y ] + } + }, lower48Point, alaskaPoint, hawaiiPoint + function albersUsa (coordinates) { + var x = coordinates[0], y = coordinates[1] + point = null; + (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y) + return point + } + albersUsa.invert = function (coordinates) { + var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k + return (y >= 0.12 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii : lower48).invert(coordinates) + } + albersUsa.stream = function (stream) { + var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream) + return { + point: function (x, y) { + lower48Stream.point(x, y) + alaskaStream.point(x, y) + hawaiiStream.point(x, y) + }, + sphere: function () { + lower48Stream.sphere() + alaskaStream.sphere() + hawaiiStream.sphere() + }, + lineStart: function () { + lower48Stream.lineStart() + alaskaStream.lineStart() + hawaiiStream.lineStart() + }, + lineEnd: function () { + lower48Stream.lineEnd() + alaskaStream.lineEnd() + hawaiiStream.lineEnd() + }, + polygonStart: function () { + lower48Stream.polygonStart() + alaskaStream.polygonStart() + hawaiiStream.polygonStart() + }, + polygonEnd: function () { + lower48Stream.polygonEnd() + alaskaStream.polygonEnd() + hawaiiStream.polygonEnd() + } + } + } + albersUsa.precision = function (_) { + if (!arguments.length) return lower48.precision() + lower48.precision(_) + alaska.precision(_) + hawaii.precision(_) + return albersUsa + } + albersUsa.scale = function (_) { + if (!arguments.length) return lower48.scale() + lower48.scale(_) + alaska.scale(_ * 0.35) + hawaii.scale(_) + return albersUsa.translate(lower48.translate()) + } + albersUsa.translate = function (_) { + if (!arguments.length) return lower48.translate() + var k = lower48.scale(), x = +_[0], y = +_[1] + lower48Point = lower48.translate(_).clipExtent([ [ x - 0.455 * k, y - 0.238 * k ], [ x + 0.455 * k, y + 0.238 * k ] ]).stream(pointStream).point + alaskaPoint = alaska.translate([ x - 0.307 * k, y + 0.201 * k ]).clipExtent([ [ x - 0.425 * k + ε, y + 0.12 * k + ε ], [ x - 0.214 * k - ε, y + 0.234 * k - ε ] ]).stream(pointStream).point + hawaiiPoint = hawaii.translate([ x - 0.205 * k, y + 0.212 * k ]).clipExtent([ [ x - 0.214 * k + ε, y + 0.166 * k + ε ], [ x - 0.115 * k - ε, y + 0.234 * k - ε ] ]).stream(pointStream).point + return albersUsa + } + return albersUsa.scale(1070) + } + var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = { + point: d3_noop, + lineStart: d3_noop, + lineEnd: d3_noop, + polygonStart: function () { + d3_geo_pathAreaPolygon = 0 + d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart + }, + polygonEnd: function () { + d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop + d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2) + } + } + function d3_geo_pathAreaRingStart () { + var x00, y00, x0, y0 + d3_geo_pathArea.point = function (x, y) { + d3_geo_pathArea.point = nextPoint + x00 = x0 = x, y00 = y0 = y + } + function nextPoint (x, y) { + d3_geo_pathAreaPolygon += y0 * x - x0 * y + x0 = x, y0 = y + } + d3_geo_pathArea.lineEnd = function () { + nextPoint(x00, y00) + } + } + var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 + var d3_geo_pathBounds = { + point: d3_geo_pathBoundsPoint, + lineStart: d3_noop, + lineEnd: d3_noop, + polygonStart: d3_noop, + polygonEnd: d3_noop + } + function d3_geo_pathBoundsPoint (x, y) { + if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x + if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x + if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y + if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y + } + function d3_geo_pathBuffer () { + var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [] + var stream = { + point: point, + lineStart: function () { + stream.point = pointLineStart + }, + lineEnd: lineEnd, + polygonStart: function () { + stream.lineEnd = lineEndPolygon + }, + polygonEnd: function () { + stream.lineEnd = lineEnd + stream.point = point + }, + pointRadius: function (_) { + pointCircle = d3_geo_pathBufferCircle(_) + return stream + }, + result: function () { + if (buffer.length) { + var result = buffer.join('') + buffer = [] + return result + } + } + } + function point (x, y) { + buffer.push('M', x, ',', y, pointCircle) + } + function pointLineStart (x, y) { + buffer.push('M', x, ',', y) + stream.point = pointLine + } + function pointLine (x, y) { + buffer.push('L', x, ',', y) + } + function lineEnd () { + stream.point = point + } + function lineEndPolygon () { + buffer.push('Z') + } + return stream + } + function d3_geo_pathBufferCircle (radius) { + return 'm0,' + radius + 'a' + radius + ',' + radius + ' 0 1,1 0,' + -2 * radius + 'a' + radius + ',' + radius + ' 0 1,1 0,' + 2 * radius + 'z' + } + var d3_geo_pathCentroid = { + point: d3_geo_pathCentroidPoint, + lineStart: d3_geo_pathCentroidLineStart, + lineEnd: d3_geo_pathCentroidLineEnd, + polygonStart: function () { + d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart + }, + polygonEnd: function () { + d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint + d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart + d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd + } + } + function d3_geo_pathCentroidPoint (x, y) { + d3_geo_centroidX0 += x + d3_geo_centroidY0 += y + ++d3_geo_centroidZ0 + } + function d3_geo_pathCentroidLineStart () { + var x0, y0 + d3_geo_pathCentroid.point = function (x, y) { + d3_geo_pathCentroid.point = nextPoint + d3_geo_pathCentroidPoint(x0 = x, y0 = y) + } + function nextPoint (x, y) { + var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy) + d3_geo_centroidX1 += z * (x0 + x) / 2 + d3_geo_centroidY1 += z * (y0 + y) / 2 + d3_geo_centroidZ1 += z + d3_geo_pathCentroidPoint(x0 = x, y0 = y) + } + } + function d3_geo_pathCentroidLineEnd () { + d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint + } + function d3_geo_pathCentroidRingStart () { + var x00, y00, x0, y0 + d3_geo_pathCentroid.point = function (x, y) { + d3_geo_pathCentroid.point = nextPoint + d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y) + } + function nextPoint (x, y) { + var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy) + d3_geo_centroidX1 += z * (x0 + x) / 2 + d3_geo_centroidY1 += z * (y0 + y) / 2 + d3_geo_centroidZ1 += z + z = y0 * x - x0 * y + d3_geo_centroidX2 += z * (x0 + x) + d3_geo_centroidY2 += z * (y0 + y) + d3_geo_centroidZ2 += z * 3 + d3_geo_pathCentroidPoint(x0 = x, y0 = y) + } + d3_geo_pathCentroid.lineEnd = function () { + nextPoint(x00, y00) + } + } + function d3_geo_pathContext (context) { + var pointRadius = 4.5 + var stream = { + point: point, + lineStart: function () { + stream.point = pointLineStart + }, + lineEnd: lineEnd, + polygonStart: function () { + stream.lineEnd = lineEndPolygon + }, + polygonEnd: function () { + stream.lineEnd = lineEnd + stream.point = point + }, + pointRadius: function (_) { + pointRadius = _ + return stream + }, + result: d3_noop + } + function point (x, y) { + context.moveTo(x + pointRadius, y) + context.arc(x, y, pointRadius, 0, τ) + } + function pointLineStart (x, y) { + context.moveTo(x, y) + stream.point = pointLine + } + function pointLine (x, y) { + context.lineTo(x, y) + } + function lineEnd () { + stream.point = point + } + function lineEndPolygon () { + context.closePath() + } + return stream + } + function d3_geo_resample (project) { + var δ2 = 0.5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16 + function resample (stream) { + return (maxDepth ? resampleRecursive : resampleNone)(stream) + } + function resampleNone (stream) { + return d3_geo_transformPoint(stream, function (x, y) { + x = project(x, y) + stream.point(x[0], x[1]) + }) + } + function resampleRecursive (stream) { + var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0 + var resample = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function () { + stream.polygonStart() + resample.lineStart = ringStart + }, + polygonEnd: function () { + stream.polygonEnd() + resample.lineStart = lineStart + } + } + function point (x, y) { + x = project(x, y) + stream.point(x[0], x[1]) + } + function lineStart () { + x0 = NaN + resample.point = linePoint + stream.lineStart() + } + function linePoint (λ, φ) { + var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ) + resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream) + stream.point(x0, y0) + } + function lineEnd () { + resample.point = point + stream.lineEnd() + } + function ringStart () { + lineStart() + resample.point = ringPoint + resample.lineEnd = ringEnd + } + function ringPoint (λ, φ) { + linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0 + resample.point = linePoint + } + function ringEnd () { + resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream) + resample.lineEnd = lineEnd + lineEnd() + } + return resample + } + function resampleLineTo (x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) { + var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy + if (d2 > 4 * δ2 && depth--) { + var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2 + if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { + resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream) + stream.point(x2, y2) + resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream) + } + } + } + resample.precision = function (_) { + if (!arguments.length) return Math.sqrt(δ2) + maxDepth = (δ2 = _ * _) > 0 && 16 + return resample + } + return resample + } + d3.geo.path = function () { + var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream + function path (object) { + if (object) { + if (typeof pointRadius === 'function') contextStream.pointRadius(+pointRadius.apply(this, arguments)) + if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream) + d3.geo.stream(object, cacheStream) + } + return contextStream.result() + } + path.area = function (object) { + d3_geo_pathAreaSum = 0 + d3.geo.stream(object, projectStream(d3_geo_pathArea)) + return d3_geo_pathAreaSum + } + path.centroid = function (object) { + d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0 + d3.geo.stream(object, projectStream(d3_geo_pathCentroid)) + return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ] + } + path.bounds = function (object) { + d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity) + d3.geo.stream(object, projectStream(d3_geo_pathBounds)) + return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ] + } + path.projection = function (_) { + if (!arguments.length) return projection + projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity + return reset() + } + path.context = function (_) { + if (!arguments.length) return context + contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_) + if (typeof pointRadius !== 'function') contextStream.pointRadius(pointRadius) + return reset() + } + path.pointRadius = function (_) { + if (!arguments.length) return pointRadius + pointRadius = typeof _ === 'function' ? _ : (contextStream.pointRadius(+_), +_) + return path + } + function reset () { + cacheStream = null + return path + } + return path.projection(d3.geo.albersUsa()).context(null) + } + function d3_geo_pathProjectStream (project) { + var resample = d3_geo_resample(function (x, y) { + return project([ x * d3_degrees, y * d3_degrees ]) + }) + return function (stream) { + return d3_geo_projectionRadians(resample(stream)) + } + } + d3.geo.transform = function (methods) { + return { + stream: function (stream) { + var transform = new d3_geo_transform(stream) + for (var k in methods) transform[k] = methods[k] + return transform + } + } + } + function d3_geo_transform (stream) { + this.stream = stream + } + d3_geo_transform.prototype = { + point: function (x, y) { + this.stream.point(x, y) + }, + sphere: function () { + this.stream.sphere() + }, + lineStart: function () { + this.stream.lineStart() + }, + lineEnd: function () { + this.stream.lineEnd() + }, + polygonStart: function () { + this.stream.polygonStart() + }, + polygonEnd: function () { + this.stream.polygonEnd() + } + } + function d3_geo_transformPoint (stream, point) { + return { + point: point, + sphere: function () { + stream.sphere() + }, + lineStart: function () { + stream.lineStart() + }, + lineEnd: function () { + stream.lineEnd() + }, + polygonStart: function () { + stream.polygonStart() + }, + polygonEnd: function () { + stream.polygonEnd() + } + } + } + d3.geo.projection = d3_geo_projection + d3.geo.projectionMutator = d3_geo_projectionMutator + function d3_geo_projection (project) { + return d3_geo_projectionMutator(function () { + return project + })() + } + function d3_geo_projectionMutator (projectAt) { + var project, rotate, projectRotate, projectResample = d3_geo_resample(function (x, y) { + x = project(x, y) + return [ x[0] * k + δx, δy - x[1] * k ] + }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream + function projection (point) { + point = projectRotate(point[0] * d3_radians, point[1] * d3_radians) + return [ point[0] * k + δx, δy - point[1] * k ] + } + function invert (point) { + point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k) + return point && [ point[0] * d3_degrees, point[1] * d3_degrees ] + } + projection.stream = function (output) { + if (stream) stream.valid = false + stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output)))) + stream.valid = true + return stream + } + projection.clipAngle = function (_) { + if (!arguments.length) return clipAngle + preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians) + return invalidate() + } + projection.clipExtent = function (_) { + if (!arguments.length) return clipExtent + clipExtent = _ + postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity + return invalidate() + } + projection.scale = function (_) { + if (!arguments.length) return k + k = +_ + return reset() + } + projection.translate = function (_) { + if (!arguments.length) return [ x, y ] + x = +_[0] + y = +_[1] + return reset() + } + projection.center = function (_) { + if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ] + λ = _[0] % 360 * d3_radians + φ = _[1] % 360 * d3_radians + return reset() + } + projection.rotate = function (_) { + if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ] + δλ = _[0] % 360 * d3_radians + δφ = _[1] % 360 * d3_radians + δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0 + return reset() + } + d3.rebind(projection, projectResample, 'precision') + function reset () { + projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project) + var center = project(λ, φ) + δx = x - center[0] * k + δy = y + center[1] * k + return invalidate() + } + function invalidate () { + if (stream) stream.valid = false, stream = null + return projection + } + return function () { + project = projectAt.apply(this, arguments) + projection.invert = project.invert && invert + return reset() + } + } + function d3_geo_projectionRadians (stream) { + return d3_geo_transformPoint(stream, function (x, y) { + stream.point(x * d3_radians, y * d3_radians) + }) + } + function d3_geo_equirectangular (λ, φ) { + return [ λ, φ ] + } + (d3.geo.equirectangular = function () { + return d3_geo_projection(d3_geo_equirectangular) + }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular + d3.geo.rotation = function (rotate) { + rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0) + function forward (coordinates) { + coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians) + return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates + } + forward.invert = function (coordinates) { + coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians) + return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates + } + return forward + } + function d3_geo_identityRotation (λ, φ) { + return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ] + } + d3_geo_identityRotation.invert = d3_geo_equirectangular + function d3_geo_rotation (δλ, δφ, δγ) { + return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation + } + function d3_geo_forwardRotationλ (δλ) { + return function (λ, φ) { + return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ] + } + } + function d3_geo_rotationλ (δλ) { + var rotation = d3_geo_forwardRotationλ(δλ) + rotation.invert = d3_geo_forwardRotationλ(-δλ) + return rotation + } + function d3_geo_rotationφγ (δφ, δγ) { + var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ) + function rotation (λ, φ) { + var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ + return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ] + } + rotation.invert = function (λ, φ) { + var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ + return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ] + } + return rotation + } + d3.geo.circle = function () { + var origin = [ 0, 0 ], angle, precision = 6, interpolate + function circle () { + var center = typeof origin === 'function' ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [] + interpolate(null, null, 1, { + point: function (x, y) { + ring.push(x = rotate(x, y)) + x[0] *= d3_degrees, x[1] *= d3_degrees + } + }) + return { + type: 'Polygon', + coordinates: [ ring ] + } + } + circle.origin = function (x) { + if (!arguments.length) return origin + origin = x + return circle + } + circle.angle = function (x) { + if (!arguments.length) return angle + interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians) + return circle + } + circle.precision = function (_) { + if (!arguments.length) return precision + interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians) + return circle + } + return circle.angle(90) + } + function d3_geo_circleInterpolate (radius, precision) { + var cr = Math.cos(radius), sr = Math.sin(radius) + return function (from, to, direction, listener) { + var step = direction * precision + if (from != null) { + from = d3_geo_circleAngle(cr, from) + to = d3_geo_circleAngle(cr, to) + if (direction > 0 ? from < to : from > to) from += direction * τ } else { - merged.push(a = b); - } - } - var best = -Infinity, dλ; - for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) { - b = merged[i]; - if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1]; - } - } - ranges = range = null; - return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ]; - }; - }(); - d3.geo.centroid = function(object) { - d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; - d3.geo.stream(object, d3_geo_centroid); - var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z; - if (m < ε2) { - x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1; - if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0; - m = x * x + y * y + z * z; - if (m < ε2) return [ NaN, NaN ]; - } - return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ]; - }; - var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2; - var d3_geo_centroid = { - sphere: d3_noop, - point: d3_geo_centroidPoint, - lineStart: d3_geo_centroidLineStart, - lineEnd: d3_geo_centroidLineEnd, - polygonStart: function() { - d3_geo_centroid.lineStart = d3_geo_centroidRingStart; - }, - polygonEnd: function() { - d3_geo_centroid.lineStart = d3_geo_centroidLineStart; - } - }; - function d3_geo_centroidPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ)); - } - function d3_geo_centroidPointXYZ(x, y, z) { - ++d3_geo_centroidW0; - d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0; - d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0; - d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0; - } - function d3_geo_centroidLineStart() { - var x0, y0, z0; - d3_geo_centroid.point = function(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - x0 = cosφ * Math.cos(λ); - y0 = cosφ * Math.sin(λ); - z0 = Math.sin(φ); - d3_geo_centroid.point = nextPoint; - d3_geo_centroidPointXYZ(x0, y0, z0); - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); - d3_geo_centroidW1 += w; - d3_geo_centroidX1 += w * (x0 + (x0 = x)); - d3_geo_centroidY1 += w * (y0 + (y0 = y)); - d3_geo_centroidZ1 += w * (z0 + (z0 = z)); - d3_geo_centroidPointXYZ(x0, y0, z0); - } - } - function d3_geo_centroidLineEnd() { - d3_geo_centroid.point = d3_geo_centroidPoint; - } - function d3_geo_centroidRingStart() { - var λ00, φ00, x0, y0, z0; - d3_geo_centroid.point = function(λ, φ) { - λ00 = λ, φ00 = φ; - d3_geo_centroid.point = nextPoint; - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians); - x0 = cosφ * Math.cos(λ); - y0 = cosφ * Math.sin(λ); - z0 = Math.sin(φ); - d3_geo_centroidPointXYZ(x0, y0, z0); - }; - d3_geo_centroid.lineEnd = function() { - nextPoint(λ00, φ00); - d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd; - d3_geo_centroid.point = d3_geo_centroidPoint; - }; - function nextPoint(λ, φ) { - λ *= d3_radians; - var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u); - d3_geo_centroidX2 += v * cx; - d3_geo_centroidY2 += v * cy; - d3_geo_centroidZ2 += v * cz; - d3_geo_centroidW1 += w; - d3_geo_centroidX1 += w * (x0 + (x0 = x)); - d3_geo_centroidY1 += w * (y0 + (y0 = y)); - d3_geo_centroidZ1 += w * (z0 + (z0 = z)); - d3_geo_centroidPointXYZ(x0, y0, z0); - } - } - function d3_geo_compose(a, b) { - function compose(x, y) { - return x = a(x, y), b(x[0], x[1]); - } - if (a.invert && b.invert) compose.invert = function(x, y) { - return x = b.invert(x, y), x && a.invert(x[0], x[1]); - }; - return compose; - } - function d3_true() { - return true; - } - function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) { - var subject = [], clip = []; - segments.forEach(function(segment) { - if ((n = segment.length - 1) <= 0) return; - var n, p0 = segment[0], p1 = segment[n]; - if (d3_geo_sphericalEqual(p0, p1)) { - listener.lineStart(); - for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]); - listener.lineEnd(); - return; - } - var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false); - a.o = b; - subject.push(a); - clip.push(b); - a = new d3_geo_clipPolygonIntersection(p1, segment, null, false); - b = new d3_geo_clipPolygonIntersection(p1, null, a, true); - a.o = b; - subject.push(a); - clip.push(b); - }); - clip.sort(compare); - d3_geo_clipPolygonLinkCircular(subject); - d3_geo_clipPolygonLinkCircular(clip); - if (!subject.length) return; - for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) { - clip[i].e = entry = !entry; - } - var start = subject[0], points, point; - while (1) { - var current = start, isSubject = true; - while (current.v) if ((current = current.n) === start) return; - points = current.z; - listener.lineStart(); - do { - current.v = current.o.v = true; - if (current.e) { - if (isSubject) { - for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]); + from = radius + direction * τ + to = radius - 0.5 * step + } + for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) { + listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]) + } + } + } + function d3_geo_circleAngle (cr, point) { + var a = d3_geo_cartesian(point) + a[0] -= cr + d3_geo_cartesianNormalize(a) + var angle = d3_acos(-a[1]) + return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI) + } + d3.geo.distance = function (a, b) { + var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t + return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ) + } + d3.geo.graticule = function () { + var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5 + function graticule () { + return { + type: 'MultiLineString', + coordinates: lines() + } + } + function lines () { + return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function (x) { + return abs(x % DX) > ε + }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function (y) { + return abs(y % DY) > ε + }).map(y)) + } + graticule.lines = function () { + return lines().map(function (coordinates) { + return { + type: 'LineString', + coordinates: coordinates + } + }) + } + graticule.outline = function () { + return { + type: 'Polygon', + coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ] + } + } + graticule.extent = function (_) { + if (!arguments.length) return graticule.minorExtent() + return graticule.majorExtent(_).minorExtent(_) + } + graticule.majorExtent = function (_) { + if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ] + X0 = +_[0][0], X1 = +_[1][0] + Y0 = +_[0][1], Y1 = +_[1][1] + if (X0 > X1) _ = X0, X0 = X1, X1 = _ + if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _ + return graticule.precision(precision) + } + graticule.minorExtent = function (_) { + if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ] + x0 = +_[0][0], x1 = +_[1][0] + y0 = +_[0][1], y1 = +_[1][1] + if (x0 > x1) _ = x0, x0 = x1, x1 = _ + if (y0 > y1) _ = y0, y0 = y1, y1 = _ + return graticule.precision(precision) + } + graticule.step = function (_) { + if (!arguments.length) return graticule.minorStep() + return graticule.majorStep(_).minorStep(_) + } + graticule.majorStep = function (_) { + if (!arguments.length) return [ DX, DY ] + DX = +_[0], DY = +_[1] + return graticule + } + graticule.minorStep = function (_) { + if (!arguments.length) return [ dx, dy ] + dx = +_[0], dy = +_[1] + return graticule + } + graticule.precision = function (_) { + if (!arguments.length) return precision + precision = +_ + x = d3_geo_graticuleX(y0, y1, 90) + y = d3_geo_graticuleY(x0, x1, precision) + X = d3_geo_graticuleX(Y0, Y1, 90) + Y = d3_geo_graticuleY(X0, X1, precision) + return graticule + } + return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]) + } + function d3_geo_graticuleX (y0, y1, dy) { + var y = d3.range(y0, y1 - ε, dy).concat(y1) + return function (x) { + return y.map(function (y) { + return [ x, y ] + }) + } + } + function d3_geo_graticuleY (x0, x1, dx) { + var x = d3.range(x0, x1 - ε, dx).concat(x1) + return function (y) { + return x.map(function (x) { + return [ x, y ] + }) + } + } + function d3_source (d) { + return d.source + } + function d3_target (d) { + return d.target + } + d3.geo.greatArc = function () { + var source = d3_source, source_, target = d3_target, target_ + function greatArc () { + return { + type: 'LineString', + coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ] + } + } + greatArc.distance = function () { + return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments)) + } + greatArc.source = function (_) { + if (!arguments.length) return source + source = _, source_ = typeof _ === 'function' ? null : _ + return greatArc + } + greatArc.target = function (_) { + if (!arguments.length) return target + target = _, target_ = typeof _ === 'function' ? null : _ + return greatArc + } + greatArc.precision = function () { + return arguments.length ? greatArc : 0 + } + return greatArc + } + d3.geo.interpolate = function (source, target) { + return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians) + } + function d3_geo_interpolate (x0, y0, x1, y1) { + var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d) + var interpolate = d ? function (t) { + var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1 + return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ] + } : function () { + return [ x0 * d3_degrees, y0 * d3_degrees ] + } + interpolate.distance = d + return interpolate + } + d3.geo.length = function (object) { + d3_geo_lengthSum = 0 + d3.geo.stream(object, d3_geo_length) + return d3_geo_lengthSum + } + var d3_geo_lengthSum + var d3_geo_length = { + sphere: d3_noop, + point: d3_noop, + lineStart: d3_geo_lengthLineStart, + lineEnd: d3_noop, + polygonStart: d3_noop, + polygonEnd: d3_noop + } + function d3_geo_lengthLineStart () { + var λ0, sinφ0, cosφ0 + d3_geo_length.point = function (λ, φ) { + λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ) + d3_geo_length.point = nextPoint + } + d3_geo_length.lineEnd = function () { + d3_geo_length.point = d3_geo_length.lineEnd = d3_noop + } + function nextPoint (λ, φ) { + var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t) + d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ) + λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ + } + } + function d3_geo_azimuthal (scale, angle) { + function azimuthal (λ, φ) { + var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ) + return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ] + } + azimuthal.invert = function (x, y) { + var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c) + return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ] + } + return azimuthal + } + var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function (cosλcosφ) { + return Math.sqrt(2 / (1 + cosλcosφ)) + }, function (ρ) { + return 2 * Math.asin(ρ / 2) + }); + (d3.geo.azimuthalEqualArea = function () { + return d3_geo_projection(d3_geo_azimuthalEqualArea) + }).raw = d3_geo_azimuthalEqualArea + var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function (cosλcosφ) { + var c = Math.acos(cosλcosφ) + return c && c / Math.sin(c) + }, d3_identity); + (d3.geo.azimuthalEquidistant = function () { + return d3_geo_projection(d3_geo_azimuthalEquidistant) + }).raw = d3_geo_azimuthalEquidistant + function d3_geo_conicConformal (φ0, φ1) { + var cosφ0 = Math.cos(φ0), t = function (φ) { + return Math.tan(π / 4 + φ / 2) + }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n + if (!n) return d3_geo_mercator + function forward (λ, φ) { + if (F > 0) { + if (φ < -halfπ + ε) φ = -halfπ + ε + } else { + if (φ > halfπ - ε) φ = halfπ - ε + } + var ρ = F / Math.pow(t(φ), n) + return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ] + } + forward.invert = function (x, y) { + var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) + return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ] + } + return forward + } + (d3.geo.conicConformal = function () { + return d3_geo_conic(d3_geo_conicConformal) + }).raw = d3_geo_conicConformal + function d3_geo_conicEquidistant (φ0, φ1) { + var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0 + if (abs(n) < ε) return d3_geo_equirectangular + function forward (λ, φ) { + var ρ = G - φ + return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ] + } + forward.invert = function (x, y) { + var ρ0_y = G - y + return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ] + } + return forward + } + (d3.geo.conicEquidistant = function () { + return d3_geo_conic(d3_geo_conicEquidistant) + }).raw = d3_geo_conicEquidistant + var d3_geo_gnomonic = d3_geo_azimuthal(function (cosλcosφ) { + return 1 / cosλcosφ + }, Math.atan); + (d3.geo.gnomonic = function () { + return d3_geo_projection(d3_geo_gnomonic) + }).raw = d3_geo_gnomonic + function d3_geo_mercator (λ, φ) { + return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ] + } + d3_geo_mercator.invert = function (x, y) { + return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ] + } + function d3_geo_mercatorProjection (project) { + var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto + m.scale = function () { + var v = scale.apply(m, arguments) + return v === m ? clipAuto ? m.clipExtent(null) : m : v + } + m.translate = function () { + var v = translate.apply(m, arguments) + return v === m ? clipAuto ? m.clipExtent(null) : m : v + } + m.clipExtent = function (_) { + var v = clipExtent.apply(m, arguments) + if (v === m) { + if (clipAuto = _ == null) { + var k = π * scale(), t = translate() + clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]) + } + } else if (clipAuto) { + v = null + } + return v + } + return m.clipExtent(null) + } + (d3.geo.mercator = function () { + return d3_geo_mercatorProjection(d3_geo_mercator) + }).raw = d3_geo_mercator + var d3_geo_orthographic = d3_geo_azimuthal(function () { + return 1 + }, Math.asin); + (d3.geo.orthographic = function () { + return d3_geo_projection(d3_geo_orthographic) + }).raw = d3_geo_orthographic + var d3_geo_stereographic = d3_geo_azimuthal(function (cosλcosφ) { + return 1 / (1 + cosλcosφ) + }, function (ρ) { + return 2 * Math.atan(ρ) + }); + (d3.geo.stereographic = function () { + return d3_geo_projection(d3_geo_stereographic) + }).raw = d3_geo_stereographic + function d3_geo_transverseMercator (λ, φ) { + return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ] + } + d3_geo_transverseMercator.invert = function (x, y) { + return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ] + }; + (d3.geo.transverseMercator = function () { + var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate + projection.center = function (_) { + return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]) + } + projection.rotate = function (_) { + return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), + [ _[0], _[1], _[2] - 90 ]) + } + return rotate([ 0, 0, 90 ]) + }).raw = d3_geo_transverseMercator + d3.geom = {} + function d3_geom_pointX (d) { + return d[0] + } + function d3_geom_pointY (d) { + return d[1] + } + d3.geom.hull = function (vertices) { + var x = d3_geom_pointX, y = d3_geom_pointY + if (arguments.length) return hull(vertices) + function hull (data) { + if (data.length < 3) return [] + var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [] + for (i = 0; i < n; i++) { + points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]) + } + points.sort(d3_geom_hullOrder) + for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]) + var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints) + var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [] + for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]) + for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]) + return polygon + } + hull.x = function (_) { + return arguments.length ? (x = _, hull) : x + } + hull.y = function (_) { + return arguments.length ? (y = _, hull) : y + } + return hull + } + function d3_geom_hullUpper (points) { + var n = points.length, hull = [ 0, 1 ], hs = 2 + for (var i = 2; i < n; i++) { + while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs + hull[hs++] = i + } + return hull.slice(0, hs) + } + function d3_geom_hullOrder (a, b) { + return a[0] - b[0] || a[1] - b[1] + } + d3.geom.polygon = function (coordinates) { + d3_subclass(coordinates, d3_geom_polygonPrototype) + return coordinates + } + var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [] + d3_geom_polygonPrototype.area = function () { + var i = -1, n = this.length, a, b = this[n - 1], area = 0 + while (++i < n) { + a = b + b = this[i] + area += a[1] * b[0] - a[0] * b[1] + } + return area * 0.5 + } + d3_geom_polygonPrototype.centroid = function (k) { + var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c + if (!arguments.length) k = -1 / (6 * this.area()) + while (++i < n) { + a = b + b = this[i] + c = a[0] * b[1] - b[0] * a[1] + x += (a[0] + b[0]) * c + y += (a[1] + b[1]) * c + } + return [ x * k, y * k ] + } + d3_geom_polygonPrototype.clip = function (subject) { + var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d + while (++i < n) { + input = subject.slice() + subject.length = 0 + b = this[i] + c = input[(m = input.length - closed) - 1] + j = -1 + while (++j < m) { + d = input[j] + if (d3_geom_polygonInside(d, a, b)) { + if (!d3_geom_polygonInside(c, a, b)) { + subject.push(d3_geom_polygonIntersect(c, d, a, b)) + } + subject.push(d) + } else if (d3_geom_polygonInside(c, a, b)) { + subject.push(d3_geom_polygonIntersect(c, d, a, b)) + } + c = d + } + if (closed) subject.push(subject[0]) + a = b + } + return subject + } + function d3_geom_polygonInside (p, a, b) { + return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]) + } + function d3_geom_polygonIntersect (c, d, a, b) { + var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21) + return [ x1 + ua * x21, y1 + ua * y21 ] + } + function d3_geom_polygonClosed (coordinates) { + var a = coordinates[0], b = coordinates[coordinates.length - 1] + return !(a[0] - b[0] || a[1] - b[1]) + } + var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [] + function d3_geom_voronoiBeach () { + d3_geom_voronoiRedBlackNode(this) + this.edge = this.site = this.circle = null + } + function d3_geom_voronoiCreateBeach (site) { + var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach() + beach.site = site + return beach + } + function d3_geom_voronoiDetachBeach (beach) { + d3_geom_voronoiDetachCircle(beach) + d3_geom_voronoiBeaches.remove(beach) + d3_geom_voronoiBeachPool.push(beach) + d3_geom_voronoiRedBlackNode(beach) + } + function d3_geom_voronoiRemoveBeach (beach) { + var circle = beach.circle, x = circle.x, y = circle.cy, vertex = { + x: x, + y: y + }, previous = beach.P, next = beach.N, disappearing = [ beach ] + d3_geom_voronoiDetachBeach(beach) + var lArc = previous + while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) { + previous = lArc.P + disappearing.unshift(lArc) + d3_geom_voronoiDetachBeach(lArc) + lArc = previous + } + disappearing.unshift(lArc) + d3_geom_voronoiDetachCircle(lArc) + var rArc = next + while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) { + next = rArc.N + disappearing.push(rArc) + d3_geom_voronoiDetachBeach(rArc) + rArc = next + } + disappearing.push(rArc) + d3_geom_voronoiDetachCircle(rArc) + var nArcs = disappearing.length, iArc + for (iArc = 1; iArc < nArcs; ++iArc) { + rArc = disappearing[iArc] + lArc = disappearing[iArc - 1] + d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex) + } + lArc = disappearing[0] + rArc = disappearing[nArcs - 1] + rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex) + d3_geom_voronoiAttachCircle(lArc) + d3_geom_voronoiAttachCircle(rArc) + } + function d3_geom_voronoiAddBeach (site) { + var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._ + while (node) { + dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x + if (dxl > ε) node = node.L; else { + dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix) + if (dxr > ε) { + if (!node.R) { + lArc = node + break + } + node = node.R + } else { + if (dxl > -ε) { + lArc = node.P + rArc = node + } else if (dxr > -ε) { + lArc = node + rArc = node.N + } else { + lArc = rArc = node + } + break + } + } + } + var newArc = d3_geom_voronoiCreateBeach(site) + d3_geom_voronoiBeaches.insert(lArc, newArc) + if (!lArc && !rArc) return + if (lArc === rArc) { + d3_geom_voronoiDetachCircle(lArc) + rArc = d3_geom_voronoiCreateBeach(lArc.site) + d3_geom_voronoiBeaches.insert(newArc, rArc) + newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site) + d3_geom_voronoiAttachCircle(lArc) + d3_geom_voronoiAttachCircle(rArc) + return + } + if (!rArc) { + newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site) + return + } + d3_geom_voronoiDetachCircle(lArc) + d3_geom_voronoiDetachCircle(rArc) + var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = { + x: (cy * hb - by * hc) / d + ax, + y: (bx * hc - cx * hb) / d + ay + } + d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex) + newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex) + rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex) + d3_geom_voronoiAttachCircle(lArc) + d3_geom_voronoiAttachCircle(rArc) + } + function d3_geom_voronoiLeftBreakPoint (arc, directrix) { + var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix + if (!pby2) return rfocx + var lArc = arc.P + if (!lArc) return -Infinity + site = lArc.site + var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix + if (!plby2) return lfocx + var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2 + if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx + return (rfocx + lfocx) / 2 + } + function d3_geom_voronoiRightBreakPoint (arc, directrix) { + var rArc = arc.N + if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix) + var site = arc.site + return site.y === directrix ? site.x : Infinity + } + function d3_geom_voronoiCell (site) { + this.site = site + this.edges = [] + } + d3_geom_voronoiCell.prototype.prepare = function () { + var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge + while (iHalfEdge--) { + edge = halfEdges[iHalfEdge].edge + if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1) + } + halfEdges.sort(d3_geom_voronoiHalfEdgeOrder) + return halfEdges.length + } + function d3_geom_voronoiCloseCells (extent) { + var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end + while (iCell--) { + cell = cells[iCell] + if (!cell || !cell.prepare()) continue + halfEdges = cell.edges + nHalfEdges = halfEdges.length + iHalfEdge = 0 + while (iHalfEdge < nHalfEdges) { + end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y + start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y + if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) { + halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? { + x: x0, + y: abs(x2 - x0) < ε ? y2 : y1 + } : abs(y3 - y1) < ε && x1 - x3 > ε ? { + x: abs(y2 - y1) < ε ? x2 : x1, + y: y1 + } : abs(x3 - x1) < ε && y3 - y0 > ε ? { + x: x1, + y: abs(x2 - x1) < ε ? y2 : y0 + } : abs(y3 - y0) < ε && x3 - x0 > ε ? { + x: abs(y2 - y0) < ε ? x2 : x0, + y: y0 + } : null), cell.site, null)) + ++nHalfEdges + } + } + } + } + function d3_geom_voronoiHalfEdgeOrder (a, b) { + return b.angle - a.angle + } + function d3_geom_voronoiCircle () { + d3_geom_voronoiRedBlackNode(this) + this.x = this.y = this.arc = this.site = this.cy = null + } + function d3_geom_voronoiAttachCircle (arc) { + var lArc = arc.P, rArc = arc.N + if (!lArc || !rArc) return + var lSite = lArc.site, cSite = arc.site, rSite = rArc.site + if (lSite === rSite) return + var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by + var d = 2 * (ax * cy - ay * cx) + if (d >= -ε2) return + var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by + var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle() + circle.arc = arc + circle.site = cSite + circle.x = x + bx + circle.y = cy + Math.sqrt(x * x + y * y) + circle.cy = cy + arc.circle = circle + var before = null, node = d3_geom_voronoiCircles._ + while (node) { + if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) { + if (node.L) node = node.L; else { + before = node.P + break + } + } else { + if (node.R) node = node.R; else { + before = node + break + } + } + } + d3_geom_voronoiCircles.insert(before, circle) + if (!before) d3_geom_voronoiFirstCircle = circle + } + function d3_geom_voronoiDetachCircle (arc) { + var circle = arc.circle + if (circle) { + if (!circle.P) d3_geom_voronoiFirstCircle = circle.N + d3_geom_voronoiCircles.remove(circle) + d3_geom_voronoiCirclePool.push(circle) + d3_geom_voronoiRedBlackNode(circle) + arc.circle = null + } + } + function d3_geom_voronoiClipEdges (extent) { + var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e + while (i--) { + e = edges[i] + if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) { + e.a = e.b = null + edges.splice(i, 1) + } + } + } + function d3_geom_voronoiConnectEdge (edge, extent) { + var vb = edge.b + if (vb) return true + var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb + if (ry === ly) { + if (fx < x0 || fx >= x1) return + if (lx > rx) { + if (!va) { + va = { + x: fx, + y: y0 + } + } else if (va.y >= y1) return + vb = { + x: fx, + y: y1 + } + } else { + if (!va) { + va = { + x: fx, + y: y1 + } + } else if (va.y < y0) return + vb = { + x: fx, + y: y0 + } + } + } else { + fm = (lx - rx) / (ry - ly) + fb = fy - fm * fx + if (fm < -1 || fm > 1) { + if (lx > rx) { + if (!va) { + va = { + x: (y0 - fb) / fm, + y: y0 + } + } else if (va.y >= y1) return + vb = { + x: (y1 - fb) / fm, + y: y1 + } + } else { + if (!va) { + va = { + x: (y1 - fb) / fm, + y: y1 + } + } else if (va.y < y0) return + vb = { + x: (y0 - fb) / fm, + y: y0 + } + } + } else { + if (ly < ry) { + if (!va) { + va = { + x: x0, + y: fm * x0 + fb + } + } else if (va.x >= x1) return + vb = { + x: x1, + y: fm * x1 + fb + } + } else { + if (!va) { + va = { + x: x1, + y: fm * x1 + fb + } + } else if (va.x < x0) return + vb = { + x: x0, + y: fm * x0 + fb + } + } + } + } + edge.a = va + edge.b = vb + return true + } + function d3_geom_voronoiEdge (lSite, rSite) { + this.l = lSite + this.r = rSite + this.a = this.b = null + } + function d3_geom_voronoiCreateEdge (lSite, rSite, va, vb) { + var edge = new d3_geom_voronoiEdge(lSite, rSite) + d3_geom_voronoiEdges.push(edge) + if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va) + if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb) + d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite)) + d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite)) + return edge + } + function d3_geom_voronoiCreateBorderEdge (lSite, va, vb) { + var edge = new d3_geom_voronoiEdge(lSite, null) + edge.a = va + edge.b = vb + d3_geom_voronoiEdges.push(edge) + return edge + } + function d3_geom_voronoiSetEdgeEnd (edge, lSite, rSite, vertex) { + if (!edge.a && !edge.b) { + edge.a = vertex + edge.l = lSite + edge.r = rSite + } else if (edge.l === rSite) { + edge.b = vertex + } else { + edge.a = vertex + } + } + function d3_geom_voronoiHalfEdge (edge, lSite, rSite) { + var va = edge.a, vb = edge.b + this.edge = edge + this.site = lSite + this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y) + } + d3_geom_voronoiHalfEdge.prototype = { + start: function () { + return this.edge.l === this.site ? this.edge.a : this.edge.b + }, + end: function () { + return this.edge.l === this.site ? this.edge.b : this.edge.a + } + } + function d3_geom_voronoiRedBlackTree () { + this._ = null + } + function d3_geom_voronoiRedBlackNode (node) { + node.U = node.C = node.L = node.R = node.P = node.N = null + } + d3_geom_voronoiRedBlackTree.prototype = { + insert: function (after, node) { + var parent, grandpa, uncle + if (after) { + node.P = after + node.N = after.N + if (after.N) after.N.P = node + after.N = node + if (after.R) { + after = after.R + while (after.L) after = after.L + after.L = node + } else { + after.R = node + } + parent = after + } else if (this._) { + after = d3_geom_voronoiRedBlackFirst(this._) + node.P = null + node.N = after + after.P = after.L = node + parent = after + } else { + node.P = node.N = null + this._ = node + parent = null + } + node.L = node.R = null + node.U = parent + node.C = true + after = node + while (parent && parent.C) { + grandpa = parent.U + if (parent === grandpa.L) { + uncle = grandpa.R + if (uncle && uncle.C) { + parent.C = uncle.C = false + grandpa.C = true + after = grandpa + } else { + if (after === parent.R) { + d3_geom_voronoiRedBlackRotateLeft(this, parent) + after = parent + parent = after.U + } + parent.C = false + grandpa.C = true + d3_geom_voronoiRedBlackRotateRight(this, grandpa) + } + } else { + uncle = grandpa.L + if (uncle && uncle.C) { + parent.C = uncle.C = false + grandpa.C = true + after = grandpa + } else { + if (after === parent.L) { + d3_geom_voronoiRedBlackRotateRight(this, parent) + after = parent + parent = after.U + } + parent.C = false + grandpa.C = true + d3_geom_voronoiRedBlackRotateLeft(this, grandpa) + } + } + parent = after.U + } + this._.C = false + }, + remove: function (node) { + if (node.N) node.N.P = node.P + if (node.P) node.P.N = node.N + node.N = node.P = null + var parent = node.U, sibling, left = node.L, right = node.R, next, red + if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right) + if (parent) { + if (parent.L === node) parent.L = next; else parent.R = next + } else { + this._ = next + } + if (left && right) { + red = next.C + next.C = node.C + next.L = left + left.U = next + if (next !== right) { + parent = next.U + next.U = node.U + node = next.R + parent.L = node + next.R = right + right.U = next + } else { + next.U = parent + parent = next + node = next.R + } + } else { + red = node.C + node = next + } + if (node) node.U = parent + if (red) return + if (node && node.C) { + node.C = false + return + } + do { + if (node === this._) break + if (node === parent.L) { + sibling = parent.R + if (sibling.C) { + sibling.C = false + parent.C = true + d3_geom_voronoiRedBlackRotateLeft(this, parent) + sibling = parent.R + } + if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { + if (!sibling.R || !sibling.R.C) { + sibling.L.C = false + sibling.C = true + d3_geom_voronoiRedBlackRotateRight(this, sibling) + sibling = parent.R + } + sibling.C = parent.C + parent.C = sibling.R.C = false + d3_geom_voronoiRedBlackRotateLeft(this, parent) + node = this._ + break + } + } else { + sibling = parent.L + if (sibling.C) { + sibling.C = false + parent.C = true + d3_geom_voronoiRedBlackRotateRight(this, parent) + sibling = parent.L + } + if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { + if (!sibling.L || !sibling.L.C) { + sibling.R.C = false + sibling.C = true + d3_geom_voronoiRedBlackRotateLeft(this, sibling) + sibling = parent.L + } + sibling.C = parent.C + parent.C = sibling.L.C = false + d3_geom_voronoiRedBlackRotateRight(this, parent) + node = this._ + break + } + } + sibling.C = true + node = parent + parent = parent.U + } while (!node.C) + if (node) node.C = false + } + } + function d3_geom_voronoiRedBlackRotateLeft (tree, node) { + var p = node, q = node.R, parent = p.U + if (parent) { + if (parent.L === p) parent.L = q; else parent.R = q + } else { + tree._ = q + } + q.U = parent + p.U = q + p.R = q.L + if (p.R) p.R.U = p + q.L = p + } + function d3_geom_voronoiRedBlackRotateRight (tree, node) { + var p = node, q = node.L, parent = p.U + if (parent) { + if (parent.L === p) parent.L = q; else parent.R = q + } else { + tree._ = q + } + q.U = parent + p.U = q + p.L = q.R + if (p.L) p.L.U = p + q.R = p + } + function d3_geom_voronoiRedBlackFirst (node) { + while (node.L) node = node.L + return node + } + function d3_geom_voronoi (sites, bbox) { + var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle + d3_geom_voronoiEdges = [] + d3_geom_voronoiCells = new Array(sites.length) + d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree() + d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree() + while (true) { + circle = d3_geom_voronoiFirstCircle + if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) { + if (site.x !== x0 || site.y !== y0) { + d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site) + d3_geom_voronoiAddBeach(site) + x0 = site.x, y0 = site.y + } + site = sites.pop() + } else if (circle) { + d3_geom_voronoiRemoveBeach(circle.arc) + } else { + break + } + } + if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox) + var diagram = { + cells: d3_geom_voronoiCells, + edges: d3_geom_voronoiEdges + } + d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null + return diagram + } + function d3_geom_voronoiVertexOrder (a, b) { + return b.y - a.y || b.x - a.x + } + d3.geom.voronoi = function (points) { + var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent + if (points) return voronoi(points) + function voronoi (data) { + var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1] + d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function (cell, i) { + var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function (e) { + var s = e.start() + return [ s.x, s.y ] + }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [] + polygon.point = data[i] + }) + return polygons + } + function sites (data) { + return data.map(function (d, i) { + return { + x: Math.round(fx(d, i) / ε) * ε, + y: Math.round(fy(d, i) / ε) * ε, + i: i + } + }) + } + voronoi.links = function (data) { + return d3_geom_voronoi(sites(data)).edges.filter(function (edge) { + return edge.l && edge.r + }).map(function (edge) { + return { + source: data[edge.l.i], + target: data[edge.r.i] + } + }) + } + voronoi.triangles = function (data) { + var triangles = [] + d3_geom_voronoi(sites(data)).cells.forEach(function (cell, i) { + var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l + while (++j < m) { + e0 = e1 + s0 = s1 + e1 = edges[j].edge + s1 = e1.l === site ? e1.r : e1.l + if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) { + triangles.push([ data[i], data[s0.i], data[s1.i] ]) + } + } + }) + return triangles + } + voronoi.x = function (_) { + return arguments.length ? (fx = d3_functor(x = _), voronoi) : x + } + voronoi.y = function (_) { + return arguments.length ? (fy = d3_functor(y = _), voronoi) : y + } + voronoi.clipExtent = function (_) { + if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent + clipExtent = _ == null ? d3_geom_voronoiClipExtent : _ + return voronoi + } + voronoi.size = function (_) { + if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1] + return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]) + } + return voronoi + } + var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ] + function d3_geom_voronoiTriangleArea (a, b, c) { + return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y) + } + d3.geom.delaunay = function (vertices) { + return d3.geom.voronoi().triangles(vertices) + } + d3.geom.quadtree = function (points, x1, y1, x2, y2) { + var x = d3_geom_pointX, y = d3_geom_pointY, compat + if (compat = arguments.length) { + x = d3_geom_quadtreeCompatX + y = d3_geom_quadtreeCompatY + if (compat === 3) { + y2 = y1 + x2 = x1 + y1 = x1 = 0 + } + return quadtree(points) + } + function quadtree (data) { + var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_ + if (x1 != null) { + x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2 + } else { + x2_ = y2_ = -(x1_ = y1_ = Infinity) + xs = [], ys = [] + n = data.length + if (compat) { + for (i = 0; i < n; ++i) { + d = data[i] + if (d.x < x1_) x1_ = d.x + if (d.y < y1_) y1_ = d.y + if (d.x > x2_) x2_ = d.x + if (d.y > y2_) y2_ = d.y + xs.push(d.x) + ys.push(d.y) + } + } else { + for (i = 0; i < n; ++i) { + var x_ = +fx(d = data[i], i), y_ = +fy(d, i) + if (x_ < x1_) x1_ = x_ + if (y_ < y1_) y1_ = y_ + if (x_ > x2_) x2_ = x_ + if (y_ > y2_) y2_ = y_ + xs.push(x_) + ys.push(y_) + } + } + } + var dx = x2_ - x1_, dy = y2_ - y1_ + if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy + function insert (n, d, x, y, x1, y1, x2, y2) { + if (isNaN(x) || isNaN(y)) return + if (n.leaf) { + var nx = n.x, ny = n.y + if (nx != null) { + if (abs(nx - x) + abs(ny - y) < 0.01) { + insertChild(n, d, x, y, x1, y1, x2, y2) + } else { + var nPoint = n.point + n.x = n.y = n.point = null + insertChild(n, nPoint, nx, ny, x1, y1, x2, y2) + insertChild(n, d, x, y, x1, y1, x2, y2) + } + } else { + n.x = x, n.y = y, n.point = d + } + } else { + insertChild(n, d, x, y, x1, y1, x2, y2) + } + } + function insertChild (n, d, x, y, x1, y1, x2, y2) { + var xm = (x1 + x2) * 0.5, ym = (y1 + y2) * 0.5, right = x >= xm, below = y >= ym, i = below << 1 | right + n.leaf = false + n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()) + if (right) x1 = xm; else x2 = xm + if (below) y1 = ym; else y2 = ym + insert(n, d, x, y, x1, y1, x2, y2) + } + var root = d3_geom_quadtreeNode() + root.add = function (d) { + insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_) + } + root.visit = function (f) { + d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_) + } + root.find = function (point) { + return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_) + } + i = -1 + if (x1 == null) { + while (++i < n) { + insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_) + } + --i + } else data.forEach(root.add) + xs = ys = data = d = null + return root + } + quadtree.x = function (_) { + return arguments.length ? (x = _, quadtree) : x + } + quadtree.y = function (_) { + return arguments.length ? (y = _, quadtree) : y + } + quadtree.extent = function (_) { + if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ] + if (_ == null) x1 = y1 = x2 = y2 = null; else { + x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], + y2 = +_[1][1] + } + return quadtree + } + quadtree.size = function (_) { + if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ] + if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1] + return quadtree + } + return quadtree + } + function d3_geom_quadtreeCompatX (d) { + return d.x + } + function d3_geom_quadtreeCompatY (d) { + return d.y + } + function d3_geom_quadtreeNode () { + return { + leaf: true, + nodes: [], + point: null, + x: null, + y: null + } + } + function d3_geom_quadtreeVisit (f, node, x1, y1, x2, y2) { + if (!f(node, x1, y1, x2, y2)) { + var sx = (x1 + x2) * 0.5, sy = (y1 + y2) * 0.5, children = node.nodes + if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy) + if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy) + if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2) + if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2) + } + } + function d3_geom_quadtreeFind (root, x, y, x0, y0, x3, y3) { + var minDistance2 = Infinity, closestPoint; + (function find (node, x1, y1, x2, y2) { + if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return + if (point = node.point) { + var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy + if (distance2 < minDistance2) { + var distance = Math.sqrt(minDistance2 = distance2) + x0 = x - distance, y0 = y - distance + x3 = x + distance, y3 = y + distance + closestPoint = point + } + } + var children = node.nodes, xm = (x1 + x2) * 0.5, ym = (y1 + y2) * 0.5, right = x >= xm, below = y >= ym + for (var i = below << 1 | right, j = i + 4; i < j; ++i) { + if (node = children[i & 3]) { + switch (i & 3) { + case 0: + find(node, x1, y1, xm, ym) + break + + case 1: + find(node, xm, y1, x2, ym) + break + + case 2: + find(node, x1, ym, xm, y2) + break + + case 3: + find(node, xm, ym, x2, y2) + break + } + } + } + })(root, x0, y0, x3, y3) + return closestPoint + } + d3.interpolateRgb = d3_interpolateRgb + function d3_interpolateRgb (a, b) { + a = d3.rgb(a) + b = d3.rgb(b) + var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab + return function (t) { + return '#' + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t)) + } + } + d3.interpolateObject = d3_interpolateObject + function d3_interpolateObject (a, b) { + var i = {}, c = {}, k + for (k in a) { + if (k in b) { + i[k] = d3_interpolate(a[k], b[k]) + } else { + c[k] = a[k] + } + } + for (k in b) { + if (!(k in a)) { + c[k] = b[k] + } + } + return function (t) { + for (k in i) c[k] = i[k](t) + return c + } + } + d3.interpolateNumber = d3_interpolateNumber + function d3_interpolateNumber (a, b) { + a = +a, b = +b + return function (t) { + return a * (1 - t) + b * t + } + } + d3.interpolateString = d3_interpolateString + function d3_interpolateString (a, b) { + var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [] + a = a + '', b = b + '' + while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) { + if ((bs = bm.index) > bi) { + bs = b.slice(bi, bs) + if (s[i]) s[i] += bs; else s[++i] = bs + } + if ((am = am[0]) === (bm = bm[0])) { + if (s[i]) s[i] += bm; else s[++i] = bm } else { - interpolate(current.x, current.n.x, 1, listener); + s[++i] = null + q.push({ + i: i, + x: d3_interpolateNumber(am, bm) + }) + } + bi = d3_interpolate_numberB.lastIndex + } + if (bi < b.length) { + bs = b.slice(bi) + if (s[i]) s[i] += bs; else s[++i] = bs + } + return s.length < 2 ? q[0] ? (b = q[0].x, function (t) { + return b(t) + '' + }) : function () { + return b + } : (b = q.length, function (t) { + for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t) + return s.join('') + }) + } + var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, 'g') + d3.interpolate = d3_interpolate + function d3_interpolate (a, b) { + var i = d3.interpolators.length, f + while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; + return f + } + d3.interpolators = [ function (a, b) { + var t = typeof b + return (t === 'string' ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\(|hsl\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === 'object' && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b) + } ] + d3.interpolateArray = d3_interpolateArray + function d3_interpolateArray (a, b) { + var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i + for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i])) + for (;i < na; ++i) c[i] = a[i] + for (;i < nb; ++i) c[i] = b[i] + return function (t) { + for (i = 0; i < n0; ++i) c[i] = x[i](t) + return c + } + } + var d3_ease_default = function () { + return d3_identity + } + var d3_ease = d3.map({ + linear: d3_ease_default, + poly: d3_ease_poly, + quad: function () { + return d3_ease_quad + }, + cubic: function () { + return d3_ease_cubic + }, + sin: function () { + return d3_ease_sin + }, + exp: function () { + return d3_ease_exp + }, + circle: function () { + return d3_ease_circle + }, + elastic: d3_ease_elastic, + back: d3_ease_back, + bounce: function () { + return d3_ease_bounce + } + }) + var d3_ease_mode = d3.map({ + 'in': d3_identity, + out: d3_ease_reverse, + 'in-out': d3_ease_reflect, + 'out-in': function (f) { + return d3_ease_reflect(d3_ease_reverse(f)) + } + }) + d3.ease = function (name) { + var i = name.indexOf('-'), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : 'in' + t = d3_ease.get(t) || d3_ease_default + m = d3_ease_mode.get(m) || d3_identity + return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))) + } + function d3_ease_clamp (f) { + return function (t) { + return t <= 0 ? 0 : t >= 1 ? 1 : f(t) + } + } + function d3_ease_reverse (f) { + return function (t) { + return 1 - f(1 - t) + } + } + function d3_ease_reflect (f) { + return function (t) { + return 0.5 * (t < 0.5 ? f(2 * t) : 2 - f(2 - 2 * t)) + } + } + function d3_ease_quad (t) { + return t * t + } + function d3_ease_cubic (t) { + return t * t * t + } + function d3_ease_cubicInOut (t) { + if (t <= 0) return 0 + if (t >= 1) return 1 + var t2 = t * t, t3 = t2 * t + return 4 * (t < 0.5 ? t3 : 3 * (t - t2) + t3 - 0.75) + } + function d3_ease_poly (e) { + return function (t) { + return Math.pow(t, e) + } + } + function d3_ease_sin (t) { + return 1 - Math.cos(t * halfπ) + } + function d3_ease_exp (t) { + return Math.pow(2, 10 * (t - 1)) + } + function d3_ease_circle (t) { + return 1 - Math.sqrt(1 - t * t) + } + function d3_ease_elastic (a, p) { + var s + if (arguments.length < 2) p = 0.45 + if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4 + return function (t) { + return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p) + } + } + function d3_ease_back (s) { + if (!s) s = 1.70158 + return function (t) { + return t * t * ((s + 1) * t - s) + } + } + function d3_ease_bounce (t) { + return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375 + } + d3.interpolateHcl = d3_interpolateHcl + function d3_interpolateHcl (a, b) { + a = d3.hcl(a) + b = d3.hcl(b) + var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al + if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac + if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360 + return function (t) { + return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + '' + } + } + d3.interpolateHsl = d3_interpolateHsl + function d3_interpolateHsl (a, b) { + a = d3.hsl(a) + b = d3.hsl(b) + var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al + if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as + if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360 + return function (t) { + return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + '' + } + } + d3.interpolateLab = d3_interpolateLab + function d3_interpolateLab (a, b) { + a = d3.lab(a) + b = d3.lab(b) + var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab + return function (t) { + return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + '' + } + } + d3.interpolateRound = d3_interpolateRound + function d3_interpolateRound (a, b) { + b -= a + return function (t) { + return Math.round(a + b * t) + } + } + d3.transform = function (string) { + var g = d3_document.createElementNS(d3.ns.prefix.svg, 'g') + return (d3.transform = function (string) { + if (string != null) { + g.setAttribute('transform', string) + var t = g.transform.baseVal.consolidate() } - current = current.n; + return new d3_transform(t ? t.matrix : d3_transformIdentity) + })(string) + } + function d3_transform (m) { + var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0 + if (r0[0] * r1[1] < r1[0] * r0[1]) { + r0[0] *= -1 + r0[1] *= -1 + kx *= -1 + kz *= -1 + } + this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees + this.translate = [ m.e, m.f ] + this.scale = [ kx, ky ] + this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0 + } + d3_transform.prototype.toString = function () { + return 'translate(' + this.translate + ')rotate(' + this.rotate + ')skewX(' + this.skew + ')scale(' + this.scale + ')' + } + function d3_transformDot (a, b) { + return a[0] * b[0] + a[1] * b[1] + } + function d3_transformNormalize (a) { + var k = Math.sqrt(d3_transformDot(a, a)) + if (k) { + a[0] /= k + a[1] /= k + } + return k + } + function d3_transformCombine (a, b, k) { + a[0] += k * b[0] + a[1] += k * b[1] + return a + } + var d3_transformIdentity = { + a: 1, + b: 0, + c: 0, + d: 1, + e: 0, + f: 0 + } + d3.interpolateTransform = d3_interpolateTransform + function d3_interpolateTransform (a, b) { + var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale + if (ta[0] != tb[0] || ta[1] != tb[1]) { + s.push('translate(', null, ',', null, ')') + q.push({ + i: 1, + x: d3_interpolateNumber(ta[0], tb[0]) + }, { + i: 3, + x: d3_interpolateNumber(ta[1], tb[1]) + }) + } else if (tb[0] || tb[1]) { + s.push('translate(' + tb + ')') } else { - if (isSubject) { - points = current.p.z; - for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.p.x, -1, listener); - } - current = current.p; + s.push('') } - current = current.o; - points = current.z; - isSubject = !isSubject; - } while (!current.v); - listener.lineEnd(); - } - } - function d3_geo_clipPolygonLinkCircular(array) { - if (!(n = array.length)) return; - var n, i = 0, a = array[0], b; - while (++i < n) { - a.n = b = array[i]; - b.p = a; - a = b; - } - a.n = b = array[0]; - b.p = a; - } - function d3_geo_clipPolygonIntersection(point, points, other, entry) { - this.x = point; - this.z = points; - this.o = other; - this.e = entry; - this.v = false; - this.n = this.p = null; - } - function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) { - return function(rotate, listener) { - var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]); - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - clip.point = pointRing; - clip.lineStart = ringStart; - clip.lineEnd = ringEnd; - segments = []; - polygon = []; - }, - polygonEnd: function() { - clip.point = point; - clip.lineStart = lineStart; - clip.lineEnd = lineEnd; - segments = d3.merge(segments); - var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon); - if (segments.length) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener); - } else if (clipStartInside) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - } - if (polygonStarted) listener.polygonEnd(), polygonStarted = false; - segments = polygon = null; - }, - sphere: function() { - listener.polygonStart(); - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - listener.polygonEnd(); + if (ra != rb) { + if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360 + q.push({ + i: s.push(s.pop() + 'rotate(', null, ')') - 2, + x: d3_interpolateNumber(ra, rb) + }) + } else if (rb) { + s.push(s.pop() + 'rotate(' + rb + ')') } - }; - function point(λ, φ) { - var point = rotate(λ, φ); - if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ); - } - function pointLine(λ, φ) { - var point = rotate(λ, φ); - line.point(point[0], point[1]); - } - function lineStart() { - clip.point = pointLine; - line.lineStart(); - } - function lineEnd() { - clip.point = point; - line.lineEnd(); - } - var segments; - var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring; - function pointRing(λ, φ) { - ring.push([ λ, φ ]); - var point = rotate(λ, φ); - ringListener.point(point[0], point[1]); - } - function ringStart() { - ringListener.lineStart(); - ring = []; - } - function ringEnd() { - pointRing(ring[0][0], ring[0][1]); - ringListener.lineEnd(); - var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length; - ring.pop(); - polygon.push(ring); - ring = null; - if (!n) return; - if (clean & 1) { - segment = ringSegments[0]; - var n = segment.length - 1, i = -1, point; - if (n > 0) { - if (!polygonStarted) listener.polygonStart(), polygonStarted = true; - listener.lineStart(); - while (++i < n) listener.point((point = segment[i])[0], point[1]); - listener.lineEnd(); - } - return; - } - if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); - segments.push(ringSegments.filter(d3_geo_clipSegmentLength1)); - } - return clip; - }; - } - function d3_geo_clipSegmentLength1(segment) { - return segment.length > 1; - } - function d3_geo_clipBufferListener() { - var lines = [], line; - return { - lineStart: function() { - lines.push(line = []); - }, - point: function(λ, φ) { - line.push([ λ, φ ]); - }, - lineEnd: d3_noop, - buffer: function() { - var buffer = lines; - lines = []; - line = null; - return buffer; - }, - rejoin: function() { - if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); - } - }; - } - function d3_geo_clipSort(a, b) { - return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]); - } - var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]); - function d3_geo_clipAntimeridianLine(listener) { - var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean; - return { - lineStart: function() { - listener.lineStart(); - clean = 1; - }, - point: function(λ1, φ1) { - var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0); - if (abs(dλ - π) < ε) { - listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - listener.point(λ1, φ0); - clean = 0; - } else if (sλ0 !== sλ1 && dλ >= π) { - if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε; - if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε; - φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - clean = 0; - } - listener.point(λ0 = λ1, φ0 = φ1); - sλ0 = sλ1; - }, - lineEnd: function() { - listener.lineEnd(); - λ0 = φ0 = NaN; - }, - clean: function() { - return 2 - clean; - } - }; - } - function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) { - var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1); - return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2; - } - function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) { - var φ; - if (from == null) { - φ = direction * halfπ; - listener.point(-π, φ); - listener.point(0, φ); - listener.point(π, φ); - listener.point(π, 0); - listener.point(π, -φ); - listener.point(0, -φ); - listener.point(-π, -φ); - listener.point(-π, 0); - listener.point(-π, φ); - } else if (abs(from[0] - to[0]) > ε) { - var s = from[0] < to[0] ? π : -π; - φ = direction * s / 2; - listener.point(-s, φ); - listener.point(0, φ); - listener.point(s, φ); - } else { - listener.point(to[0], to[1]); - } - } - function d3_geo_pointInPolygon(point, polygon) { - var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0; - d3_geo_areaRingSum.reset(); - for (var i = 0, n = polygon.length; i < n; ++i) { - var ring = polygon[i], m = ring.length; - if (!m) continue; - var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1; - while (true) { - if (j === m) j = 0; - point = ring[j]; - var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ; - d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ))); - polarAngle += antimeridian ? dλ + sdλ * τ : dλ; - if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) { - var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point)); - d3_geo_cartesianNormalize(arc); - var intersection = d3_geo_cartesianCross(meridianNormal, arc); - d3_geo_cartesianNormalize(intersection); - var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]); - if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) { - winding += antimeridian ^ dλ >= 0 ? 1 : -1; - } - } - if (!j++) break; - λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point; - } - } - return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1; - } - function d3_geo_clipCircle(radius) { - var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians); - return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]); - function visible(λ, φ) { - return Math.cos(λ) * Math.cos(φ) > cr; - } - function clipLine(listener) { - var point0, c0, v0, v00, clean; - return { - lineStart: function() { - v00 = v0 = false; - clean = 1; - }, - point: function(λ, φ) { - var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0; - if (!point0 && (v00 = v0 = v)) listener.lineStart(); - if (v !== v0) { - point2 = intersect(point0, point1); - if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) { - point1[0] += ε; - point1[1] += ε; - v = visible(point1[0], point1[1]); - } - } - if (v !== v0) { - clean = 0; - if (v) { - listener.lineStart(); - point2 = intersect(point1, point0); - listener.point(point2[0], point2[1]); - } else { - point2 = intersect(point0, point1); - listener.point(point2[0], point2[1]); - listener.lineEnd(); - } - point0 = point2; - } else if (notHemisphere && point0 && smallRadius ^ v) { - var t; - if (!(c & c0) && (t = intersect(point1, point0, true))) { - clean = 0; - if (smallRadius) { - listener.lineStart(); - listener.point(t[0][0], t[0][1]); - listener.point(t[1][0], t[1][1]); - listener.lineEnd(); - } else { - listener.point(t[1][0], t[1][1]); - listener.lineEnd(); - listener.lineStart(); - listener.point(t[0][0], t[0][1]); + if (wa != wb) { + q.push({ + i: s.push(s.pop() + 'skewX(', null, ')') - 2, + x: d3_interpolateNumber(wa, wb) + }) + } else if (wb) { + s.push(s.pop() + 'skewX(' + wb + ')') + } + if (ka[0] != kb[0] || ka[1] != kb[1]) { + n = s.push(s.pop() + 'scale(', null, ',', null, ')') + q.push({ + i: n - 4, + x: d3_interpolateNumber(ka[0], kb[0]) + }, { + i: n - 2, + x: d3_interpolateNumber(ka[1], kb[1]) + }) + } else if (kb[0] != 1 || kb[1] != 1) { + s.push(s.pop() + 'scale(' + kb + ')') + } + n = q.length + return function (t) { + var i = -1, o + while (++i < n) s[(o = q[i]).i] = o.x(t) + return s.join('') + } + } + function d3_uninterpolateNumber (a, b) { + b = (b -= a = +a) || 1 / b + return function (x) { + return (x - a) / b + } + } + function d3_uninterpolateClamp (a, b) { + b = (b -= a = +a) || 1 / b + return function (x) { + return Math.max(0, Math.min(1, (x - a) / b)) + } + } + d3.layout = {} + d3.layout.bundle = function () { + return function (links) { + var paths = [], i = -1, n = links.length + while (++i < n) paths.push(d3_layout_bundlePath(links[i])) + return paths + } + } + function d3_layout_bundlePath (link) { + var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ] + while (start !== lca) { + start = start.parent + points.push(start) + } + var k = points.length + while (end !== lca) { + points.splice(k, 0, end) + end = end.parent + } + return points + } + function d3_layout_bundleAncestors (node) { + var ancestors = [], parent = node.parent + while (parent != null) { + ancestors.push(node) + node = parent + parent = parent.parent + } + ancestors.push(node) + return ancestors + } + function d3_layout_bundleLeastCommonAncestor (a, b) { + if (a === b) return a + var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null + while (aNode === bNode) { + sharedNode = aNode + aNode = aNodes.pop() + bNode = bNodes.pop() + } + return sharedNode + } + d3.layout.chord = function () { + var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords + function relayout () { + var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j + chords = [] + groups = [] + k = 0, i = -1 + while (++i < n) { + x = 0, j = -1 + while (++j < n) { + x += matrix[i][j] + } + groupSums.push(x) + subgroupIndex.push(d3.range(n)) + k += x + } + if (sortGroups) { + groupIndex.sort(function (a, b) { + return sortGroups(groupSums[a], groupSums[b]) + }) + } + if (sortSubgroups) { + subgroupIndex.forEach(function (d, i) { + d.sort(function (a, b) { + return sortSubgroups(matrix[i][a], matrix[i][b]) + }) + }) + } + k = (τ - padding * n) / k + x = 0, i = -1 + while (++i < n) { + x0 = x, j = -1 + while (++j < n) { + var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k + subgroups[di + '-' + dj] = { + index: di, + subindex: dj, + startAngle: a0, + endAngle: a1, + value: v } } + groups[di] = { + index: di, + startAngle: x0, + endAngle: x, + value: (x - x0) / k + } + x += padding } - if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) { - listener.point(point1[0], point1[1]); + i = -1 + while (++i < n) { + j = i - 1 + while (++j < n) { + var source = subgroups[i + '-' + j], target = subgroups[j + '-' + i] + if (source.value || target.value) { + chords.push(source.value < target.value ? { + source: target, + target: source + } : { + source: source, + target: target + }) + } + } } - point0 = point1, v0 = v, c0 = c; - }, - lineEnd: function() { - if (v0) listener.lineEnd(); - point0 = null; - }, - clean: function() { - return clean | (v00 && v0) << 1; + if (sortChords) resort() } - }; - } - function intersect(a, b, two) { - var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b); - var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2; - if (!determinant) return !two && a; - var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2); - d3_geo_cartesianAdd(A, B); - var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1); - if (t2 < 0) return; - var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu); - d3_geo_cartesianAdd(q, A); - q = d3_geo_spherical(q); - if (!two) return q; - var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z; - if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z; - var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε; - if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z; - if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) { - var q1 = d3_geo_cartesianScale(u, (-w + t) / uu); - d3_geo_cartesianAdd(q1, A); - return [ q, d3_geo_spherical(q1) ]; - } - } - function code(λ, φ) { - var r = smallRadius ? radius : π - radius, code = 0; - if (λ < -r) code |= 1; else if (λ > r) code |= 2; - if (φ < -r) code |= 4; else if (φ > r) code |= 8; - return code; - } - } - function d3_geom_clipLine(x0, y0, x1, y1) { - return function(line) { - var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r; - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - if (t0 > 0) line.a = { - x: ax + t0 * dx, - y: ay + t0 * dy - }; - if (t1 < 1) line.b = { - x: ax + t1 * dx, - y: ay + t1 * dy - }; - return line; - }; - } - var d3_geo_clipExtentMAX = 1e9; - d3.geo.clipExtent = function() { - var x0, y0, x1, y1, stream, clip, clipExtent = { - stream: function(output) { - if (stream) stream.valid = false; - stream = clip(output); - stream.valid = true; - return stream; - }, - extent: function(_) { - if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; - clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]); - if (stream) stream.valid = false, stream = null; - return clipExtent; - } - }; - return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]); - }; - function d3_geo_clipExtent(x0, y0, x1, y1) { - return function(listener) { - var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring; - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - listener = bufferListener; - segments = []; - polygon = []; - clean = true; - }, - polygonEnd: function() { - listener = listener_; - segments = d3.merge(segments); - var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length; - if (inside || visible) { - listener.polygonStart(); - if (inside) { - listener.lineStart(); - interpolate(null, null, 1, listener); - listener.lineEnd(); - } - if (visible) { - d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener); + function resort () { + chords.sort(function (a, b) { + return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2) + }) + } + chord.matrix = function (x) { + if (!arguments.length) return matrix + n = (matrix = x) && matrix.length + chords = groups = null + return chord + } + chord.padding = function (x) { + if (!arguments.length) return padding + padding = x + chords = groups = null + return chord + } + chord.sortGroups = function (x) { + if (!arguments.length) return sortGroups + sortGroups = x + chords = groups = null + return chord + } + chord.sortSubgroups = function (x) { + if (!arguments.length) return sortSubgroups + sortSubgroups = x + chords = null + return chord + } + chord.sortChords = function (x) { + if (!arguments.length) return sortChords + sortChords = x + if (chords) resort() + return chord + } + chord.chords = function () { + if (!chords) relayout() + return chords + } + chord.groups = function () { + if (!groups) relayout() + return groups + } + return chord + } + d3.layout.force = function () { + var force = {}, event = d3.dispatch('start', 'tick', 'end'), size = [ 1, 1 ], drag, alpha, friction = 0.9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = 0.1, theta2 = 0.64, nodes = [], links = [], distances, strengths, charges + function repulse (node) { + return function (quad, x1, _, x2) { + if (quad.point !== node) { + var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy + if (dw * dw / theta2 < dn) { + if (dn < chargeDistance2) { + var k = quad.charge / dn + node.px -= dx * k + node.py -= dy * k + } + return true + } + if (quad.point && dn && dn < chargeDistance2) { + var k = quad.pointCharge / dn + node.px -= dx * k + node.py -= dy * k + } } - listener.polygonEnd(); + return !quad.charge } - segments = polygon = ring = null; } - }; - function insidePolygon(p) { - var wn = 0, n = polygon.length, y = p[1]; - for (var i = 0; i < n; ++i) { - for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) { - b = v[j]; - if (a[1] <= y) { - if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn; + force.tick = function () { + if ((alpha *= 0.99) < 0.005) { + event.end({ + type: 'end', + alpha: alpha = 0 + }) + return true + } + var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y + for (i = 0; i < m; ++i) { + o = links[i] + s = o.source + t = o.target + x = t.x - s.x + y = t.y - s.y + if (l = x * x + y * y) { + l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l + x *= l + y *= l + t.x -= x * (k = s.weight / (t.weight + s.weight)) + t.y -= y * k + s.x += x * (k = 1 - k) + s.y += y * k + } + } + if (k = alpha * gravity) { + x = size[0] / 2 + y = size[1] / 2 + i = -1 + if (k) { + while (++i < n) { + o = nodes[i] + o.x += (x - o.x) * k + o.y += (y - o.y) * k + } + } + } + if (charge) { + d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges) + i = -1 + while (++i < n) { + if (!(o = nodes[i]).fixed) { + q.visit(repulse(o)) + } + } + } + i = -1 + while (++i < n) { + o = nodes[i] + if (o.fixed) { + o.x = o.px + o.y = o.py } else { - if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn; + o.x -= (o.px - (o.px = o.x)) * friction + o.y -= (o.py - (o.py = o.y)) * friction } - a = b; } + event.tick({ + type: 'tick', + alpha: alpha + }) } - return wn !== 0; - } - function interpolate(from, to, direction, listener) { - var a = 0, a1 = 0; - if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) { - do { - listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); - } while ((a = (a + direction + 4) % 4) !== a1); - } else { - listener.point(to[0], to[1]); - } - } - function pointVisible(x, y) { - return x0 <= x && x <= x1 && y0 <= y && y <= y1; - } - function point(x, y) { - if (pointVisible(x, y)) listener.point(x, y); - } - var x__, y__, v__, x_, y_, v_, first, clean; - function lineStart() { - clip.point = linePoint; - if (polygon) polygon.push(ring = []); - first = true; - v_ = false; - x_ = y_ = NaN; - } - function lineEnd() { - if (segments) { - linePoint(x__, y__); - if (v__ && v_) bufferListener.rejoin(); - segments.push(bufferListener.buffer()); - } - clip.point = point; - if (v_) listener.lineEnd(); - } - function linePoint(x, y) { - x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x)); - y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y)); - var v = pointVisible(x, y); - if (polygon) ring.push([ x, y ]); - if (first) { - x__ = x, y__ = y, v__ = v; - first = false; - if (v) { - listener.lineStart(); - listener.point(x, y); + force.nodes = function (x) { + if (!arguments.length) return nodes + nodes = x + return force + } + force.links = function (x) { + if (!arguments.length) return links + links = x + return force + } + force.size = function (x) { + if (!arguments.length) return size + size = x + return force + } + force.linkDistance = function (x) { + if (!arguments.length) return linkDistance + linkDistance = typeof x === 'function' ? x : +x + return force + } + force.distance = force.linkDistance + force.linkStrength = function (x) { + if (!arguments.length) return linkStrength + linkStrength = typeof x === 'function' ? x : +x + return force + } + force.friction = function (x) { + if (!arguments.length) return friction + friction = +x + return force + } + force.charge = function (x) { + if (!arguments.length) return charge + charge = typeof x === 'function' ? x : +x + return force + } + force.chargeDistance = function (x) { + if (!arguments.length) return Math.sqrt(chargeDistance2) + chargeDistance2 = x * x + return force + } + force.gravity = function (x) { + if (!arguments.length) return gravity + gravity = +x + return force + } + force.theta = function (x) { + if (!arguments.length) return Math.sqrt(theta2) + theta2 = x * x + return force + } + force.alpha = function (x) { + if (!arguments.length) return alpha + x = +x + if (alpha) { + if (x > 0) alpha = x; else alpha = 0 + } else if (x > 0) { + event.start({ + type: 'start', + alpha: alpha = x + }) + d3.timer(force.tick) } - } else { - if (v && v_) listener.point(x, y); else { - var l = { - a: { - x: x_, - y: y_ - }, - b: { - x: x, - y: y + return force + } + force.start = function () { + var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o + for (i = 0; i < n; ++i) { + (o = nodes[i]).index = i + o.weight = 0 + } + for (i = 0; i < m; ++i) { + o = links[i] + if (typeof o.source === 'number') o.source = nodes[o.source] + if (typeof o.target === 'number') o.target = nodes[o.target] + ++o.source.weight + ++o.target.weight + } + for (i = 0; i < n; ++i) { + o = nodes[i] + if (isNaN(o.x)) o.x = position('x', w) + if (isNaN(o.y)) o.y = position('y', h) + if (isNaN(o.px)) o.px = o.x + if (isNaN(o.py)) o.py = o.y + } + distances = [] + if (typeof linkDistance === 'function') for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance + strengths = [] + if (typeof linkStrength === 'function') for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength + charges = [] + if (typeof charge === 'function') for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge + function position (dimension, size) { + if (!neighbors) { + neighbors = new Array(n) + for (j = 0; j < n; ++j) { + neighbors[j] = [] } - }; - if (clipLine(l)) { - if (!v_) { - listener.lineStart(); - listener.point(l.a.x, l.a.y); + for (j = 0; j < m; ++j) { + var o = links[j] + neighbors[o.source.index].push(o.target) + neighbors[o.target.index].push(o.source) } - listener.point(l.b.x, l.b.y); - if (!v) listener.lineEnd(); - clean = false; - } else if (v) { - listener.lineStart(); - listener.point(x, y); - clean = false; } + var candidates = neighbors[i], j = -1, l = candidates.length, x + while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x + return Math.random() * size + } + return force.resume() + } + force.resume = function () { + return force.alpha(0.1) + } + force.stop = function () { + return force.alpha(0) + } + force.drag = function () { + if (!drag) drag = d3.behavior.drag().origin(d3_identity).on('dragstart.force', d3_layout_forceDragstart).on('drag.force', dragmove).on('dragend.force', d3_layout_forceDragend) + if (!arguments.length) return drag + this.on('mouseover.force', d3_layout_forceMouseover).on('mouseout.force', d3_layout_forceMouseout).call(drag) + } + function dragmove (d) { + d.px = d3.event.x, d.py = d3.event.y + force.resume() + } + return d3.rebind(force, event, 'on') + } + function d3_layout_forceDragstart (d) { + d.fixed |= 2 + } + function d3_layout_forceDragend (d) { + d.fixed &= ~6 + } + function d3_layout_forceMouseover (d) { + d.fixed |= 4 + d.px = d.x, d.py = d.y + } + function d3_layout_forceMouseout (d) { + d.fixed &= ~4 + } + function d3_layout_forceAccumulate (quad, alpha, charges) { + var cx = 0, cy = 0 + quad.charge = 0 + if (!quad.leaf) { + var nodes = quad.nodes, n = nodes.length, i = -1, c + while (++i < n) { + c = nodes[i] + if (c == null) continue + d3_layout_forceAccumulate(c, alpha, charges) + quad.charge += c.charge + cx += c.charge * c.cx + cy += c.charge * c.cy } } - x_ = x, y_ = y, v_ = v; - } - return clip; - }; - function corner(p, direction) { - return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2; - } - function compare(a, b) { - return comparePoints(a.x, b.x); - } - function comparePoints(a, b) { - var ca = corner(a, 1), cb = corner(b, 1); - return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0]; - } - } - function d3_geo_conic(projectAt) { - var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1); - p.parallels = function(_) { - if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ]; - return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180); - }; - return p; - } - function d3_geo_conicEqualArea(φ0, φ1) { - var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n; - function forward(λ, φ) { - var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n; - return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = ρ0 - y; - return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ]; - }; - return forward; - } - (d3.geo.conicEqualArea = function() { - return d3_geo_conic(d3_geo_conicEqualArea); - }).raw = d3_geo_conicEqualArea; - d3.geo.albers = function() { - return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070); - }; - d3.geo.albersUsa = function() { - var lower48 = d3.geo.albers(); - var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]); - var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]); - var point, pointStream = { - point: function(x, y) { - point = [ x, y ]; - } - }, lower48Point, alaskaPoint, hawaiiPoint; - function albersUsa(coordinates) { - var x = coordinates[0], y = coordinates[1]; - point = null; - (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y); - return point; - } - albersUsa.invert = function(coordinates) { - var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k; - return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates); - }; - albersUsa.stream = function(stream) { - var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream); - return { - point: function(x, y) { - lower48Stream.point(x, y); - alaskaStream.point(x, y); - hawaiiStream.point(x, y); - }, - sphere: function() { - lower48Stream.sphere(); - alaskaStream.sphere(); - hawaiiStream.sphere(); - }, - lineStart: function() { - lower48Stream.lineStart(); - alaskaStream.lineStart(); - hawaiiStream.lineStart(); - }, - lineEnd: function() { - lower48Stream.lineEnd(); - alaskaStream.lineEnd(); - hawaiiStream.lineEnd(); - }, - polygonStart: function() { - lower48Stream.polygonStart(); - alaskaStream.polygonStart(); - hawaiiStream.polygonStart(); - }, - polygonEnd: function() { - lower48Stream.polygonEnd(); - alaskaStream.polygonEnd(); - hawaiiStream.polygonEnd(); + if (quad.point) { + if (!quad.leaf) { + quad.point.x += Math.random() - 0.5 + quad.point.y += Math.random() - 0.5 + } + var k = alpha * charges[quad.point.index] + quad.charge += quad.pointCharge = k + cx += k * quad.point.x + cy += k * quad.point.y + } + quad.cx = cx / quad.charge + quad.cy = cy / quad.charge + } + var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity + d3.layout.hierarchy = function () { + var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue + function hierarchy (root) { + var stack = [ root ], nodes = [], node + root.depth = 0 + while ((node = stack.pop()) != null) { + nodes.push(node) + if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) { + var n, childs, child + while (--n >= 0) { + stack.push(child = childs[n]) + child.parent = node + child.depth = node.depth + 1 + } + if (value) node.value = 0 + node.children = childs + } else { + if (value) node.value = +value.call(hierarchy, node, node.depth) || 0 + delete node.children + } + } + d3_layout_hierarchyVisitAfter(root, function (node) { + var childs, parent + if (sort && (childs = node.children)) childs.sort(sort) + if (value && (parent = node.parent)) parent.value += node.value + }) + return nodes + } + hierarchy.sort = function (x) { + if (!arguments.length) return sort + sort = x + return hierarchy + } + hierarchy.children = function (x) { + if (!arguments.length) return children + children = x + return hierarchy + } + hierarchy.value = function (x) { + if (!arguments.length) return value + value = x + return hierarchy + } + hierarchy.revalue = function (root) { + if (value) { + d3_layout_hierarchyVisitBefore(root, function (node) { + if (node.children) node.value = 0 + }) + d3_layout_hierarchyVisitAfter(root, function (node) { + var parent + if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0 + if (parent = node.parent) parent.value += node.value + }) + } + return root + } + return hierarchy + } + function d3_layout_hierarchyRebind (object, hierarchy) { + d3.rebind(object, hierarchy, 'sort', 'children', 'value') + object.nodes = object + object.links = d3_layout_hierarchyLinks + return object + } + function d3_layout_hierarchyVisitBefore (node, callback) { + var nodes = [ node ] + while ((node = nodes.pop()) != null) { + callback(node) + if ((children = node.children) && (n = children.length)) { + var n, children + while (--n >= 0) nodes.push(children[n]) + } } - }; - }; - albersUsa.precision = function(_) { - if (!arguments.length) return lower48.precision(); - lower48.precision(_); - alaska.precision(_); - hawaii.precision(_); - return albersUsa; - }; - albersUsa.scale = function(_) { - if (!arguments.length) return lower48.scale(); - lower48.scale(_); - alaska.scale(_ * .35); - hawaii.scale(_); - return albersUsa.translate(lower48.translate()); - }; - albersUsa.translate = function(_) { - if (!arguments.length) return lower48.translate(); - var k = lower48.scale(), x = +_[0], y = +_[1]; - lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point; - alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; - hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; - return albersUsa; - }; - return albersUsa.scale(1070); - }; - var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = { - point: d3_noop, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: function() { - d3_geo_pathAreaPolygon = 0; - d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart; - }, - polygonEnd: function() { - d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop; - d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2); - } - }; - function d3_geo_pathAreaRingStart() { - var x00, y00, x0, y0; - d3_geo_pathArea.point = function(x, y) { - d3_geo_pathArea.point = nextPoint; - x00 = x0 = x, y00 = y0 = y; - }; - function nextPoint(x, y) { - d3_geo_pathAreaPolygon += y0 * x - x0 * y; - x0 = x, y0 = y; - } - d3_geo_pathArea.lineEnd = function() { - nextPoint(x00, y00); - }; - } - var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1; - var d3_geo_pathBounds = { - point: d3_geo_pathBoundsPoint, - lineStart: d3_noop, - lineEnd: d3_noop, - polygonStart: d3_noop, - polygonEnd: d3_noop - }; - function d3_geo_pathBoundsPoint(x, y) { - if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x; - if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x; - if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y; - if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y; - } - function d3_geo_pathBuffer() { - var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = []; - var stream = { - point: point, - lineStart: function() { - stream.point = pointLineStart; - }, - lineEnd: lineEnd, - polygonStart: function() { - stream.lineEnd = lineEndPolygon; - }, - polygonEnd: function() { - stream.lineEnd = lineEnd; - stream.point = point; - }, - pointRadius: function(_) { - pointCircle = d3_geo_pathBufferCircle(_); - return stream; - }, - result: function() { - if (buffer.length) { - var result = buffer.join(""); - buffer = []; - return result; - } - } - }; - function point(x, y) { - buffer.push("M", x, ",", y, pointCircle); - } - function pointLineStart(x, y) { - buffer.push("M", x, ",", y); - stream.point = pointLine; - } - function pointLine(x, y) { - buffer.push("L", x, ",", y); - } - function lineEnd() { - stream.point = point; - } - function lineEndPolygon() { - buffer.push("Z"); - } - return stream; - } - function d3_geo_pathBufferCircle(radius) { - return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z"; - } - var d3_geo_pathCentroid = { - point: d3_geo_pathCentroidPoint, - lineStart: d3_geo_pathCentroidLineStart, - lineEnd: d3_geo_pathCentroidLineEnd, - polygonStart: function() { - d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart; - }, - polygonEnd: function() { - d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; - d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart; - d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd; - } - }; - function d3_geo_pathCentroidPoint(x, y) { - d3_geo_centroidX0 += x; - d3_geo_centroidY0 += y; - ++d3_geo_centroidZ0; - } - function d3_geo_pathCentroidLineStart() { - var x0, y0; - d3_geo_pathCentroid.point = function(x, y) { - d3_geo_pathCentroid.point = nextPoint; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - }; - function nextPoint(x, y) { - var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); - d3_geo_centroidX1 += z * (x0 + x) / 2; - d3_geo_centroidY1 += z * (y0 + y) / 2; - d3_geo_centroidZ1 += z; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - } - } - function d3_geo_pathCentroidLineEnd() { - d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; - } - function d3_geo_pathCentroidRingStart() { - var x00, y00, x0, y0; - d3_geo_pathCentroid.point = function(x, y) { - d3_geo_pathCentroid.point = nextPoint; - d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y); - }; - function nextPoint(x, y) { - var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); - d3_geo_centroidX1 += z * (x0 + x) / 2; - d3_geo_centroidY1 += z * (y0 + y) / 2; - d3_geo_centroidZ1 += z; - z = y0 * x - x0 * y; - d3_geo_centroidX2 += z * (x0 + x); - d3_geo_centroidY2 += z * (y0 + y); - d3_geo_centroidZ2 += z * 3; - d3_geo_pathCentroidPoint(x0 = x, y0 = y); - } - d3_geo_pathCentroid.lineEnd = function() { - nextPoint(x00, y00); - }; - } - function d3_geo_pathContext(context) { - var pointRadius = 4.5; - var stream = { - point: point, - lineStart: function() { - stream.point = pointLineStart; - }, - lineEnd: lineEnd, - polygonStart: function() { - stream.lineEnd = lineEndPolygon; - }, - polygonEnd: function() { - stream.lineEnd = lineEnd; - stream.point = point; - }, - pointRadius: function(_) { - pointRadius = _; - return stream; - }, - result: d3_noop - }; - function point(x, y) { - context.moveTo(x + pointRadius, y); - context.arc(x, y, pointRadius, 0, τ); - } - function pointLineStart(x, y) { - context.moveTo(x, y); - stream.point = pointLine; - } - function pointLine(x, y) { - context.lineTo(x, y); - } - function lineEnd() { - stream.point = point; - } - function lineEndPolygon() { - context.closePath(); - } - return stream; - } - function d3_geo_resample(project) { - var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16; - function resample(stream) { - return (maxDepth ? resampleRecursive : resampleNone)(stream); - } - function resampleNone(stream) { - return d3_geo_transformPoint(stream, function(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - }); - } - function resampleRecursive(stream) { - var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0; - var resample = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - stream.polygonStart(); - resample.lineStart = ringStart; - }, - polygonEnd: function() { - stream.polygonEnd(); - resample.lineStart = lineStart; + } + function d3_layout_hierarchyVisitAfter (node, callback) { + var nodes = [ node ], nodes2 = [] + while ((node = nodes.pop()) != null) { + nodes2.push(node) + if ((children = node.children) && (n = children.length)) { + var i = -1, n, children + while (++i < n) nodes.push(children[i]) + } } - }; - function point(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - } - function lineStart() { - x0 = NaN; - resample.point = linePoint; - stream.lineStart(); - } - function linePoint(λ, φ) { - var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ); - resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); - stream.point(x0, y0); - } - function lineEnd() { - resample.point = point; - stream.lineEnd(); - } - function ringStart() { - lineStart(); - resample.point = ringPoint; - resample.lineEnd = ringEnd; - } - function ringPoint(λ, φ) { - linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; - resample.point = linePoint; - } - function ringEnd() { - resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream); - resample.lineEnd = lineEnd; - lineEnd(); - } - return resample; - } - function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) { - var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy; - if (d2 > 4 * δ2 && depth--) { - var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2; - if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { - resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream); - stream.point(x2, y2); - resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream); + while ((node = nodes2.pop()) != null) { + callback(node) } } - } - resample.precision = function(_) { - if (!arguments.length) return Math.sqrt(δ2); - maxDepth = (δ2 = _ * _) > 0 && 16; - return resample; - }; - return resample; - } - d3.geo.path = function() { - var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream; - function path(object) { - if (object) { - if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); - if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream); - d3.geo.stream(object, cacheStream); - } - return contextStream.result(); - } - path.area = function(object) { - d3_geo_pathAreaSum = 0; - d3.geo.stream(object, projectStream(d3_geo_pathArea)); - return d3_geo_pathAreaSum; - }; - path.centroid = function(object) { - d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; - d3.geo.stream(object, projectStream(d3_geo_pathCentroid)); - return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ]; - }; - path.bounds = function(object) { - d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity); - d3.geo.stream(object, projectStream(d3_geo_pathBounds)); - return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ]; - }; - path.projection = function(_) { - if (!arguments.length) return projection; - projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity; - return reset(); - }; - path.context = function(_) { - if (!arguments.length) return context; - contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_); - if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); - return reset(); - }; - path.pointRadius = function(_) { - if (!arguments.length) return pointRadius; - pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); - return path; - }; - function reset() { - cacheStream = null; - return path; - } - return path.projection(d3.geo.albersUsa()).context(null); - }; - function d3_geo_pathProjectStream(project) { - var resample = d3_geo_resample(function(x, y) { - return project([ x * d3_degrees, y * d3_degrees ]); - }); - return function(stream) { - return d3_geo_projectionRadians(resample(stream)); - }; - } - d3.geo.transform = function(methods) { - return { - stream: function(stream) { - var transform = new d3_geo_transform(stream); - for (var k in methods) transform[k] = methods[k]; - return transform; - } - }; - }; - function d3_geo_transform(stream) { - this.stream = stream; - } - d3_geo_transform.prototype = { - point: function(x, y) { - this.stream.point(x, y); - }, - sphere: function() { - this.stream.sphere(); - }, - lineStart: function() { - this.stream.lineStart(); - }, - lineEnd: function() { - this.stream.lineEnd(); - }, - polygonStart: function() { - this.stream.polygonStart(); - }, - polygonEnd: function() { - this.stream.polygonEnd(); - } - }; - function d3_geo_transformPoint(stream, point) { - return { - point: point, - sphere: function() { - stream.sphere(); - }, - lineStart: function() { - stream.lineStart(); - }, - lineEnd: function() { - stream.lineEnd(); - }, - polygonStart: function() { - stream.polygonStart(); - }, - polygonEnd: function() { - stream.polygonEnd(); - } - }; - } - d3.geo.projection = d3_geo_projection; - d3.geo.projectionMutator = d3_geo_projectionMutator; - function d3_geo_projection(project) { - return d3_geo_projectionMutator(function() { - return project; - })(); - } - function d3_geo_projectionMutator(projectAt) { - var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) { - x = project(x, y); - return [ x[0] * k + δx, δy - x[1] * k ]; - }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream; - function projection(point) { - point = projectRotate(point[0] * d3_radians, point[1] * d3_radians); - return [ point[0] * k + δx, δy - point[1] * k ]; - } - function invert(point) { - point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k); - return point && [ point[0] * d3_degrees, point[1] * d3_degrees ]; - } - projection.stream = function(output) { - if (stream) stream.valid = false; - stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output)))); - stream.valid = true; - return stream; - }; - projection.clipAngle = function(_) { - if (!arguments.length) return clipAngle; - preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians); - return invalidate(); - }; - projection.clipExtent = function(_) { - if (!arguments.length) return clipExtent; - clipExtent = _; - postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity; - return invalidate(); - }; - projection.scale = function(_) { - if (!arguments.length) return k; - k = +_; - return reset(); - }; - projection.translate = function(_) { - if (!arguments.length) return [ x, y ]; - x = +_[0]; - y = +_[1]; - return reset(); - }; - projection.center = function(_) { - if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ]; - λ = _[0] % 360 * d3_radians; - φ = _[1] % 360 * d3_radians; - return reset(); - }; - projection.rotate = function(_) { - if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ]; - δλ = _[0] % 360 * d3_radians; - δφ = _[1] % 360 * d3_radians; - δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0; - return reset(); - }; - d3.rebind(projection, projectResample, "precision"); - function reset() { - projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project); - var center = project(λ, φ); - δx = x - center[0] * k; - δy = y + center[1] * k; - return invalidate(); - } - function invalidate() { - if (stream) stream.valid = false, stream = null; - return projection; - } - return function() { - project = projectAt.apply(this, arguments); - projection.invert = project.invert && invert; - return reset(); - }; - } - function d3_geo_projectionRadians(stream) { - return d3_geo_transformPoint(stream, function(x, y) { - stream.point(x * d3_radians, y * d3_radians); - }); - } - function d3_geo_equirectangular(λ, φ) { - return [ λ, φ ]; - } - (d3.geo.equirectangular = function() { - return d3_geo_projection(d3_geo_equirectangular); - }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular; - d3.geo.rotation = function(rotate) { - rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0); - function forward(coordinates) { - coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - } - forward.invert = function(coordinates) { - coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - }; - return forward; - }; - function d3_geo_identityRotation(λ, φ) { - return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; - } - d3_geo_identityRotation.invert = d3_geo_equirectangular; - function d3_geo_rotation(δλ, δφ, δγ) { - return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation; - } - function d3_geo_forwardRotationλ(δλ) { - return function(λ, φ) { - return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; - }; - } - function d3_geo_rotationλ(δλ) { - var rotation = d3_geo_forwardRotationλ(δλ); - rotation.invert = d3_geo_forwardRotationλ(-δλ); - return rotation; - } - function d3_geo_rotationφγ(δφ, δγ) { - var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ); - function rotation(λ, φ) { - var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ; - return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ]; - } - rotation.invert = function(λ, φ) { - var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ; - return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ]; - }; - return rotation; - } - d3.geo.circle = function() { - var origin = [ 0, 0 ], angle, precision = 6, interpolate; - function circle() { - var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = []; - interpolate(null, null, 1, { - point: function(x, y) { - ring.push(x = rotate(x, y)); - x[0] *= d3_degrees, x[1] *= d3_degrees; - } - }); - return { - type: "Polygon", - coordinates: [ ring ] - }; - } - circle.origin = function(x) { - if (!arguments.length) return origin; - origin = x; - return circle; - }; - circle.angle = function(x) { - if (!arguments.length) return angle; - interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians); - return circle; - }; - circle.precision = function(_) { - if (!arguments.length) return precision; - interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians); - return circle; - }; - return circle.angle(90); - }; - function d3_geo_circleInterpolate(radius, precision) { - var cr = Math.cos(radius), sr = Math.sin(radius); - return function(from, to, direction, listener) { - var step = direction * precision; - if (from != null) { - from = d3_geo_circleAngle(cr, from); - to = d3_geo_circleAngle(cr, to); - if (direction > 0 ? from < to : from > to) from += direction * τ; - } else { - from = radius + direction * τ; - to = radius - .5 * step; + function d3_layout_hierarchyChildren (d) { + return d.children } - for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) { - listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]); + function d3_layout_hierarchyValue (d) { + return d.value } - }; - } - function d3_geo_circleAngle(cr, point) { - var a = d3_geo_cartesian(point); - a[0] -= cr; - d3_geo_cartesianNormalize(a); - var angle = d3_acos(-a[1]); - return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI); - } - d3.geo.distance = function(a, b) { - var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t; - return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ); - }; - d3.geo.graticule = function() { - var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5; - function graticule() { - return { - type: "MultiLineString", - coordinates: lines() - }; - } - function lines() { - return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) { - return abs(x % DX) > ε; - }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) { - return abs(y % DY) > ε; - }).map(y)); - } - graticule.lines = function() { - return lines().map(function(coordinates) { - return { - type: "LineString", - coordinates: coordinates - }; - }); - }; - graticule.outline = function() { - return { - type: "Polygon", - coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ] - }; - }; - graticule.extent = function(_) { - if (!arguments.length) return graticule.minorExtent(); - return graticule.majorExtent(_).minorExtent(_); - }; - graticule.majorExtent = function(_) { - if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ]; - X0 = +_[0][0], X1 = +_[1][0]; - Y0 = +_[0][1], Y1 = +_[1][1]; - if (X0 > X1) _ = X0, X0 = X1, X1 = _; - if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; - return graticule.precision(precision); - }; - graticule.minorExtent = function(_) { - if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; - x0 = +_[0][0], x1 = +_[1][0]; - y0 = +_[0][1], y1 = +_[1][1]; - if (x0 > x1) _ = x0, x0 = x1, x1 = _; - if (y0 > y1) _ = y0, y0 = y1, y1 = _; - return graticule.precision(precision); - }; - graticule.step = function(_) { - if (!arguments.length) return graticule.minorStep(); - return graticule.majorStep(_).minorStep(_); - }; - graticule.majorStep = function(_) { - if (!arguments.length) return [ DX, DY ]; - DX = +_[0], DY = +_[1]; - return graticule; - }; - graticule.minorStep = function(_) { - if (!arguments.length) return [ dx, dy ]; - dx = +_[0], dy = +_[1]; - return graticule; - }; - graticule.precision = function(_) { - if (!arguments.length) return precision; - precision = +_; - x = d3_geo_graticuleX(y0, y1, 90); - y = d3_geo_graticuleY(x0, x1, precision); - X = d3_geo_graticuleX(Y0, Y1, 90); - Y = d3_geo_graticuleY(X0, X1, precision); - return graticule; - }; - return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]); - }; - function d3_geo_graticuleX(y0, y1, dy) { - var y = d3.range(y0, y1 - ε, dy).concat(y1); - return function(x) { - return y.map(function(y) { - return [ x, y ]; - }); - }; - } - function d3_geo_graticuleY(x0, x1, dx) { - var x = d3.range(x0, x1 - ε, dx).concat(x1); - return function(y) { - return x.map(function(x) { - return [ x, y ]; - }); - }; - } - function d3_source(d) { - return d.source; - } - function d3_target(d) { - return d.target; - } - d3.geo.greatArc = function() { - var source = d3_source, source_, target = d3_target, target_; - function greatArc() { - return { - type: "LineString", - coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ] - }; - } - greatArc.distance = function() { - return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments)); - }; - greatArc.source = function(_) { - if (!arguments.length) return source; - source = _, source_ = typeof _ === "function" ? null : _; - return greatArc; - }; - greatArc.target = function(_) { - if (!arguments.length) return target; - target = _, target_ = typeof _ === "function" ? null : _; - return greatArc; - }; - greatArc.precision = function() { - return arguments.length ? greatArc : 0; - }; - return greatArc; - }; - d3.geo.interpolate = function(source, target) { - return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians); - }; - function d3_geo_interpolate(x0, y0, x1, y1) { - var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d); - var interpolate = d ? function(t) { - var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1; - return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ]; - } : function() { - return [ x0 * d3_degrees, y0 * d3_degrees ]; - }; - interpolate.distance = d; - return interpolate; - } - d3.geo.length = function(object) { - d3_geo_lengthSum = 0; - d3.geo.stream(object, d3_geo_length); - return d3_geo_lengthSum; - }; - var d3_geo_lengthSum; - var d3_geo_length = { - sphere: d3_noop, - point: d3_noop, - lineStart: d3_geo_lengthLineStart, - lineEnd: d3_noop, - polygonStart: d3_noop, - polygonEnd: d3_noop - }; - function d3_geo_lengthLineStart() { - var λ0, sinφ0, cosφ0; - d3_geo_length.point = function(λ, φ) { - λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ); - d3_geo_length.point = nextPoint; - }; - d3_geo_length.lineEnd = function() { - d3_geo_length.point = d3_geo_length.lineEnd = d3_noop; - }; - function nextPoint(λ, φ) { - var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t); - d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ); - λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ; - } - } - function d3_geo_azimuthal(scale, angle) { - function azimuthal(λ, φ) { - var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ); - return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ]; - } - azimuthal.invert = function(x, y) { - var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c); - return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ]; - }; - return azimuthal; - } - var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) { - return Math.sqrt(2 / (1 + cosλcosφ)); - }, function(ρ) { - return 2 * Math.asin(ρ / 2); - }); - (d3.geo.azimuthalEqualArea = function() { - return d3_geo_projection(d3_geo_azimuthalEqualArea); - }).raw = d3_geo_azimuthalEqualArea; - var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) { - var c = Math.acos(cosλcosφ); - return c && c / Math.sin(c); - }, d3_identity); - (d3.geo.azimuthalEquidistant = function() { - return d3_geo_projection(d3_geo_azimuthalEquidistant); - }).raw = d3_geo_azimuthalEquidistant; - function d3_geo_conicConformal(φ0, φ1) { - var cosφ0 = Math.cos(φ0), t = function(φ) { - return Math.tan(π / 4 + φ / 2); - }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n; - if (!n) return d3_geo_mercator; - function forward(λ, φ) { - if (F > 0) { - if (φ < -halfπ + ε) φ = -halfπ + ε; - } else { - if (φ > halfπ - ε) φ = halfπ - ε; + function d3_layout_hierarchySort (a, b) { + return b.value - a.value } - var ρ = F / Math.pow(t(φ), n); - return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y); - return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ]; - }; - return forward; - } - (d3.geo.conicConformal = function() { - return d3_geo_conic(d3_geo_conicConformal); - }).raw = d3_geo_conicConformal; - function d3_geo_conicEquidistant(φ0, φ1) { - var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0; - if (abs(n) < ε) return d3_geo_equirectangular; - function forward(λ, φ) { - var ρ = G - φ; - return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ]; - } - forward.invert = function(x, y) { - var ρ0_y = G - y; - return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ]; - }; - return forward; - } - (d3.geo.conicEquidistant = function() { - return d3_geo_conic(d3_geo_conicEquidistant); - }).raw = d3_geo_conicEquidistant; - var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) { - return 1 / cosλcosφ; - }, Math.atan); - (d3.geo.gnomonic = function() { - return d3_geo_projection(d3_geo_gnomonic); - }).raw = d3_geo_gnomonic; - function d3_geo_mercator(λ, φ) { - return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ]; - } - d3_geo_mercator.invert = function(x, y) { - return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ]; - }; - function d3_geo_mercatorProjection(project) { - var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto; - m.scale = function() { - var v = scale.apply(m, arguments); - return v === m ? clipAuto ? m.clipExtent(null) : m : v; - }; - m.translate = function() { - var v = translate.apply(m, arguments); - return v === m ? clipAuto ? m.clipExtent(null) : m : v; - }; - m.clipExtent = function(_) { - var v = clipExtent.apply(m, arguments); - if (v === m) { - if (clipAuto = _ == null) { - var k = π * scale(), t = translate(); - clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]); - } - } else if (clipAuto) { - v = null; - } - return v; - }; - return m.clipExtent(null); - } - (d3.geo.mercator = function() { - return d3_geo_mercatorProjection(d3_geo_mercator); - }).raw = d3_geo_mercator; - var d3_geo_orthographic = d3_geo_azimuthal(function() { - return 1; - }, Math.asin); - (d3.geo.orthographic = function() { - return d3_geo_projection(d3_geo_orthographic); - }).raw = d3_geo_orthographic; - var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) { - return 1 / (1 + cosλcosφ); - }, function(ρ) { - return 2 * Math.atan(ρ); - }); - (d3.geo.stereographic = function() { - return d3_geo_projection(d3_geo_stereographic); - }).raw = d3_geo_stereographic; - function d3_geo_transverseMercator(λ, φ) { - return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ]; - } - d3_geo_transverseMercator.invert = function(x, y) { - return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ]; - }; - (d3.geo.transverseMercator = function() { - var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate; - projection.center = function(_) { - return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]); - }; - projection.rotate = function(_) { - return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), - [ _[0], _[1], _[2] - 90 ]); - }; - return rotate([ 0, 0, 90 ]); - }).raw = d3_geo_transverseMercator; - d3.geom = {}; - function d3_geom_pointX(d) { - return d[0]; - } - function d3_geom_pointY(d) { - return d[1]; - } - d3.geom.hull = function(vertices) { - var x = d3_geom_pointX, y = d3_geom_pointY; - if (arguments.length) return hull(vertices); - function hull(data) { - if (data.length < 3) return []; - var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = []; - for (i = 0; i < n; i++) { - points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]); - } - points.sort(d3_geom_hullOrder); - for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]); - var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints); - var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = []; - for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]); - for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]); - return polygon; - } - hull.x = function(_) { - return arguments.length ? (x = _, hull) : x; - }; - hull.y = function(_) { - return arguments.length ? (y = _, hull) : y; - }; - return hull; - }; - function d3_geom_hullUpper(points) { - var n = points.length, hull = [ 0, 1 ], hs = 2; - for (var i = 2; i < n; i++) { - while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs; - hull[hs++] = i; - } - return hull.slice(0, hs); - } - function d3_geom_hullOrder(a, b) { - return a[0] - b[0] || a[1] - b[1]; - } - d3.geom.polygon = function(coordinates) { - d3_subclass(coordinates, d3_geom_polygonPrototype); - return coordinates; - }; - var d3_geom_polygonPrototype = d3.geom.polygon.prototype = []; - d3_geom_polygonPrototype.area = function() { - var i = -1, n = this.length, a, b = this[n - 1], area = 0; - while (++i < n) { - a = b; - b = this[i]; - area += a[1] * b[0] - a[0] * b[1]; - } - return area * .5; - }; - d3_geom_polygonPrototype.centroid = function(k) { - var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c; - if (!arguments.length) k = -1 / (6 * this.area()); - while (++i < n) { - a = b; - b = this[i]; - c = a[0] * b[1] - b[0] * a[1]; - x += (a[0] + b[0]) * c; - y += (a[1] + b[1]) * c; - } - return [ x * k, y * k ]; - }; - d3_geom_polygonPrototype.clip = function(subject) { - var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d; - while (++i < n) { - input = subject.slice(); - subject.length = 0; - b = this[i]; - c = input[(m = input.length - closed) - 1]; - j = -1; - while (++j < m) { - d = input[j]; - if (d3_geom_polygonInside(d, a, b)) { - if (!d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - subject.push(d); - } else if (d3_geom_polygonInside(c, a, b)) { - subject.push(d3_geom_polygonIntersect(c, d, a, b)); - } - c = d; - } - if (closed) subject.push(subject[0]); - a = b; - } - return subject; - }; - function d3_geom_polygonInside(p, a, b) { - return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]); - } - function d3_geom_polygonIntersect(c, d, a, b) { - var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21); - return [ x1 + ua * x21, y1 + ua * y21 ]; - } - function d3_geom_polygonClosed(coordinates) { - var a = coordinates[0], b = coordinates[coordinates.length - 1]; - return !(a[0] - b[0] || a[1] - b[1]); - } - var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = []; - function d3_geom_voronoiBeach() { - d3_geom_voronoiRedBlackNode(this); - this.edge = this.site = this.circle = null; - } - function d3_geom_voronoiCreateBeach(site) { - var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach(); - beach.site = site; - return beach; - } - function d3_geom_voronoiDetachBeach(beach) { - d3_geom_voronoiDetachCircle(beach); - d3_geom_voronoiBeaches.remove(beach); - d3_geom_voronoiBeachPool.push(beach); - d3_geom_voronoiRedBlackNode(beach); - } - function d3_geom_voronoiRemoveBeach(beach) { - var circle = beach.circle, x = circle.x, y = circle.cy, vertex = { - x: x, - y: y - }, previous = beach.P, next = beach.N, disappearing = [ beach ]; - d3_geom_voronoiDetachBeach(beach); - var lArc = previous; - while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) { - previous = lArc.P; - disappearing.unshift(lArc); - d3_geom_voronoiDetachBeach(lArc); - lArc = previous; - } - disappearing.unshift(lArc); - d3_geom_voronoiDetachCircle(lArc); - var rArc = next; - while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) { - next = rArc.N; - disappearing.push(rArc); - d3_geom_voronoiDetachBeach(rArc); - rArc = next; - } - disappearing.push(rArc); - d3_geom_voronoiDetachCircle(rArc); - var nArcs = disappearing.length, iArc; - for (iArc = 1; iArc < nArcs; ++iArc) { - rArc = disappearing[iArc]; - lArc = disappearing[iArc - 1]; - d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); - } - lArc = disappearing[0]; - rArc = disappearing[nArcs - 1]; - rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - } - function d3_geom_voronoiAddBeach(site) { - var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._; - while (node) { - dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x; - if (dxl > ε) node = node.L; else { - dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix); - if (dxr > ε) { - if (!node.R) { - lArc = node; - break; - } - node = node.R; - } else { - if (dxl > -ε) { - lArc = node.P; - rArc = node; - } else if (dxr > -ε) { - lArc = node; - rArc = node.N; - } else { - lArc = rArc = node; + function d3_layout_hierarchyLinks (nodes) { + return d3.merge(nodes.map(function (parent) { + return (parent.children || []).map(function (child) { + return { + source: parent, + target: child + } + }) + })) + } + d3.layout.partition = function () { + var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ] + function position (node, x, dx, dy) { + var children = node.children + node.x = x + node.y = node.depth * dy + node.dx = dx + node.dy = dy + if (children && (n = children.length)) { + var i = -1, n, c, d + dx = node.value ? dx / node.value : 0 + while (++i < n) { + position(c = children[i], x, d = c.value * dx, dy) + x += d + } } - break; - } - } - } - var newArc = d3_geom_voronoiCreateBeach(site); - d3_geom_voronoiBeaches.insert(lArc, newArc); - if (!lArc && !rArc) return; - if (lArc === rArc) { - d3_geom_voronoiDetachCircle(lArc); - rArc = d3_geom_voronoiCreateBeach(lArc.site); - d3_geom_voronoiBeaches.insert(newArc, rArc); - newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - return; - } - if (!rArc) { - newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); - return; - } - d3_geom_voronoiDetachCircle(lArc); - d3_geom_voronoiDetachCircle(rArc); - var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = { - x: (cy * hb - by * hc) / d + ax, - y: (bx * hc - cx * hb) / d + ay - }; - d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex); - newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex); - rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex); - d3_geom_voronoiAttachCircle(lArc); - d3_geom_voronoiAttachCircle(rArc); - } - function d3_geom_voronoiLeftBreakPoint(arc, directrix) { - var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix; - if (!pby2) return rfocx; - var lArc = arc.P; - if (!lArc) return -Infinity; - site = lArc.site; - var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix; - if (!plby2) return lfocx; - var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2; - if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; - return (rfocx + lfocx) / 2; - } - function d3_geom_voronoiRightBreakPoint(arc, directrix) { - var rArc = arc.N; - if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix); - var site = arc.site; - return site.y === directrix ? site.x : Infinity; - } - function d3_geom_voronoiCell(site) { - this.site = site; - this.edges = []; - } - d3_geom_voronoiCell.prototype.prepare = function() { - var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge; - while (iHalfEdge--) { - edge = halfEdges[iHalfEdge].edge; - if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1); - } - halfEdges.sort(d3_geom_voronoiHalfEdgeOrder); - return halfEdges.length; - }; - function d3_geom_voronoiCloseCells(extent) { - var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end; - while (iCell--) { - cell = cells[iCell]; - if (!cell || !cell.prepare()) continue; - halfEdges = cell.edges; - nHalfEdges = halfEdges.length; - iHalfEdge = 0; - while (iHalfEdge < nHalfEdges) { - end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y; - start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y; - if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) { - halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? { - x: x0, - y: abs(x2 - x0) < ε ? y2 : y1 - } : abs(y3 - y1) < ε && x1 - x3 > ε ? { - x: abs(y2 - y1) < ε ? x2 : x1, - y: y1 - } : abs(x3 - x1) < ε && y3 - y0 > ε ? { - x: x1, - y: abs(x2 - x1) < ε ? y2 : y0 - } : abs(y3 - y0) < ε && x3 - x0 > ε ? { - x: abs(y2 - y0) < ε ? x2 : x0, - y: y0 - } : null), cell.site, null)); - ++nHalfEdges; } + function depth (node) { + var children = node.children, d = 0 + if (children && (n = children.length)) { + var i = -1, n + while (++i < n) d = Math.max(d, depth(children[i])) + } + return 1 + d + } + function partition (d, i) { + var nodes = hierarchy.call(this, d, i) + position(nodes[0], 0, size[0], size[1] / depth(nodes[0])) + return nodes + } + partition.size = function (x) { + if (!arguments.length) return size + size = x + return partition + } + return d3_layout_hierarchyRebind(partition, hierarchy) + } + d3.layout.pie = function () { + var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0 + function pie (data) { + var n = data.length, values = data.map(function (d, i) { + return +value.call(pie, d, i) + }), a = +(typeof startAngle === 'function' ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === 'function' ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === 'function' ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), k = (da - n * pa) / d3.sum(values), index = d3.range(n), arcs = [], v + if (sort != null) { + index.sort(sort === d3_layout_pieSortByValue ? function (i, j) { + return values[j] - values[i] + } : function (i, j) { + return sort(data[i], data[j]) + }) + } + index.forEach(function (i) { + arcs[i] = { + data: data[i], + value: v = values[i], + startAngle: a, + endAngle: a += v * k + pa, + padAngle: p + } + }) + return arcs + } + pie.value = function (_) { + if (!arguments.length) return value + value = _ + return pie + } + pie.sort = function (_) { + if (!arguments.length) return sort + sort = _ + return pie + } + pie.startAngle = function (_) { + if (!arguments.length) return startAngle + startAngle = _ + return pie + } + pie.endAngle = function (_) { + if (!arguments.length) return endAngle + endAngle = _ + return pie + } + pie.padAngle = function (_) { + if (!arguments.length) return padAngle + padAngle = _ + return pie + } + return pie + } + var d3_layout_pieSortByValue = {} + d3.layout.stack = function () { + var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY + function stack (data, index) { + if (!(n = data.length)) return data + var series = data.map(function (d, i) { + return values.call(stack, d, i) + }) + var points = series.map(function (d) { + return d.map(function (v, i) { + return [ x.call(stack, v, i), y.call(stack, v, i) ] + }) + }) + var orders = order.call(stack, points, index) + series = d3.permute(series, orders) + points = d3.permute(points, orders) + var offsets = offset.call(stack, points, index) + var m = series[0].length, n, i, j, o + for (j = 0; j < m; ++j) { + out.call(stack, series[0][j], o = offsets[j], points[0][j][1]) + for (i = 1; i < n; ++i) { + out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]) + } + } + return data + } + stack.values = function (x) { + if (!arguments.length) return values + values = x + return stack + } + stack.order = function (x) { + if (!arguments.length) return order + order = typeof x === 'function' ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault + return stack + } + stack.offset = function (x) { + if (!arguments.length) return offset + offset = typeof x === 'function' ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero + return stack + } + stack.x = function (z) { + if (!arguments.length) return x + x = z + return stack + } + stack.y = function (z) { + if (!arguments.length) return y + y = z + return stack + } + stack.out = function (z) { + if (!arguments.length) return out + out = z + return stack + } + return stack + } + function d3_layout_stackX (d) { + return d.x + } + function d3_layout_stackY (d) { + return d.y + } + function d3_layout_stackOut (d, y0, y) { + d.y0 = y0 + d.y = y + } + var d3_layout_stackOrders = d3.map({ + 'inside-out': function (data) { + var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function (a, b) { + return max[a] - max[b] + }), top = 0, bottom = 0, tops = [], bottoms = [] + for (i = 0; i < n; ++i) { + j = index[i] + if (top < bottom) { + top += sums[j] + tops.push(j) + } else { + bottom += sums[j] + bottoms.push(j) + } + } + return bottoms.reverse().concat(tops) + }, + reverse: function (data) { + return d3.range(data.length).reverse() + }, + 'default': d3_layout_stackOrderDefault + }) + var d3_layout_stackOffsets = d3.map({ + silhouette: function (data) { + var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [] + for (j = 0; j < m; ++j) { + for (i = 0, o = 0; i < n; i++) o += data[i][j][1] + if (o > max) max = o + sums.push(o) + } + for (j = 0; j < m; ++j) { + y0[j] = (max - sums[j]) / 2 + } + return y0 + }, + wiggle: function (data) { + var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [] + y0[0] = o = o0 = 0 + for (j = 1; j < m; ++j) { + for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1] + for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { + for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { + s3 += (data[k][j][1] - data[k][j - 1][1]) / dx + } + s2 += s3 * data[i][j][1] + } + y0[j] = o -= s1 ? s2 / s1 * dx : 0 + if (o < o0) o0 = o + } + for (j = 0; j < m; ++j) y0[j] -= o0 + return y0 + }, + expand: function (data) { + var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [] + for (j = 0; j < m; ++j) { + for (i = 0, o = 0; i < n; i++) o += data[i][j][1] + if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k + } + for (j = 0; j < m; ++j) y0[j] = 0 + return y0 + }, + zero: d3_layout_stackOffsetZero + }) + function d3_layout_stackOrderDefault (data) { + return d3.range(data.length) } - } - } - function d3_geom_voronoiHalfEdgeOrder(a, b) { - return b.angle - a.angle; - } - function d3_geom_voronoiCircle() { - d3_geom_voronoiRedBlackNode(this); - this.x = this.y = this.arc = this.site = this.cy = null; - } - function d3_geom_voronoiAttachCircle(arc) { - var lArc = arc.P, rArc = arc.N; - if (!lArc || !rArc) return; - var lSite = lArc.site, cSite = arc.site, rSite = rArc.site; - if (lSite === rSite) return; - var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by; - var d = 2 * (ax * cy - ay * cx); - if (d >= -ε2) return; - var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by; - var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle(); - circle.arc = arc; - circle.site = cSite; - circle.x = x + bx; - circle.y = cy + Math.sqrt(x * x + y * y); - circle.cy = cy; - arc.circle = circle; - var before = null, node = d3_geom_voronoiCircles._; - while (node) { - if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) { - if (node.L) node = node.L; else { - before = node.P; - break; - } - } else { - if (node.R) node = node.R; else { - before = node; - break; + function d3_layout_stackOffsetZero (data) { + var j = -1, m = data[0].length, y0 = [] + while (++j < m) y0[j] = 0 + return y0 + } + function d3_layout_stackMaxIndex (array) { + var i = 1, j = 0, v = array[0][1], k, n = array.length + for (;i < n; ++i) { + if ((k = array[i][1]) > v) { + j = i + v = k + } } + return j } - } - d3_geom_voronoiCircles.insert(before, circle); - if (!before) d3_geom_voronoiFirstCircle = circle; - } - function d3_geom_voronoiDetachCircle(arc) { - var circle = arc.circle; - if (circle) { - if (!circle.P) d3_geom_voronoiFirstCircle = circle.N; - d3_geom_voronoiCircles.remove(circle); - d3_geom_voronoiCirclePool.push(circle); - d3_geom_voronoiRedBlackNode(circle); - arc.circle = null; - } - } - function d3_geom_voronoiClipEdges(extent) { - var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e; - while (i--) { - e = edges[i]; - if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) { - e.a = e.b = null; - edges.splice(i, 1); + function d3_layout_stackReduceSum (d) { + return d.reduce(d3_layout_stackSum, 0) } - } - } - function d3_geom_voronoiConnectEdge(edge, extent) { - var vb = edge.b; - if (vb) return true; - var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb; - if (ry === ly) { - if (fx < x0 || fx >= x1) return; - if (lx > rx) { - if (!va) va = { - x: fx, - y: y0 - }; else if (va.y >= y1) return; - vb = { - x: fx, - y: y1 - }; - } else { - if (!va) va = { - x: fx, - y: y1 - }; else if (va.y < y0) return; - vb = { - x: fx, - y: y0 - }; + function d3_layout_stackSum (p, d) { + return p + d[1] } - } else { - fm = (lx - rx) / (ry - ly); - fb = fy - fm * fx; - if (fm < -1 || fm > 1) { - if (lx > rx) { - if (!va) va = { - x: (y0 - fb) / fm, - y: y0 - }; else if (va.y >= y1) return; - vb = { - x: (y1 - fb) / fm, - y: y1 - }; - } else { - if (!va) va = { - x: (y1 - fb) / fm, - y: y1 - }; else if (va.y < y0) return; - vb = { - x: (y0 - fb) / fm, - y: y0 - }; + d3.layout.histogram = function () { + var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges + function histogram (data, i) { + var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x + while (++i < m) { + bin = bins[i] = [] + bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]) + bin.y = 0 + } + if (m > 0) { + i = -1 + while (++i < n) { + x = values[i] + if (x >= range[0] && x <= range[1]) { + bin = bins[d3.bisect(thresholds, x, 1, m) - 1] + bin.y += k + bin.push(data[i]) + } + } + } + return bins + } + histogram.value = function (x) { + if (!arguments.length) return valuer + valuer = x + return histogram + } + histogram.range = function (x) { + if (!arguments.length) return ranger + ranger = d3_functor(x) + return histogram + } + histogram.bins = function (x) { + if (!arguments.length) return binner + binner = typeof x === 'number' ? function (range) { + return d3_layout_histogramBinFixed(range, x) + } : d3_functor(x) + return histogram + } + histogram.frequency = function (x) { + if (!arguments.length) return frequency + frequency = !!x + return histogram + } + return histogram + } + function d3_layout_histogramBinSturges (range, values) { + return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)) + } + function d3_layout_histogramBinFixed (range, n) { + var x = -1, b = +range[0], m = (range[1] - b) / n, f = [] + while (++x <= n) f[x] = m * x + b + return f + } + function d3_layout_histogramRange (values) { + return [ d3.min(values), d3.max(values) ] + } + d3.layout.pack = function () { + var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius + function pack (d, i) { + var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === 'function' ? radius : function () { + return radius + } + root.x = root.y = 0 + d3_layout_hierarchyVisitAfter(root, function (d) { + d.r = +r(d.value) + }) + d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings) + if (padding) { + var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2 + d3_layout_hierarchyVisitAfter(root, function (d) { + d.r += dr + }) + d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings) + d3_layout_hierarchyVisitAfter(root, function (d) { + d.r -= dr + }) + } + d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h)) + return nodes + } + pack.size = function (_) { + if (!arguments.length) return size + size = _ + return pack + } + pack.radius = function (_) { + if (!arguments.length) return radius + radius = _ == null || typeof _ === 'function' ? _ : +_ + return pack + } + pack.padding = function (_) { + if (!arguments.length) return padding + padding = +_ + return pack + } + return d3_layout_hierarchyRebind(pack, hierarchy) + } + function d3_layout_packSort (a, b) { + return a.value - b.value + } + function d3_layout_packInsert (a, b) { + var c = a._pack_next + a._pack_next = b + b._pack_prev = a + b._pack_next = c + c._pack_prev = b + } + function d3_layout_packSplice (a, b) { + a._pack_next = b + b._pack_prev = a + } + function d3_layout_packIntersects (a, b) { + var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r + return 0.999 * dr * dr > dx * dx + dy * dy + } + function d3_layout_packSiblings (node) { + if (!(nodes = node.children) || !(n = nodes.length)) return + var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n + function bound (node) { + xMin = Math.min(node.x - node.r, xMin) + xMax = Math.max(node.x + node.r, xMax) + yMin = Math.min(node.y - node.r, yMin) + yMax = Math.max(node.y + node.r, yMax) + } + nodes.forEach(d3_layout_packLink) + a = nodes[0] + a.x = -a.r + a.y = 0 + bound(a) + if (n > 1) { + b = nodes[1] + b.x = b.r + b.y = 0 + bound(b) + if (n > 2) { + c = nodes[2] + d3_layout_packPlace(a, b, c) + bound(c) + d3_layout_packInsert(a, c) + a._pack_prev = c + d3_layout_packInsert(c, b) + b = a._pack_next + for (i = 3; i < n; i++) { + d3_layout_packPlace(a, b, c = nodes[i]) + var isect = 0, s1 = 1, s2 = 1 + for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { + if (d3_layout_packIntersects(j, c)) { + isect = 1 + break + } + } + if (isect == 1) { + for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { + if (d3_layout_packIntersects(k, c)) { + break + } + } + } + if (isect) { + if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b) + i-- + } else { + d3_layout_packInsert(a, c) + b = c + bound(c) + } + } + } } - } else { - if (ly < ry) { - if (!va) va = { - x: x0, - y: fm * x0 + fb - }; else if (va.x >= x1) return; - vb = { - x: x1, - y: fm * x1 + fb - }; + var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0 + for (i = 0; i < n; i++) { + c = nodes[i] + c.x -= cx + c.y -= cy + cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y)) + } + node.r = cr + nodes.forEach(d3_layout_packUnlink) + } + function d3_layout_packLink (node) { + node._pack_next = node._pack_prev = node + } + function d3_layout_packUnlink (node) { + delete node._pack_next + delete node._pack_prev + } + function d3_layout_packTransform (node, x, y, k) { + var children = node.children + node.x = x += k * node.x + node.y = y += k * node.y + node.r *= k + if (children) { + var i = -1, n = children.length + while (++i < n) d3_layout_packTransform(children[i], x, y, k) + } + } + function d3_layout_packPlace (a, b, c) { + var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y + if (db && (dx || dy)) { + var da = b.r + c.r, dc = dx * dx + dy * dy + da *= da + db *= db + var x = 0.5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc) + c.x = a.x + x * dx + y * dy + c.y = a.y + x * dy - y * dx } else { - if (!va) va = { - x: x1, - y: fm * x1 + fb - }; else if (va.x < x0) return; - vb = { - x: x0, - y: fm * x0 + fb - }; + c.x = a.x + db + c.y = a.y + } + } + d3.layout.tree = function () { + var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null + function tree (d, i) { + var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0) + d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z + d3_layout_hierarchyVisitBefore(root1, secondWalk) + if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else { + var left = root0, right = root0, bottom = root0 + d3_layout_hierarchyVisitBefore(root0, function (node) { + if (node.x < left.x) left = node + if (node.x > right.x) right = node + if (node.depth > bottom.depth) bottom = node + }) + var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1) + d3_layout_hierarchyVisitBefore(root0, function (node) { + node.x = (node.x + tx) * kx + node.y = node.depth * ky + }) + } + return nodes + } + function wrapTree (root0) { + var root1 = { + A: null, + children: [ root0 ] + }, queue = [ root1 ], node1 + while ((node1 = queue.pop()) != null) { + for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) { + queue.push((children[i] = child = { + _: children[i], + parent: node1, + children: (child = children[i].children) && child.slice() || [], + A: null, + a: null, + z: 0, + m: 0, + c: 0, + s: 0, + t: null, + i: i + }).a = child) + } + } + return root1.children[0] + } + function firstWalk (v) { + var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null + if (children.length) { + d3_layout_treeShift(v) + var midpoint = (children[0].z + children[children.length - 1].z) / 2 + if (w) { + v.z = w.z + separation(v._, w._) + v.m = v.z - midpoint + } else { + v.z = midpoint + } + } else if (w) { + v.z = w.z + separation(v._, w._) + } + v.parent.A = apportion(v, w, v.parent.A || siblings[0]) + } + function secondWalk (v) { + v._.x = v.z + v.parent.m + v.m += v.parent.m + } + function apportion (v, w, ancestor) { + if (w) { + var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift + while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { + vom = d3_layout_treeLeft(vom) + vop = d3_layout_treeRight(vop) + vop.a = v + shift = vim.z + sim - vip.z - sip + separation(vim._, vip._) + if (shift > 0) { + d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift) + sip += shift + sop += shift + } + sim += vim.m + sip += vip.m + som += vom.m + sop += vop.m + } + if (vim && !d3_layout_treeRight(vop)) { + vop.t = vim + vop.m += sim - sop + } + if (vip && !d3_layout_treeLeft(vom)) { + vom.t = vip + vom.m += sip - som + ancestor = v + } + } + return ancestor + } + function sizeNode (node) { + node.x *= size[0] + node.y = node.depth * size[1] + } + tree.separation = function (x) { + if (!arguments.length) return separation + separation = x + return tree + } + tree.size = function (x) { + if (!arguments.length) return nodeSize ? null : size + nodeSize = (size = x) == null ? sizeNode : null + return tree + } + tree.nodeSize = function (x) { + if (!arguments.length) return nodeSize ? size : null + nodeSize = (size = x) == null ? null : sizeNode + return tree + } + return d3_layout_hierarchyRebind(tree, hierarchy) + } + function d3_layout_treeSeparation (a, b) { + return a.parent == b.parent ? 1 : 2 + } + function d3_layout_treeLeft (v) { + var children = v.children + return children.length ? children[0] : v.t + } + function d3_layout_treeRight (v) { + var children = v.children, n + return (n = children.length) ? children[n - 1] : v.t + } + function d3_layout_treeMove (wm, wp, shift) { + var change = shift / (wp.i - wm.i) + wp.c -= change + wp.s += shift + wm.c += change + wp.z += shift + wp.m += shift + } + function d3_layout_treeShift (v) { + var shift = 0, change = 0, children = v.children, i = children.length, w + while (--i >= 0) { + w = children[i] + w.z += shift + w.m += shift + shift += w.s + (change += w.c) + } + } + function d3_layout_treeAncestor (vim, v, ancestor) { + return vim.a.parent === v.parent ? vim.a : ancestor + } + d3.layout.cluster = function () { + var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false + function cluster (d, i) { + var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0 + d3_layout_hierarchyVisitAfter(root, function (node) { + var children = node.children + if (children && children.length) { + node.x = d3_layout_clusterX(children) + node.y = d3_layout_clusterY(children) + } else { + node.x = previousNode ? x += separation(node, previousNode) : 0 + node.y = 0 + previousNode = node + } + }) + var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2 + d3_layout_hierarchyVisitAfter(root, nodeSize ? function (node) { + node.x = (node.x - root.x) * size[0] + node.y = (root.y - node.y) * size[1] + } : function (node) { + node.x = (node.x - x0) / (x1 - x0) * size[0] + node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1] + }) + return nodes + } + cluster.separation = function (x) { + if (!arguments.length) return separation + separation = x + return cluster + } + cluster.size = function (x) { + if (!arguments.length) return nodeSize ? null : size + nodeSize = (size = x) == null + return cluster } + cluster.nodeSize = function (x) { + if (!arguments.length) return nodeSize ? size : null + nodeSize = (size = x) != null + return cluster + } + return d3_layout_hierarchyRebind(cluster, hierarchy) } - } - edge.a = va; - edge.b = vb; - return true; - } - function d3_geom_voronoiEdge(lSite, rSite) { - this.l = lSite; - this.r = rSite; - this.a = this.b = null; - } - function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) { - var edge = new d3_geom_voronoiEdge(lSite, rSite); - d3_geom_voronoiEdges.push(edge); - if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va); - if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb); - d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite)); - d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite)); - return edge; - } - function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) { - var edge = new d3_geom_voronoiEdge(lSite, null); - edge.a = va; - edge.b = vb; - d3_geom_voronoiEdges.push(edge); - return edge; - } - function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) { - if (!edge.a && !edge.b) { - edge.a = vertex; - edge.l = lSite; - edge.r = rSite; - } else if (edge.l === rSite) { - edge.b = vertex; - } else { - edge.a = vertex; - } - } - function d3_geom_voronoiHalfEdge(edge, lSite, rSite) { - var va = edge.a, vb = edge.b; - this.edge = edge; - this.site = lSite; - this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y); - } - d3_geom_voronoiHalfEdge.prototype = { - start: function() { - return this.edge.l === this.site ? this.edge.a : this.edge.b; - }, - end: function() { - return this.edge.l === this.site ? this.edge.b : this.edge.a; - } - }; - function d3_geom_voronoiRedBlackTree() { - this._ = null; - } - function d3_geom_voronoiRedBlackNode(node) { - node.U = node.C = node.L = node.R = node.P = node.N = null; - } - d3_geom_voronoiRedBlackTree.prototype = { - insert: function(after, node) { - var parent, grandpa, uncle; - if (after) { - node.P = after; - node.N = after.N; - if (after.N) after.N.P = node; - after.N = node; - if (after.R) { - after = after.R; - while (after.L) after = after.L; - after.L = node; - } else { - after.R = node; - } - parent = after; - } else if (this._) { - after = d3_geom_voronoiRedBlackFirst(this._); - node.P = null; - node.N = after; - after.P = after.L = node; - parent = after; - } else { - node.P = node.N = null; - this._ = node; - parent = null; - } - node.L = node.R = null; - node.U = parent; - node.C = true; - after = node; - while (parent && parent.C) { - grandpa = parent.U; - if (parent === grandpa.L) { - uncle = grandpa.R; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.R) { - d3_geom_voronoiRedBlackRotateLeft(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - d3_geom_voronoiRedBlackRotateRight(this, grandpa); + function d3_layout_clusterY (children) { + return 1 + d3.max(children, function (child) { + return child.y + }) + } + function d3_layout_clusterX (children) { + return children.reduce(function (x, child) { + return x + child.x + }, 0) / children.length + } + function d3_layout_clusterLeft (node) { + var children = node.children + return children && children.length ? d3_layout_clusterLeft(children[0]) : node + } + function d3_layout_clusterRight (node) { + var children = node.children, n + return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node + } + d3.layout.treemap = function () { + var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = 'squarify', ratio = 0.5 * (1 + Math.sqrt(5)) + function scale (children, k) { + var i = -1, n = children.length, child, area + while (++i < n) { + area = (child = children[i]).value * (k < 0 ? 0 : k) + child.area = isNaN(area) || area <= 0 ? 0 : area } - } else { - uncle = grandpa.L; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.L) { - d3_geom_voronoiRedBlackRotateRight(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, grandpa); - } - } - parent = after.U; - } - this._.C = false; - }, - remove: function(node) { - if (node.N) node.N.P = node.P; - if (node.P) node.P.N = node.N; - node.N = node.P = null; - var parent = node.U, sibling, left = node.L, right = node.R, next, red; - if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right); - if (parent) { - if (parent.L === node) parent.L = next; else parent.R = next; - } else { - this._ = next; - } - if (left && right) { - red = next.C; - next.C = node.C; - next.L = left; - left.U = next; - if (next !== right) { - parent = next.U; - next.U = node.U; - node = next.R; - parent.L = node; - next.R = right; - right.U = next; - } else { - next.U = parent; - parent = next; - node = next.R; } - } else { - red = node.C; - node = next; - } - if (node) node.U = parent; - if (red) return; - if (node && node.C) { - node.C = false; - return; - } - do { - if (node === this._) break; - if (node === parent.L) { - sibling = parent.R; - if (sibling.C) { - sibling.C = false; - parent.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, parent); - sibling = parent.R; - } - if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { - if (!sibling.R || !sibling.R.C) { - sibling.L.C = false; - sibling.C = true; - d3_geom_voronoiRedBlackRotateRight(this, sibling); - sibling = parent.R; - } - sibling.C = parent.C; - parent.C = sibling.R.C = false; - d3_geom_voronoiRedBlackRotateLeft(this, parent); - node = this._; - break; + function squarify (node) { + var children = node.children + if (children && children.length) { + var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === 'slice' ? rect.dx : mode === 'dice' ? rect.dy : mode === 'slice-dice' ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n + scale(remaining, rect.dx * rect.dy / node.value) + row.area = 0 + while ((n = remaining.length) > 0) { + row.push(child = remaining[n - 1]) + row.area += child.area + if (mode !== 'squarify' || (score = worst(row, u)) <= best) { + remaining.pop() + best = score + } else { + row.area -= row.pop().area + position(row, u, rect, false) + u = Math.min(rect.dx, rect.dy) + row.length = row.area = 0 + best = Infinity + } + } + if (row.length) { + position(row, u, rect, true) + row.length = row.area = 0 + } + children.forEach(squarify) } - } else { - sibling = parent.L; - if (sibling.C) { - sibling.C = false; - parent.C = true; - d3_geom_voronoiRedBlackRotateRight(this, parent); - sibling = parent.L; - } - if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { - if (!sibling.L || !sibling.L.C) { - sibling.R.C = false; - sibling.C = true; - d3_geom_voronoiRedBlackRotateLeft(this, sibling); - sibling = parent.L; - } - sibling.C = parent.C; - parent.C = sibling.L.C = false; - d3_geom_voronoiRedBlackRotateRight(this, parent); - node = this._; - break; - } - } - sibling.C = true; - node = parent; - parent = parent.U; - } while (!node.C); - if (node) node.C = false; - } - }; - function d3_geom_voronoiRedBlackRotateLeft(tree, node) { - var p = node, q = node.R, parent = p.U; - if (parent) { - if (parent.L === p) parent.L = q; else parent.R = q; - } else { - tree._ = q; - } - q.U = parent; - p.U = q; - p.R = q.L; - if (p.R) p.R.U = p; - q.L = p; - } - function d3_geom_voronoiRedBlackRotateRight(tree, node) { - var p = node, q = node.L, parent = p.U; - if (parent) { - if (parent.L === p) parent.L = q; else parent.R = q; - } else { - tree._ = q; - } - q.U = parent; - p.U = q; - p.L = q.R; - if (p.L) p.L.U = p; - q.R = p; - } - function d3_geom_voronoiRedBlackFirst(node) { - while (node.L) node = node.L; - return node; - } - function d3_geom_voronoi(sites, bbox) { - var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle; - d3_geom_voronoiEdges = []; - d3_geom_voronoiCells = new Array(sites.length); - d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree(); - d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree(); - while (true) { - circle = d3_geom_voronoiFirstCircle; - if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) { - if (site.x !== x0 || site.y !== y0) { - d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site); - d3_geom_voronoiAddBeach(site); - x0 = site.x, y0 = site.y; - } - site = sites.pop(); - } else if (circle) { - d3_geom_voronoiRemoveBeach(circle.arc); - } else { - break; - } - } - if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox); - var diagram = { - cells: d3_geom_voronoiCells, - edges: d3_geom_voronoiEdges - }; - d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null; - return diagram; - } - function d3_geom_voronoiVertexOrder(a, b) { - return b.y - a.y || b.x - a.x; - } - d3.geom.voronoi = function(points) { - var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent; - if (points) return voronoi(points); - function voronoi(data) { - var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1]; - d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) { - var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) { - var s = e.start(); - return [ s.x, s.y ]; - }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : []; - polygon.point = data[i]; - }); - return polygons; - } - function sites(data) { - return data.map(function(d, i) { - return { - x: Math.round(fx(d, i) / ε) * ε, - y: Math.round(fy(d, i) / ε) * ε, - i: i - }; - }); - } - voronoi.links = function(data) { - return d3_geom_voronoi(sites(data)).edges.filter(function(edge) { - return edge.l && edge.r; - }).map(function(edge) { - return { - source: data[edge.l.i], - target: data[edge.r.i] - }; - }); - }; - voronoi.triangles = function(data) { - var triangles = []; - d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) { - var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l; - while (++j < m) { - e0 = e1; - s0 = s1; - e1 = edges[j].edge; - s1 = e1.l === site ? e1.r : e1.l; - if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) { - triangles.push([ data[i], data[s0.i], data[s1.i] ]); + } + function stickify (node) { + var children = node.children + if (children && children.length) { + var rect = pad(node), remaining = children.slice(), child, row = [] + scale(remaining, rect.dx * rect.dy / node.value) + row.area = 0 + while (child = remaining.pop()) { + row.push(child) + row.area += child.area + if (child.z != null) { + position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length) + row.length = row.area = 0 + } + } + children.forEach(stickify) } } - }); - return triangles; - }; - voronoi.x = function(_) { - return arguments.length ? (fx = d3_functor(x = _), voronoi) : x; - }; - voronoi.y = function(_) { - return arguments.length ? (fy = d3_functor(y = _), voronoi) : y; - }; - voronoi.clipExtent = function(_) { - if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent; - clipExtent = _ == null ? d3_geom_voronoiClipExtent : _; - return voronoi; - }; - voronoi.size = function(_) { - if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1]; - return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]); - }; - return voronoi; - }; - var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ]; - function d3_geom_voronoiTriangleArea(a, b, c) { - return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y); - } - d3.geom.delaunay = function(vertices) { - return d3.geom.voronoi().triangles(vertices); - }; - d3.geom.quadtree = function(points, x1, y1, x2, y2) { - var x = d3_geom_pointX, y = d3_geom_pointY, compat; - if (compat = arguments.length) { - x = d3_geom_quadtreeCompatX; - y = d3_geom_quadtreeCompatY; - if (compat === 3) { - y2 = y1; - x2 = x1; - y1 = x1 = 0; - } - return quadtree(points); - } - function quadtree(data) { - var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_; - if (x1 != null) { - x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2; - } else { - x2_ = y2_ = -(x1_ = y1_ = Infinity); - xs = [], ys = []; - n = data.length; - if (compat) for (i = 0; i < n; ++i) { - d = data[i]; - if (d.x < x1_) x1_ = d.x; - if (d.y < y1_) y1_ = d.y; - if (d.x > x2_) x2_ = d.x; - if (d.y > y2_) y2_ = d.y; - xs.push(d.x); - ys.push(d.y); - } else for (i = 0; i < n; ++i) { - var x_ = +fx(d = data[i], i), y_ = +fy(d, i); - if (x_ < x1_) x1_ = x_; - if (y_ < y1_) y1_ = y_; - if (x_ > x2_) x2_ = x_; - if (y_ > y2_) y2_ = y_; - xs.push(x_); - ys.push(y_); - } - } - var dx = x2_ - x1_, dy = y2_ - y1_; - if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy; - function insert(n, d, x, y, x1, y1, x2, y2) { - if (isNaN(x) || isNaN(y)) return; - if (n.leaf) { - var nx = n.x, ny = n.y; - if (nx != null) { - if (abs(nx - x) + abs(ny - y) < .01) { - insertChild(n, d, x, y, x1, y1, x2, y2); - } else { - var nPoint = n.point; - n.x = n.y = n.point = null; - insertChild(n, nPoint, nx, ny, x1, y1, x2, y2); - insertChild(n, d, x, y, x1, y1, x2, y2); + function worst (row, u) { + var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length + while (++i < n) { + if (!(r = row[i].area)) continue + if (r < rmin) rmin = r + if (r > rmax) rmax = r + } + s *= s + u *= u + return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity + } + function position (row, u, rect, flush) { + var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o + if (u == rect.dx) { + if (flush || v > rect.dy) v = rect.dy + while (++i < n) { + o = row[i] + o.x = x + o.y = y + o.dy = v + x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0) } + o.z = true + o.dx += rect.x + rect.dx - x + rect.y += v + rect.dy -= v } else { - n.x = x, n.y = y, n.point = d; + if (flush || v > rect.dx) v = rect.dx + while (++i < n) { + o = row[i] + o.x = x + o.y = y + o.dx = v + y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0) + } + o.z = false + o.dy += rect.y + rect.dy - y + rect.x += v + rect.dx -= v } - } else { - insertChild(n, d, x, y, x1, y1, x2, y2); } - } - function insertChild(n, d, x, y, x1, y1, x2, y2) { - var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right; - n.leaf = false; - n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()); - if (right) x1 = xm; else x2 = xm; - if (below) y1 = ym; else y2 = ym; - insert(n, d, x, y, x1, y1, x2, y2); - } - var root = d3_geom_quadtreeNode(); - root.add = function(d) { - insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_); - }; - root.visit = function(f) { - d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_); - }; - root.find = function(point) { - return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_); - }; - i = -1; - if (x1 == null) { - while (++i < n) { - insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_); + function treemap (d) { + var nodes = stickies || hierarchy(d), root = nodes[0] + root.x = 0 + root.y = 0 + root.dx = size[0] + root.dy = size[1] + if (stickies) hierarchy.revalue(root) + scale([ root ], root.dx * root.dy / root.value); + (stickies ? stickify : squarify)(root) + if (sticky) stickies = nodes + return nodes + } + treemap.size = function (x) { + if (!arguments.length) return size + size = x + return treemap + } + treemap.padding = function (x) { + if (!arguments.length) return padding + function padFunction (node) { + var p = x.call(treemap, node, node.depth) + return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === 'number' ? [ p, p, p, p ] : p) + } + function padConstant (node) { + return d3_layout_treemapPad(node, x) + } + var type + pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === 'function' ? padFunction : type === 'number' ? (x = [ x, x, x, x ], + padConstant) : padConstant + return treemap + } + treemap.round = function (x) { + if (!arguments.length) return round != Number + round = x ? Math.round : Number + return treemap + } + treemap.sticky = function (x) { + if (!arguments.length) return sticky + sticky = x + stickies = null + return treemap + } + treemap.ratio = function (x) { + if (!arguments.length) return ratio + ratio = x + return treemap + } + treemap.mode = function (x) { + if (!arguments.length) return mode + mode = x + '' + return treemap + } + return d3_layout_hierarchyRebind(treemap, hierarchy) + } + function d3_layout_treemapPadNull (node) { + return { + x: node.x, + y: node.y, + dx: node.dx, + dy: node.dy } - --i; - } else data.forEach(root.add); - xs = ys = data = d = null; - return root; - } - quadtree.x = function(_) { - return arguments.length ? (x = _, quadtree) : x; - }; - quadtree.y = function(_) { - return arguments.length ? (y = _, quadtree) : y; - }; - quadtree.extent = function(_) { - if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ]; - if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], - y2 = +_[1][1]; - return quadtree; - }; - quadtree.size = function(_) { - if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ]; - if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1]; - return quadtree; - }; - return quadtree; - }; - function d3_geom_quadtreeCompatX(d) { - return d.x; - } - function d3_geom_quadtreeCompatY(d) { - return d.y; - } - function d3_geom_quadtreeNode() { - return { - leaf: true, - nodes: [], - point: null, - x: null, - y: null - }; - } - function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) { - if (!f(node, x1, y1, x2, y2)) { - var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes; - if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy); - if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy); - if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2); - if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2); - } - } - function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) { - var minDistance2 = Infinity, closestPoint; - (function find(node, x1, y1, x2, y2) { - if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return; - if (point = node.point) { - var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy; - if (distance2 < minDistance2) { - var distance = Math.sqrt(minDistance2 = distance2); - x0 = x - distance, y0 = y - distance; - x3 = x + distance, y3 = y + distance; - closestPoint = point; - } - } - var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym; - for (var i = below << 1 | right, j = i + 4; i < j; ++i) { - if (node = children[i & 3]) switch (i & 3) { - case 0: - find(node, x1, y1, xm, ym); - break; - - case 1: - find(node, xm, y1, x2, ym); - break; - - case 2: - find(node, x1, ym, xm, y2); - break; - - case 3: - find(node, xm, ym, x2, y2); - break; - } - } - })(root, x0, y0, x3, y3); - return closestPoint; - } - d3.interpolateRgb = d3_interpolateRgb; - function d3_interpolateRgb(a, b) { - a = d3.rgb(a); - b = d3.rgb(b); - var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab; - return function(t) { - return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t)); - }; - } - d3.interpolateObject = d3_interpolateObject; - function d3_interpolateObject(a, b) { - var i = {}, c = {}, k; - for (k in a) { - if (k in b) { - i[k] = d3_interpolate(a[k], b[k]); - } else { - c[k] = a[k]; } - } - for (k in b) { - if (!(k in a)) { - c[k] = b[k]; + function d3_layout_treemapPad (node, padding) { + var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2] + if (dx < 0) { + x += dx / 2 + dx = 0 + } + if (dy < 0) { + y += dy / 2 + dy = 0 + } + return { + x: x, + y: y, + dx: dx, + dy: dy + } + } + d3.random = { + normal: function (µ, σ) { + var n = arguments.length + if (n < 2) σ = 1 + if (n < 1) µ = 0 + return function () { + var x, y, r + do { + x = Math.random() * 2 - 1 + y = Math.random() * 2 - 1 + r = x * x + y * y + } while (!r || r > 1) + return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r) + } + }, + logNormal: function () { + var random = d3.random.normal.apply(d3, arguments) + return function () { + return Math.exp(random()) + } + }, + bates: function (m) { + var random = d3.random.irwinHall(m) + return function () { + return random() / m + } + }, + irwinHall: function (m) { + return function () { + for (var s = 0, j = 0; j < m; j++) s += Math.random() + return s + } + } } - } - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; - } - d3.interpolateNumber = d3_interpolateNumber; - function d3_interpolateNumber(a, b) { - a = +a, b = +b; - return function(t) { - return a * (1 - t) + b * t; - }; - } - d3.interpolateString = d3_interpolateString; - function d3_interpolateString(a, b) { - var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = []; - a = a + "", b = b + ""; - while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) { - if ((bs = bm.index) > bi) { - bs = b.slice(bi, bs); - if (s[i]) s[i] += bs; else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { - if (s[i]) s[i] += bm; else s[++i] = bm; - } else { - s[++i] = null; - q.push({ - i: i, - x: d3_interpolateNumber(am, bm) - }); + d3.scale = {} + function d3_scaleExtent (domain) { + var start = domain[0], stop = domain[domain.length - 1] + return start < stop ? [ start, stop ] : [ stop, start ] } - bi = d3_interpolate_numberB.lastIndex; - } - if (bi < b.length) { - bs = b.slice(bi); - if (s[i]) s[i] += bs; else s[++i] = bs; - } - return s.length < 2 ? q[0] ? (b = q[0].x, function(t) { - return b(t) + ""; - }) : function() { - return b; - } : (b = q.length, function(t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }); - } - var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g"); - d3.interpolate = d3_interpolate; - function d3_interpolate(a, b) { - var i = d3.interpolators.length, f; - while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; - return f; - } - d3.interpolators = [ function(a, b) { - var t = typeof b; - return (t === "string" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\(|hsl\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b); - } ]; - d3.interpolateArray = d3_interpolateArray; - function d3_interpolateArray(a, b) { - var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i; - for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i])); - for (;i < na; ++i) c[i] = a[i]; - for (;i < nb; ++i) c[i] = b[i]; - return function(t) { - for (i = 0; i < n0; ++i) c[i] = x[i](t); - return c; - }; - } - var d3_ease_default = function() { - return d3_identity; - }; - var d3_ease = d3.map({ - linear: d3_ease_default, - poly: d3_ease_poly, - quad: function() { - return d3_ease_quad; - }, - cubic: function() { - return d3_ease_cubic; - }, - sin: function() { - return d3_ease_sin; - }, - exp: function() { - return d3_ease_exp; - }, - circle: function() { - return d3_ease_circle; - }, - elastic: d3_ease_elastic, - back: d3_ease_back, - bounce: function() { - return d3_ease_bounce; - } - }); - var d3_ease_mode = d3.map({ - "in": d3_identity, - out: d3_ease_reverse, - "in-out": d3_ease_reflect, - "out-in": function(f) { - return d3_ease_reflect(d3_ease_reverse(f)); - } - }); - d3.ease = function(name) { - var i = name.indexOf("-"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : "in"; - t = d3_ease.get(t) || d3_ease_default; - m = d3_ease_mode.get(m) || d3_identity; - return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))); - }; - function d3_ease_clamp(f) { - return function(t) { - return t <= 0 ? 0 : t >= 1 ? 1 : f(t); - }; - } - function d3_ease_reverse(f) { - return function(t) { - return 1 - f(1 - t); - }; - } - function d3_ease_reflect(f) { - return function(t) { - return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t)); - }; - } - function d3_ease_quad(t) { - return t * t; - } - function d3_ease_cubic(t) { - return t * t * t; - } - function d3_ease_cubicInOut(t) { - if (t <= 0) return 0; - if (t >= 1) return 1; - var t2 = t * t, t3 = t2 * t; - return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75); - } - function d3_ease_poly(e) { - return function(t) { - return Math.pow(t, e); - }; - } - function d3_ease_sin(t) { - return 1 - Math.cos(t * halfπ); - } - function d3_ease_exp(t) { - return Math.pow(2, 10 * (t - 1)); - } - function d3_ease_circle(t) { - return 1 - Math.sqrt(1 - t * t); - } - function d3_ease_elastic(a, p) { - var s; - if (arguments.length < 2) p = .45; - if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4; - return function(t) { - return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p); - }; - } - function d3_ease_back(s) { - if (!s) s = 1.70158; - return function(t) { - return t * t * ((s + 1) * t - s); - }; - } - function d3_ease_bounce(t) { - return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; - } - d3.interpolateHcl = d3_interpolateHcl; - function d3_interpolateHcl(a, b) { - a = d3.hcl(a); - b = d3.hcl(b); - var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al; - if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac; - if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; - return function(t) { - return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + ""; - }; - } - d3.interpolateHsl = d3_interpolateHsl; - function d3_interpolateHsl(a, b) { - a = d3.hsl(a); - b = d3.hsl(b); - var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al; - if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as; - if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; - return function(t) { - return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + ""; - }; - } - d3.interpolateLab = d3_interpolateLab; - function d3_interpolateLab(a, b) { - a = d3.lab(a); - b = d3.lab(b); - var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab; - return function(t) { - return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; - }; - } - d3.interpolateRound = d3_interpolateRound; - function d3_interpolateRound(a, b) { - b -= a; - return function(t) { - return Math.round(a + b * t); - }; - } - d3.transform = function(string) { - var g = d3_document.createElementNS(d3.ns.prefix.svg, "g"); - return (d3.transform = function(string) { - if (string != null) { - g.setAttribute("transform", string); - var t = g.transform.baseVal.consolidate(); - } - return new d3_transform(t ? t.matrix : d3_transformIdentity); - })(string); - }; - function d3_transform(m) { - var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; - if (r0[0] * r1[1] < r1[0] * r0[1]) { - r0[0] *= -1; - r0[1] *= -1; - kx *= -1; - kz *= -1; - } - this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees; - this.translate = [ m.e, m.f ]; - this.scale = [ kx, ky ]; - this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0; - } - d3_transform.prototype.toString = function() { - return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; - }; - function d3_transformDot(a, b) { - return a[0] * b[0] + a[1] * b[1]; - } - function d3_transformNormalize(a) { - var k = Math.sqrt(d3_transformDot(a, a)); - if (k) { - a[0] /= k; - a[1] /= k; - } - return k; - } - function d3_transformCombine(a, b, k) { - a[0] += k * b[0]; - a[1] += k * b[1]; - return a; - } - var d3_transformIdentity = { - a: 1, - b: 0, - c: 0, - d: 1, - e: 0, - f: 0 - }; - d3.interpolateTransform = d3_interpolateTransform; - function d3_interpolateTransform(a, b) { - var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale; - if (ta[0] != tb[0] || ta[1] != tb[1]) { - s.push("translate(", null, ",", null, ")"); - q.push({ - i: 1, - x: d3_interpolateNumber(ta[0], tb[0]) - }, { - i: 3, - x: d3_interpolateNumber(ta[1], tb[1]) - }); - } else if (tb[0] || tb[1]) { - s.push("translate(" + tb + ")"); - } else { - s.push(""); - } - if (ra != rb) { - if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; - q.push({ - i: s.push(s.pop() + "rotate(", null, ")") - 2, - x: d3_interpolateNumber(ra, rb) - }); - } else if (rb) { - s.push(s.pop() + "rotate(" + rb + ")"); - } - if (wa != wb) { - q.push({ - i: s.push(s.pop() + "skewX(", null, ")") - 2, - x: d3_interpolateNumber(wa, wb) - }); - } else if (wb) { - s.push(s.pop() + "skewX(" + wb + ")"); - } - if (ka[0] != kb[0] || ka[1] != kb[1]) { - n = s.push(s.pop() + "scale(", null, ",", null, ")"); - q.push({ - i: n - 4, - x: d3_interpolateNumber(ka[0], kb[0]) - }, { - i: n - 2, - x: d3_interpolateNumber(ka[1], kb[1]) - }); - } else if (kb[0] != 1 || kb[1] != 1) { - s.push(s.pop() + "scale(" + kb + ")"); - } - n = q.length; - return function(t) { - var i = -1, o; - while (++i < n) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; - } - function d3_uninterpolateNumber(a, b) { - b = (b -= a = +a) || 1 / b; - return function(x) { - return (x - a) / b; - }; - } - function d3_uninterpolateClamp(a, b) { - b = (b -= a = +a) || 1 / b; - return function(x) { - return Math.max(0, Math.min(1, (x - a) / b)); - }; - } - d3.layout = {}; - d3.layout.bundle = function() { - return function(links) { - var paths = [], i = -1, n = links.length; - while (++i < n) paths.push(d3_layout_bundlePath(links[i])); - return paths; - }; - }; - function d3_layout_bundlePath(link) { - var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ]; - while (start !== lca) { - start = start.parent; - points.push(start); - } - var k = points.length; - while (end !== lca) { - points.splice(k, 0, end); - end = end.parent; - } - return points; - } - function d3_layout_bundleAncestors(node) { - var ancestors = [], parent = node.parent; - while (parent != null) { - ancestors.push(node); - node = parent; - parent = parent.parent; - } - ancestors.push(node); - return ancestors; - } - function d3_layout_bundleLeastCommonAncestor(a, b) { - if (a === b) return a; - var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null; - while (aNode === bNode) { - sharedNode = aNode; - aNode = aNodes.pop(); - bNode = bNodes.pop(); - } - return sharedNode; - } - d3.layout.chord = function() { - var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords; - function relayout() { - var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j; - chords = []; - groups = []; - k = 0, i = -1; - while (++i < n) { - x = 0, j = -1; - while (++j < n) { - x += matrix[i][j]; - } - groupSums.push(x); - subgroupIndex.push(d3.range(n)); - k += x; - } - if (sortGroups) { - groupIndex.sort(function(a, b) { - return sortGroups(groupSums[a], groupSums[b]); - }); - } - if (sortSubgroups) { - subgroupIndex.forEach(function(d, i) { - d.sort(function(a, b) { - return sortSubgroups(matrix[i][a], matrix[i][b]); - }); - }); - } - k = (τ - padding * n) / k; - x = 0, i = -1; - while (++i < n) { - x0 = x, j = -1; - while (++j < n) { - var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k; - subgroups[di + "-" + dj] = { - index: di, - subindex: dj, - startAngle: a0, - endAngle: a1, - value: v - }; - } - groups[di] = { - index: di, - startAngle: x0, - endAngle: x, - value: (x - x0) / k - }; - x += padding; + function d3_scaleRange (scale) { + return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()) } - i = -1; - while (++i < n) { - j = i - 1; - while (++j < n) { - var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i]; - if (source.value || target.value) { - chords.push(source.value < target.value ? { - source: target, - target: source - } : { - source: source, - target: target - }); - } + function d3_scale_bilinear (domain, range, uninterpolate, interpolate) { + var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]) + return function (x) { + return i(u(x)) } } - if (sortChords) resort(); - } - function resort() { - chords.sort(function(a, b) { - return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2); - }); - } - chord.matrix = function(x) { - if (!arguments.length) return matrix; - n = (matrix = x) && matrix.length; - chords = groups = null; - return chord; - }; - chord.padding = function(x) { - if (!arguments.length) return padding; - padding = x; - chords = groups = null; - return chord; - }; - chord.sortGroups = function(x) { - if (!arguments.length) return sortGroups; - sortGroups = x; - chords = groups = null; - return chord; - }; - chord.sortSubgroups = function(x) { - if (!arguments.length) return sortSubgroups; - sortSubgroups = x; - chords = null; - return chord; - }; - chord.sortChords = function(x) { - if (!arguments.length) return sortChords; - sortChords = x; - if (chords) resort(); - return chord; - }; - chord.chords = function() { - if (!chords) relayout(); - return chords; - }; - chord.groups = function() { - if (!groups) relayout(); - return groups; - }; - return chord; - }; - d3.layout.force = function() { - var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges; - function repulse(node) { - return function(quad, x1, _, x2) { - if (quad.point !== node) { - var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy; - if (dw * dw / theta2 < dn) { - if (dn < chargeDistance2) { - var k = quad.charge / dn; - node.px -= dx * k; - node.py -= dy * k; - } - return true; - } - if (quad.point && dn && dn < chargeDistance2) { - var k = quad.pointCharge / dn; - node.px -= dx * k; - node.py -= dy * k; - } - } - return !quad.charge; - }; - } - force.tick = function() { - if ((alpha *= .99) < .005) { - event.end({ - type: "end", - alpha: alpha = 0 - }); - return true; - } - var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y; - for (i = 0; i < m; ++i) { - o = links[i]; - s = o.source; - t = o.target; - x = t.x - s.x; - y = t.y - s.y; - if (l = x * x + y * y) { - l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l; - x *= l; - y *= l; - t.x -= x * (k = s.weight / (t.weight + s.weight)); - t.y -= y * k; - s.x += x * (k = 1 - k); - s.y += y * k; - } - } - if (k = alpha * gravity) { - x = size[0] / 2; - y = size[1] / 2; - i = -1; - if (k) while (++i < n) { - o = nodes[i]; - o.x += (x - o.x) * k; - o.y += (y - o.y) * k; - } - } - if (charge) { - d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges); - i = -1; - while (++i < n) { - if (!(o = nodes[i]).fixed) { - q.visit(repulse(o)); - } + function d3_scale_nice (domain, nice) { + var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx + if (x1 < x0) { + dx = i0, i0 = i1, i1 = dx + dx = x0, x0 = x1, x1 = dx } + domain[i0] = nice.floor(x0) + domain[i1] = nice.ceil(x1) + return domain } - i = -1; - while (++i < n) { - o = nodes[i]; - if (o.fixed) { - o.x = o.px; - o.y = o.py; + function d3_scale_niceStep (step) { + return step ? { + floor: function (x) { + return Math.floor(x / step) * step + }, + ceil: function (x) { + return Math.ceil(x / step) * step + } + } : d3_scale_niceIdentity + } + var d3_scale_niceIdentity = { + floor: d3_identity, + ceil: d3_identity + } + function d3_scale_polylinear (domain, range, uninterpolate, interpolate) { + var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1 + if (domain[k] < domain[0]) { + domain = domain.slice().reverse() + range = range.slice().reverse() + } + while (++j <= k) { + u.push(uninterpolate(domain[j - 1], domain[j])) + i.push(interpolate(range[j - 1], range[j])) + } + return function (x) { + var j = d3.bisect(domain, x, 1, k) - 1 + return i[j](u[j](x)) + } + } + d3.scale.linear = function () { + return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false) + } + function d3_scale_linear (domain, range, interpolate, clamp) { + var output, input + function rescale () { + var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber + output = linear(domain, range, uninterpolate, interpolate) + input = linear(range, domain, uninterpolate, d3_interpolate) + return scale + } + function scale (x) { + return output(x) + } + scale.invert = function (y) { + return input(y) + } + scale.domain = function (x) { + if (!arguments.length) return domain + domain = x.map(Number) + return rescale() + } + scale.range = function (x) { + if (!arguments.length) return range + range = x + return rescale() + } + scale.rangeRound = function (x) { + return scale.range(x).interpolate(d3_interpolateRound) + } + scale.clamp = function (x) { + if (!arguments.length) return clamp + clamp = x + return rescale() + } + scale.interpolate = function (x) { + if (!arguments.length) return interpolate + interpolate = x + return rescale() + } + scale.ticks = function (m) { + return d3_scale_linearTicks(domain, m) + } + scale.tickFormat = function (m, format) { + return d3_scale_linearTickFormat(domain, m, format) + } + scale.nice = function (m) { + d3_scale_linearNice(domain, m) + return rescale() + } + scale.copy = function () { + return d3_scale_linear(domain, range, interpolate, clamp) + } + return rescale() + } + function d3_scale_linearRebind (scale, linear) { + return d3.rebind(scale, linear, 'range', 'rangeRound', 'interpolate', 'clamp') + } + function d3_scale_linearNice (domain, m) { + return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2])) + } + function d3_scale_linearTickRange (domain, m) { + if (m == null) m = 10 + var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step + if (err <= 0.15) step *= 10; else if (err <= 0.35) step *= 5; else if (err <= 0.75) step *= 2 + extent[0] = Math.ceil(extent[0] / step) * step + extent[1] = Math.floor(extent[1] / step) * step + step * 0.5 + extent[2] = step + return extent + } + function d3_scale_linearTicks (domain, m) { + return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)) + } + function d3_scale_linearTickFormat (domain, m, format) { + var range = d3_scale_linearTickRange(domain, m) + if (format) { + var match = d3_format_re.exec(format) + match.shift() + if (match[8] === 's') { + var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1]))) + if (!match[7]) match[7] = '.' + d3_scale_linearPrecision(prefix.scale(range[2])) + match[8] = 'f' + format = d3.format(match.join('')) + return function (d) { + return format(prefix.scale(d)) + prefix.symbol + } + } + if (!match[7]) match[7] = '.' + d3_scale_linearFormatPrecision(match[8], range) + format = match.join('') } else { - o.x -= (o.px - (o.px = o.x)) * friction; - o.y -= (o.py - (o.py = o.y)) * friction; + format = ',.' + d3_scale_linearPrecision(range[2]) + 'f' + } + return d3.format(format) + } + var d3_scale_linearFormatSignificant = { + s: 1, + g: 1, + p: 1, + r: 1, + e: 1 + } + function d3_scale_linearPrecision (value) { + return -Math.floor(Math.log(value) / Math.LN10 + 0.01) + } + function d3_scale_linearFormatPrecision (type, range) { + var p = d3_scale_linearPrecision(range[2]) + return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== 'e') : p - (type === '%') * 2 + } + d3.scale.log = function () { + return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]) + } + function d3_scale_log (linear, base, positive, domain) { + function log (x) { + return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base) + } + function pow (x) { + return positive ? Math.pow(base, x) : -Math.pow(base, -x) + } + function scale (x) { + return linear(log(x)) + } + scale.invert = function (x) { + return pow(linear.invert(x)) + } + scale.domain = function (x) { + if (!arguments.length) return domain + positive = x[0] >= 0 + linear.domain((domain = x.map(Number)).map(log)) + return scale + } + scale.base = function (_) { + if (!arguments.length) return base + base = +_ + linear.domain(domain.map(log)) + return scale + } + scale.nice = function () { + var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative) + linear.domain(niced) + domain = niced.map(pow) + return scale + } + scale.ticks = function () { + var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base + if (isFinite(j - i)) { + if (positive) { + for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k) + ticks.push(pow(i)) + } else { + ticks.push(pow(i)) + for (;i++ < j;) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k) + } + for (i = 0; ticks[i] < u; i++) {} + for (j = ticks.length; ticks[j - 1] > v; j--) {} + ticks = ticks.slice(i, j) + } + return ticks + } + scale.tickFormat = function (n, format) { + if (!arguments.length) return d3_scale_logFormat + if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== 'function') format = d3.format(format) + var k = Math.max(0.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12, + Math.floor), e + return function (d) { + return d / pow(f(log(d) + e)) <= k ? format(d) : '' + } + } + scale.copy = function () { + return d3_scale_log(linear.copy(), base, positive, domain) } + return d3_scale_linearRebind(scale, linear) } - event.tick({ - type: "tick", - alpha: alpha - }); - }; - force.nodes = function(x) { - if (!arguments.length) return nodes; - nodes = x; - return force; - }; - force.links = function(x) { - if (!arguments.length) return links; - links = x; - return force; - }; - force.size = function(x) { - if (!arguments.length) return size; - size = x; - return force; - }; - force.linkDistance = function(x) { - if (!arguments.length) return linkDistance; - linkDistance = typeof x === "function" ? x : +x; - return force; - }; - force.distance = force.linkDistance; - force.linkStrength = function(x) { - if (!arguments.length) return linkStrength; - linkStrength = typeof x === "function" ? x : +x; - return force; - }; - force.friction = function(x) { - if (!arguments.length) return friction; - friction = +x; - return force; - }; - force.charge = function(x) { - if (!arguments.length) return charge; - charge = typeof x === "function" ? x : +x; - return force; - }; - force.chargeDistance = function(x) { - if (!arguments.length) return Math.sqrt(chargeDistance2); - chargeDistance2 = x * x; - return force; - }; - force.gravity = function(x) { - if (!arguments.length) return gravity; - gravity = +x; - return force; - }; - force.theta = function(x) { - if (!arguments.length) return Math.sqrt(theta2); - theta2 = x * x; - return force; - }; - force.alpha = function(x) { - if (!arguments.length) return alpha; - x = +x; - if (alpha) { - if (x > 0) alpha = x; else alpha = 0; - } else if (x > 0) { - event.start({ - type: "start", - alpha: alpha = x - }); - d3.timer(force.tick); - } - return force; - }; - force.start = function() { - var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o; - for (i = 0; i < n; ++i) { - (o = nodes[i]).index = i; - o.weight = 0; - } - for (i = 0; i < m; ++i) { - o = links[i]; - if (typeof o.source == "number") o.source = nodes[o.source]; - if (typeof o.target == "number") o.target = nodes[o.target]; - ++o.source.weight; - ++o.target.weight; - } - for (i = 0; i < n; ++i) { - o = nodes[i]; - if (isNaN(o.x)) o.x = position("x", w); - if (isNaN(o.y)) o.y = position("y", h); - if (isNaN(o.px)) o.px = o.x; - if (isNaN(o.py)) o.py = o.y; - } - distances = []; - if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance; - strengths = []; - if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength; - charges = []; - if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge; - function position(dimension, size) { - if (!neighbors) { - neighbors = new Array(n); - for (j = 0; j < n; ++j) { - neighbors[j] = []; + var d3_scale_logFormat = d3.format('.0e'), d3_scale_logNiceNegative = { + floor: function (x) { + return -Math.ceil(-x) + }, + ceil: function (x) { + return -Math.floor(-x) } - for (j = 0; j < m; ++j) { - var o = links[j]; - neighbors[o.source.index].push(o.target); - neighbors[o.target.index].push(o.source); - } - } - var candidates = neighbors[i], j = -1, l = candidates.length, x; - while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x; - return Math.random() * size; - } - return force.resume(); - }; - force.resume = function() { - return force.alpha(.1); - }; - force.stop = function() { - return force.alpha(0); - }; - force.drag = function() { - if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend); - if (!arguments.length) return drag; - this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag); - }; - function dragmove(d) { - d.px = d3.event.x, d.py = d3.event.y; - force.resume(); - } - return d3.rebind(force, event, "on"); - }; - function d3_layout_forceDragstart(d) { - d.fixed |= 2; - } - function d3_layout_forceDragend(d) { - d.fixed &= ~6; - } - function d3_layout_forceMouseover(d) { - d.fixed |= 4; - d.px = d.x, d.py = d.y; - } - function d3_layout_forceMouseout(d) { - d.fixed &= ~4; - } - function d3_layout_forceAccumulate(quad, alpha, charges) { - var cx = 0, cy = 0; - quad.charge = 0; - if (!quad.leaf) { - var nodes = quad.nodes, n = nodes.length, i = -1, c; - while (++i < n) { - c = nodes[i]; - if (c == null) continue; - d3_layout_forceAccumulate(c, alpha, charges); - quad.charge += c.charge; - cx += c.charge * c.cx; - cy += c.charge * c.cy; - } - } - if (quad.point) { - if (!quad.leaf) { - quad.point.x += Math.random() - .5; - quad.point.y += Math.random() - .5; - } - var k = alpha * charges[quad.point.index]; - quad.charge += quad.pointCharge = k; - cx += k * quad.point.x; - cy += k * quad.point.y; - } - quad.cx = cx / quad.charge; - quad.cy = cy / quad.charge; - } - var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity; - d3.layout.hierarchy = function() { - var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue; - function hierarchy(root) { - var stack = [ root ], nodes = [], node; - root.depth = 0; - while ((node = stack.pop()) != null) { - nodes.push(node); - if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) { - var n, childs, child; - while (--n >= 0) { - stack.push(child = childs[n]); - child.parent = node; - child.depth = node.depth + 1; - } - if (value) node.value = 0; - node.children = childs; - } else { - if (value) node.value = +value.call(hierarchy, node, node.depth) || 0; - delete node.children; } + d3.scale.pow = function () { + return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]) } - d3_layout_hierarchyVisitAfter(root, function(node) { - var childs, parent; - if (sort && (childs = node.children)) childs.sort(sort); - if (value && (parent = node.parent)) parent.value += node.value; - }); - return nodes; - } - hierarchy.sort = function(x) { - if (!arguments.length) return sort; - sort = x; - return hierarchy; - }; - hierarchy.children = function(x) { - if (!arguments.length) return children; - children = x; - return hierarchy; - }; - hierarchy.value = function(x) { - if (!arguments.length) return value; - value = x; - return hierarchy; - }; - hierarchy.revalue = function(root) { - if (value) { - d3_layout_hierarchyVisitBefore(root, function(node) { - if (node.children) node.value = 0; - }); - d3_layout_hierarchyVisitAfter(root, function(node) { - var parent; - if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0; - if (parent = node.parent) parent.value += node.value; - }); - } - return root; - }; - return hierarchy; - }; - function d3_layout_hierarchyRebind(object, hierarchy) { - d3.rebind(object, hierarchy, "sort", "children", "value"); - object.nodes = object; - object.links = d3_layout_hierarchyLinks; - return object; - } - function d3_layout_hierarchyVisitBefore(node, callback) { - var nodes = [ node ]; - while ((node = nodes.pop()) != null) { - callback(node); - if ((children = node.children) && (n = children.length)) { - var n, children; - while (--n >= 0) nodes.push(children[n]); - } - } - } - function d3_layout_hierarchyVisitAfter(node, callback) { - var nodes = [ node ], nodes2 = []; - while ((node = nodes.pop()) != null) { - nodes2.push(node); - if ((children = node.children) && (n = children.length)) { - var i = -1, n, children; - while (++i < n) nodes.push(children[i]); - } - } - while ((node = nodes2.pop()) != null) { - callback(node); - } - } - function d3_layout_hierarchyChildren(d) { - return d.children; - } - function d3_layout_hierarchyValue(d) { - return d.value; - } - function d3_layout_hierarchySort(a, b) { - return b.value - a.value; - } - function d3_layout_hierarchyLinks(nodes) { - return d3.merge(nodes.map(function(parent) { - return (parent.children || []).map(function(child) { - return { - source: parent, - target: child - }; - }); - })); - } - d3.layout.partition = function() { - var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ]; - function position(node, x, dx, dy) { - var children = node.children; - node.x = x; - node.y = node.depth * dy; - node.dx = dx; - node.dy = dy; - if (children && (n = children.length)) { - var i = -1, n, c, d; - dx = node.value ? dx / node.value : 0; - while (++i < n) { - position(c = children[i], x, d = c.value * dx, dy); - x += d; + function d3_scale_pow (linear, exponent, domain) { + var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent) + function scale (x) { + return linear(powp(x)) + } + scale.invert = function (x) { + return powb(linear.invert(x)) + } + scale.domain = function (x) { + if (!arguments.length) return domain + linear.domain((domain = x.map(Number)).map(powp)) + return scale + } + scale.ticks = function (m) { + return d3_scale_linearTicks(domain, m) + } + scale.tickFormat = function (m, format) { + return d3_scale_linearTickFormat(domain, m, format) + } + scale.nice = function (m) { + return scale.domain(d3_scale_linearNice(domain, m)) + } + scale.exponent = function (x) { + if (!arguments.length) return exponent + powp = d3_scale_powPow(exponent = x) + powb = d3_scale_powPow(1 / exponent) + linear.domain(domain.map(powp)) + return scale + } + scale.copy = function () { + return d3_scale_pow(linear.copy(), exponent, domain) + } + return d3_scale_linearRebind(scale, linear) + } + function d3_scale_powPow (e) { + return function (x) { + return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e) } } - } - function depth(node) { - var children = node.children, d = 0; - if (children && (n = children.length)) { - var i = -1, n; - while (++i < n) d = Math.max(d, depth(children[i])); + d3.scale.sqrt = function () { + return d3.scale.pow().exponent(0.5) } - return 1 + d; - } - function partition(d, i) { - var nodes = hierarchy.call(this, d, i); - position(nodes[0], 0, size[0], size[1] / depth(nodes[0])); - return nodes; - } - partition.size = function(x) { - if (!arguments.length) return size; - size = x; - return partition; - }; - return d3_layout_hierarchyRebind(partition, hierarchy); - }; - d3.layout.pie = function() { - var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0; - function pie(data) { - var n = data.length, values = data.map(function(d, i) { - return +value.call(pie, d, i); - }), a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === "function" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), k = (da - n * pa) / d3.sum(values), index = d3.range(n), arcs = [], v; - if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) { - return values[j] - values[i]; - } : function(i, j) { - return sort(data[i], data[j]); - }); - index.forEach(function(i) { - arcs[i] = { - data: data[i], - value: v = values[i], - startAngle: a, - endAngle: a += v * k + pa, - padAngle: p - }; - }); - return arcs; - } - pie.value = function(_) { - if (!arguments.length) return value; - value = _; - return pie; - }; - pie.sort = function(_) { - if (!arguments.length) return sort; - sort = _; - return pie; - }; - pie.startAngle = function(_) { - if (!arguments.length) return startAngle; - startAngle = _; - return pie; - }; - pie.endAngle = function(_) { - if (!arguments.length) return endAngle; - endAngle = _; - return pie; - }; - pie.padAngle = function(_) { - if (!arguments.length) return padAngle; - padAngle = _; - return pie; - }; - return pie; - }; - var d3_layout_pieSortByValue = {}; - d3.layout.stack = function() { - var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY; - function stack(data, index) { - if (!(n = data.length)) return data; - var series = data.map(function(d, i) { - return values.call(stack, d, i); - }); - var points = series.map(function(d) { - return d.map(function(v, i) { - return [ x.call(stack, v, i), y.call(stack, v, i) ]; - }); - }); - var orders = order.call(stack, points, index); - series = d3.permute(series, orders); - points = d3.permute(points, orders); - var offsets = offset.call(stack, points, index); - var m = series[0].length, n, i, j, o; - for (j = 0; j < m; ++j) { - out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); - for (i = 1; i < n; ++i) { - out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); - } - } - return data; - } - stack.values = function(x) { - if (!arguments.length) return values; - values = x; - return stack; - }; - stack.order = function(x) { - if (!arguments.length) return order; - order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault; - return stack; - }; - stack.offset = function(x) { - if (!arguments.length) return offset; - offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero; - return stack; - }; - stack.x = function(z) { - if (!arguments.length) return x; - x = z; - return stack; - }; - stack.y = function(z) { - if (!arguments.length) return y; - y = z; - return stack; - }; - stack.out = function(z) { - if (!arguments.length) return out; - out = z; - return stack; - }; - return stack; - }; - function d3_layout_stackX(d) { - return d.x; - } - function d3_layout_stackY(d) { - return d.y; - } - function d3_layout_stackOut(d, y0, y) { - d.y0 = y0; - d.y = y; - } - var d3_layout_stackOrders = d3.map({ - "inside-out": function(data) { - var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) { - return max[a] - max[b]; - }), top = 0, bottom = 0, tops = [], bottoms = []; - for (i = 0; i < n; ++i) { - j = index[i]; - if (top < bottom) { - top += sums[j]; - tops.push(j); - } else { - bottom += sums[j]; - bottoms.push(j); - } - } - return bottoms.reverse().concat(tops); - }, - reverse: function(data) { - return d3.range(data.length).reverse(); - }, - "default": d3_layout_stackOrderDefault - }); - var d3_layout_stackOffsets = d3.map({ - silhouette: function(data) { - var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o > max) max = o; - sums.push(o); - } - for (j = 0; j < m; ++j) { - y0[j] = (max - sums[j]) / 2; - } - return y0; - }, - wiggle: function(data) { - var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = []; - y0[0] = o = o0 = 0; - for (j = 1; j < m; ++j) { - for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1]; - for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { - for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { - s3 += (data[k][j][1] - data[k][j - 1][1]) / dx; - } - s2 += s3 * data[i][j][1]; - } - y0[j] = o -= s1 ? s2 / s1 * dx : 0; - if (o < o0) o0 = o; - } - for (j = 0; j < m; ++j) y0[j] -= o0; - return y0; - }, - expand: function(data) { - var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = []; - for (j = 0; j < m; ++j) { - for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; - if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k; - } - for (j = 0; j < m; ++j) y0[j] = 0; - return y0; - }, - zero: d3_layout_stackOffsetZero - }); - function d3_layout_stackOrderDefault(data) { - return d3.range(data.length); - } - function d3_layout_stackOffsetZero(data) { - var j = -1, m = data[0].length, y0 = []; - while (++j < m) y0[j] = 0; - return y0; - } - function d3_layout_stackMaxIndex(array) { - var i = 1, j = 0, v = array[0][1], k, n = array.length; - for (;i < n; ++i) { - if ((k = array[i][1]) > v) { - j = i; - v = k; + d3.scale.ordinal = function () { + return d3_scale_ordinal([], { + t: 'range', + a: [ [] ] + }) } - } - return j; - } - function d3_layout_stackReduceSum(d) { - return d.reduce(d3_layout_stackSum, 0); - } - function d3_layout_stackSum(p, d) { - return p + d[1]; - } - d3.layout.histogram = function() { - var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges; - function histogram(data, i) { - var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x; - while (++i < m) { - bin = bins[i] = []; - bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]); - bin.y = 0; - } - if (m > 0) { - i = -1; - while (++i < n) { - x = values[i]; - if (x >= range[0] && x <= range[1]) { - bin = bins[d3.bisect(thresholds, x, 1, m) - 1]; - bin.y += k; - bin.push(data[i]); - } + function d3_scale_ordinal (domain, ranger) { + var index, range, rangeBand + function scale (x) { + return range[((index.get(x) || (ranger.t === 'range' ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length] } - } - return bins; - } - histogram.value = function(x) { - if (!arguments.length) return valuer; - valuer = x; - return histogram; - }; - histogram.range = function(x) { - if (!arguments.length) return ranger; - ranger = d3_functor(x); - return histogram; - }; - histogram.bins = function(x) { - if (!arguments.length) return binner; - binner = typeof x === "number" ? function(range) { - return d3_layout_histogramBinFixed(range, x); - } : d3_functor(x); - return histogram; - }; - histogram.frequency = function(x) { - if (!arguments.length) return frequency; - frequency = !!x; - return histogram; - }; - return histogram; - }; - function d3_layout_histogramBinSturges(range, values) { - return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)); - } - function d3_layout_histogramBinFixed(range, n) { - var x = -1, b = +range[0], m = (range[1] - b) / n, f = []; - while (++x <= n) f[x] = m * x + b; - return f; - } - function d3_layout_histogramRange(values) { - return [ d3.min(values), d3.max(values) ]; - } - d3.layout.pack = function() { - var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius; - function pack(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === "function" ? radius : function() { - return radius; - }; - root.x = root.y = 0; - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r = +r(d.value); - }); - d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); - if (padding) { - var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2; - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r += dr; - }); - d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); - d3_layout_hierarchyVisitAfter(root, function(d) { - d.r -= dr; - }); - } - d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h)); - return nodes; - } - pack.size = function(_) { - if (!arguments.length) return size; - size = _; - return pack; - }; - pack.radius = function(_) { - if (!arguments.length) return radius; - radius = _ == null || typeof _ === "function" ? _ : +_; - return pack; - }; - pack.padding = function(_) { - if (!arguments.length) return padding; - padding = +_; - return pack; - }; - return d3_layout_hierarchyRebind(pack, hierarchy); - }; - function d3_layout_packSort(a, b) { - return a.value - b.value; - } - function d3_layout_packInsert(a, b) { - var c = a._pack_next; - a._pack_next = b; - b._pack_prev = a; - b._pack_next = c; - c._pack_prev = b; - } - function d3_layout_packSplice(a, b) { - a._pack_next = b; - b._pack_prev = a; - } - function d3_layout_packIntersects(a, b) { - var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r; - return .999 * dr * dr > dx * dx + dy * dy; - } - function d3_layout_packSiblings(node) { - if (!(nodes = node.children) || !(n = nodes.length)) return; - var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n; - function bound(node) { - xMin = Math.min(node.x - node.r, xMin); - xMax = Math.max(node.x + node.r, xMax); - yMin = Math.min(node.y - node.r, yMin); - yMax = Math.max(node.y + node.r, yMax); - } - nodes.forEach(d3_layout_packLink); - a = nodes[0]; - a.x = -a.r; - a.y = 0; - bound(a); - if (n > 1) { - b = nodes[1]; - b.x = b.r; - b.y = 0; - bound(b); - if (n > 2) { - c = nodes[2]; - d3_layout_packPlace(a, b, c); - bound(c); - d3_layout_packInsert(a, c); - a._pack_prev = c; - d3_layout_packInsert(c, b); - b = a._pack_next; - for (i = 3; i < n; i++) { - d3_layout_packPlace(a, b, c = nodes[i]); - var isect = 0, s1 = 1, s2 = 1; - for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { - if (d3_layout_packIntersects(j, c)) { - isect = 1; - break; - } - } - if (isect == 1) { - for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { - if (d3_layout_packIntersects(k, c)) { - break; - } - } - } - if (isect) { - if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b); - i--; - } else { - d3_layout_packInsert(a, c); - b = c; - bound(c); + function steps (start, step) { + return d3.range(domain.length).map(function (i) { + return start + step * i + }) + } + scale.domain = function (x) { + if (!arguments.length) return domain + domain = [] + index = new d3_Map() + var i = -1, n = x.length, xi + while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi)) + return scale[ranger.t].apply(scale, ranger.a) + } + scale.range = function (x) { + if (!arguments.length) return range + range = x + rangeBand = 0 + ranger = { + t: 'range', + a: arguments } + return scale + } + scale.rangePoints = function (x, padding) { + if (arguments.length < 2) padding = 0 + var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, + 0) : (stop - start) / (domain.length - 1 + padding) + range = steps(start + step * padding / 2, step) + rangeBand = 0 + ranger = { + t: 'rangePoints', + a: arguments + } + return scale + } + scale.rangeRoundPoints = function (x, padding) { + if (arguments.length < 2) padding = 0 + var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), + 0) : (stop - start) / (domain.length - 1 + padding) | 0 + range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step) + rangeBand = 0 + ranger = { + t: 'rangeRoundPoints', + a: arguments + } + return scale + } + scale.rangeBands = function (x, padding, outerPadding) { + if (arguments.length < 2) padding = 0 + if (arguments.length < 3) outerPadding = padding + var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding) + range = steps(start + step * outerPadding, step) + if (reverse) range.reverse() + rangeBand = step * (1 - padding) + ranger = { + t: 'rangeBands', + a: arguments + } + return scale + } + scale.rangeRoundBands = function (x, padding, outerPadding) { + if (arguments.length < 2) padding = 0 + if (arguments.length < 3) outerPadding = padding + var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)) + range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step) + if (reverse) range.reverse() + rangeBand = Math.round(step * (1 - padding)) + ranger = { + t: 'rangeRoundBands', + a: arguments + } + return scale } + scale.rangeBand = function () { + return rangeBand + } + scale.rangeExtent = function () { + return d3_scaleExtent(ranger.a[0]) + } + scale.copy = function () { + return d3_scale_ordinal(domain, ranger) + } + return scale.domain(domain) } - } - var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0; - for (i = 0; i < n; i++) { - c = nodes[i]; - c.x -= cx; - c.y -= cy; - cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y)); - } - node.r = cr; - nodes.forEach(d3_layout_packUnlink); - } - function d3_layout_packLink(node) { - node._pack_next = node._pack_prev = node; - } - function d3_layout_packUnlink(node) { - delete node._pack_next; - delete node._pack_prev; - } - function d3_layout_packTransform(node, x, y, k) { - var children = node.children; - node.x = x += k * node.x; - node.y = y += k * node.y; - node.r *= k; - if (children) { - var i = -1, n = children.length; - while (++i < n) d3_layout_packTransform(children[i], x, y, k); - } - } - function d3_layout_packPlace(a, b, c) { - var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y; - if (db && (dx || dy)) { - var da = b.r + c.r, dc = dx * dx + dy * dy; - da *= da; - db *= db; - var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); - c.x = a.x + x * dx + y * dy; - c.y = a.y + x * dy - y * dx; - } else { - c.x = a.x + db; - c.y = a.y; - } - } - d3.layout.tree = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null; - function tree(d, i) { - var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0); - d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z; - d3_layout_hierarchyVisitBefore(root1, secondWalk); - if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else { - var left = root0, right = root0, bottom = root0; - d3_layout_hierarchyVisitBefore(root0, function(node) { - if (node.x < left.x) left = node; - if (node.x > right.x) right = node; - if (node.depth > bottom.depth) bottom = node; - }); - var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1); - d3_layout_hierarchyVisitBefore(root0, function(node) { - node.x = (node.x + tx) * kx; - node.y = node.depth * ky; - }); - } - return nodes; - } - function wrapTree(root0) { - var root1 = { - A: null, - children: [ root0 ] - }, queue = [ root1 ], node1; - while ((node1 = queue.pop()) != null) { - for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) { - queue.push((children[i] = child = { - _: children[i], - parent: node1, - children: (child = children[i].children) && child.slice() || [], - A: null, - a: null, - z: 0, - m: 0, - c: 0, - s: 0, - t: null, - i: i - }).a = child); + d3.scale.category10 = function () { + return d3.scale.ordinal().range(d3_category10) + } + d3.scale.category20 = function () { + return d3.scale.ordinal().range(d3_category20) + } + d3.scale.category20b = function () { + return d3.scale.ordinal().range(d3_category20b) + } + d3.scale.category20c = function () { + return d3.scale.ordinal().range(d3_category20c) + } + var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString) + var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString) + var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString) + var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString) + d3.scale.quantile = function () { + return d3_scale_quantile([], []) + } + function d3_scale_quantile (domain, range) { + var thresholds + function rescale () { + var k = 0, q = range.length + thresholds = [] + while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q) + return scale + } + function scale (x) { + if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)] } + scale.domain = function (x) { + if (!arguments.length) return domain + domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending) + return rescale() + } + scale.range = function (x) { + if (!arguments.length) return range + range = x + return rescale() + } + scale.quantiles = function () { + return thresholds + } + scale.invertExtent = function (y) { + y = range.indexOf(y) + return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ] + } + scale.copy = function () { + return d3_scale_quantile(domain, range) + } + return rescale() } - return root1.children[0]; - } - function firstWalk(v) { - var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null; - if (children.length) { - d3_layout_treeShift(v); - var midpoint = (children[0].z + children[children.length - 1].z) / 2; - if (w) { - v.z = w.z + separation(v._, w._); - v.m = v.z - midpoint; - } else { - v.z = midpoint; + d3.scale.quantize = function () { + return d3_scale_quantize(0, 1, [ 0, 1 ]) + } + function d3_scale_quantize (x0, x1, range) { + var kx, i + function scale (x) { + return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))] } - } else if (w) { - v.z = w.z + separation(v._, w._); + function rescale () { + kx = range.length / (x1 - x0) + i = range.length - 1 + return scale + } + scale.domain = function (x) { + if (!arguments.length) return [ x0, x1 ] + x0 = +x[0] + x1 = +x[x.length - 1] + return rescale() + } + scale.range = function (x) { + if (!arguments.length) return range + range = x + return rescale() + } + scale.invertExtent = function (y) { + y = range.indexOf(y) + y = y < 0 ? NaN : y / kx + x0 + return [ y, y + 1 / kx ] + } + scale.copy = function () { + return d3_scale_quantize(x0, x1, range) + } + return rescale() } - v.parent.A = apportion(v, w, v.parent.A || siblings[0]); - } - function secondWalk(v) { - v._.x = v.z + v.parent.m; - v.m += v.parent.m; - } - function apportion(v, w, ancestor) { - if (w) { - var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift; - while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { - vom = d3_layout_treeLeft(vom); - vop = d3_layout_treeRight(vop); - vop.a = v; - shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); - if (shift > 0) { - d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift); - sip += shift; - sop += shift; - } - sim += vim.m; - sip += vip.m; - som += vom.m; - sop += vop.m; - } - if (vim && !d3_layout_treeRight(vop)) { - vop.t = vim; - vop.m += sim - sop; - } - if (vip && !d3_layout_treeLeft(vom)) { - vom.t = vip; - vom.m += sip - som; - ancestor = v; - } - } - return ancestor; - } - function sizeNode(node) { - node.x *= size[0]; - node.y = node.depth * size[1]; - } - tree.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return tree; - }; - tree.size = function(x) { - if (!arguments.length) return nodeSize ? null : size; - nodeSize = (size = x) == null ? sizeNode : null; - return tree; - }; - tree.nodeSize = function(x) { - if (!arguments.length) return nodeSize ? size : null; - nodeSize = (size = x) == null ? null : sizeNode; - return tree; - }; - return d3_layout_hierarchyRebind(tree, hierarchy); - }; - function d3_layout_treeSeparation(a, b) { - return a.parent == b.parent ? 1 : 2; - } - function d3_layout_treeLeft(v) { - var children = v.children; - return children.length ? children[0] : v.t; - } - function d3_layout_treeRight(v) { - var children = v.children, n; - return (n = children.length) ? children[n - 1] : v.t; - } - function d3_layout_treeMove(wm, wp, shift) { - var change = shift / (wp.i - wm.i); - wp.c -= change; - wp.s += shift; - wm.c += change; - wp.z += shift; - wp.m += shift; - } - function d3_layout_treeShift(v) { - var shift = 0, change = 0, children = v.children, i = children.length, w; - while (--i >= 0) { - w = children[i]; - w.z += shift; - w.m += shift; - shift += w.s + (change += w.c); - } - } - function d3_layout_treeAncestor(vim, v, ancestor) { - return vim.a.parent === v.parent ? vim.a : ancestor; - } - d3.layout.cluster = function() { - var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false; - function cluster(d, i) { - var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0; - d3_layout_hierarchyVisitAfter(root, function(node) { - var children = node.children; - if (children && children.length) { - node.x = d3_layout_clusterX(children); - node.y = d3_layout_clusterY(children); - } else { - node.x = previousNode ? x += separation(node, previousNode) : 0; - node.y = 0; - previousNode = node; + d3.scale.threshold = function () { + return d3_scale_threshold([ 0.5 ], [ 0, 1 ]) + } + function d3_scale_threshold (domain, range) { + function scale (x) { + if (x <= x) return range[d3.bisect(domain, x)] + } + scale.domain = function (_) { + if (!arguments.length) return domain + domain = _ + return scale } - }); - var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2; - d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) { - node.x = (node.x - root.x) * size[0]; - node.y = (root.y - node.y) * size[1]; - } : function(node) { - node.x = (node.x - x0) / (x1 - x0) * size[0]; - node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1]; - }); - return nodes; - } - cluster.separation = function(x) { - if (!arguments.length) return separation; - separation = x; - return cluster; - }; - cluster.size = function(x) { - if (!arguments.length) return nodeSize ? null : size; - nodeSize = (size = x) == null; - return cluster; - }; - cluster.nodeSize = function(x) { - if (!arguments.length) return nodeSize ? size : null; - nodeSize = (size = x) != null; - return cluster; - }; - return d3_layout_hierarchyRebind(cluster, hierarchy); - }; - function d3_layout_clusterY(children) { - return 1 + d3.max(children, function(child) { - return child.y; - }); - } - function d3_layout_clusterX(children) { - return children.reduce(function(x, child) { - return x + child.x; - }, 0) / children.length; - } - function d3_layout_clusterLeft(node) { - var children = node.children; - return children && children.length ? d3_layout_clusterLeft(children[0]) : node; - } - function d3_layout_clusterRight(node) { - var children = node.children, n; - return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node; - } - d3.layout.treemap = function() { - var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5)); - function scale(children, k) { - var i = -1, n = children.length, child, area; - while (++i < n) { - area = (child = children[i]).value * (k < 0 ? 0 : k); - child.area = isNaN(area) || area <= 0 ? 0 : area; + scale.range = function (_) { + if (!arguments.length) return range + range = _ + return scale + } + scale.invertExtent = function (y) { + y = range.indexOf(y) + return [ domain[y - 1], domain[y] ] + } + scale.copy = function () { + return d3_scale_threshold(domain, range) + } + return scale + } + d3.scale.identity = function () { + return d3_scale_identity([ 0, 1 ]) + } + function d3_scale_identity (domain) { + function identity (x) { + return +x + } + identity.invert = identity + identity.domain = identity.range = function (x) { + if (!arguments.length) return domain + domain = x.map(identity) + return identity + } + identity.ticks = function (m) { + return d3_scale_linearTicks(domain, m) + } + identity.tickFormat = function (m, format) { + return d3_scale_linearTickFormat(domain, m, format) + } + identity.copy = function () { + return d3_scale_identity(domain) + } + return identity + } + d3.svg = {} + function d3_zero () { + return 0 } - } - function squarify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while ((n = remaining.length) > 0) { - row.push(child = remaining[n - 1]); - row.area += child.area; - if (mode !== "squarify" || (score = worst(row, u)) <= best) { - remaining.pop(); - best = score; + d3.svg.arc = function () { + var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle + function arc () { + var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1 + if (r1 < r0) rc = r1, r1 = r0, r0 = rc + if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : '') + 'Z' + var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [] + if (ap = (+padAngle.apply(this, arguments) || 0) / 2) { + rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments) + if (!cw) p1 *= -1 + if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap)) + if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap)) + } + if (r1) { + x0 = r1 * Math.cos(a0 + p1) + y0 = r1 * Math.sin(a0 + p1) + x1 = r1 * Math.cos(a1 - p1) + y1 = r1 * Math.sin(a1 - p1) + var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1 + if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) { + var h1 = (a0 + a1) / 2 + x0 = r1 * Math.cos(h1) + y0 = r1 * Math.sin(h1) + x1 = y1 = null + } + } else { + x0 = y0 = 0 + } + if (r0) { + x2 = r0 * Math.cos(a1 - p0) + y2 = r0 * Math.sin(a1 - p0) + x3 = r0 * Math.cos(a0 + p0) + y3 = r0 * Math.sin(a0 + p0) + var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1 + if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) { + var h0 = (a0 + a1) / 2 + x2 = r0 * Math.cos(h0) + y2 = r0 * Math.sin(h0) + x3 = y3 = null + } + } else { + x2 = y2 = 0 + } + if ((rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > 0.001) { + cr = r0 < r1 ^ cw ? 0 : 1 + var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]) + if (x1 != null) { + var rc1 = Math.min(rc, (r1 - lc) / (kc + 1)), t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw) + if (rc === rc1) { + path.push('M', t30[0], 'A', rc1, ',', rc1, ' 0 0,', cr, ' ', t30[1], 'A', r1, ',', r1, ' 0 ', 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), ',', cw, ' ', t12[1], 'A', rc1, ',', rc1, ' 0 0,', cr, ' ', t12[0]) + } else { + path.push('M', t30[0], 'A', rc1, ',', rc1, ' 0 1,', cr, ' ', t12[0]) + } + } else { + path.push('M', x0, ',', y0) + } + if (x3 != null) { + var rc0 = Math.min(rc, (r0 - lc) / (kc - 1)), t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw) + if (rc === rc0) { + path.push('L', t21[0], 'A', rc0, ',', rc0, ' 0 0,', cr, ' ', t21[1], 'A', r0, ',', r0, ' 0 ', cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), ',', 1 - cw, ' ', t03[1], 'A', rc0, ',', rc0, ' 0 0,', cr, ' ', t03[0]) + } else { + path.push('L', t21[0], 'A', rc0, ',', rc0, ' 0 0,', cr, ' ', t03[0]) + } + } else { + path.push('L', x2, ',', y2) + } } else { - row.area -= row.pop().area; - position(row, u, rect, false); - u = Math.min(rect.dx, rect.dy); - row.length = row.area = 0; - best = Infinity; + path.push('M', x0, ',', y0) + if (x1 != null) path.push('A', r1, ',', r1, ' 0 ', l1, ',', cw, ' ', x1, ',', y1) + path.push('L', x2, ',', y2) + if (x3 != null) path.push('A', r0, ',', r0, ' 0 ', l0, ',', 1 - cw, ' ', x3, ',', y3) + } + path.push('Z') + return path.join('') + } + function circleSegment (r1, cw) { + return 'M0,' + r1 + 'A' + r1 + ',' + r1 + ' 0 1,' + cw + ' 0,' + -r1 + 'A' + r1 + ',' + r1 + ' 0 1,' + cw + ' 0,' + r1 + } + arc.innerRadius = function (v) { + if (!arguments.length) return innerRadius + innerRadius = d3_functor(v) + return arc + } + arc.outerRadius = function (v) { + if (!arguments.length) return outerRadius + outerRadius = d3_functor(v) + return arc + } + arc.cornerRadius = function (v) { + if (!arguments.length) return cornerRadius + cornerRadius = d3_functor(v) + return arc + } + arc.padRadius = function (v) { + if (!arguments.length) return padRadius + padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v) + return arc + } + arc.startAngle = function (v) { + if (!arguments.length) return startAngle + startAngle = d3_functor(v) + return arc + } + arc.endAngle = function (v) { + if (!arguments.length) return endAngle + endAngle = d3_functor(v) + return arc + } + arc.padAngle = function (v) { + if (!arguments.length) return padAngle + padAngle = d3_functor(v) + return arc + } + arc.centroid = function () { + var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ + return [ Math.cos(a) * r, Math.sin(a) * r ] + } + return arc + } + var d3_svg_arcAuto = 'auto' + function d3_svg_arcInnerRadius (d) { + return d.innerRadius + } + function d3_svg_arcOuterRadius (d) { + return d.outerRadius + } + function d3_svg_arcStartAngle (d) { + return d.startAngle + } + function d3_svg_arcEndAngle (d) { + return d.endAngle + } + function d3_svg_arcPadAngle (d) { + return d && d.padAngle + } + function d3_svg_arcSweep (x0, y0, x1, y1) { + return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1 + } + function d3_svg_arcCornerTangents (p0, p1, r1, rc, cw) { + var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(r * r * d2 - D * D), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3 + if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1 + return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ] + } + function d3_svg_line (projection) { + var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = 0.7 + function line (data) { + var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y) + function segment () { + segments.push('M', interpolate(projection(points), tension)) + } + while (++i < n) { + if (defined.call(this, d = data[i], i)) { + points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]) + } else if (points.length) { + segment() + points = [] + } + } + if (points.length) segment() + return segments.length ? segments.join('') : null + } + line.x = function (_) { + if (!arguments.length) return x + x = _ + return line + } + line.y = function (_) { + if (!arguments.length) return y + y = _ + return line + } + line.defined = function (_) { + if (!arguments.length) return defined + defined = _ + return line + } + line.interpolate = function (_) { + if (!arguments.length) return interpolateKey + if (typeof _ === 'function') interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key + return line + } + line.tension = function (_) { + if (!arguments.length) return tension + tension = _ + return line + } + return line + } + d3.svg.line = function () { + return d3_svg_line(d3_identity) + } + var d3_svg_lineInterpolators = d3.map({ + linear: d3_svg_lineLinear, + 'linear-closed': d3_svg_lineLinearClosed, + step: d3_svg_lineStep, + 'step-before': d3_svg_lineStepBefore, + 'step-after': d3_svg_lineStepAfter, + basis: d3_svg_lineBasis, + 'basis-open': d3_svg_lineBasisOpen, + 'basis-closed': d3_svg_lineBasisClosed, + bundle: d3_svg_lineBundle, + cardinal: d3_svg_lineCardinal, + 'cardinal-open': d3_svg_lineCardinalOpen, + 'cardinal-closed': d3_svg_lineCardinalClosed, + monotone: d3_svg_lineMonotone + }) + d3_svg_lineInterpolators.forEach(function (key, value) { + value.key = key + value.closed = /-closed$/.test(key) + }) + function d3_svg_lineLinear (points) { + return points.join('L') + } + function d3_svg_lineLinearClosed (points) { + return d3_svg_lineLinear(points) + 'Z' + } + function d3_svg_lineStep (points) { + var i = 0, n = points.length, p = points[0], path = [ p[0], ',', p[1] ] + while (++i < n) path.push('H', (p[0] + (p = points[i])[0]) / 2, 'V', p[1]) + if (n > 1) path.push('H', p[0]) + return path.join('') + } + function d3_svg_lineStepBefore (points) { + var i = 0, n = points.length, p = points[0], path = [ p[0], ',', p[1] ] + while (++i < n) path.push('V', (p = points[i])[1], 'H', p[0]) + return path.join('') + } + function d3_svg_lineStepAfter (points) { + var i = 0, n = points.length, p = points[0], path = [ p[0], ',', p[1] ] + while (++i < n) path.push('H', (p = points[i])[0], 'V', p[1]) + return path.join('') + } + function d3_svg_lineCardinalOpen (points, tension) { + return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension)) + } + function d3_svg_lineCardinalClosed (points, tension) { + return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), + points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)) + } + function d3_svg_lineCardinal (points, tension) { + return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension)) + } + function d3_svg_lineHermite (points, tangents) { + if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) { + return d3_svg_lineLinear(points) + } + var quad = points.length != tangents.length, path = '', p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1 + if (quad) { + path += 'Q' + (p[0] - t0[0] * 2 / 3) + ',' + (p[1] - t0[1] * 2 / 3) + ',' + p[0] + ',' + p[1] + p0 = points[1] + pi = 2 + } + if (tangents.length > 1) { + t = tangents[1] + p = points[pi] + pi++ + path += 'C' + (p0[0] + t0[0]) + ',' + (p0[1] + t0[1]) + ',' + (p[0] - t[0]) + ',' + (p[1] - t[1]) + ',' + p[0] + ',' + p[1] + for (var i = 2; i < tangents.length; i++, pi++) { + p = points[pi] + t = tangents[i] + path += 'S' + (p[0] - t[0]) + ',' + (p[1] - t[1]) + ',' + p[0] + ',' + p[1] } } - if (row.length) { - position(row, u, rect, true); - row.length = row.area = 0; + if (quad) { + var lp = points[pi] + path += 'Q' + (p[0] + t[0] * 2 / 3) + ',' + (p[1] + t[1] * 2 / 3) + ',' + lp[0] + ',' + lp[1] } - children.forEach(squarify); + return path } - } - function stickify(node) { - var children = node.children; - if (children && children.length) { - var rect = pad(node), remaining = children.slice(), child, row = []; - scale(remaining, rect.dx * rect.dy / node.value); - row.area = 0; - while (child = remaining.pop()) { - row.push(child); - row.area += child.area; - if (child.z != null) { - position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length); - row.length = row.area = 0; - } - } - children.forEach(stickify); - } - } - function worst(row, u) { - var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length; - while (++i < n) { - if (!(r = row[i].area)) continue; - if (r < rmin) rmin = r; - if (r > rmax) rmax = r; - } - s *= s; - u *= u; - return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity; - } - function position(row, u, rect, flush) { - var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o; - if (u == rect.dx) { - if (flush || v > rect.dy) v = rect.dy; + function d3_svg_lineCardinalTangents (points, tension) { + var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dy = v; - x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0); - } - o.z = true; - o.dx += rect.x + rect.dx - x; - rect.y += v; - rect.dy -= v; - } else { - if (flush || v > rect.dx) v = rect.dx; + p0 = p1 + p1 = p2 + p2 = points[i] + tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]) + } + return tangents + } + function d3_svg_lineBasis (points) { + if (points.length < 3) return d3_svg_lineLinear(points) + var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ',', y0, 'L', d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ',', d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ] + points.push(points[n - 1]) + while (++i <= n) { + pi = points[i] + px.shift() + px.push(pi[0]) + py.shift() + py.push(pi[1]) + d3_svg_lineBasisBezier(path, px, py) + } + points.pop() + path.push('L', pi) + return path.join('') + } + function d3_svg_lineBasisOpen (points) { + if (points.length < 4) return d3_svg_lineLinear(points) + var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ] + while (++i < 3) { + pi = points[i] + px.push(pi[0]) + py.push(pi[1]) + } + path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + ',' + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)) + --i while (++i < n) { - o = row[i]; - o.x = x; - o.y = y; - o.dx = v; - y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0); + pi = points[i] + px.shift() + px.push(pi[0]) + py.shift() + py.push(pi[1]) + d3_svg_lineBasisBezier(path, px, py) + } + return path.join('') + } + function d3_svg_lineBasisClosed (points) { + var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [] + while (++i < 4) { + pi = points[i % n] + px.push(pi[0]) + py.push(pi[1]) + } + path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ',', d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ] + --i + while (++i < m) { + pi = points[i % n] + px.shift() + px.push(pi[0]) + py.shift() + py.push(pi[1]) + d3_svg_lineBasisBezier(path, px, py) + } + return path.join('') + } + function d3_svg_lineBundle (points, tension) { + var n = points.length - 1 + if (n) { + var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t + while (++i <= n) { + p = points[i] + t = i / n + p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx) + p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy) + } } - o.z = false; - o.dy += rect.y + rect.dy - y; - rect.x += v; - rect.dx -= v; + return d3_svg_lineBasis(points) } - } - function treemap(d) { - var nodes = stickies || hierarchy(d), root = nodes[0]; - root.x = 0; - root.y = 0; - root.dx = size[0]; - root.dy = size[1]; - if (stickies) hierarchy.revalue(root); - scale([ root ], root.dx * root.dy / root.value); - (stickies ? stickify : squarify)(root); - if (sticky) stickies = nodes; - return nodes; - } - treemap.size = function(x) { - if (!arguments.length) return size; - size = x; - return treemap; - }; - treemap.padding = function(x) { - if (!arguments.length) return padding; - function padFunction(node) { - var p = x.call(treemap, node, node.depth); - return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p); - } - function padConstant(node) { - return d3_layout_treemapPad(node, x); - } - var type; - pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], - padConstant) : padConstant; - return treemap; - }; - treemap.round = function(x) { - if (!arguments.length) return round != Number; - round = x ? Math.round : Number; - return treemap; - }; - treemap.sticky = function(x) { - if (!arguments.length) return sticky; - sticky = x; - stickies = null; - return treemap; - }; - treemap.ratio = function(x) { - if (!arguments.length) return ratio; - ratio = x; - return treemap; - }; - treemap.mode = function(x) { - if (!arguments.length) return mode; - mode = x + ""; - return treemap; - }; - return d3_layout_hierarchyRebind(treemap, hierarchy); - }; - function d3_layout_treemapPadNull(node) { - return { - x: node.x, - y: node.y, - dx: node.dx, - dy: node.dy - }; - } - function d3_layout_treemapPad(node, padding) { - var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2]; - if (dx < 0) { - x += dx / 2; - dx = 0; - } - if (dy < 0) { - y += dy / 2; - dy = 0; - } - return { - x: x, - y: y, - dx: dx, - dy: dy - }; - } - d3.random = { - normal: function(µ, σ) { - var n = arguments.length; - if (n < 2) σ = 1; - if (n < 1) µ = 0; - return function() { - var x, y, r; - do { - x = Math.random() * 2 - 1; - y = Math.random() * 2 - 1; - r = x * x + y * y; - } while (!r || r > 1); - return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r); - }; - }, - logNormal: function() { - var random = d3.random.normal.apply(d3, arguments); - return function() { - return Math.exp(random()); - }; - }, - bates: function(m) { - var random = d3.random.irwinHall(m); - return function() { - return random() / m; - }; - }, - irwinHall: function(m) { - return function() { - for (var s = 0, j = 0; j < m; j++) s += Math.random(); - return s; - }; - } - }; - d3.scale = {}; - function d3_scaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [ start, stop ] : [ stop, start ]; - } - function d3_scaleRange(scale) { - return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()); - } - function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { - var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]); - return function(x) { - return i(u(x)); - }; - } - function d3_scale_nice(domain, nice) { - var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx; - if (x1 < x0) { - dx = i0, i0 = i1, i1 = dx; - dx = x0, x0 = x1, x1 = dx; - } - domain[i0] = nice.floor(x0); - domain[i1] = nice.ceil(x1); - return domain; - } - function d3_scale_niceStep(step) { - return step ? { - floor: function(x) { - return Math.floor(x / step) * step; - }, - ceil: function(x) { - return Math.ceil(x / step) * step; - } - } : d3_scale_niceIdentity; - } - var d3_scale_niceIdentity = { - floor: d3_identity, - ceil: d3_identity - }; - function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { - var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1; - if (domain[k] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); - } - while (++j <= k) { - u.push(uninterpolate(domain[j - 1], domain[j])); - i.push(interpolate(range[j - 1], range[j])); - } - return function(x) { - var j = d3.bisect(domain, x, 1, k) - 1; - return i[j](u[j](x)); - }; - } - d3.scale.linear = function() { - return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false); - }; - function d3_scale_linear(domain, range, interpolate, clamp) { - var output, input; - function rescale() { - var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; - output = linear(domain, range, uninterpolate, interpolate); - input = linear(range, domain, uninterpolate, d3_interpolate); - return scale; - } - function scale(x) { - return output(x); - } - scale.invert = function(y) { - return input(y); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.map(Number); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.rangeRound = function(x) { - return scale.range(x).interpolate(d3_interpolateRound); - }; - scale.clamp = function(x) { - if (!arguments.length) return clamp; - clamp = x; - return rescale(); - }; - scale.interpolate = function(x) { - if (!arguments.length) return interpolate; - interpolate = x; - return rescale(); - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - scale.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - scale.nice = function(m) { - d3_scale_linearNice(domain, m); - return rescale(); - }; - scale.copy = function() { - return d3_scale_linear(domain, range, interpolate, clamp); - }; - return rescale(); - } - function d3_scale_linearRebind(scale, linear) { - return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); - } - function d3_scale_linearNice(domain, m) { - return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2])); - } - function d3_scale_linearTickRange(domain, m) { - if (m == null) m = 10; - var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step; - if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2; - extent[0] = Math.ceil(extent[0] / step) * step; - extent[1] = Math.floor(extent[1] / step) * step + step * .5; - extent[2] = step; - return extent; - } - function d3_scale_linearTicks(domain, m) { - return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); - } - function d3_scale_linearTickFormat(domain, m, format) { - var range = d3_scale_linearTickRange(domain, m); - if (format) { - var match = d3_format_re.exec(format); - match.shift(); - if (match[8] === "s") { - var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1]))); - if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2])); - match[8] = "f"; - format = d3.format(match.join("")); - return function(d) { - return format(prefix.scale(d)) + prefix.symbol; - }; + function d3_svg_lineDot4 (a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3] } - if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range); - format = match.join(""); - } else { - format = ",." + d3_scale_linearPrecision(range[2]) + "f"; - } - return d3.format(format); - } - var d3_scale_linearFormatSignificant = { - s: 1, - g: 1, - p: 1, - r: 1, - e: 1 - }; - function d3_scale_linearPrecision(value) { - return -Math.floor(Math.log(value) / Math.LN10 + .01); - } - function d3_scale_linearFormatPrecision(type, range) { - var p = d3_scale_linearPrecision(range[2]); - return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2; - } - d3.scale.log = function() { - return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]); - }; - function d3_scale_log(linear, base, positive, domain) { - function log(x) { - return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base); - } - function pow(x) { - return positive ? Math.pow(base, x) : -Math.pow(base, -x); - } - function scale(x) { - return linear(log(x)); - } - scale.invert = function(x) { - return pow(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - positive = x[0] >= 0; - linear.domain((domain = x.map(Number)).map(log)); - return scale; - }; - scale.base = function(_) { - if (!arguments.length) return base; - base = +_; - linear.domain(domain.map(log)); - return scale; - }; - scale.nice = function() { - var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative); - linear.domain(niced); - domain = niced.map(pow); - return scale; - }; - scale.ticks = function() { - var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base; - if (isFinite(j - i)) { - if (positive) { - for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k); - ticks.push(pow(i)); - } else { - ticks.push(pow(i)); - for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k); - } - for (i = 0; ticks[i] < u; i++) {} - for (j = ticks.length; ticks[j - 1] > v; j--) {} - ticks = ticks.slice(i, j); - } - return ticks; - }; - scale.tickFormat = function(n, format) { - if (!arguments.length) return d3_scale_logFormat; - if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format); - var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12, - Math.floor), e; - return function(d) { - return d / pow(f(log(d) + e)) <= k ? format(d) : ""; - }; - }; - scale.copy = function() { - return d3_scale_log(linear.copy(), base, positive, domain); - }; - return d3_scale_linearRebind(scale, linear); - } - var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = { - floor: function(x) { - return -Math.ceil(-x); - }, - ceil: function(x) { - return -Math.floor(-x); - } - }; - d3.scale.pow = function() { - return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]); - }; - function d3_scale_pow(linear, exponent, domain) { - var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent); - function scale(x) { - return linear(powp(x)); - } - scale.invert = function(x) { - return powb(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return domain; - linear.domain((domain = x.map(Number)).map(powp)); - return scale; - }; - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - scale.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - scale.nice = function(m) { - return scale.domain(d3_scale_linearNice(domain, m)); - }; - scale.exponent = function(x) { - if (!arguments.length) return exponent; - powp = d3_scale_powPow(exponent = x); - powb = d3_scale_powPow(1 / exponent); - linear.domain(domain.map(powp)); - return scale; - }; - scale.copy = function() { - return d3_scale_pow(linear.copy(), exponent, domain); - }; - return d3_scale_linearRebind(scale, linear); - } - function d3_scale_powPow(e) { - return function(x) { - return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); - }; - } - d3.scale.sqrt = function() { - return d3.scale.pow().exponent(.5); - }; - d3.scale.ordinal = function() { - return d3_scale_ordinal([], { - t: "range", - a: [ [] ] - }); - }; - function d3_scale_ordinal(domain, ranger) { - var index, range, rangeBand; - function scale(x) { - return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length]; - } - function steps(start, step) { - return d3.range(domain.length).map(function(i) { - return start + step * i; - }); - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = []; - index = new d3_Map(); - var i = -1, n = x.length, xi; - while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi)); - return scale[ranger.t].apply(scale, ranger.a); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - rangeBand = 0; - ranger = { - t: "range", - a: arguments - }; - return scale; - }; - scale.rangePoints = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, - 0) : (stop - start) / (domain.length - 1 + padding); - range = steps(start + step * padding / 2, step); - rangeBand = 0; - ranger = { - t: "rangePoints", - a: arguments - }; - return scale; - }; - scale.rangeRoundPoints = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), - 0) : (stop - start) / (domain.length - 1 + padding) | 0; - range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step); - rangeBand = 0; - ranger = { - t: "rangeRoundPoints", - a: arguments - }; - return scale; - }; - scale.rangeBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding); - range = steps(start + step * outerPadding, step); - if (reverse) range.reverse(); - rangeBand = step * (1 - padding); - ranger = { - t: "rangeBands", - a: arguments - }; - return scale; - }; - scale.rangeRoundBands = function(x, padding, outerPadding) { - if (arguments.length < 2) padding = 0; - if (arguments.length < 3) outerPadding = padding; - var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)); - range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step); - if (reverse) range.reverse(); - rangeBand = Math.round(step * (1 - padding)); - ranger = { - t: "rangeRoundBands", - a: arguments - }; - return scale; - }; - scale.rangeBand = function() { - return rangeBand; - }; - scale.rangeExtent = function() { - return d3_scaleExtent(ranger.a[0]); - }; - scale.copy = function() { - return d3_scale_ordinal(domain, ranger); - }; - return scale.domain(domain); - } - d3.scale.category10 = function() { - return d3.scale.ordinal().range(d3_category10); - }; - d3.scale.category20 = function() { - return d3.scale.ordinal().range(d3_category20); - }; - d3.scale.category20b = function() { - return d3.scale.ordinal().range(d3_category20b); - }; - d3.scale.category20c = function() { - return d3.scale.ordinal().range(d3_category20c); - }; - var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString); - var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString); - var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString); - var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString); - d3.scale.quantile = function() { - return d3_scale_quantile([], []); - }; - function d3_scale_quantile(domain, range) { - var thresholds; - function rescale() { - var k = 0, q = range.length; - thresholds = []; - while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); - return scale; - } - function scale(x) { - if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)]; - } - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending); - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.quantiles = function() { - return thresholds; - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ]; - }; - scale.copy = function() { - return d3_scale_quantile(domain, range); - }; - return rescale(); - } - d3.scale.quantize = function() { - return d3_scale_quantize(0, 1, [ 0, 1 ]); - }; - function d3_scale_quantize(x0, x1, range) { - var kx, i; - function scale(x) { - return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; - } - function rescale() { - kx = range.length / (x1 - x0); - i = range.length - 1; - return scale; - } - scale.domain = function(x) { - if (!arguments.length) return [ x0, x1 ]; - x0 = +x[0]; - x1 = +x[x.length - 1]; - return rescale(); - }; - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - y = y < 0 ? NaN : y / kx + x0; - return [ y, y + 1 / kx ]; - }; - scale.copy = function() { - return d3_scale_quantize(x0, x1, range); - }; - return rescale(); - } - d3.scale.threshold = function() { - return d3_scale_threshold([ .5 ], [ 0, 1 ]); - }; - function d3_scale_threshold(domain, range) { - function scale(x) { - if (x <= x) return range[d3.bisect(domain, x)]; - } - scale.domain = function(_) { - if (!arguments.length) return domain; - domain = _; - return scale; - }; - scale.range = function(_) { - if (!arguments.length) return range; - range = _; - return scale; - }; - scale.invertExtent = function(y) { - y = range.indexOf(y); - return [ domain[y - 1], domain[y] ]; - }; - scale.copy = function() { - return d3_scale_threshold(domain, range); - }; - return scale; - } - d3.scale.identity = function() { - return d3_scale_identity([ 0, 1 ]); - }; - function d3_scale_identity(domain) { - function identity(x) { - return +x; - } - identity.invert = identity; - identity.domain = identity.range = function(x) { - if (!arguments.length) return domain; - domain = x.map(identity); - return identity; - }; - identity.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - identity.tickFormat = function(m, format) { - return d3_scale_linearTickFormat(domain, m, format); - }; - identity.copy = function() { - return d3_scale_identity(domain); - }; - return identity; - } - d3.svg = {}; - function d3_zero() { - return 0; - } - d3.svg.arc = function() { - var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle; - function arc() { - var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1; - if (r1 < r0) rc = r1, r1 = r0, r0 = rc; - if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : "") + "Z"; - var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = []; - if (ap = (+padAngle.apply(this, arguments) || 0) / 2) { - rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments); - if (!cw) p1 *= -1; - if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap)); - if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap)); - } - if (r1) { - x0 = r1 * Math.cos(a0 + p1); - y0 = r1 * Math.sin(a0 + p1); - x1 = r1 * Math.cos(a1 - p1); - y1 = r1 * Math.sin(a1 - p1); - var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1; - if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) { - var h1 = (a0 + a1) / 2; - x0 = r1 * Math.cos(h1); - y0 = r1 * Math.sin(h1); - x1 = y1 = null; - } - } else { - x0 = y0 = 0; - } - if (r0) { - x2 = r0 * Math.cos(a1 - p0); - y2 = r0 * Math.sin(a1 - p0); - x3 = r0 * Math.cos(a0 + p0); - y3 = r0 * Math.sin(a0 + p0); - var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1; - if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) { - var h0 = (a0 + a1) / 2; - x2 = r0 * Math.cos(h0); - y2 = r0 * Math.sin(h0); - x3 = y3 = null; + var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ] + function d3_svg_lineBasisBezier (path, x, y) { + path.push('C', d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ',', d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ',', d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ',', d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ',', d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ',', d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)) + } + function d3_svg_lineSlope (p0, p1) { + return (p1[1] - p0[1]) / (p1[0] - p0[0]) + } + function d3_svg_lineFiniteDifferences (points) { + var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1) + while (++i < j) { + m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2 } - } else { - x2 = y2 = 0; - } - if ((rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) { - cr = r0 < r1 ^ cw ? 0 : 1; - var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]); - if (x1 != null) { - var rc1 = Math.min(rc, (r1 - lc) / (kc + 1)), t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw); - if (rc === rc1) { - path.push("M", t30[0], "A", rc1, ",", rc1, " 0 0,", cr, " ", t30[1], "A", r1, ",", r1, " 0 ", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), ",", cw, " ", t12[1], "A", rc1, ",", rc1, " 0 0,", cr, " ", t12[0]); + m[i] = d + return m + } + function d3_svg_lineMonotoneTangents (points) { + var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1 + while (++i < j) { + d = d3_svg_lineSlope(points[i], points[i + 1]) + if (abs(d) < ε) { + m[i] = m[i + 1] = 0 } else { - path.push("M", t30[0], "A", rc1, ",", rc1, " 0 1,", cr, " ", t12[0]); + a = m[i] / d + b = m[i + 1] / d + s = a * a + b * b + if (s > 9) { + s = d * 3 / Math.sqrt(s) + m[i] = s * a + m[i + 1] = s * b + } } - } else { - path.push("M", x0, ",", y0); } - if (x3 != null) { - var rc0 = Math.min(rc, (r0 - lc) / (kc - 1)), t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw); - if (rc === rc0) { - path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t21[1], "A", r0, ",", r0, " 0 ", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), ",", 1 - cw, " ", t03[1], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]); - } else { - path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]); - } - } else { - path.push("L", x2, ",", y2); + i = -1 + while (++i <= j) { + s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i])) + tangents.push([ s || 0, m[i] * s || 0 ]) } - } else { - path.push("M", x0, ",", y0); - if (x1 != null) path.push("A", r1, ",", r1, " 0 ", l1, ",", cw, " ", x1, ",", y1); - path.push("L", x2, ",", y2); - if (x3 != null) path.push("A", r0, ",", r0, " 0 ", l0, ",", 1 - cw, " ", x3, ",", y3); + return tangents } - path.push("Z"); - return path.join(""); - } - function circleSegment(r1, cw) { - return "M0," + r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + -r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + r1; - } - arc.innerRadius = function(v) { - if (!arguments.length) return innerRadius; - innerRadius = d3_functor(v); - return arc; - }; - arc.outerRadius = function(v) { - if (!arguments.length) return outerRadius; - outerRadius = d3_functor(v); - return arc; - }; - arc.cornerRadius = function(v) { - if (!arguments.length) return cornerRadius; - cornerRadius = d3_functor(v); - return arc; - }; - arc.padRadius = function(v) { - if (!arguments.length) return padRadius; - padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v); - return arc; - }; - arc.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return arc; - }; - arc.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return arc; - }; - arc.padAngle = function(v) { - if (!arguments.length) return padAngle; - padAngle = d3_functor(v); - return arc; - }; - arc.centroid = function() { - var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ; - return [ Math.cos(a) * r, Math.sin(a) * r ]; - }; - return arc; - }; - var d3_svg_arcAuto = "auto"; - function d3_svg_arcInnerRadius(d) { - return d.innerRadius; - } - function d3_svg_arcOuterRadius(d) { - return d.outerRadius; - } - function d3_svg_arcStartAngle(d) { - return d.startAngle; - } - function d3_svg_arcEndAngle(d) { - return d.endAngle; - } - function d3_svg_arcPadAngle(d) { - return d && d.padAngle; - } - function d3_svg_arcSweep(x0, y0, x1, y1) { - return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1; - } - function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) { - var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(r * r * d2 - D * D), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3; - if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; - return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ]; - } - function d3_svg_line(projection) { - var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7; - function line(data) { - var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y); - function segment() { - segments.push("M", interpolate(projection(points), tension)); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]); - } else if (points.length) { - segment(); - points = []; - } - } - if (points.length) segment(); - return segments.length ? segments.join("") : null; - } - line.x = function(_) { - if (!arguments.length) return x; - x = _; - return line; - }; - line.y = function(_) { - if (!arguments.length) return y; - y = _; - return line; - }; - line.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return line; - }; - line.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - return line; - }; - line.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return line; - }; - return line; - } - d3.svg.line = function() { - return d3_svg_line(d3_identity); - }; - var d3_svg_lineInterpolators = d3.map({ - linear: d3_svg_lineLinear, - "linear-closed": d3_svg_lineLinearClosed, - step: d3_svg_lineStep, - "step-before": d3_svg_lineStepBefore, - "step-after": d3_svg_lineStepAfter, - basis: d3_svg_lineBasis, - "basis-open": d3_svg_lineBasisOpen, - "basis-closed": d3_svg_lineBasisClosed, - bundle: d3_svg_lineBundle, - cardinal: d3_svg_lineCardinal, - "cardinal-open": d3_svg_lineCardinalOpen, - "cardinal-closed": d3_svg_lineCardinalClosed, - monotone: d3_svg_lineMonotone - }); - d3_svg_lineInterpolators.forEach(function(key, value) { - value.key = key; - value.closed = /-closed$/.test(key); - }); - function d3_svg_lineLinear(points) { - return points.join("L"); - } - function d3_svg_lineLinearClosed(points) { - return d3_svg_lineLinear(points) + "Z"; - } - function d3_svg_lineStep(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]); - if (n > 1) path.push("H", p[0]); - return path.join(""); - } - function d3_svg_lineStepBefore(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); - return path.join(""); - } - function d3_svg_lineStepAfter(points) { - var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; - while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); - return path.join(""); - } - function d3_svg_lineCardinalOpen(points, tension) { - return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineCardinalClosed(points, tension) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), - points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)); - } - function d3_svg_lineCardinal(points, tension) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension)); - } - function d3_svg_lineHermite(points, tangents) { - if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) { - return d3_svg_lineLinear(points); - } - var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1; - if (quad) { - path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1]; - p0 = points[1]; - pi = 2; - } - if (tangents.length > 1) { - t = tangents[1]; - p = points[pi]; - pi++; - path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; - for (var i = 2; i < tangents.length; i++, pi++) { - p = points[pi]; - t = tangents[i]; - path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; + function d3_svg_lineMonotone (points) { + return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)) } - } - if (quad) { - var lp = points[pi]; - path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1]; - } - return path; - } - function d3_svg_lineCardinalTangents(points, tension) { - var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length; - while (++i < n) { - p0 = p1; - p1 = p2; - p2 = points[i]; - tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]); - } - return tangents; - } - function d3_svg_lineBasis(points) { - if (points.length < 3) return d3_svg_lineLinear(points); - var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0, "L", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; - points.push(points[n - 1]); - while (++i <= n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - points.pop(); - path.push("L", pi); - return path.join(""); - } - function d3_svg_lineBasisOpen(points) { - if (points.length < 4) return d3_svg_lineLinear(points); - var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ]; - while (++i < 3) { - pi = points[i]; - px.push(pi[0]); - py.push(pi[1]); - } - path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); - --i; - while (++i < n) { - pi = points[i]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBasisClosed(points) { - var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = []; - while (++i < 4) { - pi = points[i % n]; - px.push(pi[0]); - py.push(pi[1]); - } - path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; - --i; - while (++i < m) { - pi = points[i % n]; - px.shift(); - px.push(pi[0]); - py.shift(); - py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); - } - function d3_svg_lineBundle(points, tension) { - var n = points.length - 1; - if (n) { - var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t; - while (++i <= n) { - p = points[i]; - t = i / n; - p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); - p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); + d3.svg.line.radial = function () { + var line = d3_svg_line(d3_svg_lineRadial) + line.radius = line.x, delete line.x + line.angle = line.y, delete line.y + return line } - } - return d3_svg_lineBasis(points); - } - function d3_svg_lineDot4(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; - } - var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ]; - function d3_svg_lineBasisBezier(path, x, y) { - path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); - } - function d3_svg_lineSlope(p0, p1) { - return (p1[1] - p0[1]) / (p1[0] - p0[0]); - } - function d3_svg_lineFiniteDifferences(points) { - var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1); - while (++i < j) { - m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2; - } - m[i] = d; - return m; - } - function d3_svg_lineMonotoneTangents(points) { - var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1; - while (++i < j) { - d = d3_svg_lineSlope(points[i], points[i + 1]); - if (abs(d) < ε) { - m[i] = m[i + 1] = 0; - } else { - a = m[i] / d; - b = m[i + 1] / d; - s = a * a + b * b; - if (s > 9) { - s = d * 3 / Math.sqrt(s); - m[i] = s * a; - m[i + 1] = s * b; + function d3_svg_lineRadial (points) { + var point, i = -1, n = points.length, r, a + while (++i < n) { + point = points[i] + r = point[0] + a = point[1] - halfπ + point[0] = r * Math.cos(a) + point[1] = r * Math.sin(a) + } + return points + } + function d3_svg_area (projection) { + var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = 'L', tension = 0.7 + function area (data) { + var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function () { + return x + } : d3_functor(x1), fy1 = y0 === y1 ? function () { + return y + } : d3_functor(y1), x, y + function segment () { + segments.push('M', interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), 'Z') + } + while (++i < n) { + if (defined.call(this, d = data[i], i)) { + points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]) + points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]) + } else if (points0.length) { + segment() + points0 = [] + points1 = [] + } + } + if (points0.length) segment() + return segments.length ? segments.join('') : null + } + area.x = function (_) { + if (!arguments.length) return x1 + x0 = x1 = _ + return area + } + area.x0 = function (_) { + if (!arguments.length) return x0 + x0 = _ + return area + } + area.x1 = function (_) { + if (!arguments.length) return x1 + x1 = _ + return area + } + area.y = function (_) { + if (!arguments.length) return y1 + y0 = y1 = _ + return area + } + area.y0 = function (_) { + if (!arguments.length) return y0 + y0 = _ + return area + } + area.y1 = function (_) { + if (!arguments.length) return y1 + y1 = _ + return area + } + area.defined = function (_) { + if (!arguments.length) return defined + defined = _ + return area + } + area.interpolate = function (_) { + if (!arguments.length) return interpolateKey + if (typeof _ === 'function') interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key + interpolateReverse = interpolate.reverse || interpolate + L = interpolate.closed ? 'M' : 'L' + return area + } + area.tension = function (_) { + if (!arguments.length) return tension + tension = _ + return area + } + return area + } + d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter + d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore + d3.svg.area = function () { + return d3_svg_area(d3_identity) + } + d3.svg.area.radial = function () { + var area = d3_svg_area(d3_svg_lineRadial) + area.radius = area.x, delete area.x + area.innerRadius = area.x0, delete area.x0 + area.outerRadius = area.x1, delete area.x1 + area.angle = area.y, delete area.y + area.startAngle = area.y0, delete area.y0 + area.endAngle = area.y1, delete area.y1 + return area + } + d3.svg.chord = function () { + var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle + function chord (d, i) { + var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i) + return 'M' + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + 'Z' + } + function subgroup (self, f, d, i) { + var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ + return { + r: r, + a0: a0, + a1: a1, + p0: [ r * Math.cos(a0), r * Math.sin(a0) ], + p1: [ r * Math.cos(a1), r * Math.sin(a1) ] + } + } + function equals (a, b) { + return a.a0 == b.a0 && a.a1 == b.a1 + } + function arc (r, p, a) { + return 'A' + r + ',' + r + ' 0 ' + +(a > π) + ',1 ' + p + } + function curve (r0, p0, r1, p1) { + return 'Q 0,0 ' + p1 + } + chord.radius = function (v) { + if (!arguments.length) return radius + radius = d3_functor(v) + return chord + } + chord.source = function (v) { + if (!arguments.length) return source + source = d3_functor(v) + return chord + } + chord.target = function (v) { + if (!arguments.length) return target + target = d3_functor(v) + return chord + } + chord.startAngle = function (v) { + if (!arguments.length) return startAngle + startAngle = d3_functor(v) + return chord + } + chord.endAngle = function (v) { + if (!arguments.length) return endAngle + endAngle = d3_functor(v) + return chord + } + return chord + } + function d3_svg_chordRadius (d) { + return d.radius + } + d3.svg.diagonal = function () { + var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection + function diagonal (d, i) { + var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, { + x: p0.x, + y: m + }, { + x: p3.x, + y: m + }, p3 ] + p = p.map(projection) + return 'M' + p[0] + 'C' + p[1] + ' ' + p[2] + ' ' + p[3] + } + diagonal.source = function (x) { + if (!arguments.length) return source + source = d3_functor(x) + return diagonal + } + diagonal.target = function (x) { + if (!arguments.length) return target + target = d3_functor(x) + return diagonal + } + diagonal.projection = function (x) { + if (!arguments.length) return projection + projection = x + return diagonal + } + return diagonal + } + function d3_svg_diagonalProjection (d) { + return [ d.x, d.y ] + } + d3.svg.diagonal.radial = function () { + var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection + diagonal.projection = function (x) { + return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection + } + return diagonal + } + function d3_svg_diagonalRadialProjection (projection) { + return function () { + var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ + return [ r * Math.cos(a), r * Math.sin(a) ] + } + } + d3.svg.symbol = function () { + var type = d3_svg_symbolType, size = d3_svg_symbolSize + function symbol (d, i) { + return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i)) + } + symbol.type = function (x) { + if (!arguments.length) return type + type = d3_functor(x) + return symbol + } + symbol.size = function (x) { + if (!arguments.length) return size + size = d3_functor(x) + return symbol + } + return symbol + } + function d3_svg_symbolSize () { + return 64 + } + function d3_svg_symbolType () { + return 'circle' + } + function d3_svg_symbolCircle (size) { + var r = Math.sqrt(size / π) + return 'M0,' + r + 'A' + r + ',' + r + ' 0 1,1 0,' + -r + 'A' + r + ',' + r + ' 0 1,1 0,' + r + 'Z' + } + var d3_svg_symbols = d3.map({ + circle: d3_svg_symbolCircle, + cross: function (size) { + var r = Math.sqrt(size / 5) / 2 + return 'M' + -3 * r + ',' + -r + 'H' + -r + 'V' + -3 * r + 'H' + r + 'V' + -r + 'H' + 3 * r + 'V' + r + 'H' + r + 'V' + 3 * r + 'H' + -r + 'V' + r + 'H' + -3 * r + 'Z' + }, + diamond: function (size) { + var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30 + return 'M0,' + -ry + 'L' + rx + ',0' + ' 0,' + ry + ' ' + -rx + ',0' + 'Z' + }, + square: function (size) { + var r = Math.sqrt(size) / 2 + return 'M' + -r + ',' + -r + 'L' + r + ',' + -r + ' ' + r + ',' + r + ' ' + -r + ',' + r + 'Z' + }, + 'triangle-down': function (size) { + var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2 + return 'M0,' + ry + 'L' + rx + ',' + -ry + ' ' + -rx + ',' + -ry + 'Z' + }, + 'triangle-up': function (size) { + var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2 + return 'M0,' + -ry + 'L' + rx + ',' + ry + ' ' + -rx + ',' + ry + 'Z' } + }) + d3.svg.symbolTypes = d3_svg_symbols.keys() + var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians) + d3_selectionPrototype.transition = function (name) { + var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || { + time: Date.now(), + ease: d3_ease_cubicInOut, + delay: 0, + duration: 250 + } + for (var j = -1, m = this.length; ++j < m;) { + subgroups.push(subgroup = []) + for (var group = this[j], i = -1, n = group.length; ++i < n;) { + if (node = group[i]) d3_transitionNode(node, i, ns, id, transition) + subgroup.push(node) + } + } + return d3_transition(subgroups, ns, id) } - } - i = -1; - while (++i <= j) { - s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i])); - tangents.push([ s || 0, m[i] * s || 0 ]); - } - return tangents; - } - function d3_svg_lineMonotone(points) { - return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); - } - d3.svg.line.radial = function() { - var line = d3_svg_line(d3_svg_lineRadial); - line.radius = line.x, delete line.x; - line.angle = line.y, delete line.y; - return line; - }; - function d3_svg_lineRadial(points) { - var point, i = -1, n = points.length, r, a; - while (++i < n) { - point = points[i]; - r = point[0]; - a = point[1] - halfπ; - point[0] = r * Math.cos(a); - point[1] = r * Math.sin(a); - } - return points; - } - function d3_svg_area(projection) { - var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7; - function area(data) { - var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() { - return x; - } : d3_functor(x1), fy1 = y0 === y1 ? function() { - return y; - } : d3_functor(y1), x, y; - function segment() { - segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z"); - } - while (++i < n) { - if (defined.call(this, d = data[i], i)) { - points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]); - points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]); - } else if (points0.length) { - segment(); - points0 = []; - points1 = []; - } - } - if (points0.length) segment(); - return segments.length ? segments.join("") : null; - } - area.x = function(_) { - if (!arguments.length) return x1; - x0 = x1 = _; - return area; - }; - area.x0 = function(_) { - if (!arguments.length) return x0; - x0 = _; - return area; - }; - area.x1 = function(_) { - if (!arguments.length) return x1; - x1 = _; - return area; - }; - area.y = function(_) { - if (!arguments.length) return y1; - y0 = y1 = _; - return area; - }; - area.y0 = function(_) { - if (!arguments.length) return y0; - y0 = _; - return area; - }; - area.y1 = function(_) { - if (!arguments.length) return y1; - y1 = _; - return area; - }; - area.defined = function(_) { - if (!arguments.length) return defined; - defined = _; - return area; - }; - area.interpolate = function(_) { - if (!arguments.length) return interpolateKey; - if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; - interpolateReverse = interpolate.reverse || interpolate; - L = interpolate.closed ? "M" : "L"; - return area; - }; - area.tension = function(_) { - if (!arguments.length) return tension; - tension = _; - return area; - }; - return area; - } - d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; - d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; - d3.svg.area = function() { - return d3_svg_area(d3_identity); - }; - d3.svg.area.radial = function() { - var area = d3_svg_area(d3_svg_lineRadial); - area.radius = area.x, delete area.x; - area.innerRadius = area.x0, delete area.x0; - area.outerRadius = area.x1, delete area.x1; - area.angle = area.y, delete area.y; - area.startAngle = area.y0, delete area.y0; - area.endAngle = area.y1, delete area.y1; - return area; - }; - d3.svg.chord = function() { - var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; - function chord(d, i) { - var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i); - return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z"; - } - function subgroup(self, f, d, i) { - var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ; - return { - r: r, - a0: a0, - a1: a1, - p0: [ r * Math.cos(a0), r * Math.sin(a0) ], - p1: [ r * Math.cos(a1), r * Math.sin(a1) ] - }; - } - function equals(a, b) { - return a.a0 == b.a0 && a.a1 == b.a1; - } - function arc(r, p, a) { - return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p; - } - function curve(r0, p0, r1, p1) { - return "Q 0,0 " + p1; - } - chord.radius = function(v) { - if (!arguments.length) return radius; - radius = d3_functor(v); - return chord; - }; - chord.source = function(v) { - if (!arguments.length) return source; - source = d3_functor(v); - return chord; - }; - chord.target = function(v) { - if (!arguments.length) return target; - target = d3_functor(v); - return chord; - }; - chord.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3_functor(v); - return chord; - }; - chord.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3_functor(v); - return chord; - }; - return chord; - }; - function d3_svg_chordRadius(d) { - return d.radius; - } - d3.svg.diagonal = function() { - var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection; - function diagonal(d, i) { - var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, { - x: p0.x, - y: m - }, { - x: p3.x, - y: m - }, p3 ]; - p = p.map(projection); - return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; - } - diagonal.source = function(x) { - if (!arguments.length) return source; - source = d3_functor(x); - return diagonal; - }; - diagonal.target = function(x) { - if (!arguments.length) return target; - target = d3_functor(x); - return diagonal; - }; - diagonal.projection = function(x) { - if (!arguments.length) return projection; - projection = x; - return diagonal; - }; - return diagonal; - }; - function d3_svg_diagonalProjection(d) { - return [ d.x, d.y ]; - } - d3.svg.diagonal.radial = function() { - var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection; - diagonal.projection = function(x) { - return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection; - }; - return diagonal; - }; - function d3_svg_diagonalRadialProjection(projection) { - return function() { - var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ; - return [ r * Math.cos(a), r * Math.sin(a) ]; - }; - } - d3.svg.symbol = function() { - var type = d3_svg_symbolType, size = d3_svg_symbolSize; - function symbol(d, i) { - return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i)); - } - symbol.type = function(x) { - if (!arguments.length) return type; - type = d3_functor(x); - return symbol; - }; - symbol.size = function(x) { - if (!arguments.length) return size; - size = d3_functor(x); - return symbol; - }; - return symbol; - }; - function d3_svg_symbolSize() { - return 64; - } - function d3_svg_symbolType() { - return "circle"; - } - function d3_svg_symbolCircle(size) { - var r = Math.sqrt(size / π); - return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z"; - } - var d3_svg_symbols = d3.map({ - circle: d3_svg_symbolCircle, - cross: function(size) { - var r = Math.sqrt(size / 5) / 2; - return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z"; - }, - diamond: function(size) { - var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30; - return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z"; - }, - square: function(size) { - var r = Math.sqrt(size) / 2; - return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z"; - }, - "triangle-down": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z"; - }, - "triangle-up": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z"; - } - }); - d3.svg.symbolTypes = d3_svg_symbols.keys(); - var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians); - d3_selectionPrototype.transition = function(name) { - var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || { - time: Date.now(), - ease: d3_ease_cubicInOut, - delay: 0, - duration: 250 - }; - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) d3_transitionNode(node, i, ns, id, transition); - subgroup.push(node); + d3_selectionPrototype.interrupt = function (name) { + return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name))) } - } - return d3_transition(subgroups, ns, id); - }; - d3_selectionPrototype.interrupt = function(name) { - return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name))); - }; - var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace()); - function d3_selection_interruptNS(ns) { - return function() { - var lock, active; - if ((lock = this[ns]) && (active = lock[lock.active])) { - if (--lock.count) delete lock[lock.active]; else delete this[ns]; - lock.active += .5; - active.event && active.event.interrupt.call(this, this.__data__, active.index); - } - }; - } - function d3_transition(groups, ns, id) { - d3_subclass(groups, d3_transitionPrototype); - groups.namespace = ns; - groups.id = id; - return groups; - } - var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit; - d3_transitionPrototype.call = d3_selectionPrototype.call; - d3_transitionPrototype.empty = d3_selectionPrototype.empty; - d3_transitionPrototype.node = d3_selectionPrototype.node; - d3_transitionPrototype.size = d3_selectionPrototype.size; - d3.transition = function(selection, name) { - return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection); - }; - d3.transition.prototype = d3_transitionPrototype; - d3_transitionPrototype.select = function(selector) { - var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node; - selector = d3_selection_selector(selector); - for (var j = -1, m = this.length; ++j < m; ) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - d3_transitionNode(subnode, i, ns, id, node[ns][id]); - subgroup.push(subnode); - } else { - subgroup.push(null); + var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace()) + function d3_selection_interruptNS (ns) { + return function () { + var lock, active + if ((lock = this[ns]) && (active = lock[lock.active])) { + if (--lock.count) delete lock[lock.active]; else delete this[ns] + lock.active += 0.5 + active.event && active.event.interrupt.call(this, this.__data__, active.index) + } } } - } - return d3_transition(subgroups, ns, id); - }; - d3_transitionPrototype.selectAll = function(selector) { - var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition; - selector = d3_selection_selectorAll(selector); - for (var j = -1, m = this.length; ++j < m; ) { - for (var group = this[j], i = -1, n = group.length; ++i < n; ) { - if (node = group[i]) { - transition = node[ns][id]; - subnodes = selector.call(node, node.__data__, i, j); - subgroups.push(subgroup = []); - for (var k = -1, o = subnodes.length; ++k < o; ) { - if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition); - subgroup.push(subnode); + function d3_transition (groups, ns, id) { + d3_subclass(groups, d3_transitionPrototype) + groups.namespace = ns + groups.id = id + return groups + } + var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit + d3_transitionPrototype.call = d3_selectionPrototype.call + d3_transitionPrototype.empty = d3_selectionPrototype.empty + d3_transitionPrototype.node = d3_selectionPrototype.node + d3_transitionPrototype.size = d3_selectionPrototype.size + d3.transition = function (selection, name) { + return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection) + } + d3.transition.prototype = d3_transitionPrototype + d3_transitionPrototype.select = function (selector) { + var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node + selector = d3_selection_selector(selector) + for (var j = -1, m = this.length; ++j < m;) { + subgroups.push(subgroup = []) + for (var group = this[j], i = -1, n = group.length; ++i < n;) { + if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) { + if ('__data__' in node) subnode.__data__ = node.__data__ + d3_transitionNode(subnode, i, ns, id, node[ns][id]) + subgroup.push(subnode) + } else { + subgroup.push(null) + } + } + } + return d3_transition(subgroups, ns, id) + } + d3_transitionPrototype.selectAll = function (selector) { + var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition + selector = d3_selection_selectorAll(selector) + for (var j = -1, m = this.length; ++j < m;) { + for (var group = this[j], i = -1, n = group.length; ++i < n;) { + if (node = group[i]) { + transition = node[ns][id] + subnodes = selector.call(node, node.__data__, i, j) + subgroups.push(subgroup = []) + for (var k = -1, o = subnodes.length; ++k < o;) { + if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition) + subgroup.push(subnode) + } + } } } + return d3_transition(subgroups, ns, id) } - } - return d3_transition(subgroups, ns, id); - }; - d3_transitionPrototype.filter = function(filter) { - var subgroups = [], subgroup, group, node; - if (typeof filter !== "function") filter = d3_selection_filter(filter); - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { - subgroup.push(node); + d3_transitionPrototype.filter = function (filter) { + var subgroups = [], subgroup, group, node + if (typeof filter !== 'function') filter = d3_selection_filter(filter) + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []) + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { + subgroup.push(node) + } + } } + return d3_transition(subgroups, this.namespace, this.id) } - } - return d3_transition(subgroups, this.namespace, this.id); - }; - d3_transitionPrototype.tween = function(name, tween) { - var id = this.id, ns = this.namespace; - if (arguments.length < 2) return this.node()[ns][id].tween.get(name); - return d3_selection_each(this, tween == null ? function(node) { - node[ns][id].tween.remove(name); - } : function(node) { - node[ns][id].tween.set(name, tween); - }); - }; - function d3_transition_tween(groups, name, value, tween) { - var id = groups.id, ns = groups.namespace; - return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) { - node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j))); - } : (value = tween(value), function(node) { - node[ns][id].tween.set(name, value); - })); - } - d3_transitionPrototype.attr = function(nameNS, value) { - if (arguments.length < 2) { - for (value in nameNS) this.attr(value, nameNS[value]); - return this; - } - var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS); - function attrNull() { - this.removeAttribute(name); - } - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - function attrTween(b) { - return b == null ? attrNull : (b += "", function() { - var a = this.getAttribute(name), i; - return a !== b && (i = interpolate(a, b), function(t) { - this.setAttribute(name, i(t)); - }); - }); - } - function attrTweenNS(b) { - return b == null ? attrNullNS : (b += "", function() { - var a = this.getAttributeNS(name.space, name.local), i; - return a !== b && (i = interpolate(a, b), function(t) { - this.setAttributeNS(name.space, name.local, i(t)); - }); - }); - } - return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween); - }; - d3_transitionPrototype.attrTween = function(nameNS, tween) { - var name = d3.ns.qualify(nameNS); - function attrTween(d, i) { - var f = tween.call(this, d, i, this.getAttribute(name)); - return f && function(t) { - this.setAttribute(name, f(t)); - }; - } - function attrTweenNS(d, i) { - var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); - return f && function(t) { - this.setAttributeNS(name.space, name.local, f(t)); - }; - } - return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); - }; - d3_transitionPrototype.style = function(name, value, priority) { - var n = arguments.length; - if (n < 3) { - if (typeof name !== "string") { - if (n < 2) value = ""; - for (priority in name) this.style(priority, name[priority], value); - return this; - } - priority = ""; - } - function styleNull() { - this.style.removeProperty(name); - } - function styleString(b) { - return b == null ? styleNull : (b += "", function() { - var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i; - return a !== b && (i = d3_interpolate(a, b), function(t) { - this.style.setProperty(name, i(t), priority); - }); - }); - } - return d3_transition_tween(this, "style." + name, value, styleString); - }; - d3_transitionPrototype.styleTween = function(name, tween, priority) { - if (arguments.length < 3) priority = ""; - function styleTween(d, i) { - var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name)); - return f && function(t) { - this.style.setProperty(name, f(t), priority); - }; - } - return this.tween("style." + name, styleTween); - }; - d3_transitionPrototype.text = function(value) { - return d3_transition_tween(this, "text", value, d3_transition_text); - }; - function d3_transition_text(b) { - if (b == null) b = ""; - return function() { - this.textContent = b; - }; - } - d3_transitionPrototype.remove = function() { - var ns = this.namespace; - return this.each("end.transition", function() { - var p; - if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this); - }); - }; - d3_transitionPrototype.ease = function(value) { - var id = this.id, ns = this.namespace; - if (arguments.length < 1) return this.node()[ns][id].ease; - if (typeof value !== "function") value = d3.ease.apply(d3, arguments); - return d3_selection_each(this, function(node) { - node[ns][id].ease = value; - }); - }; - d3_transitionPrototype.delay = function(value) { - var id = this.id, ns = this.namespace; - if (arguments.length < 1) return this.node()[ns][id].delay; - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node[ns][id].delay = +value.call(node, node.__data__, i, j); - } : (value = +value, function(node) { - node[ns][id].delay = value; - })); - }; - d3_transitionPrototype.duration = function(value) { - var id = this.id, ns = this.namespace; - if (arguments.length < 1) return this.node()[ns][id].duration; - return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { - node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j)); - } : (value = Math.max(1, value), function(node) { - node[ns][id].duration = value; - })); - }; - d3_transitionPrototype.each = function(type, listener) { - var id = this.id, ns = this.namespace; - if (arguments.length < 2) { - var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId; - try { - d3_transitionInheritId = id; - d3_selection_each(this, function(node, i, j) { - d3_transitionInherit = node[ns][id]; - type.call(node, node.__data__, i, j); - }); - } finally { - d3_transitionInherit = inherit; - d3_transitionInheritId = inheritId; - } - } else { - d3_selection_each(this, function(node) { - var transition = node[ns][id]; - (transition.event || (transition.event = d3.dispatch("start", "end", "interrupt"))).on(type, listener); - }); - } - return this; - }; - d3_transitionPrototype.transition = function() { - var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition; - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - if (node = group[i]) { - transition = node[ns][id0]; - d3_transitionNode(node, i, ns, id1, { - time: transition.time, - ease: transition.ease, - delay: transition.delay + transition.duration, - duration: transition.duration - }); - } - subgroup.push(node); + d3_transitionPrototype.tween = function (name, tween) { + var id = this.id, ns = this.namespace + if (arguments.length < 2) return this.node()[ns][id].tween.get(name) + return d3_selection_each(this, tween == null ? function (node) { + node[ns][id].tween.remove(name) + } : function (node) { + node[ns][id].tween.set(name, tween) + }) } - } - return d3_transition(subgroups, ns, id1); - }; - function d3_transitionNamespace(name) { - return name == null ? "__transition__" : "__transition_" + name + "__"; - } - function d3_transitionNode(node, i, ns, id, inherit) { - var lock = node[ns] || (node[ns] = { - active: 0, - count: 0 - }), transition = lock[id]; - if (!transition) { - var time = inherit.time; - transition = lock[id] = { - tween: new d3_Map(), - time: time, - delay: inherit.delay, - duration: inherit.duration, - ease: inherit.ease, - index: i - }; - inherit = null; - ++lock.count; - d3.timer(function(elapsed) { - var delay = transition.delay, duration, ease, timer = d3_timer_active, tweened = []; - timer.t = delay + time; - if (delay <= elapsed) return start(elapsed - delay); - timer.c = start; - function start(elapsed) { - if (lock.active > id) return stop(); - var active = lock[lock.active]; - if (active) { - --lock.count; - delete lock[lock.active]; - active.event && active.event.interrupt.call(node, node.__data__, active.index); - } - lock.active = id; - transition.event && transition.event.start.call(node, node.__data__, i); - transition.tween.forEach(function(key, value) { - if (value = value.call(node, node.__data__, i)) { - tweened.push(value); - } - }); - ease = transition.ease; - duration = transition.duration; - d3.timer(function() { - timer.c = tick(elapsed || 1) ? d3_true : tick; - return 1; - }, 0, time); - } - function tick(elapsed) { - if (lock.active !== id) return 1; - var t = elapsed / duration, e = ease(t), n = tweened.length; - while (n > 0) { - tweened[--n].call(node, e); - } - if (t >= 1) { - transition.event && transition.event.end.call(node, node.__data__, i); - return stop(); - } - } - function stop() { - if (--lock.count) delete lock[id]; else delete node[ns]; - return 1; - } - }, 0, time); - } - } - d3.svg.axis = function() { - var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_; - function axis(g) { - g.each(function() { - var g = d3.select(this); - var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy(); - var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform; - var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"), - d3.transition(path)); - tickEnter.append("line"); - tickEnter.append("text"); - var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"), sign = orient === "top" || orient === "left" ? -1 : 1, x1, x2, y1, y2; - if (orient === "bottom" || orient === "top") { - tickTransform = d3_svg_axisX, x1 = "x", y1 = "y", x2 = "x2", y2 = "y2"; - text.attr("dy", sign < 0 ? "0em" : ".71em").style("text-anchor", "middle"); - pathUpdate.attr("d", "M" + range[0] + "," + sign * outerTickSize + "V0H" + range[1] + "V" + sign * outerTickSize); - } else { - tickTransform = d3_svg_axisY, x1 = "y", y1 = "x", x2 = "y2", y2 = "x2"; - text.attr("dy", ".32em").style("text-anchor", sign < 0 ? "end" : "start"); - pathUpdate.attr("d", "M" + sign * outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + sign * outerTickSize); - } - lineEnter.attr(y2, sign * innerTickSize); - textEnter.attr(y1, sign * tickSpacing); - lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize); - textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing); - if (scale1.rangeBand) { - var x = scale1, dx = x.rangeBand() / 2; - scale0 = scale1 = function(d) { - return x(d) + dx; - }; - } else if (scale0.rangeBand) { - scale0 = scale1; - } else { - tickExit.call(tickTransform, scale1, scale0); + function d3_transition_tween (groups, name, value, tween) { + var id = groups.id, ns = groups.namespace + return d3_selection_each(groups, typeof value === 'function' ? function (node, i, j) { + node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j))) + } : (value = tween(value), function (node) { + node[ns][id].tween.set(name, value) + })) + } + d3_transitionPrototype.attr = function (nameNS, value) { + if (arguments.length < 2) { + for (value in nameNS) this.attr(value, nameNS[value]) + return this + } + var interpolate = nameNS == 'transform' ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS) + function attrNull () { + this.removeAttribute(name) + } + function attrNullNS () { + this.removeAttributeNS(name.space, name.local) + } + function attrTween (b) { + return b == null ? attrNull : (b += '', function () { + var a = this.getAttribute(name), i + return a !== b && (i = interpolate(a, b), function (t) { + this.setAttribute(name, i(t)) + }) + }) } - tickEnter.call(tickTransform, scale0, scale1); - tickUpdate.call(tickTransform, scale1, scale1); - }); - } - axis.scale = function(x) { - if (!arguments.length) return scale; - scale = x; - return axis; - }; - axis.orient = function(x) { - if (!arguments.length) return orient; - orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient; - return axis; - }; - axis.ticks = function() { - if (!arguments.length) return tickArguments_; - tickArguments_ = arguments; - return axis; - }; - axis.tickValues = function(x) { - if (!arguments.length) return tickValues; - tickValues = x; - return axis; - }; - axis.tickFormat = function(x) { - if (!arguments.length) return tickFormat_; - tickFormat_ = x; - return axis; - }; - axis.tickSize = function(x) { - var n = arguments.length; - if (!n) return innerTickSize; - innerTickSize = +x; - outerTickSize = +arguments[n - 1]; - return axis; - }; - axis.innerTickSize = function(x) { - if (!arguments.length) return innerTickSize; - innerTickSize = +x; - return axis; - }; - axis.outerTickSize = function(x) { - if (!arguments.length) return outerTickSize; - outerTickSize = +x; - return axis; - }; - axis.tickPadding = function(x) { - if (!arguments.length) return tickPadding; - tickPadding = +x; - return axis; - }; - axis.tickSubdivide = function() { - return arguments.length && axis; - }; - return axis; - }; - var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = { - top: 1, - right: 1, - bottom: 1, - left: 1 - }; - function d3_svg_axisX(selection, x0, x1) { - selection.attr("transform", function(d) { - var v0 = x0(d); - return "translate(" + (isFinite(v0) ? v0 : x1(d)) + ",0)"; - }); - } - function d3_svg_axisY(selection, y0, y1) { - selection.attr("transform", function(d) { - var v0 = y0(d); - return "translate(0," + (isFinite(v0) ? v0 : y1(d)) + ")"; - }); - } - d3.svg.brush = function() { - var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0]; - function brush(g) { - g.each(function() { - var g = d3.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart); - var background = g.selectAll(".background").data([ 0 ]); - background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"); - g.selectAll(".extent").data([ 0 ]).enter().append("rect").attr("class", "extent").style("cursor", "move"); - var resize = g.selectAll(".resize").data(resizes, d3_identity); - resize.exit().remove(); - resize.enter().append("g").attr("class", function(d) { - return "resize " + d; - }).style("cursor", function(d) { - return d3_svg_brushCursor[d]; - }).append("rect").attr("x", function(d) { - return /[ew]$/.test(d) ? -3 : null; - }).attr("y", function(d) { - return /^[ns]/.test(d) ? -3 : null; - }).attr("width", 6).attr("height", 6).style("visibility", "hidden"); - resize.style("display", brush.empty() ? "none" : null); - var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range; - if (x) { - range = d3_scaleRange(x); - backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]); - redrawX(gUpdate); - } - if (y) { - range = d3_scaleRange(y); - backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]); - redrawY(gUpdate); - } - redraw(gUpdate); - }); - } - brush.event = function(g) { - g.each(function() { - var event_ = event.of(this, arguments), extent1 = { - x: xExtent, - y: yExtent, - i: xExtentDomain, - j: yExtentDomain - }, extent0 = this.__chart__ || extent1; - this.__chart__ = extent1; - if (d3_transitionInheritId) { - d3.select(this).transition().each("start.brush", function() { - xExtentDomain = extent0.i; - yExtentDomain = extent0.j; - xExtent = extent0.x; - yExtent = extent0.y; - event_({ - type: "brushstart" - }); - }).tween("brush:brush", function() { - var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y); - xExtentDomain = yExtentDomain = null; - return function(t) { - xExtent = extent1.x = xi(t); - yExtent = extent1.y = yi(t); - event_({ - type: "brush", - mode: "resize" - }); - }; - }).each("end.brush", function() { - xExtentDomain = extent1.i; - yExtentDomain = extent1.j; - event_({ - type: "brush", - mode: "resize" - }); - event_({ - type: "brushend" - }); - }); - } else { - event_({ - type: "brushstart" - }); - event_({ - type: "brush", - mode: "resize" - }); - event_({ - type: "brushend" - }); + function attrTweenNS (b) { + return b == null ? attrNullNS : (b += '', function () { + var a = this.getAttributeNS(name.space, name.local), i + return a !== b && (i = interpolate(a, b), function (t) { + this.setAttributeNS(name.space, name.local, i(t)) + }) + }) } - }); - }; - function redraw(g) { - g.selectAll(".resize").attr("transform", function(d) { - return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")"; - }); - } - function redrawX(g) { - g.select(".extent").attr("x", xExtent[0]); - g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]); - } - function redrawY(g) { - g.select(".extent").attr("y", yExtent[0]); - g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]); - } - function brushstart() { - var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset; - var w = d3.select(d3_window(target)).on("keydown.brush", keydown).on("keyup.brush", keyup); - if (d3.event.changedTouches) { - w.on("touchmove.brush", brushmove).on("touchend.brush", brushend); - } else { - w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend); - } - g.interrupt().selectAll("*").interrupt(); - if (dragging) { - origin[0] = xExtent[0] - origin[0]; - origin[1] = yExtent[0] - origin[1]; - } else if (resizing) { - var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing); - offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ]; - origin[0] = xExtent[ex]; - origin[1] = yExtent[ey]; - } else if (d3.event.altKey) center = origin.slice(); - g.style("pointer-events", "none").selectAll(".resize").style("display", null); - d3.select("body").style("cursor", eventTarget.style("cursor")); - event_({ - type: "brushstart" - }); - brushmove(); - function keydown() { - if (d3.event.keyCode == 32) { - if (!dragging) { - center = null; - origin[0] -= xExtent[1]; - origin[1] -= yExtent[1]; - dragging = 2; - } - d3_eventPreventDefault(); - } - } - function keyup() { - if (d3.event.keyCode == 32 && dragging == 2) { - origin[0] += xExtent[1]; - origin[1] += yExtent[1]; - dragging = 0; - d3_eventPreventDefault(); - } - } - function brushmove() { - var point = d3.mouse(target), moved = false; - if (offset) { - point[0] += offset[0]; - point[1] += offset[1]; - } - if (!dragging) { - if (d3.event.altKey) { - if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ]; - origin[0] = xExtent[+(point[0] < center[0])]; - origin[1] = yExtent[+(point[1] < center[1])]; - } else center = null; - } - if (resizingX && move1(point, x, 0)) { - redrawX(g); - moved = true; - } - if (resizingY && move1(point, y, 1)) { - redrawY(g); - moved = true; - } - if (moved) { - redraw(g); - event_({ - type: "brush", - mode: dragging ? "move" : "resize" - }); + return d3_transition_tween(this, 'attr.' + nameNS, value, name.local ? attrTweenNS : attrTween) + } + d3_transitionPrototype.attrTween = function (nameNS, tween) { + var name = d3.ns.qualify(nameNS) + function attrTween (d, i) { + var f = tween.call(this, d, i, this.getAttribute(name)) + return f && function (t) { + this.setAttribute(name, f(t)) + } + } + function attrTweenNS (d, i) { + var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)) + return f && function (t) { + this.setAttributeNS(name.space, name.local, f(t)) + } } + return this.tween('attr.' + nameNS, name.local ? attrTweenNS : attrTween) } - function move1(point, scale, i) { - var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max; - if (dragging) { - r0 -= position; - r1 -= size + position; + d3_transitionPrototype.style = function (name, value, priority) { + var n = arguments.length + if (n < 3) { + if (typeof name !== 'string') { + if (n < 2) value = '' + for (priority in name) this.style(priority, name[priority], value) + return this + } + priority = '' + } + function styleNull () { + this.style.removeProperty(name) + } + function styleString (b) { + return b == null ? styleNull : (b += '', function () { + var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i + return a !== b && (i = d3_interpolate(a, b), function (t) { + this.style.setProperty(name, i(t), priority) + }) + }) + } + return d3_transition_tween(this, 'style.' + name, value, styleString) + } + d3_transitionPrototype.styleTween = function (name, tween, priority) { + if (arguments.length < 3) priority = '' + function styleTween (d, i) { + var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name)) + return f && function (t) { + this.style.setProperty(name, f(t), priority) + } } - min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i]; - if (dragging) { - max = (min += position) + size; + return this.tween('style.' + name, styleTween) + } + d3_transitionPrototype.text = function (value) { + return d3_transition_tween(this, 'text', value, d3_transition_text) + } + function d3_transition_text (b) { + if (b == null) b = '' + return function () { + this.textContent = b + } + } + d3_transitionPrototype.remove = function () { + var ns = this.namespace + return this.each('end.transition', function () { + var p + if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this) + }) + } + d3_transitionPrototype.ease = function (value) { + var id = this.id, ns = this.namespace + if (arguments.length < 1) return this.node()[ns][id].ease + if (typeof value !== 'function') value = d3.ease.apply(d3, arguments) + return d3_selection_each(this, function (node) { + node[ns][id].ease = value + }) + } + d3_transitionPrototype.delay = function (value) { + var id = this.id, ns = this.namespace + if (arguments.length < 1) return this.node()[ns][id].delay + return d3_selection_each(this, typeof value === 'function' ? function (node, i, j) { + node[ns][id].delay = +value.call(node, node.__data__, i, j) + } : (value = +value, function (node) { + node[ns][id].delay = value + })) + } + d3_transitionPrototype.duration = function (value) { + var id = this.id, ns = this.namespace + if (arguments.length < 1) return this.node()[ns][id].duration + return d3_selection_each(this, typeof value === 'function' ? function (node, i, j) { + node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j)) + } : (value = Math.max(1, value), function (node) { + node[ns][id].duration = value + })) + } + d3_transitionPrototype.each = function (type, listener) { + var id = this.id, ns = this.namespace + if (arguments.length < 2) { + var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId + try { + d3_transitionInheritId = id + d3_selection_each(this, function (node, i, j) { + d3_transitionInherit = node[ns][id] + type.call(node, node.__data__, i, j) + }) + } finally { + d3_transitionInherit = inherit + d3_transitionInheritId = inheritId + } } else { - if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)); - if (position < min) { - max = min; - min = position; - } else { - max = position; + d3_selection_each(this, function (node) { + var transition = node[ns][id]; + (transition.event || (transition.event = d3.dispatch('start', 'end', 'interrupt'))).on(type, listener) + }) + } + return this + } + d3_transitionPrototype.transition = function () { + var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []) + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + if (node = group[i]) { + transition = node[ns][id0] + d3_transitionNode(node, i, ns, id1, { + time: transition.time, + ease: transition.ease, + delay: transition.delay + transition.duration, + duration: transition.duration + }) + } + subgroup.push(node) } } - if (extent[0] != min || extent[1] != max) { - if (i) yExtentDomain = null; else xExtentDomain = null; - extent[0] = min; - extent[1] = max; - return true; + return d3_transition(subgroups, ns, id1) + } + function d3_transitionNamespace (name) { + return name == null ? '__transition__' : '__transition_' + name + '__' + } + function d3_transitionNode (node, i, ns, id, inherit) { + var lock = node[ns] || (node[ns] = { + active: 0, + count: 0 + }), transition = lock[id] + if (!transition) { + var time = inherit.time + transition = lock[id] = { + tween: new d3_Map(), + time: time, + delay: inherit.delay, + duration: inherit.duration, + ease: inherit.ease, + index: i + } + inherit = null + ++lock.count + d3.timer(function (elapsed) { + var delay = transition.delay, duration, ease, timer = d3_timer_active, tweened = [] + timer.t = delay + time + if (delay <= elapsed) return start(elapsed - delay) + timer.c = start + function start (elapsed) { + if (lock.active > id) return stop() + var active = lock[lock.active] + if (active) { + --lock.count + delete lock[lock.active] + active.event && active.event.interrupt.call(node, node.__data__, active.index) + } + lock.active = id + transition.event && transition.event.start.call(node, node.__data__, i) + transition.tween.forEach(function (key, value) { + if (value = value.call(node, node.__data__, i)) { + tweened.push(value) + } + }) + ease = transition.ease + duration = transition.duration + d3.timer(function () { + timer.c = tick(elapsed || 1) ? d3_true : tick + return 1 + }, 0, time) + } + function tick (elapsed) { + if (lock.active !== id) return 1 + var t = elapsed / duration, e = ease(t), n = tweened.length + while (n > 0) { + tweened[--n].call(node, e) + } + if (t >= 1) { + transition.event && transition.event.end.call(node, node.__data__, i) + return stop() + } + } + function stop () { + if (--lock.count) delete lock[id]; else delete node[ns] + return 1 + } + }, 0, time) + } + } + d3.svg.axis = function () { + var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_ + function axis (g) { + g.each(function () { + var g = d3.select(this) + var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy() + var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll('.tick').data(ticks, scale1), tickEnter = tick.enter().insert('g', '.domain').attr('class', 'tick').style('opacity', ε), tickExit = d3.transition(tick.exit()).style('opacity', ε).remove(), tickUpdate = d3.transition(tick.order()).style('opacity', 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform + var range = d3_scaleRange(scale1), path = g.selectAll('.domain').data([ 0 ]), pathUpdate = (path.enter().append('path').attr('class', 'domain'), + d3.transition(path)) + tickEnter.append('line') + tickEnter.append('text') + var lineEnter = tickEnter.select('line'), lineUpdate = tickUpdate.select('line'), text = tick.select('text').text(tickFormat), textEnter = tickEnter.select('text'), textUpdate = tickUpdate.select('text'), sign = orient === 'top' || orient === 'left' ? -1 : 1, x1, x2, y1, y2 + if (orient === 'bottom' || orient === 'top') { + tickTransform = d3_svg_axisX, x1 = 'x', y1 = 'y', x2 = 'x2', y2 = 'y2' + text.attr('dy', sign < 0 ? '0em' : '.71em').style('text-anchor', 'middle') + pathUpdate.attr('d', 'M' + range[0] + ',' + sign * outerTickSize + 'V0H' + range[1] + 'V' + sign * outerTickSize) + } else { + tickTransform = d3_svg_axisY, x1 = 'y', y1 = 'x', x2 = 'y2', y2 = 'x2' + text.attr('dy', '.32em').style('text-anchor', sign < 0 ? 'end' : 'start') + pathUpdate.attr('d', 'M' + sign * outerTickSize + ',' + range[0] + 'H0V' + range[1] + 'H' + sign * outerTickSize) + } + lineEnter.attr(y2, sign * innerTickSize) + textEnter.attr(y1, sign * tickSpacing) + lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize) + textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing) + if (scale1.rangeBand) { + var x = scale1, dx = x.rangeBand() / 2 + scale0 = scale1 = function (d) { + return x(d) + dx + } + } else if (scale0.rangeBand) { + scale0 = scale1 + } else { + tickExit.call(tickTransform, scale1, scale0) + } + tickEnter.call(tickTransform, scale0, scale1) + tickUpdate.call(tickTransform, scale1, scale1) + }) } + axis.scale = function (x) { + if (!arguments.length) return scale + scale = x + return axis + } + axis.orient = function (x) { + if (!arguments.length) return orient + orient = x in d3_svg_axisOrients ? x + '' : d3_svg_axisDefaultOrient + return axis + } + axis.ticks = function () { + if (!arguments.length) return tickArguments_ + tickArguments_ = arguments + return axis + } + axis.tickValues = function (x) { + if (!arguments.length) return tickValues + tickValues = x + return axis + } + axis.tickFormat = function (x) { + if (!arguments.length) return tickFormat_ + tickFormat_ = x + return axis + } + axis.tickSize = function (x) { + var n = arguments.length + if (!n) return innerTickSize + innerTickSize = +x + outerTickSize = +arguments[n - 1] + return axis + } + axis.innerTickSize = function (x) { + if (!arguments.length) return innerTickSize + innerTickSize = +x + return axis + } + axis.outerTickSize = function (x) { + if (!arguments.length) return outerTickSize + outerTickSize = +x + return axis + } + axis.tickPadding = function (x) { + if (!arguments.length) return tickPadding + tickPadding = +x + return axis + } + axis.tickSubdivide = function () { + return arguments.length && axis + } + return axis + } + var d3_svg_axisDefaultOrient = 'bottom', d3_svg_axisOrients = { + top: 1, + right: 1, + bottom: 1, + left: 1 + } + function d3_svg_axisX (selection, x0, x1) { + selection.attr('transform', function (d) { + var v0 = x0(d) + return 'translate(' + (isFinite(v0) ? v0 : x1(d)) + ',0)' + }) } - function brushend() { - brushmove(); - g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null); - d3.select("body").style("cursor", null); - w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null); - dragRestore(); - event_({ - type: "brushend" - }); + function d3_svg_axisY (selection, y0, y1) { + selection.attr('transform', function (d) { + var v0 = y0(d) + return 'translate(0,' + (isFinite(v0) ? v0 : y1(d)) + ')' + }) } - } - brush.x = function(z) { - if (!arguments.length) return x; - x = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.y = function(z) { - if (!arguments.length) return y; - y = z; - resizes = d3_svg_brushResizes[!x << 1 | !y]; - return brush; - }; - brush.clamp = function(z) { - if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null; - if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z; - return brush; - }; - brush.extent = function(z) { - var x0, x1, y0, y1, t; - if (!arguments.length) { - if (x) { - if (xExtentDomain) { - x0 = xExtentDomain[0], x1 = xExtentDomain[1]; + d3.svg.brush = function () { + var event = d3_eventDispatch(brush, 'brushstart', 'brush', 'brushend'), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0] + function brush (g) { + g.each(function () { + var g = d3.select(this).style('pointer-events', 'all').style('-webkit-tap-highlight-color', 'rgba(0,0,0,0)').on('mousedown.brush', brushstart).on('touchstart.brush', brushstart) + var background = g.selectAll('.background').data([ 0 ]) + background.enter().append('rect').attr('class', 'background').style('visibility', 'hidden').style('cursor', 'crosshair') + g.selectAll('.extent').data([ 0 ]).enter().append('rect').attr('class', 'extent').style('cursor', 'move') + var resize = g.selectAll('.resize').data(resizes, d3_identity) + resize.exit().remove() + resize.enter().append('g').attr('class', function (d) { + return 'resize ' + d + }).style('cursor', function (d) { + return d3_svg_brushCursor[d] + }).append('rect').attr('x', function (d) { + return /[ew]$/.test(d) ? -3 : null + }).attr('y', function (d) { + return /^[ns]/.test(d) ? -3 : null + }).attr('width', 6).attr('height', 6).style('visibility', 'hidden') + resize.style('display', brush.empty() ? 'none' : null) + var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range + if (x) { + range = d3_scaleRange(x) + backgroundUpdate.attr('x', range[0]).attr('width', range[1] - range[0]) + redrawX(gUpdate) + } + if (y) { + range = d3_scaleRange(y) + backgroundUpdate.attr('y', range[0]).attr('height', range[1] - range[0]) + redrawY(gUpdate) + } + redraw(gUpdate) + }) + } + brush.event = function (g) { + g.each(function () { + var event_ = event.of(this, arguments), extent1 = { + x: xExtent, + y: yExtent, + i: xExtentDomain, + j: yExtentDomain + }, extent0 = this.__chart__ || extent1 + this.__chart__ = extent1 + if (d3_transitionInheritId) { + d3.select(this).transition().each('start.brush', function () { + xExtentDomain = extent0.i + yExtentDomain = extent0.j + xExtent = extent0.x + yExtent = extent0.y + event_({ + type: 'brushstart' + }) + }).tween('brush:brush', function () { + var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y) + xExtentDomain = yExtentDomain = null + return function (t) { + xExtent = extent1.x = xi(t) + yExtent = extent1.y = yi(t) + event_({ + type: 'brush', + mode: 'resize' + }) + } + }).each('end.brush', function () { + xExtentDomain = extent1.i + yExtentDomain = extent1.j + event_({ + type: 'brush', + mode: 'resize' + }) + event_({ + type: 'brushend' + }) + }) + } else { + event_({ + type: 'brushstart' + }) + event_({ + type: 'brush', + mode: 'resize' + }) + event_({ + type: 'brushend' + }) + } + }) + } + function redraw (g) { + g.selectAll('.resize').attr('transform', function (d) { + return 'translate(' + xExtent[+/e$/.test(d)] + ',' + yExtent[+/^s/.test(d)] + ')' + }) + } + function redrawX (g) { + g.select('.extent').attr('x', xExtent[0]) + g.selectAll('.extent,.n>rect,.s>rect').attr('width', xExtent[1] - xExtent[0]) + } + function redrawY (g) { + g.select('.extent').attr('y', yExtent[0]) + g.selectAll('.extent,.e>rect,.w>rect').attr('height', yExtent[1] - yExtent[0]) + } + function brushstart () { + var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed('extent'), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset + var w = d3.select(d3_window(target)).on('keydown.brush', keydown).on('keyup.brush', keyup) + if (d3.event.changedTouches) { + w.on('touchmove.brush', brushmove).on('touchend.brush', brushend) } else { - x0 = xExtent[0], x1 = xExtent[1]; - if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; + w.on('mousemove.brush', brushmove).on('mouseup.brush', brushend) + } + g.interrupt().selectAll('*').interrupt() + if (dragging) { + origin[0] = xExtent[0] - origin[0] + origin[1] = yExtent[0] - origin[1] + } else if (resizing) { + var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing) + offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ] + origin[0] = xExtent[ex] + origin[1] = yExtent[ey] + } else if (d3.event.altKey) center = origin.slice() + g.style('pointer-events', 'none').selectAll('.resize').style('display', null) + d3.select('body').style('cursor', eventTarget.style('cursor')) + event_({ + type: 'brushstart' + }) + brushmove() + function keydown () { + if (d3.event.keyCode == 32) { + if (!dragging) { + center = null + origin[0] -= xExtent[1] + origin[1] -= yExtent[1] + dragging = 2 + } + d3_eventPreventDefault() + } + } + function keyup () { + if (d3.event.keyCode == 32 && dragging == 2) { + origin[0] += xExtent[1] + origin[1] += yExtent[1] + dragging = 0 + d3_eventPreventDefault() + } + } + function brushmove () { + var point = d3.mouse(target), moved = false + if (offset) { + point[0] += offset[0] + point[1] += offset[1] + } + if (!dragging) { + if (d3.event.altKey) { + if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ] + origin[0] = xExtent[+(point[0] < center[0])] + origin[1] = yExtent[+(point[1] < center[1])] + } else center = null + } + if (resizingX && move1(point, x, 0)) { + redrawX(g) + moved = true + } + if (resizingY && move1(point, y, 1)) { + redrawY(g) + moved = true + } + if (moved) { + redraw(g) + event_({ + type: 'brush', + mode: dragging ? 'move' : 'resize' + }) + } + } + function move1 (point, scale, i) { + var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max + if (dragging) { + r0 -= position + r1 -= size + position + } + min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i] + if (dragging) { + max = (min += position) + size + } else { + if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)) + if (position < min) { + max = min + min = position + } else { + max = position + } + } + if (extent[0] != min || extent[1] != max) { + if (i) yExtentDomain = null; else xExtentDomain = null + extent[0] = min + extent[1] = max + return true + } + } + function brushend () { + brushmove() + g.style('pointer-events', 'all').selectAll('.resize').style('display', brush.empty() ? 'none' : null) + d3.select('body').style('cursor', null) + w.on('mousemove.brush', null).on('mouseup.brush', null).on('touchmove.brush', null).on('touchend.brush', null).on('keydown.brush', null).on('keyup.brush', null) + dragRestore() + event_({ + type: 'brushend' + }) } } - if (y) { - if (yExtentDomain) { - y0 = yExtentDomain[0], y1 = yExtentDomain[1]; - } else { - y0 = yExtent[0], y1 = yExtent[1]; - if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - } - } - return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ]; - } - if (x) { - x0 = z[0], x1 = z[1]; - if (y) x0 = x0[0], x1 = x1[0]; - xExtentDomain = [ x0, x1 ]; - if (x.invert) x0 = x(x0), x1 = x(x1); - if (x1 < x0) t = x0, x0 = x1, x1 = t; - if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ]; - } - if (y) { - y0 = z[0], y1 = z[1]; - if (x) y0 = y0[1], y1 = y1[1]; - yExtentDomain = [ y0, y1 ]; - if (y.invert) y0 = y(y0), y1 = y(y1); - if (y1 < y0) t = y0, y0 = y1, y1 = t; - if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ]; - } - return brush; - }; - brush.clear = function() { - if (!brush.empty()) { - xExtent = [ 0, 0 ], yExtent = [ 0, 0 ]; - xExtentDomain = yExtentDomain = null; - } - return brush; - }; - brush.empty = function() { - return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1]; - }; - return d3.rebind(brush, event, "on"); - }; - var d3_svg_brushCursor = { - n: "ns-resize", - e: "ew-resize", - s: "ns-resize", - w: "ew-resize", - nw: "nwse-resize", - ne: "nesw-resize", - se: "nwse-resize", - sw: "nesw-resize" - }; - var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ]; - var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat; - var d3_time_formatUtc = d3_time_format.utc; - var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ"); - d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso; - function d3_time_formatIsoNative(date) { - return date.toISOString(); - } - d3_time_formatIsoNative.parse = function(string) { - var date = new Date(string); - return isNaN(date) ? null : date; - }; - d3_time_formatIsoNative.toString = d3_time_formatIso.toString; - d3_time.second = d3_time_interval(function(date) { - return new d3_date(Math.floor(date / 1e3) * 1e3); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 1e3); - }, function(date) { - return date.getSeconds(); - }); - d3_time.seconds = d3_time.second.range; - d3_time.seconds.utc = d3_time.second.utc.range; - d3_time.minute = d3_time_interval(function(date) { - return new d3_date(Math.floor(date / 6e4) * 6e4); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 6e4); - }, function(date) { - return date.getMinutes(); - }); - d3_time.minutes = d3_time.minute.range; - d3_time.minutes.utc = d3_time.minute.utc.range; - d3_time.hour = d3_time_interval(function(date) { - var timezone = date.getTimezoneOffset() / 60; - return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5); - }, function(date, offset) { - date.setTime(date.getTime() + Math.floor(offset) * 36e5); - }, function(date) { - return date.getHours(); - }); - d3_time.hours = d3_time.hour.range; - d3_time.hours.utc = d3_time.hour.utc.range; - d3_time.month = d3_time_interval(function(date) { - date = d3_time.day(date); - date.setDate(1); - return date; - }, function(date, offset) { - date.setMonth(date.getMonth() + offset); - }, function(date) { - return date.getMonth(); - }); - d3_time.months = d3_time.month.range; - d3_time.months.utc = d3_time.month.utc.range; - function d3_time_scale(linear, methods, format) { - function scale(x) { - return linear(x); - } - scale.invert = function(x) { - return d3_time_scaleDate(linear.invert(x)); - }; - scale.domain = function(x) { - if (!arguments.length) return linear.domain().map(d3_time_scaleDate); - linear.domain(x); - return scale; - }; - function tickMethod(extent, count) { - var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target); - return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) { - return d / 31536e6; - }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i]; - } - scale.nice = function(interval, skip) { - var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval); - if (method) interval = method[0], skip = method[1]; - function skipped(date) { - return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length; - } - return scale.domain(d3_scale_nice(domain, skip > 1 ? { - floor: function(date) { - while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1); - return date; + brush.x = function (z) { + if (!arguments.length) return x + x = z + resizes = d3_svg_brushResizes[!x << 1 | !y] + return brush + } + brush.y = function (z) { + if (!arguments.length) return y + y = z + resizes = d3_svg_brushResizes[!x << 1 | !y] + return brush + } + brush.clamp = function (z) { + if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null + if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z + return brush + } + brush.extent = function (z) { + var x0, x1, y0, y1, t + if (!arguments.length) { + if (x) { + if (xExtentDomain) { + x0 = xExtentDomain[0], x1 = xExtentDomain[1] + } else { + x0 = xExtent[0], x1 = xExtent[1] + if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1) + if (x1 < x0) t = x0, x0 = x1, x1 = t + } + } + if (y) { + if (yExtentDomain) { + y0 = yExtentDomain[0], y1 = yExtentDomain[1] + } else { + y0 = yExtent[0], y1 = yExtent[1] + if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1) + if (y1 < y0) t = y0, y0 = y1, y1 = t + } + } + return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ] + } + if (x) { + x0 = z[0], x1 = z[1] + if (y) x0 = x0[0], x1 = x1[0] + xExtentDomain = [ x0, x1 ] + if (x.invert) x0 = x(x0), x1 = x(x1) + if (x1 < x0) t = x0, x0 = x1, x1 = t + if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ] + } + if (y) { + y0 = z[0], y1 = z[1] + if (x) y0 = y0[1], y1 = y1[1] + yExtentDomain = [ y0, y1 ] + if (y.invert) y0 = y(y0), y1 = y(y1) + if (y1 < y0) t = y0, y0 = y1, y1 = t + if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ] + } + return brush + } + brush.clear = function () { + if (!brush.empty()) { + xExtent = [ 0, 0 ], yExtent = [ 0, 0 ] + xExtentDomain = yExtentDomain = null + } + return brush + } + brush.empty = function () { + return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1] + } + return d3.rebind(brush, event, 'on') + } + var d3_svg_brushCursor = { + n: 'ns-resize', + e: 'ew-resize', + s: 'ns-resize', + w: 'ew-resize', + nw: 'nwse-resize', + ne: 'nesw-resize', + se: 'nwse-resize', + sw: 'nesw-resize' + } + var d3_svg_brushResizes = [ [ 'n', 'e', 's', 'w', 'nw', 'ne', 'se', 'sw' ], [ 'e', 'w' ], [ 'n', 's' ], [] ] + var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat + var d3_time_formatUtc = d3_time_format.utc + var d3_time_formatIso = d3_time_formatUtc('%Y-%m-%dT%H:%M:%S.%LZ') + d3_time_format.iso = Date.prototype.toISOString && +new Date('2000-01-01T00:00:00.000Z') ? d3_time_formatIsoNative : d3_time_formatIso + function d3_time_formatIsoNative (date) { + return date.toISOString() + } + d3_time_formatIsoNative.parse = function (string) { + var date = new Date(string) + return isNaN(date) ? null : date + } + d3_time_formatIsoNative.toString = d3_time_formatIso.toString + d3_time.second = d3_time_interval(function (date) { + return new d3_date(Math.floor(date / 1e3) * 1e3) + }, function (date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 1e3) + }, function (date) { + return date.getSeconds() + }) + d3_time.seconds = d3_time.second.range + d3_time.seconds.utc = d3_time.second.utc.range + d3_time.minute = d3_time_interval(function (date) { + return new d3_date(Math.floor(date / 6e4) * 6e4) + }, function (date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 6e4) + }, function (date) { + return date.getMinutes() + }) + d3_time.minutes = d3_time.minute.range + d3_time.minutes.utc = d3_time.minute.utc.range + d3_time.hour = d3_time_interval(function (date) { + var timezone = date.getTimezoneOffset() / 60 + return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5) + }, function (date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 36e5) + }, function (date) { + return date.getHours() + }) + d3_time.hours = d3_time.hour.range + d3_time.hours.utc = d3_time.hour.utc.range + d3_time.month = d3_time_interval(function (date) { + date = d3_time.day(date) + date.setDate(1) + return date + }, function (date, offset) { + date.setMonth(date.getMonth() + offset) + }, function (date) { + return date.getMonth() + }) + d3_time.months = d3_time.month.range + d3_time.months.utc = d3_time.month.utc.range + function d3_time_scale (linear, methods, format) { + function scale (x) { + return linear(x) + } + scale.invert = function (x) { + return d3_time_scaleDate(linear.invert(x)) + } + scale.domain = function (x) { + if (!arguments.length) return linear.domain().map(d3_time_scaleDate) + linear.domain(x) + return scale + } + function tickMethod (extent, count) { + var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target) + return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function (d) { + return d / 31536e6 + }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i] + } + scale.nice = function (interval, skip) { + var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === 'number' && tickMethod(extent, interval) + if (method) interval = method[0], skip = method[1] + function skipped (date) { + return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length + } + return scale.domain(d3_scale_nice(domain, skip > 1 ? { + floor: function (date) { + while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1) + return date + }, + ceil: function (date) { + while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1) + return date + } + } : interval)) + } + scale.ticks = function (interval, skip) { + var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === 'number' ? tickMethod(extent, interval) : !interval.range && [ { + range: interval + }, skip ] + if (method) interval = method[0], skip = method[1] + return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip) + } + scale.tickFormat = function () { + return format + } + scale.copy = function () { + return d3_time_scale(linear.copy(), methods, format) + } + return d3_scale_linearRebind(scale, linear) + } + function d3_time_scaleDate (t) { + return new Date(t) + } + var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ] + var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ] + var d3_time_scaleLocalFormat = d3_time_format.multi([ [ '.%L', function (d) { + return d.getMilliseconds() + } ], [ ':%S', function (d) { + return d.getSeconds() + } ], [ '%I:%M', function (d) { + return d.getMinutes() + } ], [ '%I %p', function (d) { + return d.getHours() + } ], [ '%a %d', function (d) { + return d.getDay() && d.getDate() != 1 + } ], [ '%b %d', function (d) { + return d.getDate() != 1 + } ], [ '%B', function (d) { + return d.getMonth() + } ], [ '%Y', d3_true ] ]) + var d3_time_scaleMilliseconds = { + range: function (start, stop, step) { + return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate) }, - ceil: function(date) { - while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1); - return date; - } - } : interval)); - }; - scale.ticks = function(interval, skip) { - var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ { - range: interval - }, skip ]; - if (method) interval = method[0], skip = method[1]; - return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip); - }; - scale.tickFormat = function() { - return format; - }; - scale.copy = function() { - return d3_time_scale(linear.copy(), methods, format); - }; - return d3_scale_linearRebind(scale, linear); - } - function d3_time_scaleDate(t) { - return new Date(t); - } - var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ]; - var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ]; - var d3_time_scaleLocalFormat = d3_time_format.multi([ [ ".%L", function(d) { - return d.getMilliseconds(); - } ], [ ":%S", function(d) { - return d.getSeconds(); - } ], [ "%I:%M", function(d) { - return d.getMinutes(); - } ], [ "%I %p", function(d) { - return d.getHours(); - } ], [ "%a %d", function(d) { - return d.getDay() && d.getDate() != 1; - } ], [ "%b %d", function(d) { - return d.getDate() != 1; - } ], [ "%B", function(d) { - return d.getMonth(); - } ], [ "%Y", d3_true ] ]); - var d3_time_scaleMilliseconds = { - range: function(start, stop, step) { - return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate); - }, - floor: d3_identity, - ceil: d3_identity - }; - d3_time_scaleLocalMethods.year = d3_time.year; - d3_time.scale = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat); - }; - var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) { - return [ m[0].utc, m[1] ]; - }); - var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ ".%L", function(d) { - return d.getUTCMilliseconds(); - } ], [ ":%S", function(d) { - return d.getUTCSeconds(); - } ], [ "%I:%M", function(d) { - return d.getUTCMinutes(); - } ], [ "%I %p", function(d) { - return d.getUTCHours(); - } ], [ "%a %d", function(d) { - return d.getUTCDay() && d.getUTCDate() != 1; - } ], [ "%b %d", function(d) { - return d.getUTCDate() != 1; - } ], [ "%B", function(d) { - return d.getUTCMonth(); - } ], [ "%Y", d3_true ] ]); - d3_time_scaleUtcMethods.year = d3_time.year.utc; - d3_time.scale.utc = function() { - return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat); - }; - d3.text = d3_xhrType(function(request) { - return request.responseText; - }); - d3.json = function(url, callback) { - return d3_xhr(url, "application/json", d3_json, callback); - }; - function d3_json(request) { - return JSON.parse(request.responseText); - } - d3.html = function(url, callback) { - return d3_xhr(url, "text/html", d3_html, callback); - }; - function d3_html(request) { - var range = d3_document.createRange(); - range.selectNode(d3_document.body); - return range.createContextualFragment(request.responseText); - } - d3.xml = d3_xhrType(function(request) { - return request.responseXML; - }); - if (typeof define === "function" && define.amd) define(d3); else if (typeof module === "object" && module.exports) module.exports = d3; - this.d3 = d3; -}(); -},{}],2:[function(_dereq_,module,exports){ + floor: d3_identity, + ceil: d3_identity + } + d3_time_scaleLocalMethods.year = d3_time.year + d3_time.scale = function () { + return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat) + } + var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function (m) { + return [ m[0].utc, m[1] ] + }) + var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ '.%L', function (d) { + return d.getUTCMilliseconds() + } ], [ ':%S', function (d) { + return d.getUTCSeconds() + } ], [ '%I:%M', function (d) { + return d.getUTCMinutes() + } ], [ '%I %p', function (d) { + return d.getUTCHours() + } ], [ '%a %d', function (d) { + return d.getUTCDay() && d.getUTCDate() != 1 + } ], [ '%b %d', function (d) { + return d.getUTCDate() != 1 + } ], [ '%B', function (d) { + return d.getUTCMonth() + } ], [ '%Y', d3_true ] ]) + d3_time_scaleUtcMethods.year = d3_time.year.utc + d3_time.scale.utc = function () { + return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat) + } + d3.text = d3_xhrType(function (request) { + return request.responseText + }) + d3.json = function (url, callback) { + return d3_xhr(url, 'application/json', d3_json, callback) + } + function d3_json (request) { + return JSON.parse(request.responseText) + } + d3.html = function (url, callback) { + return d3_xhr(url, 'text/html', d3_html, callback) + } + function d3_html (request) { + var range = d3_document.createRange() + range.selectNode(d3_document.body) + return range.createContextualFragment(request.responseText) + } + d3.xml = d3_xhrType(function (request) { + return request.responseXML + }) + if (typeof define === 'function' && define.amd) define(d3); else if (typeof module === 'object' && module.exports) module.exports = d3 + this.d3 = d3 + }()) + }, {}], + 2: [function (_dereq_, module, exports) { /** * @license * Copyright (c) 2012-2013 Chris Pettitt @@ -9526,1164 +9602,1162 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -module.exports = { - graphlib: _dereq_("./lib/graphlib"), - dagre: _dereq_("./lib/dagre"), - intersect: _dereq_("./lib/intersect"), - render: _dereq_("./lib/render"), - util: _dereq_("./lib/util"), - version: _dereq_("./lib/version") -}; - -},{"./lib/dagre":9,"./lib/graphlib":10,"./lib/intersect":11,"./lib/render":26,"./lib/util":28,"./lib/version":29}],3:[function(_dereq_,module,exports){ -var util = _dereq_("./util"); - -module.exports = { - "default": normal, - "normal": normal, - "vee": vee, - "undirected": undirected -}; - -function normal(parent, id, edge, type) { - var marker = parent.append("marker") - .attr("id", id) - .attr("viewBox", "0 0 10 10") - .attr("refX", 9) - .attr("refY", 5) - .attr("markerUnits", "strokeWidth") - .attr("markerWidth", 8) - .attr("markerHeight", 6) - .attr("orient", "auto"); - - var path = marker.append("path") - .attr("d", "M 0 0 L 10 5 L 0 10 z") - .style("stroke-width", 1) - .style("stroke-dasharray", "1,0"); - util.applyStyle(path, edge[type + "Style"]); -} - -function vee(parent, id, edge, type) { - var marker = parent.append("marker") - .attr("id", id) - .attr("viewBox", "0 0 10 10") - .attr("refX", 9) - .attr("refY", 5) - .attr("markerUnits", "strokeWidth") - .attr("markerWidth", 8) - .attr("markerHeight", 6) - .attr("orient", "auto"); - - var path = marker.append("path") - .attr("d", "M 0 0 L 10 5 L 0 10 L 4 5 z") - .style("stroke-width", 1) - .style("stroke-dasharray", "1,0"); - util.applyStyle(path, edge[type + "Style"]); -} - -function undirected(parent, id, edge, type) { - var marker = parent.append("marker") - .attr("id", id) - .attr("viewBox", "0 0 10 10") - .attr("refX", 9) - .attr("refY", 5) - .attr("markerUnits", "strokeWidth") - .attr("markerWidth", 8) - .attr("markerHeight", 6) - .attr("orient", "auto"); - - var path = marker.append("path") - .attr("d", "M 0 5 L 10 5") - .style("stroke-width", 1) - .style("stroke-dasharray", "1,0"); - util.applyStyle(path, edge[type + "Style"]); -} - -},{"./util":28}],4:[function(_dereq_,module,exports){ -var util = _dereq_("./util"), - addLabel = _dereq_("./label/add-label"); - -module.exports = createClusters; - -function createClusters(selection, g) { - var clusters = g.nodes().filter(function(v) { return util.isSubgraph(g, v); }), - svgClusters = selection.selectAll("g.cluster") - .data(clusters, function(v) { return v; }); - - svgClusters.selectAll("*").remove(); - svgClusters.enter() - .append("g") - .attr("class", "cluster") - .attr("id",function(v){ - var node = g.node(v); - return node.id; + module.exports = { + graphlib: _dereq_('./lib/graphlib'), + dagre: _dereq_('./lib/dagre'), + intersect: _dereq_('./lib/intersect'), + render: _dereq_('./lib/render'), + util: _dereq_('./lib/util'), + version: _dereq_('./lib/version') + } + }, {'./lib/dagre': 9, './lib/graphlib': 10, './lib/intersect': 11, './lib/render': 26, './lib/util': 28, './lib/version': 29}], + 3: [function (_dereq_, module, exports) { + var util = _dereq_('./util') + + module.exports = { + 'default': normal, + 'normal': normal, + 'vee': vee, + 'undirected': undirected + } + + function normal (parent, id, edge, type) { + var marker = parent.append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto') + + var path = marker.append('path') + .attr('d', 'M 0 0 L 10 5 L 0 10 z') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0') + util.applyStyle(path, edge[type + 'Style']) + } + + function vee (parent, id, edge, type) { + var marker = parent.append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto') + + var path = marker.append('path') + .attr('d', 'M 0 0 L 10 5 L 0 10 L 4 5 z') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0') + util.applyStyle(path, edge[type + 'Style']) + } + + function undirected (parent, id, edge, type) { + var marker = parent.append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto') + + var path = marker.append('path') + .attr('d', 'M 0 5 L 10 5') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0') + util.applyStyle(path, edge[type + 'Style']) + } + }, {'./util': 28}], + 4: [function (_dereq_, module, exports) { + var util = _dereq_('./util'), + addLabel = _dereq_('./label/add-label') + + module.exports = createClusters + + function createClusters (selection, g) { + var clusters = g.nodes().filter(function (v) { return util.isSubgraph(g, v) }), + svgClusters = selection.selectAll('g.cluster') + .data(clusters, function (v) { return v }) + + svgClusters.selectAll('*').remove() + svgClusters.enter() + .append('g') + .attr('class', 'cluster') + .attr('id', function (v) { + var node = g.node(v) + return node.id }) - .style("opacity", 0); - - util.applyTransition(svgClusters, g) - .style("opacity", 1); - - svgClusters.each(function(v) { - var node = g.node(v), - thisGroup = d3.select(this); - d3.select(this).append("rect"); - var labelGroup = thisGroup.append("g").attr("class", "label"); - addLabel(labelGroup, node, node.clusterLabelPos); - }); - - svgClusters.selectAll("rect").each(function(c) { - var node = g.node(c); - var domCluster = d3.select(this); - util.applyStyle(domCluster, node.style); - }); - - util.applyTransition(svgClusters.exit(), g) - .style("opacity", 0) - .remove(); - - return svgClusters; -} - -},{"./label/add-label":19,"./util":28}],5:[function(_dereq_,module,exports){ -"use strict"; - -var _ = _dereq_("./lodash"), - addLabel = _dereq_("./label/add-label"), - util = _dereq_("./util"), - d3 = _dereq_("./d3"); - -module.exports = createEdgeLabels; - -function createEdgeLabels(selection, g) { - var svgEdgeLabels = selection.selectAll("g.edgeLabel") - .data(g.edges(), function(e) { return util.edgeToId(e); }) - .classed("update", true); - - svgEdgeLabels.selectAll("*").remove(); - svgEdgeLabels.enter() - .append("g") - .classed("edgeLabel", true) - .style("opacity", 0); - svgEdgeLabels.each(function(e) { - var edge = g.edge(e), - label = addLabel(d3.select(this), g.edge(e), 0, 0).classed("label", true), - bbox = label.node().getBBox(); - - if (edge.labelId) { label.attr("id", edge.labelId); } - if (!_.has(edge, "width")) { edge.width = bbox.width; } - if (!_.has(edge, "height")) { edge.height = bbox.height; } - }); - - util.applyTransition(svgEdgeLabels.exit(), g) - .style("opacity", 0) - .remove(); - - return svgEdgeLabels; -} - -},{"./d3":8,"./label/add-label":19,"./lodash":22,"./util":28}],6:[function(_dereq_,module,exports){ -"use strict"; - -var _ = _dereq_("./lodash"), - intersectNode = _dereq_("./intersect/intersect-node"), - util = _dereq_("./util"), - d3 = _dereq_("./d3"); - -module.exports = createEdgePaths; - -function createEdgePaths(selection, g, arrows) { - var svgPaths = selection.selectAll("g.edgePath") - .data(g.edges(), function(e) { return util.edgeToId(e); }) - .classed("update", true); - - enter(svgPaths, g); - exit(svgPaths, g); - - util.applyTransition(svgPaths, g) - .style("opacity", 1); + .style('opacity', 0) + + util.applyTransition(svgClusters, g) + .style('opacity', 1) + + svgClusters.each(function (v) { + var node = g.node(v), + thisGroup = d3.select(this) + d3.select(this).append('rect') + var labelGroup = thisGroup.append('g').attr('class', 'label') + addLabel(labelGroup, node, node.clusterLabelPos) + }) + + svgClusters.selectAll('rect').each(function (c) { + var node = g.node(c) + var domCluster = d3.select(this) + util.applyStyle(domCluster, node.style) + }) + + util.applyTransition(svgClusters.exit(), g) + .style('opacity', 0) + .remove() + + return svgClusters + } + }, {'./label/add-label': 19, './util': 28}], + 5: [function (_dereq_, module, exports) { + 'use strict' + + var _ = _dereq_('./lodash'), + addLabel = _dereq_('./label/add-label'), + util = _dereq_('./util'), + d3 = _dereq_('./d3') + + module.exports = createEdgeLabels + + function createEdgeLabels (selection, g) { + var svgEdgeLabels = selection.selectAll('g.edgeLabel') + .data(g.edges(), function (e) { return util.edgeToId(e) }) + .classed('update', true) + + svgEdgeLabels.selectAll('*').remove() + svgEdgeLabels.enter() + .append('g') + .classed('edgeLabel', true) + .style('opacity', 0) + svgEdgeLabels.each(function (e) { + var edge = g.edge(e), + label = addLabel(d3.select(this), g.edge(e), 0, 0).classed('label', true), + bbox = label.node().getBBox() + + if (edge.labelId) { label.attr('id', edge.labelId) } + if (!_.has(edge, 'width')) { edge.width = bbox.width } + if (!_.has(edge, 'height')) { edge.height = bbox.height } + }) + + util.applyTransition(svgEdgeLabels.exit(), g) + .style('opacity', 0) + .remove() + + return svgEdgeLabels + } + }, {'./d3': 8, './label/add-label': 19, './lodash': 22, './util': 28}], + 6: [function (_dereq_, module, exports) { + 'use strict' + + var _ = _dereq_('./lodash'), + intersectNode = _dereq_('./intersect/intersect-node'), + util = _dereq_('./util'), + d3 = _dereq_('./d3') + + module.exports = createEdgePaths + + function createEdgePaths (selection, g, arrows) { + var svgPaths = selection.selectAll('g.edgePath') + .data(g.edges(), function (e) { return util.edgeToId(e) }) + .classed('update', true) + + enter(svgPaths, g) + exit(svgPaths, g) + + util.applyTransition(svgPaths, g) + .style('opacity', 1) // Save DOM element in the path group, and set ID and class - svgPaths.each(function(e) { - var domEdge = d3.select(this); - var edge = g.edge(e); - edge.elem = this; + svgPaths.each(function (e) { + var domEdge = d3.select(this) + var edge = g.edge(e) + edge.elem = this - if (edge.id) { - domEdge.attr("id", edge.id); - } + if (edge.id) { + domEdge.attr('id', edge.id) + } - util.applyClass(domEdge, edge["class"], - (domEdge.classed("update") ? "update " : "") + "edgePath"); - }); + util.applyClass(domEdge, edge['class'], + (domEdge.classed('update') ? 'update ' : '') + 'edgePath') + }) - svgPaths.selectAll("path.path") - .each(function(e) { - var edge = g.edge(e); - edge.arrowheadId = _.uniqueId("arrowhead"); + svgPaths.selectAll('path.path') + .each(function (e) { + var edge = g.edge(e) + edge.arrowheadId = _.uniqueId('arrowhead') var domEdge = d3.select(this) - .attr("marker-end", function() { - return "url(#" + edge.arrowheadId + ")"; + .attr('marker-end', function () { + return 'url(#' + edge.arrowheadId + ')' }) - .style("fill", "none"); + .style('fill', 'none') util.applyTransition(domEdge, g) - .attr("d", function(e) { return calcPoints(g, e); }); + .attr('d', function (e) { return calcPoints(g, e) }) - util.applyStyle(domEdge, edge.style); - }); + util.applyStyle(domEdge, edge.style) + }) - svgPaths.selectAll("defs *").remove(); - svgPaths.selectAll("defs") - .each(function(e) { + svgPaths.selectAll('defs *').remove() + svgPaths.selectAll('defs') + .each(function (e) { var edge = g.edge(e), - arrowhead = arrows[edge.arrowhead]; - arrowhead(d3.select(this), edge.arrowheadId, edge, "arrowhead"); - }); - - return svgPaths; -} - -function calcPoints(g, e) { - var edge = g.edge(e), - tail = g.node(e.v), - head = g.node(e.w), - points = edge.points.slice(1, edge.points.length - 1); - points.unshift(intersectNode(tail, points[0])); - points.push(intersectNode(head, points[points.length - 1])); - - return createLine(edge, points); -} - -function createLine(edge, points) { - var line = d3.svg.line() - .x(function(d) { return d.x; }) - .y(function(d) { return d.y; }); - - if (_.has(edge, "lineInterpolate")) { - line.interpolate(edge.lineInterpolate); - } + arrowhead = arrows[edge.arrowhead] + arrowhead(d3.select(this), edge.arrowheadId, edge, 'arrowhead') + }) - if (_.has(edge, "lineTension")) { - line.tension(Number(edge.lineTension)); - } + return svgPaths + } - return line(points); -} - -function getCoords(elem) { - var bbox = elem.getBBox(), - matrix = elem.getTransformToElement(elem.ownerSVGElement) - .translate(bbox.width / 2, bbox.height / 2); - return { x: matrix.e, y: matrix.f }; -} - -function enter(svgPaths, g) { - var svgPathsEnter = svgPaths.enter() - .append("g") - .attr("class", "edgePath") - .style("opacity", 0); - svgPathsEnter.append("path") - .attr("class", "path") - .attr("d", function(e) { - var edge = g.edge(e), - sourceElem = g.node(e.v).elem, - points = _.range(edge.points.length).map(function() { return getCoords(sourceElem); }); - return createLine(edge, points); - }); - svgPathsEnter.append("defs"); -} - -function exit(svgPaths, g) { - var svgPathExit = svgPaths.exit(); - util.applyTransition(svgPathExit, g) - .style("opacity", 0) - .remove(); - - util.applyTransition(svgPathExit.select("path.path"), g) - .attr("d", function(e) { - var source = g.node(e.v); + function calcPoints (g, e) { + var edge = g.edge(e), + tail = g.node(e.v), + head = g.node(e.w), + points = edge.points.slice(1, edge.points.length - 1) + points.unshift(intersectNode(tail, points[0])) + points.push(intersectNode(head, points[points.length - 1])) - if (source) { - var points = _.range(this.pathSegList.length).map(function() { return source; }); - return createLine({}, points); - } else { - return d3.select(this).attr("d"); - } - }); -} - -},{"./d3":8,"./intersect/intersect-node":15,"./lodash":22,"./util":28}],7:[function(_dereq_,module,exports){ -"use strict"; - -var _ = _dereq_("./lodash"), - addLabel = _dereq_("./label/add-label"), - util = _dereq_("./util"), - d3 = _dereq_("./d3"); - -module.exports = createNodes; - -function createNodes(selection, g, shapes) { - var simpleNodes = g.nodes().filter(function(v) { return !util.isSubgraph(g, v); }); - var svgNodes = selection.selectAll("g.node") - .data(simpleNodes, function(v) { return v; }) - .classed("update", true); - - svgNodes.selectAll("*").remove(); - svgNodes.enter() - .append("g") - .attr("class", "node") - .style("opacity", 0); - svgNodes.each(function(v) { - var node = g.node(v), - thisGroup = d3.select(this), - labelGroup = thisGroup.append("g").attr("class", "label"), - labelDom = addLabel(labelGroup, node), - shape = shapes[node.shape], - bbox = _.pick(labelDom.node().getBBox(), "width", "height"); - - node.elem = this; - - if (node.id) { thisGroup.attr("id", node.id); } - if (node.labelId) { labelGroup.attr("id", node.labelId); } - util.applyClass(thisGroup, node["class"], - (thisGroup.classed("update") ? "update " : "") + "node"); - - if (_.has(node, "width")) { bbox.width = node.width; } - if (_.has(node, "height")) { bbox.height = node.height; } - - bbox.width += node.paddingLeft + node.paddingRight; - bbox.height += node.paddingTop + node.paddingBottom; - labelGroup.attr("transform", "translate(" + - ((node.paddingLeft - node.paddingRight) / 2) + "," + - ((node.paddingTop - node.paddingBottom) / 2) + ")"); - - var shapeSvg = shape(d3.select(this), bbox, node); - util.applyStyle(shapeSvg, node.style); - - var shapeBBox = shapeSvg.node().getBBox(); - node.width = shapeBBox.width; - node.height = shapeBBox.height; - }); - - util.applyTransition(svgNodes.exit(), g) - .style("opacity", 0) - .remove(); - - return svgNodes; -} - -},{"./d3":8,"./label/add-label":19,"./lodash":22,"./util":28}],8:[function(_dereq_,module,exports){ -// Stub to get D3 either via NPM or from the global object -module.exports = window.d3; + return createLine(edge, points) + } -},{}],9:[function(_dereq_,module,exports){ -/* global window */ + function createLine (edge, points) { + var line = d3.svg.line() + .x(function (d) { return d.x }) + .y(function (d) { return d.y }) -var dagre; + if (_.has(edge, 'lineInterpolate')) { + line.interpolate(edge.lineInterpolate) + } -if (_dereq_) { - try { - dagre = _dereq_("dagre"); - } catch (e) {} -} + if (_.has(edge, 'lineTension')) { + line.tension(Number(edge.lineTension)) + } -if (!dagre) { - dagre = window.dagre; -} + return line(points) + } -module.exports = dagre; + function getCoords (elem) { + var bbox = elem.getBBox(), + matrix = elem.getTransformToElement(elem.ownerSVGElement) + .translate(bbox.width / 2, bbox.height / 2) + return { x: matrix.e, y: matrix.f } + } -},{"dagre":51}],10:[function(_dereq_,module,exports){ -/* global window */ + function enter (svgPaths, g) { + var svgPathsEnter = svgPaths.enter() + .append('g') + .attr('class', 'edgePath') + .style('opacity', 0) + svgPathsEnter.append('path') + .attr('class', 'path') + .attr('d', function (e) { + var edge = g.edge(e), + sourceElem = g.node(e.v).elem, + points = _.range(edge.points.length).map(function () { return getCoords(sourceElem) }) + return createLine(edge, points) + }) + svgPathsEnter.append('defs') + } + + function exit (svgPaths, g) { + var svgPathExit = svgPaths.exit() + util.applyTransition(svgPathExit, g) + .style('opacity', 0) + .remove() + + util.applyTransition(svgPathExit.select('path.path'), g) + .attr('d', function (e) { + var source = g.node(e.v) + + if (source) { + var points = _.range(this.pathSegList.length).map(function () { return source }) + return createLine({}, points) + } else { + return d3.select(this).attr('d') + } + }) + } + }, {'./d3': 8, './intersect/intersect-node': 15, './lodash': 22, './util': 28}], + 7: [function (_dereq_, module, exports) { + 'use strict' + + var _ = _dereq_('./lodash'), + addLabel = _dereq_('./label/add-label'), + util = _dereq_('./util'), + d3 = _dereq_('./d3') + + module.exports = createNodes + + function createNodes (selection, g, shapes) { + var simpleNodes = g.nodes().filter(function (v) { return !util.isSubgraph(g, v) }) + var svgNodes = selection.selectAll('g.node') + .data(simpleNodes, function (v) { return v }) + .classed('update', true) + + svgNodes.selectAll('*').remove() + svgNodes.enter() + .append('g') + .attr('class', 'node') + .style('opacity', 0) + svgNodes.each(function (v) { + var node = g.node(v), + thisGroup = d3.select(this), + labelGroup = thisGroup.append('g').attr('class', 'label'), + labelDom = addLabel(labelGroup, node), + shape = shapes[node.shape], + bbox = _.pick(labelDom.node().getBBox(), 'width', 'height') + + node.elem = this + + if (node.id) { thisGroup.attr('id', node.id) } + if (node.labelId) { labelGroup.attr('id', node.labelId) } + util.applyClass(thisGroup, node['class'], + (thisGroup.classed('update') ? 'update ' : '') + 'node') + + if (_.has(node, 'width')) { bbox.width = node.width } + if (_.has(node, 'height')) { bbox.height = node.height } + + bbox.width += node.paddingLeft + node.paddingRight + bbox.height += node.paddingTop + node.paddingBottom + labelGroup.attr('transform', 'translate(' + + ((node.paddingLeft - node.paddingRight) / 2) + ',' + + ((node.paddingTop - node.paddingBottom) / 2) + ')') + + var shapeSvg = shape(d3.select(this), bbox, node) + util.applyStyle(shapeSvg, node.style) + + var shapeBBox = shapeSvg.node().getBBox() + node.width = shapeBBox.width + node.height = shapeBBox.height + }) + + util.applyTransition(svgNodes.exit(), g) + .style('opacity', 0) + .remove() -var graphlib; + return svgNodes + } + }, {'./d3': 8, './label/add-label': 19, './lodash': 22, './util': 28}], + 8: [function (_dereq_, module, exports) { +// Stub to get D3 either via NPM or from the global object + module.exports = window.d3 + }, {}], + 9: [function (_dereq_, module, exports) { +/* global window */ -if (_dereq_) { - try { - graphlib = _dereq_("graphlib"); - } catch (e) {} -} + var dagre -if (!graphlib) { - graphlib = window.graphlib; -} + if (_dereq_) { + try { + dagre = _dereq_('dagre') + } catch (e) {} + } -module.exports = graphlib; + if (!dagre) { + dagre = window.dagre + } -},{"graphlib":30}],11:[function(_dereq_,module,exports){ -module.exports = { - node: _dereq_("./intersect-node"), - circle: _dereq_("./intersect-circle"), - ellipse: _dereq_("./intersect-ellipse"), - polygon: _dereq_("./intersect-polygon"), - rect: _dereq_("./intersect-rect") -}; + module.exports = dagre + }, {'dagre': 51}], + 10: [function (_dereq_, module, exports) { +/* global window */ -},{"./intersect-circle":12,"./intersect-ellipse":13,"./intersect-node":15,"./intersect-polygon":16,"./intersect-rect":17}],12:[function(_dereq_,module,exports){ -var intersectEllipse = _dereq_("./intersect-ellipse"); + var graphlib -module.exports = intersectCircle; + if (_dereq_) { + try { + graphlib = _dereq_('graphlib') + } catch (e) {} + } -function intersectCircle(node, rx, point) { - return intersectEllipse(node, rx, rx, point); -} + if (!graphlib) { + graphlib = window.graphlib + } -},{"./intersect-ellipse":13}],13:[function(_dereq_,module,exports){ -module.exports = intersectEllipse; + module.exports = graphlib + }, {'graphlib': 30}], + 11: [function (_dereq_, module, exports) { + module.exports = { + node: _dereq_('./intersect-node'), + circle: _dereq_('./intersect-circle'), + ellipse: _dereq_('./intersect-ellipse'), + polygon: _dereq_('./intersect-polygon'), + rect: _dereq_('./intersect-rect') + } + }, {'./intersect-circle': 12, './intersect-ellipse': 13, './intersect-node': 15, './intersect-polygon': 16, './intersect-rect': 17}], + 12: [function (_dereq_, module, exports) { + var intersectEllipse = _dereq_('./intersect-ellipse') -function intersectEllipse(node, rx, ry, point) { - // Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html + module.exports = intersectCircle - var cx = node.x; - var cy = node.y; + function intersectCircle (node, rx, point) { + return intersectEllipse(node, rx, rx, point) + } + }, {'./intersect-ellipse': 13}], + 13: [function (_dereq_, module, exports) { + module.exports = intersectEllipse - var px = cx - point.x; - var py = cy - point.y; + function intersectEllipse (node, rx, ry, point) { + // Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html - var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var cx = node.x + var cy = node.y - var dx = Math.abs(rx * ry * px / det); - if (point.x < cx) { - dx = -dx; - } - var dy = Math.abs(rx * ry * py / det); - if (point.y < cy) { - dy = -dy; - } + var px = cx - point.x + var py = cy - point.y - return {x: cx + dx, y: cy + dy}; -} + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px) + var dx = Math.abs(rx * ry * px / det) + if (point.x < cx) { + dx = -dx + } + var dy = Math.abs(rx * ry * py / det) + if (point.y < cy) { + dy = -dy + } -},{}],14:[function(_dereq_,module,exports){ -module.exports = intersectLine; + return {x: cx + dx, y: cy + dy} + } + }, {}], + 14: [function (_dereq_, module, exports) { + module.exports = intersectLine /* * Returns the point at which two lines, p and q, intersect or returns * undefined if they do not intersect. */ -function intersectLine(p1, p2, q1, q2) { + function intersectLine (p1, p2, q1, q2) { // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994, // p7 and p473. - var a1, a2, b1, b2, c1, c2; - var r1, r2 , r3, r4; - var denom, offset, num; - var x, y; + var a1, a2, b1, b2, c1, c2 + var r1, r2, r3, r4 + var denom, offset, num + var x, y // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x + // b1 y + c1 = 0. - a1 = p2.y - p1.y; - b1 = p1.x - p2.x; - c1 = (p2.x * p1.y) - (p1.x * p2.y); + a1 = p2.y - p1.y + b1 = p1.x - p2.x + c1 = (p2.x * p1.y) - (p1.x * p2.y) // Compute r3 and r4. - r3 = ((a1 * q1.x) + (b1 * q1.y) + c1); - r4 = ((a1 * q2.x) + (b1 * q2.y) + c1); + r3 = ((a1 * q1.x) + (b1 * q1.y) + c1) + r4 = ((a1 * q2.x) + (b1 * q2.y) + c1) // Check signs of r3 and r4. If both point 3 and point 4 lie on // same side of line 1, the line segments do not intersect. - if ((r3 !== 0) && (r4 !== 0) && sameSign(r3, r4)) { - return /*DONT_INTERSECT*/; - } + if ((r3 !== 0) && (r4 !== 0) && sameSign(r3, r4)) { + return /* DONT_INTERSECT */ + } // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0 - a2 = q2.y - q1.y; - b2 = q1.x - q2.x; - c2 = (q2.x * q1.y) - (q1.x * q2.y); + a2 = q2.y - q1.y + b2 = q1.x - q2.x + c2 = (q2.x * q1.y) - (q1.x * q2.y) // Compute r1 and r2 - r1 = (a2 * p1.x) + (b2 * p1.yy) + c2; - r2 = (a2 * p2.x) + (b2 * p2.y) + c2; + r1 = (a2 * p1.x) + (b2 * p1.yy) + c2 + r2 = (a2 * p2.x) + (b2 * p2.y) + c2 // Check signs of r1 and r2. If both point 1 and point 2 lie // on same side of second line segment, the line segments do // not intersect. - if ((r1 !== 0) && (r2 !== 0) && (sameSign(r1, r2))) { - return /*DONT_INTERSECT*/; - } + if ((r1 !== 0) && (r2 !== 0) && (sameSign(r1, r2))) { + return /* DONT_INTERSECT */ + } // Line segments intersect: compute intersection point. - denom = (a1 * b2) - (a2 * b1); - if (denom === 0) { - return /*COLLINEAR*/; - } + denom = (a1 * b2) - (a2 * b1) + if (denom === 0) { + return /* COLLINEAR */ + } - offset = Math.abs(denom / 2); + offset = Math.abs(denom / 2) // The denom/2 is to get rounding instead of truncating. It // is added or subtracted to the numerator, depending upon the // sign of the numerator. - num = (b1 * c2) - (b2 * c1); - x = (num < 0) ? ((num - offset) / denom) : ((num + offset) / denom); - - num = (a2 * c1) - (a1 * c2); - y = (num < 0) ? ((num - offset) / denom) : ((num + offset) / denom); + num = (b1 * c2) - (b2 * c1) + x = (num < 0) ? ((num - offset) / denom) : ((num + offset) / denom) - return { x: x, y: y }; -} + num = (a2 * c1) - (a1 * c2) + y = (num < 0) ? ((num - offset) / denom) : ((num + offset) / denom) -function sameSign(r1, r2) { - return r1 * r2 > 0; -} - -},{}],15:[function(_dereq_,module,exports){ -module.exports = intersectNode; + return { x: x, y: y } + } -function intersectNode(node, point) { - return node.intersect(point); -} + function sameSign (r1, r2) { + return r1 * r2 > 0 + } + }, {}], + 15: [function (_dereq_, module, exports) { + module.exports = intersectNode -},{}],16:[function(_dereq_,module,exports){ -var intersectLine = _dereq_("./intersect-line"); + function intersectNode (node, point) { + return node.intersect(point) + } + }, {}], + 16: [function (_dereq_, module, exports) { + var intersectLine = _dereq_('./intersect-line') -module.exports = intersectPolygon; + module.exports = intersectPolygon /* * Returns the point ({x, y}) at which the point argument intersects with the * node argument assuming that it has the shape specified by polygon. */ -function intersectPolygon(node, polyPoints, point) { - var x1 = node.x; - var y1 = node.y; - - var intersections = []; - - var minX = Number.POSITIVE_INFINITY, - minY = Number.POSITIVE_INFINITY; - polyPoints.forEach(function(entry) { - minX = Math.min(minX, entry.x); - minY = Math.min(minY, entry.y); - }); - - var left = x1 - node.width / 2 - minX; - var top = y1 - node.height / 2 - minY; - - for (var i = 0; i < polyPoints.length; i++) { - var p1 = polyPoints[i]; - var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; - var intersect = intersectLine(node, point, - {x: left + p1.x, y: top + p1.y}, {x: left + p2.x, y: top + p2.y}); - if (intersect) { - intersections.push(intersect); - } - } + function intersectPolygon (node, polyPoints, point) { + var x1 = node.x + var y1 = node.y - if (!intersections.length) { - console.log("NO INTERSECTION FOUND, RETURN NODE CENTER", node); - return node; - } + var intersections = [] - if (intersections.length > 1) { - // More intersections, find the one nearest to edge end point - intersections.sort(function(p, q) { - var pdx = p.x - point.x, - pdy = p.y - point.y, - distp = Math.sqrt(pdx * pdx + pdy * pdy), + var minX = Number.POSITIVE_INFINITY, + minY = Number.POSITIVE_INFINITY + polyPoints.forEach(function (entry) { + minX = Math.min(minX, entry.x) + minY = Math.min(minY, entry.y) + }) - qdx = q.x - point.x, - qdy = q.y - point.y, - distq = Math.sqrt(qdx * qdx + qdy * qdy); + var left = x1 - node.width / 2 - minX + var top = y1 - node.height / 2 - minY - return (distp < distq) ? -1 : (distp === distq ? 0 : 1); - }); - } - return intersections[0]; -} + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i] + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0] + var intersect = intersectLine(node, point, + {x: left + p1.x, y: top + p1.y}, {x: left + p2.x, y: top + p2.y}) + if (intersect) { + intersections.push(intersect) + } + } + + if (!intersections.length) { + console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node) + return node + } -},{"./intersect-line":14}],17:[function(_dereq_,module,exports){ -module.exports = intersectRect; + if (intersections.length > 1) { + // More intersections, find the one nearest to edge end point + intersections.sort(function (p, q) { + var pdx = p.x - point.x, + pdy = p.y - point.y, + distp = Math.sqrt(pdx * pdx + pdy * pdy), + + qdx = q.x - point.x, + qdy = q.y - point.y, + distq = Math.sqrt(qdx * qdx + qdy * qdy) + + return (distp < distq) ? -1 : (distp === distq ? 0 : 1) + }) + } + return intersections[0] + } + }, {'./intersect-line': 14}], + 17: [function (_dereq_, module, exports) { + module.exports = intersectRect -function intersectRect(node, point) { - var x = node.x; - var y = node.y; + function intersectRect (node, point) { + var x = node.x + var y = node.y // Rectangle intersection algorithm from: // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = node.width / 2; - var h = node.height / 2; + var dx = point.x - x + var dy = point.y - y + var w = node.width / 2 + var h = node.height / 2 - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { + var sx, sy + if (Math.abs(dy) * w > Math.abs(dx) * h) { // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = dy === 0 ? 0 : h * dx / dy; - sy = h; - } else { + if (dy < 0) { + h = -h + } + sx = dy === 0 ? 0 : h * dx / dy + sy = h + } else { // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = dx === 0 ? 0 : w * dy / dx; - } - - return {x: x + sx, y: y + sy}; -} + if (dx < 0) { + w = -w + } + sx = w + sy = dx === 0 ? 0 : w * dy / dx + } -},{}],18:[function(_dereq_,module,exports){ -var util = _dereq_("../util"); + return {x: x + sx, y: y + sy} + } + }, {}], + 18: [function (_dereq_, module, exports) { + var util = _dereq_('../util') -module.exports = addHtmlLabel; + module.exports = addHtmlLabel -function addHtmlLabel(root, node) { - var fo = root - .append("foreignObject") - .attr("width", "100000"); + function addHtmlLabel (root, node) { + var fo = root + .append('foreignObject') + .attr('width', '100000') - var div = fo - .append("xhtml:div"); + var div = fo + .append('xhtml:div') - var label = node.label; - switch(typeof label) { - case "function": - div.insert(label); - break; - case "object": + var label = node.label + switch (typeof label) { + case 'function': + div.insert(label) + break + case 'object': // Currently we assume this is a DOM object. - div.insert(function() { return label; }); - break; - default: div.html(label); - } + div.insert(function () { return label }) + break + default: div.html(label) + } - util.applyStyle(div, node.labelStyle); - div.style("display", "inline-block"); + util.applyStyle(div, node.labelStyle) + div.style('display', 'inline-block') // Fix for firefox - div.style("white-space", "nowrap"); + div.style('white-space', 'nowrap') // TODO find a better way to get dimensions for foreignObjects... - var w, h; - div - .each(function() { - w = this.clientWidth; - h = this.clientHeight; - }); - - fo - .attr("width", w) - .attr("height", h); + var w, h + div + .each(function () { + w = this.clientWidth + h = this.clientHeight + }) - return fo; -} + fo + .attr('width', w) + .attr('height', h) -},{"../util":28}],19:[function(_dereq_,module,exports){ -var addTextLabel = _dereq_("./add-text-label"), - addHtmlLabel = _dereq_("./add-html-label"), - addSVGLabel = _dereq_("./add-svg-label"); + return fo + } + }, {'../util': 28}], + 19: [function (_dereq_, module, exports) { + var addTextLabel = _dereq_('./add-text-label'), + addHtmlLabel = _dereq_('./add-html-label'), + addSVGLabel = _dereq_('./add-svg-label') -module.exports = addLabel; + module.exports = addLabel -function addLabel(root, node, location) { - var label = node.label; - var labelSvg = root.append("g"); + function addLabel (root, node, location) { + var label = node.label + var labelSvg = root.append('g') // Allow the label to be a string, a function that returns a DOM element, or // a DOM element itself. - if (node.labelType === "svg") { - addSVGLabel(labelSvg, node); - } else if (typeof label !== "string" || node.labelType === "html") { - addHtmlLabel(labelSvg, node); - } else { - addTextLabel(labelSvg, node); - } - - var labelBBox = labelSvg.node().getBBox(); - var y; - switch(location) { - case "top": - y = (-node.height / 2); - break; - case "bottom": - y = (node.height / 2) - labelBBox.height; - break; - default: - y = (-labelBBox.height / 2); - } - labelSvg.attr("transform", - "translate(" + (-labelBBox.width / 2) + "," + y + ")"); - - return labelSvg; -} + if (node.labelType === 'svg') { + addSVGLabel(labelSvg, node) + } else if (typeof label !== 'string' || node.labelType === 'html') { + addHtmlLabel(labelSvg, node) + } else { + addTextLabel(labelSvg, node) + } -},{"./add-html-label":18,"./add-svg-label":20,"./add-text-label":21}],20:[function(_dereq_,module,exports){ -var util = _dereq_("../util"); + var labelBBox = labelSvg.node().getBBox() + var y + switch (location) { + case 'top': + y = (-node.height / 2) + break + case 'bottom': + y = (node.height / 2) - labelBBox.height + break + default: + y = (-labelBBox.height / 2) + } + labelSvg.attr('transform', + 'translate(' + (-labelBBox.width / 2) + ',' + y + ')') -module.exports = addSVGLabel; + return labelSvg + } + }, {'./add-html-label': 18, './add-svg-label': 20, './add-text-label': 21}], + 20: [function (_dereq_, module, exports) { + var util = _dereq_('../util') -function addSVGLabel(root, node) { - var domNode = root; + module.exports = addSVGLabel - domNode.node().appendChild(node.label); + function addSVGLabel (root, node) { + var domNode = root - util.applyStyle(domNode, node.labelStyle); + domNode.node().appendChild(node.label) - return domNode; -} + util.applyStyle(domNode, node.labelStyle) -},{"../util":28}],21:[function(_dereq_,module,exports){ -var util = _dereq_("../util"); + return domNode + } + }, {'../util': 28}], + 21: [function (_dereq_, module, exports) { + var util = _dereq_('../util') -module.exports = addTextLabel; + module.exports = addTextLabel /* * Attaches a text label to the specified root. Handles escape sequences. */ -function addTextLabel(root, node) { - var domNode = root.append("text"); - - var lines = processEscapeSequences(node.label).split("\n"); - for (var i = 0; i < lines.length; i++) { - domNode - .append("tspan") - .attr("xml:space", "preserve") - .attr("dy", "1em") - .attr("x", "1") - .text(lines[i]); - } + function addTextLabel (root, node) { + var domNode = root.append('text') + + var lines = processEscapeSequences(node.label).split('\n') + for (var i = 0; i < lines.length; i++) { + domNode + .append('tspan') + .attr('xml:space', 'preserve') + .attr('dy', '1em') + .attr('x', '1') + .text(lines[i]) + } + + util.applyStyle(domNode, node.labelStyle) + + return domNode + } + + function processEscapeSequences (text) { + var newText = '', + escaped = false, + ch + for (var i = 0; i < text.length; ++i) { + ch = text[i] + if (escaped) { + switch (ch) { + case 'n': newText += '\n'; break + default: newText += ch + } + escaped = false + } else if (ch === '\\') { + escaped = true + } else { + newText += ch + } + } + return newText + } + }, {'../util': 28}], + 22: [function (_dereq_, module, exports) { +/* global window */ - util.applyStyle(domNode, node.labelStyle); - - return domNode; -} - -function processEscapeSequences(text) { - var newText = "", - escaped = false, - ch; - for (var i = 0; i < text.length; ++i) { - ch = text[i]; - if (escaped) { - switch(ch) { - case "n": newText += "\n"; break; - default: newText += ch; - } - escaped = false; - } else if (ch === "\\") { - escaped = true; - } else { - newText += ch; - } - } - return newText; -} + var lodash -},{"../util":28}],22:[function(_dereq_,module,exports){ -/* global window */ + if (_dereq_) { + try { + lodash = _dereq_('lodash') + } catch (e) {} + } + + if (!lodash) { + lodash = window._ + } -var lodash; + module.exports = lodash + }, {'lodash': 50}], + 23: [function (_dereq_, module, exports) { + 'use strict' -if (_dereq_) { - try { - lodash = _dereq_("lodash"); - } catch (e) {} -} + var util = _dereq_('./util'), + d3 = _dereq_('./d3') -if (!lodash) { - lodash = window._; -} + module.exports = positionClusters -module.exports = lodash; + function positionClusters (selection, g) { + var created = selection.filter(function () { return !d3.select(this).classed('update') }) -},{"lodash":50}],23:[function(_dereq_,module,exports){ -"use strict"; + function translate (v) { + var node = g.node(v) + return 'translate(' + node.x + ',' + node.y + ')' + } -var util = _dereq_("./util"), - d3 = _dereq_("./d3"); + created.attr('transform', translate) -module.exports = positionClusters; + util.applyTransition(selection, g) + .style('opacity', 1) + .attr('transform', translate) -function positionClusters(selection, g) { - var created = selection.filter(function() { return !d3.select(this).classed("update"); }); + util.applyTransition(created.selectAll('rect'), g) + .attr('width', function (v) { return g.node(v).width }) + .attr('height', function (v) { return g.node(v).height }) + .attr('x', function (v) { + var node = g.node(v) + return -node.width / 2 + }) + .attr('y', function (v) { + var node = g.node(v) + return -node.height / 2 + }) + } + }, {'./d3': 8, './util': 28}], + 24: [function (_dereq_, module, exports) { + 'use strict' - function translate(v) { - var node = g.node(v); - return "translate(" + node.x + "," + node.y + ")"; - } + var util = _dereq_('./util'), + d3 = _dereq_('./d3'), + _ = _dereq_('./lodash') - created.attr("transform", translate); + module.exports = positionEdgeLabels - util.applyTransition(selection, g) - .style("opacity", 1) - .attr("transform", translate); + function positionEdgeLabels (selection, g) { + var created = selection.filter(function () { return !d3.select(this).classed('update') }) - util.applyTransition(created.selectAll("rect"), g) - .attr("width", function(v) { return g.node(v).width; }) - .attr("height", function(v) { return g.node(v).height; }) - .attr("x", function(v) { - var node = g.node(v); - return -node.width / 2; - }) - .attr("y", function(v) { - var node = g.node(v); - return -node.height / 2; - }); + function translate (e) { + var edge = g.edge(e) + return _.has(edge, 'x') ? 'translate(' + edge.x + ',' + edge.y + ')' : '' + } -} + created.attr('transform', translate) -},{"./d3":8,"./util":28}],24:[function(_dereq_,module,exports){ -"use strict"; + util.applyTransition(selection, g) + .style('opacity', 1) + .attr('transform', translate) + } + }, {'./d3': 8, './lodash': 22, './util': 28}], + 25: [function (_dereq_, module, exports) { + 'use strict' -var util = _dereq_("./util"), - d3 = _dereq_("./d3"), - _ = _dereq_("./lodash"); + var util = _dereq_('./util'), + d3 = _dereq_('./d3') -module.exports = positionEdgeLabels; + module.exports = positionNodes -function positionEdgeLabels(selection, g) { - var created = selection.filter(function() { return !d3.select(this).classed("update"); }); + function positionNodes (selection, g) { + var created = selection.filter(function () { return !d3.select(this).classed('update') }) - function translate(e) { - var edge = g.edge(e); - return _.has(edge, "x") ? "translate(" + edge.x + "," + edge.y + ")" : ""; - } + function translate (v) { + var node = g.node(v) + return 'translate(' + node.x + ',' + node.y + ')' + } - created.attr("transform", translate); + created.attr('transform', translate) - util.applyTransition(selection, g) - .style("opacity", 1) - .attr("transform", translate); -} + util.applyTransition(selection, g) + .style('opacity', 1) + .attr('transform', translate) + } + }, {'./d3': 8, './util': 28}], + 26: [function (_dereq_, module, exports) { + var _ = _dereq_('./lodash'), + layout = _dereq_('./dagre').layout -},{"./d3":8,"./lodash":22,"./util":28}],25:[function(_dereq_,module,exports){ -"use strict"; + module.exports = render -var util = _dereq_("./util"), - d3 = _dereq_("./d3"); +// This design is based on http://bost.ocks.org/mike/chart/. + function render () { + var createNodes = _dereq_('./create-nodes'), + createClusters = _dereq_('./create-clusters'), + createEdgeLabels = _dereq_('./create-edge-labels'), + createEdgePaths = _dereq_('./create-edge-paths'), + positionNodes = _dereq_('./position-nodes'), + positionEdgeLabels = _dereq_('./position-edge-labels'), + positionClusters = _dereq_('./position-clusters'), + shapes = _dereq_('./shapes'), + arrows = _dereq_('./arrows') -module.exports = positionNodes; + var fn = function (svg, g) { + preProcessGraph(g) -function positionNodes(selection, g) { - var created = selection.filter(function() { return !d3.select(this).classed("update"); }); + var outputGroup = createOrSelectGroup(svg, 'output'), + clustersGroup = createOrSelectGroup(outputGroup, 'clusters'), + edgePathsGroup = createOrSelectGroup(outputGroup, 'edgePaths'), + edgeLabels = createEdgeLabels(createOrSelectGroup(outputGroup, 'edgeLabels'), g), + nodes = createNodes(createOrSelectGroup(outputGroup, 'nodes'), g, shapes) - function translate(v) { - var node = g.node(v); - return "translate(" + node.x + "," + node.y + ")"; - } + layout(g) - created.attr("transform", translate); + positionNodes(nodes, g) + positionEdgeLabels(edgeLabels, g) + createEdgePaths(edgePathsGroup, g, arrows) - util.applyTransition(selection, g) - .style("opacity", 1) - .attr("transform", translate); -} + var clusters = createClusters(clustersGroup, g) + positionClusters(clusters, g) -},{"./d3":8,"./util":28}],26:[function(_dereq_,module,exports){ -var _ = _dereq_("./lodash"), - layout = _dereq_("./dagre").layout; + postProcessGraph(g) + } -module.exports = render; + fn.createNodes = function (value) { + if (!arguments.length) return createNodes + createNodes = value + return fn + } -// This design is based on http://bost.ocks.org/mike/chart/. -function render() { - var createNodes = _dereq_("./create-nodes"), - createClusters = _dereq_("./create-clusters"), - createEdgeLabels = _dereq_("./create-edge-labels"), - createEdgePaths = _dereq_("./create-edge-paths"), - positionNodes = _dereq_("./position-nodes"), - positionEdgeLabels = _dereq_("./position-edge-labels"), - positionClusters = _dereq_("./position-clusters"), - shapes = _dereq_("./shapes"), - arrows = _dereq_("./arrows"); - - var fn = function(svg, g) { - preProcessGraph(g); - - var outputGroup = createOrSelectGroup(svg, "output"), - clustersGroup = createOrSelectGroup(outputGroup, "clusters"), - edgePathsGroup = createOrSelectGroup(outputGroup, "edgePaths"), - edgeLabels = createEdgeLabels(createOrSelectGroup(outputGroup, "edgeLabels"), g), - nodes = createNodes(createOrSelectGroup(outputGroup, "nodes"), g, shapes); - - layout(g); - - positionNodes(nodes, g); - positionEdgeLabels(edgeLabels, g); - createEdgePaths(edgePathsGroup, g, arrows); - - var clusters = createClusters(clustersGroup, g); - positionClusters(clusters, g); - - postProcessGraph(g); - }; - - fn.createNodes = function(value) { - if (!arguments.length) return createNodes; - createNodes = value; - return fn; - }; - - fn.createClusters = function(value) { - if (!arguments.length) return createClusters; - createClusters = value; - return fn; - }; - - fn.createEdgeLabels = function(value) { - if (!arguments.length) return createEdgeLabels; - createEdgeLabels = value; - return fn; - }; - - fn.createEdgePaths = function(value) { - if (!arguments.length) return createEdgePaths; - createEdgePaths = value; - return fn; - }; - - fn.shapes = function(value) { - if (!arguments.length) return shapes; - shapes = value; - return fn; - }; - - fn.arrows = function(value) { - if (!arguments.length) return arrows; - arrows = value; - return fn; - }; - - return fn; -} - -var NODE_DEFAULT_ATTRS = { - paddingLeft: 10, - paddingRight: 10, - paddingTop: 10, - paddingBottom: 10, - rx: 0, - ry: 0, - shape: "rect" -}; - -var EDGE_DEFAULT_ATTRS = { - arrowhead: "normal", - lineInterpolate: "linear" -}; - -function preProcessGraph(g) { - g.nodes().forEach(function(v) { - var node = g.node(v); - if (!_.has(node, "label") && !g.children(v).length) { node.label = v; } - - if (_.has(node, "paddingX")) { - _.defaults(node, { - paddingLeft: node.paddingX, - paddingRight: node.paddingX - }); - } + fn.createClusters = function (value) { + if (!arguments.length) return createClusters + createClusters = value + return fn + } - if (_.has(node, "paddingY")) { - _.defaults(node, { - paddingTop: node.paddingY, - paddingBottom: node.paddingY - }); - } + fn.createEdgeLabels = function (value) { + if (!arguments.length) return createEdgeLabels + createEdgeLabels = value + return fn + } - if (_.has(node, "padding")) { - _.defaults(node, { - paddingLeft: node.padding, - paddingRight: node.padding, - paddingTop: node.padding, - paddingBottom: node.padding - }); - } + fn.createEdgePaths = function (value) { + if (!arguments.length) return createEdgePaths + createEdgePaths = value + return fn + } + + fn.shapes = function (value) { + if (!arguments.length) return shapes + shapes = value + return fn + } + + fn.arrows = function (value) { + if (!arguments.length) return arrows + arrows = value + return fn + } + + return fn + } + + var NODE_DEFAULT_ATTRS = { + paddingLeft: 10, + paddingRight: 10, + paddingTop: 10, + paddingBottom: 10, + rx: 0, + ry: 0, + shape: 'rect' + } + + var EDGE_DEFAULT_ATTRS = { + arrowhead: 'normal', + lineInterpolate: 'linear' + } + + function preProcessGraph (g) { + g.nodes().forEach(function (v) { + var node = g.node(v) + if (!_.has(node, 'label') && !g.children(v).length) { node.label = v } + + if (_.has(node, 'paddingX')) { + _.defaults(node, { + paddingLeft: node.paddingX, + paddingRight: node.paddingX + }) + } + + if (_.has(node, 'paddingY')) { + _.defaults(node, { + paddingTop: node.paddingY, + paddingBottom: node.paddingY + }) + } - _.defaults(node, NODE_DEFAULT_ATTRS); + if (_.has(node, 'padding')) { + _.defaults(node, { + paddingLeft: node.padding, + paddingRight: node.padding, + paddingTop: node.padding, + paddingBottom: node.padding + }) + } - _.each(["paddingLeft", "paddingRight", "paddingTop", "paddingBottom"], function(k) { - node[k] = Number(node[k]); - }); + _.defaults(node, NODE_DEFAULT_ATTRS) + + _.each(['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'], function (k) { + node[k] = Number(node[k]) + }) // Save dimensions for restore during post-processing - if (_.has(node, "width")) { node._prevWidth = node.width; } - if (_.has(node, "height")) { node._prevHeight = node.height; } - }); + if (_.has(node, 'width')) { node._prevWidth = node.width } + if (_.has(node, 'height')) { node._prevHeight = node.height } + }) - g.edges().forEach(function(e) { - var edge = g.edge(e); - if (!_.has(edge, "label")) { edge.label = ""; } - _.defaults(edge, EDGE_DEFAULT_ATTRS); - }); -} + g.edges().forEach(function (e) { + var edge = g.edge(e) + if (!_.has(edge, 'label')) { edge.label = '' } + _.defaults(edge, EDGE_DEFAULT_ATTRS) + }) + } -function postProcessGraph(g) { - _.each(g.nodes(), function(v) { - var node = g.node(v); + function postProcessGraph (g) { + _.each(g.nodes(), function (v) { + var node = g.node(v) // Restore original dimensions - if (_.has(node, "_prevWidth")) { - node.width = node._prevWidth; - } else { - delete node.width; - } + if (_.has(node, '_prevWidth')) { + node.width = node._prevWidth + } else { + delete node.width + } - if (_.has(node, "_prevHeight")) { - node.height = node._prevHeight; - } else { - delete node.height; - } + if (_.has(node, '_prevHeight')) { + node.height = node._prevHeight + } else { + delete node.height + } - delete node._prevWidth; - delete node._prevHeight; - }); -} + delete node._prevWidth + delete node._prevHeight + }) + } -function createOrSelectGroup(root, name) { - var selection = root.select("g." + name); - if (selection.empty()) { - selection = root.append("g").attr("class", name); - } - return selection; -} - -},{"./arrows":3,"./create-clusters":4,"./create-edge-labels":5,"./create-edge-paths":6,"./create-nodes":7,"./dagre":9,"./lodash":22,"./position-clusters":23,"./position-edge-labels":24,"./position-nodes":25,"./shapes":27}],27:[function(_dereq_,module,exports){ -"use strict"; - -var intersectRect = _dereq_("./intersect/intersect-rect"), - intersectEllipse = _dereq_("./intersect/intersect-ellipse"), - intersectCircle = _dereq_("./intersect/intersect-circle"), - intersectPolygon = _dereq_("./intersect/intersect-polygon"); - -module.exports = { - rect: rect, - ellipse: ellipse, - circle: circle, - diamond: diamond -}; - -function rect(parent, bbox, node) { - var shapeSvg = parent.insert("rect", ":first-child") - .attr("rx", node.rx) - .attr("ry", node.ry) - .attr("x", -bbox.width / 2) - .attr("y", -bbox.height / 2) - .attr("width", bbox.width) - .attr("height", bbox.height); - - node.intersect = function(point) { - return intersectRect(node, point); - }; - - return shapeSvg; -} - -function ellipse(parent, bbox, node) { - var rx = bbox.width / 2, - ry = bbox.height / 2, - shapeSvg = parent.insert("ellipse", ":first-child") - .attr("x", -bbox.width / 2) - .attr("y", -bbox.height / 2) - .attr("rx", rx) - .attr("ry", ry); - - node.intersect = function(point) { - return intersectEllipse(node, rx, ry, point); - }; - - return shapeSvg; -} - -function circle(parent, bbox, node) { - var r = Math.max(bbox.width, bbox.height) / 2, - shapeSvg = parent.insert("circle", ":first-child") - .attr("x", -bbox.width / 2) - .attr("y", -bbox.height / 2) - .attr("r", r); - - node.intersect = function(point) { - return intersectCircle(node, r, point); - }; - - return shapeSvg; -} + function createOrSelectGroup (root, name) { + var selection = root.select('g.' + name) + if (selection.empty()) { + selection = root.append('g').attr('class', name) + } + return selection + } + }, {'./arrows': 3, './create-clusters': 4, './create-edge-labels': 5, './create-edge-paths': 6, './create-nodes': 7, './dagre': 9, './lodash': 22, './position-clusters': 23, './position-edge-labels': 24, './position-nodes': 25, './shapes': 27}], + 27: [function (_dereq_, module, exports) { + 'use strict' + + var intersectRect = _dereq_('./intersect/intersect-rect'), + intersectEllipse = _dereq_('./intersect/intersect-ellipse'), + intersectCircle = _dereq_('./intersect/intersect-circle'), + intersectPolygon = _dereq_('./intersect/intersect-polygon') + + module.exports = { + rect: rect, + ellipse: ellipse, + circle: circle, + diamond: diamond + } + + function rect (parent, bbox, node) { + var shapeSvg = parent.insert('rect', ':first-child') + .attr('rx', node.rx) + .attr('ry', node.ry) + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('width', bbox.width) + .attr('height', bbox.height) + + node.intersect = function (point) { + return intersectRect(node, point) + } + + return shapeSvg + } + + function ellipse (parent, bbox, node) { + var rx = bbox.width / 2, + ry = bbox.height / 2, + shapeSvg = parent.insert('ellipse', ':first-child') + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('rx', rx) + .attr('ry', ry) + + node.intersect = function (point) { + return intersectEllipse(node, rx, ry, point) + } + + return shapeSvg + } + + function circle (parent, bbox, node) { + var r = Math.max(bbox.width, bbox.height) / 2, + shapeSvg = parent.insert('circle', ':first-child') + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('r', r) + + node.intersect = function (point) { + return intersectCircle(node, r, point) + } + + return shapeSvg + } // Circumscribe an ellipse for the bounding box with a diamond shape. I derived // the function to calculate the diamond shape from: // http://mathforum.org/kb/message.jspa?messageID=3750236 -function diamond(parent, bbox, node) { - var w = (bbox.width * Math.SQRT2) / 2, - h = (bbox.height * Math.SQRT2) / 2, - points = [ - { x: 0, y: -h }, - { x: -w, y: 0 }, - { x: 0, y: h }, - { x: w, y: 0 } - ], - shapeSvg = parent.insert("polygon", ":first-child") - .attr("points", points.map(function(p) { return p.x + "," + p.y; }).join(" ")); - - node.intersect = function(p) { - return intersectPolygon(node, points, p); - }; - - return shapeSvg; -} - -},{"./intersect/intersect-circle":12,"./intersect/intersect-ellipse":13,"./intersect/intersect-polygon":16,"./intersect/intersect-rect":17}],28:[function(_dereq_,module,exports){ -var _ = _dereq_("./lodash"); + function diamond (parent, bbox, node) { + var w = (bbox.width * Math.SQRT2) / 2, + h = (bbox.height * Math.SQRT2) / 2, + points = [ + { x: 0, y: -h }, + { x: -w, y: 0 }, + { x: 0, y: h }, + { x: w, y: 0 } + ], + shapeSvg = parent.insert('polygon', ':first-child') + .attr('points', points.map(function (p) { return p.x + ',' + p.y }).join(' ')) + + node.intersect = function (p) { + return intersectPolygon(node, points, p) + } + + return shapeSvg + } + }, {'./intersect/intersect-circle': 12, './intersect/intersect-ellipse': 13, './intersect/intersect-polygon': 16, './intersect/intersect-rect': 17}], + 28: [function (_dereq_, module, exports) { + var _ = _dereq_('./lodash') // Public utility functions -module.exports = { - isSubgraph: isSubgraph, - edgeToId: edgeToId, - applyStyle: applyStyle, - applyClass: applyClass, - applyTransition: applyTransition -}; + module.exports = { + isSubgraph: isSubgraph, + edgeToId: edgeToId, + applyStyle: applyStyle, + applyClass: applyClass, + applyTransition: applyTransition + } /* * Returns true if the specified node in the graph is a subgraph node. A * subgraph node is one that contains other nodes. */ -function isSubgraph(g, v) { - return !!g.children(v).length; -} - -function edgeToId(e) { - return escapeId(e.v) + ":" + escapeId(e.w) + ":" + escapeId(e.name); -} - -var ID_DELIM = /:/g; -function escapeId(str) { - return str ? String(str).replace(ID_DELIM, "\\:") : ""; -} - -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} + function isSubgraph (g, v) { + return !!g.children(v).length + } -function applyClass(dom, classFn, otherClasses) { - if (classFn) { - dom - .attr("class", classFn) - .attr("class", otherClasses + " " + dom.attr("class")); - } -} + function edgeToId (e) { + return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name) + } -function applyTransition(selection, g) { - var graph = g.graph(); + var ID_DELIM = /:/g + function escapeId (str) { + return str ? String(str).replace(ID_DELIM, '\\:') : '' + } - if (_.isPlainObject(graph)) { - var transition = graph.transition; - if (_.isFunction(transition)) { - return transition(selection); - } - } + function applyStyle (dom, styleFn) { + if (styleFn) { + dom.attr('style', styleFn) + } + } + + function applyClass (dom, classFn, otherClasses) { + if (classFn) { + dom + .attr('class', classFn) + .attr('class', otherClasses + ' ' + dom.attr('class')) + } + } - return selection; -} + function applyTransition (selection, g) { + var graph = g.graph() -},{"./lodash":22}],29:[function(_dereq_,module,exports){ -module.exports = "0.4.10"; + if (_.isPlainObject(graph)) { + var transition = graph.transition + if (_.isFunction(transition)) { + return transition(selection) + } + } -},{}],30:[function(_dereq_,module,exports){ + return selection + } + }, {'./lodash': 22}], + 29: [function (_dereq_, module, exports) { + module.exports = '0.4.10' + }, {}], + 30: [function (_dereq_, module, exports) { /** * Copyright (c) 2014, Chris Pettitt * All rights reserved. @@ -10714,48 +10788,48 @@ module.exports = "0.4.10"; * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -var lib = _dereq_("./lib"); - -module.exports = { - Graph: lib.Graph, - json: _dereq_("./lib/json"), - alg: _dereq_("./lib/alg"), - version: lib.version -}; + var lib = _dereq_('./lib') -},{"./lib":46,"./lib/alg":37,"./lib/json":47}],31:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"); - -module.exports = components; + module.exports = { + Graph: lib.Graph, + json: _dereq_('./lib/json'), + alg: _dereq_('./lib/alg'), + version: lib.version + } + }, {'./lib': 46, './lib/alg': 37, './lib/json': 47}], + 31: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash') -function components(g) { - var visited = {}, - cmpts = [], - cmpt; + module.exports = components - function dfs(v) { - if (_.has(visited, v)) return; - visited[v] = true; - cmpt.push(v); - _.each(g.successors(v), dfs); - _.each(g.predecessors(v), dfs); - } + function components (g) { + var visited = {}, + cmpts = [], + cmpt - _.each(g.nodes(), function(v) { - cmpt = []; - dfs(v); - if (cmpt.length) { - cmpts.push(cmpt); - } - }); + function dfs (v) { + if (_.has(visited, v)) return + visited[v] = true + cmpt.push(v) + _.each(g.successors(v), dfs) + _.each(g.predecessors(v), dfs) + } - return cmpts; -} + _.each(g.nodes(), function (v) { + cmpt = [] + dfs(v) + if (cmpt.length) { + cmpts.push(cmpt) + } + }) -},{"../lodash":48}],32:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"); + return cmpts + } + }, {'../lodash': 48}], + 32: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash') -module.exports = dfs; + module.exports = dfs /* * A helper that preforms a pre- or post-order traversal on the input graph @@ -10764,360 +10838,360 @@ module.exports = dfs; * * Order must be one of "pre" or "post". */ -function dfs(g, vs, order) { - if (!_.isArray(vs)) { - vs = [vs]; - } + function dfs (g, vs, order) { + if (!_.isArray(vs)) { + vs = [vs] + } - var acc = [], - visited = {}; - _.each(vs, function(v) { - if (!g.hasNode(v)) { - throw new Error("Graph does not have node: " + v); - } + var acc = [], + visited = {} + _.each(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v) + } - doDfs(g, v, order === "post", visited, acc); - }); - return acc; -} + doDfs(g, v, order === 'post', visited, acc) + }) + return acc + } -function doDfs(g, v, postorder, visited, acc) { - if (!_.has(visited, v)) { - visited[v] = true; + function doDfs (g, v, postorder, visited, acc) { + if (!_.has(visited, v)) { + visited[v] = true - if (!postorder) { acc.push(v); } - _.each(g.neighbors(v), function(w) { - doDfs(g, w, postorder, visited, acc); - }); - if (postorder) { acc.push(v); } - } -} + if (!postorder) { acc.push(v) } + _.each(g.neighbors(v), function (w) { + doDfs(g, w, postorder, visited, acc) + }) + if (postorder) { acc.push(v) } + } + } + }, {'../lodash': 48}], + 33: [function (_dereq_, module, exports) { + var dijkstra = _dereq_('./dijkstra'), + _ = _dereq_('../lodash') -},{"../lodash":48}],33:[function(_dereq_,module,exports){ -var dijkstra = _dereq_("./dijkstra"), - _ = _dereq_("../lodash"); + module.exports = dijkstraAll -module.exports = dijkstraAll; + function dijkstraAll (g, weightFunc, edgeFunc) { + return _.transform(g.nodes(), function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc) + }, {}) + } + }, {'../lodash': 48, './dijkstra': 34}], + 34: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash'), + PriorityQueue = _dereq_('../data/priority-queue') -function dijkstraAll(g, weightFunc, edgeFunc) { - return _.transform(g.nodes(), function(acc, v) { - acc[v] = dijkstra(g, v, weightFunc, edgeFunc); - }, {}); -} + module.exports = dijkstra -},{"../lodash":48,"./dijkstra":34}],34:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"), - PriorityQueue = _dereq_("../data/priority-queue"); + var DEFAULT_WEIGHT_FUNC = _.constant(1) -module.exports = dijkstra; + function dijkstra (g, source, weightFn, edgeFn) { + return runDijkstra(g, String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || function (v) { return g.outEdges(v) }) + } -var DEFAULT_WEIGHT_FUNC = _.constant(1); + function runDijkstra (g, source, weightFn, edgeFn) { + var results = {}, + pq = new PriorityQueue(), + v, vEntry -function dijkstra(g, source, weightFn, edgeFn) { - return runDijkstra(g, String(source), - weightFn || DEFAULT_WEIGHT_FUNC, - edgeFn || function(v) { return g.outEdges(v); }); -} - -function runDijkstra(g, source, weightFn, edgeFn) { - var results = {}, - pq = new PriorityQueue(), - v, vEntry; - - var updateNeighbors = function(edge) { - var w = edge.v !== v ? edge.v : edge.w, - wEntry = results[w], - weight = weightFn(edge), - distance = vEntry.distance + weight; - - if (weight < 0) { - throw new Error("dijkstra does not allow negative edge weights. " + - "Bad edge: " + edge + " Weight: " + weight); - } + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w, + wEntry = results[w], + weight = weightFn(edge), + distance = vEntry.distance + weight - if (distance < wEntry.distance) { - wEntry.distance = distance; - wEntry.predecessor = v; - pq.decrease(w, distance); - } - }; - - g.nodes().forEach(function(v) { - var distance = v === source ? 0 : Number.POSITIVE_INFINITY; - results[v] = { distance: distance }; - pq.add(v, distance); - }); - - while (pq.size() > 0) { - v = pq.removeMin(); - vEntry = results[v]; - if (vEntry.distance === Number.POSITIVE_INFINITY) { - break; - } + if (weight < 0) { + throw new Error('dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + edge + ' Weight: ' + weight) + } - edgeFn(v).forEach(updateNeighbors); - } + if (distance < wEntry.distance) { + wEntry.distance = distance + wEntry.predecessor = v + pq.decrease(w, distance) + } + } + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY + results[v] = { distance: distance } + pq.add(v, distance) + }) - return results; -} + while (pq.size() > 0) { + v = pq.removeMin() + vEntry = results[v] + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break + } -},{"../data/priority-queue":44,"../lodash":48}],35:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"), - tarjan = _dereq_("./tarjan"); + edgeFn(v).forEach(updateNeighbors) + } -module.exports = findCycles; + return results + } + }, {'../data/priority-queue': 44, '../lodash': 48}], + 35: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash'), + tarjan = _dereq_('./tarjan') -function findCycles(g) { - return _.filter(tarjan(g), function(cmpt) { - return cmpt.length > 1 || (cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0])); - }); -} + module.exports = findCycles -},{"../lodash":48,"./tarjan":42}],36:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"); + function findCycles (g) { + return _.filter(tarjan(g), function (cmpt) { + return cmpt.length > 1 || (cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0])) + }) + } + }, {'../lodash': 48, './tarjan': 42}], + 36: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash') -module.exports = floydWarshall; + module.exports = floydWarshall -var DEFAULT_WEIGHT_FUNC = _.constant(1); + var DEFAULT_WEIGHT_FUNC = _.constant(1) -function floydWarshall(g, weightFn, edgeFn) { - return runFloydWarshall(g, + function floydWarshall (g, weightFn, edgeFn) { + return runFloydWarshall(g, weightFn || DEFAULT_WEIGHT_FUNC, - edgeFn || function(v) { return g.outEdges(v); }); -} - -function runFloydWarshall(g, weightFn, edgeFn) { - var results = {}, - nodes = g.nodes(); - - nodes.forEach(function(v) { - results[v] = {}; - results[v][v] = { distance: 0 }; - nodes.forEach(function(w) { - if (v !== w) { - results[v][w] = { distance: Number.POSITIVE_INFINITY }; - } - }); - edgeFn(v).forEach(function(edge) { - var w = edge.v === v ? edge.w : edge.v, - d = weightFn(edge); - results[v][w] = { distance: d, predecessor: v }; - }); - }); - - nodes.forEach(function(k) { - var rowK = results[k]; - nodes.forEach(function(i) { - var rowI = results[i]; - nodes.forEach(function(j) { - var ik = rowI[k]; - var kj = rowK[j]; - var ij = rowI[j]; - var altDistance = ik.distance + kj.distance; - if (altDistance < ij.distance) { - ij.distance = altDistance; - ij.predecessor = kj.predecessor; - } - }); - }); - }); - - return results; -} - -},{"../lodash":48}],37:[function(_dereq_,module,exports){ -module.exports = { - components: _dereq_("./components"), - dijkstra: _dereq_("./dijkstra"), - dijkstraAll: _dereq_("./dijkstra-all"), - findCycles: _dereq_("./find-cycles"), - floydWarshall: _dereq_("./floyd-warshall"), - isAcyclic: _dereq_("./is-acyclic"), - postorder: _dereq_("./postorder"), - preorder: _dereq_("./preorder"), - prim: _dereq_("./prim"), - tarjan: _dereq_("./tarjan"), - topsort: _dereq_("./topsort") -}; - -},{"./components":31,"./dijkstra":34,"./dijkstra-all":33,"./find-cycles":35,"./floyd-warshall":36,"./is-acyclic":38,"./postorder":39,"./preorder":40,"./prim":41,"./tarjan":42,"./topsort":43}],38:[function(_dereq_,module,exports){ -var topsort = _dereq_("./topsort"); - -module.exports = isAcyclic; - -function isAcyclic(g) { - try { - topsort(g); - } catch (e) { - if (e instanceof topsort.CycleException) { - return false; - } - throw e; - } - return true; -} - -},{"./topsort":43}],39:[function(_dereq_,module,exports){ -var dfs = _dereq_("./dfs"); - -module.exports = postorder; + edgeFn || function (v) { return g.outEdges(v) }) + } -function postorder(g, vs) { - return dfs(g, vs, "post"); -} + function runFloydWarshall (g, weightFn, edgeFn) { + var results = {}, + nodes = g.nodes() -},{"./dfs":32}],40:[function(_dereq_,module,exports){ -var dfs = _dereq_("./dfs"); + nodes.forEach(function (v) { + results[v] = {} + results[v][v] = { distance: 0 } + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY } + } + }) + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v, + d = weightFn(edge) + results[v][w] = { distance: d, predecessor: v } + }) + }) -module.exports = preorder; + nodes.forEach(function (k) { + var rowK = results[k] + nodes.forEach(function (i) { + var rowI = results[i] + nodes.forEach(function (j) { + var ik = rowI[k] + var kj = rowK[j] + var ij = rowI[j] + var altDistance = ik.distance + kj.distance + if (altDistance < ij.distance) { + ij.distance = altDistance + ij.predecessor = kj.predecessor + } + }) + }) + }) -function preorder(g, vs) { - return dfs(g, vs, "pre"); -} + return results + } + }, {'../lodash': 48}], + 37: [function (_dereq_, module, exports) { + module.exports = { + components: _dereq_('./components'), + dijkstra: _dereq_('./dijkstra'), + dijkstraAll: _dereq_('./dijkstra-all'), + findCycles: _dereq_('./find-cycles'), + floydWarshall: _dereq_('./floyd-warshall'), + isAcyclic: _dereq_('./is-acyclic'), + postorder: _dereq_('./postorder'), + preorder: _dereq_('./preorder'), + prim: _dereq_('./prim'), + tarjan: _dereq_('./tarjan'), + topsort: _dereq_('./topsort') + } + }, {'./components': 31, './dijkstra': 34, './dijkstra-all': 33, './find-cycles': 35, './floyd-warshall': 36, './is-acyclic': 38, './postorder': 39, './preorder': 40, './prim': 41, './tarjan': 42, './topsort': 43}], + 38: [function (_dereq_, module, exports) { + var topsort = _dereq_('./topsort') + + module.exports = isAcyclic + + function isAcyclic (g) { + try { + topsort(g) + } catch (e) { + if (e instanceof topsort.CycleException) { + return false + } + throw e + } + return true + } + }, {'./topsort': 43}], + 39: [function (_dereq_, module, exports) { + var dfs = _dereq_('./dfs') -},{"./dfs":32}],41:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"), - Graph = _dereq_("../graph"), - PriorityQueue = _dereq_("../data/priority-queue"); + module.exports = postorder -module.exports = prim; + function postorder (g, vs) { + return dfs(g, vs, 'post') + } + }, {'./dfs': 32}], + 40: [function (_dereq_, module, exports) { + var dfs = _dereq_('./dfs') -function prim(g, weightFunc) { - var result = new Graph(), - parents = {}, - pq = new PriorityQueue(), - v; + module.exports = preorder - function updateNeighbors(edge) { - var w = edge.v === v ? edge.w : edge.v, - pri = pq.priority(w); - if (pri !== undefined) { - var edgeWeight = weightFunc(edge); - if (edgeWeight < pri) { - parents[w] = v; - pq.decrease(w, edgeWeight); + function preorder (g, vs) { + return dfs(g, vs, 'pre') } - } - } + }, {'./dfs': 32}], + 41: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash'), + Graph = _dereq_('../graph'), + PriorityQueue = _dereq_('../data/priority-queue') - if (g.nodeCount() === 0) { - return result; - } + module.exports = prim - _.each(g.nodes(), function(v) { - pq.add(v, Number.POSITIVE_INFINITY); - result.setNode(v); - }); + function prim (g, weightFunc) { + var result = new Graph(), + parents = {}, + pq = new PriorityQueue(), + v - // Start from an arbitrary node - pq.decrease(g.nodes()[0], 0); - - var init = false; - while (pq.size() > 0) { - v = pq.removeMin(); - if (_.has(parents, v)) { - result.setEdge(v, parents[v]); - } else if (init) { - throw new Error("Input graph is not connected: " + g); - } else { - init = true; - } + function updateNeighbors (edge) { + var w = edge.v === v ? edge.w : edge.v, + pri = pq.priority(w) + if (pri !== undefined) { + var edgeWeight = weightFunc(edge) + if (edgeWeight < pri) { + parents[w] = v + pq.decrease(w, edgeWeight) + } + } + } - g.nodeEdges(v).forEach(updateNeighbors); - } + if (g.nodeCount() === 0) { + return result + } - return result; -} + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY) + result.setNode(v) + }) + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0) + + var init = false + while (pq.size() > 0) { + v = pq.removeMin() + if (_.has(parents, v)) { + result.setEdge(v, parents[v]) + } else if (init) { + throw new Error('Input graph is not connected: ' + g) + } else { + init = true + } -},{"../data/priority-queue":44,"../graph":45,"../lodash":48}],42:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"); + g.nodeEdges(v).forEach(updateNeighbors) + } -module.exports = tarjan; + return result + } + }, {'../data/priority-queue': 44, '../graph': 45, '../lodash': 48}], + 42: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash') -function tarjan(g) { - var index = 0, - stack = [], - visited = {}, // node id -> { onStack, lowlink, index } - results = []; + module.exports = tarjan - function dfs(v) { - var entry = visited[v] = { - onStack: true, - lowlink: index, - index: index++ - }; - stack.push(v); - - g.successors(v).forEach(function(w) { - if (!_.has(visited, w)) { - dfs(w); - entry.lowlink = Math.min(entry.lowlink, visited[w].lowlink); - } else if (visited[w].onStack) { - entry.lowlink = Math.min(entry.lowlink, visited[w].index); - } - }); - - if (entry.lowlink === entry.index) { - var cmpt = [], - w; - do { - w = stack.pop(); - visited[w].onStack = false; - cmpt.push(w); - } while (v !== w); - results.push(cmpt); - } - } + function tarjan (g) { + var index = 0, + stack = [], + visited = {}, // node id -> { onStack, lowlink, index } + results = [] - g.nodes().forEach(function(v) { - if (!_.has(visited, v)) { - dfs(v); - } - }); + function dfs (v) { + var entry = visited[v] = { + onStack: true, + lowlink: index, + index: index++ + } + stack.push(v) + + g.successors(v).forEach(function (w) { + if (!_.has(visited, w)) { + dfs(w) + entry.lowlink = Math.min(entry.lowlink, visited[w].lowlink) + } else if (visited[w].onStack) { + entry.lowlink = Math.min(entry.lowlink, visited[w].index) + } + }) - return results; -} + if (entry.lowlink === entry.index) { + var cmpt = [], + w + do { + w = stack.pop() + visited[w].onStack = false + cmpt.push(w) + } while (v !== w) + results.push(cmpt) + } + } -},{"../lodash":48}],43:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"); + g.nodes().forEach(function (v) { + if (!_.has(visited, v)) { + dfs(v) + } + }) -module.exports = topsort; -topsort.CycleException = CycleException; + return results + } + }, {'../lodash': 48}], + 43: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash') -function topsort(g) { - var visited = {}, - stack = {}, - results = []; + module.exports = topsort + topsort.CycleException = CycleException - function visit(node) { - if (_.has(stack, node)) { - throw new CycleException(); - } + function topsort (g) { + var visited = {}, + stack = {}, + results = [] - if (!_.has(visited, node)) { - stack[node] = true; - visited[node] = true; - _.each(g.predecessors(node), visit); - delete stack[node]; - results.push(node); - } - } + function visit (node) { + if (_.has(stack, node)) { + throw new CycleException() + } - _.each(g.sinks(), visit); + if (!_.has(visited, node)) { + stack[node] = true + visited[node] = true + _.each(g.predecessors(node), visit) + delete stack[node] + results.push(node) + } + } - if (_.size(visited) !== g.nodeCount()) { - throw new CycleException(); - } + _.each(g.sinks(), visit) - return results; -} + if (_.size(visited) !== g.nodeCount()) { + throw new CycleException() + } -function CycleException() {} + return results + } -},{"../lodash":48}],44:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"); + function CycleException () {} + }, {'../lodash': 48}], + 44: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash') -module.exports = PriorityQueue; + module.exports = PriorityQueue /** * A min-priority queue data structure. This algorithm is derived from Cormen, @@ -11126,31 +11200,31 @@ module.exports = PriorityQueue; * the queue. Adding and removing elements takes O(log n) time. A key can * have its priority decreased in O(log n) time. */ -function PriorityQueue() { - this._arr = []; - this._keyIndices = {}; -} + function PriorityQueue () { + this._arr = [] + this._keyIndices = {} + } /** * Returns the number of elements in the queue. Takes `O(1)` time. */ -PriorityQueue.prototype.size = function() { - return this._arr.length; -}; + PriorityQueue.prototype.size = function () { + return this._arr.length + } /** * Returns the keys that are in the queue. Takes `O(n)` time. */ -PriorityQueue.prototype.keys = function() { - return this._arr.map(function(x) { return x.key; }); -}; + PriorityQueue.prototype.keys = function () { + return this._arr.map(function (x) { return x.key }) + } /** * Returns `true` if **key** is in the queue and `false` if not. */ -PriorityQueue.prototype.has = function(key) { - return _.has(this._keyIndices, key); -}; + PriorityQueue.prototype.has = function (key) { + return _.has(this._keyIndices, key) + } /** * Returns the priority for **key**. If **key** is not present in the queue @@ -11158,23 +11232,23 @@ PriorityQueue.prototype.has = function(key) { * * @param {Object} key */ -PriorityQueue.prototype.priority = function(key) { - var index = this._keyIndices[key]; - if (index !== undefined) { - return this._arr[index].priority; - } -}; + PriorityQueue.prototype.priority = function (key) { + var index = this._keyIndices[key] + if (index !== undefined) { + return this._arr[index].priority + } + } /** * Returns the key for the minimum element in this queue. If the queue is * empty this function throws an Error. Takes `O(1)` time. */ -PriorityQueue.prototype.min = function() { - if (this.size() === 0) { - throw new Error("Queue underflow"); - } - return this._arr[0].key; -}; + PriorityQueue.prototype.min = function () { + if (this.size() === 0) { + throw new Error('Queue underflow') + } + return this._arr[0].key + } /** * Inserts a new key into the priority queue. If the key already exists in @@ -11184,30 +11258,30 @@ PriorityQueue.prototype.min = function() { * @param {Object} key the key to add * @param {Number} priority the initial priority for the key */ -PriorityQueue.prototype.add = function(key, priority) { - var keyIndices = this._keyIndices; - key = String(key); - if (!_.has(keyIndices, key)) { - var arr = this._arr; - var index = arr.length; - keyIndices[key] = index; - arr.push({key: key, priority: priority}); - this._decrease(index); - return true; - } - return false; -}; + PriorityQueue.prototype.add = function (key, priority) { + var keyIndices = this._keyIndices + key = String(key) + if (!_.has(keyIndices, key)) { + var arr = this._arr + var index = arr.length + keyIndices[key] = index + arr.push({key: key, priority: priority}) + this._decrease(index) + return true + } + return false + } /** * Removes and returns the smallest key in the queue. Takes `O(log n)` time. */ -PriorityQueue.prototype.removeMin = function() { - this._swap(0, this._arr.length - 1); - var min = this._arr.pop(); - delete this._keyIndices[min.key]; - this._heapify(0); - return min.key; -}; + PriorityQueue.prototype.removeMin = function () { + this._swap(0, this._arr.length - 1) + var min = this._arr.pop() + delete this._keyIndices[min.key] + this._heapify(0) + return min.key + } /** * Decreases the priority for **key** to **priority**. If the new priority is @@ -11216,68 +11290,68 @@ PriorityQueue.prototype.removeMin = function() { * @param {Object} key the key for which to raise priority * @param {Number} priority the new priority for the key */ -PriorityQueue.prototype.decrease = function(key, priority) { - var index = this._keyIndices[key]; - if (priority > this._arr[index].priority) { - throw new Error("New priority is greater than current priority. " + - "Key: " + key + " Old: " + this._arr[index].priority + " New: " + priority); - } - this._arr[index].priority = priority; - this._decrease(index); -}; - -PriorityQueue.prototype._heapify = function(i) { - var arr = this._arr; - var l = 2 * i, - r = l + 1, - largest = i; - if (l < arr.length) { - largest = arr[l].priority < arr[largest].priority ? l : largest; - if (r < arr.length) { - largest = arr[r].priority < arr[largest].priority ? r : largest; - } - if (largest !== i) { - this._swap(i, largest); - this._heapify(largest); - } - } -}; - -PriorityQueue.prototype._decrease = function(index) { - var arr = this._arr; - var priority = arr[index].priority; - var parent; - while (index !== 0) { - parent = index >> 1; - if (arr[parent].priority < priority) { - break; - } - this._swap(index, parent); - index = parent; - } -}; + PriorityQueue.prototype.decrease = function (key, priority) { + var index = this._keyIndices[key] + if (priority > this._arr[index].priority) { + throw new Error('New priority is greater than current priority. ' + + 'Key: ' + key + ' Old: ' + this._arr[index].priority + ' New: ' + priority) + } + this._arr[index].priority = priority + this._decrease(index) + } + + PriorityQueue.prototype._heapify = function (i) { + var arr = this._arr + var l = 2 * i, + r = l + 1, + largest = i + if (l < arr.length) { + largest = arr[l].priority < arr[largest].priority ? l : largest + if (r < arr.length) { + largest = arr[r].priority < arr[largest].priority ? r : largest + } + if (largest !== i) { + this._swap(i, largest) + this._heapify(largest) + } + } + } -PriorityQueue.prototype._swap = function(i, j) { - var arr = this._arr; - var keyIndices = this._keyIndices; - var origArrI = arr[i]; - var origArrJ = arr[j]; - arr[i] = origArrJ; - arr[j] = origArrI; - keyIndices[origArrJ.key] = i; - keyIndices[origArrI.key] = j; -}; + PriorityQueue.prototype._decrease = function (index) { + var arr = this._arr + var priority = arr[index].priority + var parent + while (index !== 0) { + parent = index >> 1 + if (arr[parent].priority < priority) { + break + } + this._swap(index, parent) + index = parent + } + } -},{"../lodash":48}],45:[function(_dereq_,module,exports){ -"use strict"; + PriorityQueue.prototype._swap = function (i, j) { + var arr = this._arr + var keyIndices = this._keyIndices + var origArrI = arr[i] + var origArrJ = arr[j] + arr[i] = origArrJ + arr[j] = origArrI + keyIndices[origArrJ.key] = i + keyIndices[origArrI.key] = j + } + }, {'../lodash': 48}], + 45: [function (_dereq_, module, exports) { + 'use strict' -var _ = _dereq_("./lodash"); + var _ = _dereq_('./lodash') -module.exports = Graph; + module.exports = Graph -var DEFAULT_EDGE_NAME = "\x00", - GRAPH_NODE = "\x00", - EDGE_KEY_DELIM = "\x01"; + var DEFAULT_EDGE_NAME = '\x00', + GRAPH_NODE = '\x00', + EDGE_KEY_DELIM = '\x01' // Implementation notes: // @@ -11289,603 +11363,601 @@ var DEFAULT_EDGE_NAME = "\x00", // edges up and, object properties, which have string keys, are the closest // we're going to get to a performant hashtable in JavaScript. -function Graph(opts) { - this._isDirected = _.has(opts, "directed") ? opts.directed : true; - this._isMultigraph = _.has(opts, "multigraph") ? opts.multigraph : false; - this._isCompound = _.has(opts, "compound") ? opts.compound : false; + function Graph (opts) { + this._isDirected = _.has(opts, 'directed') ? opts.directed : true + this._isMultigraph = _.has(opts, 'multigraph') ? opts.multigraph : false + this._isCompound = _.has(opts, 'compound') ? opts.compound : false // Label for the graph itself - this._label = undefined; + this._label = undefined // Defaults to be set when creating a new node - this._defaultNodeLabelFn = _.constant(undefined); + this._defaultNodeLabelFn = _.constant(undefined) // Defaults to be set when creating a new edge - this._defaultEdgeLabelFn = _.constant(undefined); + this._defaultEdgeLabelFn = _.constant(undefined) // v -> label - this._nodes = {}; + this._nodes = {} - if (this._isCompound) { + if (this._isCompound) { // v -> parent - this._parent = {}; + this._parent = {} // v -> children - this._children = {}; - this._children[GRAPH_NODE] = {}; - } + this._children = {} + this._children[GRAPH_NODE] = {} + } // v -> edgeObj - this._in = {}; + this._in = {} // u -> v -> Number - this._preds = {}; + this._preds = {} // v -> edgeObj - this._out = {}; + this._out = {} // v -> w -> Number - this._sucs = {}; + this._sucs = {} // e -> edgeObj - this._edgeObjs = {}; + this._edgeObjs = {} // e -> label - this._edgeLabels = {}; -} + this._edgeLabels = {} + } /* Number of nodes in the graph. Should only be changed by the implementation. */ -Graph.prototype._nodeCount = 0; + Graph.prototype._nodeCount = 0 /* Number of edges in the graph. Should only be changed by the implementation. */ -Graph.prototype._edgeCount = 0; - + Graph.prototype._edgeCount = 0 /* === Graph functions ========= */ -Graph.prototype.isDirected = function() { - return this._isDirected; -}; - -Graph.prototype.isMultigraph = function() { - return this._isMultigraph; -}; + Graph.prototype.isDirected = function () { + return this._isDirected + } -Graph.prototype.isCompound = function() { - return this._isCompound; -}; + Graph.prototype.isMultigraph = function () { + return this._isMultigraph + } -Graph.prototype.setGraph = function(label) { - this._label = label; - return this; -}; + Graph.prototype.isCompound = function () { + return this._isCompound + } -Graph.prototype.graph = function() { - return this._label; -}; + Graph.prototype.setGraph = function (label) { + this._label = label + return this + } + Graph.prototype.graph = function () { + return this._label + } /* === Node functions ========== */ -Graph.prototype.setDefaultNodeLabel = function(newDefault) { - if (!_.isFunction(newDefault)) { - newDefault = _.constant(newDefault); - } - this._defaultNodeLabelFn = newDefault; - return this; -}; - -Graph.prototype.nodeCount = function() { - return this._nodeCount; -}; - -Graph.prototype.nodes = function() { - return _.keys(this._nodes); -}; - -Graph.prototype.sources = function() { - return _.filter(this.nodes(), function(v) { - return _.isEmpty(this._in[v]); - }, this); -}; - -Graph.prototype.sinks = function() { - return _.filter(this.nodes(), function(v) { - return _.isEmpty(this._out[v]); - }, this); -}; - -Graph.prototype.setNodes = function(vs, value) { - var args = arguments; - _.each(vs, function(v) { - if (args.length > 1) { - this.setNode(v, value); - } else { - this.setNode(v); - } - }, this); - return this; -}; - -Graph.prototype.setNode = function(v, value) { - if (_.has(this._nodes, v)) { - if (arguments.length > 1) { - this._nodes[v] = value; - } - return this; - } + Graph.prototype.setDefaultNodeLabel = function (newDefault) { + if (!_.isFunction(newDefault)) { + newDefault = _.constant(newDefault) + } + this._defaultNodeLabelFn = newDefault + return this + } - this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); - if (this._isCompound) { - this._parent[v] = GRAPH_NODE; - this._children[v] = {}; - this._children[GRAPH_NODE][v] = true; - } - this._in[v] = {}; - this._preds[v] = {}; - this._out[v] = {}; - this._sucs[v] = {}; - ++this._nodeCount; - return this; -}; - -Graph.prototype.node = function(v) { - return this._nodes[v]; -}; - -Graph.prototype.hasNode = function(v) { - return _.has(this._nodes, v); -}; - -Graph.prototype.removeNode = function(v) { - var self = this; - if (_.has(this._nodes, v)) { - var removeEdge = function(e) { self.removeEdge(self._edgeObjs[e]); }; - delete this._nodes[v]; - if (this._isCompound) { - this._removeFromParentsChildList(v); - delete this._parent[v]; - _.each(this.children(v), function(child) { - this.setParent(child); - }, this); - delete this._children[v]; - } - _.each(_.keys(this._in[v]), removeEdge); - delete this._in[v]; - delete this._preds[v]; - _.each(_.keys(this._out[v]), removeEdge); - delete this._out[v]; - delete this._sucs[v]; - --this._nodeCount; - } - return this; -}; + Graph.prototype.nodeCount = function () { + return this._nodeCount + } -Graph.prototype.setParent = function(v, parent) { - if (!this._isCompound) { - throw new Error("Cannot set parent in a non-compound graph"); - } + Graph.prototype.nodes = function () { + return _.keys(this._nodes) + } + + Graph.prototype.sources = function () { + return _.filter(this.nodes(), function (v) { + return _.isEmpty(this._in[v]) + }, this) + } + + Graph.prototype.sinks = function () { + return _.filter(this.nodes(), function (v) { + return _.isEmpty(this._out[v]) + }, this) + } + + Graph.prototype.setNodes = function (vs, value) { + var args = arguments + _.each(vs, function (v) { + if (args.length > 1) { + this.setNode(v, value) + } else { + this.setNode(v) + } + }, this) + return this + } + + Graph.prototype.setNode = function (v, value) { + if (_.has(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value + } + return this + } + + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v) + if (this._isCompound) { + this._parent[v] = GRAPH_NODE + this._children[v] = {} + this._children[GRAPH_NODE][v] = true + } + this._in[v] = {} + this._preds[v] = {} + this._out[v] = {} + this._sucs[v] = {} + ++this._nodeCount + return this + } - if (_.isUndefined(parent)) { - parent = GRAPH_NODE; - } else { + Graph.prototype.node = function (v) { + return this._nodes[v] + } + + Graph.prototype.hasNode = function (v) { + return _.has(this._nodes, v) + } + + Graph.prototype.removeNode = function (v) { + var self = this + if (_.has(this._nodes, v)) { + var removeEdge = function (e) { self.removeEdge(self._edgeObjs[e]) } + delete this._nodes[v] + if (this._isCompound) { + this._removeFromParentsChildList(v) + delete this._parent[v] + _.each(this.children(v), function (child) { + this.setParent(child) + }, this) + delete this._children[v] + } + _.each(_.keys(this._in[v]), removeEdge) + delete this._in[v] + delete this._preds[v] + _.each(_.keys(this._out[v]), removeEdge) + delete this._out[v] + delete this._sucs[v] + --this._nodeCount + } + return this + } + + Graph.prototype.setParent = function (v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph') + } + + if (_.isUndefined(parent)) { + parent = GRAPH_NODE + } else { // Coerce parent to string - parent += ""; - for (var ancestor = parent; + parent += '' + for (var ancestor = parent; !_.isUndefined(ancestor); ancestor = this.parent(ancestor)) { - if (ancestor === v) { - throw new Error("Setting " + parent+ " as parent of " + v + - " would create create a cycle"); + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + + ' would create create a cycle') + } + } + + this.setNode(parent) + } + + this.setNode(v) + this._removeFromParentsChildList(v) + this._parent[v] = parent + this._children[parent][v] = true + return this } - } - this.setNode(parent); - } + Graph.prototype._removeFromParentsChildList = function (v) { + delete this._children[this._parent[v]][v] + } - this.setNode(v); - this._removeFromParentsChildList(v); - this._parent[v] = parent; - this._children[parent][v] = true; - return this; -}; - -Graph.prototype._removeFromParentsChildList = function(v) { - delete this._children[this._parent[v]][v]; -}; - -Graph.prototype.parent = function(v) { - if (this._isCompound) { - var parent = this._parent[v]; - if (parent !== GRAPH_NODE) { - return parent; - } - } -}; + Graph.prototype.parent = function (v) { + if (this._isCompound) { + var parent = this._parent[v] + if (parent !== GRAPH_NODE) { + return parent + } + } + } -Graph.prototype.children = function(v) { - if (_.isUndefined(v)) { - v = GRAPH_NODE; - } + Graph.prototype.children = function (v) { + if (_.isUndefined(v)) { + v = GRAPH_NODE + } - if (this._isCompound) { - var children = this._children[v]; - if (children) { - return _.keys(children); - } - } else if (v === GRAPH_NODE) { - return this.nodes(); - } else if (this.hasNode(v)) { - return []; - } -}; + if (this._isCompound) { + var children = this._children[v] + if (children) { + return _.keys(children) + } + } else if (v === GRAPH_NODE) { + return this.nodes() + } else if (this.hasNode(v)) { + return [] + } + } -Graph.prototype.predecessors = function(v) { - var predsV = this._preds[v]; - if (predsV) { - return _.keys(predsV); - } -}; + Graph.prototype.predecessors = function (v) { + var predsV = this._preds[v] + if (predsV) { + return _.keys(predsV) + } + } -Graph.prototype.successors = function(v) { - var sucsV = this._sucs[v]; - if (sucsV) { - return _.keys(sucsV); - } -}; + Graph.prototype.successors = function (v) { + var sucsV = this._sucs[v] + if (sucsV) { + return _.keys(sucsV) + } + } -Graph.prototype.neighbors = function(v) { - var preds = this.predecessors(v); - if (preds) { - return _.union(preds, this.successors(v)); - } -}; + Graph.prototype.neighbors = function (v) { + var preds = this.predecessors(v) + if (preds) { + return _.union(preds, this.successors(v)) + } + } -Graph.prototype.filterNodes = function(filter) { - var copy = new this.constructor({ - directed: this._isDirected, - multigraph: this._isMultigraph, - compound: this._isCompound - }); + Graph.prototype.filterNodes = function (filter) { + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound + }) - copy.setGraph(this.graph()); + copy.setGraph(this.graph()) - _.each(this._nodes, function(value, v) { - if (filter(v)) { - copy.setNode(v, value); - } - }, this); + _.each(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value) + } + }, this) - _.each(this._edgeObjs, function(e) { - if (copy.hasNode(e.v) && copy.hasNode(e.w)) { - copy.setEdge(e, this.edge(e)); - } - }, this); - - var self = this; - var parents = {}; - function findParent(v) { - var parent = self.parent(v); - if (parent === undefined || copy.hasNode(parent)) { - parents[v] = parent; - return parent; - } else if (parent in parents) { - return parents[parent]; - } else { - return findParent(parent); - } - } + _.each(this._edgeObjs, function (e) { + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, this.edge(e)) + } + }, this) + + var self = this + var parents = {} + function findParent (v) { + var parent = self.parent(v) + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent + return parent + } else if (parent in parents) { + return parents[parent] + } else { + return findParent(parent) + } + } - if (this._isCompound) { - _.each(copy.nodes(), function(v) { - copy.setParent(v, findParent(v)); - }); - } + if (this._isCompound) { + _.each(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)) + }) + } - return copy; -}; + return copy + } /* === Edge functions ========== */ -Graph.prototype.setDefaultEdgeLabel = function(newDefault) { - if (!_.isFunction(newDefault)) { - newDefault = _.constant(newDefault); - } - this._defaultEdgeLabelFn = newDefault; - return this; -}; - -Graph.prototype.edgeCount = function() { - return this._edgeCount; -}; - -Graph.prototype.edges = function() { - return _.values(this._edgeObjs); -}; - -Graph.prototype.setPath = function(vs, value) { - var self = this, - args = arguments; - _.reduce(vs, function(v, w) { - if (args.length > 1) { - self.setEdge(v, w, value); - } else { - self.setEdge(v, w); - } - return w; - }); - return this; -}; + Graph.prototype.setDefaultEdgeLabel = function (newDefault) { + if (!_.isFunction(newDefault)) { + newDefault = _.constant(newDefault) + } + this._defaultEdgeLabelFn = newDefault + return this + } + + Graph.prototype.edgeCount = function () { + return this._edgeCount + } + + Graph.prototype.edges = function () { + return _.values(this._edgeObjs) + } + + Graph.prototype.setPath = function (vs, value) { + var self = this, + args = arguments + _.reduce(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value) + } else { + self.setEdge(v, w) + } + return w + }) + return this + } /* * setEdge(v, w, [value, [name]]) * setEdge({ v, w, [name] }, [value]) */ -Graph.prototype.setEdge = function() { - var v, w, name, value, - valueSpecified = false, - arg0 = arguments[0]; - - if (typeof arg0 === "object" && arg0 !== null && "v" in arg0) { - v = arg0.v; - w = arg0.w; - name = arg0.name; - if (arguments.length === 2) { - value = arguments[1]; - valueSpecified = true; - } - } else { - v = arg0; - w = arguments[1]; - name = arguments[3]; - if (arguments.length > 2) { - value = arguments[2]; - valueSpecified = true; - } - } + Graph.prototype.setEdge = function () { + var v, w, name, value, + valueSpecified = false, + arg0 = arguments[0] + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v + w = arg0.w + name = arg0.name + if (arguments.length === 2) { + value = arguments[1] + valueSpecified = true + } + } else { + v = arg0 + w = arguments[1] + name = arguments[3] + if (arguments.length > 2) { + value = arguments[2] + valueSpecified = true + } + } - v = "" + v; - w = "" + w; - if (!_.isUndefined(name)) { - name = "" + name; - } + v = '' + v + w = '' + w + if (!_.isUndefined(name)) { + name = '' + name + } - var e = edgeArgsToId(this._isDirected, v, w, name); - if (_.has(this._edgeLabels, e)) { - if (valueSpecified) { - this._edgeLabels[e] = value; - } - return this; - } + var e = edgeArgsToId(this._isDirected, v, w, name) + if (_.has(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value + } + return this + } - if (!_.isUndefined(name) && !this._isMultigraph) { - throw new Error("Cannot set a named edge when isMultigraph = false"); - } + if (!_.isUndefined(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false') + } // It didn't exist, so we need to create it. // First ensure the nodes exist. - this.setNode(v); - this.setNode(w); + this.setNode(v) + this.setNode(w) - this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name) - var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name) // Ensure we add undirected edges in a consistent way. - v = edgeObj.v; - w = edgeObj.w; - - Object.freeze(edgeObj); - this._edgeObjs[e] = edgeObj; - incrementOrInitEntry(this._preds[w], v); - incrementOrInitEntry(this._sucs[v], w); - this._in[w][e] = edgeObj; - this._out[v][e] = edgeObj; - this._edgeCount++; - return this; -}; - -Graph.prototype.edge = function(v, w, name) { - var e = (arguments.length === 1 + v = edgeObj.v + w = edgeObj.w + + Object.freeze(edgeObj) + this._edgeObjs[e] = edgeObj + incrementOrInitEntry(this._preds[w], v) + incrementOrInitEntry(this._sucs[v], w) + this._in[w][e] = edgeObj + this._out[v][e] = edgeObj + this._edgeCount++ + return this + } + + Graph.prototype.edge = function (v, w, name) { + var e = (arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name)); - return this._edgeLabels[e]; -}; + : edgeArgsToId(this._isDirected, v, w, name)) + return this._edgeLabels[e] + } -Graph.prototype.hasEdge = function(v, w, name) { - var e = (arguments.length === 1 + Graph.prototype.hasEdge = function (v, w, name) { + var e = (arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name)); - return _.has(this._edgeLabels, e); -}; + : edgeArgsToId(this._isDirected, v, w, name)) + return _.has(this._edgeLabels, e) + } -Graph.prototype.removeEdge = function(v, w, name) { - var e = (arguments.length === 1 + Graph.prototype.removeEdge = function (v, w, name) { + var e = (arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v, w, name)), - edge = this._edgeObjs[e]; - if (edge) { - v = edge.v; - w = edge.w; - delete this._edgeLabels[e]; - delete this._edgeObjs[e]; - decrementOrRemoveEntry(this._preds[w], v); - decrementOrRemoveEntry(this._sucs[v], w); - delete this._in[w][e]; - delete this._out[v][e]; - this._edgeCount--; - } - return this; -}; - -Graph.prototype.inEdges = function(v, u) { - var inV = this._in[v]; - if (inV) { - var edges = _.values(inV); - if (!u) { - return edges; - } - return _.filter(edges, function(edge) { return edge.v === u; }); - } -}; - -Graph.prototype.outEdges = function(v, w) { - var outV = this._out[v]; - if (outV) { - var edges = _.values(outV); - if (!w) { - return edges; - } - return _.filter(edges, function(edge) { return edge.w === w; }); - } -}; + edge = this._edgeObjs[e] + if (edge) { + v = edge.v + w = edge.w + delete this._edgeLabels[e] + delete this._edgeObjs[e] + decrementOrRemoveEntry(this._preds[w], v) + decrementOrRemoveEntry(this._sucs[v], w) + delete this._in[w][e] + delete this._out[v][e] + this._edgeCount-- + } + return this + } + + Graph.prototype.inEdges = function (v, u) { + var inV = this._in[v] + if (inV) { + var edges = _.values(inV) + if (!u) { + return edges + } + return _.filter(edges, function (edge) { return edge.v === u }) + } + } -Graph.prototype.nodeEdges = function(v, w) { - var inEdges = this.inEdges(v, w); - if (inEdges) { - return inEdges.concat(this.outEdges(v, w)); - } -}; + Graph.prototype.outEdges = function (v, w) { + var outV = this._out[v] + if (outV) { + var edges = _.values(outV) + if (!w) { + return edges + } + return _.filter(edges, function (edge) { return edge.w === w }) + } + } -function incrementOrInitEntry(map, k) { - if (map[k]) { - map[k]++; - } else { - map[k] = 1; - } -} - -function decrementOrRemoveEntry(map, k) { - if (!--map[k]) { delete map[k]; } -} - -function edgeArgsToId(isDirected, v_, w_, name) { - var v = "" + v_; - var w = "" + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + - (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name); -} - -function edgeArgsToObj(isDirected, v_, w_, name) { - var v = "" + v_; - var w = "" + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - var edgeObj = { v: v, w: w }; - if (name) { - edgeObj.name = name; - } - return edgeObj; -} + Graph.prototype.nodeEdges = function (v, w) { + var inEdges = this.inEdges(v, w) + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)) + } + } + + function incrementOrInitEntry (map, k) { + if (map[k]) { + map[k]++ + } else { + map[k] = 1 + } + } + + function decrementOrRemoveEntry (map, k) { + if (!--map[k]) { delete map[k] } + } + + function edgeArgsToId (isDirected, v_, w_, name) { + var v = '' + v_ + var w = '' + w_ + if (!isDirected && v > w) { + var tmp = v + v = w + w = tmp + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + + (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name) + } -function edgeObjToId(isDirected, edgeObj) { - return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); -} + function edgeArgsToObj (isDirected, v_, w_, name) { + var v = '' + v_ + var w = '' + w_ + if (!isDirected && v > w) { + var tmp = v + v = w + w = tmp + } + var edgeObj = { v: v, w: w } + if (name) { + edgeObj.name = name + } + return edgeObj + } -},{"./lodash":48}],46:[function(_dereq_,module,exports){ + function edgeObjToId (isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name) + } + }, {'./lodash': 48}], + 46: [function (_dereq_, module, exports) { // Includes only the "core" of graphlib -module.exports = { - Graph: _dereq_("./graph"), - version: _dereq_("./version") -}; - -},{"./graph":45,"./version":49}],47:[function(_dereq_,module,exports){ -var _ = _dereq_("./lodash"), - Graph = _dereq_("./graph"); - -module.exports = { - write: write, - read: read -}; - -function write(g) { - var json = { - options: { - directed: g.isDirected(), - multigraph: g.isMultigraph(), - compound: g.isCompound() - }, - nodes: writeNodes(g), - edges: writeEdges(g) - }; - if (!_.isUndefined(g.graph())) { - json.value = _.clone(g.graph()); - } - return json; -} - -function writeNodes(g) { - return _.map(g.nodes(), function(v) { - var nodeValue = g.node(v), - parent = g.parent(v), - node = { v: v }; - if (!_.isUndefined(nodeValue)) { - node.value = nodeValue; - } - if (!_.isUndefined(parent)) { - node.parent = parent; - } - return node; - }); -} - -function writeEdges(g) { - return _.map(g.edges(), function(e) { - var edgeValue = g.edge(e), - edge = { v: e.v, w: e.w }; - if (!_.isUndefined(e.name)) { - edge.name = e.name; - } - if (!_.isUndefined(edgeValue)) { - edge.value = edgeValue; - } - return edge; - }); -} - -function read(json) { - var g = new Graph(json.options).setGraph(json.value); - _.each(json.nodes, function(entry) { - g.setNode(entry.v, entry.value); - if (entry.parent) { - g.setParent(entry.v, entry.parent); - } - }); - _.each(json.edges, function(entry) { - g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); - }); - return g; -} - -},{"./graph":45,"./lodash":48}],48:[function(_dereq_,module,exports){ -/* global window */ + module.exports = { + Graph: _dereq_('./graph'), + version: _dereq_('./version') + } + }, {'./graph': 45, './version': 49}], + 47: [function (_dereq_, module, exports) { + var _ = _dereq_('./lodash'), + Graph = _dereq_('./graph') + + module.exports = { + write: write, + read: read + } + + function write (g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound() + }, + nodes: writeNodes(g), + edges: writeEdges(g) + } + if (!_.isUndefined(g.graph())) { + json.value = _.clone(g.graph()) + } + return json + } + + function writeNodes (g) { + return _.map(g.nodes(), function (v) { + var nodeValue = g.node(v), + parent = g.parent(v), + node = { v: v } + if (!_.isUndefined(nodeValue)) { + node.value = nodeValue + } + if (!_.isUndefined(parent)) { + node.parent = parent + } + return node + }) + } -var lodash; + function writeEdges (g) { + return _.map(g.edges(), function (e) { + var edgeValue = g.edge(e), + edge = { v: e.v, w: e.w } + if (!_.isUndefined(e.name)) { + edge.name = e.name + } + if (!_.isUndefined(edgeValue)) { + edge.value = edgeValue + } + return edge + }) + } -if (typeof _dereq_ === "function") { - try { - lodash = _dereq_("lodash"); - } catch (e) {} -} + function read (json) { + var g = new Graph(json.options).setGraph(json.value) + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value) + if (entry.parent) { + g.setParent(entry.v, entry.parent) + } + }) + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value) + }) + return g + } + }, {'./graph': 45, './lodash': 48}], + 48: [function (_dereq_, module, exports) { +/* global window */ -if (!lodash) { - lodash = window._; -} + var lodash -module.exports = lodash; + if (typeof _dereq_ === 'function') { + try { + lodash = _dereq_('lodash') + } catch (e) {} + } -},{"lodash":50}],49:[function(_dereq_,module,exports){ -module.exports = '1.0.7'; + if (!lodash) { + lodash = window._ + } -},{}],50:[function(_dereq_,module,exports){ -(function (global){ + module.exports = lodash + }, {'lodash': 50}], + 49: [function (_dereq_, module, exports) { + module.exports = '1.0.7' + }, {}], + 50: [function (_dereq_, module, exports) { + (function (global) { /** * @license * lodash 3.10.1 (Custom Build) @@ -11895,168 +11967,167 @@ module.exports = '1.0.7'; * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors * Available under MIT license */ -;(function() { - + ;(function () { /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; + var undefined /** Used as the semantic version number. */ - var VERSION = '3.10.1'; + var VERSION = '3.10.1' /** Used to compose bitmasks for wrapper metadata. */ - var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_BOUND_FLAG = 4, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64, - ARY_FLAG = 128, - REARG_FLAG = 256; + var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64, + ARY_FLAG = 128, + REARG_FLAG = 256 /** Used as default options for `_.trunc`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...' /** Used to detect when a function becomes hot. */ - var HOT_COUNT = 150, - HOT_SPAN = 16; + var HOT_COUNT = 150, + HOT_SPAN = 16 /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; + var LARGE_ARRAY_SIZE = 200 /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2; + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2 /** Used as the `TypeError` message for "Functions" methods. */ - var FUNC_ERROR_TEXT = 'Expected a function'; + var FUNC_ERROR_TEXT = 'Expected a function' /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; + var PLACEHOLDER = '__lodash_placeholder__' /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - - var arrayBufferTag = '[object ArrayBuffer]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]' + + var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]' /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, - reUnescapedHtml = /[&<>"'`]/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, + reUnescapedHtml = /[&<>"'`]/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source) /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g; + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g /** * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns) * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern). */ - var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g, - reHasRegExpChars = RegExp(reRegExpChars.source); + var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g, + reHasRegExpChars = RegExp(reRegExpChars.source) /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */ - var reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g; + var reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; + var reEscapeChar = /\\(\\)?/g /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; + var reFlags = /\w*$/ /** Used to detect hexadecimal string values. */ - var reHasHexPrefix = /^0[xX]/; + var reHasHexPrefix = /^0[xX]/ /** Used to detect host constructors (Safari > 5). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; + var reIsHostCtor = /^\[object .+?Constructor\]$/ /** Used to detect unsigned integer values. */ - var reIsUint = /^\d+$/; + var reIsUint = /^\d+$/ /** Used to match latin-1 supplementary letters (excluding mathematical operators). */ - var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; + var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; + var reNoMatch = /($^)/ /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + var reUnescapedString = /['\n\r\u2028\u2029\\]/g /** Used to match words to create compound words. */ - var reWords = (function() { - var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]', - lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+'; + var reWords = (function () { + var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]', + lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+' - return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g'); - }()); + return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g') + }()) /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array', - 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number', - 'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite', - 'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array', - 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap' - ]; + var contextProps = [ + 'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number', + 'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite', + 'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap' + ] /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; + var templateCounter = -1 /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + var typedArrayTags = {} + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[uint32Tag] = true + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = - typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = + var cloneableTags = {} + cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = @@ -12064,94 +12135,162 @@ module.exports = '1.0.7'; cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[stringTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true + cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[mapTag] = cloneableTags[setTag] = - cloneableTags[weakMapTag] = false; + cloneableTags[weakMapTag] = false /** Used to map latin-1 supplementary letters to basic latin letters. */ - var deburredLetters = { - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss' - }; + var deburredLetters = { + '\xc0': 'A', + '\xc1': 'A', + '\xc2': 'A', + '\xc3': 'A', + '\xc4': 'A', + '\xc5': 'A', + '\xe0': 'a', + '\xe1': 'a', + '\xe2': 'a', + '\xe3': 'a', + '\xe4': 'a', + '\xe5': 'a', + '\xc7': 'C', + '\xe7': 'c', + '\xd0': 'D', + '\xf0': 'd', + '\xc8': 'E', + '\xc9': 'E', + '\xca': 'E', + '\xcb': 'E', + '\xe8': 'e', + '\xe9': 'e', + '\xea': 'e', + '\xeb': 'e', + '\xcC': 'I', + '\xcd': 'I', + '\xce': 'I', + '\xcf': 'I', + '\xeC': 'i', + '\xed': 'i', + '\xee': 'i', + '\xef': 'i', + '\xd1': 'N', + '\xf1': 'n', + '\xd2': 'O', + '\xd3': 'O', + '\xd4': 'O', + '\xd5': 'O', + '\xd6': 'O', + '\xd8': 'O', + '\xf2': 'o', + '\xf3': 'o', + '\xf4': 'o', + '\xf5': 'o', + '\xf6': 'o', + '\xf8': 'o', + '\xd9': 'U', + '\xda': 'U', + '\xdb': 'U', + '\xdc': 'U', + '\xf9': 'u', + '\xfa': 'u', + '\xfb': 'u', + '\xfc': 'u', + '\xdd': 'Y', + '\xfd': 'y', + '\xff': 'y', + '\xc6': 'Ae', + '\xe6': 'ae', + '\xde': 'Th', + '\xfe': 'th', + '\xdf': 'ss' + } /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + } /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'", - '`': '`' - }; + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' + } /** Used to determine if values are of the language type `Object`. */ - var objectTypes = { - 'function': true, - 'object': true - }; + var objectTypes = { + 'function': true, + 'object': true + } /** Used to escape characters for inclusion in compiled regexes. */ - var regexpEscapes = { - '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34', - '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39', - 'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46', - 'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66', - 'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78' - }; + var regexpEscapes = { + '0': 'x30', + '1': 'x31', + '2': 'x32', + '3': 'x33', + '4': 'x34', + '5': 'x35', + '6': 'x36', + '7': 'x37', + '8': 'x38', + '9': 'x39', + 'A': 'x41', + 'B': 'x42', + 'C': 'x43', + 'D': 'x44', + 'E': 'x45', + 'F': 'x46', + 'a': 'x61', + 'b': 'x62', + 'c': 'x63', + 'd': 'x64', + 'e': 'x65', + 'f': 'x66', + 'n': 'x6e', + 'r': 'x72', + 't': 'x74', + 'u': 'x75', + 'v': 'x76', + 'x': 'x78' + } /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + } /** Detect free variable `exports`. */ - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; + var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports /** Detect free variable `module`. */ - var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; + var freeModule = objectTypes[typeof module] && module && !module.nodeType && module /** Detect free variable `global` from Node.js. */ - var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global; + var freeGlobal = freeExports && freeModule && typeof global === 'object' && global && global.Object && global /** Detect free variable `self`. */ - var freeSelf = objectTypes[typeof self] && self && self.Object && self; + var freeSelf = objectTypes[typeof self] && self && self.Object && self /** Detect free variable `window`. */ - var freeWindow = objectTypes[typeof window] && window && window.Object && window; + var freeWindow = objectTypes[typeof window] && window && window.Object && window /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; + var moduleExports = freeModule && freeModule.exports === freeExports && freeExports /** * Used as a reference to the global object. @@ -12159,9 +12298,9 @@ module.exports = '1.0.7'; * The `this` value is used if it's the global object to avoid Greasemonkey's * restricted `window` object, otherwise the `window` object is used. */ - var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this; + var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this - /*--------------------------------------------------------------------------*/ + /* -------------------------------------------------------------------------- */ /** * The base implementation of `compareAscending` which compares values and @@ -12172,29 +12311,29 @@ module.exports = '1.0.7'; * @param {*} other The other value to compare. * @returns {number} Returns the sort order indicator for `value`. */ - function baseCompareAscending(value, other) { - if (value !== other) { - var valIsNull = value === null, - valIsUndef = value === undefined, - valIsReflexive = value === value; + function baseCompareAscending (value, other) { + if (value !== other) { + var valIsNull = value === null, + valIsUndef = value === undefined, + valIsReflexive = value === value - var othIsNull = other === null, - othIsUndef = other === undefined, - othIsReflexive = other === other; + var othIsNull = other === null, + othIsUndef = other === undefined, + othIsReflexive = other === other - if ((value > other && !othIsNull) || !valIsReflexive || + if ((value > other && !othIsNull) || !valIsReflexive || (valIsNull && !othIsUndef && othIsReflexive) || (valIsUndef && othIsReflexive)) { - return 1; - } - if ((value < other && !valIsNull) || !othIsReflexive || + return 1 + } + if ((value < other && !valIsNull) || !othIsReflexive || (othIsNull && !valIsUndef && valIsReflexive) || (othIsUndef && valIsReflexive)) { - return -1; - } - } - return 0; - } + return -1 + } + } + return 0 + } /** * The base implementation of `_.findIndex` and `_.findLastIndex` without @@ -12206,17 +12345,17 @@ module.exports = '1.0.7'; * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */ - function baseFindIndex(array, predicate, fromRight) { - var length = array.length, - index = fromRight ? length : -1; + function baseFindIndex (array, predicate, fromRight) { + var length = array.length, + index = fromRight ? length : -1 - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index + } + } + return -1 + } /** * The base implementation of `_.indexOf` without support for binary searches. @@ -12227,20 +12366,20 @@ module.exports = '1.0.7'; * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ - function baseIndexOf(array, value, fromIndex) { - if (value !== value) { - return indexOfNaN(array, fromIndex); - } - var index = fromIndex - 1, - length = array.length; + function baseIndexOf (array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex) + } + var index = fromIndex - 1, + length = array.length - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } + while (++index < length) { + if (array[index] === value) { + return index + } + } + return -1 + } /** * The base implementation of `_.isFunction` without support for environments @@ -12250,11 +12389,11 @@ module.exports = '1.0.7'; * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. */ - function baseIsFunction(value) { + function baseIsFunction (value) { // Avoid a Chakra JIT bug in compatibility modes of IE 11. // See https://github.com/jashkenas/underscore/issues/1621 for more details. - return typeof value == 'function' || false; - } + return typeof value === 'function' || false + } /** * Converts `value` to a string if it's not one. An empty string is returned @@ -12264,9 +12403,9 @@ module.exports = '1.0.7'; * @param {*} value The value to process. * @returns {string} Returns the string. */ - function baseToString(value) { - return value == null ? '' : (value + ''); - } + function baseToString (value) { + return value == null ? '' : (value + '') + } /** * Used by `_.trim` and `_.trimLeft` to get the index of the first character @@ -12277,13 +12416,13 @@ module.exports = '1.0.7'; * @param {string} chars The characters to find. * @returns {number} Returns the index of the first character not found in `chars`. */ - function charsLeftIndex(string, chars) { - var index = -1, - length = string.length; + function charsLeftIndex (string, chars) { + var index = -1, + length = string.length - while (++index < length && chars.indexOf(string.charAt(index)) > -1) {} - return index; - } + while (++index < length && chars.indexOf(string.charAt(index)) > -1) {} + return index + } /** * Used by `_.trim` and `_.trimRight` to get the index of the last character @@ -12294,12 +12433,12 @@ module.exports = '1.0.7'; * @param {string} chars The characters to find. * @returns {number} Returns the index of the last character not found in `chars`. */ - function charsRightIndex(string, chars) { - var index = string.length; + function charsRightIndex (string, chars) { + var index = string.length - while (index-- && chars.indexOf(string.charAt(index)) > -1) {} - return index; - } + while (index-- && chars.indexOf(string.charAt(index)) > -1) {} + return index + } /** * Used by `_.sortBy` to compare transformed elements of a collection and stable @@ -12310,9 +12449,9 @@ module.exports = '1.0.7'; * @param {Object} other The other object to compare. * @returns {number} Returns the sort order indicator for `object`. */ - function compareAscending(object, other) { - return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index); - } + function compareAscending (object, other) { + return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index) + } /** * Used by `_.sortByOrder` to compare multiple properties of a value to another @@ -12328,23 +12467,23 @@ module.exports = '1.0.7'; * @param {boolean[]} orders The order to sort by for each property. * @returns {number} Returns the sort order indicator for `object`. */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = baseCompareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * ((order === 'asc' || order === true) ? 1 : -1); - } - } + function compareMultiple (object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length + + while (++index < length) { + var result = baseCompareAscending(objCriteria[index], othCriteria[index]) + if (result) { + if (index >= ordersLength) { + return result + } + var order = orders[index] + return result * ((order === 'asc' || order === true) ? 1 : -1) + } + } // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications // that causes it, under certain circumstances, to provide the same value for // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 @@ -12352,8 +12491,8 @@ module.exports = '1.0.7'; // // This also ensures a stable sort in V8 and other engines. // See https://code.google.com/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } + return object.index - other.index + } /** * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. @@ -12362,9 +12501,9 @@ module.exports = '1.0.7'; * @param {string} letter The matched letter to deburr. * @returns {string} Returns the deburred letter. */ - function deburrLetter(letter) { - return deburredLetters[letter]; - } + function deburrLetter (letter) { + return deburredLetters[letter] + } /** * Used by `_.escape` to convert characters to HTML entities. @@ -12373,9 +12512,9 @@ module.exports = '1.0.7'; * @param {string} chr The matched character to escape. * @returns {string} Returns the escaped character. */ - function escapeHtmlChar(chr) { - return htmlEscapes[chr]; - } + function escapeHtmlChar (chr) { + return htmlEscapes[chr] + } /** * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes. @@ -12386,14 +12525,14 @@ module.exports = '1.0.7'; * @param {string} whitespaceChar The capture group for a whitespace character. * @returns {string} Returns the escaped character. */ - function escapeRegExpChar(chr, leadingChar, whitespaceChar) { - if (leadingChar) { - chr = regexpEscapes[chr]; - } else if (whitespaceChar) { - chr = stringEscapes[chr]; - } - return '\\' + chr; - } + function escapeRegExpChar (chr, leadingChar, whitespaceChar) { + if (leadingChar) { + chr = regexpEscapes[chr] + } else if (whitespaceChar) { + chr = stringEscapes[chr] + } + return '\\' + chr + } /** * Used by `_.template` to escape characters for inclusion in compiled string literals. @@ -12402,9 +12541,9 @@ module.exports = '1.0.7'; * @param {string} chr The matched character to escape. * @returns {string} Returns the escaped character. */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; - } + function escapeStringChar (chr) { + return '\\' + stringEscapes[chr] + } /** * Gets the index at which the first occurrence of `NaN` is found in `array`. @@ -12415,18 +12554,18 @@ module.exports = '1.0.7'; * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched `NaN`, else `-1`. */ - function indexOfNaN(array, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 0 : -1); - - while ((fromRight ? index-- : ++index < length)) { - var other = array[index]; - if (other !== other) { - return index; - } - } - return -1; - } + function indexOfNaN (array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 0 : -1) + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index] + if (other !== other) { + return index + } + } + return -1 + } /** * Checks if `value` is object-like. @@ -12435,9 +12574,9 @@ module.exports = '1.0.7'; * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. */ - function isObjectLike(value) { - return !!value && typeof value == 'object'; - } + function isObjectLike (value) { + return !!value && typeof value === 'object' + } /** * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a @@ -12447,10 +12586,10 @@ module.exports = '1.0.7'; * @param {number} charCode The character code to inspect. * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`. */ - function isSpace(charCode) { - return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 || - (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279))); - } + function isSpace (charCode) { + return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 || + (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279))) + } /** * Replaces all `placeholder` elements in `array` with an internal placeholder @@ -12461,20 +12600,20 @@ module.exports = '1.0.7'; * @param {*} placeholder The placeholder to replace. * @returns {Array} Returns the new array of placeholder indexes. */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = -1, - result = []; - - while (++index < length) { - if (array[index] === placeholder) { - array[index] = PLACEHOLDER; - result[++resIndex] = index; - } - } - return result; - } + function replaceHolders (array, placeholder) { + var index = -1, + length = array.length, + resIndex = -1, + result = [] + + while (++index < length) { + if (array[index] === placeholder) { + array[index] = PLACEHOLDER + result[++resIndex] = index + } + } + return result + } /** * An implementation of `_.uniq` optimized for sorted arrays without support @@ -12485,24 +12624,24 @@ module.exports = '1.0.7'; * @param {Function} [iteratee] The function invoked per iteration. * @returns {Array} Returns the new duplicate-value-free array. */ - function sortedUniq(array, iteratee) { - var seen, - index = -1, - length = array.length, - resIndex = -1, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value, index, array) : value; - - if (!index || seen !== computed) { - seen = computed; - result[++resIndex] = value; - } - } - return result; - } + function sortedUniq (array, iteratee) { + var seen, + index = -1, + length = array.length, + resIndex = -1, + result = [] + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value + + if (!index || seen !== computed) { + seen = computed + result[++resIndex] = value + } + } + return result + } /** * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace @@ -12512,13 +12651,13 @@ module.exports = '1.0.7'; * @param {string} string The string to inspect. * @returns {number} Returns the index of the first non-whitespace character. */ - function trimmedLeftIndex(string) { - var index = -1, - length = string.length; + function trimmedLeftIndex (string) { + var index = -1, + length = string.length - while (++index < length && isSpace(string.charCodeAt(index))) {} - return index; - } + while (++index < length && isSpace(string.charCodeAt(index))) {} + return index + } /** * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace @@ -12528,12 +12667,12 @@ module.exports = '1.0.7'; * @param {string} string The string to inspect. * @returns {number} Returns the index of the last non-whitespace character. */ - function trimmedRightIndex(string) { - var index = string.length; + function trimmedRightIndex (string) { + var index = string.length - while (index-- && isSpace(string.charCodeAt(index))) {} - return index; - } + while (index-- && isSpace(string.charCodeAt(index))) {} + return index + } /** * Used by `_.unescape` to convert HTML entities to characters. @@ -12542,11 +12681,11 @@ module.exports = '1.0.7'; * @param {string} chr The matched character to unescape. * @returns {string} Returns the unescaped character. */ - function unescapeHtmlChar(chr) { - return htmlUnescapes[chr]; - } + function unescapeHtmlChar (chr) { + return htmlUnescapes[chr] + } - /*--------------------------------------------------------------------------*/ + /* -------------------------------------------------------------------------- */ /** * Create a new pristine `lodash` function using the given `context` object. @@ -12583,101 +12722,101 @@ module.exports = '1.0.7'; * // or creating a suped-up `defer` in Node.js * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; */ - function runInContext(context) { + function runInContext (context) { // Avoid issues with some ES3 environments that attempt to use values, named // after built-in constructors like `Object`, for the creation of literals. // ES5 clears this up by stating that literals must use built-in constructors. // See https://es5.github.io/#x11.1.5 for more details. - context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; + context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root /** Native constructor references. */ - var Array = context.Array, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Number = context.Number, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Number = context.Number, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError /** Used for native method references. */ - var arrayProto = Array.prototype, - objectProto = Object.prototype, - stringProto = String.prototype; + var arrayProto = Array.prototype, + objectProto = Object.prototype, + stringProto = String.prototype /** Used to resolve the decompiled source of functions. */ - var fnToString = Function.prototype.toString; + var fnToString = Function.prototype.toString /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; + var hasOwnProperty = objectProto.hasOwnProperty /** Used to generate unique IDs. */ - var idCounter = 0; + var idCounter = 0 /** * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) * of values. */ - var objToString = objectProto.toString; + var objToString = objectProto.toString /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; + var oldDash = root._ /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + + var reIsNative = RegExp('^' + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); + ) /** Native method references. */ - var ArrayBuffer = context.ArrayBuffer, - clearTimeout = context.clearTimeout, - parseFloat = context.parseFloat, - pow = Math.pow, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - Set = getNative(context, 'Set'), - setTimeout = context.setTimeout, - splice = arrayProto.splice, - Uint8Array = context.Uint8Array, - WeakMap = getNative(context, 'WeakMap'); + var ArrayBuffer = context.ArrayBuffer, + clearTimeout = context.clearTimeout, + parseFloat = context.parseFloat, + pow = Math.pow, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + Set = getNative(context, 'Set'), + setTimeout = context.setTimeout, + splice = arrayProto.splice, + Uint8Array = context.Uint8Array, + WeakMap = getNative(context, 'WeakMap') /* Native method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeCreate = getNative(Object, 'create'), - nativeFloor = Math.floor, - nativeIsArray = getNative(Array, 'isArray'), - nativeIsFinite = context.isFinite, - nativeKeys = getNative(Object, 'keys'), - nativeMax = Math.max, - nativeMin = Math.min, - nativeNow = getNative(Date, 'now'), - nativeParseInt = context.parseInt, - nativeRandom = Math.random; + var nativeCeil = Math.ceil, + nativeCreate = getNative(Object, 'create'), + nativeFloor = Math.floor, + nativeIsArray = getNative(Array, 'isArray'), + nativeIsFinite = context.isFinite, + nativeKeys = getNative(Object, 'keys'), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = getNative(Date, 'now'), + nativeParseInt = context.parseInt, + nativeRandom = Math.random /** Used as references for `-Infinity` and `Infinity`. */ - var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY, - POSITIVE_INFINITY = Number.POSITIVE_INFINITY; + var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY, + POSITIVE_INFINITY = Number.POSITIVE_INFINITY /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1 /** * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) * of an array-like value. */ - var MAX_SAFE_INTEGER = 9007199254740991; + var MAX_SAFE_INTEGER = 9007199254740991 /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; + var metaMap = WeakMap && new WeakMap() /** Used to lookup unminified function names. */ - var realNames = {}; + var realNames = {} - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a `lodash` object which wraps `value` to enable implicit chaining. @@ -12775,26 +12914,26 @@ module.exports = '1.0.7'; * _.isArray(squares.value()); * // => true */ - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } + function lodash (value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value + } + if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value) + } + } + return new LodashWrapper(value) + } /** * The function whose prototype all chaining wrappers inherit from. * * @private */ - function baseLodash() { + function baseLodash () { // No operation performed. - } + } /** * The base constructor for creating `lodash` wrapper objects. @@ -12804,11 +12943,11 @@ module.exports = '1.0.7'; * @param {boolean} [chainAll] Enable chaining for all wrapper methods. * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value. */ - function LodashWrapper(value, chainAll, actions) { - this.__wrapped__ = value; - this.__actions__ = actions || []; - this.__chain__ = !!chainAll; - } + function LodashWrapper (value, chainAll, actions) { + this.__wrapped__ = value + this.__actions__ = actions || [] + this.__chain__ = !!chainAll + } /** * An object environment feature flags. @@ -12817,7 +12956,7 @@ module.exports = '1.0.7'; * @memberOf _ * @type Object */ - var support = lodash.support = {}; + var support = lodash.support = {} /** * By default, the template delimiters used by lodash are like those in @@ -12828,7 +12967,7 @@ module.exports = '1.0.7'; * @memberOf _ * @type Object */ - lodash.templateSettings = { + lodash.templateSettings = { /** * Used to detect `data` property values to be HTML-escaped. @@ -12836,7 +12975,7 @@ module.exports = '1.0.7'; * @memberOf _.templateSettings * @type RegExp */ - 'escape': reEscape, + 'escape': reEscape, /** * Used to detect code to be evaluated. @@ -12844,7 +12983,7 @@ module.exports = '1.0.7'; * @memberOf _.templateSettings * @type RegExp */ - 'evaluate': reEvaluate, + 'evaluate': reEvaluate, /** * Used to detect `data` property values to inject. @@ -12852,7 +12991,7 @@ module.exports = '1.0.7'; * @memberOf _.templateSettings * @type RegExp */ - 'interpolate': reInterpolate, + 'interpolate': reInterpolate, /** * Used to reference the data object in the template text. @@ -12860,7 +12999,7 @@ module.exports = '1.0.7'; * @memberOf _.templateSettings * @type string */ - 'variable': '', + 'variable': '', /** * Used to import variables into the compiled template. @@ -12868,7 +13007,7 @@ module.exports = '1.0.7'; * @memberOf _.templateSettings * @type Object */ - 'imports': { + 'imports': { /** * A reference to the `lodash` function. @@ -12876,11 +13015,11 @@ module.exports = '1.0.7'; * @memberOf _.templateSettings.imports * @type Function */ - '_': lodash - } - }; + '_': lodash + } + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. @@ -12888,15 +13027,15 @@ module.exports = '1.0.7'; * @private * @param {*} value The value to wrap. */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = POSITIVE_INFINITY; - this.__views__ = []; - } + function LazyWrapper (value) { + this.__wrapped__ = value + this.__actions__ = [] + this.__dir__ = 1 + this.__filtered__ = false + this.__iteratees__ = [] + this.__takeCount__ = POSITIVE_INFINITY + this.__views__ = [] + } /** * Creates a clone of the lazy wrapper object. @@ -12906,16 +13045,16 @@ module.exports = '1.0.7'; * @memberOf LazyWrapper * @returns {Object} Returns the cloned `LazyWrapper` object. */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = arrayCopy(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = arrayCopy(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = arrayCopy(this.__views__); - return result; - } + function lazyClone () { + var result = new LazyWrapper(this.__wrapped__) + result.__actions__ = arrayCopy(this.__actions__) + result.__dir__ = this.__dir__ + result.__filtered__ = this.__filtered__ + result.__iteratees__ = arrayCopy(this.__iteratees__) + result.__takeCount__ = this.__takeCount__ + result.__views__ = arrayCopy(this.__views__) + return result + } /** * Reverses the direction of lazy iteration. @@ -12925,17 +13064,17 @@ module.exports = '1.0.7'; * @memberOf LazyWrapper * @returns {Object} Returns the new reversed `LazyWrapper` object. */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } + function lazyReverse () { + if (this.__filtered__) { + var result = new LazyWrapper(this) + result.__dir__ = -1 + result.__filtered__ = true + } else { + result = this.clone() + result.__dir__ *= -1 + } + return result + } /** * Extracts the unwrapped value from its lazy wrapper. @@ -12945,56 +13084,56 @@ module.exports = '1.0.7'; * @memberOf LazyWrapper * @returns {*} Returns the unwrapped value. */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) { - return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__); - } - var result = []; - - outer: + function lazyValue () { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__) + + if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) { + return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__) + } + var result = [] + + outer: while (length-- && resIndex < takeCount) { - index += dir; + index += dir var iterIndex = -1, - value = array[index]; + value = array[index] while (++iterIndex < iterLength) { var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value) if (type == LAZY_MAP_FLAG) { - value = computed; + value = computed } else if (!computed) { if (type == LAZY_FILTER_FLAG) { - continue outer; + continue outer } else { - break outer; + break outer } } } - result[resIndex++] = value; + result[resIndex++] = value } - return result; - } + return result + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a cache object to store key/value pairs. @@ -13004,9 +13143,9 @@ module.exports = '1.0.7'; * @name Cache * @memberOf _.memoize */ - function MapCache() { - this.__data__ = {}; - } + function MapCache () { + this.__data__ = {} + } /** * Removes `key` and its value from the cache. @@ -13017,9 +13156,9 @@ module.exports = '1.0.7'; * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`. */ - function mapDelete(key) { - return this.has(key) && delete this.__data__[key]; - } + function mapDelete (key) { + return this.has(key) && delete this.__data__[key] + } /** * Gets the cached value for `key`. @@ -13030,9 +13169,9 @@ module.exports = '1.0.7'; * @param {string} key The key of the value to get. * @returns {*} Returns the cached value. */ - function mapGet(key) { - return key == '__proto__' ? undefined : this.__data__[key]; - } + function mapGet (key) { + return key == '__proto__' ? undefined : this.__data__[key] + } /** * Checks if a cached value for `key` exists. @@ -13043,9 +13182,9 @@ module.exports = '1.0.7'; * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ - function mapHas(key) { - return key != '__proto__' && hasOwnProperty.call(this.__data__, key); - } + function mapHas (key) { + return key != '__proto__' && hasOwnProperty.call(this.__data__, key) + } /** * Sets `value` to `key` of the cache. @@ -13057,14 +13196,14 @@ module.exports = '1.0.7'; * @param {*} value The value to cache. * @returns {Object} Returns the cache object. */ - function mapSet(key, value) { - if (key != '__proto__') { - this.__data__[key] = value; - } - return this; - } + function mapSet (key, value) { + if (key != '__proto__') { + this.__data__[key] = value + } + return this + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * @@ -13073,14 +13212,14 @@ module.exports = '1.0.7'; * @private * @param {Array} [values] The values to cache. */ - function SetCache(values) { - var length = values ? values.length : 0; + function SetCache (values) { + var length = values ? values.length : 0 - this.data = { 'hash': nativeCreate(null), 'set': new Set }; - while (length--) { - this.push(values[length]); - } - } + this.data = { 'hash': nativeCreate(null), 'set': new Set() } + while (length--) { + this.push(values[length]) + } + } /** * Checks if `value` is in `cache` mimicking the return signature of @@ -13091,12 +13230,12 @@ module.exports = '1.0.7'; * @param {*} value The value to search for. * @returns {number} Returns `0` if `value` is found, else `-1`. */ - function cacheIndexOf(cache, value) { - var data = cache.data, - result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value]; + function cacheIndexOf (cache, value) { + var data = cache.data, + result = (typeof value === 'string' || isObject(value)) ? data.set.has(value) : data.hash[value] - return result ? 0 : -1; - } + return result ? 0 : -1 + } /** * Adds `value` to the cache. @@ -13106,16 +13245,16 @@ module.exports = '1.0.7'; * @memberOf SetCache * @param {*} value The value to cache. */ - function cachePush(value) { - var data = this.data; - if (typeof value == 'string' || isObject(value)) { - data.set.add(value); - } else { - data.hash[value] = true; - } - } + function cachePush (value) { + var data = this.data + if (typeof value === 'string' || isObject(value)) { + data.set.add(value) + } else { + data.hash[value] = true + } + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a new array joining `array` with `other`. @@ -13125,21 +13264,21 @@ module.exports = '1.0.7'; * @param {Array} other The other array to join. * @returns {Array} Returns the new concatenated array. */ - function arrayConcat(array, other) { - var index = -1, - length = array.length, - othIndex = -1, - othLength = other.length, - result = Array(length + othLength); + function arrayConcat (array, other) { + var index = -1, + length = array.length, + othIndex = -1, + othLength = other.length, + result = Array(length + othLength) - while (++index < length) { - result[index] = array[index]; - } - while (++othIndex < othLength) { - result[index++] = other[othIndex]; - } - return result; - } + while (++index < length) { + result[index] = array[index] + } + while (++othIndex < othLength) { + result[index++] = other[othIndex] + } + return result + } /** * Copies the values of `source` to `array`. @@ -13149,16 +13288,16 @@ module.exports = '1.0.7'; * @param {Array} [array=[]] The array to copy values to. * @returns {Array} Returns `array`. */ - function arrayCopy(source, array) { - var index = -1, - length = source.length; + function arrayCopy (source, array) { + var index = -1, + length = source.length - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } + array || (array = Array(length)) + while (++index < length) { + array[index] = source[index] + } + return array + } /** * A specialized version of `_.forEach` for arrays without support for callback @@ -13169,17 +13308,17 @@ module.exports = '1.0.7'; * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns `array`. */ - function arrayEach(array, iteratee) { - var index = -1, - length = array.length; + function arrayEach (array, iteratee) { + var index = -1, + length = array.length - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break + } + } + return array + } /** * A specialized version of `_.forEachRight` for arrays without support for @@ -13190,16 +13329,16 @@ module.exports = '1.0.7'; * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns `array`. */ - function arrayEachRight(array, iteratee) { - var length = array.length; + function arrayEachRight (array, iteratee) { + var length = array.length - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } + while (length--) { + if (iteratee(array[length], length, array) === false) { + break + } + } + return array + } /** * A specialized version of `_.every` for arrays without support for callback @@ -13211,17 +13350,17 @@ module.exports = '1.0.7'; * @returns {boolean} Returns `true` if all elements pass the predicate check, * else `false`. */ - function arrayEvery(array, predicate) { - var index = -1, - length = array.length; + function arrayEvery (array, predicate) { + var index = -1, + length = array.length - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false + } + } + return true + } /** * A specialized version of `baseExtremum` for arrays which invokes `iteratee` @@ -13234,23 +13373,23 @@ module.exports = '1.0.7'; * @param {*} exValue The initial extremum value. * @returns {*} Returns the extremum value. */ - function arrayExtremum(array, iteratee, comparator, exValue) { - var index = -1, - length = array.length, - computed = exValue, - result = computed; + function arrayExtremum (array, iteratee, comparator, exValue) { + var index = -1, + length = array.length, + computed = exValue, + result = computed - while (++index < length) { - var value = array[index], - current = +iteratee(value); + while (++index < length) { + var value = array[index], + current = +iteratee(value) - if (comparator(current, computed)) { - computed = current; - result = value; - } - } - return result; - } + if (comparator(current, computed)) { + computed = current + result = value + } + } + return result + } /** * A specialized version of `_.filter` for arrays without support for callback @@ -13261,20 +13400,20 @@ module.exports = '1.0.7'; * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ - function arrayFilter(array, predicate) { - var index = -1, - length = array.length, - resIndex = -1, - result = []; + function arrayFilter (array, predicate) { + var index = -1, + length = array.length, + resIndex = -1, + result = [] - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[++resIndex] = value; - } - } - return result; - } + while (++index < length) { + var value = array[index] + if (predicate(value, index, array)) { + result[++resIndex] = value + } + } + return result + } /** * A specialized version of `_.map` for arrays without support for callback @@ -13285,16 +13424,16 @@ module.exports = '1.0.7'; * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ - function arrayMap(array, iteratee) { - var index = -1, - length = array.length, - result = Array(length); + function arrayMap (array, iteratee) { + var index = -1, + length = array.length, + result = Array(length) - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } + while (++index < length) { + result[index] = iteratee(array[index], index, array) + } + return result + } /** * Appends the elements of `values` to `array`. @@ -13304,16 +13443,16 @@ module.exports = '1.0.7'; * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; + function arrayPush (array, values) { + var index = -1, + length = values.length, + offset = array.length - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } + while (++index < length) { + array[offset + index] = values[index] + } + return array + } /** * A specialized version of `_.reduce` for arrays without support for callback @@ -13327,18 +13466,18 @@ module.exports = '1.0.7'; * as the initial value. * @returns {*} Returns the accumulated value. */ - function arrayReduce(array, iteratee, accumulator, initFromArray) { - var index = -1, - length = array.length; + function arrayReduce (array, iteratee, accumulator, initFromArray) { + var index = -1, + length = array.length - if (initFromArray && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } + if (initFromArray && length) { + accumulator = array[++index] + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array) + } + return accumulator + } /** * A specialized version of `_.reduceRight` for arrays without support for @@ -13352,16 +13491,16 @@ module.exports = '1.0.7'; * as the initial value. * @returns {*} Returns the accumulated value. */ - function arrayReduceRight(array, iteratee, accumulator, initFromArray) { - var length = array.length; - if (initFromArray && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } + function arrayReduceRight (array, iteratee, accumulator, initFromArray) { + var length = array.length + if (initFromArray && length) { + accumulator = array[--length] + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array) + } + return accumulator + } /** * A specialized version of `_.some` for arrays without support for callback @@ -13373,17 +13512,17 @@ module.exports = '1.0.7'; * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */ - function arraySome(array, predicate) { - var index = -1, - length = array.length; + function arraySome (array, predicate) { + var index = -1, + length = array.length - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } + while (++index < length) { + if (predicate(array[index], index, array)) { + return true + } + } + return false + } /** * A specialized version of `_.sum` for arrays without support for callback @@ -13394,15 +13533,15 @@ module.exports = '1.0.7'; * @param {Function} iteratee The function invoked per iteration. * @returns {number} Returns the sum. */ - function arraySum(array, iteratee) { - var length = array.length, - result = 0; + function arraySum (array, iteratee) { + var length = array.length, + result = 0 - while (length--) { - result += +iteratee(array[length]) || 0; - } - return result; - } + while (length--) { + result += +iteratee(array[length]) || 0 + } + return result + } /** * Used by `_.defaults` to customize its `_.assign` use. @@ -13412,9 +13551,9 @@ module.exports = '1.0.7'; * @param {*} sourceValue The source object property value. * @returns {*} Returns the value to assign to the destination object. */ - function assignDefaults(objectValue, sourceValue) { - return objectValue === undefined ? sourceValue : objectValue; - } + function assignDefaults (objectValue, sourceValue) { + return objectValue === undefined ? sourceValue : objectValue + } /** * Used by `_.template` to customize its `_.assign` use. @@ -13429,11 +13568,11 @@ module.exports = '1.0.7'; * @param {Object} object The destination object. * @returns {*} Returns the value to assign to the destination object. */ - function assignOwnDefaults(objectValue, sourceValue, key, object) { - return (objectValue === undefined || !hasOwnProperty.call(object, key)) + function assignOwnDefaults (objectValue, sourceValue, key, object) { + return (objectValue === undefined || !hasOwnProperty.call(object, key)) ? sourceValue - : objectValue; - } + : objectValue + } /** * A specialized version of `_.assign` for customizing assigned values without @@ -13446,23 +13585,23 @@ module.exports = '1.0.7'; * @param {Function} customizer The function to customize assigned values. * @returns {Object} Returns `object`. */ - function assignWith(object, source, customizer) { - var index = -1, - props = keys(source), - length = props.length; + function assignWith (object, source, customizer) { + var index = -1, + props = keys(source), + length = props.length - while (++index < length) { - var key = props[index], - value = object[key], - result = customizer(value, source[key], key, object, source); + while (++index < length) { + var key = props[index], + value = object[key], + result = customizer(value, source[key], key, object, source) - if ((result === result ? (result !== value) : (value === value)) || + if ((result === result ? (result !== value) : (value === value)) || (value === undefined && !(key in object))) { - object[key] = result; - } - } - return object; - } + object[key] = result + } + } + return object + } /** * The base implementation of `_.assign` without support for argument juggling, @@ -13473,11 +13612,11 @@ module.exports = '1.0.7'; * @param {Object} source The source object. * @returns {Object} Returns `object`. */ - function baseAssign(object, source) { - return source == null + function baseAssign (object, source) { + return source == null ? object - : baseCopy(source, keys(source), object); - } + : baseCopy(source, keys(source), object) + } /** * The base implementation of `_.at` without support for string collections @@ -13488,24 +13627,24 @@ module.exports = '1.0.7'; * @param {number[]|string[]} props The property names or indexes of elements to pick. * @returns {Array} Returns the new array of picked elements. */ - function baseAt(collection, props) { - var index = -1, - isNil = collection == null, - isArr = !isNil && isArrayLike(collection), - length = isArr ? collection.length : 0, - propsLength = props.length, - result = Array(propsLength); - - while(++index < propsLength) { - var key = props[index]; - if (isArr) { - result[index] = isIndex(key, length) ? collection[key] : undefined; - } else { - result[index] = isNil ? undefined : collection[key]; - } - } - return result; - } + function baseAt (collection, props) { + var index = -1, + isNil = collection == null, + isArr = !isNil && isArrayLike(collection), + length = isArr ? collection.length : 0, + propsLength = props.length, + result = Array(propsLength) + + while (++index < propsLength) { + var key = props[index] + if (isArr) { + result[index] = isIndex(key, length) ? collection[key] : undefined + } else { + result[index] = isNil ? undefined : collection[key] + } + } + return result + } /** * Copies properties of `source` to `object`. @@ -13516,18 +13655,18 @@ module.exports = '1.0.7'; * @param {Object} [object={}] The object to copy properties to. * @returns {Object} Returns `object`. */ - function baseCopy(source, props, object) { - object || (object = {}); + function baseCopy (source, props, object) { + object || (object = {}) - var index = -1, - length = props.length; + var index = -1, + length = props.length - while (++index < length) { - var key = props[index]; - object[key] = source[key]; - } - return object; - } + while (++index < length) { + var key = props[index] + object[key] = source[key] + } + return object + } /** * The base implementation of `_.callback` which supports specifying the @@ -13539,23 +13678,23 @@ module.exports = '1.0.7'; * @param {number} [argCount] The number of arguments to provide to `func`. * @returns {Function} Returns the callback. */ - function baseCallback(func, thisArg, argCount) { - var type = typeof func; - if (type == 'function') { - return thisArg === undefined + function baseCallback (func, thisArg, argCount) { + var type = typeof func + if (type == 'function') { + return thisArg === undefined ? func - : bindCallback(func, thisArg, argCount); - } - if (func == null) { - return identity; - } - if (type == 'object') { - return baseMatches(func); - } - return thisArg === undefined + : bindCallback(func, thisArg, argCount) + } + if (func == null) { + return identity + } + if (type == 'object') { + return baseMatches(func) + } + return thisArg === undefined ? property(func) - : baseMatchesProperty(func, thisArg); - } + : baseMatchesProperty(func, thisArg) + } /** * The base implementation of `_.clone` without support for argument juggling @@ -13571,58 +13710,58 @@ module.exports = '1.0.7'; * @param {Array} [stackB=[]] Associates clones with source counterparts. * @returns {*} Returns the cloned value. */ - function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { - var result; - if (customizer) { - result = object ? customizer(value, key, object) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return arrayCopy(value, result); - } - } else { - var tag = objToString.call(value), - isFunc = tag == funcTag; - - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return baseAssign(result, value); - } - } else { - return cloneableTags[tag] + function baseClone (value, isDeep, customizer, key, object, stackA, stackB) { + var result + if (customizer) { + result = object ? customizer(value, key, object) : customizer(value) + } + if (result !== undefined) { + return result + } + if (!isObject(value)) { + return value + } + var isArr = isArray(value) + if (isArr) { + result = initCloneArray(value) + if (!isDeep) { + return arrayCopy(value, result) + } + } else { + var tag = objToString.call(value), + isFunc = tag == funcTag + + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = initCloneObject(isFunc ? {} : value) + if (!isDeep) { + return baseAssign(result, value) + } + } else { + return cloneableTags[tag] ? initCloneByTag(value, tag, isDeep) - : (object ? value : {}); - } - } + : (object ? value : {}) + } + } // Check for circular references and return its corresponding clone. - stackA || (stackA = []); - stackB || (stackB = []); + stackA || (stackA = []) + stackB || (stackB = []) - var length = stackA.length; - while (length--) { - if (stackA[length] == value) { - return stackB[length]; - } - } + var length = stackA.length + while (length--) { + if (stackA[length] == value) { + return stackB[length] + } + } // Add the source value to the stack of traversed objects and associate it with its clone. - stackA.push(value); - stackB.push(result); + stackA.push(value) + stackB.push(result); // Recursively populate clone (susceptible to call stack limits). - (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { - result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); - }); - return result; - } + (isArr ? arrayEach : baseForOwn)(value, function (subValue, key) { + result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB) + }) + return result + } /** * The base implementation of `_.create` without support for assigning @@ -13632,17 +13771,17 @@ module.exports = '1.0.7'; * @param {Object} prototype The object to inherit from. * @returns {Object} Returns the new object. */ - var baseCreate = (function() { - function object() {} - return function(prototype) { - if (isObject(prototype)) { - object.prototype = prototype; - var result = new object; - object.prototype = undefined; - } - return result || {}; - }; - }()); + var baseCreate = (function () { + function object () {} + return function (prototype) { + if (isObject(prototype)) { + object.prototype = prototype + var result = new object() + object.prototype = undefined + } + return result || {} + } + }()) /** * The base implementation of `_.delay` and `_.defer` which accepts an index @@ -13654,12 +13793,12 @@ module.exports = '1.0.7'; * @param {Object} args The arguments provide to `func`. * @returns {number} Returns the timer id. */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } + function baseDelay (func, wait, args) { + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + return setTimeout(function () { func.apply(undefined, args) }, wait) + } /** * The base implementation of `_.difference` which accepts a single array @@ -13670,43 +13809,42 @@ module.exports = '1.0.7'; * @param {Array} values The values to exclude. * @returns {Array} Returns the new array of filtered values. */ - function baseDifference(array, values) { - var length = array ? array.length : 0, - result = []; - - if (!length) { - return result; - } - var index = -1, - indexOf = getIndexOf(), - isCommon = indexOf == baseIndexOf, - cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null, - valuesLength = values.length; + function baseDifference (array, values) { + var length = array ? array.length : 0, + result = [] - if (cache) { - indexOf = cacheIndexOf; - isCommon = false; - values = cache; - } - outer: + if (!length) { + return result + } + var index = -1, + indexOf = getIndexOf(), + isCommon = indexOf == baseIndexOf, + cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null, + valuesLength = values.length + + if (cache) { + indexOf = cacheIndexOf + isCommon = false + values = cache + } + outer: while (++index < length) { - var value = array[index]; + var value = array[index] if (isCommon && value === value) { - var valuesIndex = valuesLength; + var valuesIndex = valuesLength while (valuesIndex--) { if (values[valuesIndex] === value) { - continue outer; + continue outer } } - result.push(value); - } - else if (indexOf(values, value, 0) < 0) { - result.push(value); + result.push(value) + } else if (indexOf(values, value, 0) < 0) { + result.push(value) } } - return result; - } + return result + } /** * The base implementation of `_.forEach` without support for callback @@ -13717,7 +13855,7 @@ module.exports = '1.0.7'; * @param {Function} iteratee The function invoked per iteration. * @returns {Array|Object|string} Returns `collection`. */ - var baseEach = createBaseEach(baseForOwn); + var baseEach = createBaseEach(baseForOwn) /** * The base implementation of `_.forEachRight` without support for callback @@ -13728,7 +13866,7 @@ module.exports = '1.0.7'; * @param {Function} iteratee The function invoked per iteration. * @returns {Array|Object|string} Returns `collection`. */ - var baseEachRight = createBaseEach(baseForOwnRight, true); + var baseEachRight = createBaseEach(baseForOwnRight, true) /** * The base implementation of `_.every` without support for callback @@ -13740,14 +13878,14 @@ module.exports = '1.0.7'; * @returns {boolean} Returns `true` if all elements pass the predicate check, * else `false` */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } + function baseEvery (collection, predicate) { + var result = true + baseEach(collection, function (value, index, collection) { + result = !!predicate(value, index, collection) + return result + }) + return result + } /** * Gets the extremum value of `collection` invoking `iteratee` for each value @@ -13761,19 +13899,19 @@ module.exports = '1.0.7'; * @param {*} exValue The initial extremum value. * @returns {*} Returns the extremum value. */ - function baseExtremum(collection, iteratee, comparator, exValue) { - var computed = exValue, - result = computed; + function baseExtremum (collection, iteratee, comparator, exValue) { + var computed = exValue, + result = computed - baseEach(collection, function(value, index, collection) { - var current = +iteratee(value, index, collection); - if (comparator(current, computed) || (current === exValue && current === result)) { - computed = current; - result = value; - } - }); - return result; - } + baseEach(collection, function (value, index, collection) { + var current = +iteratee(value, index, collection) + if (comparator(current, computed) || (current === exValue && current === result)) { + computed = current + result = value + } + }) + return result + } /** * The base implementation of `_.fill` without an iteratee call guard. @@ -13785,25 +13923,25 @@ module.exports = '1.0.7'; * @param {number} [end=array.length] The end position. * @returns {Array} Returns `array`. */ - function baseFill(array, value, start, end) { - var length = array.length; + function baseFill (array, value, start, end) { + var length = array.length - start = start == null ? 0 : (+start || 0); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : (+end || 0); - if (end < 0) { - end += length; - } - length = start > end ? 0 : (end >>> 0); - start >>>= 0; + start = start == null ? 0 : (+start || 0) + if (start < 0) { + start = -start > length ? 0 : (length + start) + } + end = (end === undefined || end > length) ? length : (+end || 0) + if (end < 0) { + end += length + } + length = start > end ? 0 : (end >>> 0) + start >>>= 0 - while (start < length) { - array[start++] = value; - } - return array; - } + while (start < length) { + array[start++] = value + } + return array + } /** * The base implementation of `_.filter` without support for callback @@ -13814,15 +13952,15 @@ module.exports = '1.0.7'; * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } + function baseFilter (collection, predicate) { + var result = [] + baseEach(collection, function (value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value) + } + }) + return result + } /** * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`, @@ -13837,16 +13975,16 @@ module.exports = '1.0.7'; * instead of the element itself. * @returns {*} Returns the found element or its key, else `undefined`. */ - function baseFind(collection, predicate, eachFunc, retKey) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = retKey ? key : value; - return false; - } - }); - return result; - } + function baseFind (collection, predicate, eachFunc, retKey) { + var result + eachFunc(collection, function (value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value + return false + } + }) + return result + } /** * The base implementation of `_.flatten` with added support for restricting @@ -13859,28 +13997,28 @@ module.exports = '1.0.7'; * @param {Array} [result=[]] The initial result value. * @returns {Array} Returns the new flattened array. */ - function baseFlatten(array, isDeep, isStrict, result) { - result || (result = []); + function baseFlatten (array, isDeep, isStrict, result) { + result || (result = []) - var index = -1, - length = array.length; + var index = -1, + length = array.length - while (++index < length) { - var value = array[index]; - if (isObjectLike(value) && isArrayLike(value) && + while (++index < length) { + var value = array[index] + if (isObjectLike(value) && isArrayLike(value) && (isStrict || isArray(value) || isArguments(value))) { - if (isDeep) { + if (isDeep) { // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, isDeep, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } + baseFlatten(value, isDeep, isStrict, result) + } else { + arrayPush(result, value) + } + } else if (!isStrict) { + result[result.length] = value + } + } + return result + } /** * The base implementation of `baseForIn` and `baseForOwn` which iterates @@ -13894,7 +14032,7 @@ module.exports = '1.0.7'; * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ - var baseFor = createBaseFor(); + var baseFor = createBaseFor() /** * This function is like `baseFor` except that it iterates over properties @@ -13906,7 +14044,7 @@ module.exports = '1.0.7'; * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ - var baseForRight = createBaseFor(true); + var baseForRight = createBaseFor(true) /** * The base implementation of `_.forIn` without support for callback @@ -13917,9 +14055,9 @@ module.exports = '1.0.7'; * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ - function baseForIn(object, iteratee) { - return baseFor(object, iteratee, keysIn); - } + function baseForIn (object, iteratee) { + return baseFor(object, iteratee, keysIn) + } /** * The base implementation of `_.forOwn` without support for callback @@ -13930,9 +14068,9 @@ module.exports = '1.0.7'; * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ - function baseForOwn(object, iteratee) { - return baseFor(object, iteratee, keys); - } + function baseForOwn (object, iteratee) { + return baseFor(object, iteratee, keys) + } /** * The base implementation of `_.forOwnRight` without support for callback @@ -13943,9 +14081,9 @@ module.exports = '1.0.7'; * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ - function baseForOwnRight(object, iteratee) { - return baseForRight(object, iteratee, keys); - } + function baseForOwnRight (object, iteratee) { + return baseForRight(object, iteratee, keys) + } /** * The base implementation of `_.functions` which creates an array of @@ -13956,20 +14094,20 @@ module.exports = '1.0.7'; * @param {Array} props The property names to filter. * @returns {Array} Returns the new array of filtered property names. */ - function baseFunctions(object, props) { - var index = -1, - length = props.length, - resIndex = -1, - result = []; + function baseFunctions (object, props) { + var index = -1, + length = props.length, + resIndex = -1, + result = [] - while (++index < length) { - var key = props[index]; - if (isFunction(object[key])) { - result[++resIndex] = key; - } - } - return result; - } + while (++index < length) { + var key = props[index] + if (isFunction(object[key])) { + result[++resIndex] = key + } + } + return result + } /** * The base implementation of `get` without support for string paths @@ -13981,21 +14119,21 @@ module.exports = '1.0.7'; * @param {string} [pathKey] The key representation of path. * @returns {*} Returns the resolved value. */ - function baseGet(object, path, pathKey) { - if (object == null) { - return; - } - if (pathKey !== undefined && pathKey in toObject(object)) { - path = [pathKey]; - } - var index = 0, - length = path.length; + function baseGet (object, path, pathKey) { + if (object == null) { + return + } + if (pathKey !== undefined && pathKey in toObject(object)) { + path = [pathKey] + } + var index = 0, + length = path.length - while (object != null && index < length) { - object = object[path[index++]]; - } - return (index && index == length) ? object : undefined; - } + while (object != null && index < length) { + object = object[path[index++]] + } + return (index && index == length) ? object : undefined + } /** * The base implementation of `_.isEqual` without support for `this` binding @@ -14010,15 +14148,15 @@ module.exports = '1.0.7'; * @param {Array} [stackB] Tracks traversed `other` objects. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. */ - function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB); - } + function baseIsEqual (value, other, customizer, isLoose, stackA, stackB) { + if (value === other) { + return true + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB) + } /** * A specialized version of `baseIsEqual` for arrays and objects which performs @@ -14035,68 +14173,68 @@ module.exports = '1.0.7'; * @param {Array} [stackB=[]] Tracks traversed `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ - function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = objToString.call(object); - if (objTag == argsTag) { - objTag = objectTag; - } else if (objTag != objectTag) { - objIsArr = isTypedArray(object); - } - } - if (!othIsArr) { - othTag = objToString.call(other); - if (othTag == argsTag) { - othTag = objectTag; - } else if (othTag != objectTag) { - othIsArr = isTypedArray(other); - } - } - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; + function baseIsEqualDeep (object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag + + if (!objIsArr) { + objTag = objToString.call(object) + if (objTag == argsTag) { + objTag = objectTag + } else if (objTag != objectTag) { + objIsArr = isTypedArray(object) + } + } + if (!othIsArr) { + othTag = objToString.call(other) + if (othTag == argsTag) { + othTag = objectTag + } else if (othTag != objectTag) { + othIsArr = isTypedArray(other) + } + } + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag - if (isSameTag && !(objIsArr || objIsObj)) { - return equalByTag(object, other, objTag); - } - if (!isLoose) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + if (isSameTag && !(objIsArr || objIsObj)) { + return equalByTag(object, other, objTag) + } + if (!isLoose) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__') - if (objIsWrapped || othIsWrapped) { - return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB); - } - } - if (!isSameTag) { - return false; - } + if (objIsWrapped || othIsWrapped) { + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB) + } + } + if (!isSameTag) { + return false + } // Assume cyclic values are equal. // For more information on detecting circular references see https://es5.github.io/#JO. - stackA || (stackA = []); - stackB || (stackB = []); + stackA || (stackA = []) + stackB || (stackB = []) - var length = stackA.length; - while (length--) { - if (stackA[length] == object) { - return stackB[length] == other; - } - } + var length = stackA.length + while (length--) { + if (stackA[length] == object) { + return stackB[length] == other + } + } // Add `object` and `other` to the stack of traversed objects. - stackA.push(object); - stackB.push(other); + stackA.push(object) + stackB.push(other) - var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB); + var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB) - stackA.pop(); - stackB.pop(); + stackA.pop() + stackB.pop() - return result; - } + return result + } /** * The base implementation of `_.isMatch` without support for callback @@ -14108,43 +14246,43 @@ module.exports = '1.0.7'; * @param {Function} [customizer] The function to customize comparing objects. * @returns {boolean} Returns `true` if `object` is a match, else `false`. */ - function baseIsMatch(object, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; + function baseIsMatch (object, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer - if (object == null) { - return !length; - } - object = toObject(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) + if (object == null) { + return !length + } + object = toObject(object) + while (index--) { + var data = matchData[index] + if ((noCustomizer && data[2]) ? data[1] !== object[data[0]] : !(data[0] in object) ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var result = customizer ? customizer(objValue, srcValue, key) : undefined; - if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) { - return false; - } - } - } - return true; - } + return false + } + } + while (++index < length) { + data = matchData[index] + var key = data[0], + objValue = object[key], + srcValue = data[1] + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false + } + } else { + var result = customizer ? customizer(objValue, srcValue, key) : undefined + if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) { + return false + } + } + } + return true + } /** * The base implementation of `_.map` without support for callback shorthands @@ -14155,15 +14293,15 @@ module.exports = '1.0.7'; * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; + function baseMap (collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : [] - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } + baseEach(collection, function (value, key, collection) { + result[++index] = iteratee(value, key, collection) + }) + return result + } /** * The base implementation of `_.matches` which does not clone `source`. @@ -14172,23 +14310,23 @@ module.exports = '1.0.7'; * @param {Object} source The object of property values to match. * @returns {Function} Returns the new function. */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - var key = matchData[0][0], - value = matchData[0][1]; - - return function(object) { - if (object == null) { - return false; - } - return object[key] === value && (value !== undefined || (key in toObject(object))); - }; - } - return function(object) { - return baseIsMatch(object, matchData); - }; - } + function baseMatches (source) { + var matchData = getMatchData(source) + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1] + + return function (object) { + if (object == null) { + return false + } + return object[key] === value && (value !== undefined || (key in toObject(object))) + } + } + return function (object) { + return baseIsMatch(object, matchData) + } + } /** * The base implementation of `_.matchesProperty` which does not clone `srcValue`. @@ -14198,31 +14336,31 @@ module.exports = '1.0.7'; * @param {*} srcValue The value to compare. * @returns {Function} Returns the new function. */ - function baseMatchesProperty(path, srcValue) { - var isArr = isArray(path), - isCommon = isKey(path) && isStrictComparable(srcValue), - pathKey = (path + ''); + function baseMatchesProperty (path, srcValue) { + var isArr = isArray(path), + isCommon = isKey(path) && isStrictComparable(srcValue), + pathKey = (path + '') - path = toPath(path); - return function(object) { - if (object == null) { - return false; - } - var key = pathKey; - object = toObject(object); - if ((isArr || !isCommon) && !(key in object)) { - object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - if (object == null) { - return false; - } - key = last(path); - object = toObject(object); - } - return object[key] === srcValue + path = toPath(path) + return function (object) { + if (object == null) { + return false + } + var key = pathKey + object = toObject(object) + if ((isArr || !isCommon) && !(key in object)) { + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)) + if (object == null) { + return false + } + key = last(path) + object = toObject(object) + } + return object[key] === srcValue ? (srcValue !== undefined || (key in object)) - : baseIsEqual(srcValue, object[key], undefined, true); - }; - } + : baseIsEqual(srcValue, object[key], undefined, true) + } + } /** * The base implementation of `_.merge` without support for argument juggling, @@ -14236,39 +14374,38 @@ module.exports = '1.0.7'; * @param {Array} [stackB=[]] Associates values with source counterparts. * @returns {Object} Returns `object`. */ - function baseMerge(object, source, customizer, stackA, stackB) { - if (!isObject(object)) { - return object; - } - var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)), - props = isSrcArr ? undefined : keys(source); - - arrayEach(props || source, function(srcValue, key) { - if (props) { - key = srcValue; - srcValue = source[key]; - } - if (isObjectLike(srcValue)) { - stackA || (stackA = []); - stackB || (stackB = []); - baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB); - } - else { - var value = object[key], - result = customizer ? customizer(value, srcValue, key, object, source) : undefined, - isCommon = result === undefined; + function baseMerge (object, source, customizer, stackA, stackB) { + if (!isObject(object)) { + return object + } + var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)), + props = isSrcArr ? undefined : keys(source) - if (isCommon) { - result = srcValue; - } - if ((result !== undefined || (isSrcArr && !(key in object))) && + arrayEach(props || source, function (srcValue, key) { + if (props) { + key = srcValue + srcValue = source[key] + } + if (isObjectLike(srcValue)) { + stackA || (stackA = []) + stackB || (stackB = []) + baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB) + } else { + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined + + if (isCommon) { + result = srcValue + } + if ((result !== undefined || (isSrcArr && !(key in object))) && (isCommon || (result === result ? (result !== value) : (value === value)))) { - object[key] = result; - } - } - }); - return object; - } + object[key] = result + } + } + }) + return object + } /** * A specialized version of `baseMerge` for arrays and objects which performs @@ -14285,48 +14422,46 @@ module.exports = '1.0.7'; * @param {Array} [stackB=[]] Associates values with source counterparts. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ - function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) { - var length = stackA.length, - srcValue = source[key]; - - while (length--) { - if (stackA[length] == srcValue) { - object[key] = stackB[length]; - return; - } - } - var value = object[key], - result = customizer ? customizer(value, srcValue, key, object, source) : undefined, - isCommon = result === undefined; + function baseMergeDeep (object, source, key, mergeFunc, customizer, stackA, stackB) { + var length = stackA.length, + srcValue = source[key] - if (isCommon) { - result = srcValue; - if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) { - result = isArray(value) + while (length--) { + if (stackA[length] == srcValue) { + object[key] = stackB[length] + return + } + } + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined + + if (isCommon) { + result = srcValue + if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) { + result = isArray(value) ? value - : (isArrayLike(value) ? arrayCopy(value) : []); - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - result = isArguments(value) + : (isArrayLike(value) ? arrayCopy(value) : []) + } else if (isPlainObject(srcValue) || isArguments(srcValue)) { + result = isArguments(value) ? toPlainObject(value) - : (isPlainObject(value) ? value : {}); - } - else { - isCommon = false; - } - } + : (isPlainObject(value) ? value : {}) + } else { + isCommon = false + } + } // Add the source value to the stack of traversed objects and associate // it with its merged value. - stackA.push(srcValue); - stackB.push(result); + stackA.push(srcValue) + stackB.push(result) - if (isCommon) { + if (isCommon) { // Recursively merge objects and arrays (susceptible to call stack limits). - object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB); - } else if (result === result ? (result !== value) : (value === value)) { - object[key] = result; - } - } + object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB) + } else if (result === result ? (result !== value) : (value === value)) { + object[key] = result + } + } /** * The base implementation of `_.property` without support for deep paths. @@ -14335,11 +14470,11 @@ module.exports = '1.0.7'; * @param {string} key The key of the property to get. * @returns {Function} Returns the new function. */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } + function baseProperty (key) { + return function (object) { + return object == null ? undefined : object[key] + } + } /** * A specialized version of `baseProperty` which supports deep paths. @@ -14348,13 +14483,13 @@ module.exports = '1.0.7'; * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new function. */ - function basePropertyDeep(path) { - var pathKey = (path + ''); - path = toPath(path); - return function(object) { - return baseGet(object, path, pathKey); - }; - } + function basePropertyDeep (path) { + var pathKey = (path + '') + path = toPath(path) + return function (object) { + return baseGet(object, path, pathKey) + } + } /** * The base implementation of `_.pullAt` without support for individual @@ -14365,17 +14500,17 @@ module.exports = '1.0.7'; * @param {number[]} indexes The indexes of elements to remove. * @returns {Array} Returns `array`. */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0; - while (length--) { - var index = indexes[length]; - if (index != previous && isIndex(index)) { - var previous = index; - splice.call(array, index, 1); - } - } - return array; - } + function basePullAt (array, indexes) { + var length = array ? indexes.length : 0 + while (length--) { + var index = indexes[length] + if (index != previous && isIndex(index)) { + var previous = index + splice.call(array, index, 1) + } + } + return array + } /** * The base implementation of `_.random` without support for argument juggling @@ -14386,9 +14521,9 @@ module.exports = '1.0.7'; * @param {number} max The maximum possible value. * @returns {number} Returns the random number. */ - function baseRandom(min, max) { - return min + nativeFloor(nativeRandom() * (max - min + 1)); - } + function baseRandom (min, max) { + return min + nativeFloor(nativeRandom() * (max - min + 1)) + } /** * The base implementation of `_.reduce` and `_.reduceRight` without support @@ -14404,14 +14539,14 @@ module.exports = '1.0.7'; * @param {Function} eachFunc The function to iterate over `collection`. * @returns {*} Returns the accumulated value. */ - function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initFromCollection + function baseReduce (collection, iteratee, accumulator, initFromCollection, eachFunc) { + eachFunc(collection, function (value, index, collection) { + accumulator = initFromCollection ? (initFromCollection = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } + : iteratee(accumulator, value, index, collection) + }) + return accumulator + } /** * The base implementation of `setData` without support for hot loop detection. @@ -14421,10 +14556,10 @@ module.exports = '1.0.7'; * @param {*} data The metadata. * @returns {Function} Returns `func`. */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; + var baseSetData = !metaMap ? identity : function (func, data) { + metaMap.set(func, data) + return func + } /** * The base implementation of `_.slice` without an iteratee call guard. @@ -14435,27 +14570,27 @@ module.exports = '1.0.7'; * @param {number} [end=array.length] The end position. * @returns {Array} Returns the slice of `array`. */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; + function baseSlice (array, start, end) { + var index = -1, + length = array.length - start = start == null ? 0 : (+start || 0); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : (+end || 0); - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; + start = start == null ? 0 : (+start || 0) + if (start < 0) { + start = -start > length ? 0 : (length + start) + } + end = (end === undefined || end > length) ? length : (+end || 0) + if (end < 0) { + end += length + } + length = start > end ? 0 : ((end - start) >>> 0) + start >>>= 0 - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } + var result = Array(length) + while (++index < length) { + result[index] = array[index + start] + } + return result + } /** * The base implementation of `_.some` without support for callback shorthands @@ -14467,15 +14602,15 @@ module.exports = '1.0.7'; * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */ - function baseSome(collection, predicate) { - var result; + function baseSome (collection, predicate) { + var result - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } + baseEach(collection, function (value, index, collection) { + result = predicate(value, index, collection) + return !result + }) + return !!result + } /** * The base implementation of `_.sortBy` which uses `comparer` to define @@ -14487,15 +14622,15 @@ module.exports = '1.0.7'; * @param {Function} comparer The function to define sort order. * @returns {Array} Returns `array`. */ - function baseSortBy(array, comparer) { - var length = array.length; + function baseSortBy (array, comparer) { + var length = array.length - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } + array.sort(comparer) + while (length--) { + array[length] = array[length].value + } + return array + } /** * The base implementation of `_.sortByOrder` without param guards. @@ -14506,21 +14641,21 @@ module.exports = '1.0.7'; * @param {boolean[]} orders The sort orders of `iteratees`. * @returns {Array} Returns the new sorted array. */ - function baseSortByOrder(collection, iteratees, orders) { - var callback = getCallback(), - index = -1; + function baseSortByOrder (collection, iteratees, orders) { + var callback = getCallback(), + index = -1 - iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); }); + iteratees = arrayMap(iteratees, function (iteratee) { return callback(iteratee) }) - var result = baseMap(collection, function(value) { - var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); + var result = baseMap(collection, function (value) { + var criteria = arrayMap(iteratees, function (iteratee) { return iteratee(value) }) + return { 'criteria': criteria, 'index': ++index, 'value': value } + }) - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } + return baseSortBy(result, function (object, other) { + return compareMultiple(object, other, orders) + }) + } /** * The base implementation of `_.sum` without support for callback shorthands @@ -14531,13 +14666,13 @@ module.exports = '1.0.7'; * @param {Function} iteratee The function invoked per iteration. * @returns {number} Returns the sum. */ - function baseSum(collection, iteratee) { - var result = 0; - baseEach(collection, function(value, index, collection) { - result += +iteratee(value, index, collection) || 0; - }); - return result; - } + function baseSum (collection, iteratee) { + var result = 0 + baseEach(collection, function (value, index, collection) { + result += +iteratee(value, index, collection) || 0 + }) + return result + } /** * The base implementation of `_.uniq` without support for callback shorthands @@ -14548,48 +14683,47 @@ module.exports = '1.0.7'; * @param {Function} [iteratee] The function invoked per iteration. * @returns {Array} Returns the new duplicate-value-free array. */ - function baseUniq(array, iteratee) { - var index = -1, - indexOf = getIndexOf(), - length = array.length, - isCommon = indexOf == baseIndexOf, - isLarge = isCommon && length >= LARGE_ARRAY_SIZE, - seen = isLarge ? createCache() : null, - result = []; - - if (seen) { - indexOf = cacheIndexOf; - isCommon = false; - } else { - isLarge = false; - seen = iteratee ? [] : result; - } - outer: + function baseUniq (array, iteratee) { + var index = -1, + indexOf = getIndexOf(), + length = array.length, + isCommon = indexOf == baseIndexOf, + isLarge = isCommon && length >= LARGE_ARRAY_SIZE, + seen = isLarge ? createCache() : null, + result = [] + + if (seen) { + indexOf = cacheIndexOf + isCommon = false + } else { + isLarge = false + seen = iteratee ? [] : result + } + outer: while (++index < length) { var value = array[index], - computed = iteratee ? iteratee(value, index, array) : value; + computed = iteratee ? iteratee(value, index, array) : value if (isCommon && value === value) { - var seenIndex = seen.length; + var seenIndex = seen.length while (seenIndex--) { if (seen[seenIndex] === computed) { - continue outer; + continue outer } } if (iteratee) { - seen.push(computed); + seen.push(computed) } - result.push(value); - } - else if (indexOf(seen, computed, 0) < 0) { + result.push(value) + } else if (indexOf(seen, computed, 0) < 0) { if (iteratee || isLarge) { - seen.push(computed); + seen.push(computed) } - result.push(value); + result.push(value) } } - return result; - } + return result + } /** * The base implementation of `_.values` and `_.valuesIn` which creates an @@ -14601,16 +14735,16 @@ module.exports = '1.0.7'; * @param {Array} props The property names to get values for. * @returns {Object} Returns the array of property values. */ - function baseValues(object, props) { - var index = -1, - length = props.length, - result = Array(length); + function baseValues (object, props) { + var index = -1, + length = props.length, + result = Array(length) - while (++index < length) { - result[index] = object[props[index]]; - } - return result; - } + while (++index < length) { + result[index] = object[props[index]] + } + return result + } /** * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`, @@ -14623,15 +14757,15 @@ module.exports = '1.0.7'; * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Array} Returns the slice of `array`. */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; + function baseWhile (array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1 - while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} - return isDrop + while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} + return isDrop ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); - } + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)) + } /** * The base implementation of `wrapperValue` which returns the result of @@ -14643,20 +14777,20 @@ module.exports = '1.0.7'; * @param {Array} actions Actions to peform to resolve the unwrapped value. * @returns {*} Returns the resolved value. */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - var index = -1, - length = actions.length; + function baseWrapperValue (value, actions) { + var result = value + if (result instanceof LazyWrapper) { + result = result.value() + } + var index = -1, + length = actions.length - while (++index < length) { - var action = actions[index]; - result = action.func.apply(action.thisArg, arrayPush([result], action.args)); - } - return result; - } + while (++index < length) { + var action = actions[index] + result = action.func.apply(action.thisArg, arrayPush([result], action.args)) + } + return result + } /** * Performs a binary search of `array` to determine the index at which `value` @@ -14669,25 +14803,25 @@ module.exports = '1.0.7'; * @returns {number} Returns the index at which `value` should be inserted * into `array`. */ - function binaryIndex(array, value, retHighest) { - var low = 0, - high = array ? array.length : low; + function binaryIndex (array, value, retHighest) { + var low = 0, + high = array ? array.length : low - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; + if (typeof value === 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid] - if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return binaryIndexBy(array, value, identity, retHighest); - } + if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { + low = mid + 1 + } else { + high = mid + } + } + return high + } + return binaryIndexBy(array, value, identity, retHighest) + } /** * This function is like `binaryIndex` except that it invokes `iteratee` for @@ -14702,40 +14836,40 @@ module.exports = '1.0.7'; * @returns {number} Returns the index at which `value` should be inserted * into `array`. */ - function binaryIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array ? array.length : 0, - valIsNaN = value !== value, - valIsNull = value === null, - valIsUndef = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - isDef = computed !== undefined, - isReflexive = computed === computed; - - if (valIsNaN) { - var setLow = isReflexive || retHighest; - } else if (valIsNull) { - setLow = isReflexive && isDef && (retHighest || computed != null); - } else if (valIsUndef) { - setLow = isReflexive && (retHighest || isDef); - } else if (computed == null) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } + function binaryIndexBy (array, value, iteratee, retHighest) { + value = iteratee(value) + + var low = 0, + high = array ? array.length : 0, + valIsNaN = value !== value, + valIsNull = value === null, + valIsUndef = value === undefined + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + isDef = computed !== undefined, + isReflexive = computed === computed + + if (valIsNaN) { + var setLow = isReflexive || retHighest + } else if (valIsNull) { + setLow = isReflexive && isDef && (retHighest || computed != null) + } else if (valIsUndef) { + setLow = isReflexive && (retHighest || isDef) + } else if (computed == null) { + setLow = false + } else { + setLow = retHighest ? (computed <= value) : (computed < value) + } + if (setLow) { + low = mid + 1 + } else { + high = mid + } + } + return nativeMin(high, MAX_ARRAY_INDEX) + } /** * A specialized version of `baseCallback` which only supports `this` binding @@ -14747,31 +14881,31 @@ module.exports = '1.0.7'; * @param {number} [argCount] The number of arguments to provide to `func`. * @returns {Function} Returns the callback. */ - function bindCallback(func, thisArg, argCount) { - if (typeof func != 'function') { - return identity; - } - if (thisArg === undefined) { - return func; - } - switch (argCount) { - case 1: return function(value) { - return func.call(thisArg, value); - }; - case 3: return function(value, index, collection) { - return func.call(thisArg, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(thisArg, accumulator, value, index, collection); - }; - case 5: return function(value, other, key, object, source) { - return func.call(thisArg, value, other, key, object, source); - }; - } - return function() { - return func.apply(thisArg, arguments); - }; - } + function bindCallback (func, thisArg, argCount) { + if (typeof func !== 'function') { + return identity + } + if (thisArg === undefined) { + return func + } + switch (argCount) { + case 1: return function (value) { + return func.call(thisArg, value) + } + case 3: return function (value, index, collection) { + return func.call(thisArg, value, index, collection) + } + case 4: return function (accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection) + } + case 5: return function (value, other, key, object, source) { + return func.call(thisArg, value, other, key, object, source) + } + } + return function () { + return func.apply(thisArg, arguments) + } + } /** * Creates a clone of the given array buffer. @@ -14780,13 +14914,13 @@ module.exports = '1.0.7'; * @param {ArrayBuffer} buffer The array buffer to clone. * @returns {ArrayBuffer} Returns the cloned array buffer. */ - function bufferClone(buffer) { - var result = new ArrayBuffer(buffer.byteLength), - view = new Uint8Array(result); + function bufferClone (buffer) { + var result = new ArrayBuffer(buffer.byteLength), + view = new Uint8Array(result) - view.set(new Uint8Array(buffer)); - return result; - } + view.set(new Uint8Array(buffer)) + return result + } /** * Creates an array that is the composition of partially applied arguments, @@ -14798,25 +14932,25 @@ module.exports = '1.0.7'; * @param {Array} holders The `partials` placeholder indexes. * @returns {Array} Returns the new array of composed arguments. */ - function composeArgs(args, partials, holders) { - var holdersLength = holders.length, - argsIndex = -1, - argsLength = nativeMax(args.length - holdersLength, 0), - leftIndex = -1, - leftLength = partials.length, - result = Array(leftLength + argsLength); + function composeArgs (args, partials, holders) { + var holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + leftIndex = -1, + leftLength = partials.length, + result = Array(leftLength + argsLength) - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - while (argsLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex] + } + while (++argsIndex < holdersLength) { + result[holders[argsIndex]] = args[argsIndex] + } + while (argsLength--) { + result[leftIndex++] = args[argsIndex++] + } + return result + } /** * This function is like `composeArgs` except that the arguments composition @@ -14828,27 +14962,27 @@ module.exports = '1.0.7'; * @param {Array} holders The `partials` placeholder indexes. * @returns {Array} Returns the new array of composed arguments. */ - function composeArgsRight(args, partials, holders) { - var holdersIndex = -1, - holdersLength = holders.length, - argsIndex = -1, - argsLength = nativeMax(args.length - holdersLength, 0), - rightIndex = -1, - rightLength = partials.length, - result = Array(argsLength + rightLength); - - while (++argsIndex < argsLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - return result; - } + function composeArgsRight (args, partials, holders) { + var holdersIndex = -1, + holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + rightIndex = -1, + rightLength = partials.length, + result = Array(argsLength + rightLength) + + while (++argsIndex < argsLength) { + result[argsIndex] = args[argsIndex] + } + var offset = argsIndex + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex] + } + while (++holdersIndex < holdersLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++] + } + return result + } /** * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function. @@ -14858,27 +14992,27 @@ module.exports = '1.0.7'; * @param {Function} [initializer] The function to initialize the accumulator object. * @returns {Function} Returns the new aggregator function. */ - function createAggregator(setter, initializer) { - return function(collection, iteratee, thisArg) { - var result = initializer ? initializer() : {}; - iteratee = getCallback(iteratee, thisArg, 3); + function createAggregator (setter, initializer) { + return function (collection, iteratee, thisArg) { + var result = initializer ? initializer() : {} + iteratee = getCallback(iteratee, thisArg, 3) - if (isArray(collection)) { - var index = -1, - length = collection.length; + if (isArray(collection)) { + var index = -1, + length = collection.length - while (++index < length) { - var value = collection[index]; - setter(result, value, iteratee(value, index, collection), collection); - } - } else { - baseEach(collection, function(value, key, collection) { - setter(result, value, iteratee(value, key, collection), collection); - }); - } - return result; - }; - } + while (++index < length) { + var value = collection[index] + setter(result, value, iteratee(value, index, collection), collection) + } + } else { + baseEach(collection, function (value, key, collection) { + setter(result, value, iteratee(value, key, collection), collection) + }) + } + return result + } + } /** * Creates a `_.assign`, `_.defaults`, or `_.merge` function. @@ -14887,34 +15021,34 @@ module.exports = '1.0.7'; * @param {Function} assigner The function to assign values. * @returns {Function} Returns the new assigner function. */ - function createAssigner(assigner) { - return restParam(function(object, sources) { - var index = -1, - length = object == null ? 0 : sources.length, - customizer = length > 2 ? sources[length - 2] : undefined, - guard = length > 2 ? sources[2] : undefined, - thisArg = length > 1 ? sources[length - 1] : undefined; - - if (typeof customizer == 'function') { - customizer = bindCallback(customizer, thisArg, 5); - length -= 2; - } else { - customizer = typeof thisArg == 'function' ? thisArg : undefined; - length -= (customizer ? 1 : 0); - } - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, customizer); - } - } - return object; - }); - } + function createAssigner (assigner) { + return restParam(function (object, sources) { + var index = -1, + length = object == null ? 0 : sources.length, + customizer = length > 2 ? sources[length - 2] : undefined, + guard = length > 2 ? sources[2] : undefined, + thisArg = length > 1 ? sources[length - 1] : undefined + + if (typeof customizer === 'function') { + customizer = bindCallback(customizer, thisArg, 5) + length -= 2 + } else { + customizer = typeof thisArg === 'function' ? thisArg : undefined + length -= (customizer ? 1 : 0) + } + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer + length = 1 + } + while (++index < length) { + var source = sources[index] + if (source) { + assigner(object, source, customizer) + } + } + return object + }) + } /** * Creates a `baseEach` or `baseEachRight` function. @@ -14924,23 +15058,23 @@ module.exports = '1.0.7'; * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - var length = collection ? getLength(collection) : 0; - if (!isLength(length)) { - return eachFunc(collection, iteratee); - } - var index = fromRight ? length : -1, - iterable = toObject(collection); + function createBaseEach (eachFunc, fromRight) { + return function (collection, iteratee) { + var length = collection ? getLength(collection) : 0 + if (!isLength(length)) { + return eachFunc(collection, iteratee) + } + var index = fromRight ? length : -1, + iterable = toObject(collection) - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break + } + } + return collection + } + } /** * Creates a base function for `_.forIn` or `_.forInRight`. @@ -14949,22 +15083,22 @@ module.exports = '1.0.7'; * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var iterable = toObject(object), - props = keysFunc(object), - length = props.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length)) { - var key = props[index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } + function createBaseFor (fromRight) { + return function (object, iteratee, keysFunc) { + var iterable = toObject(object), + props = keysFunc(object), + length = props.length, + index = fromRight ? length : -1 + + while ((fromRight ? index-- : ++index < length)) { + var key = props[index] + if (iteratee(iterable[key], key, iterable) === false) { + break + } + } + return object + } + } /** * Creates a function that wraps `func` and invokes it with the `this` @@ -14975,15 +15109,15 @@ module.exports = '1.0.7'; * @param {*} [thisArg] The `this` binding of `func`. * @returns {Function} Returns the new bound function. */ - function createBindWrapper(func, thisArg) { - var Ctor = createCtorWrapper(func); + function createBindWrapper (func, thisArg) { + var Ctor = createCtorWrapper(func) - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(thisArg, arguments); - } - return wrapper; - } + function wrapper () { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func + return fn.apply(thisArg, arguments) + } + return wrapper + } /** * Creates a `Set` cache object to optimize linear searches of large arrays. @@ -14992,9 +15126,9 @@ module.exports = '1.0.7'; * @param {Array} [values] The values to cache. * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`. */ - function createCache(values) { - return (nativeCreate && Set) ? new SetCache(values) : null; - } + function createCache (values) { + return (nativeCreate && Set) ? new SetCache(values) : null + } /** * Creates a function that produces compound words out of the words in a @@ -15004,19 +15138,19 @@ module.exports = '1.0.7'; * @param {Function} callback The function to combine each word. * @returns {Function} Returns the new compounder function. */ - function createCompounder(callback) { - return function(string) { - var index = -1, - array = words(deburr(string)), - length = array.length, - result = ''; + function createCompounder (callback) { + return function (string) { + var index = -1, + array = words(deburr(string)), + length = array.length, + result = '' - while (++index < length) { - result = callback(result, array[index], index); - } - return result; - }; - } + while (++index < length) { + result = callback(result, array[index], index) + } + return result + } + } /** * Creates a function that produces an instance of `Ctor` regardless of @@ -15026,30 +15160,30 @@ module.exports = '1.0.7'; * @param {Function} Ctor The constructor to wrap. * @returns {Function} Returns the new wrapped function. */ - function createCtorWrapper(Ctor) { - return function() { + function createCtorWrapper (Ctor) { + return function () { // Use a `switch` statement to work with class constructors. // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); + var args = arguments + switch (args.length) { + case 0: return new Ctor() + case 1: return new Ctor(args[0]) + case 2: return new Ctor(args[0], args[1]) + case 3: return new Ctor(args[0], args[1], args[2]) + case 4: return new Ctor(args[0], args[1], args[2], args[3]) + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]) + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]) + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]) + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args) // Mimic the constructor's `return` behavior. // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } + return isObject(result) ? result : thisBinding + } + } /** * Creates a `_.curry` or `_.curryRight` function. @@ -15058,17 +15192,17 @@ module.exports = '1.0.7'; * @param {boolean} flag The curry bit flag. * @returns {Function} Returns the new curry function. */ - function createCurry(flag) { - function curryFunc(func, arity, guard) { - if (guard && isIterateeCall(func, arity, guard)) { - arity = undefined; - } - var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryFunc.placeholder; - return result; - } - return curryFunc; - } + function createCurry (flag) { + function curryFunc (func, arity, guard) { + if (guard && isIterateeCall(func, arity, guard)) { + arity = undefined + } + var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity) + result.placeholder = curryFunc.placeholder + return result + } + return curryFunc + } /** * Creates a `_.defaults` or `_.defaultsDeep` function. @@ -15078,16 +15212,16 @@ module.exports = '1.0.7'; * @param {Function} customizer The function to customize assigned values. * @returns {Function} Returns the new defaults function. */ - function createDefaults(assigner, customizer) { - return restParam(function(args) { - var object = args[0]; - if (object == null) { - return object; - } - args.push(customizer); - return assigner.apply(undefined, args); - }); - } + function createDefaults (assigner, customizer) { + return restParam(function (args) { + var object = args[0] + if (object == null) { + return object + } + args.push(customizer) + return assigner.apply(undefined, args) + }) + } /** * Creates a `_.max` or `_.min` function. @@ -15097,22 +15231,22 @@ module.exports = '1.0.7'; * @param {*} exValue The initial extremum value. * @returns {Function} Returns the new extremum function. */ - function createExtremum(comparator, exValue) { - return function(collection, iteratee, thisArg) { - if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { - iteratee = undefined; - } - iteratee = getCallback(iteratee, thisArg, 3); - if (iteratee.length == 1) { - collection = isArray(collection) ? collection : toIterable(collection); - var result = arrayExtremum(collection, iteratee, comparator, exValue); - if (!(collection.length && result === exValue)) { - return result; - } - } - return baseExtremum(collection, iteratee, comparator, exValue); - }; - } + function createExtremum (comparator, exValue) { + return function (collection, iteratee, thisArg) { + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined + } + iteratee = getCallback(iteratee, thisArg, 3) + if (iteratee.length == 1) { + collection = isArray(collection) ? collection : toIterable(collection) + var result = arrayExtremum(collection, iteratee, comparator, exValue) + if (!(collection.length && result === exValue)) { + return result + } + } + return baseExtremum(collection, iteratee, comparator, exValue) + } + } /** * Creates a `_.find` or `_.findLast` function. @@ -15122,16 +15256,16 @@ module.exports = '1.0.7'; * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new find function. */ - function createFind(eachFunc, fromRight) { - return function(collection, predicate, thisArg) { - predicate = getCallback(predicate, thisArg, 3); - if (isArray(collection)) { - var index = baseFindIndex(collection, predicate, fromRight); - return index > -1 ? collection[index] : undefined; - } - return baseFind(collection, predicate, eachFunc); - }; - } + function createFind (eachFunc, fromRight) { + return function (collection, predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 3) + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate, fromRight) + return index > -1 ? collection[index] : undefined + } + return baseFind(collection, predicate, eachFunc) + } + } /** * Creates a `_.findIndex` or `_.findLastIndex` function. @@ -15140,15 +15274,15 @@ module.exports = '1.0.7'; * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new find function. */ - function createFindIndex(fromRight) { - return function(array, predicate, thisArg) { - if (!(array && array.length)) { - return -1; - } - predicate = getCallback(predicate, thisArg, 3); - return baseFindIndex(array, predicate, fromRight); - }; - } + function createFindIndex (fromRight) { + return function (array, predicate, thisArg) { + if (!(array && array.length)) { + return -1 + } + predicate = getCallback(predicate, thisArg, 3) + return baseFindIndex(array, predicate, fromRight) + } + } /** * Creates a `_.findKey` or `_.findLastKey` function. @@ -15157,12 +15291,12 @@ module.exports = '1.0.7'; * @param {Function} objectFunc The function to iterate over an object. * @returns {Function} Returns the new find function. */ - function createFindKey(objectFunc) { - return function(object, predicate, thisArg) { - predicate = getCallback(predicate, thisArg, 3); - return baseFind(object, predicate, objectFunc, true); - }; - } + function createFindKey (objectFunc) { + return function (object, predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 3) + return baseFind(object, predicate, objectFunc, true) + } + } /** * Creates a `_.flow` or `_.flowRight` function. @@ -15171,53 +15305,53 @@ module.exports = '1.0.7'; * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new flow function. */ - function createFlow(fromRight) { - return function() { - var wrapper, - length = arguments.length, - index = fromRight ? length : -1, - leftIndex = 0, - funcs = Array(length); - - while ((fromRight ? index-- : ++index < length)) { - var func = funcs[leftIndex++] = arguments[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') { - wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? -1 : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }; - } + function createFlow (fromRight) { + return function () { + var wrapper, + length = arguments.length, + index = fromRight ? length : -1, + leftIndex = 0, + funcs = Array(length) + + while ((fromRight ? index-- : ++index < length)) { + var func = funcs[leftIndex++] = arguments[index] + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') { + wrapper = new LodashWrapper([], true) + } + } + index = wrapper ? -1 : length + while (++index < length) { + func = funcs[index] + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined + + if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]) + } else { + wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func) + } + } + return function () { + var args = arguments, + value = args[0] + + if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) { + return wrapper.plant(value).value() + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value + + while (++index < length) { + result = funcs[index].call(this, result) + } + return result + } + } + } /** * Creates a function for `_.forEach` or `_.forEachRight`. @@ -15227,13 +15361,13 @@ module.exports = '1.0.7'; * @param {Function} eachFunc The function to iterate over a collection. * @returns {Function} Returns the new each function. */ - function createForEach(arrayFunc, eachFunc) { - return function(collection, iteratee, thisArg) { - return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + function createForEach (arrayFunc, eachFunc) { + return function (collection, iteratee, thisArg) { + return (typeof iteratee === 'function' && thisArg === undefined && isArray(collection)) ? arrayFunc(collection, iteratee) - : eachFunc(collection, bindCallback(iteratee, thisArg, 3)); - }; - } + : eachFunc(collection, bindCallback(iteratee, thisArg, 3)) + } + } /** * Creates a function for `_.forIn` or `_.forInRight`. @@ -15242,14 +15376,14 @@ module.exports = '1.0.7'; * @param {Function} objectFunc The function to iterate over an object. * @returns {Function} Returns the new each function. */ - function createForIn(objectFunc) { - return function(object, iteratee, thisArg) { - if (typeof iteratee != 'function' || thisArg !== undefined) { - iteratee = bindCallback(iteratee, thisArg, 3); - } - return objectFunc(object, iteratee, keysIn); - }; - } + function createForIn (objectFunc) { + return function (object, iteratee, thisArg) { + if (typeof iteratee !== 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3) + } + return objectFunc(object, iteratee, keysIn) + } + } /** * Creates a function for `_.forOwn` or `_.forOwnRight`. @@ -15258,14 +15392,14 @@ module.exports = '1.0.7'; * @param {Function} objectFunc The function to iterate over an object. * @returns {Function} Returns the new each function. */ - function createForOwn(objectFunc) { - return function(object, iteratee, thisArg) { - if (typeof iteratee != 'function' || thisArg !== undefined) { - iteratee = bindCallback(iteratee, thisArg, 3); - } - return objectFunc(object, iteratee); - }; - } + function createForOwn (objectFunc) { + return function (object, iteratee, thisArg) { + if (typeof iteratee !== 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3) + } + return objectFunc(object, iteratee) + } + } /** * Creates a function for `_.mapKeys` or `_.mapValues`. @@ -15274,20 +15408,20 @@ module.exports = '1.0.7'; * @param {boolean} [isMapKeys] Specify mapping keys instead of values. * @returns {Function} Returns the new map function. */ - function createObjectMapper(isMapKeys) { - return function(object, iteratee, thisArg) { - var result = {}; - iteratee = getCallback(iteratee, thisArg, 3); - - baseForOwn(object, function(value, key, object) { - var mapped = iteratee(value, key, object); - key = isMapKeys ? mapped : key; - value = isMapKeys ? value : mapped; - result[key] = value; - }); - return result; - }; - } + function createObjectMapper (isMapKeys) { + return function (object, iteratee, thisArg) { + var result = {} + iteratee = getCallback(iteratee, thisArg, 3) + + baseForOwn(object, function (value, key, object) { + var mapped = iteratee(value, key, object) + key = isMapKeys ? mapped : key + value = isMapKeys ? value : mapped + result[key] = value + }) + return result + } + } /** * Creates a function for `_.padLeft` or `_.padRight`. @@ -15296,12 +15430,12 @@ module.exports = '1.0.7'; * @param {boolean} [fromRight] Specify padding from the right. * @returns {Function} Returns the new pad function. */ - function createPadDir(fromRight) { - return function(string, length, chars) { - string = baseToString(string); - return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string); - }; - } + function createPadDir (fromRight) { + return function (string, length, chars) { + string = baseToString(string) + return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string) + } + } /** * Creates a `_.partial` or `_.partialRight` function. @@ -15310,13 +15444,13 @@ module.exports = '1.0.7'; * @param {boolean} flag The partial bit flag. * @returns {Function} Returns the new partial function. */ - function createPartial(flag) { - var partialFunc = restParam(function(func, partials) { - var holders = replaceHolders(partials, partialFunc.placeholder); - return createWrapper(func, flag, undefined, partials, holders); - }); - return partialFunc; - } + function createPartial (flag) { + var partialFunc = restParam(function (func, partials) { + var holders = replaceHolders(partials, partialFunc.placeholder) + return createWrapper(func, flag, undefined, partials, holders) + }) + return partialFunc + } /** * Creates a function for `_.reduce` or `_.reduceRight`. @@ -15326,14 +15460,14 @@ module.exports = '1.0.7'; * @param {Function} eachFunc The function to iterate over a collection. * @returns {Function} Returns the new each function. */ - function createReduce(arrayFunc, eachFunc) { - return function(collection, iteratee, accumulator, thisArg) { - var initFromArray = arguments.length < 3; - return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + function createReduce (arrayFunc, eachFunc) { + return function (collection, iteratee, accumulator, thisArg) { + var initFromArray = arguments.length < 3 + return (typeof iteratee === 'function' && thisArg === undefined && isArray(collection)) ? arrayFunc(collection, iteratee, accumulator, initFromArray) - : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc); - }; - } + : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc) + } + } /** * Creates a function that wraps `func` and invokes it with optional `this` @@ -15352,76 +15486,76 @@ module.exports = '1.0.7'; * @param {number} [arity] The arity of `func`. * @returns {Function} Returns the new wrapped function. */ - function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & ARY_FLAG, - isBind = bitmask & BIND_FLAG, - isBindKey = bitmask & BIND_KEY_FLAG, - isCurry = bitmask & CURRY_FLAG, - isCurryBound = bitmask & CURRY_BOUND_FLAG, - isCurryRight = bitmask & CURRY_RIGHT_FLAG, - Ctor = isBindKey ? undefined : createCtorWrapper(func); + function createHybridWrapper (func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurry = bitmask & CURRY_FLAG, + isCurryBound = bitmask & CURRY_BOUND_FLAG, + isCurryRight = bitmask & CURRY_RIGHT_FLAG, + Ctor = isBindKey ? undefined : createCtorWrapper(func) - function wrapper() { + function wrapper () { // Avoid `arguments` object use disqualifying optimizations by // converting it to an array before providing it to other functions. - var length = arguments.length, - index = length, - args = Array(length); - - while (index--) { - args[index] = arguments[index]; - } - if (partials) { - args = composeArgs(args, partials, holders); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight); - } - if (isCurry || isCurryRight) { - var placeholder = wrapper.placeholder, - argsHolders = replaceHolders(args, placeholder); + var length = arguments.length, + index = length, + args = Array(length) - length -= argsHolders.length; - if (length < arity) { - var newArgPos = argPos ? arrayCopy(argPos) : undefined, - newArity = nativeMax(arity - length, 0), - newsHolders = isCurry ? argsHolders : undefined, - newHoldersRight = isCurry ? undefined : argsHolders, - newPartials = isCurry ? args : undefined, - newPartialsRight = isCurry ? undefined : args; - - bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + while (index--) { + args[index] = arguments[index] + } + if (partials) { + args = composeArgs(args, partials, holders) + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight) + } + if (isCurry || isCurryRight) { + var placeholder = wrapper.placeholder, + argsHolders = replaceHolders(args, placeholder) + + length -= argsHolders.length + if (length < arity) { + var newArgPos = argPos ? arrayCopy(argPos) : undefined, + newArity = nativeMax(arity - length, 0), + newsHolders = isCurry ? argsHolders : undefined, + newHoldersRight = isCurry ? undefined : argsHolders, + newPartials = isCurry ? args : undefined, + newPartialsRight = isCurry ? undefined : args + + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG) + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG) + + if (!isCurryBound) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG) + } + var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity], + result = createHybridWrapper.apply(undefined, newData) - if (!isCurryBound) { - bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); - } - var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity], - result = createHybridWrapper.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData) + } + result.placeholder = placeholder + return result + } + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func - if (isLaziable(func)) { - setData(result, newData); + if (argPos) { + args = reorder(args, argPos) + } + if (isAry && ary < args.length) { + args.length = ary + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtorWrapper(func) + } + return fn.apply(thisBinding, args) + } + return wrapper } - result.placeholder = placeholder; - return result; - } - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - if (argPos) { - args = reorder(args, argPos); - } - if (isAry && ary < args.length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtorWrapper(func); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } /** * Creates the padding required for `string` based on the given `length`. @@ -15433,17 +15567,17 @@ module.exports = '1.0.7'; * @param {string} [chars=' '] The string used as padding. * @returns {string} Returns the pad for `string`. */ - function createPadding(string, length, chars) { - var strLength = string.length; - length = +length; + function createPadding (string, length, chars) { + var strLength = string.length + length = +length - if (strLength >= length || !nativeIsFinite(length)) { - return ''; - } - var padLength = length - strLength; - chars = chars == null ? ' ' : (chars + ''); - return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength); - } + if (strLength >= length || !nativeIsFinite(length)) { + return '' + } + var padLength = length - strLength + chars = chars == null ? ' ' : (chars + '') + return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength) + } /** * Creates a function that wraps `func` and invokes it with the optional `this` @@ -15457,30 +15591,30 @@ module.exports = '1.0.7'; * @param {Array} partials The arguments to prepend to those provided to the new function. * @returns {Function} Returns the new bound function. */ - function createPartialWrapper(func, bitmask, thisArg, partials) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtorWrapper(func); - - function wrapper() { - // Avoid `arguments` object use disqualifying optimizations by - // converting it to an array before providing it `func`. - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength); - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, args); - } - return wrapper; - } + function createPartialWrapper (func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func) + + function wrapper () { + // Avoid `arguments` object use disqualifying optimizations by + // converting it to an array before providing it `func`. + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength) + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex] + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex] + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func + return fn.apply(isBind ? thisArg : this, args) + } + return wrapper + } /** * Creates a `_.ceil`, `_.floor`, or `_.round` function. @@ -15489,17 +15623,17 @@ module.exports = '1.0.7'; * @param {string} methodName The name of the `Math` method to use when rounding. * @returns {Function} Returns the new round function. */ - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - precision = precision === undefined ? 0 : (+precision || 0); - if (precision) { - precision = pow(10, precision); - return func(number * precision) / precision; - } - return func(number); - }; - } + function createRound (methodName) { + var func = Math[methodName] + return function (number, precision) { + precision = precision === undefined ? 0 : (+precision || 0) + if (precision) { + precision = pow(10, precision) + return func(number * precision) / precision + } + return func(number) + } + } /** * Creates a `_.sortedIndex` or `_.sortedLastIndex` function. @@ -15508,14 +15642,14 @@ module.exports = '1.0.7'; * @param {boolean} [retHighest] Specify returning the highest qualified index. * @returns {Function} Returns the new index function. */ - function createSortedIndex(retHighest) { - return function(array, value, iteratee, thisArg) { - var callback = getCallback(iteratee); - return (iteratee == null && callback === baseCallback) + function createSortedIndex (retHighest) { + return function (array, value, iteratee, thisArg) { + var callback = getCallback(iteratee) + return (iteratee == null && callback === baseCallback) ? binaryIndex(array, value, retHighest) - : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest); - }; - } + : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest) + } + } /** * Creates a function that either curries or invokes `func` with optional @@ -15542,45 +15676,45 @@ module.exports = '1.0.7'; * @param {number} [arity] The arity of `func`. * @returns {Function} Returns the new wrapped function. */ - function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - length -= (holders ? holders.length : 0); - if (bitmask & PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; + function createWrapper (func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG + if (!isBindKey && typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + var length = partials ? partials.length : 0 + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG) + partials = holders = undefined + } + length -= (holders ? holders.length : 0) + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func), - newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity]; + partials = holders = undefined + } + var data = isBindKey ? undefined : getData(func), + newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity] - if (data) { - mergeData(newData, data); - bitmask = newData[1]; - arity = newData[9]; - } - newData[9] = arity == null + if (data) { + mergeData(newData, data) + bitmask = newData[1] + arity = newData[9] + } + newData[9] = arity == null ? (isBindKey ? 0 : func.length) - : (nativeMax(arity - length, 0) || 0); + : (nativeMax(arity - length, 0) || 0) - if (bitmask == BIND_FLAG) { - var result = createBindWrapper(newData[0], newData[2]); - } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) { - result = createPartialWrapper.apply(undefined, newData); - } else { - result = createHybridWrapper.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setter(result, newData); - } + if (bitmask == BIND_FLAG) { + var result = createBindWrapper(newData[0], newData[2]) + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) { + result = createPartialWrapper.apply(undefined, newData) + } else { + result = createHybridWrapper.apply(undefined, newData) + } + var setter = data ? baseSetData : setData + return setter(result, newData) + } /** * A specialized version of `baseIsEqualDeep` for arrays with support for @@ -15596,39 +15730,39 @@ module.exports = '1.0.7'; * @param {Array} [stackB] Tracks traversed `other` objects. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. */ - function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) { - var index = -1, - arrLength = array.length, - othLength = other.length; + function equalArrays (array, other, equalFunc, customizer, isLoose, stackA, stackB) { + var index = -1, + arrLength = array.length, + othLength = other.length - if (arrLength != othLength && !(isLoose && othLength > arrLength)) { - return false; - } + if (arrLength != othLength && !(isLoose && othLength > arrLength)) { + return false + } // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index], - result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined; - - if (result !== undefined) { - if (result) { - continue; - } - return false; - } + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index], + result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined + + if (result !== undefined) { + if (result) { + continue + } + return false + } // Recursively compare arrays (susceptible to call stack limits). - if (isLoose) { - if (!arraySome(other, function(othValue) { - return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); - })) { - return false; - } - } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) { - return false; - } - } - return true; - } + if (isLoose) { + if (!arraySome(other, function (othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB) + })) { + return false + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) { + return false + } + } + return true + } /** * A specialized version of `baseIsEqualDeep` for comparing objects of @@ -15643,31 +15777,31 @@ module.exports = '1.0.7'; * @param {string} tag The `toStringTag` of the objects to compare. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ - function equalByTag(object, other, tag) { - switch (tag) { - case boolTag: - case dateTag: + function equalByTag (object, other, tag) { + switch (tag) { + case boolTag: + case dateTag: // Coerce dates and booleans to numbers, dates to milliseconds and booleans // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. - return +object == +other; + return +object == +other - case errorTag: - return object.name == other.name && object.message == other.message; + case errorTag: + return object.name == other.name && object.message == other.message - case numberTag: + case numberTag: // Treat `NaN` vs. `NaN` as equal. - return (object != +object) + return (object != +object) ? other != +other - : object == +other; + : object == +other - case regexpTag: - case stringTag: + case regexpTag: + case stringTag: // Coerce regexes to strings and treat strings primitives and string // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. - return object == (other + ''); - } - return false; - } + return object == (other + '') + } + return false + } /** * A specialized version of `baseIsEqualDeep` for objects with support for @@ -15683,49 +15817,49 @@ module.exports = '1.0.7'; * @param {Array} [stackB] Tracks traversed `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ - function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { - var objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; + function equalObjects (object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length - if (objLength != othLength && !isLoose) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - var skipCtor = isLoose; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key], - result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined; + if (objLength != othLength && !isLoose) { + return false + } + var index = objLength + while (index--) { + var key = objProps[index] + if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { + return false + } + } + var skipCtor = isLoose + while (++index < objLength) { + key = objProps[index] + var objValue = object[key], + othValue = other[key], + result = customizer ? customizer(isLoose ? othValue : objValue, isLoose ? objValue : othValue, key) : undefined // Recursively compare objects (susceptible to call stack limits). - if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) { - return false; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (!skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; + if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) { + return false + } + skipCtor || (skipCtor = key == 'constructor') + } + if (!skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && + if (objCtor != othCtor && ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - return false; - } - } - return true; - } + !(typeof objCtor === 'function' && objCtor instanceof objCtor && + typeof othCtor === 'function' && othCtor instanceof othCtor)) { + return false + } + } + return true + } /** * Gets the appropriate "callback" function. If the `_.callback` method is @@ -15736,11 +15870,11 @@ module.exports = '1.0.7'; * @private * @returns {Function} Returns the chosen function or its result. */ - function getCallback(func, thisArg, argCount) { - var result = lodash.callback || callback; - result = result === callback ? baseCallback : result; - return argCount ? result(func, thisArg, argCount) : result; - } + function getCallback (func, thisArg, argCount) { + var result = lodash.callback || callback + result = result === callback ? baseCallback : result + return argCount ? result(func, thisArg, argCount) : result + } /** * Gets metadata for `func`. @@ -15749,9 +15883,9 @@ module.exports = '1.0.7'; * @param {Function} func The function to query. * @returns {*} Returns the metadata for `func`. */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; + var getData = !metaMap ? noop : function (func) { + return metaMap.get(func) + } /** * Gets the name of `func`. @@ -15760,20 +15894,20 @@ module.exports = '1.0.7'; * @param {Function} func The function to query. * @returns {string} Returns the function name. */ - function getFuncName(func) { - var result = func.name, - array = realNames[result], - length = array ? array.length : 0; + function getFuncName (func) { + var result = func.name, + array = realNames[result], + length = array ? array.length : 0 - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } + while (length--) { + var data = array[length], + otherFunc = data.func + if (otherFunc == null || otherFunc == func) { + return data.name + } + } + return result + } /** * Gets the appropriate "indexOf" function. If the `_.indexOf` method is @@ -15784,11 +15918,11 @@ module.exports = '1.0.7'; * @private * @returns {Function|number} Returns the chosen function or its result. */ - function getIndexOf(collection, target, fromIndex) { - var result = lodash.indexOf || indexOf; - result = result === indexOf ? baseIndexOf : result; - return collection ? result(collection, target, fromIndex) : result; - } + function getIndexOf (collection, target, fromIndex) { + var result = lodash.indexOf || indexOf + result = result === indexOf ? baseIndexOf : result + return collection ? result(collection, target, fromIndex) : result + } /** * Gets the "length" property value of `object`. @@ -15800,7 +15934,7 @@ module.exports = '1.0.7'; * @param {Object} object The object to query. * @returns {*} Returns the "length" value. */ - var getLength = baseProperty('length'); + var getLength = baseProperty('length') /** * Gets the propery names, values, and compare flags of `object`. @@ -15809,15 +15943,15 @@ module.exports = '1.0.7'; * @param {Object} object The object to query. * @returns {Array} Returns the match data of `object`. */ - function getMatchData(object) { - var result = pairs(object), - length = result.length; + function getMatchData (object) { + var result = pairs(object), + length = result.length - while (length--) { - result[length][2] = isStrictComparable(result[length][1]); - } - return result; - } + while (length--) { + result[length][2] = isStrictComparable(result[length][1]) + } + return result + } /** * Gets the native function at `key` of `object`. @@ -15827,10 +15961,10 @@ module.exports = '1.0.7'; * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ - function getNative(object, key) { - var value = object == null ? undefined : object[key]; - return isNative(value) ? value : undefined; - } + function getNative (object, key) { + var value = object == null ? undefined : object[key] + return isNative(value) ? value : undefined + } /** * Gets the view, applying any `transforms` to the `start` and `end` positions. @@ -15842,23 +15976,23 @@ module.exports = '1.0.7'; * @returns {Object} Returns an object containing the `start` and `end` * positions of the view. */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; + function getView (start, end, transforms) { + var index = -1, + length = transforms.length - while (++index < length) { - var data = transforms[index], - size = data.size; + while (++index < length) { + var data = transforms[index], + size = data.size - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; - } + switch (data.type) { + case 'drop': start += size; break + case 'dropRight': end -= size; break + case 'take': end = nativeMin(end, start + size); break + case 'takeRight': start = nativeMax(start, end - size); break + } + } + return { 'start': start, 'end': end } + } /** * Initializes an array clone. @@ -15867,17 +16001,17 @@ module.exports = '1.0.7'; * @param {Array} array The array to clone. * @returns {Array} Returns the initialized clone. */ - function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); + function initCloneArray (array) { + var length = array.length, + result = new array.constructor(length) // Add array properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } + if (length && typeof array[0] === 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index + result.input = array.input + } + return result + } /** * Initializes an object clone. @@ -15886,13 +16020,13 @@ module.exports = '1.0.7'; * @param {Object} object The object to clone. * @returns {Object} Returns the initialized clone. */ - function initCloneObject(object) { - var Ctor = object.constructor; - if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { - Ctor = Object; - } - return new Ctor; - } + function initCloneObject (object) { + var Ctor = object.constructor + if (!(typeof Ctor === 'function' && Ctor instanceof Ctor)) { + Ctor = Object + } + return new Ctor() + } /** * Initializes an object clone based on its `toStringTag`. @@ -15906,32 +16040,32 @@ module.exports = '1.0.7'; * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the initialized clone. */ - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return bufferClone(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - var buffer = object.buffer; - return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - var result = new Ctor(object.source, reFlags.exec(object)); - result.lastIndex = object.lastIndex; - } - return result; - } + function initCloneByTag (object, tag, isDeep) { + var Ctor = object.constructor + switch (tag) { + case arrayBufferTag: + return bufferClone(object) + + case boolTag: + case dateTag: + return new Ctor(+object) + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + var buffer = object.buffer + return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length) + + case numberTag: + case stringTag: + return new Ctor(object) + + case regexpTag: + var result = new Ctor(object.source, reFlags.exec(object)) + result.lastIndex = object.lastIndex + } + return result + } /** * Invokes the method at `path` on `object`. @@ -15942,15 +16076,15 @@ module.exports = '1.0.7'; * @param {Array} args The arguments to invoke the method with. * @returns {*} Returns the result of the invoked method. */ - function invokePath(object, path, args) { - if (object != null && !isKey(path, object)) { - path = toPath(path); - object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - path = last(path); - } - var func = object == null ? object : object[path]; - return func == null ? undefined : func.apply(object, args); - } + function invokePath (object, path, args) { + if (object != null && !isKey(path, object)) { + path = toPath(path) + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)) + path = last(path) + } + var func = object == null ? object : object[path] + return func == null ? undefined : func.apply(object, args) + } /** * Checks if `value` is array-like. @@ -15959,9 +16093,9 @@ module.exports = '1.0.7'; * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. */ - function isArrayLike(value) { - return value != null && isLength(getLength(value)); - } + function isArrayLike (value) { + return value != null && isLength(getLength(value)) + } /** * Checks if `value` is a valid array-like index. @@ -15971,11 +16105,11 @@ module.exports = '1.0.7'; * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ - function isIndex(value, length) { - value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; - length = length == null ? MAX_SAFE_INTEGER : length; - return value > -1 && value % 1 == 0 && value < length; - } + function isIndex (value, length) { + value = (typeof value === 'number' || reIsUint.test(value)) ? +value : -1 + length = length == null ? MAX_SAFE_INTEGER : length + return value > -1 && value % 1 == 0 && value < length + } /** * Checks if the provided arguments are from an iteratee call. @@ -15986,19 +16120,19 @@ module.exports = '1.0.7'; * @param {*} object The potential iteratee object argument. * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' + function isIterateeCall (value, index, object) { + if (!isObject(object)) { + return false + } + var type = typeof index + if (type == 'number' ? (isArrayLike(object) && isIndex(index, object.length)) : (type == 'string' && index in object)) { - var other = object[index]; - return value === value ? (value === other) : (other !== other); - } - return false; - } + var other = object[index] + return value === value ? (value === other) : (other !== other) + } + return false + } /** * Checks if `value` is a property name and not a property path. @@ -16008,17 +16142,17 @@ module.exports = '1.0.7'; * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ - function isKey(value, object) { - var type = typeof value; - if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { - return true; - } - if (isArray(value)) { - return false; - } - var result = !reIsDeepProp.test(value); - return result || (object != null && value in toObject(object)); - } + function isKey (value, object) { + var type = typeof value + if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { + return true + } + if (isArray(value)) { + return false + } + var result = !reIsDeepProp.test(value) + return result || (object != null && value in toObject(object)) + } /** * Checks if `func` has a lazy counterpart. @@ -16027,18 +16161,18 @@ module.exports = '1.0.7'; * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. */ - function isLaziable(func) { - var funcName = getFuncName(func); - if (!(funcName in LazyWrapper.prototype)) { - return false; - } - var other = lodash[funcName]; - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } + function isLaziable (func) { + var funcName = getFuncName(func) + if (!(funcName in LazyWrapper.prototype)) { + return false + } + var other = lodash[funcName] + if (func === other) { + return true + } + var data = getData(other) + return !!data && func === data[0] + } /** * Checks if `value` is a valid array-like length. @@ -16049,9 +16183,9 @@ module.exports = '1.0.7'; * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. */ - function isLength(value) { - return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } + function isLength (value) { + return typeof value === 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER + } /** * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. @@ -16061,9 +16195,9 @@ module.exports = '1.0.7'; * @returns {boolean} Returns `true` if `value` if suitable for strict * equality comparisons, else `false`. */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } + function isStrictComparable (value) { + return value === value && !isObject(value) + } /** * Merges the function metadata of `source` into `data`. @@ -16080,60 +16214,60 @@ module.exports = '1.0.7'; * @param {Array} source The source metadata. * @returns {Array} Returns `data`. */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < ARY_FLAG; + function mergeData (data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < ARY_FLAG - var isCombo = + var isCombo = (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) || (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) || - (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG); + (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG) // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } + if (!(isCommon || isCombo)) { + return data + } // Use source `thisArg` if available. - if (srcBitmask & BIND_FLAG) { - data[2] = source[2]; + if (srcBitmask & BIND_FLAG) { + data[2] = source[2] // Set when currying a bound function. - newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG; - } + newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG + } // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value); - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]); - } + var value = source[3] + if (value) { + var partials = data[3] + data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value) + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]) + } // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value); - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]); - } + value = source[5] + if (value) { + partials = data[5] + data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value) + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]) + } // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = arrayCopy(value); - } + value = source[7] + if (value) { + data[7] = arrayCopy(value) + } // Use source `ary` if it's smaller. - if (srcBitmask & ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]) + } // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } + if (data[9] == null) { + data[9] = source[9] + } // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; + data[0] = source[0] + data[1] = newBitmask - return data; - } + return data + } /** * Used by `_.defaultsDeep` to customize its `_.merge` use. @@ -16143,9 +16277,9 @@ module.exports = '1.0.7'; * @param {*} sourceValue The source object property value. * @returns {*} Returns the value to assign to the destination object. */ - function mergeDefaults(objectValue, sourceValue) { - return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults); - } + function mergeDefaults (objectValue, sourceValue) { + return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults) + } /** * A specialized version of `_.pick` which picks `object` properties specified @@ -16156,21 +16290,21 @@ module.exports = '1.0.7'; * @param {string[]} props The property names to pick. * @returns {Object} Returns the new object. */ - function pickByArray(object, props) { - object = toObject(object); + function pickByArray (object, props) { + object = toObject(object) - var index = -1, - length = props.length, - result = {}; + var index = -1, + length = props.length, + result = {} - while (++index < length) { - var key = props[index]; - if (key in object) { - result[key] = object[key]; - } - } - return result; - } + while (++index < length) { + var key = props[index] + if (key in object) { + result[key] = object[key] + } + } + return result + } /** * A specialized version of `_.pick` which picks `object` properties `predicate` @@ -16181,15 +16315,15 @@ module.exports = '1.0.7'; * @param {Function} predicate The function invoked per iteration. * @returns {Object} Returns the new object. */ - function pickByCallback(object, predicate) { - var result = {}; - baseForIn(object, function(value, key, object) { - if (predicate(value, key, object)) { - result[key] = value; - } - }); - return result; - } + function pickByCallback (object, predicate) { + var result = {} + baseForIn(object, function (value, key, object) { + if (predicate(value, key, object)) { + result[key] = value + } + }) + return result + } /** * Reorder `array` according to the specified indexes where the element at @@ -16201,17 +16335,17 @@ module.exports = '1.0.7'; * @param {Array} indexes The arranged array indexes. * @returns {Array} Returns `array`. */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = arrayCopy(array); + function reorder (array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = arrayCopy(array) - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; - } + while (length--) { + var index = indexes[length] + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined + } + return array + } /** * Sets metadata for `func`. @@ -16226,25 +16360,25 @@ module.exports = '1.0.7'; * @param {*} data The metadata. * @returns {Function} Returns `func`. */ - var setData = (function() { - var count = 0, - lastCalled = 0; + var setData = (function () { + var count = 0, + lastCalled = 0 - return function(key, value) { - var stamp = now(), - remaining = HOT_SPAN - (stamp - lastCalled); + return function (key, value) { + var stamp = now(), + remaining = HOT_SPAN - (stamp - lastCalled) - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return key; - } - } else { - count = 0; - } - return baseSetData(key, value); - }; - }()); + lastCalled = stamp + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return key + } + } else { + count = 0 + } + return baseSetData(key, value) + } + }()) /** * A fallback implementation of `Object.keys` which creates an array of the @@ -16254,25 +16388,25 @@ module.exports = '1.0.7'; * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ - function shimKeys(object) { - var props = keysIn(object), - propsLength = props.length, - length = propsLength && object.length; + function shimKeys (object) { + var props = keysIn(object), + propsLength = props.length, + length = propsLength && object.length - var allowIndexes = !!length && isLength(length) && - (isArray(object) || isArguments(object)); + var allowIndexes = !!length && isLength(length) && + (isArray(object) || isArguments(object)) - var index = -1, - result = []; + var index = -1, + result = [] - while (++index < propsLength) { - var key = props[index]; - if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { - result.push(key); - } - } - return result; - } + while (++index < propsLength) { + var key = props[index] + if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { + result.push(key) + } + } + return result + } /** * Converts `value` to an array-like object if it's not one. @@ -16281,15 +16415,15 @@ module.exports = '1.0.7'; * @param {*} value The value to process. * @returns {Array|Object} Returns the array-like object. */ - function toIterable(value) { - if (value == null) { - return []; - } - if (!isArrayLike(value)) { - return values(value); - } - return isObject(value) ? value : Object(value); - } + function toIterable (value) { + if (value == null) { + return [] + } + if (!isArrayLike(value)) { + return values(value) + } + return isObject(value) ? value : Object(value) + } /** * Converts `value` to an object if it's not one. @@ -16298,9 +16432,9 @@ module.exports = '1.0.7'; * @param {*} value The value to process. * @returns {Object} Returns the object. */ - function toObject(value) { - return isObject(value) ? value : Object(value); - } + function toObject (value) { + return isObject(value) ? value : Object(value) + } /** * Converts `value` to property path array if it's not one. @@ -16309,16 +16443,16 @@ module.exports = '1.0.7'; * @param {*} value The value to process. * @returns {Array} Returns the property path array. */ - function toPath(value) { - if (isArray(value)) { - return value; - } - var result = []; - baseToString(value).replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - } + function toPath (value) { + if (isArray(value)) { + return value + } + var result = [] + baseToString(value).replace(rePropName, function (match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)) + }) + return result + } /** * Creates a clone of `wrapper`. @@ -16327,13 +16461,13 @@ module.exports = '1.0.7'; * @param {Object} wrapper The wrapper to clone. * @returns {Object} Returns the cloned wrapper. */ - function wrapperClone(wrapper) { - return wrapper instanceof LazyWrapper + function wrapperClone (wrapper) { + return wrapper instanceof LazyWrapper ? wrapper.clone() - : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__)); - } + : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__)) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates an array of elements split into groups the length of `size`. @@ -16355,22 +16489,22 @@ module.exports = '1.0.7'; * _.chunk(['a', 'b', 'c', 'd'], 3); * // => [['a', 'b', 'c'], ['d']] */ - function chunk(array, size, guard) { - if (guard ? isIterateeCall(array, size, guard) : size == null) { - size = 1; - } else { - size = nativeMax(nativeFloor(size) || 1, 1); - } - var index = 0, - length = array ? array.length : 0, - resIndex = -1, - result = Array(nativeCeil(length / size)); + function chunk (array, size, guard) { + if (guard ? isIterateeCall(array, size, guard) : size == null) { + size = 1 + } else { + size = nativeMax(nativeFloor(size) || 1, 1) + } + var index = 0, + length = array ? array.length : 0, + resIndex = -1, + result = Array(nativeCeil(length / size)) - while (index < length) { - result[++resIndex] = baseSlice(array, index, (index += size)); - } - return result; - } + while (index < length) { + result[++resIndex] = baseSlice(array, index, (index += size)) + } + return result + } /** * Creates an array with all falsey values removed. The values `false`, `null`, @@ -16386,20 +16520,20 @@ module.exports = '1.0.7'; * _.compact([0, 1, false, 2, '', 3]); * // => [1, 2, 3] */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - resIndex = -1, - result = []; + function compact (array) { + var index = -1, + length = array ? array.length : 0, + resIndex = -1, + result = [] - while (++index < length) { - var value = array[index]; - if (value) { - result[++resIndex] = value; - } - } - return result; - } + while (++index < length) { + var value = array[index] + if (value) { + result[++resIndex] = value + } + } + return result + } /** * Creates an array of unique `array` values not included in the other @@ -16417,11 +16551,11 @@ module.exports = '1.0.7'; * _.difference([1, 2, 3], [4, 2]); * // => [1, 3] */ - var difference = restParam(function(array, values) { - return (isObjectLike(array) && isArrayLike(array)) + var difference = restParam(function (array, values) { + return (isObjectLike(array) && isArrayLike(array)) ? baseDifference(array, baseFlatten(values, false, true)) - : []; - }); + : [] + }) /** * Creates a slice of `array` with `n` elements dropped from the beginning. @@ -16447,16 +16581,16 @@ module.exports = '1.0.7'; * _.drop([1, 2, 3], 0); * // => [1, 2, 3] */ - function drop(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (guard ? isIterateeCall(array, n, guard) : n == null) { - n = 1; - } - return baseSlice(array, n < 0 ? 0 : n); - } + function drop (array, n, guard) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1 + } + return baseSlice(array, n < 0 ? 0 : n) + } /** * Creates a slice of `array` with `n` elements dropped from the end. @@ -16482,17 +16616,17 @@ module.exports = '1.0.7'; * _.dropRight([1, 2, 3], 0); * // => [1, 2, 3] */ - function dropRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (guard ? isIterateeCall(array, n, guard) : n == null) { - n = 1; - } - n = length - (+n || 0); - return baseSlice(array, 0, n < 0 ? 0 : n); - } + function dropRight (array, n, guard) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1 + } + n = length - (+n || 0) + return baseSlice(array, 0, n < 0 ? 0 : n) + } /** * Creates a slice of `array` excluding elements dropped from the end. @@ -16543,11 +16677,11 @@ module.exports = '1.0.7'; * _.pluck(_.dropRightWhile(users, 'active'), 'user'); * // => ['barney', 'fred', 'pebbles'] */ - function dropRightWhile(array, predicate, thisArg) { - return (array && array.length) + function dropRightWhile (array, predicate, thisArg) { + return (array && array.length) ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true) - : []; - } + : [] + } /** * Creates a slice of `array` excluding elements dropped from the beginning. @@ -16598,11 +16732,11 @@ module.exports = '1.0.7'; * _.pluck(_.dropWhile(users, 'active'), 'user'); * // => ['barney', 'fred', 'pebbles'] */ - function dropWhile(array, predicate, thisArg) { - return (array && array.length) + function dropWhile (array, predicate, thisArg) { + return (array && array.length) ? baseWhile(array, getCallback(predicate, thisArg, 3), true) - : []; - } + : [] + } /** * Fills elements of `array` with `value` from `start` up to, but not @@ -16632,17 +16766,17 @@ module.exports = '1.0.7'; * _.fill([4, 6, 8], '*', 1, 2); * // => [4, '*', 8] */ - function fill(array, value, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } + function fill (array, value, start, end) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + if (start && typeof start !== 'number' && isIterateeCall(array, value, start)) { + start = 0 + end = length + } + return baseFill(array, value, start, end) + } /** * This method is like `_.find` except that it returns the index of the first @@ -16692,7 +16826,7 @@ module.exports = '1.0.7'; * _.findIndex(users, 'active'); * // => 2 */ - var findIndex = createFindIndex(); + var findIndex = createFindIndex() /** * This method is like `_.findIndex` except that it iterates over elements @@ -16742,7 +16876,7 @@ module.exports = '1.0.7'; * _.findLastIndex(users, 'active'); * // => 0 */ - var findLastIndex = createFindIndex(true); + var findLastIndex = createFindIndex(true) /** * Gets the first element of `array`. @@ -16761,9 +16895,9 @@ module.exports = '1.0.7'; * _.first([]); * // => undefined */ - function first(array) { - return array ? array[0] : undefined; - } + function first (array) { + return array ? array[0] : undefined + } /** * Flattens a nested array. If `isDeep` is `true` the array is recursively @@ -16785,13 +16919,13 @@ module.exports = '1.0.7'; * _.flatten([1, [2, 3, [4]]], true); * // => [1, 2, 3, 4] */ - function flatten(array, isDeep, guard) { - var length = array ? array.length : 0; - if (guard && isIterateeCall(array, isDeep, guard)) { - isDeep = false; - } - return length ? baseFlatten(array, isDeep) : []; - } + function flatten (array, isDeep, guard) { + var length = array ? array.length : 0 + if (guard && isIterateeCall(array, isDeep, guard)) { + isDeep = false + } + return length ? baseFlatten(array, isDeep) : [] + } /** * Recursively flattens a nested array. @@ -16806,10 +16940,10 @@ module.exports = '1.0.7'; * _.flattenDeep([1, [2, 3, [4]]]); * // => [1, 2, 3, 4] */ - function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, true) : []; - } + function flattenDeep (array) { + var length = array ? array.length : 0 + return length ? baseFlatten(array, true) : [] + } /** * Gets the index at which the first occurrence of `value` is found in `array` @@ -16839,23 +16973,23 @@ module.exports = '1.0.7'; * _.indexOf([1, 1, 2, 2], 2, true); * // => 2 */ - function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - if (typeof fromIndex == 'number') { - fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; - } else if (fromIndex) { - var index = binaryIndex(array, value); - if (index < length && + function indexOf (array, value, fromIndex) { + var length = array ? array.length : 0 + if (!length) { + return -1 + } + if (typeof fromIndex === 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex + } else if (fromIndex) { + var index = binaryIndex(array, value) + if (index < length && (value === value ? (value === array[index]) : (array[index] !== array[index]))) { - return index; - } - return -1; - } - return baseIndexOf(array, value, fromIndex || 0); - } + return index + } + return -1 + } + return baseIndexOf(array, value, fromIndex || 0) + } /** * Gets all but the last element of `array`. @@ -16870,9 +17004,9 @@ module.exports = '1.0.7'; * _.initial([1, 2, 3]); * // => [1, 2] */ - function initial(array) { - return dropRight(array, 1); - } + function initial (array) { + return dropRight(array, 1) + } /** * Creates an array of unique values that are included in all of the provided @@ -16888,42 +17022,42 @@ module.exports = '1.0.7'; * _.intersection([1, 2], [4, 2], [2, 1]); * // => [2] */ - var intersection = restParam(function(arrays) { - var othLength = arrays.length, - othIndex = othLength, - caches = Array(length), - indexOf = getIndexOf(), - isCommon = indexOf == baseIndexOf, - result = []; - - while (othIndex--) { - var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : []; - caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null; - } - var array = arrays[0], - index = -1, - length = array ? array.length : 0, - seen = caches[0]; + var intersection = restParam(function (arrays) { + var othLength = arrays.length, + othIndex = othLength, + caches = Array(length), + indexOf = getIndexOf(), + isCommon = indexOf == baseIndexOf, + result = [] + + while (othIndex--) { + var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [] + caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null + } + var array = arrays[0], + index = -1, + length = array ? array.length : 0, + seen = caches[0] - outer: + outer: while (++index < length) { - value = array[index]; + value = array[index] if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) { - var othIndex = othLength; + var othIndex = othLength while (--othIndex) { - var cache = caches[othIndex]; + var cache = caches[othIndex] if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) { - continue outer; + continue outer } } if (seen) { - seen.push(value); + seen.push(value) } - result.push(value); + result.push(value) } } - return result; - }); + return result + }) /** * Gets the last element of `array`. @@ -16938,10 +17072,10 @@ module.exports = '1.0.7'; * _.last([1, 2, 3]); * // => 3 */ - function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; - } + function last (array) { + var length = array ? array.length : 0 + return length ? array[length - 1] : undefined + } /** * This method is like `_.indexOf` except that it iterates over elements of @@ -16968,32 +17102,32 @@ module.exports = '1.0.7'; * _.lastIndexOf([1, 1, 2, 2], 2, true); * // => 3 */ - function lastIndexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length; - if (typeof fromIndex == 'number') { - index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1; - } else if (fromIndex) { - index = binaryIndex(array, value, true) - 1; - var other = array[index]; - if (value === value ? (value === other) : (other !== other)) { - return index; - } - return -1; - } - if (value !== value) { - return indexOfNaN(array, index, true); - } - while (index--) { - if (array[index] === value) { - return index; - } - } - return -1; - } + function lastIndexOf (array, value, fromIndex) { + var length = array ? array.length : 0 + if (!length) { + return -1 + } + var index = length + if (typeof fromIndex === 'number') { + index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1 + } else if (fromIndex) { + index = binaryIndex(array, value, true) - 1 + var other = array[index] + if (value === value ? (value === other) : (other !== other)) { + return index + } + return -1 + } + if (value !== value) { + return indexOfNaN(array, index, true) + } + while (index--) { + if (array[index] === value) { + return index + } + } + return -1 + } /** * Removes all provided values from `array` using @@ -17016,27 +17150,27 @@ module.exports = '1.0.7'; * console.log(array); * // => [1, 1] */ - function pull() { - var args = arguments, - array = args[0]; + function pull () { + var args = arguments, + array = args[0] - if (!(array && array.length)) { - return array; - } - var index = 0, - indexOf = getIndexOf(), - length = args.length; + if (!(array && array.length)) { + return array + } + var index = 0, + indexOf = getIndexOf(), + length = args.length - while (++index < length) { - var fromIndex = 0, - value = args[index]; + while (++index < length) { + var fromIndex = 0, + value = args[index] - while ((fromIndex = indexOf(array, value, fromIndex)) > -1) { - splice.call(array, fromIndex, 1); - } - } - return array; - } + while ((fromIndex = indexOf(array, value, fromIndex)) > -1) { + splice.call(array, fromIndex, 1) + } + } + return array + } /** * Removes elements from `array` corresponding to the given indexes and returns @@ -17063,13 +17197,13 @@ module.exports = '1.0.7'; * console.log(evens); * // => [10, 20] */ - var pullAt = restParam(function(array, indexes) { - indexes = baseFlatten(indexes); + var pullAt = restParam(function (array, indexes) { + indexes = baseFlatten(indexes) - var result = baseAt(array, indexes); - basePullAt(array, indexes.sort(baseCompareAscending)); - return result; - }); + var result = baseAt(array, indexes) + basePullAt(array, indexes.sort(baseCompareAscending)) + return result + }) /** * Removes all elements from `array` that `predicate` returns truthy for @@ -17110,26 +17244,26 @@ module.exports = '1.0.7'; * console.log(evens); * // => [2, 4] */ - function remove(array, predicate, thisArg) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, - indexes = [], - length = array.length; - - predicate = getCallback(predicate, thisArg, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } + function remove (array, predicate, thisArg) { + var result = [] + if (!(array && array.length)) { + return result + } + var index = -1, + indexes = [], + length = array.length + + predicate = getCallback(predicate, thisArg, 3) + while (++index < length) { + var value = array[index] + if (predicate(value, index, array)) { + result.push(value) + indexes.push(index) + } + } + basePullAt(array, indexes) + return result + } /** * Gets all but the first element of `array`. @@ -17145,9 +17279,9 @@ module.exports = '1.0.7'; * _.rest([1, 2, 3]); * // => [2, 3] */ - function rest(array) { - return drop(array, 1); - } + function rest (array) { + return drop(array, 1) + } /** * Creates a slice of `array` from `start` up to, but not including, `end`. @@ -17163,17 +17297,17 @@ module.exports = '1.0.7'; * @param {number} [end=array.length] The end position. * @returns {Array} Returns the slice of `array`. */ - function slice(array, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - return baseSlice(array, start, end); - } + function slice (array, start, end) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + if (end && typeof end !== 'number' && isIterateeCall(array, start, end)) { + start = 0 + end = length + } + return baseSlice(array, start, end) + } /** * Uses a binary search to determine the lowest index at which `value` should @@ -17223,7 +17357,7 @@ module.exports = '1.0.7'; * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); * // => 1 */ - var sortedIndex = createSortedIndex(); + var sortedIndex = createSortedIndex() /** * This method is like `_.sortedIndex` except that it returns the highest @@ -17245,7 +17379,7 @@ module.exports = '1.0.7'; * _.sortedLastIndex([4, 4, 5, 5], 5); * // => 4 */ - var sortedLastIndex = createSortedIndex(true); + var sortedLastIndex = createSortedIndex(true) /** * Creates a slice of `array` with `n` elements taken from the beginning. @@ -17271,16 +17405,16 @@ module.exports = '1.0.7'; * _.take([1, 2, 3], 0); * // => [] */ - function take(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (guard ? isIterateeCall(array, n, guard) : n == null) { - n = 1; - } - return baseSlice(array, 0, n < 0 ? 0 : n); - } + function take (array, n, guard) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1 + } + return baseSlice(array, 0, n < 0 ? 0 : n) + } /** * Creates a slice of `array` with `n` elements taken from the end. @@ -17306,17 +17440,17 @@ module.exports = '1.0.7'; * _.takeRight([1, 2, 3], 0); * // => [] */ - function takeRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (guard ? isIterateeCall(array, n, guard) : n == null) { - n = 1; - } - n = length - (+n || 0); - return baseSlice(array, n < 0 ? 0 : n); - } + function takeRight (array, n, guard) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1 + } + n = length - (+n || 0) + return baseSlice(array, n < 0 ? 0 : n) + } /** * Creates a slice of `array` with elements taken from the end. Elements are @@ -17367,11 +17501,11 @@ module.exports = '1.0.7'; * _.pluck(_.takeRightWhile(users, 'active'), 'user'); * // => [] */ - function takeRightWhile(array, predicate, thisArg) { - return (array && array.length) + function takeRightWhile (array, predicate, thisArg) { + return (array && array.length) ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true) - : []; - } + : [] + } /** * Creates a slice of `array` with elements taken from the beginning. Elements @@ -17422,11 +17556,11 @@ module.exports = '1.0.7'; * _.pluck(_.takeWhile(users, 'active'), 'user'); * // => [] */ - function takeWhile(array, predicate, thisArg) { - return (array && array.length) + function takeWhile (array, predicate, thisArg) { + return (array && array.length) ? baseWhile(array, getCallback(predicate, thisArg, 3)) - : []; - } + : [] + } /** * Creates an array of unique values, in order, from all of the provided arrays @@ -17443,9 +17577,9 @@ module.exports = '1.0.7'; * _.union([1, 2], [4, 2], [2, 1]); * // => [1, 2, 4] */ - var union = restParam(function(arrays) { - return baseUniq(baseFlatten(arrays, false, true)); - }); + var union = restParam(function (arrays) { + return baseUniq(baseFlatten(arrays, false, true)) + }) /** * Creates a duplicate-free version of an array, using @@ -17496,24 +17630,24 @@ module.exports = '1.0.7'; * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); * // => [{ 'x': 1 }, { 'x': 2 }] */ - function uniq(array, isSorted, iteratee, thisArg) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (isSorted != null && typeof isSorted != 'boolean') { - thisArg = iteratee; - iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted; - isSorted = false; - } - var callback = getCallback(); - if (!(iteratee == null && callback === baseCallback)) { - iteratee = callback(iteratee, thisArg, 3); - } - return (isSorted && getIndexOf() == baseIndexOf) + function uniq (array, isSorted, iteratee, thisArg) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + if (isSorted != null && typeof isSorted !== 'boolean') { + thisArg = iteratee + iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted + isSorted = false + } + var callback = getCallback() + if (!(iteratee == null && callback === baseCallback)) { + iteratee = callback(iteratee, thisArg, 3) + } + return (isSorted && getIndexOf() == baseIndexOf) ? sortedUniq(array, iteratee) - : baseUniq(array, iteratee); - } + : baseUniq(array, iteratee) + } /** * This method is like `_.zip` except that it accepts an array of grouped @@ -17533,25 +17667,25 @@ module.exports = '1.0.7'; * _.unzip(zipped); * // => [['fred', 'barney'], [30, 40], [true, false]] */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var index = -1, - length = 0; + function unzip (array) { + if (!(array && array.length)) { + return [] + } + var index = -1, + length = 0 - array = arrayFilter(array, function(group) { - if (isArrayLike(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - var result = Array(length); - while (++index < length) { - result[index] = arrayMap(array, baseProperty(index)); - } - return result; - } + array = arrayFilter(array, function (group) { + if (isArrayLike(group)) { + length = nativeMax(group.length, length) + return true + } + }) + var result = Array(length) + while (++index < length) { + result[index] = arrayMap(array, baseProperty(index)) + } + return result + } /** * This method is like `_.unzip` except that it accepts an iteratee to specify @@ -17573,20 +17707,20 @@ module.exports = '1.0.7'; * _.unzipWith(zipped, _.add); * // => [3, 30, 300] */ - function unzipWith(array, iteratee, thisArg) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - iteratee = bindCallback(iteratee, thisArg, 4); - return arrayMap(result, function(group) { - return arrayReduce(group, iteratee, undefined, true); - }); - } + function unzipWith (array, iteratee, thisArg) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + var result = unzip(array) + if (iteratee == null) { + return result + } + iteratee = bindCallback(iteratee, thisArg, 4) + return arrayMap(result, function (group) { + return arrayReduce(group, iteratee, undefined, true) + }) + } /** * Creates an array excluding all provided values using @@ -17604,11 +17738,11 @@ module.exports = '1.0.7'; * _.without([1, 2, 1, 3], 1, 2); * // => [3] */ - var without = restParam(function(array, values) { - return isArrayLike(array) + var without = restParam(function (array, values) { + return isArrayLike(array) ? baseDifference(array, values) - : []; - }); + : [] + }) /** * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) @@ -17624,20 +17758,20 @@ module.exports = '1.0.7'; * _.xor([1, 2], [4, 2]); * // => [1, 4] */ - function xor() { - var index = -1, - length = arguments.length; + function xor () { + var index = -1, + length = arguments.length - while (++index < length) { - var array = arguments[index]; - if (isArrayLike(array)) { - var result = result + while (++index < length) { + var array = arguments[index] + if (isArrayLike(array)) { + var result = result ? arrayPush(baseDifference(result, array), baseDifference(array, result)) - : array; - } - } - return result ? baseUniq(result) : []; - } + : array + } + } + return result ? baseUniq(result) : [] + } /** * Creates an array of grouped elements, the first of which contains the first @@ -17654,7 +17788,7 @@ module.exports = '1.0.7'; * _.zip(['fred', 'barney'], [30, 40], [true, false]); * // => [['fred', 30, true], ['barney', 40, false]] */ - var zip = restParam(unzip); + var zip = restParam(unzip) /** * The inverse of `_.pairs`; this method returns an object composed from arrays @@ -17677,24 +17811,24 @@ module.exports = '1.0.7'; * _.zipObject(['fred', 'barney'], [30, 40]); * // => { 'fred': 30, 'barney': 40 } */ - function zipObject(props, values) { - var index = -1, - length = props ? props.length : 0, - result = {}; + function zipObject (props, values) { + var index = -1, + length = props ? props.length : 0, + result = {} - if (length && !values && !isArray(props[0])) { - values = []; - } - while (++index < length) { - var key = props[index]; - if (values) { - result[key] = values[index]; - } else if (key) { - result[key[0]] = key[1]; - } - } - return result; - } + if (length && !values && !isArray(props[0])) { + values = [] + } + while (++index < length) { + var key = props[index] + if (values) { + result[key] = values[index] + } else if (key) { + result[key[0]] = key[1] + } + } + return result + } /** * This method is like `_.zip` except that it accepts an iteratee to specify @@ -17713,22 +17847,22 @@ module.exports = '1.0.7'; * _.zipWith([1, 2], [10, 20], [100, 200], _.add); * // => [111, 222] */ - var zipWith = restParam(function(arrays) { - var length = arrays.length, - iteratee = length > 2 ? arrays[length - 2] : undefined, - thisArg = length > 1 ? arrays[length - 1] : undefined; + var zipWith = restParam(function (arrays) { + var length = arrays.length, + iteratee = length > 2 ? arrays[length - 2] : undefined, + thisArg = length > 1 ? arrays[length - 1] : undefined - if (length > 2 && typeof iteratee == 'function') { - length -= 2; - } else { - iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined; - thisArg = undefined; - } - arrays.length = length; - return unzipWith(arrays, iteratee, thisArg); - }); + if (length > 2 && typeof iteratee === 'function') { + length -= 2 + } else { + iteratee = (length > 1 && typeof thisArg === 'function') ? (--length, thisArg) : undefined + thisArg = undefined + } + arrays.length = length + return unzipWith(arrays, iteratee, thisArg) + }) - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a `lodash` object that wraps `value` with explicit method @@ -17756,11 +17890,11 @@ module.exports = '1.0.7'; * .value(); * // => 'pebbles is 1' */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } + function chain (value) { + var result = lodash(value) + result.__chain__ = true + return result + } /** * This method invokes `interceptor` and returns `value`. The interceptor is @@ -17785,10 +17919,10 @@ module.exports = '1.0.7'; * .value(); * // => [2, 1] */ - function tap(value, interceptor, thisArg) { - interceptor.call(thisArg, value); - return value; - } + function tap (value, interceptor, thisArg) { + interceptor.call(thisArg, value) + return value + } /** * This method is like `_.tap` except that it returns the result of `interceptor`. @@ -17811,9 +17945,9 @@ module.exports = '1.0.7'; * .value(); * // => ['abc'] */ - function thru(value, interceptor, thisArg) { - return interceptor.call(thisArg, value); - } + function thru (value, interceptor, thisArg) { + return interceptor.call(thisArg, value) + } /** * Enables explicit method chaining on the wrapper object. @@ -17840,9 +17974,9 @@ module.exports = '1.0.7'; * .value(); * // => { 'user': 'barney' } */ - function wrapperChain() { - return chain(this); - } + function wrapperChain () { + return chain(this) + } /** * Executes the chained sequence and returns the wrapped result. @@ -17869,9 +18003,9 @@ module.exports = '1.0.7'; * console.log(array); * // => [1, 2, 3] */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } + function wrapperCommit () { + return new LodashWrapper(this.value(), this.__chain__) + } /** * Creates a new array joining a wrapped array with any additional arrays @@ -17893,12 +18027,12 @@ module.exports = '1.0.7'; * console.log(array); * // => [1] */ - var wrapperConcat = restParam(function(values) { - values = baseFlatten(values); - return this.thru(function(array) { - return arrayConcat(isArray(array) ? array : [toObject(array)], values); - }); - }); + var wrapperConcat = restParam(function (values) { + values = baseFlatten(values) + return this.thru(function (array) { + return arrayConcat(isArray(array) ? array : [toObject(array)], values) + }) + }) /** * Creates a clone of the chained sequence planting `value` as the wrapped value. @@ -17923,23 +18057,23 @@ module.exports = '1.0.7'; * wrapped.value(); * // => [1, 4] */ - function wrapperPlant(value) { - var result, - parent = this; + function wrapperPlant (value) { + var result, + parent = this - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent) + if (result) { + previous.__wrapped__ = clone + } else { + result = clone + } + var previous = clone + parent = parent.__wrapped__ + } + previous.__wrapped__ = value + return result + } /** * Reverses the wrapped array so the first element becomes the last, the @@ -17961,23 +18095,23 @@ module.exports = '1.0.7'; * console.log(array); * // => [3, 2, 1] */ - function wrapperReverse() { - var value = this.__wrapped__; + function wrapperReverse () { + var value = this.__wrapped__ - var interceptor = function(value) { - return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse(); - }; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(interceptor); - } + var interceptor = function (value) { + return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse() + } + if (value instanceof LazyWrapper) { + var wrapped = value + if (this.__actions__.length) { + wrapped = new LazyWrapper(this) + } + wrapped = wrapped.reverse() + wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }) + return new LodashWrapper(wrapped, this.__chain__) + } + return this.thru(interceptor) + } /** * Produces the result of coercing the unwrapped value to a string. @@ -17991,9 +18125,9 @@ module.exports = '1.0.7'; * _([1, 2, 3]).toString(); * // => '1,2,3' */ - function wrapperToString() { - return (this.value() + ''); - } + function wrapperToString () { + return (this.value() + '') + } /** * Executes the chained sequence to extract the unwrapped value. @@ -18008,11 +18142,11 @@ module.exports = '1.0.7'; * _([1, 2, 3]).value(); * // => [1, 2, 3] */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } + function wrapperValue () { + return baseWrapperValue(this.__wrapped__, this.__actions__) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates an array of elements corresponding to the given keys, or indexes, @@ -18034,9 +18168,9 @@ module.exports = '1.0.7'; * _.at(['barney', 'fred', 'pebbles'], 0, 2); * // => ['barney', 'pebbles'] */ - var at = restParam(function(collection, props) { - return baseAt(collection, baseFlatten(props)); - }); + var at = restParam(function (collection, props) { + return baseAt(collection, baseFlatten(props)) + }) /** * Creates an object composed of keys generated from the results of running @@ -18079,9 +18213,9 @@ module.exports = '1.0.7'; * _.countBy(['one', 'two', 'three'], 'length'); * // => { '3': 2, '5': 1 } */ - var countBy = createAggregator(function(result, value, key) { - hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); - }); + var countBy = createAggregator(function (result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1) + }) /** * Checks if `predicate` returns truthy for **all** elements of `collection`. @@ -18131,16 +18265,16 @@ module.exports = '1.0.7'; * _.every(users, 'active'); * // => false */ - function every(collection, predicate, thisArg) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (thisArg && isIterateeCall(collection, predicate, thisArg)) { - predicate = undefined; - } - if (typeof predicate != 'function' || thisArg !== undefined) { - predicate = getCallback(predicate, thisArg, 3); - } - return func(collection, predicate); - } + function every (collection, predicate, thisArg) { + var func = isArray(collection) ? arrayEvery : baseEvery + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined + } + if (typeof predicate !== 'function' || thisArg !== undefined) { + predicate = getCallback(predicate, thisArg, 3) + } + return func(collection, predicate) + } /** * Iterates over elements of `collection`, returning an array of all elements @@ -18191,11 +18325,11 @@ module.exports = '1.0.7'; * _.pluck(_.filter(users, 'active'), 'user'); * // => ['barney'] */ - function filter(collection, predicate, thisArg) { - var func = isArray(collection) ? arrayFilter : baseFilter; - predicate = getCallback(predicate, thisArg, 3); - return func(collection, predicate); - } + function filter (collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter + predicate = getCallback(predicate, thisArg, 3) + return func(collection, predicate) + } /** * Iterates over elements of `collection`, returning the first element @@ -18247,7 +18381,7 @@ module.exports = '1.0.7'; * _.result(_.find(users, 'active'), 'user'); * // => 'barney' */ - var find = createFind(baseEach); + var find = createFind(baseEach) /** * This method is like `_.find` except that it iterates over elements of @@ -18268,7 +18402,7 @@ module.exports = '1.0.7'; * }); * // => 3 */ - var findLast = createFind(baseEachRight, true); + var findLast = createFind(baseEachRight, true) /** * Performs a deep comparison between each element in `collection` and the @@ -18299,9 +18433,9 @@ module.exports = '1.0.7'; * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user'); * // => 'fred' */ - function findWhere(collection, source) { - return find(collection, baseMatches(source)); - } + function findWhere (collection, source) { + return find(collection, baseMatches(source)) + } /** * Iterates over elements of `collection` invoking `iteratee` for each element. @@ -18333,7 +18467,7 @@ module.exports = '1.0.7'; * }); * // => logs each value-key pair and returns the object (iteration order is not guaranteed) */ - var forEach = createForEach(arrayEach, baseEach); + var forEach = createForEach(arrayEach, baseEach) /** * This method is like `_.forEach` except that it iterates over elements of @@ -18354,7 +18488,7 @@ module.exports = '1.0.7'; * }).value(); * // => logs each value from right to left and returns the array */ - var forEachRight = createForEach(arrayEachRight, baseEachRight); + var forEachRight = createForEach(arrayEachRight, baseEachRight) /** * Creates an object composed of keys generated from the results of running @@ -18398,13 +18532,13 @@ module.exports = '1.0.7'; * _.groupBy(['one', 'two', 'three'], 'length'); * // => { '3': ['one', 'two'], '5': ['three'] } */ - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - result[key] = [value]; - } - }); + var groupBy = createAggregator(function (result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value) + } else { + result[key] = [value] + } + }) /** * Checks if `value` is in `collection` using @@ -18435,21 +18569,21 @@ module.exports = '1.0.7'; * _.includes('pebbles', 'eb'); * // => true */ - function includes(collection, target, fromIndex, guard) { - var length = collection ? getLength(collection) : 0; - if (!isLength(length)) { - collection = values(collection); - length = collection.length; - } - if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { - fromIndex = 0; - } else { - fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0); - } - return (typeof collection == 'string' || !isArray(collection) && isString(collection)) + function includes (collection, target, fromIndex, guard) { + var length = collection ? getLength(collection) : 0 + if (!isLength(length)) { + collection = values(collection) + length = collection.length + } + if (typeof fromIndex !== 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { + fromIndex = 0 + } else { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0) + } + return (typeof collection === 'string' || !isArray(collection) && isString(collection)) ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1) - : (!!length && getIndexOf(collection, target, fromIndex) > -1); - } + : (!!length && getIndexOf(collection, target, fromIndex) > -1) + } /** * Creates an object composed of keys generated from the results of running @@ -18497,9 +18631,9 @@ module.exports = '1.0.7'; * }, String); * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } */ - var indexBy = createAggregator(function(result, value, key) { - result[key] = value; - }); + var indexBy = createAggregator(function (result, value, key) { + result[key] = value + }) /** * Invokes the method at `path` of each element in `collection`, returning @@ -18523,18 +18657,18 @@ module.exports = '1.0.7'; * _.invoke([123, 456], String.prototype.split, ''); * // => [['1', '2', '3'], ['4', '5', '6']] */ - var invoke = restParam(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - isProp = isKey(path), - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); - result[++index] = func ? func.apply(value, args) : invokePath(value, path, args); - }); - return result; - }); + var invoke = restParam(function (collection, path, args) { + var index = -1, + isFunc = typeof path === 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : [] + + baseEach(collection, function (value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined) + result[++index] = func ? func.apply(value, args) : invokePath(value, path, args) + }) + return result + }) /** * Creates an array of values by running each element in `collection` through @@ -18592,11 +18726,11 @@ module.exports = '1.0.7'; * _.map(users, 'user'); * // => ['barney', 'fred'] */ - function map(collection, iteratee, thisArg) { - var func = isArray(collection) ? arrayMap : baseMap; - iteratee = getCallback(iteratee, thisArg, 3); - return func(collection, iteratee); - } + function map (collection, iteratee, thisArg) { + var func = isArray(collection) ? arrayMap : baseMap + iteratee = getCallback(iteratee, thisArg, 3) + return func(collection, iteratee) + } /** * Creates an array of elements split into two groups, the first of which @@ -18657,9 +18791,9 @@ module.exports = '1.0.7'; * _.map(_.partition(users, 'active'), mapper); * // => [['fred'], ['barney', 'pebbles']] */ - var partition = createAggregator(function(result, value, key) { - result[key ? 0 : 1].push(value); - }, function() { return [[], []]; }); + var partition = createAggregator(function (result, value, key) { + result[key ? 0 : 1].push(value) + }, function () { return [[], []] }) /** * Gets the property value of `path` from all elements in `collection`. @@ -18684,9 +18818,9 @@ module.exports = '1.0.7'; * _.pluck(userIndex, 'age'); * // => [36, 40] (iteration order is not guaranteed) */ - function pluck(collection, path) { - return map(collection, property(path)); - } + function pluck (collection, path) { + return map(collection, property(path)) + } /** * Reduces `collection` to a value which is the accumulated result of running @@ -18725,7 +18859,7 @@ module.exports = '1.0.7'; * }, {}); * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed) */ - var reduce = createReduce(arrayReduce, baseEach); + var reduce = createReduce(arrayReduce, baseEach) /** * This method is like `_.reduce` except that it iterates over elements of @@ -18749,7 +18883,7 @@ module.exports = '1.0.7'; * }, []); * // => [4, 5, 2, 3, 0, 1] */ - var reduceRight = createReduce(arrayReduceRight, baseEachRight); + var reduceRight = createReduce(arrayReduceRight, baseEachRight) /** * The opposite of `_.filter`; this method returns the elements of `collection` @@ -18787,13 +18921,13 @@ module.exports = '1.0.7'; * _.pluck(_.reject(users, 'active'), 'user'); * // => ['barney'] */ - function reject(collection, predicate, thisArg) { - var func = isArray(collection) ? arrayFilter : baseFilter; - predicate = getCallback(predicate, thisArg, 3); - return func(collection, function(value, index, collection) { - return !predicate(value, index, collection); - }); - } + function reject (collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter + predicate = getCallback(predicate, thisArg, 3) + return func(collection, function (value, index, collection) { + return !predicate(value, index, collection) + }) + } /** * Gets a random element or `n` random elements from a collection. @@ -18813,28 +18947,28 @@ module.exports = '1.0.7'; * _.sample([1, 2, 3, 4], 2); * // => [3, 1] */ - function sample(collection, n, guard) { - if (guard ? isIterateeCall(collection, n, guard) : n == null) { - collection = toIterable(collection); - var length = collection.length; - return length > 0 ? collection[baseRandom(0, length - 1)] : undefined; - } - var index = -1, - result = toArray(collection), - length = result.length, - lastIndex = length - 1; - - n = nativeMin(n < 0 ? 0 : (+n || 0), length); - while (++index < n) { - var rand = baseRandom(index, lastIndex), - value = result[rand]; - - result[rand] = result[index]; - result[index] = value; - } - result.length = n; - return result; - } + function sample (collection, n, guard) { + if (guard ? isIterateeCall(collection, n, guard) : n == null) { + collection = toIterable(collection) + var length = collection.length + return length > 0 ? collection[baseRandom(0, length - 1)] : undefined + } + var index = -1, + result = toArray(collection), + length = result.length, + lastIndex = length - 1 + + n = nativeMin(n < 0 ? 0 : (+n || 0), length) + while (++index < n) { + var rand = baseRandom(index, lastIndex), + value = result[rand] + + result[rand] = result[index] + result[index] = value + } + result.length = n + return result + } /** * Creates an array of shuffled values, using a version of the @@ -18850,9 +18984,9 @@ module.exports = '1.0.7'; * _.shuffle([1, 2, 3, 4]); * // => [4, 1, 3, 2] */ - function shuffle(collection) { - return sample(collection, POSITIVE_INFINITY); - } + function shuffle (collection) { + return sample(collection, POSITIVE_INFINITY) + } /** * Gets the size of `collection` by returning its length for array-like @@ -18874,10 +19008,10 @@ module.exports = '1.0.7'; * _.size('pebbles'); * // => 7 */ - function size(collection) { - var length = collection ? getLength(collection) : 0; - return isLength(length) ? length : keys(collection).length; - } + function size (collection) { + var length = collection ? getLength(collection) : 0 + return isLength(length) ? length : keys(collection).length + } /** * Checks if `predicate` returns truthy for **any** element of `collection`. @@ -18928,16 +19062,16 @@ module.exports = '1.0.7'; * _.some(users, 'active'); * // => true */ - function some(collection, predicate, thisArg) { - var func = isArray(collection) ? arraySome : baseSome; - if (thisArg && isIterateeCall(collection, predicate, thisArg)) { - predicate = undefined; - } - if (typeof predicate != 'function' || thisArg !== undefined) { - predicate = getCallback(predicate, thisArg, 3); - } - return func(collection, predicate); - } + function some (collection, predicate, thisArg) { + var func = isArray(collection) ? arraySome : baseSome + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined + } + if (typeof predicate !== 'function' || thisArg !== undefined) { + predicate = getCallback(predicate, thisArg, 3) + } + return func(collection, predicate) + } /** * Creates an array of elements, sorted in ascending order by the results of @@ -18987,21 +19121,21 @@ module.exports = '1.0.7'; * _.pluck(_.sortBy(users, 'user'), 'user'); * // => ['barney', 'fred', 'pebbles'] */ - function sortBy(collection, iteratee, thisArg) { - if (collection == null) { - return []; - } - if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { - iteratee = undefined; - } - var index = -1; - iteratee = getCallback(iteratee, thisArg, 3); + function sortBy (collection, iteratee, thisArg) { + if (collection == null) { + return [] + } + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined + } + var index = -1 + iteratee = getCallback(iteratee, thisArg, 3) - var result = baseMap(collection, function(value, key, collection) { - return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value }; - }); - return baseSortBy(result, compareAscending); - } + var result = baseMap(collection, function (value, key, collection) { + return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value } + }) + return baseSortBy(result, compareAscending) + } /** * This method is like `_.sortBy` except that it can sort by multiple iteratees @@ -19038,16 +19172,16 @@ module.exports = '1.0.7'; * }), _.values); * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] */ - var sortByAll = restParam(function(collection, iteratees) { - if (collection == null) { - return []; - } - var guard = iteratees[2]; - if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) { - iteratees.length = 1; - } - return baseSortByOrder(collection, baseFlatten(iteratees), []); - }); + var sortByAll = restParam(function (collection, iteratees) { + if (collection == null) { + return [] + } + var guard = iteratees[2] + if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) { + iteratees.length = 1 + } + return baseSortByOrder(collection, baseFlatten(iteratees), []) + }) /** * This method is like `_.sortByAll` except that it allows specifying the @@ -19083,21 +19217,21 @@ module.exports = '1.0.7'; * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values); * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] */ - function sortByOrder(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (guard && isIterateeCall(iteratees, orders, guard)) { - orders = undefined; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseSortByOrder(collection, iteratees, orders); - } + function sortByOrder (collection, iteratees, orders, guard) { + if (collection == null) { + return [] + } + if (guard && isIterateeCall(iteratees, orders, guard)) { + orders = undefined + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees] + } + if (!isArray(orders)) { + orders = orders == null ? [] : [orders] + } + return baseSortByOrder(collection, iteratees, orders) + } /** * Performs a deep comparison between each element in `collection` and the @@ -19128,11 +19262,11 @@ module.exports = '1.0.7'; * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user'); * // => ['fred'] */ - function where(collection, source) { - return filter(collection, baseMatches(source)); - } + function where (collection, source) { + return filter(collection, baseMatches(source)) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Gets the number of milliseconds that have elapsed since the Unix epoch @@ -19148,11 +19282,11 @@ module.exports = '1.0.7'; * }, _.now()); * // => logs the number of milliseconds it took for the deferred function to be invoked */ - var now = nativeNow || function() { - return new Date().getTime(); - }; + var now = nativeNow || function () { + return new Date().getTime() + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * The opposite of `_.before`; this method creates a function that invokes @@ -19177,23 +19311,23 @@ module.exports = '1.0.7'; * }); * // => logs 'done saving!' after the two async saves have completed */ - function after(n, func) { - if (typeof func != 'function') { - if (typeof n == 'function') { - var temp = n; - n = func; - func = temp; - } else { - throw new TypeError(FUNC_ERROR_TEXT); - } - } - n = nativeIsFinite(n = +n) ? n : 0; - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } + function after (n, func) { + if (typeof func !== 'function') { + if (typeof n === 'function') { + var temp = n + n = func + func = temp + } else { + throw new TypeError(FUNC_ERROR_TEXT) + } + } + n = nativeIsFinite(n = +n) ? n : 0 + return function () { + if (--n < 1) { + return func.apply(this, arguments) + } + } + } /** * Creates a function that accepts up to `n` arguments ignoring any @@ -19211,13 +19345,13 @@ module.exports = '1.0.7'; * _.map(['6', '8', '10'], _.ary(parseInt, 1)); * // => [6, 8, 10] */ - function ary(func, n, guard) { - if (guard && isIterateeCall(func, n, guard)) { - n = undefined; - } - n = (func && n == null) ? func.length : nativeMax(+n || 0, 0); - return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); - } + function ary (func, n, guard) { + if (guard && isIterateeCall(func, n, guard)) { + n = undefined + } + n = (func && n == null) ? func.length : nativeMax(+n || 0, 0) + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n) + } /** * Creates a function that invokes `func`, with the `this` binding and arguments @@ -19235,27 +19369,27 @@ module.exports = '1.0.7'; * jQuery('#add').on('click', _.before(5, addContactToList)); * // => allows adding up to 4 contacts to the list */ - function before(n, func) { - var result; - if (typeof func != 'function') { - if (typeof n == 'function') { - var temp = n; - n = func; - func = temp; - } else { - throw new TypeError(FUNC_ERROR_TEXT); - } - } - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } + function before (n, func) { + var result + if (typeof func !== 'function') { + if (typeof n === 'function') { + var temp = n + n = func + func = temp + } else { + throw new TypeError(FUNC_ERROR_TEXT) + } + } + return function () { + if (--n > 0) { + result = func.apply(this, arguments) + } + if (n <= 1) { + func = undefined + } + return result + } + } /** * Creates a function that invokes `func` with the `this` binding of `thisArg` @@ -19292,14 +19426,14 @@ module.exports = '1.0.7'; * bound('hi'); * // => 'hi fred!' */ - var bind = restParam(function(func, thisArg, partials) { - var bitmask = BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, bind.placeholder); - bitmask |= PARTIAL_FLAG; - } - return createWrapper(func, bitmask, thisArg, partials, holders); - }); + var bind = restParam(function (func, thisArg, partials) { + var bitmask = BIND_FLAG + if (partials.length) { + var holders = replaceHolders(partials, bind.placeholder) + bitmask |= PARTIAL_FLAG + } + return createWrapper(func, bitmask, thisArg, partials, holders) + }) /** * Binds methods of an object to the object itself, overwriting the existing @@ -19329,18 +19463,18 @@ module.exports = '1.0.7'; * jQuery('#docs').on('click', view.onClick); * // => logs 'clicked docs' when the element is clicked */ - var bindAll = restParam(function(object, methodNames) { - methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object); + var bindAll = restParam(function (object, methodNames) { + methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object) - var index = -1, - length = methodNames.length; + var index = -1, + length = methodNames.length - while (++index < length) { - var key = methodNames[index]; - object[key] = createWrapper(object[key], BIND_FLAG, object); - } - return object; - }); + while (++index < length) { + var key = methodNames[index] + object[key] = createWrapper(object[key], BIND_FLAG, object) + } + return object + }) /** * Creates a function that invokes the method at `object[key]` and prepends @@ -19386,14 +19520,14 @@ module.exports = '1.0.7'; * bound('hi'); * // => 'hiya fred!' */ - var bindKey = restParam(function(object, key, partials) { - var bitmask = BIND_FLAG | BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, bindKey.placeholder); - bitmask |= PARTIAL_FLAG; - } - return createWrapper(key, bitmask, object, partials, holders); - }); + var bindKey = restParam(function (object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG + if (partials.length) { + var holders = replaceHolders(partials, bindKey.placeholder) + bitmask |= PARTIAL_FLAG + } + return createWrapper(key, bitmask, object, partials, holders) + }) /** * Creates a function that accepts one or more arguments of `func` that when @@ -19435,7 +19569,7 @@ module.exports = '1.0.7'; * curried(1)(_, 3)(2); * // => [1, 2, 3] */ - var curry = createCurry(CURRY_FLAG); + var curry = createCurry(CURRY_FLAG) /** * This method is like `_.curry` except that arguments are applied to `func` @@ -19474,7 +19608,7 @@ module.exports = '1.0.7'; * curried(3)(1, _)(2); * // => [1, 2, 3] */ - var curryRight = createCurry(CURRY_RIGHT_FLAG); + var curryRight = createCurry(CURRY_RIGHT_FLAG) /** * Creates a debounced function that delays invoking `func` until after `wait` @@ -19539,113 +19673,111 @@ module.exports = '1.0.7'; * // which cancels the debounced `todoChanges` call * delete models.todo; */ - function debounce(func, wait, options) { - var args, - maxTimeoutId, - result, - stamp, - thisArg, - timeoutId, - trailingCall, - lastCalled = 0, - maxWait = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = wait < 0 ? 0 : (+wait || 0); - if (options === true) { - var leading = true; - trailing = false; - } else if (isObject(options)) { - leading = !!options.leading; - maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait); - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function cancel() { - if (timeoutId) { - clearTimeout(timeoutId); - } - if (maxTimeoutId) { - clearTimeout(maxTimeoutId); - } - lastCalled = 0; - maxTimeoutId = timeoutId = trailingCall = undefined; - } + function debounce (func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + maxWait = false, + trailing = true + + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + wait = wait < 0 ? 0 : (+wait || 0) + if (options === true) { + var leading = true + trailing = false + } else if (isObject(options)) { + leading = !!options.leading + maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait) + trailing = 'trailing' in options ? !!options.trailing : trailing + } - function complete(isCalled, id) { - if (id) { - clearTimeout(id); - } - maxTimeoutId = timeoutId = trailingCall = undefined; - if (isCalled) { - lastCalled = now(); - result = func.apply(thisArg, args); - if (!timeoutId && !maxTimeoutId) { - args = thisArg = undefined; - } - } - } + function cancel () { + if (timeoutId) { + clearTimeout(timeoutId) + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId) + } + lastCalled = 0 + maxTimeoutId = timeoutId = trailingCall = undefined + } - function delayed() { - var remaining = wait - (now() - stamp); - if (remaining <= 0 || remaining > wait) { - complete(trailingCall, maxTimeoutId); - } else { - timeoutId = setTimeout(delayed, remaining); - } - } + function complete (isCalled, id) { + if (id) { + clearTimeout(id) + } + maxTimeoutId = timeoutId = trailingCall = undefined + if (isCalled) { + lastCalled = now() + result = func.apply(thisArg, args) + if (!timeoutId && !maxTimeoutId) { + args = thisArg = undefined + } + } + } - function maxDelayed() { - complete(trailing, timeoutId); - } + function delayed () { + var remaining = wait - (now() - stamp) + if (remaining <= 0 || remaining > wait) { + complete(trailingCall, maxTimeoutId) + } else { + timeoutId = setTimeout(delayed, remaining) + } + } - function debounced() { - args = arguments; - stamp = now(); - thisArg = this; - trailingCall = trailing && (timeoutId || !leading); + function maxDelayed () { + complete(trailing, timeoutId) + } - if (maxWait === false) { - var leadingCall = leading && !timeoutId; - } else { - if (!maxTimeoutId && !leading) { - lastCalled = stamp; - } - var remaining = maxWait - (stamp - lastCalled), - isCalled = remaining <= 0 || remaining > maxWait; + function debounced () { + args = arguments + stamp = now() + thisArg = this + trailingCall = trailing && (timeoutId || !leading) - if (isCalled) { - if (maxTimeoutId) { - maxTimeoutId = clearTimeout(maxTimeoutId); + if (maxWait === false) { + var leadingCall = leading && !timeoutId + } else { + if (!maxTimeoutId && !leading) { + lastCalled = stamp + } + var remaining = maxWait - (stamp - lastCalled), + isCalled = remaining <= 0 || remaining > maxWait + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId) + } + lastCalled = stamp + result = func.apply(thisArg, args) + } else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining) + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId) + } else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait) + } + if (leadingCall) { + isCalled = true + result = func.apply(thisArg, args) + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = undefined + } + return result + } + debounced.cancel = cancel + return debounced } - lastCalled = stamp; - result = func.apply(thisArg, args); - } - else if (!maxTimeoutId) { - maxTimeoutId = setTimeout(maxDelayed, remaining); - } - } - if (isCalled && timeoutId) { - timeoutId = clearTimeout(timeoutId); - } - else if (!timeoutId && wait !== maxWait) { - timeoutId = setTimeout(delayed, wait); - } - if (leadingCall) { - isCalled = true; - result = func.apply(thisArg, args); - } - if (isCalled && !timeoutId && !maxTimeoutId) { - args = thisArg = undefined; - } - return result; - } - debounced.cancel = cancel; - return debounced; - } /** * Defers invoking the `func` until the current call stack has cleared. Any @@ -19664,9 +19796,9 @@ module.exports = '1.0.7'; * }, 'deferred'); * // logs 'deferred' after one or more milliseconds */ - var defer = restParam(function(func, args) { - return baseDelay(func, 1, args); - }); + var defer = restParam(function (func, args) { + return baseDelay(func, 1, args) + }) /** * Invokes `func` after `wait` milliseconds. Any additional arguments are @@ -19686,9 +19818,9 @@ module.exports = '1.0.7'; * }, 1000, 'later'); * // => logs 'later' after one second */ - var delay = restParam(function(func, wait, args) { - return baseDelay(func, wait, args); - }); + var delay = restParam(function (func, wait, args) { + return baseDelay(func, wait, args) + }) /** * Creates a function that returns the result of invoking the provided @@ -19710,7 +19842,7 @@ module.exports = '1.0.7'; * addSquare(1, 2); * // => 9 */ - var flow = createFlow(); + var flow = createFlow() /** * This method is like `_.flow` except that it creates a function that @@ -19732,7 +19864,7 @@ module.exports = '1.0.7'; * addSquare(1, 2); * // => 9 */ - var flowRight = createFlow(true); + var flowRight = createFlow(true) /** * Creates a function that memoizes the result of `func`. If `resolver` is @@ -19785,25 +19917,25 @@ module.exports = '1.0.7'; * identity(other); * // => { 'user': 'barney' } */ - function memoize(func, resolver) { - if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; + function memoize (func, resolver) { + if (typeof func !== 'function' || (resolver && typeof resolver !== 'function')) { + throw new TypeError(FUNC_ERROR_TEXT) + } + var memoized = function () { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result); - return result; - }; - memoized.cache = new memoize.Cache; - return memoized; - } + if (cache.has(key)) { + return cache.get(key) + } + var result = func.apply(this, args) + memoized.cache = cache.set(key, result) + return result + } + memoized.cache = new memoize.Cache() + return memoized + } /** * Creates a function that runs each argument through a corresponding @@ -19836,20 +19968,20 @@ module.exports = '1.0.7'; * modded(5, 10); * // => [25, 20] */ - var modArgs = restParam(function(func, transforms) { - transforms = baseFlatten(transforms); - if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = transforms.length; - return restParam(function(args) { - var index = nativeMin(args.length, length); - while (index--) { - args[index] = transforms[index](args[index]); - } - return func.apply(this, args); - }); - }); + var modArgs = restParam(function (func, transforms) { + transforms = baseFlatten(transforms) + if (typeof func !== 'function' || !arrayEvery(transforms, baseIsFunction)) { + throw new TypeError(FUNC_ERROR_TEXT) + } + var length = transforms.length + return restParam(function (args) { + var index = nativeMin(args.length, length) + while (index--) { + args[index] = transforms[index](args[index]) + } + return func.apply(this, args) + }) + }) /** * Creates a function that negates the result of the predicate `func`. The @@ -19870,14 +20002,14 @@ module.exports = '1.0.7'; * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); * // => [1, 3, 5] */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - return !predicate.apply(this, arguments); - }; - } + function negate (predicate) { + if (typeof predicate !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + return function () { + return !predicate.apply(this, arguments) + } + } /** * Creates a function that is restricted to invoking `func` once. Repeat calls @@ -19896,9 +20028,9 @@ module.exports = '1.0.7'; * initialize(); * // `initialize` invokes `createApplication` once */ - function once(func) { - return before(2, func); - } + function once (func) { + return before(2, func) + } /** * Creates a function that invokes `func` with `partial` arguments prepended @@ -19932,7 +20064,7 @@ module.exports = '1.0.7'; * greetFred('hi'); * // => 'hi fred' */ - var partial = createPartial(PARTIAL_FLAG); + var partial = createPartial(PARTIAL_FLAG) /** * This method is like `_.partial` except that partially applied arguments @@ -19965,7 +20097,7 @@ module.exports = '1.0.7'; * sayHelloTo('fred'); * // => 'hello fred' */ - var partialRight = createPartial(PARTIAL_RIGHT_FLAG); + var partialRight = createPartial(PARTIAL_RIGHT_FLAG) /** * Creates a function that invokes `func` with arguments arranged according @@ -19995,9 +20127,9 @@ module.exports = '1.0.7'; * }, [1, 2, 3]); * // => [3, 6, 9] */ - var rearg = restParam(function(func, indexes) { - return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes)); - }); + var rearg = restParam(function (func, indexes) { + return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes)) + }) /** * Creates a function that invokes `func` with the `this` binding of the @@ -20021,34 +20153,34 @@ module.exports = '1.0.7'; * say('hello', 'fred', 'barney', 'pebbles'); * // => 'hello fred, barney, & pebbles' */ - function restParam(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - rest = Array(length); - - while (++index < length) { - rest[index] = args[start + index]; - } - switch (start) { - case 0: return func.call(this, rest); - case 1: return func.call(this, args[0], rest); - case 2: return func.call(this, args[0], args[1], rest); - } - var otherArgs = Array(start + 1); - index = -1; - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = rest; - return func.apply(this, otherArgs); - }; - } + function restParam (func, start) { + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0) + return function () { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length) + + while (++index < length) { + rest[index] = args[start + index] + } + switch (start) { + case 0: return func.call(this, rest) + case 1: return func.call(this, args[0], rest) + case 2: return func.call(this, args[0], args[1], rest) + } + var otherArgs = Array(start + 1) + index = -1 + while (++index < start) { + otherArgs[index] = args[index] + } + otherArgs[start] = rest + return func.apply(this, otherArgs) + } + } /** * Creates a function that invokes `func` with the `this` binding of the created @@ -20081,14 +20213,14 @@ module.exports = '1.0.7'; * })); * // => a Promise of 76 */ - function spread(func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function(array) { - return func.apply(this, array); - }; - } + function spread (func) { + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + return function (array) { + return func.apply(this, array) + } + } /** * Creates a throttled function that only invokes `func` at most once per @@ -20129,21 +20261,21 @@ module.exports = '1.0.7'; * // cancel a trailing throttled call * jQuery(window).on('popstate', throttled.cancel); */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; + function throttle (func, wait, options) { + var leading = true, + trailing = true - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (options === false) { - leading = false; - } else if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing }); - } + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + if (options === false) { + leading = false + } else if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading + trailing = 'trailing' in options ? !!options.trailing : trailing + } + return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing }) + } /** * Creates a function that provides `value` to the wrapper function as its @@ -20166,12 +20298,12 @@ module.exports = '1.0.7'; * p('fred, barney, & pebbles'); * // => '

fred, barney, & pebbles

' */ - function wrap(value, wrapper) { - wrapper = wrapper == null ? identity : wrapper; - return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []); - } + function wrap (value, wrapper) { + wrapper = wrapper == null ? identity : wrapper + return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned, @@ -20224,19 +20356,18 @@ module.exports = '1.0.7'; * el.childNodes.length; * // => 0 */ - function clone(value, isDeep, customizer, thisArg) { - if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) { - isDeep = false; - } - else if (typeof isDeep == 'function') { - thisArg = customizer; - customizer = isDeep; - isDeep = false; - } - return typeof customizer == 'function' + function clone (value, isDeep, customizer, thisArg) { + if (isDeep && typeof isDeep !== 'boolean' && isIterateeCall(value, isDeep, customizer)) { + isDeep = false + } else if (typeof isDeep === 'function') { + thisArg = customizer + customizer = isDeep + isDeep = false + } + return typeof customizer === 'function' ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1)) - : baseClone(value, isDeep); - } + : baseClone(value, isDeep) + } /** * Creates a deep clone of `value`. If `customizer` is provided it is invoked @@ -20283,11 +20414,11 @@ module.exports = '1.0.7'; * el.childNodes.length; * // => 20 */ - function cloneDeep(value, customizer, thisArg) { - return typeof customizer == 'function' + function cloneDeep (value, customizer, thisArg) { + return typeof customizer === 'function' ? baseClone(value, true, bindCallback(customizer, thisArg, 1)) - : baseClone(value, true); - } + : baseClone(value, true) + } /** * Checks if `value` is greater than `other`. @@ -20309,9 +20440,9 @@ module.exports = '1.0.7'; * _.gt(1, 3); * // => false */ - function gt(value, other) { - return value > other; - } + function gt (value, other) { + return value > other + } /** * Checks if `value` is greater than or equal to `other`. @@ -20333,9 +20464,9 @@ module.exports = '1.0.7'; * _.gte(1, 3); * // => false */ - function gte(value, other) { - return value >= other; - } + function gte (value, other) { + return value >= other + } /** * Checks if `value` is classified as an `arguments` object. @@ -20353,10 +20484,10 @@ module.exports = '1.0.7'; * _.isArguments([1, 2, 3]); * // => false */ - function isArguments(value) { - return isObjectLike(value) && isArrayLike(value) && - hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); - } + function isArguments (value) { + return isObjectLike(value) && isArrayLike(value) && + hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') + } /** * Checks if `value` is classified as an `Array` object. @@ -20374,9 +20505,9 @@ module.exports = '1.0.7'; * _.isArray(function() { return arguments; }()); * // => false */ - var isArray = nativeIsArray || function(value) { - return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; - }; + var isArray = nativeIsArray || function (value) { + return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag + } /** * Checks if `value` is classified as a boolean primitive or object. @@ -20394,9 +20525,9 @@ module.exports = '1.0.7'; * _.isBoolean(null); * // => false */ - function isBoolean(value) { - return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag); - } + function isBoolean (value) { + return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag) + } /** * Checks if `value` is classified as a `Date` object. @@ -20414,9 +20545,9 @@ module.exports = '1.0.7'; * _.isDate('Mon April 23 2012'); * // => false */ - function isDate(value) { - return isObjectLike(value) && objToString.call(value) == dateTag; - } + function isDate (value) { + return isObjectLike(value) && objToString.call(value) == dateTag + } /** * Checks if `value` is a DOM element. @@ -20434,9 +20565,9 @@ module.exports = '1.0.7'; * _.isElement(''); * // => false */ - function isElement(value) { - return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); - } + function isElement (value) { + return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value) + } /** * Checks if `value` is empty. A value is considered empty unless it is an @@ -20465,16 +20596,16 @@ module.exports = '1.0.7'; * _.isEmpty({ 'a': 1 }); * // => false */ - function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || + function isEmpty (value) { + if (value == null) { + return true + } + if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || (isObjectLike(value) && isFunction(value.splice)))) { - return !value.length; - } - return !keys(value).length; - } + return !value.length + } + return !keys(value).length + } /** * Performs a deep comparison between two values to determine if they are @@ -20520,11 +20651,11 @@ module.exports = '1.0.7'; * }); * // => true */ - function isEqual(value, other, customizer, thisArg) { - customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, customizer) : !!result; - } + function isEqual (value, other, customizer, thisArg) { + customizer = typeof customizer === 'function' ? bindCallback(customizer, thisArg, 3) : undefined + var result = customizer ? customizer(value, other) : undefined + return result === undefined ? baseIsEqual(value, other, customizer) : !!result + } /** * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, @@ -20543,9 +20674,9 @@ module.exports = '1.0.7'; * _.isError(Error); * // => false */ - function isError(value) { - return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag; - } + function isError (value) { + return isObjectLike(value) && typeof value.message === 'string' && objToString.call(value) == errorTag + } /** * Checks if `value` is a finite primitive number. @@ -20574,9 +20705,9 @@ module.exports = '1.0.7'; * _.isFinite(Infinity); * // => false */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } + function isFinite (value) { + return typeof value === 'number' && nativeIsFinite(value) + } /** * Checks if `value` is classified as a `Function` object. @@ -20594,12 +20725,12 @@ module.exports = '1.0.7'; * _.isFunction(/abc/); * // => false */ - function isFunction(value) { + function isFunction (value) { // The use of `Object#toString` avoids issues with the `typeof` operator // in older versions of Chrome and Safari which return 'function' for regexes // and Safari 8 equivalents which return 'object' for typed array constructors. - return isObject(value) && objToString.call(value) == funcTag; - } + return isObject(value) && objToString.call(value) == funcTag + } /** * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. @@ -20621,12 +20752,12 @@ module.exports = '1.0.7'; * _.isObject(1); * // => false */ - function isObject(value) { + function isObject (value) { // Avoid a V8 JIT bug in Chrome 19-20. // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); - } + var type = typeof value + return !!value && (type == 'object' || type == 'function') + } /** * Performs a deep comparison between `object` and `source` to determine if @@ -20667,10 +20798,10 @@ module.exports = '1.0.7'; * }); * // => true */ - function isMatch(object, source, customizer, thisArg) { - customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; - return baseIsMatch(object, getMatchData(source), customizer); - } + function isMatch (object, source, customizer, thisArg) { + customizer = typeof customizer === 'function' ? bindCallback(customizer, thisArg, 3) : undefined + return baseIsMatch(object, getMatchData(source), customizer) + } /** * Checks if `value` is `NaN`. @@ -20697,11 +20828,11 @@ module.exports = '1.0.7'; * _.isNaN(undefined); * // => false */ - function isNaN(value) { + function isNaN (value) { // An `NaN` primitive is the only value that is not equal to itself. // Perform the `toStringTag` check first to avoid errors with some host objects in IE. - return isNumber(value) && value != +value; - } + return isNumber(value) && value != +value + } /** * Checks if `value` is a native function. @@ -20719,15 +20850,15 @@ module.exports = '1.0.7'; * _.isNative(_); * // => false */ - function isNative(value) { - if (value == null) { - return false; - } - if (isFunction(value)) { - return reIsNative.test(fnToString.call(value)); - } - return isObjectLike(value) && reIsHostCtor.test(value); - } + function isNative (value) { + if (value == null) { + return false + } + if (isFunction(value)) { + return reIsNative.test(fnToString.call(value)) + } + return isObjectLike(value) && reIsHostCtor.test(value) + } /** * Checks if `value` is `null`. @@ -20745,9 +20876,9 @@ module.exports = '1.0.7'; * _.isNull(void 0); * // => false */ - function isNull(value) { - return value === null; - } + function isNull (value) { + return value === null + } /** * Checks if `value` is classified as a `Number` primitive or object. @@ -20771,9 +20902,9 @@ module.exports = '1.0.7'; * _.isNumber('8.4'); * // => false */ - function isNumber(value) { - return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag); - } + function isNumber (value) { + return typeof value === 'number' || (isObjectLike(value) && objToString.call(value) == numberTag) + } /** * Checks if `value` is a plain object, that is, an object created by the @@ -20805,26 +20936,26 @@ module.exports = '1.0.7'; * _.isPlainObject(Object.create(null)); * // => true */ - function isPlainObject(value) { - var Ctor; + function isPlainObject (value) { + var Ctor // Exit early for non `Object` objects. - if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) || - (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) { - return false; - } + if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) || + (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor === 'function' && !(Ctor instanceof Ctor)))) { + return false + } // IE < 9 iterates inherited properties before own properties. If the first // iterated property is an object's own property then there are no inherited // enumerable properties. - var result; + var result // In most environments an object's own properties are iterated before // its inherited properties. If the last iterated property is an object's // own property then there are no inherited enumerable properties. - baseForIn(value, function(subValue, key) { - result = key; - }); - return result === undefined || hasOwnProperty.call(value, result); - } + baseForIn(value, function (subValue, key) { + result = key + }) + return result === undefined || hasOwnProperty.call(value, result) + } /** * Checks if `value` is classified as a `RegExp` object. @@ -20842,9 +20973,9 @@ module.exports = '1.0.7'; * _.isRegExp('/abc/'); * // => false */ - function isRegExp(value) { - return isObject(value) && objToString.call(value) == regexpTag; - } + function isRegExp (value) { + return isObject(value) && objToString.call(value) == regexpTag + } /** * Checks if `value` is classified as a `String` primitive or object. @@ -20862,9 +20993,9 @@ module.exports = '1.0.7'; * _.isString(1); * // => false */ - function isString(value) { - return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); - } + function isString (value) { + return typeof value === 'string' || (isObjectLike(value) && objToString.call(value) == stringTag) + } /** * Checks if `value` is classified as a typed array. @@ -20882,9 +21013,9 @@ module.exports = '1.0.7'; * _.isTypedArray([]); * // => false */ - function isTypedArray(value) { - return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; - } + function isTypedArray (value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)] + } /** * Checks if `value` is `undefined`. @@ -20902,9 +21033,9 @@ module.exports = '1.0.7'; * _.isUndefined(null); * // => false */ - function isUndefined(value) { - return value === undefined; - } + function isUndefined (value) { + return value === undefined + } /** * Checks if `value` is less than `other`. @@ -20926,9 +21057,9 @@ module.exports = '1.0.7'; * _.lt(3, 1); * // => false */ - function lt(value, other) { - return value < other; - } + function lt (value, other) { + return value < other + } /** * Checks if `value` is less than or equal to `other`. @@ -20950,9 +21081,9 @@ module.exports = '1.0.7'; * _.lte(3, 1); * // => false */ - function lte(value, other) { - return value <= other; - } + function lte (value, other) { + return value <= other + } /** * Converts `value` to an array. @@ -20969,16 +21100,16 @@ module.exports = '1.0.7'; * }(1, 2, 3)); * // => [2, 3] */ - function toArray(value) { - var length = value ? getLength(value) : 0; - if (!isLength(length)) { - return values(value); - } - if (!length) { - return []; - } - return arrayCopy(value); - } + function toArray (value) { + var length = value ? getLength(value) : 0 + if (!isLength(length)) { + return values(value) + } + if (!length) { + return [] + } + return arrayCopy(value) + } /** * Converts `value` to a plain object flattening inherited enumerable @@ -21003,11 +21134,11 @@ module.exports = '1.0.7'; * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); * // => { 'a': 1, 'b': 2, 'c': 3 } */ - function toPlainObject(value) { - return baseCopy(value, keysIn(value)); - } + function toPlainObject (value) { + return baseCopy(value, keysIn(value)) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Recursively merges own enumerable properties of the source object(s), that @@ -21057,7 +21188,7 @@ module.exports = '1.0.7'; * }); * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } */ - var merge = createAssigner(baseMerge); + var merge = createAssigner(baseMerge) /** * Assigns own enumerable properties of source object(s) to the destination @@ -21091,11 +21222,11 @@ module.exports = '1.0.7'; * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); * // => { 'user': 'barney', 'age': 36 } */ - var assign = createAssigner(function(object, source, customizer) { - return customizer + var assign = createAssigner(function (object, source, customizer) { + return customizer ? assignWith(object, source, customizer) - : baseAssign(object, source); - }); + : baseAssign(object, source) + }) /** * Creates an object that inherits from the given `prototype` object. If a @@ -21131,13 +21262,13 @@ module.exports = '1.0.7'; * circle instanceof Shape; * // => true */ - function create(prototype, properties, guard) { - var result = baseCreate(prototype); - if (guard && isIterateeCall(prototype, properties, guard)) { - properties = undefined; - } - return properties ? baseAssign(result, properties) : result; - } + function create (prototype, properties, guard) { + var result = baseCreate(prototype) + if (guard && isIterateeCall(prototype, properties, guard)) { + properties = undefined + } + return properties ? baseAssign(result, properties) : result + } /** * Assigns own enumerable properties of source object(s) to the destination @@ -21157,7 +21288,7 @@ module.exports = '1.0.7'; * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); * // => { 'user': 'barney', 'age': 36 } */ - var defaults = createDefaults(assign, assignDefaults); + var defaults = createDefaults(assign, assignDefaults) /** * This method is like `_.defaults` except that it recursively assigns @@ -21177,7 +21308,7 @@ module.exports = '1.0.7'; * // => { 'user': { 'name': 'barney', 'age': 36 } } * */ - var defaultsDeep = createDefaults(merge, mergeDefaults); + var defaultsDeep = createDefaults(merge, mergeDefaults) /** * This method is like `_.find` except that it returns the key of the first @@ -21227,7 +21358,7 @@ module.exports = '1.0.7'; * _.findKey(users, 'active'); * // => 'barney' */ - var findKey = createFindKey(baseForOwn); + var findKey = createFindKey(baseForOwn) /** * This method is like `_.findKey` except that it iterates over elements of @@ -21277,7 +21408,7 @@ module.exports = '1.0.7'; * _.findLastKey(users, 'active'); * // => 'pebbles' */ - var findLastKey = createFindKey(baseForOwnRight); + var findLastKey = createFindKey(baseForOwnRight) /** * Iterates over own and inherited enumerable properties of an object invoking @@ -21306,7 +21437,7 @@ module.exports = '1.0.7'; * }); * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed) */ - var forIn = createForIn(baseFor); + var forIn = createForIn(baseFor) /** * This method is like `_.forIn` except that it iterates over properties of @@ -21333,7 +21464,7 @@ module.exports = '1.0.7'; * }); * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c' */ - var forInRight = createForIn(baseForRight); + var forInRight = createForIn(baseForRight) /** * Iterates over own enumerable properties of an object invoking `iteratee` @@ -21362,7 +21493,7 @@ module.exports = '1.0.7'; * }); * // => logs 'a' and 'b' (iteration order is not guaranteed) */ - var forOwn = createForOwn(baseForOwn); + var forOwn = createForOwn(baseForOwn) /** * This method is like `_.forOwn` except that it iterates over properties of @@ -21389,7 +21520,7 @@ module.exports = '1.0.7'; * }); * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b' */ - var forOwnRight = createForOwn(baseForOwnRight); + var forOwnRight = createForOwn(baseForOwnRight) /** * Creates an array of function property names from all enumerable properties, @@ -21406,9 +21537,9 @@ module.exports = '1.0.7'; * _.functions(_); * // => ['after', 'ary', 'assign', ...] */ - function functions(object) { - return baseFunctions(object, keysIn(object)); - } + function functions (object) { + return baseFunctions(object, keysIn(object)) + } /** * Gets the property value at `path` of `object`. If the resolved value is @@ -21434,10 +21565,10 @@ module.exports = '1.0.7'; * _.get(object, 'a.b.c', 'default'); * // => 'default' */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, toPath(path), path + ''); - return result === undefined ? defaultValue : result; - } + function get (object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, toPath(path), path + '') + return result === undefined ? defaultValue : result + } /** * Checks if `path` is a direct property. @@ -21461,23 +21592,23 @@ module.exports = '1.0.7'; * _.has(object, ['a', 'b', 'c']); * // => true */ - function has(object, path) { - if (object == null) { - return false; - } - var result = hasOwnProperty.call(object, path); - if (!result && !isKey(path)) { - path = toPath(path); - object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - if (object == null) { - return false; - } - path = last(path); - result = hasOwnProperty.call(object, path); - } - return result || (isLength(object.length) && isIndex(path, object.length) && - (isArray(object) || isArguments(object))); - } + function has (object, path) { + if (object == null) { + return false + } + var result = hasOwnProperty.call(object, path) + if (!result && !isKey(path)) { + path = toPath(path) + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)) + if (object == null) { + return false + } + path = last(path) + result = hasOwnProperty.call(object, path) + } + return result || (isLength(object.length) && isIndex(path, object.length) && + (isArray(object) || isArguments(object))) + } /** * Creates an object composed of the inverted keys and values of `object`. @@ -21502,32 +21633,31 @@ module.exports = '1.0.7'; * _.invert(object, true); * // => { '1': ['a', 'c'], '2': ['b'] } */ - function invert(object, multiValue, guard) { - if (guard && isIterateeCall(object, multiValue, guard)) { - multiValue = undefined; - } - var index = -1, - props = keys(object), - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index], - value = object[key]; - - if (multiValue) { - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - } - else { - result[value] = key; - } - } - return result; - } + function invert (object, multiValue, guard) { + if (guard && isIterateeCall(object, multiValue, guard)) { + multiValue = undefined + } + var index = -1, + props = keys(object), + length = props.length, + result = {} + + while (++index < length) { + var key = props[index], + value = object[key] + + if (multiValue) { + if (hasOwnProperty.call(result, value)) { + result[value].push(key) + } else { + result[value] = [key] + } + } else { + result[value] = key + } + } + return result + } /** * Creates an array of the own enumerable property names of `object`. @@ -21556,14 +21686,14 @@ module.exports = '1.0.7'; * _.keys('hi'); * // => ['0', '1'] */ - var keys = !nativeKeys ? shimKeys : function(object) { - var Ctor = object == null ? undefined : object.constructor; - if ((typeof Ctor == 'function' && Ctor.prototype === object) || - (typeof object != 'function' && isArrayLike(object))) { - return shimKeys(object); - } - return isObject(object) ? nativeKeys(object) : []; - }; + var keys = !nativeKeys ? shimKeys : function (object) { + var Ctor = object == null ? undefined : object.constructor + if ((typeof Ctor === 'function' && Ctor.prototype === object) || + (typeof object !== 'function' && isArrayLike(object))) { + return shimKeys(object) + } + return isObject(object) ? nativeKeys(object) : [] + } /** * Creates an array of the own and inherited enumerable property names of `object`. @@ -21587,34 +21717,34 @@ module.exports = '1.0.7'; * _.keysIn(new Foo); * // => ['a', 'b', 'c'] (iteration order is not guaranteed) */ - function keysIn(object) { - if (object == null) { - return []; - } - if (!isObject(object)) { - object = Object(object); - } - var length = object.length; - length = (length && isLength(length) && - (isArray(object) || isArguments(object)) && length) || 0; - - var Ctor = object.constructor, - index = -1, - isProto = typeof Ctor == 'function' && Ctor.prototype === object, - result = Array(length), - skipIndexes = length > 0; - - while (++index < length) { - result[index] = (index + ''); - } - for (var key in object) { - if (!(skipIndexes && isIndex(key, length)) && + function keysIn (object) { + if (object == null) { + return [] + } + if (!isObject(object)) { + object = Object(object) + } + var length = object.length + length = (length && isLength(length) && + (isArray(object) || isArguments(object)) && length) || 0 + + var Ctor = object.constructor, + index = -1, + isProto = typeof Ctor === 'function' && Ctor.prototype === object, + result = Array(length), + skipIndexes = length > 0 + + while (++index < length) { + result[index] = (index + '') + } + for (var key in object) { + if (!(skipIndexes && isIndex(key, length)) && !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } + result.push(key) + } + } + return result + } /** * The opposite of `_.mapValues`; this method creates an object with the @@ -21636,7 +21766,7 @@ module.exports = '1.0.7'; * }); * // => { 'a1': 1, 'b2': 2 } */ - var mapKeys = createObjectMapper(true); + var mapKeys = createObjectMapper(true) /** * Creates an object with the same keys as `object` and values generated by @@ -21679,7 +21809,7 @@ module.exports = '1.0.7'; * _.mapValues(users, 'age'); * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) */ - var mapValues = createObjectMapper(); + var mapValues = createObjectMapper() /** * The opposite of `_.pick`; this method creates an object composed of the @@ -21704,19 +21834,19 @@ module.exports = '1.0.7'; * _.omit(object, _.isNumber); * // => { 'user': 'fred' } */ - var omit = restParam(function(object, props) { - if (object == null) { - return {}; - } - if (typeof props[0] != 'function') { - var props = arrayMap(baseFlatten(props), String); - return pickByArray(object, baseDifference(keysIn(object), props)); - } - var predicate = bindCallback(props[0], props[1], 3); - return pickByCallback(object, function(value, key, object) { - return !predicate(value, key, object); - }); - }); + var omit = restParam(function (object, props) { + if (object == null) { + return {} + } + if (typeof props[0] !== 'function') { + var props = arrayMap(baseFlatten(props), String) + return pickByArray(object, baseDifference(keysIn(object), props)) + } + var predicate = bindCallback(props[0], props[1], 3) + return pickByCallback(object, function (value, key, object) { + return !predicate(value, key, object) + }) + }) /** * Creates a two dimensional array of the key-value pairs for `object`, @@ -21732,20 +21862,20 @@ module.exports = '1.0.7'; * _.pairs({ 'barney': 36, 'fred': 40 }); * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed) */ - function pairs(object) { - object = toObject(object); + function pairs (object) { + object = toObject(object) - var index = -1, - props = keys(object), - length = props.length, - result = Array(length); + var index = -1, + props = keys(object), + length = props.length, + result = Array(length) - while (++index < length) { - var key = props[index]; - result[index] = [key, object[key]]; - } - return result; - } + while (++index < length) { + var key = props[index] + result[index] = [key, object[key]] + } + return result + } /** * Creates an object composed of the picked `object` properties. Property @@ -21773,14 +21903,14 @@ module.exports = '1.0.7'; * _.pick(object, _.isString); * // => { 'user': 'fred' } */ - var pick = restParam(function(object, props) { - if (object == null) { - return {}; - } - return typeof props[0] == 'function' + var pick = restParam(function (object, props) { + if (object == null) { + return {} + } + return typeof props[0] === 'function' ? pickByCallback(object, bindCallback(props[0], props[1], 3)) - : pickByArray(object, baseFlatten(props)); - }); + : pickByArray(object, baseFlatten(props)) + }) /** * This method is like `_.get` except that if the resolved value is a function @@ -21810,18 +21940,18 @@ module.exports = '1.0.7'; * _.result(object, 'a.b.c', _.constant('default')); * // => 'default' */ - function result(object, path, defaultValue) { - var result = object == null ? undefined : object[path]; - if (result === undefined) { - if (object != null && !isKey(path, object)) { - path = toPath(path); - object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - result = object == null ? undefined : object[last(path)]; - } - result = result === undefined ? defaultValue : result; - } - return isFunction(result) ? result.call(object) : result; - } + function result (object, path, defaultValue) { + var result = object == null ? undefined : object[path] + if (result === undefined) { + if (object != null && !isKey(path, object)) { + path = toPath(path) + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)) + result = object == null ? undefined : object[last(path)] + } + result = result === undefined ? defaultValue : result + } + return isFunction(result) ? result.call(object) : result + } /** * Sets the property value of `path` on `object`. If a portion of `path` @@ -21843,34 +21973,34 @@ module.exports = '1.0.7'; * // => 4 * * _.set(object, 'x[0].y.z', 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - if (object == null) { - return object; - } - var pathKey = (path + ''); - path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = path[index]; - if (isObject(nested)) { - if (index == lastIndex) { - nested[key] = value; - } else if (nested[key] == null) { - nested[key] = isIndex(path[index + 1]) ? [] : {}; - } - } - nested = nested[key]; - } - return object; - } + * console.log(object.x[0].y.z); + * // => 5 + */ + function set (object, path, value) { + if (object == null) { + return object + } + var pathKey = (path + '') + path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path) + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object + + while (nested != null && ++index < length) { + var key = path[index] + if (isObject(nested)) { + if (index == lastIndex) { + nested[key] = value + } else if (nested[key] == null) { + nested[key] = isIndex(path[index + 1]) ? [] : {} + } + } + nested = nested[key] + } + return object + } /** * An alternative to `_.reduce`; this method transforms `object` to a new @@ -21901,27 +22031,27 @@ module.exports = '1.0.7'; * }); * // => { 'a': 3, 'b': 6 } */ - function transform(object, iteratee, accumulator, thisArg) { - var isArr = isArray(object) || isTypedArray(object); - iteratee = getCallback(iteratee, thisArg, 4); - - if (accumulator == null) { - if (isArr || isObject(object)) { - var Ctor = object.constructor; - if (isArr) { - accumulator = isArray(object) ? new Ctor : []; - } else { - accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined); - } - } else { - accumulator = {}; - } - } - (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; - } + function transform (object, iteratee, accumulator, thisArg) { + var isArr = isArray(object) || isTypedArray(object) + iteratee = getCallback(iteratee, thisArg, 4) + + if (accumulator == null) { + if (isArr || isObject(object)) { + var Ctor = object.constructor + if (isArr) { + accumulator = isArray(object) ? new Ctor() : [] + } else { + accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined) + } + } else { + accumulator = {} + } + } + (isArr ? arrayEach : baseForOwn)(object, function (value, index, object) { + return iteratee(accumulator, value, index, object) + }) + return accumulator + } /** * Creates an array of the own enumerable property values of `object`. @@ -21948,9 +22078,9 @@ module.exports = '1.0.7'; * _.values('hi'); * // => ['h', 'i'] */ - function values(object) { - return baseValues(object, keys(object)); - } + function values (object) { + return baseValues(object, keys(object)) + } /** * Creates an array of the own and inherited enumerable property values @@ -21975,11 +22105,11 @@ module.exports = '1.0.7'; * _.valuesIn(new Foo); * // => [1, 2, 3] (iteration order is not guaranteed) */ - function valuesIn(object) { - return baseValues(object, keysIn(object)); - } + function valuesIn (object) { + return baseValues(object, keysIn(object)) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Checks if `n` is between `start` and up to but not including, `end`. If @@ -22012,16 +22142,16 @@ module.exports = '1.0.7'; * _.inRange(5.2, 4); * // => false */ - function inRange(value, start, end) { - start = +start || 0; - if (end === undefined) { - end = start; - start = 0; - } else { - end = +end || 0; - } - return value >= nativeMin(start, end) && value < nativeMax(start, end); - } + function inRange (value, start, end) { + start = +start || 0 + if (end === undefined) { + end = start + start = 0 + } else { + end = +end || 0 + } + return value >= nativeMin(start, end) && value < nativeMax(start, end) + } /** * Produces a random number between `min` and `max` (inclusive). If only one @@ -22050,42 +22180,41 @@ module.exports = '1.0.7'; * _.random(1.2, 5.2); * // => a floating-point number between 1.2 and 5.2 */ - function random(min, max, floating) { - if (floating && isIterateeCall(min, max, floating)) { - max = floating = undefined; - } - var noMin = min == null, - noMax = max == null; - - if (floating == null) { - if (noMax && typeof min == 'boolean') { - floating = min; - min = 1; - } - else if (typeof max == 'boolean') { - floating = max; - noMax = true; - } - } - if (noMin && noMax) { - max = 1; - noMax = false; - } - min = +min || 0; - if (noMax) { - max = min; - min = 0; - } else { - max = +max || 0; - } - if (floating || min % 1 || max % 1) { - var rand = nativeRandom(); - return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max); - } - return baseRandom(min, max); - } + function random (min, max, floating) { + if (floating && isIterateeCall(min, max, floating)) { + max = floating = undefined + } + var noMin = min == null, + noMax = max == null + + if (floating == null) { + if (noMax && typeof min === 'boolean') { + floating = min + min = 1 + } else if (typeof max === 'boolean') { + floating = max + noMax = true + } + } + if (noMin && noMax) { + max = 1 + noMax = false + } + min = +min || 0 + if (noMax) { + max = min + min = 0 + } else { + max = +max || 0 + } + if (floating || min % 1 || max % 1) { + var rand = nativeRandom() + return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max) + } + return baseRandom(min, max) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). @@ -22106,10 +22235,10 @@ module.exports = '1.0.7'; * _.camelCase('__foo_bar__'); * // => 'fooBar' */ - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word); - }); + var camelCase = createCompounder(function (result, word, index) { + word = word.toLowerCase() + return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word) + }) /** * Capitalizes the first character of `string`. @@ -22124,10 +22253,10 @@ module.exports = '1.0.7'; * _.capitalize('fred'); * // => 'Fred' */ - function capitalize(string) { - string = baseToString(string); - return string && (string.charAt(0).toUpperCase() + string.slice(1)); - } + function capitalize (string) { + string = baseToString(string) + return string && (string.charAt(0).toUpperCase() + string.slice(1)) + } /** * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) @@ -22143,10 +22272,10 @@ module.exports = '1.0.7'; * _.deburr('déjà vu'); * // => 'deja vu' */ - function deburr(string) { - string = baseToString(string); - return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); - } + function deburr (string) { + string = baseToString(string) + return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '') + } /** * Checks if `string` ends with the given target string. @@ -22169,18 +22298,18 @@ module.exports = '1.0.7'; * _.endsWith('abc', 'b', 2); * // => true */ - function endsWith(string, target, position) { - string = baseToString(string); - target = (target + ''); + function endsWith (string, target, position) { + string = baseToString(string) + target = (target + '') - var length = string.length; - position = position === undefined + var length = string.length + position = position === undefined ? length - : nativeMin(position < 0 ? 0 : (+position || 0), length); + : nativeMin(position < 0 ? 0 : (+position || 0), length) - position -= target.length; - return position >= 0 && string.indexOf(target, position) == position; - } + position -= target.length + return position >= 0 && string.indexOf(target, position) == position + } /** * Converts the characters "&", "<", ">", '"', "'", and "\`", in `string` to @@ -22214,13 +22343,13 @@ module.exports = '1.0.7'; * _.escape('fred, barney, & pebbles'); * // => 'fred, barney, & pebbles' */ - function escape(string) { + function escape (string) { // Reset `lastIndex` because in IE < 9 `String#replace` does not. - string = baseToString(string); - return (string && reHasUnescapedHtml.test(string)) + string = baseToString(string) + return (string && reHasUnescapedHtml.test(string)) ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } + : string + } /** * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?", @@ -22236,12 +22365,12 @@ module.exports = '1.0.7'; * _.escapeRegExp('[lodash](https://lodash.com/)'); * // => '\[lodash\]\(https:\/\/lodash\.com\/\)' */ - function escapeRegExp(string) { - string = baseToString(string); - return (string && reHasRegExpChars.test(string)) + function escapeRegExp (string) { + string = baseToString(string) + return (string && reHasRegExpChars.test(string)) ? string.replace(reRegExpChars, escapeRegExpChar) - : (string || '(?:)'); - } + : (string || '(?:)') + } /** * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). @@ -22262,9 +22391,9 @@ module.exports = '1.0.7'; * _.kebabCase('__foo_bar__'); * // => 'foo-bar' */ - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); + var kebabCase = createCompounder(function (result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase() + }) /** * Pads `string` on the left and right sides if it's shorter than `length`. @@ -22288,21 +22417,21 @@ module.exports = '1.0.7'; * _.pad('abc', 3); * // => 'abc' */ - function pad(string, length, chars) { - string = baseToString(string); - length = +length; + function pad (string, length, chars) { + string = baseToString(string) + length = +length - var strLength = string.length; - if (strLength >= length || !nativeIsFinite(length)) { - return string; - } - var mid = (length - strLength) / 2, - leftLength = nativeFloor(mid), - rightLength = nativeCeil(mid); + var strLength = string.length + if (strLength >= length || !nativeIsFinite(length)) { + return string + } + var mid = (length - strLength) / 2, + leftLength = nativeFloor(mid), + rightLength = nativeCeil(mid) - chars = createPadding('', rightLength, chars); - return chars.slice(0, leftLength) + string + chars; - } + chars = createPadding('', rightLength, chars) + return chars.slice(0, leftLength) + string + chars + } /** * Pads `string` on the left side if it's shorter than `length`. Padding @@ -22326,7 +22455,7 @@ module.exports = '1.0.7'; * _.padLeft('abc', 3); * // => 'abc' */ - var padLeft = createPadDir(); + var padLeft = createPadDir() /** * Pads `string` on the right side if it's shorter than `length`. Padding @@ -22350,7 +22479,7 @@ module.exports = '1.0.7'; * _.padRight('abc', 3); * // => 'abc' */ - var padRight = createPadDir(true); + var padRight = createPadDir(true) /** * Converts `string` to an integer of the specified radix. If `radix` is @@ -22375,18 +22504,18 @@ module.exports = '1.0.7'; * _.map(['6', '08', '10'], _.parseInt); * // => [6, 8, 10] */ - function parseInt(string, radix, guard) { + function parseInt (string, radix, guard) { // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`. // Chrome fails to trim leading whitespace characters. // See https://code.google.com/p/v8/issues/detail?id=3109 for more details. - if (guard ? isIterateeCall(string, radix, guard) : radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - string = trim(string); - return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)); - } + if (guard ? isIterateeCall(string, radix, guard) : radix == null) { + radix = 0 + } else if (radix) { + radix = +radix + } + string = trim(string) + return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)) + } /** * Repeats the given string `n` times. @@ -22408,25 +22537,25 @@ module.exports = '1.0.7'; * _.repeat('abc', 0); * // => '' */ - function repeat(string, n) { - var result = ''; - string = baseToString(string); - n = +n; - if (n < 1 || !string || !nativeIsFinite(n)) { - return result; - } + function repeat (string, n) { + var result = '' + string = baseToString(string) + n = +n + if (n < 1 || !string || !nativeIsFinite(n)) { + return result + } // Leverage the exponentiation by squaring algorithm for a faster repeat. // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - string += string; - } while (n); + do { + if (n % 2) { + result += string + } + n = nativeFloor(n / 2) + string += string + } while (n) - return result; - } + return result + } /** * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case). @@ -22447,9 +22576,9 @@ module.exports = '1.0.7'; * _.snakeCase('--foo-bar'); * // => 'foo_bar' */ - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); + var snakeCase = createCompounder(function (result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase() + }) /** * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). @@ -22470,9 +22599,9 @@ module.exports = '1.0.7'; * _.startCase('__foo_bar__'); * // => 'Foo Bar' */ - var startCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1)); - }); + var startCase = createCompounder(function (result, word, index) { + return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1)) + }) /** * Checks if `string` starts with the given target string. @@ -22495,14 +22624,14 @@ module.exports = '1.0.7'; * _.startsWith('abc', 'b', 1); * // => true */ - function startsWith(string, target, position) { - string = baseToString(string); - position = position == null + function startsWith (string, target, position) { + string = baseToString(string) + position = position == null ? 0 - : nativeMin(position < 0 ? 0 : (+position || 0), string.length); + : nativeMin(position < 0 ? 0 : (+position || 0), string.length) - return string.lastIndexOf(target, position) == position; - } + return string.lastIndexOf(target, position) == position + } /** * Creates a compiled template function that can interpolate data properties @@ -22600,82 +22729,82 @@ module.exports = '1.0.7'; * };\ * '); */ - function template(string, options, otherOptions) { + function template (string, options, otherOptions) { // Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/) // and Laura Doktorova's doT.js (https://github.com/olado/doT). - var settings = lodash.templateSettings; + var settings = lodash.templateSettings - if (otherOptions && isIterateeCall(string, options, otherOptions)) { - options = otherOptions = undefined; - } - string = baseToString(string); - options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults); + if (otherOptions && isIterateeCall(string, options, otherOptions)) { + options = otherOptions = undefined + } + string = baseToString(string) + options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults) - var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults), - importsKeys = keys(imports), - importsValues = baseValues(imports, importsKeys); + var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults), + importsKeys = keys(imports), + importsValues = baseValues(imports, importsKeys) - var isEscaping, - isEvaluating, - index = 0, - interpolate = options.interpolate || reNoMatch, - source = "__p += '"; + var isEscaping, + isEvaluating, + index = 0, + interpolate = options.interpolate || reNoMatch, + source = "__p += '" // Compile the regexp to match each delimiter. - var reDelimiters = RegExp( + var reDelimiters = RegExp( (options.escape || reNoMatch).source + '|' + interpolate.source + '|' + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + (options.evaluate || reNoMatch).source + '|$' - , 'g'); + , 'g') // Use a sourceURL for easier debugging. - var sourceURL = '//# sourceURL=' + + var sourceURL = '//# sourceURL=' + ('sourceURL' in options ? options.sourceURL : ('lodash.templateSources[' + (++templateCounter) + ']') - ) + '\n'; + ) + '\n' - string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { - interpolateValue || (interpolateValue = esTemplateValue); + string.replace(reDelimiters, function (match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { + interpolateValue || (interpolateValue = esTemplateValue) // Escape characters that can't be included in string literals. - source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); + source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar) // Replace delimiters with snippets. - if (escapeValue) { - isEscaping = true; - source += "' +\n__e(" + escapeValue + ") +\n'"; - } - if (evaluateValue) { - isEvaluating = true; - source += "';\n" + evaluateValue + ";\n__p += '"; - } - if (interpolateValue) { - source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; - } - index = offset + match.length; + if (escapeValue) { + isEscaping = true + source += "' +\n__e(" + escapeValue + ") +\n'" + } + if (evaluateValue) { + isEvaluating = true + source += "';\n" + evaluateValue + ";\n__p += '" + } + if (interpolateValue) { + source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'" + } + index = offset + match.length // The JS engine embedded in Adobe products requires returning the `match` // string in order to produce the correct `offset` value. - return match; - }); + return match + }) - source += "';\n"; + source += "';\n" // If `variable` is not specified wrap a with-statement around the generated // code to add the data object to the top of the scope chain. - var variable = options.variable; - if (!variable) { - source = 'with (obj) {\n' + source + '\n}\n'; - } + var variable = options.variable + if (!variable) { + source = 'with (obj) {\n' + source + '\n}\n' + } // Cleanup code by stripping empty strings. - source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) + source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) .replace(reEmptyStringMiddle, '$1') - .replace(reEmptyStringTrailing, '$1;'); + .replace(reEmptyStringTrailing, '$1;') // Frame code as the function body. - source = 'function(' + (variable || 'obj') + ') {\n' + + source = 'function(' + (variable || 'obj') + ') {\n' + (variable ? '' : 'obj || (obj = {});\n' @@ -22691,20 +22820,20 @@ module.exports = '1.0.7'; : ';\n' ) + source + - 'return __p\n}'; + 'return __p\n}' - var result = attempt(function() { - return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues); - }); + var result = attempt(function () { + return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues) + }) // Provide the compiled function's source by its `toString` method or // the `source` property as a convenience for inlining compiled templates. - result.source = source; - if (isError(result)) { - throw result; - } - return result; - } + result.source = source + if (isError(result)) { + throw result + } + return result + } /** * Removes leading and trailing whitespace or specified characters from `string`. @@ -22727,18 +22856,18 @@ module.exports = '1.0.7'; * _.map([' foo ', ' bar '], _.trim); * // => ['foo', 'bar'] */ - function trim(string, chars, guard) { - var value = string; - string = baseToString(string); - if (!string) { - return string; - } - if (guard ? isIterateeCall(value, chars, guard) : chars == null) { - return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1); - } - chars = (chars + ''); - return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1); - } + function trim (string, chars, guard) { + var value = string + string = baseToString(string) + if (!string) { + return string + } + if (guard ? isIterateeCall(value, chars, guard) : chars == null) { + return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1) + } + chars = (chars + '') + return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1) + } /** * Removes leading whitespace or specified characters from `string`. @@ -22758,17 +22887,17 @@ module.exports = '1.0.7'; * _.trimLeft('-_-abc-_-', '_-'); * // => 'abc-_-' */ - function trimLeft(string, chars, guard) { - var value = string; - string = baseToString(string); - if (!string) { - return string; - } - if (guard ? isIterateeCall(value, chars, guard) : chars == null) { - return string.slice(trimmedLeftIndex(string)); - } - return string.slice(charsLeftIndex(string, (chars + ''))); - } + function trimLeft (string, chars, guard) { + var value = string + string = baseToString(string) + if (!string) { + return string + } + if (guard ? isIterateeCall(value, chars, guard) : chars == null) { + return string.slice(trimmedLeftIndex(string)) + } + return string.slice(charsLeftIndex(string, (chars + ''))) + } /** * Removes trailing whitespace or specified characters from `string`. @@ -22788,17 +22917,17 @@ module.exports = '1.0.7'; * _.trimRight('-_-abc-_-', '_-'); * // => '-_-abc' */ - function trimRight(string, chars, guard) { - var value = string; - string = baseToString(string); - if (!string) { - return string; - } - if (guard ? isIterateeCall(value, chars, guard) : chars == null) { - return string.slice(0, trimmedRightIndex(string) + 1); - } - return string.slice(0, charsRightIndex(string, (chars + '')) + 1); - } + function trimRight (string, chars, guard) { + var value = string + string = baseToString(string) + if (!string) { + return string + } + if (guard ? isIterateeCall(value, chars, guard) : chars == null) { + return string.slice(0, trimmedRightIndex(string) + 1) + } + return string.slice(0, charsRightIndex(string, (chars + '')) + 1) + } /** * Truncates `string` if it's longer than the given maximum string length. @@ -22840,57 +22969,57 @@ module.exports = '1.0.7'; * }); * // => 'hi-diddly-ho there, neig [...]' */ - function trunc(string, options, guard) { - if (guard && isIterateeCall(string, options, guard)) { - options = undefined; - } - var length = DEFAULT_TRUNC_LENGTH, - omission = DEFAULT_TRUNC_OMISSION; - - if (options != null) { - if (isObject(options)) { - var separator = 'separator' in options ? options.separator : separator; - length = 'length' in options ? (+options.length || 0) : length; - omission = 'omission' in options ? baseToString(options.omission) : omission; - } else { - length = +options || 0; - } - } - string = baseToString(string); - if (length >= string.length) { - return string; - } - var end = length - omission.length; - if (end < 1) { - return omission; - } - var result = string.slice(0, end); - if (separator == null) { - return result + omission; - } - if (isRegExp(separator)) { - if (string.slice(end).search(separator)) { - var match, - newEnd, - substring = string.slice(0, end); - - if (!separator.global) { - separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g'); - } - separator.lastIndex = 0; - while ((match = separator.exec(substring))) { - newEnd = match.index; - } - result = result.slice(0, newEnd == null ? end : newEnd); - } - } else if (string.indexOf(separator, end) != end) { - var index = result.lastIndexOf(separator); - if (index > -1) { - result = result.slice(0, index); - } - } - return result + omission; - } + function trunc (string, options, guard) { + if (guard && isIterateeCall(string, options, guard)) { + options = undefined + } + var length = DEFAULT_TRUNC_LENGTH, + omission = DEFAULT_TRUNC_OMISSION + + if (options != null) { + if (isObject(options)) { + var separator = 'separator' in options ? options.separator : separator + length = 'length' in options ? (+options.length || 0) : length + omission = 'omission' in options ? baseToString(options.omission) : omission + } else { + length = +options || 0 + } + } + string = baseToString(string) + if (length >= string.length) { + return string + } + var end = length - omission.length + if (end < 1) { + return omission + } + var result = string.slice(0, end) + if (separator == null) { + return result + omission + } + if (isRegExp(separator)) { + if (string.slice(end).search(separator)) { + var match, + newEnd, + substring = string.slice(0, end) + + if (!separator.global) { + separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g') + } + separator.lastIndex = 0 + while ((match = separator.exec(substring))) { + newEnd = match.index + } + result = result.slice(0, newEnd == null ? end : newEnd) + } + } else if (string.indexOf(separator, end) != end) { + var index = result.lastIndexOf(separator) + if (index > -1) { + result = result.slice(0, index) + } + } + return result + omission + } /** * The inverse of `_.escape`; this method converts the HTML entities @@ -22910,12 +23039,12 @@ module.exports = '1.0.7'; * _.unescape('fred, barney, & pebbles'); * // => 'fred, barney, & pebbles' */ - function unescape(string) { - string = baseToString(string); - return (string && reHasEscapedHtml.test(string)) + function unescape (string) { + string = baseToString(string) + return (string && reHasEscapedHtml.test(string)) ? string.replace(reEscapedHtml, unescapeHtmlChar) - : string; - } + : string + } /** * Splits `string` into an array of its words. @@ -22935,15 +23064,15 @@ module.exports = '1.0.7'; * _.words('fred, barney, & pebbles', /[^, ]+/g); * // => ['fred', 'barney', '&', 'pebbles'] */ - function words(string, pattern, guard) { - if (guard && isIterateeCall(string, pattern, guard)) { - pattern = undefined; - } - string = baseToString(string); - return string.match(pattern || reWords) || []; - } + function words (string, pattern, guard) { + if (guard && isIterateeCall(string, pattern, guard)) { + pattern = undefined + } + string = baseToString(string) + return string.match(pattern || reWords) || [] + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Attempts to invoke `func`, returning either the result or the caught error @@ -22965,13 +23094,13 @@ module.exports = '1.0.7'; * elements = []; * } */ - var attempt = restParam(function(func, args) { - try { - return func.apply(undefined, args); - } catch(e) { - return isError(e) ? e : new Error(e); - } - }); + var attempt = restParam(function (func, args) { + try { + return func.apply(undefined, args) + } catch (e) { + return isError(e) ? e : new Error(e) + } + }) /** * Creates a function that invokes `func` with the `this` binding of `thisArg` @@ -23011,14 +23140,14 @@ module.exports = '1.0.7'; * _.filter(users, 'age__gt36'); * // => [{ 'user': 'fred', 'age': 40 }] */ - function callback(func, thisArg, guard) { - if (guard && isIterateeCall(func, thisArg, guard)) { - thisArg = undefined; - } - return isObjectLike(func) + function callback (func, thisArg, guard) { + if (guard && isIterateeCall(func, thisArg, guard)) { + thisArg = undefined + } + return isObjectLike(func) ? matches(func) - : baseCallback(func, thisArg); - } + : baseCallback(func, thisArg) + } /** * Creates a function that returns `value`. @@ -23036,11 +23165,11 @@ module.exports = '1.0.7'; * getter() === object; * // => true */ - function constant(value) { - return function() { - return value; - }; - } + function constant (value) { + return function () { + return value + } + } /** * This method returns the first argument provided to it. @@ -23057,9 +23186,9 @@ module.exports = '1.0.7'; * _.identity(object) === object; * // => true */ - function identity(value) { - return value; - } + function identity (value) { + return value + } /** * Creates a function that performs a deep comparison between a given object @@ -23086,9 +23215,9 @@ module.exports = '1.0.7'; * _.filter(users, _.matches({ 'age': 40, 'active': false })); * // => [{ 'user': 'fred', 'age': 40, 'active': false }] */ - function matches(source) { - return baseMatches(baseClone(source, true)); - } + function matches (source) { + return baseMatches(baseClone(source, true)) + } /** * Creates a function that compares the property value of `path` on a given @@ -23114,9 +23243,9 @@ module.exports = '1.0.7'; * _.find(users, _.matchesProperty('user', 'fred')); * // => { 'user': 'fred' } */ - function matchesProperty(path, srcValue) { - return baseMatchesProperty(path, baseClone(srcValue, true)); - } + function matchesProperty (path, srcValue) { + return baseMatchesProperty(path, baseClone(srcValue, true)) + } /** * Creates a function that invokes the method at `path` on a given object. @@ -23141,11 +23270,11 @@ module.exports = '1.0.7'; * _.invoke(_.sortBy(objects, _.method(['a', 'b', 'c'])), 'a.b.c'); * // => [1, 2] */ - var method = restParam(function(path, args) { - return function(object) { - return invokePath(object, path, args); - }; - }); + var method = restParam(function (path, args) { + return function (object) { + return invokePath(object, path, args) + } + }) /** * The opposite of `_.method`; this method creates a function that invokes @@ -23169,11 +23298,11 @@ module.exports = '1.0.7'; * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); * // => [2, 0] */ - var methodOf = restParam(function(object, args) { - return function(path) { - return invokePath(object, path, args); - }; - }); + var methodOf = restParam(function (object, args) { + return function (path) { + return invokePath(object, path, args) + } + }) /** * Adds all own enumerable function properties of a source object to the @@ -23211,56 +23340,56 @@ module.exports = '1.0.7'; * _('fred').vowels(); * // => ['e'] */ - function mixin(object, source, options) { - if (options == null) { - var isObj = isObject(source), - props = isObj ? keys(source) : undefined, - methodNames = (props && props.length) ? baseFunctions(source, props) : undefined; - - if (!(methodNames ? methodNames.length : isObj)) { - methodNames = false; - options = source; - source = object; - object = this; - } - } - if (!methodNames) { - methodNames = baseFunctions(source, keys(source)); - } - var chain = true, - index = -1, - isFunc = isFunction(object), - length = methodNames.length; - - if (options === false) { - chain = false; - } else if (isObject(options) && 'chain' in options) { - chain = options.chain; - } - while (++index < length) { - var methodName = methodNames[index], - func = source[methodName]; - - object[methodName] = func; - if (isFunc) { - object.prototype[methodName] = (function(func) { - return function() { - var chainAll = this.__chain__; - if (chain || chainAll) { - var result = object(this.__wrapped__), - actions = result.__actions__ = arrayCopy(this.__actions__); - - actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); - result.__chain__ = chainAll; - return result; + function mixin (object, source, options) { + if (options == null) { + var isObj = isObject(source), + props = isObj ? keys(source) : undefined, + methodNames = (props && props.length) ? baseFunctions(source, props) : undefined + + if (!(methodNames ? methodNames.length : isObj)) { + methodNames = false + options = source + source = object + object = this + } } - return func.apply(object, arrayPush([this.value()], arguments)); - }; - }(func)); - } - } - return object; - } + if (!methodNames) { + methodNames = baseFunctions(source, keys(source)) + } + var chain = true, + index = -1, + isFunc = isFunction(object), + length = methodNames.length + + if (options === false) { + chain = false + } else if (isObject(options) && 'chain' in options) { + chain = options.chain + } + while (++index < length) { + var methodName = methodNames[index], + func = source[methodName] + + object[methodName] = func + if (isFunc) { + object.prototype[methodName] = (function (func) { + return function () { + var chainAll = this.__chain__ + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = arrayCopy(this.__actions__) + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }) + result.__chain__ = chainAll + return result + } + return func.apply(object, arrayPush([this.value()], arguments)) + } + }(func)) + } + } + return object + } /** * Reverts the `_` variable to its previous value and returns a reference to @@ -23274,10 +23403,10 @@ module.exports = '1.0.7'; * * var lodash = _.noConflict(); */ - function noConflict() { - root._ = oldDash; - return this; - } + function noConflict () { + root._ = oldDash + return this + } /** * A no-operation function that returns `undefined` regardless of the @@ -23293,9 +23422,9 @@ module.exports = '1.0.7'; * _.noop(object) === undefined; * // => true */ - function noop() { + function noop () { // No operation performed. - } + } /** * Creates a function that returns the property value at `path` on a @@ -23319,9 +23448,9 @@ module.exports = '1.0.7'; * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c'); * // => [1, 2] */ - function property(path) { - return isKey(path) ? baseProperty(path) : basePropertyDeep(path); - } + function property (path) { + return isKey(path) ? baseProperty(path) : basePropertyDeep(path) + } /** * The opposite of `_.property`; this method creates a function that returns @@ -23343,11 +23472,11 @@ module.exports = '1.0.7'; * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); * // => [2, 0] */ - function propertyOf(object) { - return function(path) { - return baseGet(object, toPath(path), path + ''); - }; - } + function propertyOf (object) { + return function (path) { + return baseGet(object, toPath(path), path + '') + } + } /** * Creates an array of numbers (positive and/or negative) progressing from @@ -23382,31 +23511,31 @@ module.exports = '1.0.7'; * _.range(0); * // => [] */ - function range(start, end, step) { - if (step && isIterateeCall(start, end, step)) { - end = step = undefined; - } - start = +start || 0; - step = step == null ? 1 : (+step || 0); + function range (start, end, step) { + if (step && isIterateeCall(start, end, step)) { + end = step = undefined + } + start = +start || 0 + step = step == null ? 1 : (+step || 0) - if (end == null) { - end = start; - start = 0; - } else { - end = +end || 0; - } + if (end == null) { + end = start + start = 0 + } else { + end = +end || 0 + } // Use `Array(length)` so engines like Chakra and V8 avoid slower modes. // See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details. - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length) - while (++index < length) { - result[index] = start; - start += step; - } - return result; - } + while (++index < length) { + result[index] = start + start += step + } + return result + } /** * Invokes the iteratee function `n` times, returning an array of the results @@ -23435,27 +23564,27 @@ module.exports = '1.0.7'; * }, mage); * // => also invokes `mage.castSpell(n)` three times */ - function times(n, iteratee, thisArg) { - n = nativeFloor(n); + function times (n, iteratee, thisArg) { + n = nativeFloor(n) // Exit early to avoid a JSC JIT bug in Safari 8 // where `Array(0)` is treated as `Array(1)`. - if (n < 1 || !nativeIsFinite(n)) { - return []; - } - var index = -1, - result = Array(nativeMin(n, MAX_ARRAY_LENGTH)); + if (n < 1 || !nativeIsFinite(n)) { + return [] + } + var index = -1, + result = Array(nativeMin(n, MAX_ARRAY_LENGTH)) - iteratee = bindCallback(iteratee, thisArg, 1); - while (++index < n) { - if (index < MAX_ARRAY_LENGTH) { - result[index] = iteratee(index); - } else { - iteratee(index); - } - } - return result; - } + iteratee = bindCallback(iteratee, thisArg, 1) + while (++index < n) { + if (index < MAX_ARRAY_LENGTH) { + result[index] = iteratee(index) + } else { + iteratee(index) + } + } + return result + } /** * Generates a unique ID. If `prefix` is provided the ID is appended to it. @@ -23473,12 +23602,12 @@ module.exports = '1.0.7'; * _.uniqueId(); * // => '105' */ - function uniqueId(prefix) { - var id = ++idCounter; - return baseToString(prefix) + id; - } + function uniqueId (prefix) { + var id = ++idCounter + return baseToString(prefix) + id + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Adds two numbers. @@ -23494,9 +23623,9 @@ module.exports = '1.0.7'; * _.add(6, 4); * // => 10 */ - function add(augend, addend) { - return (+augend || 0) + (+addend || 0); - } + function add (augend, addend) { + return (+augend || 0) + (+addend || 0) + } /** * Calculates `n` rounded up to `precision`. @@ -23518,7 +23647,7 @@ module.exports = '1.0.7'; * _.ceil(6040, -2); * // => 6100 */ - var ceil = createRound('ceil'); + var ceil = createRound('ceil') /** * Calculates `n` rounded down to `precision`. @@ -23540,7 +23669,7 @@ module.exports = '1.0.7'; * _.floor(4060, -2); * // => 4000 */ - var floor = createRound('floor'); + var floor = createRound('floor') /** * Gets the maximum value of `collection`. If `collection` is empty or falsey @@ -23589,7 +23718,7 @@ module.exports = '1.0.7'; * _.max(users, 'age'); * // => { 'user': 'fred', 'age': 40 } */ - var max = createExtremum(gt, NEGATIVE_INFINITY); + var max = createExtremum(gt, NEGATIVE_INFINITY) /** * Gets the minimum value of `collection`. If `collection` is empty or falsey @@ -23638,7 +23767,7 @@ module.exports = '1.0.7'; * _.min(users, 'age'); * // => { 'user': 'barney', 'age': 36 } */ - var min = createExtremum(lt, POSITIVE_INFINITY); + var min = createExtremum(lt, POSITIVE_INFINITY) /** * Calculates `n` rounded to `precision`. @@ -23660,7 +23789,7 @@ module.exports = '1.0.7'; * _.round(4060, -2); * // => 4100 */ - var round = createRound('round'); + var round = createRound('round') /** * Gets the sum of the values in `collection`. @@ -23694,295 +23823,295 @@ module.exports = '1.0.7'; * _.sum(objects, 'n'); * // => 10 */ - function sum(collection, iteratee, thisArg) { - if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { - iteratee = undefined; - } - iteratee = getCallback(iteratee, thisArg, 3); - return iteratee.length == 1 + function sum (collection, iteratee, thisArg) { + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined + } + iteratee = getCallback(iteratee, thisArg, 3) + return iteratee.length == 1 ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee) - : baseSum(collection, iteratee); - } + : baseSum(collection, iteratee) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype; + lodash.prototype = baseLodash.prototype - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; + LodashWrapper.prototype = baseCreate(baseLodash.prototype) + LodashWrapper.prototype.constructor = LodashWrapper - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; + LazyWrapper.prototype = baseCreate(baseLodash.prototype) + LazyWrapper.prototype.constructor = LazyWrapper // Add functions to the `Map` cache. - MapCache.prototype['delete'] = mapDelete; - MapCache.prototype.get = mapGet; - MapCache.prototype.has = mapHas; - MapCache.prototype.set = mapSet; + MapCache.prototype['delete'] = mapDelete + MapCache.prototype.get = mapGet + MapCache.prototype.has = mapHas + MapCache.prototype.set = mapSet // Add functions to the `Set` cache. - SetCache.prototype.push = cachePush; + SetCache.prototype.push = cachePush // Assign cache to `_.memoize`. - memoize.Cache = MapCache; + memoize.Cache = MapCache // Add functions that return wrapped values when chaining. - lodash.after = after; - lodash.ary = ary; - lodash.assign = assign; - lodash.at = at; - lodash.before = before; - lodash.bind = bind; - lodash.bindAll = bindAll; - lodash.bindKey = bindKey; - lodash.callback = callback; - lodash.chain = chain; - lodash.chunk = chunk; - lodash.compact = compact; - lodash.constant = constant; - lodash.countBy = countBy; - lodash.create = create; - lodash.curry = curry; - lodash.curryRight = curryRight; - lodash.debounce = debounce; - lodash.defaults = defaults; - lodash.defaultsDeep = defaultsDeep; - lodash.defer = defer; - lodash.delay = delay; - lodash.difference = difference; - lodash.drop = drop; - lodash.dropRight = dropRight; - lodash.dropRightWhile = dropRightWhile; - lodash.dropWhile = dropWhile; - lodash.fill = fill; - lodash.filter = filter; - lodash.flatten = flatten; - lodash.flattenDeep = flattenDeep; - lodash.flow = flow; - lodash.flowRight = flowRight; - lodash.forEach = forEach; - lodash.forEachRight = forEachRight; - lodash.forIn = forIn; - lodash.forInRight = forInRight; - lodash.forOwn = forOwn; - lodash.forOwnRight = forOwnRight; - lodash.functions = functions; - lodash.groupBy = groupBy; - lodash.indexBy = indexBy; - lodash.initial = initial; - lodash.intersection = intersection; - lodash.invert = invert; - lodash.invoke = invoke; - lodash.keys = keys; - lodash.keysIn = keysIn; - lodash.map = map; - lodash.mapKeys = mapKeys; - lodash.mapValues = mapValues; - lodash.matches = matches; - lodash.matchesProperty = matchesProperty; - lodash.memoize = memoize; - lodash.merge = merge; - lodash.method = method; - lodash.methodOf = methodOf; - lodash.mixin = mixin; - lodash.modArgs = modArgs; - lodash.negate = negate; - lodash.omit = omit; - lodash.once = once; - lodash.pairs = pairs; - lodash.partial = partial; - lodash.partialRight = partialRight; - lodash.partition = partition; - lodash.pick = pick; - lodash.pluck = pluck; - lodash.property = property; - lodash.propertyOf = propertyOf; - lodash.pull = pull; - lodash.pullAt = pullAt; - lodash.range = range; - lodash.rearg = rearg; - lodash.reject = reject; - lodash.remove = remove; - lodash.rest = rest; - lodash.restParam = restParam; - lodash.set = set; - lodash.shuffle = shuffle; - lodash.slice = slice; - lodash.sortBy = sortBy; - lodash.sortByAll = sortByAll; - lodash.sortByOrder = sortByOrder; - lodash.spread = spread; - lodash.take = take; - lodash.takeRight = takeRight; - lodash.takeRightWhile = takeRightWhile; - lodash.takeWhile = takeWhile; - lodash.tap = tap; - lodash.throttle = throttle; - lodash.thru = thru; - lodash.times = times; - lodash.toArray = toArray; - lodash.toPlainObject = toPlainObject; - lodash.transform = transform; - lodash.union = union; - lodash.uniq = uniq; - lodash.unzip = unzip; - lodash.unzipWith = unzipWith; - lodash.values = values; - lodash.valuesIn = valuesIn; - lodash.where = where; - lodash.without = without; - lodash.wrap = wrap; - lodash.xor = xor; - lodash.zip = zip; - lodash.zipObject = zipObject; - lodash.zipWith = zipWith; + lodash.after = after + lodash.ary = ary + lodash.assign = assign + lodash.at = at + lodash.before = before + lodash.bind = bind + lodash.bindAll = bindAll + lodash.bindKey = bindKey + lodash.callback = callback + lodash.chain = chain + lodash.chunk = chunk + lodash.compact = compact + lodash.constant = constant + lodash.countBy = countBy + lodash.create = create + lodash.curry = curry + lodash.curryRight = curryRight + lodash.debounce = debounce + lodash.defaults = defaults + lodash.defaultsDeep = defaultsDeep + lodash.defer = defer + lodash.delay = delay + lodash.difference = difference + lodash.drop = drop + lodash.dropRight = dropRight + lodash.dropRightWhile = dropRightWhile + lodash.dropWhile = dropWhile + lodash.fill = fill + lodash.filter = filter + lodash.flatten = flatten + lodash.flattenDeep = flattenDeep + lodash.flow = flow + lodash.flowRight = flowRight + lodash.forEach = forEach + lodash.forEachRight = forEachRight + lodash.forIn = forIn + lodash.forInRight = forInRight + lodash.forOwn = forOwn + lodash.forOwnRight = forOwnRight + lodash.functions = functions + lodash.groupBy = groupBy + lodash.indexBy = indexBy + lodash.initial = initial + lodash.intersection = intersection + lodash.invert = invert + lodash.invoke = invoke + lodash.keys = keys + lodash.keysIn = keysIn + lodash.map = map + lodash.mapKeys = mapKeys + lodash.mapValues = mapValues + lodash.matches = matches + lodash.matchesProperty = matchesProperty + lodash.memoize = memoize + lodash.merge = merge + lodash.method = method + lodash.methodOf = methodOf + lodash.mixin = mixin + lodash.modArgs = modArgs + lodash.negate = negate + lodash.omit = omit + lodash.once = once + lodash.pairs = pairs + lodash.partial = partial + lodash.partialRight = partialRight + lodash.partition = partition + lodash.pick = pick + lodash.pluck = pluck + lodash.property = property + lodash.propertyOf = propertyOf + lodash.pull = pull + lodash.pullAt = pullAt + lodash.range = range + lodash.rearg = rearg + lodash.reject = reject + lodash.remove = remove + lodash.rest = rest + lodash.restParam = restParam + lodash.set = set + lodash.shuffle = shuffle + lodash.slice = slice + lodash.sortBy = sortBy + lodash.sortByAll = sortByAll + lodash.sortByOrder = sortByOrder + lodash.spread = spread + lodash.take = take + lodash.takeRight = takeRight + lodash.takeRightWhile = takeRightWhile + lodash.takeWhile = takeWhile + lodash.tap = tap + lodash.throttle = throttle + lodash.thru = thru + lodash.times = times + lodash.toArray = toArray + lodash.toPlainObject = toPlainObject + lodash.transform = transform + lodash.union = union + lodash.uniq = uniq + lodash.unzip = unzip + lodash.unzipWith = unzipWith + lodash.values = values + lodash.valuesIn = valuesIn + lodash.where = where + lodash.without = without + lodash.wrap = wrap + lodash.xor = xor + lodash.zip = zip + lodash.zipObject = zipObject + lodash.zipWith = zipWith // Add aliases. - lodash.backflow = flowRight; - lodash.collect = map; - lodash.compose = flowRight; - lodash.each = forEach; - lodash.eachRight = forEachRight; - lodash.extend = assign; - lodash.iteratee = callback; - lodash.methods = functions; - lodash.object = zipObject; - lodash.select = filter; - lodash.tail = rest; - lodash.unique = uniq; + lodash.backflow = flowRight + lodash.collect = map + lodash.compose = flowRight + lodash.each = forEach + lodash.eachRight = forEachRight + lodash.extend = assign + lodash.iteratee = callback + lodash.methods = functions + lodash.object = zipObject + lodash.select = filter + lodash.tail = rest + lodash.unique = uniq // Add functions to `lodash.prototype`. - mixin(lodash, lodash); + mixin(lodash, lodash) - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ // Add functions that return unwrapped values when chaining. - lodash.add = add; - lodash.attempt = attempt; - lodash.camelCase = camelCase; - lodash.capitalize = capitalize; - lodash.ceil = ceil; - lodash.clone = clone; - lodash.cloneDeep = cloneDeep; - lodash.deburr = deburr; - lodash.endsWith = endsWith; - lodash.escape = escape; - lodash.escapeRegExp = escapeRegExp; - lodash.every = every; - lodash.find = find; - lodash.findIndex = findIndex; - lodash.findKey = findKey; - lodash.findLast = findLast; - lodash.findLastIndex = findLastIndex; - lodash.findLastKey = findLastKey; - lodash.findWhere = findWhere; - lodash.first = first; - lodash.floor = floor; - lodash.get = get; - lodash.gt = gt; - lodash.gte = gte; - lodash.has = has; - lodash.identity = identity; - lodash.includes = includes; - lodash.indexOf = indexOf; - lodash.inRange = inRange; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isBoolean = isBoolean; - lodash.isDate = isDate; - lodash.isElement = isElement; - lodash.isEmpty = isEmpty; - lodash.isEqual = isEqual; - lodash.isError = isError; - lodash.isFinite = isFinite; - lodash.isFunction = isFunction; - lodash.isMatch = isMatch; - lodash.isNaN = isNaN; - lodash.isNative = isNative; - lodash.isNull = isNull; - lodash.isNumber = isNumber; - lodash.isObject = isObject; - lodash.isPlainObject = isPlainObject; - lodash.isRegExp = isRegExp; - lodash.isString = isString; - lodash.isTypedArray = isTypedArray; - lodash.isUndefined = isUndefined; - lodash.kebabCase = kebabCase; - lodash.last = last; - lodash.lastIndexOf = lastIndexOf; - lodash.lt = lt; - lodash.lte = lte; - lodash.max = max; - lodash.min = min; - lodash.noConflict = noConflict; - lodash.noop = noop; - lodash.now = now; - lodash.pad = pad; - lodash.padLeft = padLeft; - lodash.padRight = padRight; - lodash.parseInt = parseInt; - lodash.random = random; - lodash.reduce = reduce; - lodash.reduceRight = reduceRight; - lodash.repeat = repeat; - lodash.result = result; - lodash.round = round; - lodash.runInContext = runInContext; - lodash.size = size; - lodash.snakeCase = snakeCase; - lodash.some = some; - lodash.sortedIndex = sortedIndex; - lodash.sortedLastIndex = sortedLastIndex; - lodash.startCase = startCase; - lodash.startsWith = startsWith; - lodash.sum = sum; - lodash.template = template; - lodash.trim = trim; - lodash.trimLeft = trimLeft; - lodash.trimRight = trimRight; - lodash.trunc = trunc; - lodash.unescape = unescape; - lodash.uniqueId = uniqueId; - lodash.words = words; + lodash.add = add + lodash.attempt = attempt + lodash.camelCase = camelCase + lodash.capitalize = capitalize + lodash.ceil = ceil + lodash.clone = clone + lodash.cloneDeep = cloneDeep + lodash.deburr = deburr + lodash.endsWith = endsWith + lodash.escape = escape + lodash.escapeRegExp = escapeRegExp + lodash.every = every + lodash.find = find + lodash.findIndex = findIndex + lodash.findKey = findKey + lodash.findLast = findLast + lodash.findLastIndex = findLastIndex + lodash.findLastKey = findLastKey + lodash.findWhere = findWhere + lodash.first = first + lodash.floor = floor + lodash.get = get + lodash.gt = gt + lodash.gte = gte + lodash.has = has + lodash.identity = identity + lodash.includes = includes + lodash.indexOf = indexOf + lodash.inRange = inRange + lodash.isArguments = isArguments + lodash.isArray = isArray + lodash.isBoolean = isBoolean + lodash.isDate = isDate + lodash.isElement = isElement + lodash.isEmpty = isEmpty + lodash.isEqual = isEqual + lodash.isError = isError + lodash.isFinite = isFinite + lodash.isFunction = isFunction + lodash.isMatch = isMatch + lodash.isNaN = isNaN + lodash.isNative = isNative + lodash.isNull = isNull + lodash.isNumber = isNumber + lodash.isObject = isObject + lodash.isPlainObject = isPlainObject + lodash.isRegExp = isRegExp + lodash.isString = isString + lodash.isTypedArray = isTypedArray + lodash.isUndefined = isUndefined + lodash.kebabCase = kebabCase + lodash.last = last + lodash.lastIndexOf = lastIndexOf + lodash.lt = lt + lodash.lte = lte + lodash.max = max + lodash.min = min + lodash.noConflict = noConflict + lodash.noop = noop + lodash.now = now + lodash.pad = pad + lodash.padLeft = padLeft + lodash.padRight = padRight + lodash.parseInt = parseInt + lodash.random = random + lodash.reduce = reduce + lodash.reduceRight = reduceRight + lodash.repeat = repeat + lodash.result = result + lodash.round = round + lodash.runInContext = runInContext + lodash.size = size + lodash.snakeCase = snakeCase + lodash.some = some + lodash.sortedIndex = sortedIndex + lodash.sortedLastIndex = sortedLastIndex + lodash.startCase = startCase + lodash.startsWith = startsWith + lodash.sum = sum + lodash.template = template + lodash.trim = trim + lodash.trimLeft = trimLeft + lodash.trimRight = trimRight + lodash.trunc = trunc + lodash.unescape = unescape + lodash.uniqueId = uniqueId + lodash.words = words // Add aliases. - lodash.all = every; - lodash.any = some; - lodash.contains = includes; - lodash.eq = isEqual; - lodash.detect = find; - lodash.foldl = reduce; - lodash.foldr = reduceRight; - lodash.head = first; - lodash.include = includes; - lodash.inject = reduce; - - mixin(lodash, (function() { - var source = {}; - baseForOwn(lodash, function(func, methodName) { - if (!lodash.prototype[methodName]) { - source[methodName] = func; - } - }); - return source; - }()), false); + lodash.all = every + lodash.any = some + lodash.contains = includes + lodash.eq = isEqual + lodash.detect = find + lodash.foldl = reduce + lodash.foldr = reduceRight + lodash.head = first + lodash.include = includes + lodash.inject = reduce + + mixin(lodash, (function () { + var source = {} + baseForOwn(lodash, function (func, methodName) { + if (!lodash.prototype[methodName]) { + source[methodName] = func + } + }) + return source + }()), false) - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ // Add functions capable of returning wrapped and unwrapped values when chaining. - lodash.sample = sample; + lodash.sample = sample - lodash.prototype.sample = function(n) { - if (!this.__chain__ && n == null) { - return sample(this.value()); - } - return this.thru(function(value) { - return sample(value, n); - }); - }; + lodash.prototype.sample = function (n) { + if (!this.__chain__ && n == null) { + return sample(this.value()) + } + return this.thru(function (value) { + return sample(value, n) + }) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * The semantic version number. @@ -23991,255 +24120,254 @@ module.exports = '1.0.7'; * @memberOf _ * @type string */ - lodash.VERSION = VERSION; + lodash.VERSION = VERSION // Assign default placeholders. - arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { - lodash[methodName].placeholder = lodash; - }); + arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function (methodName) { + lodash[methodName].placeholder = lodash + }) // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. - arrayEach(['drop', 'take'], function(methodName, index) { - LazyWrapper.prototype[methodName] = function(n) { - var filtered = this.__filtered__; - if (filtered && !index) { - return new LazyWrapper(this); - } - n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0); + arrayEach(['drop', 'take'], function (methodName, index) { + LazyWrapper.prototype[methodName] = function (n) { + var filtered = this.__filtered__ + if (filtered && !index) { + return new LazyWrapper(this) + } + n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0) - var result = this.clone(); - if (filtered) { - result.__takeCount__ = nativeMin(result.__takeCount__, n); - } else { - result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') }); - } - return result; - }; + var result = this.clone() + if (filtered) { + result.__takeCount__ = nativeMin(result.__takeCount__, n) + } else { + result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') }) + } + return result + } - LazyWrapper.prototype[methodName + 'Right'] = function(n) { - return this.reverse()[methodName](n).reverse(); - }; - }); + LazyWrapper.prototype[methodName + 'Right'] = function (n) { + return this.reverse()[methodName](n).reverse() + } + }) // Add `LazyWrapper` methods that accept an `iteratee` value. - arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { - var type = index + 1, - isFilter = type != LAZY_MAP_FLAG; - - LazyWrapper.prototype[methodName] = function(iteratee, thisArg) { - var result = this.clone(); - result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type }); - result.__filtered__ = result.__filtered__ || isFilter; - return result; - }; - }); + arrayEach(['filter', 'map', 'takeWhile'], function (methodName, index) { + var type = index + 1, + isFilter = type != LAZY_MAP_FLAG + + LazyWrapper.prototype[methodName] = function (iteratee, thisArg) { + var result = this.clone() + result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type }) + result.__filtered__ = result.__filtered__ || isFilter + return result + } + }) // Add `LazyWrapper` methods for `_.first` and `_.last`. - arrayEach(['first', 'last'], function(methodName, index) { - var takeName = 'take' + (index ? 'Right' : ''); + arrayEach(['first', 'last'], function (methodName, index) { + var takeName = 'take' + (index ? 'Right' : '') - LazyWrapper.prototype[methodName] = function() { - return this[takeName](1).value()[0]; - }; - }); + LazyWrapper.prototype[methodName] = function () { + return this[takeName](1).value()[0] + } + }) // Add `LazyWrapper` methods for `_.initial` and `_.rest`. - arrayEach(['initial', 'rest'], function(methodName, index) { - var dropName = 'drop' + (index ? '' : 'Right'); + arrayEach(['initial', 'rest'], function (methodName, index) { + var dropName = 'drop' + (index ? '' : 'Right') - LazyWrapper.prototype[methodName] = function() { - return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); - }; - }); + LazyWrapper.prototype[methodName] = function () { + return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1) + } + }) // Add `LazyWrapper` methods for `_.pluck` and `_.where`. - arrayEach(['pluck', 'where'], function(methodName, index) { - var operationName = index ? 'filter' : 'map', - createCallback = index ? baseMatches : property; + arrayEach(['pluck', 'where'], function (methodName, index) { + var operationName = index ? 'filter' : 'map', + createCallback = index ? baseMatches : property - LazyWrapper.prototype[methodName] = function(value) { - return this[operationName](createCallback(value)); - }; - }); + LazyWrapper.prototype[methodName] = function (value) { + return this[operationName](createCallback(value)) + } + }) - LazyWrapper.prototype.compact = function() { - return this.filter(identity); - }; + LazyWrapper.prototype.compact = function () { + return this.filter(identity) + } - LazyWrapper.prototype.reject = function(predicate, thisArg) { - predicate = getCallback(predicate, thisArg, 1); - return this.filter(function(value) { - return !predicate(value); - }); - }; + LazyWrapper.prototype.reject = function (predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 1) + return this.filter(function (value) { + return !predicate(value) + }) + } - LazyWrapper.prototype.slice = function(start, end) { - start = start == null ? 0 : (+start || 0); + LazyWrapper.prototype.slice = function (start, end) { + start = start == null ? 0 : (+start || 0) - var result = this; - if (result.__filtered__ && (start > 0 || end < 0)) { - return new LazyWrapper(result); - } - if (start < 0) { - result = result.takeRight(-start); - } else if (start) { - result = result.drop(start); - } - if (end !== undefined) { - end = (+end || 0); - result = end < 0 ? result.dropRight(-end) : result.take(end - start); - } - return result; - }; + var result = this + if (result.__filtered__ && (start > 0 || end < 0)) { + return new LazyWrapper(result) + } + if (start < 0) { + result = result.takeRight(-start) + } else if (start) { + result = result.drop(start) + } + if (end !== undefined) { + end = (+end || 0) + result = end < 0 ? result.dropRight(-end) : result.take(end - start) + } + return result + } - LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) { - return this.reverse().takeWhile(predicate, thisArg).reverse(); - }; + LazyWrapper.prototype.takeRightWhile = function (predicate, thisArg) { + return this.reverse().takeWhile(predicate, thisArg).reverse() + } - LazyWrapper.prototype.toArray = function() { - return this.take(POSITIVE_INFINITY); - }; + LazyWrapper.prototype.toArray = function () { + return this.take(POSITIVE_INFINITY) + } // Add `LazyWrapper` methods to `lodash.prototype`. - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName), - retUnwrapped = /^(?:first|last)$/.test(methodName), - lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName]; - - if (!lodashFunc) { - return; - } - lodash.prototype[methodName] = function() { - var args = retUnwrapped ? [1] : arguments, - chainAll = this.__chain__, - value = this.__wrapped__, - isHybrid = !!this.__actions__.length, - isLazy = value instanceof LazyWrapper, - iteratee = args[0], - useLazy = isLazy || isArray(value); - - if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { + baseForOwn(LazyWrapper.prototype, function (func, methodName) { + var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName), + retUnwrapped = /^(?:first|last)$/.test(methodName), + lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName] + + if (!lodashFunc) { + return + } + lodash.prototype[methodName] = function () { + var args = retUnwrapped ? [1] : arguments, + chainAll = this.__chain__, + value = this.__wrapped__, + isHybrid = !!this.__actions__.length, + isLazy = value instanceof LazyWrapper, + iteratee = args[0], + useLazy = isLazy || isArray(value) + + if (useLazy && checkIteratee && typeof iteratee === 'function' && iteratee.length != 1) { // Avoid lazy use if the iteratee has a "length" value other than `1`. - isLazy = useLazy = false; - } - var interceptor = function(value) { - return (retUnwrapped && chainAll) + isLazy = useLazy = false + } + var interceptor = function (value) { + return (retUnwrapped && chainAll) ? lodashFunc(value, 1)[0] - : lodashFunc.apply(undefined, arrayPush([value], args)); - }; + : lodashFunc.apply(undefined, arrayPush([value], args)) + } - var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined }, - onlyLazy = isLazy && !isHybrid; + var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined }, + onlyLazy = isLazy && !isHybrid - if (retUnwrapped && !chainAll) { - if (onlyLazy) { - value = value.clone(); - value.__actions__.push(action); - return func.call(value); - } - return lodashFunc.call(undefined, this.value())[0]; - } - if (!retUnwrapped && useLazy) { - value = onlyLazy ? value : new LazyWrapper(this); - var result = func.apply(value, args); - result.__actions__.push(action); - return new LodashWrapper(result, chainAll); - } - return this.thru(interceptor); - }; - }); + if (retUnwrapped && !chainAll) { + if (onlyLazy) { + value = value.clone() + value.__actions__.push(action) + return func.call(value) + } + return lodashFunc.call(undefined, this.value())[0] + } + if (!retUnwrapped && useLazy) { + value = onlyLazy ? value : new LazyWrapper(this) + var result = func.apply(value, args) + result.__actions__.push(action) + return new LodashWrapper(result, chainAll) + } + return this.thru(interceptor) + } + }) // Add `Array` and `String` methods to `lodash.prototype`. - arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) { - var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName], - chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', - retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName); - - lodash.prototype[methodName] = function() { - var args = arguments; - if (retUnwrapped && !this.__chain__) { - return func.apply(this.value(), args); - } - return this[chainName](function(value) { - return func.apply(value, args); - }); - }; - }); + arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function (methodName) { + var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName) + + lodash.prototype[methodName] = function () { + var args = arguments + if (retUnwrapped && !this.__chain__) { + return func.apply(this.value(), args) + } + return this[chainName](function (value) { + return func.apply(value, args) + }) + } + }) // Map minified function names to their real names. - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var lodashFunc = lodash[methodName]; - if (lodashFunc) { - var key = lodashFunc.name, - names = realNames[key] || (realNames[key] = []); + baseForOwn(LazyWrapper.prototype, function (func, methodName) { + var lodashFunc = lodash[methodName] + if (lodashFunc) { + var key = lodashFunc.name, + names = realNames[key] || (realNames[key] = []) - names.push({ 'name': methodName, 'func': lodashFunc }); - } - }); + names.push({ 'name': methodName, 'func': lodashFunc }) + } + }) - realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }]; + realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }] // Add functions to the lazy wrapper. - LazyWrapper.prototype.clone = lazyClone; - LazyWrapper.prototype.reverse = lazyReverse; - LazyWrapper.prototype.value = lazyValue; + LazyWrapper.prototype.clone = lazyClone + LazyWrapper.prototype.reverse = lazyReverse + LazyWrapper.prototype.value = lazyValue // Add chaining functions to the `lodash` wrapper. - lodash.prototype.chain = wrapperChain; - lodash.prototype.commit = wrapperCommit; - lodash.prototype.concat = wrapperConcat; - lodash.prototype.plant = wrapperPlant; - lodash.prototype.reverse = wrapperReverse; - lodash.prototype.toString = wrapperToString; - lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + lodash.prototype.chain = wrapperChain + lodash.prototype.commit = wrapperCommit + lodash.prototype.concat = wrapperConcat + lodash.prototype.plant = wrapperPlant + lodash.prototype.reverse = wrapperReverse + lodash.prototype.toString = wrapperToString + lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue // Add function aliases to the `lodash` wrapper. - lodash.prototype.collect = lodash.prototype.map; - lodash.prototype.head = lodash.prototype.first; - lodash.prototype.select = lodash.prototype.filter; - lodash.prototype.tail = lodash.prototype.rest; + lodash.prototype.collect = lodash.prototype.map + lodash.prototype.head = lodash.prototype.first + lodash.prototype.select = lodash.prototype.filter + lodash.prototype.tail = lodash.prototype.rest - return lodash; - } + return lodash + } - /*--------------------------------------------------------------------------*/ + /* -------------------------------------------------------------------------- */ // Export lodash. - var _ = runInContext(); + var _ = runInContext() // Some AMD build optimizers like r.js check for condition patterns like the following: - if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { + if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) { // Expose lodash to the global object when an AMD loader is present to avoid // errors in cases where lodash is loaded by a script tag and not intended // as an AMD module. See http://requirejs.org/docs/errors.html#mismatch for // more details. - root._ = _; + root._ = _ // Define as an anonymous module so, through path mapping, it can be // referenced as the "underscore" module. - define(function() { - return _; - }); - } + define(function () { + return _ + }) + } // Check for `exports` after `define` in case a build optimizer adds an `exports` object. - else if (freeExports && freeModule) { + else if (freeExports && freeModule) { // Export for Node.js or RingoJS. - if (moduleExports) { - (freeModule.exports = _)._ = _; - } + if (moduleExports) { + (freeModule.exports = _)._ = _ + } // Export for Rhino with CommonJS support. - else { - freeExports._ = _; - } - } - else { + else { + freeExports._ = _ + } + } else { // Export for a browser or Rhino. - root._ = _; - } -}.call(this)); - -}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],51:[function(_dereq_,module,exports){ + root._ = _ + } + }.call(this)) + }).call(this, typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}) + }, {}], + 51: [function (_dereq_, module, exports) { /* Copyright (c) 2012-2014 Chris Pettitt @@ -24262,316 +24390,316 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -module.exports = { - graphlib: _dereq_("./lib/graphlib"), + module.exports = { + graphlib: _dereq_('./lib/graphlib'), - layout: _dereq_("./lib/layout"), - debug: _dereq_("./lib/debug"), - util: { - time: _dereq_("./lib/util").time, - notime: _dereq_("./lib/util").notime - }, - version: _dereq_("./lib/version") -}; - -},{"./lib/debug":56,"./lib/graphlib":57,"./lib/layout":59,"./lib/util":79,"./lib/version":80}],52:[function(_dereq_,module,exports){ -"use strict"; + layout: _dereq_('./lib/layout'), + debug: _dereq_('./lib/debug'), + util: { + time: _dereq_('./lib/util').time, + notime: _dereq_('./lib/util').notime + }, + version: _dereq_('./lib/version') + } + }, {'./lib/debug': 56, './lib/graphlib': 57, './lib/layout': 59, './lib/util': 79, './lib/version': 80}], + 52: [function (_dereq_, module, exports) { + 'use strict' -var _ = _dereq_("./lodash"), - greedyFAS = _dereq_("./greedy-fas"); + var _ = _dereq_('./lodash'), + greedyFAS = _dereq_('./greedy-fas') -module.exports = { - run: run, - undo: undo -}; + module.exports = { + run: run, + undo: undo + } -function run(g) { - var fas = (g.graph().acyclicer === "greedy" + function run (g) { + var fas = (g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) - : dfsFAS(g)); - _.each(fas, function(e) { - var label = g.edge(e); - g.removeEdge(e); - label.forwardName = e.name; - label.reversed = true; - g.setEdge(e.w, e.v, label, _.uniqueId("rev")); - }); - - function weightFn(g) { - return function(e) { - return g.edge(e).weight; - }; - } -} - -function dfsFAS(g) { - var fas = [], - stack = {}, - visited = {}; + : dfsFAS(g)) + _.each(fas, function (e) { + var label = g.edge(e) + g.removeEdge(e) + label.forwardName = e.name + label.reversed = true + g.setEdge(e.w, e.v, label, _.uniqueId('rev')) + }) - function dfs(v) { - if (_.has(visited, v)) { - return; - } - visited[v] = true; - stack[v] = true; - _.each(g.outEdges(v), function(e) { - if (_.has(stack, e.w)) { - fas.push(e); - } else { - dfs(e.w); + function weightFn (g) { + return function (e) { + return g.edge(e).weight + } + } } - }); - delete stack[v]; - } - _.each(g.nodes(), dfs); - return fas; -} + function dfsFAS (g) { + var fas = [], + stack = {}, + visited = {} + + function dfs (v) { + if (_.has(visited, v)) { + return + } + visited[v] = true + stack[v] = true + _.each(g.outEdges(v), function (e) { + if (_.has(stack, e.w)) { + fas.push(e) + } else { + dfs(e.w) + } + }) + delete stack[v] + } -function undo(g) { - _.each(g.edges(), function(e) { - var label = g.edge(e); - if (label.reversed) { - g.removeEdge(e); + _.each(g.nodes(), dfs) + return fas + } - var forwardName = label.forwardName; - delete label.reversed; - delete label.forwardName; - g.setEdge(e.w, e.v, label, forwardName); - } - }); -} + function undo (g) { + _.each(g.edges(), function (e) { + var label = g.edge(e) + if (label.reversed) { + g.removeEdge(e) -},{"./greedy-fas":58,"./lodash":60}],53:[function(_dereq_,module,exports){ -var _ = _dereq_("./lodash"), - util = _dereq_("./util"); + var forwardName = label.forwardName + delete label.reversed + delete label.forwardName + g.setEdge(e.w, e.v, label, forwardName) + } + }) + } + }, {'./greedy-fas': 58, './lodash': 60}], + 53: [function (_dereq_, module, exports) { + var _ = _dereq_('./lodash'), + util = _dereq_('./util') -module.exports = addBorderSegments; + module.exports = addBorderSegments -function addBorderSegments(g) { - function dfs(v) { - var children = g.children(v), - node = g.node(v); - if (children.length) { - _.each(children, dfs); - } + function addBorderSegments (g) { + function dfs (v) { + var children = g.children(v), + node = g.node(v) + if (children.length) { + _.each(children, dfs) + } - if (_.has(node, "minRank")) { - node.borderLeft = []; - node.borderRight = []; - for (var rank = node.minRank, maxRank = node.maxRank + 1; + if (_.has(node, 'minRank')) { + node.borderLeft = [] + node.borderRight = [] + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { - addBorderNode(g, "borderLeft", "_bl", v, node, rank); - addBorderNode(g, "borderRight", "_br", v, node, rank); + addBorderNode(g, 'borderLeft', '_bl', v, node, rank) + addBorderNode(g, 'borderRight', '_br', v, node, rank) + } + } + } + + _.each(g.children(), dfs) } - } - } - _.each(g.children(), dfs); -} - -function addBorderNode(g, prop, prefix, sg, sgNode, rank) { - var label = { width: 0, height: 0, rank: rank, borderType: prop }, - prev = sgNode[prop][rank - 1], - curr = util.addDummyNode(g, "border", label, prefix); - sgNode[prop][rank] = curr; - g.setParent(curr, sg); - if (prev) { - g.setEdge(prev, curr, { weight: 1 }); - } -} + function addBorderNode (g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }, + prev = sgNode[prop][rank - 1], + curr = util.addDummyNode(g, 'border', label, prefix) + sgNode[prop][rank] = curr + g.setParent(curr, sg) + if (prev) { + g.setEdge(prev, curr, { weight: 1 }) + } + } + }, {'./lodash': 60, './util': 79}], + 54: [function (_dereq_, module, exports) { + 'use strict' -},{"./lodash":60,"./util":79}],54:[function(_dereq_,module,exports){ -"use strict"; + var _ = _dereq_('./lodash') -var _ = _dereq_("./lodash"); + module.exports = { + adjust: adjust, + undo: undo + } -module.exports = { - adjust: adjust, - undo: undo -}; + function adjust (g) { + var rankDir = g.graph().rankdir.toLowerCase() + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g) + } + } -function adjust(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === "lr" || rankDir === "rl") { - swapWidthHeight(g); - } -} + function undo (g) { + var rankDir = g.graph().rankdir.toLowerCase() + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g) + } -function undo(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === "bt" || rankDir === "rl") { - reverseY(g); - } + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g) + swapWidthHeight(g) + } + } - if (rankDir === "lr" || rankDir === "rl") { - swapXY(g); - swapWidthHeight(g); - } -} - -function swapWidthHeight(g) { - _.each(g.nodes(), function(v) { swapWidthHeightOne(g.node(v)); }); - _.each(g.edges(), function(e) { swapWidthHeightOne(g.edge(e)); }); -} - -function swapWidthHeightOne(attrs) { - var w = attrs.width; - attrs.width = attrs.height; - attrs.height = w; -} - -function reverseY(g) { - _.each(g.nodes(), function(v) { reverseYOne(g.node(v)); }); - - _.each(g.edges(), function(e) { - var edge = g.edge(e); - _.each(edge.points, reverseYOne); - if (_.has(edge, "y")) { - reverseYOne(edge); - } - }); -} + function swapWidthHeight (g) { + _.each(g.nodes(), function (v) { swapWidthHeightOne(g.node(v)) }) + _.each(g.edges(), function (e) { swapWidthHeightOne(g.edge(e)) }) + } -function reverseYOne(attrs) { - attrs.y = -attrs.y; -} + function swapWidthHeightOne (attrs) { + var w = attrs.width + attrs.width = attrs.height + attrs.height = w + } -function swapXY(g) { - _.each(g.nodes(), function(v) { swapXYOne(g.node(v)); }); + function reverseY (g) { + _.each(g.nodes(), function (v) { reverseYOne(g.node(v)) }) - _.each(g.edges(), function(e) { - var edge = g.edge(e); - _.each(edge.points, swapXYOne); - if (_.has(edge, "x")) { - swapXYOne(edge); - } - }); -} + _.each(g.edges(), function (e) { + var edge = g.edge(e) + _.each(edge.points, reverseYOne) + if (_.has(edge, 'y')) { + reverseYOne(edge) + } + }) + } + + function reverseYOne (attrs) { + attrs.y = -attrs.y + } + + function swapXY (g) { + _.each(g.nodes(), function (v) { swapXYOne(g.node(v)) }) -function swapXYOne(attrs) { - var x = attrs.x; - attrs.x = attrs.y; - attrs.y = x; -} + _.each(g.edges(), function (e) { + var edge = g.edge(e) + _.each(edge.points, swapXYOne) + if (_.has(edge, 'x')) { + swapXYOne(edge) + } + }) + } -},{"./lodash":60}],55:[function(_dereq_,module,exports){ + function swapXYOne (attrs) { + var x = attrs.x + attrs.x = attrs.y + attrs.y = x + } + }, {'./lodash': 60}], + 55: [function (_dereq_, module, exports) { /* * Simple doubly linked list implementation derived from Cormen, et al., * "Introduction to Algorithms". */ -module.exports = List; + module.exports = List -function List() { - var sentinel = {}; - sentinel._next = sentinel._prev = sentinel; - this._sentinel = sentinel; -} + function List () { + var sentinel = {} + sentinel._next = sentinel._prev = sentinel + this._sentinel = sentinel + } -List.prototype.dequeue = function() { - var sentinel = this._sentinel, - entry = sentinel._prev; - if (entry !== sentinel) { - unlink(entry); - return entry; - } -}; + List.prototype.dequeue = function () { + var sentinel = this._sentinel, + entry = sentinel._prev + if (entry !== sentinel) { + unlink(entry) + return entry + } + } -List.prototype.enqueue = function(entry) { - var sentinel = this._sentinel; - if (entry._prev && entry._next) { - unlink(entry); - } - entry._next = sentinel._next; - sentinel._next._prev = entry; - sentinel._next = entry; - entry._prev = sentinel; -}; - -List.prototype.toString = function() { - var strs = [], - sentinel = this._sentinel, - curr = sentinel._prev; - while (curr !== sentinel) { - strs.push(JSON.stringify(curr, filterOutLinks)); - curr = curr._prev; - } - return "[" + strs.join(", ") + "]"; -}; - -function unlink(entry) { - entry._prev._next = entry._next; - entry._next._prev = entry._prev; - delete entry._next; - delete entry._prev; -} - -function filterOutLinks(k, v) { - if (k !== "_next" && k !== "_prev") { - return v; - } -} + List.prototype.enqueue = function (entry) { + var sentinel = this._sentinel + if (entry._prev && entry._next) { + unlink(entry) + } + entry._next = sentinel._next + sentinel._next._prev = entry + sentinel._next = entry + entry._prev = sentinel + } + + List.prototype.toString = function () { + var strs = [], + sentinel = this._sentinel, + curr = sentinel._prev + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)) + curr = curr._prev + } + return '[' + strs.join(', ') + ']' + } + + function unlink (entry) { + entry._prev._next = entry._next + entry._next._prev = entry._prev + delete entry._next + delete entry._prev + } -},{}],56:[function(_dereq_,module,exports){ -var _ = _dereq_("./lodash"), - util = _dereq_("./util"), - Graph = _dereq_("./graphlib").Graph; + function filterOutLinks (k, v) { + if (k !== '_next' && k !== '_prev') { + return v + } + } + }, {}], + 56: [function (_dereq_, module, exports) { + var _ = _dereq_('./lodash'), + util = _dereq_('./util'), + Graph = _dereq_('./graphlib').Graph -module.exports = { - debugOrdering: debugOrdering -}; + module.exports = { + debugOrdering: debugOrdering + } /* istanbul ignore next */ -function debugOrdering(g) { - var layerMatrix = util.buildLayerMatrix(g); - - var h = new Graph({ compound: true, multigraph: true }).setGraph({}); + function debugOrdering (g) { + var layerMatrix = util.buildLayerMatrix(g) - _.each(g.nodes(), function(v) { - h.setNode(v, { label: v }); - h.setParent(v, "layer" + g.node(v).rank); - }); + var h = new Graph({ compound: true, multigraph: true }).setGraph({}) - _.each(g.edges(), function(e) { - h.setEdge(e.v, e.w, {}, e.name); - }); + _.each(g.nodes(), function (v) { + h.setNode(v, { label: v }) + h.setParent(v, 'layer' + g.node(v).rank) + }) - _.each(layerMatrix, function(layer, i) { - var layerV = "layer" + i; - h.setNode(layerV, { rank: "same" }); - _.reduce(layer, function(u, v) { - h.setEdge(u, v, { style: "invis" }); - return v; - }); - }); + _.each(g.edges(), function (e) { + h.setEdge(e.v, e.w, {}, e.name) + }) - return h; -} + _.each(layerMatrix, function (layer, i) { + var layerV = 'layer' + i + h.setNode(layerV, { rank: 'same' }) + _.reduce(layer, function (u, v) { + h.setEdge(u, v, { style: 'invis' }) + return v + }) + }) -},{"./graphlib":57,"./lodash":60,"./util":79}],57:[function(_dereq_,module,exports){ + return h + } + }, {'./graphlib': 57, './lodash': 60, './util': 79}], + 57: [function (_dereq_, module, exports) { /* global window */ -var graphlib; - -if (typeof _dereq_ === "function") { - try { - graphlib = _dereq_("graphlib"); - } catch (e) {} -} + var graphlib -if (!graphlib) { - graphlib = window.graphlib; -} + if (typeof _dereq_ === 'function') { + try { + graphlib = _dereq_('graphlib') + } catch (e) {} + } -module.exports = graphlib; + if (!graphlib) { + graphlib = window.graphlib + } -},{"graphlib":81}],58:[function(_dereq_,module,exports){ -var _ = _dereq_("./lodash"), - Graph = _dereq_("./graphlib").Graph, - List = _dereq_("./data/list"); + module.exports = graphlib + }, {'graphlib': 81}], + 58: [function (_dereq_, module, exports) { + var _ = _dereq_('./lodash'), + Graph = _dereq_('./graphlib').Graph, + List = _dereq_('./data/list') /* * A greedy heuristic for finding a feedback arc set for a graph. A feedback @@ -24580,173 +24708,173 @@ var _ = _dereq_("./lodash"), * effective heuristic for the feedback arc set problem." This implementation * adjusts that from the paper to allow for weighted edges. */ -module.exports = greedyFAS; + module.exports = greedyFAS -var DEFAULT_WEIGHT_FN = _.constant(1); + var DEFAULT_WEIGHT_FN = _.constant(1) -function greedyFAS(g, weightFn) { - if (g.nodeCount() <= 1) { - return []; - } - var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); - var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + function greedyFAS (g, weightFn) { + if (g.nodeCount() <= 1) { + return [] + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN) + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx) // Expand multi-edges - return _.flatten(_.map(results, function(e) { - return g.outEdges(e.v, e.w); - }), true); -} - -function doGreedyFAS(g, buckets, zeroIdx) { - var results = [], - sources = buckets[buckets.length - 1], - sinks = buckets[0]; - - var entry; - while (g.nodeCount()) { - while ((entry = sinks.dequeue())) { removeNode(g, buckets, zeroIdx, entry); } - while ((entry = sources.dequeue())) { removeNode(g, buckets, zeroIdx, entry); } - if (g.nodeCount()) { - for (var i = buckets.length - 2; i > 0; --i) { - entry = buckets[i].dequeue(); - if (entry) { - results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); - break; + return _.flatten(_.map(results, function (e) { + return g.outEdges(e.v, e.w) + }), true) + } + + function doGreedyFAS (g, buckets, zeroIdx) { + var results = [], + sources = buckets[buckets.length - 1], + sinks = buckets[0] + + var entry + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { removeNode(g, buckets, zeroIdx, entry) } + while ((entry = sources.dequeue())) { removeNode(g, buckets, zeroIdx, entry) } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue() + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)) + break + } + } + } } - } - } - } - return results; -} + return results + } -function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { - var results = collectPredecessors ? [] : undefined; + function removeNode (g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined - _.each(g.inEdges(entry.v), function(edge) { - var weight = g.edge(edge), - uEntry = g.node(edge.v); + _.each(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge), + uEntry = g.node(edge.v) - if (collectPredecessors) { - results.push({ v: edge.v, w: edge.w }); - } + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }) + } - uEntry.out -= weight; - assignBucket(buckets, zeroIdx, uEntry); - }); + uEntry.out -= weight + assignBucket(buckets, zeroIdx, uEntry) + }) - _.each(g.outEdges(entry.v), function(edge) { - var weight = g.edge(edge), - w = edge.w, - wEntry = g.node(w); - wEntry["in"] -= weight; - assignBucket(buckets, zeroIdx, wEntry); - }); + _.each(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge), + w = edge.w, + wEntry = g.node(w) + wEntry['in'] -= weight + assignBucket(buckets, zeroIdx, wEntry) + }) - g.removeNode(entry.v); + g.removeNode(entry.v) - return results; -} + return results + } -function buildState(g, weightFn) { - var fasGraph = new Graph(), - maxIn = 0, - maxOut = 0; + function buildState (g, weightFn) { + var fasGraph = new Graph(), + maxIn = 0, + maxOut = 0 - _.each(g.nodes(), function(v) { - fasGraph.setNode(v, { v: v, "in": 0, out: 0 }); - }); + _.each(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, 'in': 0, out: 0 }) + }) // Aggregate weights on nodes, but also sum the weights across multi-edges // into a single edge for the fasGraph. - _.each(g.edges(), function(e) { - var prevWeight = fasGraph.edge(e.v, e.w) || 0, - weight = weightFn(e), - edgeWeight = prevWeight + weight; - fasGraph.setEdge(e.v, e.w, edgeWeight); - maxOut = Math.max(maxOut, fasGraph.node(e.v).out += weight); - maxIn = Math.max(maxIn, fasGraph.node(e.w)["in"] += weight); - }); - - var buckets = _.range(maxOut + maxIn + 3).map(function() { return new List(); }); - var zeroIdx = maxIn + 1; - - _.each(fasGraph.nodes(), function(v) { - assignBucket(buckets, zeroIdx, fasGraph.node(v)); - }); - - return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; -} - -function assignBucket(buckets, zeroIdx, entry) { - if (!entry.out) { - buckets[0].enqueue(entry); - } else if (!entry["in"]) { - buckets[buckets.length - 1].enqueue(entry); - } else { - buckets[entry.out - entry["in"] + zeroIdx].enqueue(entry); - } -} - -},{"./data/list":55,"./graphlib":57,"./lodash":60}],59:[function(_dereq_,module,exports){ -"use strict"; - -var _ = _dereq_("./lodash"), - acyclic = _dereq_("./acyclic"), - normalize = _dereq_("./normalize"), - rank = _dereq_("./rank"), - normalizeRanks = _dereq_("./util").normalizeRanks, - parentDummyChains = _dereq_("./parent-dummy-chains"), - removeEmptyRanks = _dereq_("./util").removeEmptyRanks, - nestingGraph = _dereq_("./nesting-graph"), - addBorderSegments = _dereq_("./add-border-segments"), - coordinateSystem = _dereq_("./coordinate-system"), - order = _dereq_("./order"), - position = _dereq_("./position"), - util = _dereq_("./util"), - Graph = _dereq_("./graphlib").Graph; - -module.exports = layout; - -function layout(g, opts) { - var time = opts && opts.debugTiming ? util.time : util.notime; - time("layout", function() { - var layoutGraph = time(" buildLayoutGraph", - function() { return buildLayoutGraph(g); }); - time(" runLayout", function() { runLayout(layoutGraph, time); }); - time(" updateInputGraph", function() { updateInputGraph(g, layoutGraph); }); - }); -} - -function runLayout(g, time) { - time(" makeSpaceForEdgeLabels", function() { makeSpaceForEdgeLabels(g); }); - time(" removeSelfEdges", function() { removeSelfEdges(g); }); - time(" acyclic", function() { acyclic.run(g); }); - time(" nestingGraph.run", function() { nestingGraph.run(g); }); - time(" rank", function() { rank(util.asNonCompoundGraph(g)); }); - time(" injectEdgeLabelProxies", function() { injectEdgeLabelProxies(g); }); - time(" removeEmptyRanks", function() { removeEmptyRanks(g); }); - time(" nestingGraph.cleanup", function() { nestingGraph.cleanup(g); }); - time(" normalizeRanks", function() { normalizeRanks(g); }); - time(" assignRankMinMax", function() { assignRankMinMax(g); }); - time(" removeEdgeLabelProxies", function() { removeEdgeLabelProxies(g); }); - time(" normalize.run", function() { normalize.run(g); }); - time(" parentDummyChains", function() { parentDummyChains(g); }); - time(" addBorderSegments", function() { addBorderSegments(g); }); - time(" order", function() { order(g); }); - time(" insertSelfEdges", function() { insertSelfEdges(g); }); - time(" adjustCoordinateSystem", function() { coordinateSystem.adjust(g); }); - time(" position", function() { position(g); }); - time(" positionSelfEdges", function() { positionSelfEdges(g); }); - time(" removeBorderNodes", function() { removeBorderNodes(g); }); - time(" normalize.undo", function() { normalize.undo(g); }); - time(" fixupEdgeLabelCoords", function() { fixupEdgeLabelCoords(g); }); - time(" undoCoordinateSystem", function() { coordinateSystem.undo(g); }); - time(" translateGraph", function() { translateGraph(g); }); - time(" assignNodeIntersects", function() { assignNodeIntersects(g); }); - time(" reversePoints", function() { reversePointsForReversedEdges(g); }); - time(" acyclic.undo", function() { acyclic.undo(g); }); -} + _.each(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0, + weight = weightFn(e), + edgeWeight = prevWeight + weight + fasGraph.setEdge(e.v, e.w, edgeWeight) + maxOut = Math.max(maxOut, fasGraph.node(e.v).out += weight) + maxIn = Math.max(maxIn, fasGraph.node(e.w)['in'] += weight) + }) + + var buckets = _.range(maxOut + maxIn + 3).map(function () { return new List() }) + var zeroIdx = maxIn + 1 + + _.each(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)) + }) + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx } + } + + function assignBucket (buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry) + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry) + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry) + } + } + }, {'./data/list': 55, './graphlib': 57, './lodash': 60}], + 59: [function (_dereq_, module, exports) { + 'use strict' + + var _ = _dereq_('./lodash'), + acyclic = _dereq_('./acyclic'), + normalize = _dereq_('./normalize'), + rank = _dereq_('./rank'), + normalizeRanks = _dereq_('./util').normalizeRanks, + parentDummyChains = _dereq_('./parent-dummy-chains'), + removeEmptyRanks = _dereq_('./util').removeEmptyRanks, + nestingGraph = _dereq_('./nesting-graph'), + addBorderSegments = _dereq_('./add-border-segments'), + coordinateSystem = _dereq_('./coordinate-system'), + order = _dereq_('./order'), + position = _dereq_('./position'), + util = _dereq_('./util'), + Graph = _dereq_('./graphlib').Graph + + module.exports = layout + + function layout (g, opts) { + var time = opts && opts.debugTiming ? util.time : util.notime + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', + function () { return buildLayoutGraph(g) }) + time(' runLayout', function () { runLayout(layoutGraph, time) }) + time(' updateInputGraph', function () { updateInputGraph(g, layoutGraph) }) + }) + } + + function runLayout (g, time) { + time(' makeSpaceForEdgeLabels', function () { makeSpaceForEdgeLabels(g) }) + time(' removeSelfEdges', function () { removeSelfEdges(g) }) + time(' acyclic', function () { acyclic.run(g) }) + time(' nestingGraph.run', function () { nestingGraph.run(g) }) + time(' rank', function () { rank(util.asNonCompoundGraph(g)) }) + time(' injectEdgeLabelProxies', function () { injectEdgeLabelProxies(g) }) + time(' removeEmptyRanks', function () { removeEmptyRanks(g) }) + time(' nestingGraph.cleanup', function () { nestingGraph.cleanup(g) }) + time(' normalizeRanks', function () { normalizeRanks(g) }) + time(' assignRankMinMax', function () { assignRankMinMax(g) }) + time(' removeEdgeLabelProxies', function () { removeEdgeLabelProxies(g) }) + time(' normalize.run', function () { normalize.run(g) }) + time(' parentDummyChains', function () { parentDummyChains(g) }) + time(' addBorderSegments', function () { addBorderSegments(g) }) + time(' order', function () { order(g) }) + time(' insertSelfEdges', function () { insertSelfEdges(g) }) + time(' adjustCoordinateSystem', function () { coordinateSystem.adjust(g) }) + time(' position', function () { position(g) }) + time(' positionSelfEdges', function () { positionSelfEdges(g) }) + time(' removeBorderNodes', function () { removeBorderNodes(g) }) + time(' normalize.undo', function () { normalize.undo(g) }) + time(' fixupEdgeLabelCoords', function () { fixupEdgeLabelCoords(g) }) + time(' undoCoordinateSystem', function () { coordinateSystem.undo(g) }) + time(' translateGraph', function () { translateGraph(g) }) + time(' assignNodeIntersects', function () { assignNodeIntersects(g) }) + time(' reversePoints', function () { reversePointsForReversedEdges(g) }) + time(' acyclic.undo', function () { acyclic.undo(g) }) + } /* * Copies final layout information from the layout graph back to the input @@ -24754,48 +24882,52 @@ function runLayout(g, time) { * to the input graph, so it serves as a good place to determine what * attributes can influence layout. */ -function updateInputGraph(inputGraph, layoutGraph) { - _.each(inputGraph.nodes(), function(v) { - var inputLabel = inputGraph.node(v), - layoutLabel = layoutGraph.node(v); - - if (inputLabel) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; + function updateInputGraph (inputGraph, layoutGraph) { + _.each(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v), + layoutLabel = layoutGraph.node(v) + + if (inputLabel) { + inputLabel.x = layoutLabel.x + inputLabel.y = layoutLabel.y + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width + inputLabel.height = layoutLabel.height + } + } + }) - if (layoutGraph.children(v).length) { - inputLabel.width = layoutLabel.width; - inputLabel.height = layoutLabel.height; - } - } - }); + _.each(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e), + layoutLabel = layoutGraph.edge(e) - _.each(inputGraph.edges(), function(e) { - var inputLabel = inputGraph.edge(e), - layoutLabel = layoutGraph.edge(e); + inputLabel.points = layoutLabel.points + if (_.has(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x + inputLabel.y = layoutLabel.y + } + }) - inputLabel.points = layoutLabel.points; - if (_.has(layoutLabel, "x")) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - } - }); - - inputGraph.graph().width = layoutGraph.graph().width; - inputGraph.graph().height = layoutGraph.graph().height; -} - -var graphNumAttrs = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"], - graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: "tb" }, - graphAttrs = ["acyclicer", "ranker", "rankdir", "align"], - nodeNumAttrs = ["width", "height"], - nodeDefaults = { width: 0, height: 0 }, - edgeNumAttrs = ["minlen", "weight", "width", "height", "labeloffset"], - edgeDefaults = { - minlen: 1, weight: 1, width: 0, height: 0, - labeloffset: 10, labelpos: "r" - }, - edgeAttrs = ["labelpos"]; + inputGraph.graph().width = layoutGraph.graph().width + inputGraph.graph().height = layoutGraph.graph().height + } + + var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy'], + graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }, + graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align'], + nodeNumAttrs = ['width', 'height'], + nodeDefaults = { width: 0, height: 0 }, + edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset'], + edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r' + }, + edgeAttrs = ['labelpos'] /* * Constructs a new graph from the input graph, which can be used for layout. @@ -24803,31 +24935,31 @@ var graphNumAttrs = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"], * layout graph. Thus this function serves as a good place to determine what * attributes can influence layout. */ -function buildLayoutGraph(inputGraph) { - var g = new Graph({ multigraph: true, compound: true }), - graph = canonicalize(inputGraph.graph()); + function buildLayoutGraph (inputGraph) { + var g = new Graph({ multigraph: true, compound: true }), + graph = canonicalize(inputGraph.graph()) - g.setGraph(_.merge({}, + g.setGraph(_.merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), - _.pick(graph, graphAttrs))); + _.pick(graph, graphAttrs))) - _.each(inputGraph.nodes(), function(v) { - var node = canonicalize(inputGraph.node(v)); - g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); - g.setParent(v, inputGraph.parent(v)); - }); + _.each(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)) + g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)) + g.setParent(v, inputGraph.parent(v)) + }) - _.each(inputGraph.edges(), function(e) { - var edge = canonicalize(inputGraph.edge(e)); - g.setEdge(e, _.merge({}, + _.each(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)) + g.setEdge(e, _.merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), - _.pick(edge, edgeAttrs))); - }); + _.pick(edge, edgeAttrs))) + }) - return g; -} + return g + } /* * This idea comes from the Gansner paper: to account for edge labels in our @@ -24837,21 +24969,21 @@ function buildLayoutGraph(inputGraph) { * We also add some minimal padding to the width to push the label for the edge * away from the edge itself a bit. */ -function makeSpaceForEdgeLabels(g) { - var graph = g.graph(); - graph.ranksep /= 2; - _.each(g.edges(), function(e) { - var edge = g.edge(e); - edge.minlen *= 2; - if (edge.labelpos.toLowerCase() !== "c") { - if (graph.rankdir === "TB" || graph.rankdir === "BT") { - edge.width += edge.labeloffset; - } else { - edge.height += edge.labeloffset; + function makeSpaceForEdgeLabels (g) { + var graph = g.graph() + graph.ranksep /= 2 + _.each(g.edges(), function (e) { + var edge = g.edge(e) + edge.minlen *= 2 + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset + } else { + edge.height += edge.labeloffset + } + } + }) } - } - }); -} /* * Creates temporary dummy nodes that capture the rank in which each edge's @@ -24859,239 +24991,240 @@ function makeSpaceForEdgeLabels(g) { * so that we can safely remove empty ranks while preserving balance for the * label's position. */ -function injectEdgeLabelProxies(g) { - _.each(g.edges(), function(e) { - var edge = g.edge(e); - if (edge.width && edge.height) { - var v = g.node(e.v), - w = g.node(e.w), - label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; - util.addDummyNode(g, "edge-proxy", label, "_ep"); - } - }); -} - -function assignRankMinMax(g) { - var maxRank = 0; - _.each(g.nodes(), function(v) { - var node = g.node(v); - if (node.borderTop) { - node.minRank = g.node(node.borderTop).rank; - node.maxRank = g.node(node.borderBottom).rank; - maxRank = _.max(maxRank, node.maxRank); - } - }); - g.graph().maxRank = maxRank; -} - -function removeEdgeLabelProxies(g) { - _.each(g.nodes(), function(v) { - var node = g.node(v); - if (node.dummy === "edge-proxy") { - g.edge(node.e).labelRank = node.rank; - g.removeNode(v); - } - }); -} - -function translateGraph(g) { - var minX = Number.POSITIVE_INFINITY, - maxX = 0, - minY = Number.POSITIVE_INFINITY, - maxY = 0, - graphLabel = g.graph(), - marginX = graphLabel.marginx || 0, - marginY = graphLabel.marginy || 0; - - function getExtremes(attrs) { - var x = attrs.x, - y = attrs.y, - w = attrs.width, - h = attrs.height; - minX = Math.min(minX, x - w / 2); - maxX = Math.max(maxX, x + w / 2); - minY = Math.min(minY, y - h / 2); - maxY = Math.max(maxY, y + h / 2); - } + function injectEdgeLabelProxies (g) { + _.each(g.edges(), function (e) { + var edge = g.edge(e) + if (edge.width && edge.height) { + var v = g.node(e.v), + w = g.node(e.w), + label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e } + util.addDummyNode(g, 'edge-proxy', label, '_ep') + } + }) + } - _.each(g.nodes(), function(v) { getExtremes(g.node(v)); }); - _.each(g.edges(), function(e) { - var edge = g.edge(e); - if (_.has(edge, "x")) { - getExtremes(edge); - } - }); - - minX -= marginX; - minY -= marginY; - - _.each(g.nodes(), function(v) { - var node = g.node(v); - node.x -= minX; - node.y -= minY; - }); - - _.each(g.edges(), function(e) { - var edge = g.edge(e); - _.each(edge.points, function(p) { - p.x -= minX; - p.y -= minY; - }); - if (_.has(edge, "x")) { edge.x -= minX; } - if (_.has(edge, "y")) { edge.y -= minY; } - }); - - graphLabel.width = maxX - minX + marginX; - graphLabel.height = maxY - minY + marginY; -} - -function assignNodeIntersects(g) { - _.each(g.edges(), function(e) { - var edge = g.edge(e), - nodeV = g.node(e.v), - nodeW = g.node(e.w), - p1, p2; - if (!edge.points) { - edge.points = []; - p1 = nodeW; - p2 = nodeV; - } else { - p1 = edge.points[0]; - p2 = edge.points[edge.points.length - 1]; - } - edge.points.unshift(util.intersectRect(nodeV, p1)); - edge.points.push(util.intersectRect(nodeW, p2)); - }); -} - -function fixupEdgeLabelCoords(g) { - _.each(g.edges(), function(e) { - var edge = g.edge(e); - if (_.has(edge, "x")) { - if (edge.labelpos === "l" || edge.labelpos === "r") { - edge.width -= edge.labeloffset; - } - switch (edge.labelpos) { - case "l": edge.x -= edge.width / 2 + edge.labeloffset; break; - case "r": edge.x += edge.width / 2 + edge.labeloffset; break; + function assignRankMinMax (g) { + var maxRank = 0 + _.each(g.nodes(), function (v) { + var node = g.node(v) + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank + node.maxRank = g.node(node.borderBottom).rank + maxRank = _.max(maxRank, node.maxRank) + } + }) + g.graph().maxRank = maxRank } - } - }); -} - -function reversePointsForReversedEdges(g) { - _.each(g.edges(), function(e) { - var edge = g.edge(e); - if (edge.reversed) { - edge.points.reverse(); - } - }); -} - -function removeBorderNodes(g) { - _.each(g.nodes(), function(v) { - if (g.children(v).length) { - var node = g.node(v), - t = g.node(node.borderTop), - b = g.node(node.borderBottom), - l = g.node(_.last(node.borderLeft)), - r = g.node(_.last(node.borderRight)); - - node.width = Math.abs(r.x - l.x); - node.height = Math.abs(b.y - t.y); - node.x = l.x + node.width / 2; - node.y = t.y + node.height / 2; - } - }); - _.each(g.nodes(), function(v) { - if (g.node(v).dummy === "border") { - g.removeNode(v); - } - }); -} - -function removeSelfEdges(g) { - _.each(g.edges(), function(e) { - if (e.v === e.w) { - var node = g.node(e.v); - if (!node.selfEdges) { - node.selfEdges = []; - } - node.selfEdges.push({ e: e, label: g.edge(e) }); - g.removeEdge(e); - } - }); -} - -function insertSelfEdges(g) { - var layers = util.buildLayerMatrix(g); - _.each(layers, function(layer) { - var orderShift = 0; - _.each(layer, function(v, i) { - var node = g.node(v); - node.order = i + orderShift; - _.each(node.selfEdges, function(selfEdge) { - util.addDummyNode(g, "selfedge", { - width: selfEdge.label.width, - height: selfEdge.label.height, - rank: node.rank, - order: i + (++orderShift), - e: selfEdge.e, - label: selfEdge.label - }, "_se"); - }); - delete node.selfEdges; - }); - }); -} - -function positionSelfEdges(g) { - _.each(g.nodes(), function(v) { - var node = g.node(v); - if (node.dummy === "selfedge") { - var selfNode = g.node(node.e.v), - x = selfNode.x + selfNode.width / 2, - y = selfNode.y, - dx = node.x - x, - dy = selfNode.height / 2; - g.setEdge(node.e, node.label); - g.removeNode(v); - node.label.points = [ + function removeEdgeLabelProxies (g) { + _.each(g.nodes(), function (v) { + var node = g.node(v) + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank + g.removeNode(v) + } + }) + } + + function translateGraph (g) { + var minX = Number.POSITIVE_INFINITY, + maxX = 0, + minY = Number.POSITIVE_INFINITY, + maxY = 0, + graphLabel = g.graph(), + marginX = graphLabel.marginx || 0, + marginY = graphLabel.marginy || 0 + + function getExtremes (attrs) { + var x = attrs.x, + y = attrs.y, + w = attrs.width, + h = attrs.height + minX = Math.min(minX, x - w / 2) + maxX = Math.max(maxX, x + w / 2) + minY = Math.min(minY, y - h / 2) + maxY = Math.max(maxY, y + h / 2) + } + + _.each(g.nodes(), function (v) { getExtremes(g.node(v)) }) + _.each(g.edges(), function (e) { + var edge = g.edge(e) + if (_.has(edge, 'x')) { + getExtremes(edge) + } + }) + + minX -= marginX + minY -= marginY + + _.each(g.nodes(), function (v) { + var node = g.node(v) + node.x -= minX + node.y -= minY + }) + + _.each(g.edges(), function (e) { + var edge = g.edge(e) + _.each(edge.points, function (p) { + p.x -= minX + p.y -= minY + }) + if (_.has(edge, 'x')) { edge.x -= minX } + if (_.has(edge, 'y')) { edge.y -= minY } + }) + + graphLabel.width = maxX - minX + marginX + graphLabel.height = maxY - minY + marginY + } + + function assignNodeIntersects (g) { + _.each(g.edges(), function (e) { + var edge = g.edge(e), + nodeV = g.node(e.v), + nodeW = g.node(e.w), + p1, p2 + if (!edge.points) { + edge.points = [] + p1 = nodeW + p2 = nodeV + } else { + p1 = edge.points[0] + p2 = edge.points[edge.points.length - 1] + } + edge.points.unshift(util.intersectRect(nodeV, p1)) + edge.points.push(util.intersectRect(nodeW, p2)) + }) + } + + function fixupEdgeLabelCoords (g) { + _.each(g.edges(), function (e) { + var edge = g.edge(e) + if (_.has(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset + } + switch (edge.labelpos) { + case 'l': edge.x -= edge.width / 2 + edge.labeloffset; break + case 'r': edge.x += edge.width / 2 + edge.labeloffset; break + } + } + }) + } + + function reversePointsForReversedEdges (g) { + _.each(g.edges(), function (e) { + var edge = g.edge(e) + if (edge.reversed) { + edge.points.reverse() + } + }) + } + + function removeBorderNodes (g) { + _.each(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v), + t = g.node(node.borderTop), + b = g.node(node.borderBottom), + l = g.node(_.last(node.borderLeft)), + r = g.node(_.last(node.borderRight)) + + node.width = Math.abs(r.x - l.x) + node.height = Math.abs(b.y - t.y) + node.x = l.x + node.width / 2 + node.y = t.y + node.height / 2 + } + }) + + _.each(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v) + } + }) + } + + function removeSelfEdges (g) { + _.each(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v) + if (!node.selfEdges) { + node.selfEdges = [] + } + node.selfEdges.push({ e: e, label: g.edge(e) }) + g.removeEdge(e) + } + }) + } + + function insertSelfEdges (g) { + var layers = util.buildLayerMatrix(g) + _.each(layers, function (layer) { + var orderShift = 0 + _.each(layer, function (v, i) { + var node = g.node(v) + node.order = i + orderShift + _.each(node.selfEdges, function (selfEdge) { + util.addDummyNode(g, 'selfedge', { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + (++orderShift), + e: selfEdge.e, + label: selfEdge.label + }, '_se') + }) + delete node.selfEdges + }) + }) + } + + function positionSelfEdges (g) { + _.each(g.nodes(), function (v) { + var node = g.node(v) + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v), + x = selfNode.x + selfNode.width / 2, + y = selfNode.y, + dx = node.x - x, + dy = selfNode.height / 2 + g.setEdge(node.e, node.label) + g.removeNode(v) + node.label.points = [ { x: x + 2 * dx / 3, y: y - dy }, { x: x + 5 * dx / 6, y: y - dy }, - { x: x + dx , y: y }, + { x: x + dx, y: y }, { x: x + 5 * dx / 6, y: y + dy }, - { x: x + 2 * dx / 3, y: y + dy }, - ]; - node.label.x = node.x; - node.label.y = node.y; - } - }); -} - -function selectNumberAttrs(obj, attrs) { - return _.mapValues(_.pick(obj, attrs), Number); -} - -function canonicalize(attrs) { - var newAttrs = {}; - _.each(attrs, function(v, k) { - newAttrs[k.toLowerCase()] = v; - }); - return newAttrs; -} - -},{"./acyclic":52,"./add-border-segments":53,"./coordinate-system":54,"./graphlib":57,"./lodash":60,"./nesting-graph":61,"./normalize":62,"./order":67,"./parent-dummy-chains":72,"./position":74,"./rank":76,"./util":79}],60:[function(_dereq_,module,exports){ -module.exports=_dereq_(48) -},{"lodash":101}],61:[function(_dereq_,module,exports){ -var _ = _dereq_("./lodash"), - util = _dereq_("./util"); - -module.exports = { - run: run, - cleanup: cleanup -}; + { x: x + 2 * dx / 3, y: y + dy } + ] + node.label.x = node.x + node.label.y = node.y + } + }) + } + + function selectNumberAttrs (obj, attrs) { + return _.mapValues(_.pick(obj, attrs), Number) + } + + function canonicalize (attrs) { + var newAttrs = {} + _.each(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v + }) + return newAttrs + } + }, {'./acyclic': 52, './add-border-segments': 53, './coordinate-system': 54, './graphlib': 57, './lodash': 60, './nesting-graph': 61, './normalize': 62, './order': 67, './parent-dummy-chains': 72, './position': 74, './rank': 76, './util': 79}], + 60: [function (_dereq_, module, exports) { + module.exports = _dereq_(48) + }, {'lodash': 101}], + 61: [function (_dereq_, module, exports) { + var _ = _dereq_('./lodash'), + util = _dereq_('./util') + + module.exports = { + run: run, + cleanup: cleanup + } /* * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, @@ -25116,118 +25249,118 @@ module.exports = { * The nesting graph idea comes from Sander, "Layout of Compound Directed * Graphs." */ -function run(g) { - var root = util.addDummyNode(g, "root", {}, "_root"), - depths = treeDepths(g), - height = _.max(depths) - 1, - nodeSep = 2 * height + 1; + function run (g) { + var root = util.addDummyNode(g, 'root', {}, '_root'), + depths = treeDepths(g), + height = _.max(depths) - 1, + nodeSep = 2 * height + 1 - g.graph().nestingRoot = root; + g.graph().nestingRoot = root // Multiply minlen by nodeSep to align nodes on non-border ranks. - _.each(g.edges(), function(e) { g.edge(e).minlen *= nodeSep; }); + _.each(g.edges(), function (e) { g.edge(e).minlen *= nodeSep }) // Calculate a weight that is sufficient to keep subgraphs vertically compact - var weight = sumWeights(g) + 1; + var weight = sumWeights(g) + 1 // Create border nodes and link them up - _.each(g.children(), function(child) { - dfs(g, root, nodeSep, weight, height, depths, child); - }); + _.each(g.children(), function (child) { + dfs(g, root, nodeSep, weight, height, depths, child) + }) // Save the multiplier for node layers for later removal of empty border // layers. - g.graph().nodeRankFactor = nodeSep; -} - -function dfs(g, root, nodeSep, weight, height, depths, v) { - var children = g.children(v); - if (!children.length) { - if (v !== root) { - g.setEdge(root, v, { weight: 0, minlen: nodeSep }); - } - return; - } + g.graph().nodeRankFactor = nodeSep + } - var top = util.addBorderNode(g, "_bt"), - bottom = util.addBorderNode(g, "_bb"), - label = g.node(v); - - g.setParent(top, v); - label.borderTop = top; - g.setParent(bottom, v); - label.borderBottom = bottom; - - _.each(children, function(child) { - dfs(g, root, nodeSep, weight, height, depths, child); - - var childNode = g.node(child), - childTop = childNode.borderTop ? childNode.borderTop : child, - childBottom = childNode.borderBottom ? childNode.borderBottom : child, - thisWeight = childNode.borderTop ? weight : 2 * weight, - minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; - - g.setEdge(top, childTop, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true - }); - - g.setEdge(childBottom, bottom, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true - }); - }); - - if (!g.parent(v)) { - g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); - } -} + function dfs (g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v) + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }) + } + return + } -function treeDepths(g) { - var depths = {}; - function dfs(v, depth) { - var children = g.children(v); - if (children && children.length) { - _.each(children, function(child) { - dfs(child, depth + 1); - }); - } - depths[v] = depth; - } - _.each(g.children(), function(v) { dfs(v, 1); }); - return depths; -} - -function sumWeights(g) { - return _.reduce(g.edges(), function(acc, e) { - return acc + g.edge(e).weight; - }, 0); -} - -function cleanup(g) { - var graphLabel = g.graph(); - g.removeNode(graphLabel.nestingRoot); - delete graphLabel.nestingRoot; - _.each(g.edges(), function(e) { - var edge = g.edge(e); - if (edge.nestingEdge) { - g.removeEdge(e); - } - }); -} + var top = util.addBorderNode(g, '_bt'), + bottom = util.addBorderNode(g, '_bb'), + label = g.node(v) + + g.setParent(top, v) + label.borderTop = top + g.setParent(bottom, v) + label.borderBottom = bottom + + _.each(children, function (child) { + dfs(g, root, nodeSep, weight, height, depths, child) + + var childNode = g.node(child), + childTop = childNode.borderTop ? childNode.borderTop : child, + childBottom = childNode.borderBottom ? childNode.borderBottom : child, + thisWeight = childNode.borderTop ? weight : 2 * weight, + minlen = childTop !== childBottom ? 1 : height - depths[v] + 1 + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true + }) + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true + }) + }) + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }) + } + } + + function treeDepths (g) { + var depths = {} + function dfs (v, depth) { + var children = g.children(v) + if (children && children.length) { + _.each(children, function (child) { + dfs(child, depth + 1) + }) + } + depths[v] = depth + } + _.each(g.children(), function (v) { dfs(v, 1) }) + return depths + } + + function sumWeights (g) { + return _.reduce(g.edges(), function (acc, e) { + return acc + g.edge(e).weight + }, 0) + } -},{"./lodash":60,"./util":79}],62:[function(_dereq_,module,exports){ -"use strict"; + function cleanup (g) { + var graphLabel = g.graph() + g.removeNode(graphLabel.nestingRoot) + delete graphLabel.nestingRoot + _.each(g.edges(), function (e) { + var edge = g.edge(e) + if (edge.nestingEdge) { + g.removeEdge(e) + } + }) + } + }, {'./lodash': 60, './util': 79}], + 62: [function (_dereq_, module, exports) { + 'use strict' -var _ = _dereq_("./lodash"), - util = _dereq_("./util"); + var _ = _dereq_('./lodash'), + util = _dereq_('./util') -module.exports = { - run: run, - undo: undo -}; + module.exports = { + run: run, + undo: undo + } /* * Breaks any long edges in the graph into short segments that span 1 layer @@ -25245,100 +25378,102 @@ module.exports = { * 3. The graph is augmented with a "dummyChains" attribute which contains * the first dummy in each chain of dummy nodes produced. */ -function run(g) { - g.graph().dummyChains = []; - _.each(g.edges(), function(edge) { normalizeEdge(g, edge); }); -} - -function normalizeEdge(g, e) { - var v = e.v, - vRank = g.node(v).rank, - w = e.w, - wRank = g.node(w).rank, - name = e.name, - edgeLabel = g.edge(e), - labelRank = edgeLabel.labelRank; - - if (wRank === vRank + 1) return; - - g.removeEdge(e); - - var dummy, attrs, i; - for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { - edgeLabel.points = []; - attrs = { - width: 0, height: 0, - edgeLabel: edgeLabel, edgeObj: e, - rank: vRank - }; - dummy = util.addDummyNode(g, "edge", attrs, "_d"); - if (vRank === labelRank) { - attrs.width = edgeLabel.width; - attrs.height = edgeLabel.height; - attrs.dummy = "edge-label"; - attrs.labelpos = edgeLabel.labelpos; - } - g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); - if (i === 0) { - g.graph().dummyChains.push(dummy); - } - v = dummy; - } - - g.setEdge(v, w, { weight: edgeLabel.weight }, name); -} - -function undo(g) { - _.each(g.graph().dummyChains, function(v) { - var node = g.node(v), - origLabel = node.edgeLabel, - w; - g.setEdge(node.edgeObj, origLabel); - while (node.dummy) { - w = g.successors(v)[0]; - g.removeNode(v); - origLabel.points.push({ x: node.x, y: node.y }); - if (node.dummy === "edge-label") { - origLabel.x = node.x; - origLabel.y = node.y; - origLabel.width = node.width; - origLabel.height = node.height; - } - v = w; - node = g.node(v); - } - }); -} - -},{"./lodash":60,"./util":79}],63:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"); - -module.exports = addSubgraphConstraints; - -function addSubgraphConstraints(g, cg, vs) { - var prev = {}, - rootPrev; - - _.each(vs, function(v) { - var child = g.parent(v), - parent, - prevChild; - while (child) { - parent = g.parent(child); - if (parent) { - prevChild = prev[parent]; - prev[parent] = child; - } else { - prevChild = rootPrev; - rootPrev = child; - } - if (prevChild && prevChild !== child) { - cg.setEdge(prevChild, child); - return; + function run (g) { + g.graph().dummyChains = [] + _.each(g.edges(), function (edge) { normalizeEdge(g, edge) }) + } + + function normalizeEdge (g, e) { + var v = e.v, + vRank = g.node(v).rank, + w = e.w, + wRank = g.node(w).rank, + name = e.name, + edgeLabel = g.edge(e), + labelRank = edgeLabel.labelRank + + if (wRank === vRank + 1) return + + g.removeEdge(e) + + var dummy, attrs, i + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = [] + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank + } + dummy = util.addDummyNode(g, 'edge', attrs, '_d') + if (vRank === labelRank) { + attrs.width = edgeLabel.width + attrs.height = edgeLabel.height + attrs.dummy = 'edge-label' + attrs.labelpos = edgeLabel.labelpos + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name) + if (i === 0) { + g.graph().dummyChains.push(dummy) + } + v = dummy + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name) + } + + function undo (g) { + _.each(g.graph().dummyChains, function (v) { + var node = g.node(v), + origLabel = node.edgeLabel, + w + g.setEdge(node.edgeObj, origLabel) + while (node.dummy) { + w = g.successors(v)[0] + g.removeNode(v) + origLabel.points.push({ x: node.x, y: node.y }) + if (node.dummy === 'edge-label') { + origLabel.x = node.x + origLabel.y = node.y + origLabel.width = node.width + origLabel.height = node.height + } + v = w + node = g.node(v) + } + }) } - child = parent; - } - }); + }, {'./lodash': 60, './util': 79}], + 63: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash') + + module.exports = addSubgraphConstraints + + function addSubgraphConstraints (g, cg, vs) { + var prev = {}, + rootPrev + + _.each(vs, function (v) { + var child = g.parent(v), + parent, + prevChild + while (child) { + parent = g.parent(child) + if (parent) { + prevChild = prev[parent] + prev[parent] = child + } else { + prevChild = rootPrev + rootPrev = child + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child) + return + } + child = parent + } + }) /* function dfs(v) { @@ -25363,43 +25498,42 @@ function addSubgraphConstraints(g, cg, vs) { } dfs(undefined); */ -} - -},{"../lodash":60}],64:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"); - -module.exports = barycenter; - -function barycenter(g, movable) { - return _.map(movable, function(v) { - var inV = g.inEdges(v); - if (!inV.length) { - return { v: v }; - } else { - var result = _.reduce(inV, function(acc, e) { - var edge = g.edge(e), - nodeU = g.node(e.v); - return { - sum: acc.sum + (edge.weight * nodeU.order), - weight: acc.weight + edge.weight - }; - }, { sum: 0, weight: 0 }); + } + }, {'../lodash': 60}], + 64: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash') - return { - v: v, - barycenter: result.sum / result.weight, - weight: result.weight - }; - } - }); -} + module.exports = barycenter + function barycenter (g, movable) { + return _.map(movable, function (v) { + var inV = g.inEdges(v) + if (!inV.length) { + return { v: v } + } else { + var result = _.reduce(inV, function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v) + return { + sum: acc.sum + (edge.weight * nodeU.order), + weight: acc.weight + edge.weight + } + }, { sum: 0, weight: 0 }) -},{"../lodash":60}],65:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"), - Graph = _dereq_("../graphlib").Graph; + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight + } + } + }) + } + }, {'../lodash': 60}], + 65: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash'), + Graph = _dereq_('../graphlib').Graph -module.exports = buildLayerGraph; + module.exports = buildLayerGraph /* * Constructs a graph that can be used to sort a layer of nodes. The graph will @@ -25431,51 +25565,51 @@ module.exports = buildLayerGraph; * 5. The weights for copied edges are aggregated as need, since the output * graph is not a multi-graph. */ -function buildLayerGraph(g, rank, relationship) { - var root = createRootNode(g), - result = new Graph({ compound: true }).setGraph({ root: root }) - .setDefaultNodeLabel(function(v) { return g.node(v); }); + function buildLayerGraph (g, rank, relationship) { + var root = createRootNode(g), + result = new Graph({ compound: true }).setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { return g.node(v) }) - _.each(g.nodes(), function(v) { - var node = g.node(v), - parent = g.parent(v); + _.each(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v) - if (node.rank === rank || node.minRank <= rank && rank <= node.maxRank) { - result.setNode(v); - result.setParent(v, parent || root); + if (node.rank === rank || node.minRank <= rank && rank <= node.maxRank) { + result.setNode(v) + result.setParent(v, parent || root) // This assumes we have only short edges! - _.each(g[relationship](v), function(e) { - var u = e.v === v ? e.w : e.v, - edge = result.edge(u, v), - weight = !_.isUndefined(edge) ? edge.weight : 0; - result.setEdge(u, v, { weight: g.edge(e).weight + weight }); - }); - - if (_.has(node, "minRank")) { - result.setNode(v, { - borderLeft: node.borderLeft[rank], - borderRight: node.borderRight[rank] - }); - } - } - }); + _.each(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !_.isUndefined(edge) ? edge.weight : 0 + result.setEdge(u, v, { weight: g.edge(e).weight + weight }) + }) - return result; -} + if (_.has(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank] + }) + } + } + }) -function createRootNode(g) { - var v; - while (g.hasNode((v = _.uniqueId("_root")))); - return v; -} + return result + } -},{"../graphlib":57,"../lodash":60}],66:[function(_dereq_,module,exports){ -"use strict"; + function createRootNode (g) { + var v + while (g.hasNode((v = _.uniqueId('_root')))); + return v + } + }, {'../graphlib': 57, '../lodash': 60}], + 66: [function (_dereq_, module, exports) { + 'use strict' -var _ = _dereq_("../lodash"); + var _ = _dereq_('../lodash') -module.exports = crossCount; + module.exports = crossCount /* * A function that takes a layering (an array of layers, each with an array of @@ -25493,68 +25627,68 @@ module.exports = crossCount; * * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." */ -function crossCount(g, layering) { - var cc = 0; - for (var i = 1; i < layering.length; ++i) { - cc += twoLayerCrossCount(g, layering[i-1], layering[i]); - } - return cc; -} + function crossCount (g, layering) { + var cc = 0 + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]) + } + return cc + } -function twoLayerCrossCount(g, northLayer, southLayer) { + function twoLayerCrossCount (g, northLayer, southLayer) { // Sort all of the edges between the north and south layers by their position // in the north layer and then the south. Map these edges to the position of // their head in the south layer. - var southPos = _.zipObject(southLayer, - _.map(southLayer, function (v, i) { return i; })); - var southEntries = _.flatten(_.map(northLayer, function(v) { - return _.chain(g.outEdges(v)) - .map(function(e) { - return { pos: southPos[e.w], weight: g.edge(e).weight }; + var southPos = _.zipObject(southLayer, + _.map(southLayer, function (v, i) { return i })) + var southEntries = _.flatten(_.map(northLayer, function (v) { + return _.chain(g.outEdges(v)) + .map(function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight } }) - .sortBy("pos") - .value(); - }), true); + .sortBy('pos') + .value() + }), true) // Build the accumulator tree - var firstIndex = 1; - while (firstIndex < southLayer.length) firstIndex <<= 1; - var treeSize = 2 * firstIndex - 1; - firstIndex -= 1; - var tree = _.map(new Array(treeSize), function() { return 0; }); + var firstIndex = 1 + while (firstIndex < southLayer.length) firstIndex <<= 1 + var treeSize = 2 * firstIndex - 1 + firstIndex -= 1 + var tree = _.map(new Array(treeSize), function () { return 0 }) // Calculate the weighted crossings - var cc = 0; - _.each(southEntries.forEach(function(entry) { - var index = entry.pos + firstIndex; - tree[index] += entry.weight; - var weightSum = 0; - while (index > 0) { - if (index % 2) { - weightSum += tree[index + 1]; - } - index = (index - 1) >> 1; - tree[index] += entry.weight; - } - cc += entry.weight * weightSum; - })); - - return cc; -} + var cc = 0 + _.each(southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex + tree[index] += entry.weight + var weightSum = 0 + while (index > 0) { + if (index % 2) { + weightSum += tree[index + 1] + } + index = (index - 1) >> 1 + tree[index] += entry.weight + } + cc += entry.weight * weightSum + })) -},{"../lodash":60}],67:[function(_dereq_,module,exports){ -"use strict"; + return cc + } + }, {'../lodash': 60}], + 67: [function (_dereq_, module, exports) { + 'use strict' -var _ = _dereq_("../lodash"), - initOrder = _dereq_("./init-order"), - crossCount = _dereq_("./cross-count"), - sortSubgraph = _dereq_("./sort-subgraph"), - buildLayerGraph = _dereq_("./build-layer-graph"), - addSubgraphConstraints = _dereq_("./add-subgraph-constraints"), - Graph = _dereq_("../graphlib").Graph, - util = _dereq_("../util"); + var _ = _dereq_('../lodash'), + initOrder = _dereq_('./init-order'), + crossCount = _dereq_('./cross-count'), + sortSubgraph = _dereq_('./sort-subgraph'), + buildLayerGraph = _dereq_('./build-layer-graph'), + addSubgraphConstraints = _dereq_('./add-subgraph-constraints'), + Graph = _dereq_('../graphlib').Graph, + util = _dereq_('../util') -module.exports = order; + module.exports = order /* * Applies heuristics to minimize edge crossings in the graph and sets the best @@ -25571,64 +25705,64 @@ module.exports = order; * 1. Graph nodes will have an "order" attribute based on the results of the * algorithm. */ -function order(g) { - var maxRank = util.maxRank(g), - downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), "inEdges"), - upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), "outEdges"); - - var layering = initOrder(g); - assignOrder(g, layering); - - var bestCC = Number.POSITIVE_INFINITY, - best; - - for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { - sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); - - layering = util.buildLayerMatrix(g); - var cc = crossCount(g, layering); - if (cc < bestCC) { - lastBest = 0; - best = _.cloneDeep(layering); - bestCC = cc; - } - } + function order (g) { + var maxRank = util.maxRank(g), + downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), 'outEdges') + + var layering = initOrder(g) + assignOrder(g, layering) + + var bestCC = Number.POSITIVE_INFINITY, + best + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2) + + layering = util.buildLayerMatrix(g) + var cc = crossCount(g, layering) + if (cc < bestCC) { + lastBest = 0 + best = _.cloneDeep(layering) + bestCC = cc + } + } + + assignOrder(g, best) + } + + function buildLayerGraphs (g, ranks, relationship) { + return _.map(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship) + }) + } + + function sweepLayerGraphs (layerGraphs, biasRight) { + var cg = new Graph() + _.each(layerGraphs, function (lg) { + var root = lg.graph().root + var sorted = sortSubgraph(lg, root, cg, biasRight) + _.each(sorted.vs, function (v, i) { + lg.node(v).order = i + }) + addSubgraphConstraints(lg, cg, sorted.vs) + }) + } - assignOrder(g, best); -} - -function buildLayerGraphs(g, ranks, relationship) { - return _.map(ranks, function(rank) { - return buildLayerGraph(g, rank, relationship); - }); -} - -function sweepLayerGraphs(layerGraphs, biasRight) { - var cg = new Graph(); - _.each(layerGraphs, function(lg) { - var root = lg.graph().root; - var sorted = sortSubgraph(lg, root, cg, biasRight); - _.each(sorted.vs, function(v, i) { - lg.node(v).order = i; - }); - addSubgraphConstraints(lg, cg, sorted.vs); - }); -} - -function assignOrder(g, layering) { - _.each(layering, function(layer) { - _.each(layer, function(v, i) { - g.node(v).order = i; - }); - }); -} - -},{"../graphlib":57,"../lodash":60,"../util":79,"./add-subgraph-constraints":63,"./build-layer-graph":65,"./cross-count":66,"./init-order":68,"./sort-subgraph":70}],68:[function(_dereq_,module,exports){ -"use strict"; - -var _ = _dereq_("../lodash"); - -module.exports = initOrder; + function assignOrder (g, layering) { + _.each(layering, function (layer) { + _.each(layer, function (v, i) { + g.node(v).order = i + }) + }) + } + }, {'../graphlib': 57, '../lodash': 60, '../util': 79, './add-subgraph-constraints': 63, './build-layer-graph': 65, './cross-count': 66, './init-order': 68, './sort-subgraph': 70}], + 68: [function (_dereq_, module, exports) { + 'use strict' + + var _ = _dereq_('../lodash') + + module.exports = initOrder /* * Assigns an initial order value for each node by performing a DFS search @@ -25641,34 +25775,34 @@ module.exports = initOrder; * Returns a layering matrix with an array per layer and each layer sorted by * the order of its nodes. */ -function initOrder(g) { - var visited = {}, - simpleNodes = _.filter(g.nodes(), function(v) { - return !g.children(v).length; - }), - maxRank = _.max(_.map(simpleNodes, function(v) { return g.node(v).rank; })), - layers = _.map(_.range(maxRank + 1), function() { return []; }); - - function dfs(v) { - if (_.has(visited, v)) return; - visited[v] = true; - var node = g.node(v); - layers[node.rank].push(v); - _.each(g.successors(v), dfs); - } + function initOrder (g) { + var visited = {}, + simpleNodes = _.filter(g.nodes(), function (v) { + return !g.children(v).length + }), + maxRank = _.max(_.map(simpleNodes, function (v) { return g.node(v).rank })), + layers = _.map(_.range(maxRank + 1), function () { return [] }) - var orderedVs = _.sortBy(simpleNodes, function(v) { return g.node(v).rank; }); - _.each(orderedVs, dfs); + function dfs (v) { + if (_.has(visited, v)) return + visited[v] = true + var node = g.node(v) + layers[node.rank].push(v) + _.each(g.successors(v), dfs) + } - return layers; -} + var orderedVs = _.sortBy(simpleNodes, function (v) { return g.node(v).rank }) + _.each(orderedVs, dfs) -},{"../lodash":60}],69:[function(_dereq_,module,exports){ -"use strict"; + return layers + } + }, {'../lodash': 60}], + 69: [function (_dereq_, module, exports) { + 'use strict' -var _ = _dereq_("../lodash"); + var _ = _dereq_('../lodash') -module.exports = resolveConflicts; + module.exports = resolveConflicts /* * Given a list of entries of the form {v, barycenter, weight} and a @@ -25695,348 +25829,348 @@ module.exports = resolveConflicts; * graph. The property `i` is the lowest original index of any of the * elements in `vs`. */ -function resolveConflicts(entries, cg) { - var mappedEntries = {}; - _.each(entries, function(entry, i) { - var tmp = mappedEntries[entry.v] = { - indegree: 0, - "in": [], - out: [], - vs: [entry.v], - i: i - }; - if (!_.isUndefined(entry.barycenter)) { - tmp.barycenter = entry.barycenter; - tmp.weight = entry.weight; - } - }); - - _.each(cg.edges(), function(e) { - var entryV = mappedEntries[e.v], - entryW = mappedEntries[e.w]; - if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) { - entryW.indegree++; - entryV.out.push(mappedEntries[e.w]); - } - }); - - var sourceSet = _.filter(mappedEntries, function(entry) { - return !entry.indegree; - }); + function resolveConflicts (entries, cg) { + var mappedEntries = {} + _.each(entries, function (entry, i) { + var tmp = mappedEntries[entry.v] = { + indegree: 0, + 'in': [], + out: [], + vs: [entry.v], + i: i + } + if (!_.isUndefined(entry.barycenter)) { + tmp.barycenter = entry.barycenter + tmp.weight = entry.weight + } + }) - return doResolveConflicts(sourceSet); -} + _.each(cg.edges(), function (e) { + var entryV = mappedEntries[e.v], + entryW = mappedEntries[e.w] + if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) { + entryW.indegree++ + entryV.out.push(mappedEntries[e.w]) + } + }) -function doResolveConflicts(sourceSet) { - var entries = []; + var sourceSet = _.filter(mappedEntries, function (entry) { + return !entry.indegree + }) - function handleIn(vEntry) { - return function(uEntry) { - if (uEntry.merged) { - return; + return doResolveConflicts(sourceSet) } - if (_.isUndefined(uEntry.barycenter) || + + function doResolveConflicts (sourceSet) { + var entries = [] + + function handleIn (vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return + } + if (_.isUndefined(uEntry.barycenter) || _.isUndefined(vEntry.barycenter) || uEntry.barycenter >= vEntry.barycenter) { - mergeEntries(vEntry, uEntry); + mergeEntries(vEntry, uEntry) + } + } + } + + function handleOut (vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry) + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry) + } + } + } + + while (sourceSet.length) { + var entry = sourceSet.pop() + entries.push(entry) + _.each(entry['in'].reverse(), handleIn(entry)) + _.each(entry.out, handleOut(entry)) + } + + return _.chain(entries) + .filter(function (entry) { return !entry.merged }) + .map(function (entry) { + return _.pick(entry, ['vs', 'i', 'barycenter', 'weight']) + }) + .value() } - }; - } - function handleOut(vEntry) { - return function(wEntry) { - wEntry["in"].push(vEntry); - if (--wEntry.indegree === 0) { - sourceSet.push(wEntry); + function mergeEntries (target, source) { + var sum = 0, + weight = 0 + + if (target.weight) { + sum += target.barycenter * target.weight + weight += target.weight + } + + if (source.weight) { + sum += source.barycenter * source.weight + weight += source.weight + } + + target.vs = source.vs.concat(target.vs) + target.barycenter = sum / weight + target.weight = weight + target.i = Math.min(source.i, target.i) + source.merged = true } - }; - } + }, {'../lodash': 60}], + 70: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash'), + barycenter = _dereq_('./barycenter'), + resolveConflicts = _dereq_('./resolve-conflicts'), + sort = _dereq_('./sort') - while (sourceSet.length) { - var entry = sourceSet.pop(); - entries.push(entry); - _.each(entry["in"].reverse(), handleIn(entry)); - _.each(entry.out, handleOut(entry)); - } + module.exports = sortSubgraph - return _.chain(entries) - .filter(function(entry) { return !entry.merged; }) - .map(function(entry) { - return _.pick(entry, ["vs", "i", "barycenter", "weight"]); + function sortSubgraph (g, v, cg, biasRight) { + var movable = g.children(v), + node = g.node(v), + bl = node ? node.borderLeft : undefined, + br = node ? node.borderRight : undefined, + subgraphs = {} + + if (bl) { + movable = _.filter(movable, function (w) { + return w !== bl && w !== br }) - .value(); -} + } -function mergeEntries(target, source) { - var sum = 0, - weight = 0; + var barycenters = barycenter(g, movable) + _.each(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight) + subgraphs[entry.v] = subgraphResult + if (_.has(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult) + } + } + }) - if (target.weight) { - sum += target.barycenter * target.weight; - weight += target.weight; - } + var entries = resolveConflicts(barycenters, cg) + expandSubgraphs(entries, subgraphs) - if (source.weight) { - sum += source.barycenter * source.weight; - weight += source.weight; - } + var result = sort(entries, biasRight) - target.vs = source.vs.concat(target.vs); - target.barycenter = sum / weight; - target.weight = weight; - target.i = Math.min(source.i, target.i); - source.merged = true; -} - -},{"../lodash":60}],70:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"), - barycenter = _dereq_("./barycenter"), - resolveConflicts = _dereq_("./resolve-conflicts"), - sort = _dereq_("./sort"); - -module.exports = sortSubgraph; - -function sortSubgraph(g, v, cg, biasRight) { - var movable = g.children(v), - node = g.node(v), - bl = node ? node.borderLeft : undefined, - br = node ? node.borderRight: undefined, - subgraphs = {}; - - if (bl) { - movable = _.filter(movable, function(w) { - return w !== bl && w !== br; - }); - } + if (bl) { + result.vs = _.flatten([bl, result.vs, br], true) + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]) + if (!_.has(result, 'barycenter')) { + result.barycenter = 0 + result.weight = 0 + } + result.barycenter = (result.barycenter * result.weight + + blPred.order + brPred.order) / (result.weight + 2) + result.weight += 2 + } + } - var barycenters = barycenter(g, movable); - _.each(barycenters, function(entry) { - if (g.children(entry.v).length) { - var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); - subgraphs[entry.v] = subgraphResult; - if (_.has(subgraphResult, "barycenter")) { - mergeBarycenters(entry, subgraphResult); + return result } - } - }); - var entries = resolveConflicts(barycenters, cg); - expandSubgraphs(entries, subgraphs); - - var result = sort(entries, biasRight); + function expandSubgraphs (entries, subgraphs) { + _.each(entries, function (entry) { + entry.vs = _.flatten(entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs + } + return v + }), true) + }) + } - if (bl) { - result.vs = _.flatten([bl, result.vs, br], true); - if (g.predecessors(bl).length) { - var blPred = g.node(g.predecessors(bl)[0]), - brPred = g.node(g.predecessors(br)[0]); - if (!_.has(result, "barycenter")) { - result.barycenter = 0; - result.weight = 0; + function mergeBarycenters (target, other) { + if (!_.isUndefined(target.barycenter)) { + target.barycenter = (target.barycenter * target.weight + + other.barycenter * other.weight) / + (target.weight + other.weight) + target.weight += other.weight + } else { + target.barycenter = other.barycenter + target.weight = other.weight + } } - result.barycenter = (result.barycenter * result.weight + - blPred.order + brPred.order) / (result.weight + 2); - result.weight += 2; - } - } + }, {'../lodash': 60, './barycenter': 64, './resolve-conflicts': 69, './sort': 71}], + 71: [function (_dereq_, module, exports) { + var _ = _dereq_('../lodash'), + util = _dereq_('../util') + + module.exports = sort - return result; -} + function sort (entries, biasRight) { + var parts = util.partition(entries, function (entry) { + return _.has(entry, 'barycenter') + }) + var sortable = parts.lhs, + unsortable = _.sortBy(parts.rhs, function (entry) { return -entry.i }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0 + + sortable.sort(compareWithBias(!!biasRight)) + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex) + + _.each(sortable, function (entry) { + vsIndex += entry.vs.length + vs.push(entry.vs) + sum += entry.barycenter * entry.weight + weight += entry.weight + vsIndex = consumeUnsortable(vs, unsortable, vsIndex) + }) -function expandSubgraphs(entries, subgraphs) { - _.each(entries, function(entry) { - entry.vs = _.flatten(entry.vs.map(function(v) { - if (subgraphs[v]) { - return subgraphs[v].vs; + var result = { vs: _.flatten(vs, true) } + if (weight) { + result.barycenter = sum / weight + result.weight = weight + } + return result } - return v; - }), true); - }); -} -function mergeBarycenters(target, other) { - if (!_.isUndefined(target.barycenter)) { - target.barycenter = (target.barycenter * target.weight + - other.barycenter * other.weight) / - (target.weight + other.weight); - target.weight += other.weight; - } else { - target.barycenter = other.barycenter; - target.weight = other.weight; - } -} - -},{"../lodash":60,"./barycenter":64,"./resolve-conflicts":69,"./sort":71}],71:[function(_dereq_,module,exports){ -var _ = _dereq_("../lodash"), - util = _dereq_("../util"); - -module.exports = sort; - -function sort(entries, biasRight) { - var parts = util.partition(entries, function(entry) { - return _.has(entry, "barycenter"); - }); - var sortable = parts.lhs, - unsortable = _.sortBy(parts.rhs, function(entry) { return -entry.i; }), - vs = [], - sum = 0, - weight = 0, - vsIndex = 0; - - sortable.sort(compareWithBias(!!biasRight)); - - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - - _.each(sortable, function (entry) { - vsIndex += entry.vs.length; - vs.push(entry.vs); - sum += entry.barycenter * entry.weight; - weight += entry.weight; - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - }); - - var result = { vs: _.flatten(vs, true) }; - if (weight) { - result.barycenter = sum / weight; - result.weight = weight; - } - return result; -} - -function consumeUnsortable(vs, unsortable, index) { - var last; - while (unsortable.length && (last = _.last(unsortable)).i <= index) { - unsortable.pop(); - vs.push(last.vs); - index++; - } - return index; -} - -function compareWithBias(bias) { - return function(entryV, entryW) { - if (entryV.barycenter < entryW.barycenter) { - return -1; - } else if (entryV.barycenter > entryW.barycenter) { - return 1; - } + function consumeUnsortable (vs, unsortable, index) { + var last + while (unsortable.length && (last = _.last(unsortable)).i <= index) { + unsortable.pop() + vs.push(last.vs) + index++ + } + return index + } - return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; - }; -} + function compareWithBias (bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1 + } else if (entryV.barycenter > entryW.barycenter) { + return 1 + } -},{"../lodash":60,"../util":79}],72:[function(_dereq_,module,exports){ -var _ = _dereq_("./lodash"); + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i + } + } + }, {'../lodash': 60, '../util': 79}], + 72: [function (_dereq_, module, exports) { + var _ = _dereq_('./lodash') -module.exports = parentDummyChains; + module.exports = parentDummyChains -function parentDummyChains(g) { - var postorderNums = postorder(g); + function parentDummyChains (g) { + var postorderNums = postorder(g) - _.each(g.graph().dummyChains, function(v) { - var node = g.node(v), - edgeObj = node.edgeObj, - pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w), - path = pathData.path, - lca = pathData.lca, - pathIdx = 0, - pathV = path[pathIdx], - ascending = true; + _.each(g.graph().dummyChains, function (v) { + var node = g.node(v), + edgeObj = node.edgeObj, + pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w), + path = pathData.path, + lca = pathData.lca, + pathIdx = 0, + pathV = path[pathIdx], + ascending = true - while (v !== edgeObj.w) { - node = g.node(v); + while (v !== edgeObj.w) { + node = g.node(v) - if (ascending) { - while ((pathV = path[pathIdx]) !== lca && + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { - pathIdx++; - } + pathIdx++ + } - if (pathV === lca) { - ascending = false; - } - } + if (pathV === lca) { + ascending = false + } + } - if (!ascending) { - while (pathIdx < path.length - 1 && + if (!ascending) { + while (pathIdx < path.length - 1 && g.node(pathV = path[pathIdx + 1]).minRank <= node.rank) { - pathIdx++; - } - pathV = path[pathIdx]; - } + pathIdx++ + } + pathV = path[pathIdx] + } - g.setParent(v, pathV); - v = g.successors(v)[0]; - } - }); -} + g.setParent(v, pathV) + v = g.successors(v)[0] + } + }) + } // Find a path from v to w through the lowest common ancestor (LCA). Return the // full path and the LCA. -function findPath(g, postorderNums, v, w) { - var vPath = [], - wPath = [], - low = Math.min(postorderNums[v].low, postorderNums[w].low), - lim = Math.max(postorderNums[v].lim, postorderNums[w].lim), - parent, - lca; + function findPath (g, postorderNums, v, w) { + var vPath = [], + wPath = [], + low = Math.min(postorderNums[v].low, postorderNums[w].low), + lim = Math.max(postorderNums[v].lim, postorderNums[w].lim), + parent, + lca // Traverse up from v to find the LCA - parent = v; - do { - parent = g.parent(parent); - vPath.push(parent); - } while (parent && - (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); - lca = parent; + parent = v + do { + parent = g.parent(parent) + vPath.push(parent) + } while (parent && + (postorderNums[parent].low > low || lim > postorderNums[parent].lim)) + lca = parent // Traverse from w to LCA - parent = w; - while ((parent = g.parent(parent)) !== lca) { - wPath.push(parent); - } - - return { path: vPath.concat(wPath.reverse()), lca: lca }; -} + parent = w + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent) + } -function postorder(g) { - var result = {}, - lim = 0; + return { path: vPath.concat(wPath.reverse()), lca: lca } + } - function dfs(v) { - var low = lim; - _.each(g.children(v), dfs); - result[v] = { low: low, lim: lim++ }; - } - _.each(g.children(), dfs); + function postorder (g) { + var result = {}, + lim = 0 - return result; -} + function dfs (v) { + var low = lim + _.each(g.children(v), dfs) + result[v] = { low: low, lim: lim++ } + } + _.each(g.children(), dfs) -},{"./lodash":60}],73:[function(_dereq_,module,exports){ -"use strict"; + return result + } + }, {'./lodash': 60}], + 73: [function (_dereq_, module, exports) { + 'use strict' -var _ = _dereq_("../lodash"), - Graph = _dereq_("../graphlib").Graph, - util = _dereq_("../util"); + var _ = _dereq_('../lodash'), + Graph = _dereq_('../graphlib').Graph, + util = _dereq_('../util') /* * This module provides coordinate assignment based on Brandes and Köpf, "Fast * and Simple Horizontal Coordinate Assignment." */ -module.exports = { - positionX: positionX, - findType1Conflicts: findType1Conflicts, - findType2Conflicts: findType2Conflicts, - addConflict: addConflict, - hasConflict: hasConflict, - verticalAlignment: verticalAlignment, - horizontalCompaction: horizontalCompaction, - alignCoordinates: alignCoordinates, - findSmallestWidthAlignment: findSmallestWidthAlignment, - balance: balance -}; + module.exports = { + positionX: positionX, + findType1Conflicts: findType1Conflicts, + findType2Conflicts: findType2Conflicts, + addConflict: addConflict, + hasConflict: hasConflict, + verticalAlignment: verticalAlignment, + horizontalCompaction: horizontalCompaction, + alignCoordinates: alignCoordinates, + findSmallestWidthAlignment: findSmallestWidthAlignment, + balance: balance + } /* * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" @@ -26055,122 +26189,121 @@ module.exports = { * This algorithm (safely) assumes that a dummy node will only be incident on a * single node in the layers being scanned. */ -function findType1Conflicts(g, layering) { - var conflicts = {}; + function findType1Conflicts (g, layering) { + var conflicts = {} - function visitLayer(prevLayer, layer) { - var + function visitLayer (prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner // segment. - k0 = 0, + k0 = 0, // Tracks the last node in this layer scanned for crossings with a type-1 // segment. - scanPos = 0, - prevLayerLength = prevLayer.length, - lastNode = _.last(layer); - - _.each(layer, function(v, i) { - var w = findOtherInnerSegmentNode(g, v), - k1 = w ? g.node(w).order : prevLayerLength; - - if (w || v === lastNode) { - _.each(layer.slice(scanPos, i +1), function(scanNode) { - _.each(g.predecessors(scanNode), function(u) { - var uLabel = g.node(u), - uPos = uLabel.order; - if ((uPos < k0 || k1 < uPos) && + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = _.last(layer) + + _.each(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength + + if (w || v === lastNode) { + _.each(layer.slice(scanPos, i + 1), function (scanNode) { + _.each(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { - addConflict(conflicts, u, scanNode); + addConflict(conflicts, u, scanNode) + } + }) + }) + scanPos = i + 1 + k0 = k1 } - }); - }); - scanPos = i + 1; - k0 = k1; + }) + + return layer + } + + _.reduce(layering, visitLayer) + return conflicts } - }); - return layer; - } + function findType2Conflicts (g, layering) { + var conflicts = {} - _.reduce(layering, visitLayer); - return conflicts; -} - -function findType2Conflicts(g, layering) { - var conflicts = {}; - - function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { - var v; - _.each(_.range(southPos, southEnd), function(i) { - v = south[i]; - if (g.node(v).dummy) { - _.each(g.predecessors(v), function(u) { - var uNode = g.node(u); - if (uNode.dummy && + function scan (south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v + _.each(_.range(southPos, southEnd), function (i) { + v = south[i] + if (g.node(v).dummy) { + _.each(g.predecessors(v), function (u) { + var uNode = g.node(u) + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { - addConflict(conflicts, u, v); - } - }); - } - }); - } + addConflict(conflicts, u, v) + } + }) + } + }) + } + function visitLayer (north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0 - function visitLayer(north, south) { - var prevNorthPos = -1, - nextNorthPos, - southPos = 0; + _.each(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v) + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos) + southPos = southLookahead + prevNorthPos = nextNorthPos + } + } + scan(south, southPos, south.length, nextNorthPos, north.length) + }) - _.each(south, function(v, southLookahead) { - if (g.node(v).dummy === "border") { - var predecessors = g.predecessors(v); - if (predecessors.length) { - nextNorthPos = g.node(predecessors[0]).order; - scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); - southPos = southLookahead; - prevNorthPos = nextNorthPos; + return south } - } - scan(south, southPos, south.length, nextNorthPos, north.length); - }); - return south; - } + _.reduce(layering, visitLayer) + return conflicts + } - _.reduce(layering, visitLayer); - return conflicts; -} + function findOtherInnerSegmentNode (g, v) { + if (g.node(v).dummy) { + return _.find(g.predecessors(v), function (u) { + return g.node(u).dummy + }) + } + } -function findOtherInnerSegmentNode(g, v) { - if (g.node(v).dummy) { - return _.find(g.predecessors(v), function(u) { - return g.node(u).dummy; - }); - } -} + function addConflict (conflicts, v, w) { + if (v > w) { + var tmp = v + v = w + w = tmp + } -function addConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } + var conflictsV = conflicts[v] + if (!conflictsV) { + conflicts[v] = conflictsV = {} + } + conflictsV[w] = true + } - var conflictsV = conflicts[v]; - if (!conflictsV) { - conflicts[v] = conflictsV = {}; - } - conflictsV[w] = true; -} - -function hasConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - return _.has(conflicts[v], w); -} + function hasConflict (conflicts, v, w) { + if (v > w) { + var tmp = v + v = w + w = tmp + } + return _.has(conflicts[v], w) + } /* * Try to align nodes into vertical "blocks" where possible. This algorithm @@ -26180,125 +26313,124 @@ function hasConflict(conflicts, v, w) { * we're trying to form a block with, we also ignore that possibility - our * blocks would be split in that scenario. */ -function verticalAlignment(g, layering, conflicts, neighborFn) { - var root = {}, - align = {}, - pos = {}; + function verticalAlignment (g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {} // We cache the position here based on the layering because the graph and // layering may be out of sync. The layering matrix is manipulated to // generate different extreme alignments. - _.each(layering, function(layer) { - _.each(layer, function(v, order) { - root[v] = v; - align[v] = v; - pos[v] = order; - }); - }); - - _.each(layering, function(layer) { - var prevIdx = -1; - _.each(layer, function(v) { - var ws = neighborFn(v); - if (ws.length) { - ws = _.sortBy(ws, function(w) { return pos[w]; }); - var mp = (ws.length - 1) / 2; - for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { - var w = ws[i]; - if (align[v] === v && + _.each(layering, function (layer) { + _.each(layer, function (v, order) { + root[v] = v + align[v] = v + pos[v] = order + }) + }) + + _.each(layering, function (layer) { + var prevIdx = -1 + _.each(layer, function (v) { + var ws = neighborFn(v) + if (ws.length) { + ws = _.sortBy(ws, function (w) { return pos[w] }) + var mp = (ws.length - 1) / 2 + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i] + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { - align[w] = v; - align[v] = root[v] = root[w]; - prevIdx = pos[w]; - } - } - } - }); - }); + align[w] = v + align[v] = root[v] = root[w] + prevIdx = pos[w] + } + } + } + }) + }) - return { root: root, align: align }; -} + return { root: root, align: align } + } -function horizontalCompaction(g, layering, root, align, reverseSep) { + function horizontalCompaction (g, layering, root, align, reverseSep) { // This portion of the algorithm differs from BK due to a number of problems. // Instead of their algorithm we construct a new block graph and do two // sweeps. The first sweep places blocks with the smallest possible // coordinates. The second sweep removes unused space by moving blocks to the - // greatest coordinates without violating separation. - var xs = {}, - blockG = buildBlockGraph(g, layering, root, reverseSep); - - // First pass, assign smallest coordinates via DFS - var visited = {}; - function pass1(v) { - if (!_.has(visited, v)) { - visited[v] = true; - xs[v] = _.reduce(blockG.inEdges(v), function(max, e) { - pass1(e.v); - return Math.max(max, xs[e.v] + blockG.edge(e)); - }, 0); - } - } - _.each(blockG.nodes(), pass1); - - var borderType = reverseSep ? "borderLeft" : "borderRight"; - function pass2(v) { - if (visited[v] !== 2) { - visited[v]++; - var node = g.node(v); - var min = _.reduce(blockG.outEdges(v), function(min, e) { - pass2(e.w); - return Math.min(min, xs[e.w] - blockG.edge(e)); - }, Number.POSITIVE_INFINITY); - if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { - xs[v] = Math.max(xs[v], min); - } - } - } - _.each(blockG.nodes(), pass2); + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep) + + // First pass, assign smallest coordinates via DFS + var visited = {} + function pass1 (v) { + if (!_.has(visited, v)) { + visited[v] = true + xs[v] = _.reduce(blockG.inEdges(v), function (max, e) { + pass1(e.v) + return Math.max(max, xs[e.v] + blockG.edge(e)) + }, 0) + } + } + _.each(blockG.nodes(), pass1) + + var borderType = reverseSep ? 'borderLeft' : 'borderRight' + function pass2 (v) { + if (visited[v] !== 2) { + visited[v]++ + var node = g.node(v) + var min = _.reduce(blockG.outEdges(v), function (min, e) { + pass2(e.w) + return Math.min(min, xs[e.w] - blockG.edge(e)) + }, Number.POSITIVE_INFINITY) + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[v] = Math.max(xs[v], min) + } + } + } + _.each(blockG.nodes(), pass2) // Assign x coordinates to all nodes - _.each(align, function(v) { - xs[v] = xs[root[v]]; - }); + _.each(align, function (v) { + xs[v] = xs[root[v]] + }) - return xs; -} + return xs + } + function buildBlockGraph (g, layering, root, reverseSep) { + var blockGraph = new Graph(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep) -function buildBlockGraph(g, layering, root, reverseSep) { - var blockGraph = new Graph(), - graphLabel = g.graph(), - sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + _.each(layering, function (layer) { + var u + _.each(layer, function (v) { + var vRoot = root[v] + blockGraph.setNode(vRoot) + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot) + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)) + } + u = v + }) + }) - _.each(layering, function(layer) { - var u; - _.each(layer, function(v) { - var vRoot = root[v]; - blockGraph.setNode(vRoot); - if (u) { - var uRoot = root[u], - prevMax = blockGraph.edge(uRoot, vRoot); - blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + return blockGraph } - u = v; - }); - }); - - return blockGraph; -} /* * Returns the alignment that has the smallest width of the given alignments. */ -function findSmallestWidthAlignment(g, xss) { - return _.min(xss, function(xs) { - var min = _.min(xs, function(x, v) { return x - width(g, v) / 2; }), - max = _.max(xs, function(x, v) { return x + width(g, v) / 2; }); - return max - min; - }); -} + function findSmallestWidthAlignment (g, xss) { + return _.min(xss, function (xs) { + var min = _.min(xs, function (x, v) { return x - width(g, v) / 2 }), + max = _.max(xs, function (x, v) { return x + width(g, v) / 2 }) + return max - min + }) + } /* * Align the coordinates of each of the layout alignments such that @@ -26307,152 +26439,151 @@ function findSmallestWidthAlignment(g, xss) { * alignments have their maximum coordinate at the same point as the maximum * coordinate of the smallest width alignment. */ -function alignCoordinates(xss, alignTo) { - var alignToMin = _.min(alignTo), - alignToMax = _.max(alignTo); - - _.each(["u", "d"], function(vert) { - _.each(["l", "r"], function(horiz) { - var alignment = vert + horiz, - xs = xss[alignment], - delta; - if (xs === alignTo) return; - - delta = horiz === "l" ? alignToMin - _.min(xs) : alignToMax - _.max(xs); - - if (delta) { - xss[alignment] = _.mapValues(xs, function(x) { return x + delta; }); - } - }); - }); -} - -function balance(xss, align) { - return _.mapValues(xss.ul, function(ignore, v) { - if (align) { - return xss[align.toLowerCase()][v]; - } else { - var xs = _.sortBy(_.pluck(xss, v)); - return (xs[1] + xs[2]) / 2; - } - }); -} - -function positionX(g) { - var layering = util.buildLayerMatrix(g), - conflicts = _.merge(findType1Conflicts(g, layering), - findType2Conflicts(g, layering)); - - var xss = {}, - adjustedLayering; - _.each(["u", "d"], function(vert) { - adjustedLayering = vert === "u" ? layering : _.values(layering).reverse(); - _.each(["l", "r"], function(horiz) { - if (horiz === "r") { - adjustedLayering = _.map(adjustedLayering, function(inner) { - return _.values(inner).reverse(); - }); - } - - var neighborFn = _.bind(vert === "u" ? g.predecessors : g.successors, g); - var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); - var xs = horizontalCompaction(g, adjustedLayering, - align.root, align.align, - horiz === "r"); - if (horiz === "r") { - xs = _.mapValues(xs, function(x) { return -x; }); - } - xss[vert + horiz] = xs; - }); - }); - - var smallestWidth = findSmallestWidthAlignment(g, xss); - alignCoordinates(xss, smallestWidth); - return balance(xss, g.graph().align); -} - -function sep(nodeSep, edgeSep, reverseSep) { - return function(g, v, w) { - var vLabel = g.node(v), - wLabel = g.node(w), - sum = 0, - delta; - - sum += vLabel.width / 2; - if (_.has(vLabel, "labelpos")) { - switch (vLabel.labelpos.toLowerCase()) { - case "l": delta = -vLabel.width / 2; break; - case "r": delta = vLabel.width / 2; break; + function alignCoordinates (xss, alignTo) { + var alignToMin = _.min(alignTo), + alignToMax = _.max(alignTo) + + _.each(['u', 'd'], function (vert) { + _.each(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta + if (xs === alignTo) return + + delta = horiz === 'l' ? alignToMin - _.min(xs) : alignToMax - _.max(xs) + + if (delta) { + xss[alignment] = _.mapValues(xs, function (x) { return x + delta }) + } + }) + }) } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; - sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + function balance (xss, align) { + return _.mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v] + } else { + var xs = _.sortBy(_.pluck(xss, v)) + return (xs[1] + xs[2]) / 2 + } + }) + } + + function positionX (g) { + var layering = util.buildLayerMatrix(g), + conflicts = _.merge(findType1Conflicts(g, layering), + findType2Conflicts(g, layering)) + + var xss = {}, + adjustedLayering + _.each(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : _.values(layering).reverse() + _.each(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = _.map(adjustedLayering, function (inner) { + return _.values(inner).reverse() + }) + } + + var neighborFn = _.bind(vert === 'u' ? g.predecessors : g.successors, g) + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn) + var xs = horizontalCompaction(g, adjustedLayering, + align.root, align.align, + horiz === 'r') + if (horiz === 'r') { + xs = _.mapValues(xs, function (x) { return -x }) + } + xss[vert + horiz] = xs + }) + }) - sum += wLabel.width / 2; - if (_.has(wLabel, "labelpos")) { - switch (wLabel.labelpos.toLowerCase()) { - case "l": delta = wLabel.width / 2; break; - case "r": delta = -wLabel.width / 2; break; + var smallestWidth = findSmallestWidthAlignment(g, xss) + alignCoordinates(xss, smallestWidth) + return balance(xss, g.graph().align) } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - return sum; - }; -} + function sep (nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v), + wLabel = g.node(w), + sum = 0, + delta + + sum += vLabel.width / 2 + if (_.has(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': delta = -vLabel.width / 2; break + case 'r': delta = vLabel.width / 2; break + } + } + if (delta) { + sum += reverseSep ? delta : -delta + } + delta = 0 -function width(g, v) { - return g.node(v).width; -} + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2 + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2 -},{"../graphlib":57,"../lodash":60,"../util":79}],74:[function(_dereq_,module,exports){ -"use strict"; + sum += wLabel.width / 2 + if (_.has(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': delta = wLabel.width / 2; break + case 'r': delta = -wLabel.width / 2; break + } + } + if (delta) { + sum += reverseSep ? delta : -delta + } + delta = 0 -var _ = _dereq_("../lodash"), - util = _dereq_("../util"), - positionX = _dereq_("./bk").positionX; + return sum + } + } -module.exports = position; + function width (g, v) { + return g.node(v).width + } + }, {'../graphlib': 57, '../lodash': 60, '../util': 79}], + 74: [function (_dereq_, module, exports) { + 'use strict' -function position(g) { - g = util.asNonCompoundGraph(g); + var _ = _dereq_('../lodash'), + util = _dereq_('../util'), + positionX = _dereq_('./bk').positionX - positionY(g); - _.each(positionX(g), function(x, v) { - g.node(v).x = x; - }); -} + module.exports = position -function positionY(g) { - var layering = util.buildLayerMatrix(g), - rankSep = g.graph().ranksep, - prevY = 0; - _.each(layering, function(layer) { - var maxHeight = _.max(_.map(layer, function(v) { return g.node(v).height; })); - _.each(layer, function(v) { - g.node(v).y = prevY + maxHeight / 2; - }); - prevY += maxHeight + rankSep; - }); -} + function position (g) { + g = util.asNonCompoundGraph(g) + positionY(g) + _.each(positionX(g), function (x, v) { + g.node(v).x = x + }) + } -},{"../lodash":60,"../util":79,"./bk":73}],75:[function(_dereq_,module,exports){ -"use strict"; + function positionY (g) { + var layering = util.buildLayerMatrix(g), + rankSep = g.graph().ranksep, + prevY = 0 + _.each(layering, function (layer) { + var maxHeight = _.max(_.map(layer, function (v) { return g.node(v).height })) + _.each(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2 + }) + prevY += maxHeight + rankSep + }) + } + }, {'../lodash': 60, '../util': 79, './bk': 73}], + 75: [function (_dereq_, module, exports) { + 'use strict' -var _ = _dereq_("../lodash"), - Graph = _dereq_("../graphlib").Graph, - slack = _dereq_("./util").slack; + var _ = _dereq_('../lodash'), + Graph = _dereq_('../graphlib').Graph, + slack = _dereq_('./util').slack -module.exports = feasibleTree; + module.exports = feasibleTree /* * Constructs a spanning tree with tight edges and adjusted the input node's @@ -26479,72 +26610,72 @@ module.exports = feasibleTree; * Returns a tree (undirected graph) that is constructed using only "tight" * edges. */ -function feasibleTree(g) { - var t = new Graph({ directed: false }); + function feasibleTree (g) { + var t = new Graph({ directed: false }) // Choose arbitrary node from which to start our tree - var start = g.nodes()[0], - size = g.nodeCount(); - t.setNode(start, {}); - - var edge, delta; - while (tightTree(t, g) < size) { - edge = findMinSlackEdge(t, g); - delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); - shiftRanks(t, g, delta); - } + var start = g.nodes()[0], + size = g.nodeCount() + t.setNode(start, {}) + + var edge, delta + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g) + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge) + shiftRanks(t, g, delta) + } - return t; -} + return t + } /* * Finds a maximal tree of tight edges and returns the number of nodes in the * tree. */ -function tightTree(t, g) { - function dfs(v) { - _.each(g.nodeEdges(v), function(e) { - var edgeV = e.v, - w = (v === edgeV) ? e.w : edgeV; - if (!t.hasNode(w) && !slack(g, e)) { - t.setNode(w, {}); - t.setEdge(v, w, {}); - dfs(w); - } - }); - } + function tightTree (t, g) { + function dfs (v) { + _.each(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = (v === edgeV) ? e.w : edgeV + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}) + t.setEdge(v, w, {}) + dfs(w) + } + }) + } - _.each(t.nodes(), dfs); - return t.nodeCount(); -} + _.each(t.nodes(), dfs) + return t.nodeCount() + } /* * Finds the edge with the smallest slack that is incident on tree and returns * it. */ -function findMinSlackEdge(t, g) { - return _.min(g.edges(), function(e) { - if (t.hasNode(e.v) !== t.hasNode(e.w)) { - return slack(g, e); - } - }); -} - -function shiftRanks(t, g, delta) { - _.each(t.nodes(), function(v) { - g.node(v).rank += delta; - }); -} + function findMinSlackEdge (t, g) { + return _.min(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e) + } + }) + } -},{"../graphlib":57,"../lodash":60,"./util":78}],76:[function(_dereq_,module,exports){ -"use strict"; + function shiftRanks (t, g, delta) { + _.each(t.nodes(), function (v) { + g.node(v).rank += delta + }) + } + }, {'../graphlib': 57, '../lodash': 60, './util': 78}], + 76: [function (_dereq_, module, exports) { + 'use strict' -var rankUtil = _dereq_("./util"), - longestPath = rankUtil.longestPath, - feasibleTree = _dereq_("./feasible-tree"), - networkSimplex = _dereq_("./network-simplex"); + var rankUtil = _dereq_('./util'), + longestPath = rankUtil.longestPath, + feasibleTree = _dereq_('./feasible-tree'), + networkSimplex = _dereq_('./network-simplex') -module.exports = rank; + module.exports = rank /* * Assigns a rank to each node in the input graph that respects the "minlen" @@ -26565,47 +26696,47 @@ module.exports = rank; * algorithm. Ranks can start at any index (including negative), we'll * fix them up later. */ -function rank(g) { - switch(g.graph().ranker) { - case "network-simplex": networkSimplexRanker(g); break; - case "tight-tree": tightTreeRanker(g); break; - case "longest-path": longestPathRanker(g); break; - default: networkSimplexRanker(g); - } -} + function rank (g) { + switch (g.graph().ranker) { + case 'network-simplex': networkSimplexRanker(g); break + case 'tight-tree': tightTreeRanker(g); break + case 'longest-path': longestPathRanker(g); break + default: networkSimplexRanker(g) + } + } // A fast and simple ranker, but results are far from optimal. -var longestPathRanker = longestPath; + var longestPathRanker = longestPath -function tightTreeRanker(g) { - longestPath(g); - feasibleTree(g); -} - -function networkSimplexRanker(g) { - networkSimplex(g); -} + function tightTreeRanker (g) { + longestPath(g) + feasibleTree(g) + } -},{"./feasible-tree":75,"./network-simplex":77,"./util":78}],77:[function(_dereq_,module,exports){ -"use strict"; + function networkSimplexRanker (g) { + networkSimplex(g) + } + }, {'./feasible-tree': 75, './network-simplex': 77, './util': 78}], + 77: [function (_dereq_, module, exports) { + 'use strict' -var _ = _dereq_("../lodash"), - feasibleTree = _dereq_("./feasible-tree"), - slack = _dereq_("./util").slack, - initRank = _dereq_("./util").longestPath, - preorder = _dereq_("../graphlib").alg.preorder, - postorder = _dereq_("../graphlib").alg.postorder, - simplify = _dereq_("../util").simplify; + var _ = _dereq_('../lodash'), + feasibleTree = _dereq_('./feasible-tree'), + slack = _dereq_('./util').slack, + initRank = _dereq_('./util').longestPath, + preorder = _dereq_('../graphlib').alg.preorder, + postorder = _dereq_('../graphlib').alg.postorder, + simplify = _dereq_('../util').simplify -module.exports = networkSimplex; + module.exports = networkSimplex // Expose some internals for testing purposes -networkSimplex.initLowLimValues = initLowLimValues; -networkSimplex.initCutValues = initCutValues; -networkSimplex.calcCutValue = calcCutValue; -networkSimplex.leaveEdge = leaveEdge; -networkSimplex.enterEdge = enterEdge; -networkSimplex.exchangeEdges = exchangeEdges; + networkSimplex.initLowLimValues = initLowLimValues + networkSimplex.initCutValues = initCutValues + networkSimplex.calcCutValue = calcCutValue + networkSimplex.leaveEdge = leaveEdge + networkSimplex.enterEdge = enterEdge + networkSimplex.exchangeEdges = exchangeEdges /* * The network simplex algorithm assigns ranks to each node in the input graph @@ -26640,197 +26771,197 @@ networkSimplex.exchangeEdges = exchangeEdges; * for Drawing Directed Graphs." The structure of the file roughly follows the * structure of the overall algorithm. */ -function networkSimplex(g) { - g = simplify(g); - initRank(g); - var t = feasibleTree(g); - initLowLimValues(t); - initCutValues(t, g); - - var e, f; - while ((e = leaveEdge(t))) { - f = enterEdge(t, g, e); - exchangeEdges(t, g, e, f); - } -} + function networkSimplex (g) { + g = simplify(g) + initRank(g) + var t = feasibleTree(g) + initLowLimValues(t) + initCutValues(t, g) + + var e, f + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e) + exchangeEdges(t, g, e, f) + } + } /* * Initializes cut values for all edges in the tree. */ -function initCutValues(t, g) { - var vs = postorder(t, t.nodes()); - vs = vs.slice(0, vs.length - 1); - _.each(vs, function(v) { - assignCutValue(t, g, v); - }); -} - -function assignCutValue(t, g, child) { - var childLab = t.node(child), - parent = childLab.parent; - t.edge(child, parent).cutvalue = calcCutValue(t, g, child); -} + function initCutValues (t, g) { + var vs = postorder(t, t.nodes()) + vs = vs.slice(0, vs.length - 1) + _.each(vs, function (v) { + assignCutValue(t, g, v) + }) + } + + function assignCutValue (t, g, child) { + var childLab = t.node(child), + parent = childLab.parent + t.edge(child, parent).cutvalue = calcCutValue(t, g, child) + } /* * Given the tight tree, its graph, and a child in the graph calculate and * return the cut value for the edge between the child and its parent. */ -function calcCutValue(t, g, child) { - var childLab = t.node(child), - parent = childLab.parent, + function calcCutValue (t, g, child) { + var childLab = t.node(child), + parent = childLab.parent, // True if the child is on the tail end of the edge in the directed graph - childIsTail = true, + childIsTail = true, // The graph's view of the tree edge we're inspecting - graphEdge = g.edge(child, parent), + graphEdge = g.edge(child, parent), // The accumulated cut value for the edge between this node and its parent - cutValue = 0; + cutValue = 0 - if (!graphEdge) { - childIsTail = false; - graphEdge = g.edge(parent, child); - } + if (!graphEdge) { + childIsTail = false + graphEdge = g.edge(parent, child) + } - cutValue = graphEdge.weight; + cutValue = graphEdge.weight - _.each(g.nodeEdges(child), function(e) { - var isOutEdge = e.v === child, - other = isOutEdge ? e.w : e.v; + _.each(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v - if (other !== parent) { - var pointsToHead = isOutEdge === childIsTail, - otherWeight = g.edge(e).weight; + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight - cutValue += pointsToHead ? otherWeight : -otherWeight; - if (isTreeEdge(t, child, other)) { - var otherCutValue = t.edge(child, other).cutvalue; - cutValue += pointsToHead ? -otherCutValue : otherCutValue; - } - } - }); + cutValue += pointsToHead ? otherWeight : -otherWeight + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue + cutValue += pointsToHead ? -otherCutValue : otherCutValue + } + } + }) - return cutValue; -} + return cutValue + } -function initLowLimValues(tree, root) { - if (arguments.length < 2) { - root = tree.nodes()[0]; - } - dfsAssignLowLim(tree, {}, 1, root); -} + function initLowLimValues (tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0] + } + dfsAssignLowLim(tree, {}, 1, root) + } -function dfsAssignLowLim(tree, visited, nextLim, v, parent) { - var low = nextLim, - label = tree.node(v); + function dfsAssignLowLim (tree, visited, nextLim, v, parent) { + var low = nextLim, + label = tree.node(v) - visited[v] = true; - _.each(tree.neighbors(v), function(w) { - if (!_.has(visited, w)) { - nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); - } - }); + visited[v] = true + _.each(tree.neighbors(v), function (w) { + if (!_.has(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v) + } + }) - label.low = low; - label.lim = nextLim++; - if (parent) { - label.parent = parent; - } else { + label.low = low + label.lim = nextLim++ + if (parent) { + label.parent = parent + } else { // TODO should be able to remove this when we incrementally update low lim - delete label.parent; - } + delete label.parent + } - return nextLim; -} + return nextLim + } -function leaveEdge(tree) { - return _.find(tree.edges(), function(e) { - return tree.edge(e).cutvalue < 0; - }); -} + function leaveEdge (tree) { + return _.find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0 + }) + } -function enterEdge(t, g, edge) { - var v = edge.v, - w = edge.w; + function enterEdge (t, g, edge) { + var v = edge.v, + w = edge.w // For the rest of this function we assume that v is the tail and w is the // head, so if we don't have this edge in the graph we should flip it to // match the correct orientation. - if (!g.hasEdge(v, w)) { - v = edge.w; - w = edge.v; - } + if (!g.hasEdge(v, w)) { + v = edge.w + w = edge.v + } - var vLabel = t.node(v), - wLabel = t.node(w), - tailLabel = vLabel, - flip = false; + var vLabel = t.node(v), + wLabel = t.node(w), + tailLabel = vLabel, + flip = false // If the root is in the tail of the edge then we need to flip the logic that // checks for the head and tail nodes in the candidates function below. - if (vLabel.lim > wLabel.lim) { - tailLabel = wLabel; - flip = true; - } + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel + flip = true + } - var candidates = _.filter(g.edges(), function(edge) { - return flip === isDescendant(t, t.node(edge.v), tailLabel) && - flip !== isDescendant(t, t.node(edge.w), tailLabel); - }); - - return _.min(candidates, function(edge) { return slack(g, edge); }); -} - -function exchangeEdges(t, g, e, f) { - var v = e.v, - w = e.w; - t.removeEdge(v, w); - t.setEdge(f.v, f.w, {}); - initLowLimValues(t); - initCutValues(t, g); - updateRanks(t, g); -} - -function updateRanks(t, g) { - var root = _.find(t.nodes(), function(v) { return !g.node(v).parent; }), - vs = preorder(t, root); - vs = vs.slice(1); - _.each(vs, function(v) { - var parent = t.node(v).parent, - edge = g.edge(v, parent), - flipped = false; - - if (!edge) { - edge = g.edge(parent, v); - flipped = true; - } + var candidates = _.filter(g.edges(), function (edge) { + return flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + }) + + return _.min(candidates, function (edge) { return slack(g, edge) }) + } + + function exchangeEdges (t, g, e, f) { + var v = e.v, + w = e.w + t.removeEdge(v, w) + t.setEdge(f.v, f.w, {}) + initLowLimValues(t) + initCutValues(t, g) + updateRanks(t, g) + } + + function updateRanks (t, g) { + var root = _.find(t.nodes(), function (v) { return !g.node(v).parent }), + vs = preorder(t, root) + vs = vs.slice(1) + _.each(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false - g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); - }); -} + if (!edge) { + edge = g.edge(parent, v) + flipped = true + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen) + }) + } /* * Returns true if the edge is in the tree. */ -function isTreeEdge(tree, u, v) { - return tree.hasEdge(u, v); -} + function isTreeEdge (tree, u, v) { + return tree.hasEdge(u, v) + } /* * Returns true if the specified node is descendant of the root node per the * assigned low and lim attributes in the tree. */ -function isDescendant(tree, vLabel, rootLabel) { - return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; -} - -},{"../graphlib":57,"../lodash":60,"../util":79,"./feasible-tree":75,"./util":78}],78:[function(_dereq_,module,exports){ -"use strict"; + function isDescendant (tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim + } + }, {'../graphlib': 57, '../lodash': 60, '../util': 79, './feasible-tree': 75, './util': 78}], + 78: [function (_dereq_, module, exports) { + 'use strict' -var _ = _dereq_("../lodash"); + var _ = _dereq_('../lodash') -module.exports = { - longestPath: longestPath, - slack: slack -}; + module.exports = { + longestPath: longestPath, + slack: slack + } /* * Initializes ranks for the input graph using the longest path algorithm. This @@ -26853,325 +26984,347 @@ module.exports = { * * 1. Each node will be assign an (unnormalized) "rank" property. */ -function longestPath(g) { - var visited = {}; + function longestPath (g) { + var visited = {} - function dfs(v) { - var label = g.node(v); - if (_.has(visited, v)) { - return label.rank; - } - visited[v] = true; + function dfs (v) { + var label = g.node(v) + if (_.has(visited, v)) { + return label.rank + } + visited[v] = true - var rank = _.min(_.map(g.outEdges(v), function(e) { - return dfs(e.w) - g.edge(e).minlen; - })); + var rank = _.min(_.map(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen + })) - if (rank === Number.POSITIVE_INFINITY) { - rank = 0; - } + if (rank === Number.POSITIVE_INFINITY) { + rank = 0 + } - return (label.rank = rank); - } + return (label.rank = rank) + } - _.each(g.sources(), dfs); -} + _.each(g.sources(), dfs) + } /* * Returns the amount of slack for the given edge. The slack is defined as the * difference between the length of the edge and its minimum length. */ -function slack(g, e) { - return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; -} - -},{"../lodash":60}],79:[function(_dereq_,module,exports){ -"use strict"; - -var _ = _dereq_("./lodash"), - Graph = _dereq_("./graphlib").Graph; - -module.exports = { - addDummyNode: addDummyNode, - simplify: simplify, - asNonCompoundGraph: asNonCompoundGraph, - successorWeights: successorWeights, - predecessorWeights: predecessorWeights, - intersectRect: intersectRect, - buildLayerMatrix: buildLayerMatrix, - normalizeRanks: normalizeRanks, - removeEmptyRanks: removeEmptyRanks, - addBorderNode: addBorderNode, - maxRank: maxRank, - partition: partition, - time: time, - notime: notime -}; + function slack (g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen + } + }, {'../lodash': 60}], + 79: [function (_dereq_, module, exports) { + 'use strict' + + var _ = _dereq_('./lodash'), + Graph = _dereq_('./graphlib').Graph + + module.exports = { + addDummyNode: addDummyNode, + simplify: simplify, + asNonCompoundGraph: asNonCompoundGraph, + successorWeights: successorWeights, + predecessorWeights: predecessorWeights, + intersectRect: intersectRect, + buildLayerMatrix: buildLayerMatrix, + normalizeRanks: normalizeRanks, + removeEmptyRanks: removeEmptyRanks, + addBorderNode: addBorderNode, + maxRank: maxRank, + partition: partition, + time: time, + notime: notime + } /* * Adds a dummy node to the graph and return v. */ -function addDummyNode(g, type, attrs, name) { - var v; - do { - v = _.uniqueId(name); - } while (g.hasNode(v)); + function addDummyNode (g, type, attrs, name) { + var v + do { + v = _.uniqueId(name) + } while (g.hasNode(v)) - attrs.dummy = type; - g.setNode(v, attrs); - return v; -} + attrs.dummy = type + g.setNode(v, attrs) + return v + } /* * Returns a new graph with only simple edges. Handles aggregation of data * associated with multi-edges. */ -function simplify(g) { - var simplified = new Graph().setGraph(g.graph()); - _.each(g.nodes(), function(v) { simplified.setNode(v, g.node(v)); }); - _.each(g.edges(), function(e) { - var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }, - label = g.edge(e); - simplified.setEdge(e.v, e.w, { - weight: simpleLabel.weight + label.weight, - minlen: Math.max(simpleLabel.minlen, label.minlen) - }); - }); - return simplified; -} - -function asNonCompoundGraph(g) { - var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph()); - _.each(g.nodes(), function(v) { - if (!g.children(v).length) { - simplified.setNode(v, g.node(v)); - } - }); - _.each(g.edges(), function(e) { - simplified.setEdge(e, g.edge(e)); - }); - return simplified; -} - -function successorWeights(g) { - var weightMap = _.map(g.nodes(), function(v) { - var sucs = {}; - _.each(g.outEdges(v), function(e) { - sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; - }); - return sucs; - }); - return _.zipObject(g.nodes(), weightMap); -} - -function predecessorWeights(g) { - var weightMap = _.map(g.nodes(), function(v) { - var preds = {}; - _.each(g.inEdges(v), function(e) { - preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; - }); - return preds; - }); - return _.zipObject(g.nodes(), weightMap); -} + function simplify (g) { + var simplified = new Graph().setGraph(g.graph()) + _.each(g.nodes(), function (v) { simplified.setNode(v, g.node(v)) }) + _.each(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }, + label = g.edge(e) + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen) + }) + }) + return simplified + } + + function asNonCompoundGraph (g) { + var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph()) + _.each(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)) + } + }) + _.each(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)) + }) + return simplified + } + + function successorWeights (g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {} + _.each(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight + }) + return sucs + }) + return _.zipObject(g.nodes(), weightMap) + } + + function predecessorWeights (g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {} + _.each(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight + }) + return preds + }) + return _.zipObject(g.nodes(), weightMap) + } /* * Finds where a line starting at point ({x, y}) would intersect a rectangle * ({x, y, width, height}) if it were pointing at the rectangle's center. */ -function intersectRect(rect, point) { - var x = rect.x; - var y = rect.y; + function intersectRect (rect, point) { + var x = rect.x + var y = rect.y // Rectangle intersection algorithm from: // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = rect.width / 2; - var h = rect.height / 2; + var dx = point.x - x + var dy = point.y - y + var w = rect.width / 2 + var h = rect.height / 2 - if (!dx && !dy) { - throw new Error("Not possible to find intersection inside of the rectangle"); - } + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle') + } - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { + var sx, sy + if (Math.abs(dy) * w > Math.abs(dx) * h) { // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = h * dx / dy; - sy = h; - } else { + if (dy < 0) { + h = -h + } + sx = h * dx / dy + sy = h + } else { // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = w * dy / dx; - } + if (dx < 0) { + w = -w + } + sx = w + sy = w * dy / dx + } - return { x: x + sx, y: y + sy }; -} + return { x: x + sx, y: y + sy } + } /* * Given a DAG with each node assigned "rank" and "order" properties, this * function will produce a matrix with the ids of each node. */ -function buildLayerMatrix(g) { - var layering = _.map(_.range(maxRank(g) + 1), function() { return []; }); - _.each(g.nodes(), function(v) { - var node = g.node(v), - rank = node.rank; - if (!_.isUndefined(rank)) { - layering[rank][node.order] = v; - } - }); - return layering; -} + function buildLayerMatrix (g) { + var layering = _.map(_.range(maxRank(g) + 1), function () { return [] }) + _.each(g.nodes(), function (v) { + var node = g.node(v), + rank = node.rank + if (!_.isUndefined(rank)) { + layering[rank][node.order] = v + } + }) + return layering + } /* * Adjusts the ranks for all nodes in the graph such that all nodes v have * rank(v) >= 0 and at least one node w has rank(w) = 0. */ -function normalizeRanks(g) { - var min = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; })); - _.each(g.nodes(), function(v) { - var node = g.node(v); - if (_.has(node, "rank")) { - node.rank -= min; - } - }); -} + function normalizeRanks (g) { + var min = _.min(_.map(g.nodes(), function (v) { return g.node(v).rank })) + _.each(g.nodes(), function (v) { + var node = g.node(v) + if (_.has(node, 'rank')) { + node.rank -= min + } + }) + } -function removeEmptyRanks(g) { + function removeEmptyRanks (g) { // Ranks may not start at 0, so we need to offset them - var offset = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; })); + var offset = _.min(_.map(g.nodes(), function (v) { return g.node(v).rank })) - var layers = []; - _.each(g.nodes(), function(v) { - var rank = g.node(v).rank - offset; - if (!layers[rank]) { - layers[rank] = []; - } - layers[rank].push(v); - }); - - var delta = 0, - nodeRankFactor = g.graph().nodeRankFactor; - _.each(layers, function(vs, i) { - if (_.isUndefined(vs) && i % nodeRankFactor !== 0) { - --delta; - } else if (delta) { - _.each(vs, function(v) { g.node(v).rank += delta; }); - } - }); -} - -function addBorderNode(g, prefix, rank, order) { - var node = { - width: 0, - height: 0 - }; - if (arguments.length >= 4) { - node.rank = rank; - node.order = order; - } - return addDummyNode(g, "border", node, prefix); -} - -function maxRank(g) { - return _.max(_.map(g.nodes(), function(v) { - var rank = g.node(v).rank; - if (!_.isUndefined(rank)) { - return rank; - } - })); -} + var layers = [] + _.each(g.nodes(), function (v) { + var rank = g.node(v).rank - offset + if (!layers[rank]) { + layers[rank] = [] + } + layers[rank].push(v) + }) + + var delta = 0, + nodeRankFactor = g.graph().nodeRankFactor + _.each(layers, function (vs, i) { + if (_.isUndefined(vs) && i % nodeRankFactor !== 0) { + --delta + } else if (delta) { + _.each(vs, function (v) { g.node(v).rank += delta }) + } + }) + } + + function addBorderNode (g, prefix, rank, order) { + var node = { + width: 0, + height: 0 + } + if (arguments.length >= 4) { + node.rank = rank + node.order = order + } + return addDummyNode(g, 'border', node, prefix) + } + + function maxRank (g) { + return _.max(_.map(g.nodes(), function (v) { + var rank = g.node(v).rank + if (!_.isUndefined(rank)) { + return rank + } + })) + } /* * Partition a collection into two groups: `lhs` and `rhs`. If the supplied * function returns true for an entry it goes into `lhs`. Otherwise it goes * into `rhs. */ -function partition(collection, fn) { - var result = { lhs: [], rhs: [] }; - _.each(collection, function(value) { - if (fn(value)) { - result.lhs.push(value); - } else { - result.rhs.push(value); - } - }); - return result; -} + function partition (collection, fn) { + var result = { lhs: [], rhs: [] } + _.each(collection, function (value) { + if (fn(value)) { + result.lhs.push(value) + } else { + result.rhs.push(value) + } + }) + return result + } /* * Returns a new function that wraps `fn` with a timer. The wrapper logs the * time it takes to execute the function. */ -function time(name, fn) { - var start = _.now(); - try { - return fn(); - } finally { - console.log(name + " time: " + (_.now() - start) + "ms"); - } -} - -function notime(name, fn) { - return fn(); -} - -},{"./graphlib":57,"./lodash":60}],80:[function(_dereq_,module,exports){ -module.exports = "0.7.4"; - -},{}],81:[function(_dereq_,module,exports){ -module.exports=_dereq_(30) -},{"./lib":97,"./lib/alg":88,"./lib/json":98}],82:[function(_dereq_,module,exports){ -module.exports=_dereq_(31) -},{"../lodash":99}],83:[function(_dereq_,module,exports){ -module.exports=_dereq_(32) -},{"../lodash":99}],84:[function(_dereq_,module,exports){ -module.exports=_dereq_(33) -},{"../lodash":99,"./dijkstra":85}],85:[function(_dereq_,module,exports){ -module.exports=_dereq_(34) -},{"../data/priority-queue":95,"../lodash":99}],86:[function(_dereq_,module,exports){ -module.exports=_dereq_(35) -},{"../lodash":99,"./tarjan":93}],87:[function(_dereq_,module,exports){ -module.exports=_dereq_(36) -},{"../lodash":99}],88:[function(_dereq_,module,exports){ -module.exports=_dereq_(37) -},{"./components":82,"./dijkstra":85,"./dijkstra-all":84,"./find-cycles":86,"./floyd-warshall":87,"./is-acyclic":89,"./postorder":90,"./preorder":91,"./prim":92,"./tarjan":93,"./topsort":94}],89:[function(_dereq_,module,exports){ -module.exports=_dereq_(38) -},{"./topsort":94}],90:[function(_dereq_,module,exports){ -module.exports=_dereq_(39) -},{"./dfs":83}],91:[function(_dereq_,module,exports){ -module.exports=_dereq_(40) -},{"./dfs":83}],92:[function(_dereq_,module,exports){ -module.exports=_dereq_(41) -},{"../data/priority-queue":95,"../graph":96,"../lodash":99}],93:[function(_dereq_,module,exports){ -module.exports=_dereq_(42) -},{"../lodash":99}],94:[function(_dereq_,module,exports){ -module.exports=_dereq_(43) -},{"../lodash":99}],95:[function(_dereq_,module,exports){ -module.exports=_dereq_(44) -},{"../lodash":99}],96:[function(_dereq_,module,exports){ -module.exports=_dereq_(45) -},{"./lodash":99}],97:[function(_dereq_,module,exports){ -module.exports=_dereq_(46) -},{"./graph":96,"./version":100}],98:[function(_dereq_,module,exports){ -module.exports=_dereq_(47) -},{"./graph":96,"./lodash":99}],99:[function(_dereq_,module,exports){ -module.exports=_dereq_(48) -},{"lodash":101}],100:[function(_dereq_,module,exports){ -module.exports=_dereq_(49) -},{}],101:[function(_dereq_,module,exports){ -module.exports=_dereq_(50) -},{}],102:[function(_dereq_,module,exports){ - -},{}],103:[function(_dereq_,module,exports){ -(function (process){ + function time (name, fn) { + var start = _.now() + try { + return fn() + } finally { + console.log(name + ' time: ' + (_.now() - start) + 'ms') + } + } + + function notime (name, fn) { + return fn() + } + }, {'./graphlib': 57, './lodash': 60}], + 80: [function (_dereq_, module, exports) { + module.exports = '0.7.4' + }, {}], + 81: [function (_dereq_, module, exports) { + module.exports = _dereq_(30) + }, {'./lib': 97, './lib/alg': 88, './lib/json': 98}], + 82: [function (_dereq_, module, exports) { + module.exports = _dereq_(31) + }, {'../lodash': 99}], + 83: [function (_dereq_, module, exports) { + module.exports = _dereq_(32) + }, {'../lodash': 99}], + 84: [function (_dereq_, module, exports) { + module.exports = _dereq_(33) + }, {'../lodash': 99, './dijkstra': 85}], + 85: [function (_dereq_, module, exports) { + module.exports = _dereq_(34) + }, {'../data/priority-queue': 95, '../lodash': 99}], + 86: [function (_dereq_, module, exports) { + module.exports = _dereq_(35) + }, {'../lodash': 99, './tarjan': 93}], + 87: [function (_dereq_, module, exports) { + module.exports = _dereq_(36) + }, {'../lodash': 99}], + 88: [function (_dereq_, module, exports) { + module.exports = _dereq_(37) + }, {'./components': 82, './dijkstra': 85, './dijkstra-all': 84, './find-cycles': 86, './floyd-warshall': 87, './is-acyclic': 89, './postorder': 90, './preorder': 91, './prim': 92, './tarjan': 93, './topsort': 94}], + 89: [function (_dereq_, module, exports) { + module.exports = _dereq_(38) + }, {'./topsort': 94}], + 90: [function (_dereq_, module, exports) { + module.exports = _dereq_(39) + }, {'./dfs': 83}], + 91: [function (_dereq_, module, exports) { + module.exports = _dereq_(40) + }, {'./dfs': 83}], + 92: [function (_dereq_, module, exports) { + module.exports = _dereq_(41) + }, {'../data/priority-queue': 95, '../graph': 96, '../lodash': 99}], + 93: [function (_dereq_, module, exports) { + module.exports = _dereq_(42) + }, {'../lodash': 99}], + 94: [function (_dereq_, module, exports) { + module.exports = _dereq_(43) + }, {'../lodash': 99}], + 95: [function (_dereq_, module, exports) { + module.exports = _dereq_(44) + }, {'../lodash': 99}], + 96: [function (_dereq_, module, exports) { + module.exports = _dereq_(45) + }, {'./lodash': 99}], + 97: [function (_dereq_, module, exports) { + module.exports = _dereq_(46) + }, {'./graph': 96, './version': 100}], + 98: [function (_dereq_, module, exports) { + module.exports = _dereq_(47) + }, {'./graph': 96, './lodash': 99}], + 99: [function (_dereq_, module, exports) { + module.exports = _dereq_(48) + }, {'lodash': 101}], + 100: [function (_dereq_, module, exports) { + module.exports = _dereq_(49) + }, {}], + 101: [function (_dereq_, module, exports) { + module.exports = _dereq_(50) + }, {}], + 102: [function (_dereq_, module, exports) { + + }, {}], + 103: [function (_dereq_, module, exports) { + (function (process) { // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -27197,607 +27350,600 @@ module.exports=_dereq_(50) // must be no slashes, empty elements, or device names (c:\) in the array // (so also no leading and trailing slashes - it does not distinguish // relative and absolute paths) -function normalizeArray(parts, allowAboveRoot) { + function normalizeArray (parts, allowAboveRoot) { // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } + var up = 0 + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i] + if (last === '.') { + parts.splice(i, 1) + } else if (last === '..') { + parts.splice(i, 1) + up++ + } else if (up) { + parts.splice(i, 1) + up-- + } + } // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); - } - } + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..') + } + } - return parts; -} + return parts + } // Split a filename into [root, dir, basename, ext], unix version // 'root' is just a slash, or nothing. -var splitPathRe = - /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; -var splitPath = function(filename) { - return splitPathRe.exec(filename).slice(1); -}; + var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/ + var splitPath = function (filename) { + return splitPathRe.exec(filename).slice(1) + } // path.resolve([from ...], to) // posix version -exports.resolve = function() { - var resolvedPath = '', - resolvedAbsolute = false; + exports.resolve = function () { + var resolvedPath = '', + resolvedAbsolute = false - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : process.cwd(); + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd() // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings') + } else if (!path) { + continue + } - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } + resolvedPath = path + '/' + resolvedPath + resolvedAbsolute = path.charAt(0) === '/' + } // At this point the path should be resolved to a full absolute path, but // handle relative paths to be safe (might happen when process.cwd() fails) // Normalize the path - resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) { + return !!p + }), !resolvedAbsolute).join('/') - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.' + } // path.normalize(path) // posix version -exports.normalize = function(path) { - var isAbsolute = exports.isAbsolute(path), - trailingSlash = substr(path, -1) === '/'; + exports.normalize = function (path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/' // Normalize the path - path = normalizeArray(filter(path.split('/'), function(p) { - return !!p; - }), !isAbsolute).join('/'); + path = normalizeArray(filter(path.split('/'), function (p) { + return !!p + }), !isAbsolute).join('/') - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } + if (!path && !isAbsolute) { + path = '.' + } + if (path && trailingSlash) { + path += '/' + } - return (isAbsolute ? '/' : '') + path; -}; + return (isAbsolute ? '/' : '') + path + } // posix version -exports.isAbsolute = function(path) { - return path.charAt(0) === '/'; -}; + exports.isAbsolute = function (path) { + return path.charAt(0) === '/' + } // posix version -exports.join = function() { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(filter(paths, function(p, index) { - if (typeof p !== 'string') { - throw new TypeError('Arguments to path.join must be strings'); - } - return p; - }).join('/')); -}; - + exports.join = function () { + var paths = Array.prototype.slice.call(arguments, 0) + return exports.normalize(filter(paths, function (p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings') + } + return p + }).join('/')) + } // path.relative(from, to) // posix version -exports.relative = function(from, to) { - from = exports.resolve(from).substr(1); - to = exports.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } + exports.relative = function (from, to) { + from = exports.resolve(from).substr(1) + to = exports.resolve(to).substr(1) + + function trim (arr) { + var start = 0 + for (; start < arr.length; start++) { + if (arr[start] !== '') break + } - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } + var end = arr.length - 1 + for (; end >= 0; end--) { + if (arr[end] !== '') break + } - if (start > end) return []; - return arr.slice(start, end - start + 1); - } + if (start > end) return [] + return arr.slice(start, end - start + 1) + } - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); + var fromParts = trim(from.split('/')) + var toParts = trim(to.split('/')) - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } + var length = Math.min(fromParts.length, toParts.length) + var samePartsLength = length + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i + break + } + } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } + var outputParts = [] + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..') + } - outputParts = outputParts.concat(toParts.slice(samePartsLength)); + outputParts = outputParts.concat(toParts.slice(samePartsLength)) - return outputParts.join('/'); -}; + return outputParts.join('/') + } -exports.sep = '/'; -exports.delimiter = ':'; + exports.sep = '/' + exports.delimiter = ':' -exports.dirname = function(path) { - var result = splitPath(path), - root = result[0], - dir = result[1]; + exports.dirname = function (path) { + var result = splitPath(path), + root = result[0], + dir = result[1] - if (!root && !dir) { + if (!root && !dir) { // No dirname whatsoever - return '.'; - } + return '.' + } - if (dir) { + if (dir) { // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - - return root + dir; -}; + dir = dir.substr(0, dir.length - 1) + } + return root + dir + } -exports.basename = function(path, ext) { - var f = splitPath(path)[2]; + exports.basename = function (path, ext) { + var f = splitPath(path)[2] // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; - + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length) + } + return f + } -exports.extname = function(path) { - return splitPath(path)[3]; -}; + exports.extname = function (path) { + return splitPath(path)[3] + } -function filter (xs, f) { - if (xs.filter) return xs.filter(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - if (f(xs[i], i, xs)) res.push(xs[i]); - } - return res; -} + function filter (xs, f) { + if (xs.filter) return xs.filter(f) + var res = [] + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]) + } + return res + } // String.prototype.substr - negative index don't work in IE8 -var substr = 'ab'.substr(-1) === 'b' + var substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) { return str.substr(start, len) } : function (str, start, len) { - if (start < 0) start = str.length + start; - return str.substr(start, len); + if (start < 0) start = str.length + start + return str.substr(start, len) } -; - -}).call(this,_dereq_("1YiZ5S")) -},{"1YiZ5S":104}],104:[function(_dereq_,module,exports){ + }).call(this, _dereq_('1YiZ5S')) + }, {'1YiZ5S': 104}], + 104: [function (_dereq_, module, exports) { // shim for using process in browser -var process = module.exports = {}; + var process = module.exports = {} -process.nextTick = (function () { - var canSetImmediate = typeof window !== 'undefined' - && window.setImmediate; - var canPost = typeof window !== 'undefined' - && window.postMessage && window.addEventListener - ; + process.nextTick = (function () { + var canSetImmediate = typeof window !== 'undefined' && + window.setImmediate + var canPost = typeof window !== 'undefined' && + window.postMessage && window.addEventListener - if (canSetImmediate) { - return function (f) { return window.setImmediate(f) }; - } + if (canSetImmediate) { + return function (f) { return window.setImmediate(f) } + } - if (canPost) { - var queue = []; - window.addEventListener('message', function (ev) { - var source = ev.source; + if (canPost) { + var queue = [] + window.addEventListener('message', function (ev) { + var source = ev.source if ((source === window || source === null) && ev.data === 'process-tick') { - ev.stopPropagation(); - if (queue.length > 0) { - var fn = queue.shift(); - fn(); - } + ev.stopPropagation() + if (queue.length > 0) { + var fn = queue.shift() + fn() + } } - }, true); + }, true) - return function nextTick(fn) { - queue.push(fn); - window.postMessage('process-tick', '*'); - }; - } + return function nextTick (fn) { + queue.push(fn) + window.postMessage('process-tick', '*') + } + } - return function nextTick(fn) { - setTimeout(fn, 0); - }; -})(); + return function nextTick (fn) { + setTimeout(fn, 0) + } + })() -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; + process.title = 'browser' + process.browser = true + process.env = {} + process.argv = [] -function noop() {} + function noop () {} -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; + process.on = noop + process.addListener = noop + process.once = noop + process.off = noop + process.removeListener = noop + process.removeAllListeners = noop + process.emit = noop -process.binding = function (name) { - throw new Error('process.binding is not supported'); -} + process.binding = function (name) { + throw new Error('process.binding is not supported') + } // TODO(shtylman) -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; - -},{}],105:[function(_dereq_,module,exports){ -(function (global){ + process.cwd = function () { return '/' } + process.chdir = function (dir) { + throw new Error('process.chdir is not supported') + } + }, {}], + 105: [function (_dereq_, module, exports) { + (function (global) { /*! http://mths.be/he v0.5.0 by @mathias | MIT license */ -;(function(root) { - + ;(function (root) { // Detect free variables `exports`. - var freeExports = typeof exports == 'object' && exports; + var freeExports = typeof exports === 'object' && exports // Detect free variable `module`. - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; + var freeModule = typeof module === 'object' && module && + module.exports == freeExports && module // Detect free variable `global`, from Node.js or Browserified code, // and use it as `root`. - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } + var freeGlobal = typeof global === 'object' && global + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal + } - /*--------------------------------------------------------------------------*/ + /* -------------------------------------------------------------------------- */ // All astral symbols. - var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g // All ASCII symbols (not just printable ASCII) except those listed in the // first column of the overrides table. // http://whatwg.org/html/tokenization.html#table-charref-overrides - var regexAsciiWhitelist = /[\x01-\x7F]/g; + var regexAsciiWhitelist = /[\x01-\x7F]/g // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or // code points listed in the first column of the overrides table on // http://whatwg.org/html/tokenization.html#table-charref-overrides. - var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g; + var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g - var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g; - var encodeMap = {'\xC1':'Aacute','\xE1':'aacute','\u0102':'Abreve','\u0103':'abreve','\u223E':'ac','\u223F':'acd','\u223E\u0333':'acE','\xC2':'Acirc','\xE2':'acirc','\xB4':'acute','\u0410':'Acy','\u0430':'acy','\xC6':'AElig','\xE6':'aelig','\u2061':'af','\uD835\uDD04':'Afr','\uD835\uDD1E':'afr','\xC0':'Agrave','\xE0':'agrave','\u2135':'aleph','\u0391':'Alpha','\u03B1':'alpha','\u0100':'Amacr','\u0101':'amacr','\u2A3F':'amalg','&':'amp','\u2A55':'andand','\u2A53':'And','\u2227':'and','\u2A5C':'andd','\u2A58':'andslope','\u2A5A':'andv','\u2220':'ang','\u29A4':'ange','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u2221':'angmsd','\u221F':'angrt','\u22BE':'angrtvb','\u299D':'angrtvbd','\u2222':'angsph','\xC5':'angst','\u237C':'angzarr','\u0104':'Aogon','\u0105':'aogon','\uD835\uDD38':'Aopf','\uD835\uDD52':'aopf','\u2A6F':'apacir','\u2248':'ap','\u2A70':'apE','\u224A':'ape','\u224B':'apid','\'':'apos','\xE5':'aring','\uD835\uDC9C':'Ascr','\uD835\uDCB6':'ascr','\u2254':'colone','*':'ast','\u224D':'CupCap','\xC3':'Atilde','\xE3':'atilde','\xC4':'Auml','\xE4':'auml','\u2233':'awconint','\u2A11':'awint','\u224C':'bcong','\u03F6':'bepsi','\u2035':'bprime','\u223D':'bsim','\u22CD':'bsime','\u2216':'setmn','\u2AE7':'Barv','\u22BD':'barvee','\u2305':'barwed','\u2306':'Barwed','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u0411':'Bcy','\u0431':'bcy','\u201E':'bdquo','\u2235':'becaus','\u29B0':'bemptyv','\u212C':'Bscr','\u0392':'Beta','\u03B2':'beta','\u2136':'beth','\u226C':'twixt','\uD835\uDD05':'Bfr','\uD835\uDD1F':'bfr','\u22C2':'xcap','\u25EF':'xcirc','\u22C3':'xcup','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A06':'xsqcup','\u2605':'starf','\u25BD':'xdtri','\u25B3':'xutri','\u2A04':'xuplus','\u22C1':'Vee','\u22C0':'Wedge','\u290D':'rbarr','\u29EB':'lozf','\u25AA':'squf','\u25B4':'utrif','\u25BE':'dtrif','\u25C2':'ltrif','\u25B8':'rtrif','\u2423':'blank','\u2592':'blk12','\u2591':'blk14','\u2593':'blk34','\u2588':'block','=\u20E5':'bne','\u2261\u20E5':'bnequiv','\u2AED':'bNot','\u2310':'bnot','\uD835\uDD39':'Bopf','\uD835\uDD53':'bopf','\u22A5':'bot','\u22C8':'bowtie','\u29C9':'boxbox','\u2510':'boxdl','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u250C':'boxdr','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2500':'boxh','\u2550':'boxH','\u252C':'boxhd','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2534':'boxhu','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u229F':'minusb','\u229E':'plusb','\u22A0':'timesb','\u2518':'boxul','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u2514':'boxur','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u2502':'boxv','\u2551':'boxV','\u253C':'boxvh','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2524':'boxvl','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u251C':'boxvr','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u02D8':'breve','\xA6':'brvbar','\uD835\uDCB7':'bscr','\u204F':'bsemi','\u29C5':'bsolb','\\':'bsol','\u27C8':'bsolhsub','\u2022':'bull','\u224E':'bump','\u2AAE':'bumpE','\u224F':'bumpe','\u0106':'Cacute','\u0107':'cacute','\u2A44':'capand','\u2A49':'capbrcup','\u2A4B':'capcap','\u2229':'cap','\u22D2':'Cap','\u2A47':'capcup','\u2A40':'capdot','\u2145':'DD','\u2229\uFE00':'caps','\u2041':'caret','\u02C7':'caron','\u212D':'Cfr','\u2A4D':'ccaps','\u010C':'Ccaron','\u010D':'ccaron','\xC7':'Ccedil','\xE7':'ccedil','\u0108':'Ccirc','\u0109':'ccirc','\u2230':'Cconint','\u2A4C':'ccups','\u2A50':'ccupssm','\u010A':'Cdot','\u010B':'cdot','\xB8':'cedil','\u29B2':'cemptyv','\xA2':'cent','\xB7':'middot','\uD835\uDD20':'cfr','\u0427':'CHcy','\u0447':'chcy','\u2713':'check','\u03A7':'Chi','\u03C7':'chi','\u02C6':'circ','\u2257':'cire','\u21BA':'olarr','\u21BB':'orarr','\u229B':'oast','\u229A':'ocir','\u229D':'odash','\u2299':'odot','\xAE':'reg','\u24C8':'oS','\u2296':'ominus','\u2295':'oplus','\u2297':'otimes','\u25CB':'cir','\u29C3':'cirE','\u2A10':'cirfnint','\u2AEF':'cirmid','\u29C2':'cirscir','\u2232':'cwconint','\u201D':'rdquo','\u2019':'rsquo','\u2663':'clubs',':':'colon','\u2237':'Colon','\u2A74':'Colone',',':'comma','@':'commat','\u2201':'comp','\u2218':'compfn','\u2102':'Copf','\u2245':'cong','\u2A6D':'congdot','\u2261':'equiv','\u222E':'oint','\u222F':'Conint','\uD835\uDD54':'copf','\u2210':'coprod','\xA9':'copy','\u2117':'copysr','\u21B5':'crarr','\u2717':'cross','\u2A2F':'Cross','\uD835\uDC9E':'Cscr','\uD835\uDCB8':'cscr','\u2ACF':'csub','\u2AD1':'csube','\u2AD0':'csup','\u2AD2':'csupe','\u22EF':'ctdot','\u2938':'cudarrl','\u2935':'cudarrr','\u22DE':'cuepr','\u22DF':'cuesc','\u21B6':'cularr','\u293D':'cularrp','\u2A48':'cupbrcap','\u2A46':'cupcap','\u222A':'cup','\u22D3':'Cup','\u2A4A':'cupcup','\u228D':'cupdot','\u2A45':'cupor','\u222A\uFE00':'cups','\u21B7':'curarr','\u293C':'curarrm','\u22CE':'cuvee','\u22CF':'cuwed','\xA4':'curren','\u2231':'cwint','\u232D':'cylcty','\u2020':'dagger','\u2021':'Dagger','\u2138':'daleth','\u2193':'darr','\u21A1':'Darr','\u21D3':'dArr','\u2010':'dash','\u2AE4':'Dashv','\u22A3':'dashv','\u290F':'rBarr','\u02DD':'dblac','\u010E':'Dcaron','\u010F':'dcaron','\u0414':'Dcy','\u0434':'dcy','\u21CA':'ddarr','\u2146':'dd','\u2911':'DDotrahd','\u2A77':'eDDot','\xB0':'deg','\u2207':'Del','\u0394':'Delta','\u03B4':'delta','\u29B1':'demptyv','\u297F':'dfisht','\uD835\uDD07':'Dfr','\uD835\uDD21':'dfr','\u2965':'dHar','\u21C3':'dharl','\u21C2':'dharr','\u02D9':'dot','`':'grave','\u02DC':'tilde','\u22C4':'diam','\u2666':'diams','\xA8':'die','\u03DD':'gammad','\u22F2':'disin','\xF7':'div','\u22C7':'divonx','\u0402':'DJcy','\u0452':'djcy','\u231E':'dlcorn','\u230D':'dlcrop','$':'dollar','\uD835\uDD3B':'Dopf','\uD835\uDD55':'dopf','\u20DC':'DotDot','\u2250':'doteq','\u2251':'eDot','\u2238':'minusd','\u2214':'plusdo','\u22A1':'sdotb','\u21D0':'lArr','\u21D4':'iff','\u27F8':'xlArr','\u27FA':'xhArr','\u27F9':'xrArr','\u21D2':'rArr','\u22A8':'vDash','\u21D1':'uArr','\u21D5':'vArr','\u2225':'par','\u2913':'DownArrowBar','\u21F5':'duarr','\u0311':'DownBreve','\u2950':'DownLeftRightVector','\u295E':'DownLeftTeeVector','\u2956':'DownLeftVectorBar','\u21BD':'lhard','\u295F':'DownRightTeeVector','\u2957':'DownRightVectorBar','\u21C1':'rhard','\u21A7':'mapstodown','\u22A4':'top','\u2910':'RBarr','\u231F':'drcorn','\u230C':'drcrop','\uD835\uDC9F':'Dscr','\uD835\uDCB9':'dscr','\u0405':'DScy','\u0455':'dscy','\u29F6':'dsol','\u0110':'Dstrok','\u0111':'dstrok','\u22F1':'dtdot','\u25BF':'dtri','\u296F':'duhar','\u29A6':'dwangle','\u040F':'DZcy','\u045F':'dzcy','\u27FF':'dzigrarr','\xC9':'Eacute','\xE9':'eacute','\u2A6E':'easter','\u011A':'Ecaron','\u011B':'ecaron','\xCA':'Ecirc','\xEA':'ecirc','\u2256':'ecir','\u2255':'ecolon','\u042D':'Ecy','\u044D':'ecy','\u0116':'Edot','\u0117':'edot','\u2147':'ee','\u2252':'efDot','\uD835\uDD08':'Efr','\uD835\uDD22':'efr','\u2A9A':'eg','\xC8':'Egrave','\xE8':'egrave','\u2A96':'egs','\u2A98':'egsdot','\u2A99':'el','\u2208':'in','\u23E7':'elinters','\u2113':'ell','\u2A95':'els','\u2A97':'elsdot','\u0112':'Emacr','\u0113':'emacr','\u2205':'empty','\u25FB':'EmptySmallSquare','\u25AB':'EmptyVerySmallSquare','\u2004':'emsp13','\u2005':'emsp14','\u2003':'emsp','\u014A':'ENG','\u014B':'eng','\u2002':'ensp','\u0118':'Eogon','\u0119':'eogon','\uD835\uDD3C':'Eopf','\uD835\uDD56':'eopf','\u22D5':'epar','\u29E3':'eparsl','\u2A71':'eplus','\u03B5':'epsi','\u0395':'Epsilon','\u03F5':'epsiv','\u2242':'esim','\u2A75':'Equal','=':'equals','\u225F':'equest','\u21CC':'rlhar','\u2A78':'equivDD','\u29E5':'eqvparsl','\u2971':'erarr','\u2253':'erDot','\u212F':'escr','\u2130':'Escr','\u2A73':'Esim','\u0397':'Eta','\u03B7':'eta','\xD0':'ETH','\xF0':'eth','\xCB':'Euml','\xEB':'euml','\u20AC':'euro','!':'excl','\u2203':'exist','\u0424':'Fcy','\u0444':'fcy','\u2640':'female','\uFB03':'ffilig','\uFB00':'fflig','\uFB04':'ffllig','\uD835\uDD09':'Ffr','\uD835\uDD23':'ffr','\uFB01':'filig','\u25FC':'FilledSmallSquare','fj':'fjlig','\u266D':'flat','\uFB02':'fllig','\u25B1':'fltns','\u0192':'fnof','\uD835\uDD3D':'Fopf','\uD835\uDD57':'fopf','\u2200':'forall','\u22D4':'fork','\u2AD9':'forkv','\u2131':'Fscr','\u2A0D':'fpartint','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\u2154':'frac23','\u2156':'frac25','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\u2044':'frasl','\u2322':'frown','\uD835\uDCBB':'fscr','\u01F5':'gacute','\u0393':'Gamma','\u03B3':'gamma','\u03DC':'Gammad','\u2A86':'gap','\u011E':'Gbreve','\u011F':'gbreve','\u0122':'Gcedil','\u011C':'Gcirc','\u011D':'gcirc','\u0413':'Gcy','\u0433':'gcy','\u0120':'Gdot','\u0121':'gdot','\u2265':'ge','\u2267':'gE','\u2A8C':'gEl','\u22DB':'gel','\u2A7E':'ges','\u2AA9':'gescc','\u2A80':'gesdot','\u2A82':'gesdoto','\u2A84':'gesdotol','\u22DB\uFE00':'gesl','\u2A94':'gesles','\uD835\uDD0A':'Gfr','\uD835\uDD24':'gfr','\u226B':'gg','\u22D9':'Gg','\u2137':'gimel','\u0403':'GJcy','\u0453':'gjcy','\u2AA5':'gla','\u2277':'gl','\u2A92':'glE','\u2AA4':'glj','\u2A8A':'gnap','\u2A88':'gne','\u2269':'gnE','\u22E7':'gnsim','\uD835\uDD3E':'Gopf','\uD835\uDD58':'gopf','\u2AA2':'GreaterGreater','\u2273':'gsim','\uD835\uDCA2':'Gscr','\u210A':'gscr','\u2A8E':'gsime','\u2A90':'gsiml','\u2AA7':'gtcc','\u2A7A':'gtcir','>':'gt','\u22D7':'gtdot','\u2995':'gtlPar','\u2A7C':'gtquest','\u2978':'gtrarr','\u2269\uFE00':'gvnE','\u200A':'hairsp','\u210B':'Hscr','\u042A':'HARDcy','\u044A':'hardcy','\u2948':'harrcir','\u2194':'harr','\u21AD':'harrw','^':'Hat','\u210F':'hbar','\u0124':'Hcirc','\u0125':'hcirc','\u2665':'hearts','\u2026':'mldr','\u22B9':'hercon','\uD835\uDD25':'hfr','\u210C':'Hfr','\u2925':'searhk','\u2926':'swarhk','\u21FF':'hoarr','\u223B':'homtht','\u21A9':'larrhk','\u21AA':'rarrhk','\uD835\uDD59':'hopf','\u210D':'Hopf','\u2015':'horbar','\uD835\uDCBD':'hscr','\u0126':'Hstrok','\u0127':'hstrok','\u2043':'hybull','\xCD':'Iacute','\xED':'iacute','\u2063':'ic','\xCE':'Icirc','\xEE':'icirc','\u0418':'Icy','\u0438':'icy','\u0130':'Idot','\u0415':'IEcy','\u0435':'iecy','\xA1':'iexcl','\uD835\uDD26':'ifr','\u2111':'Im','\xCC':'Igrave','\xEC':'igrave','\u2148':'ii','\u2A0C':'qint','\u222D':'tint','\u29DC':'iinfin','\u2129':'iiota','\u0132':'IJlig','\u0133':'ijlig','\u012A':'Imacr','\u012B':'imacr','\u2110':'Iscr','\u0131':'imath','\u22B7':'imof','\u01B5':'imped','\u2105':'incare','\u221E':'infin','\u29DD':'infintie','\u22BA':'intcal','\u222B':'int','\u222C':'Int','\u2124':'Zopf','\u2A17':'intlarhk','\u2A3C':'iprod','\u2062':'it','\u0401':'IOcy','\u0451':'iocy','\u012E':'Iogon','\u012F':'iogon','\uD835\uDD40':'Iopf','\uD835\uDD5A':'iopf','\u0399':'Iota','\u03B9':'iota','\xBF':'iquest','\uD835\uDCBE':'iscr','\u22F5':'isindot','\u22F9':'isinE','\u22F4':'isins','\u22F3':'isinsv','\u0128':'Itilde','\u0129':'itilde','\u0406':'Iukcy','\u0456':'iukcy','\xCF':'Iuml','\xEF':'iuml','\u0134':'Jcirc','\u0135':'jcirc','\u0419':'Jcy','\u0439':'jcy','\uD835\uDD0D':'Jfr','\uD835\uDD27':'jfr','\u0237':'jmath','\uD835\uDD41':'Jopf','\uD835\uDD5B':'jopf','\uD835\uDCA5':'Jscr','\uD835\uDCBF':'jscr','\u0408':'Jsercy','\u0458':'jsercy','\u0404':'Jukcy','\u0454':'jukcy','\u039A':'Kappa','\u03BA':'kappa','\u03F0':'kappav','\u0136':'Kcedil','\u0137':'kcedil','\u041A':'Kcy','\u043A':'kcy','\uD835\uDD0E':'Kfr','\uD835\uDD28':'kfr','\u0138':'kgreen','\u0425':'KHcy','\u0445':'khcy','\u040C':'KJcy','\u045C':'kjcy','\uD835\uDD42':'Kopf','\uD835\uDD5C':'kopf','\uD835\uDCA6':'Kscr','\uD835\uDCC0':'kscr','\u21DA':'lAarr','\u0139':'Lacute','\u013A':'lacute','\u29B4':'laemptyv','\u2112':'Lscr','\u039B':'Lambda','\u03BB':'lambda','\u27E8':'lang','\u27EA':'Lang','\u2991':'langd','\u2A85':'lap','\xAB':'laquo','\u21E4':'larrb','\u291F':'larrbfs','\u2190':'larr','\u219E':'Larr','\u291D':'larrfs','\u21AB':'larrlp','\u2939':'larrpl','\u2973':'larrsim','\u21A2':'larrtl','\u2919':'latail','\u291B':'lAtail','\u2AAB':'lat','\u2AAD':'late','\u2AAD\uFE00':'lates','\u290C':'lbarr','\u290E':'lBarr','\u2772':'lbbrk','{':'lcub','[':'lsqb','\u298B':'lbrke','\u298F':'lbrksld','\u298D':'lbrkslu','\u013D':'Lcaron','\u013E':'lcaron','\u013B':'Lcedil','\u013C':'lcedil','\u2308':'lceil','\u041B':'Lcy','\u043B':'lcy','\u2936':'ldca','\u201C':'ldquo','\u2967':'ldrdhar','\u294B':'ldrushar','\u21B2':'ldsh','\u2264':'le','\u2266':'lE','\u21C6':'lrarr','\u27E6':'lobrk','\u2961':'LeftDownTeeVector','\u2959':'LeftDownVectorBar','\u230A':'lfloor','\u21BC':'lharu','\u21C7':'llarr','\u21CB':'lrhar','\u294E':'LeftRightVector','\u21A4':'mapstoleft','\u295A':'LeftTeeVector','\u22CB':'lthree','\u29CF':'LeftTriangleBar','\u22B2':'vltri','\u22B4':'ltrie','\u2951':'LeftUpDownVector','\u2960':'LeftUpTeeVector','\u2958':'LeftUpVectorBar','\u21BF':'uharl','\u2952':'LeftVectorBar','\u2A8B':'lEg','\u22DA':'leg','\u2A7D':'les','\u2AA8':'lescc','\u2A7F':'lesdot','\u2A81':'lesdoto','\u2A83':'lesdotor','\u22DA\uFE00':'lesg','\u2A93':'lesges','\u22D6':'ltdot','\u2276':'lg','\u2AA1':'LessLess','\u2272':'lsim','\u297C':'lfisht','\uD835\uDD0F':'Lfr','\uD835\uDD29':'lfr','\u2A91':'lgE','\u2962':'lHar','\u296A':'lharul','\u2584':'lhblk','\u0409':'LJcy','\u0459':'ljcy','\u226A':'ll','\u22D8':'Ll','\u296B':'llhard','\u25FA':'lltri','\u013F':'Lmidot','\u0140':'lmidot','\u23B0':'lmoust','\u2A89':'lnap','\u2A87':'lne','\u2268':'lnE','\u22E6':'lnsim','\u27EC':'loang','\u21FD':'loarr','\u27F5':'xlarr','\u27F7':'xharr','\u27FC':'xmap','\u27F6':'xrarr','\u21AC':'rarrlp','\u2985':'lopar','\uD835\uDD43':'Lopf','\uD835\uDD5D':'lopf','\u2A2D':'loplus','\u2A34':'lotimes','\u2217':'lowast','_':'lowbar','\u2199':'swarr','\u2198':'searr','\u25CA':'loz','(':'lpar','\u2993':'lparlt','\u296D':'lrhard','\u200E':'lrm','\u22BF':'lrtri','\u2039':'lsaquo','\uD835\uDCC1':'lscr','\u21B0':'lsh','\u2A8D':'lsime','\u2A8F':'lsimg','\u2018':'lsquo','\u201A':'sbquo','\u0141':'Lstrok','\u0142':'lstrok','\u2AA6':'ltcc','\u2A79':'ltcir','<':'lt','\u22C9':'ltimes','\u2976':'ltlarr','\u2A7B':'ltquest','\u25C3':'ltri','\u2996':'ltrPar','\u294A':'lurdshar','\u2966':'luruhar','\u2268\uFE00':'lvnE','\xAF':'macr','\u2642':'male','\u2720':'malt','\u2905':'Map','\u21A6':'map','\u21A5':'mapstoup','\u25AE':'marker','\u2A29':'mcomma','\u041C':'Mcy','\u043C':'mcy','\u2014':'mdash','\u223A':'mDDot','\u205F':'MediumSpace','\u2133':'Mscr','\uD835\uDD10':'Mfr','\uD835\uDD2A':'mfr','\u2127':'mho','\xB5':'micro','\u2AF0':'midcir','\u2223':'mid','\u2212':'minus','\u2A2A':'minusdu','\u2213':'mp','\u2ADB':'mlcp','\u22A7':'models','\uD835\uDD44':'Mopf','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\u039C':'Mu','\u03BC':'mu','\u22B8':'mumap','\u0143':'Nacute','\u0144':'nacute','\u2220\u20D2':'nang','\u2249':'nap','\u2A70\u0338':'napE','\u224B\u0338':'napid','\u0149':'napos','\u266E':'natur','\u2115':'Nopf','\xA0':'nbsp','\u224E\u0338':'nbump','\u224F\u0338':'nbumpe','\u2A43':'ncap','\u0147':'Ncaron','\u0148':'ncaron','\u0145':'Ncedil','\u0146':'ncedil','\u2247':'ncong','\u2A6D\u0338':'ncongdot','\u2A42':'ncup','\u041D':'Ncy','\u043D':'ncy','\u2013':'ndash','\u2924':'nearhk','\u2197':'nearr','\u21D7':'neArr','\u2260':'ne','\u2250\u0338':'nedot','\u200B':'ZeroWidthSpace','\u2262':'nequiv','\u2928':'toea','\u2242\u0338':'nesim','\n':'NewLine','\u2204':'nexist','\uD835\uDD11':'Nfr','\uD835\uDD2B':'nfr','\u2267\u0338':'ngE','\u2271':'nge','\u2A7E\u0338':'nges','\u22D9\u0338':'nGg','\u2275':'ngsim','\u226B\u20D2':'nGt','\u226F':'ngt','\u226B\u0338':'nGtv','\u21AE':'nharr','\u21CE':'nhArr','\u2AF2':'nhpar','\u220B':'ni','\u22FC':'nis','\u22FA':'nisd','\u040A':'NJcy','\u045A':'njcy','\u219A':'nlarr','\u21CD':'nlArr','\u2025':'nldr','\u2266\u0338':'nlE','\u2270':'nle','\u2A7D\u0338':'nles','\u226E':'nlt','\u22D8\u0338':'nLl','\u2274':'nlsim','\u226A\u20D2':'nLt','\u22EA':'nltri','\u22EC':'nltrie','\u226A\u0338':'nLtv','\u2224':'nmid','\u2060':'NoBreak','\uD835\uDD5F':'nopf','\u2AEC':'Not','\xAC':'not','\u226D':'NotCupCap','\u2226':'npar','\u2209':'notin','\u2279':'ntgl','\u22F5\u0338':'notindot','\u22F9\u0338':'notinE','\u22F7':'notinvb','\u22F6':'notinvc','\u29CF\u0338':'NotLeftTriangleBar','\u2278':'ntlg','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA1\u0338':'NotNestedLessLess','\u220C':'notni','\u22FE':'notnivb','\u22FD':'notnivc','\u2280':'npr','\u2AAF\u0338':'npre','\u22E0':'nprcue','\u29D0\u0338':'NotRightTriangleBar','\u22EB':'nrtri','\u22ED':'nrtrie','\u228F\u0338':'NotSquareSubset','\u22E2':'nsqsube','\u2290\u0338':'NotSquareSuperset','\u22E3':'nsqsupe','\u2282\u20D2':'vnsub','\u2288':'nsube','\u2281':'nsc','\u2AB0\u0338':'nsce','\u22E1':'nsccue','\u227F\u0338':'NotSucceedsTilde','\u2283\u20D2':'vnsup','\u2289':'nsupe','\u2241':'nsim','\u2244':'nsime','\u2AFD\u20E5':'nparsl','\u2202\u0338':'npart','\u2A14':'npolint','\u2933\u0338':'nrarrc','\u219B':'nrarr','\u21CF':'nrArr','\u219D\u0338':'nrarrw','\uD835\uDCA9':'Nscr','\uD835\uDCC3':'nscr','\u2284':'nsub','\u2AC5\u0338':'nsubE','\u2285':'nsup','\u2AC6\u0338':'nsupE','\xD1':'Ntilde','\xF1':'ntilde','\u039D':'Nu','\u03BD':'nu','#':'num','\u2116':'numero','\u2007':'numsp','\u224D\u20D2':'nvap','\u22AC':'nvdash','\u22AD':'nvDash','\u22AE':'nVdash','\u22AF':'nVDash','\u2265\u20D2':'nvge','>\u20D2':'nvgt','\u2904':'nvHarr','\u29DE':'nvinfin','\u2902':'nvlArr','\u2264\u20D2':'nvle','<\u20D2':'nvlt','\u22B4\u20D2':'nvltrie','\u2903':'nvrArr','\u22B5\u20D2':'nvrtrie','\u223C\u20D2':'nvsim','\u2923':'nwarhk','\u2196':'nwarr','\u21D6':'nwArr','\u2927':'nwnear','\xD3':'Oacute','\xF3':'oacute','\xD4':'Ocirc','\xF4':'ocirc','\u041E':'Ocy','\u043E':'ocy','\u0150':'Odblac','\u0151':'odblac','\u2A38':'odiv','\u29BC':'odsold','\u0152':'OElig','\u0153':'oelig','\u29BF':'ofcir','\uD835\uDD12':'Ofr','\uD835\uDD2C':'ofr','\u02DB':'ogon','\xD2':'Ograve','\xF2':'ograve','\u29C1':'ogt','\u29B5':'ohbar','\u03A9':'ohm','\u29BE':'olcir','\u29BB':'olcross','\u203E':'oline','\u29C0':'olt','\u014C':'Omacr','\u014D':'omacr','\u03C9':'omega','\u039F':'Omicron','\u03BF':'omicron','\u29B6':'omid','\uD835\uDD46':'Oopf','\uD835\uDD60':'oopf','\u29B7':'opar','\u29B9':'operp','\u2A54':'Or','\u2228':'or','\u2A5D':'ord','\u2134':'oscr','\xAA':'ordf','\xBA':'ordm','\u22B6':'origof','\u2A56':'oror','\u2A57':'orslope','\u2A5B':'orv','\uD835\uDCAA':'Oscr','\xD8':'Oslash','\xF8':'oslash','\u2298':'osol','\xD5':'Otilde','\xF5':'otilde','\u2A36':'otimesas','\u2A37':'Otimes','\xD6':'Ouml','\xF6':'ouml','\u233D':'ovbar','\u23DE':'OverBrace','\u23B4':'tbrk','\u23DC':'OverParenthesis','\xB6':'para','\u2AF3':'parsim','\u2AFD':'parsl','\u2202':'part','\u041F':'Pcy','\u043F':'pcy','%':'percnt','.':'period','\u2030':'permil','\u2031':'pertenk','\uD835\uDD13':'Pfr','\uD835\uDD2D':'pfr','\u03A6':'Phi','\u03C6':'phi','\u03D5':'phiv','\u260E':'phone','\u03A0':'Pi','\u03C0':'pi','\u03D6':'piv','\u210E':'planckh','\u2A23':'plusacir','\u2A22':'pluscir','+':'plus','\u2A25':'plusdu','\u2A72':'pluse','\xB1':'pm','\u2A26':'plussim','\u2A27':'plustwo','\u2A15':'pointint','\uD835\uDD61':'popf','\u2119':'Popf','\xA3':'pound','\u2AB7':'prap','\u2ABB':'Pr','\u227A':'pr','\u227C':'prcue','\u2AAF':'pre','\u227E':'prsim','\u2AB9':'prnap','\u2AB5':'prnE','\u22E8':'prnsim','\u2AB3':'prE','\u2032':'prime','\u2033':'Prime','\u220F':'prod','\u232E':'profalar','\u2312':'profline','\u2313':'profsurf','\u221D':'prop','\u22B0':'prurel','\uD835\uDCAB':'Pscr','\uD835\uDCC5':'pscr','\u03A8':'Psi','\u03C8':'psi','\u2008':'puncsp','\uD835\uDD14':'Qfr','\uD835\uDD2E':'qfr','\uD835\uDD62':'qopf','\u211A':'Qopf','\u2057':'qprime','\uD835\uDCAC':'Qscr','\uD835\uDCC6':'qscr','\u2A16':'quatint','?':'quest','"':'quot','\u21DB':'rAarr','\u223D\u0331':'race','\u0154':'Racute','\u0155':'racute','\u221A':'Sqrt','\u29B3':'raemptyv','\u27E9':'rang','\u27EB':'Rang','\u2992':'rangd','\u29A5':'range','\xBB':'raquo','\u2975':'rarrap','\u21E5':'rarrb','\u2920':'rarrbfs','\u2933':'rarrc','\u2192':'rarr','\u21A0':'Rarr','\u291E':'rarrfs','\u2945':'rarrpl','\u2974':'rarrsim','\u2916':'Rarrtl','\u21A3':'rarrtl','\u219D':'rarrw','\u291A':'ratail','\u291C':'rAtail','\u2236':'ratio','\u2773':'rbbrk','}':'rcub',']':'rsqb','\u298C':'rbrke','\u298E':'rbrksld','\u2990':'rbrkslu','\u0158':'Rcaron','\u0159':'rcaron','\u0156':'Rcedil','\u0157':'rcedil','\u2309':'rceil','\u0420':'Rcy','\u0440':'rcy','\u2937':'rdca','\u2969':'rdldhar','\u21B3':'rdsh','\u211C':'Re','\u211B':'Rscr','\u211D':'Ropf','\u25AD':'rect','\u297D':'rfisht','\u230B':'rfloor','\uD835\uDD2F':'rfr','\u2964':'rHar','\u21C0':'rharu','\u296C':'rharul','\u03A1':'Rho','\u03C1':'rho','\u03F1':'rhov','\u21C4':'rlarr','\u27E7':'robrk','\u295D':'RightDownTeeVector','\u2955':'RightDownVectorBar','\u21C9':'rrarr','\u22A2':'vdash','\u295B':'RightTeeVector','\u22CC':'rthree','\u29D0':'RightTriangleBar','\u22B3':'vrtri','\u22B5':'rtrie','\u294F':'RightUpDownVector','\u295C':'RightUpTeeVector','\u2954':'RightUpVectorBar','\u21BE':'uharr','\u2953':'RightVectorBar','\u02DA':'ring','\u200F':'rlm','\u23B1':'rmoust','\u2AEE':'rnmid','\u27ED':'roang','\u21FE':'roarr','\u2986':'ropar','\uD835\uDD63':'ropf','\u2A2E':'roplus','\u2A35':'rotimes','\u2970':'RoundImplies',')':'rpar','\u2994':'rpargt','\u2A12':'rppolint','\u203A':'rsaquo','\uD835\uDCC7':'rscr','\u21B1':'rsh','\u22CA':'rtimes','\u25B9':'rtri','\u29CE':'rtriltri','\u29F4':'RuleDelayed','\u2968':'ruluhar','\u211E':'rx','\u015A':'Sacute','\u015B':'sacute','\u2AB8':'scap','\u0160':'Scaron','\u0161':'scaron','\u2ABC':'Sc','\u227B':'sc','\u227D':'sccue','\u2AB0':'sce','\u2AB4':'scE','\u015E':'Scedil','\u015F':'scedil','\u015C':'Scirc','\u015D':'scirc','\u2ABA':'scnap','\u2AB6':'scnE','\u22E9':'scnsim','\u2A13':'scpolint','\u227F':'scsim','\u0421':'Scy','\u0441':'scy','\u22C5':'sdot','\u2A66':'sdote','\u21D8':'seArr','\xA7':'sect',';':'semi','\u2929':'tosa','\u2736':'sext','\uD835\uDD16':'Sfr','\uD835\uDD30':'sfr','\u266F':'sharp','\u0429':'SHCHcy','\u0449':'shchcy','\u0428':'SHcy','\u0448':'shcy','\u2191':'uarr','\xAD':'shy','\u03A3':'Sigma','\u03C3':'sigma','\u03C2':'sigmaf','\u223C':'sim','\u2A6A':'simdot','\u2243':'sime','\u2A9E':'simg','\u2AA0':'simgE','\u2A9D':'siml','\u2A9F':'simlE','\u2246':'simne','\u2A24':'simplus','\u2972':'simrarr','\u2A33':'smashp','\u29E4':'smeparsl','\u2323':'smile','\u2AAA':'smt','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u042C':'SOFTcy','\u044C':'softcy','\u233F':'solbar','\u29C4':'solb','/':'sol','\uD835\uDD4A':'Sopf','\uD835\uDD64':'sopf','\u2660':'spades','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u228F':'sqsub','\u2291':'sqsube','\u2290':'sqsup','\u2292':'sqsupe','\u25A1':'squ','\uD835\uDCAE':'Sscr','\uD835\uDCC8':'sscr','\u22C6':'Star','\u2606':'star','\u2282':'sub','\u22D0':'Sub','\u2ABD':'subdot','\u2AC5':'subE','\u2286':'sube','\u2AC3':'subedot','\u2AC1':'submult','\u2ACB':'subnE','\u228A':'subne','\u2ABF':'subplus','\u2979':'subrarr','\u2AC7':'subsim','\u2AD5':'subsub','\u2AD3':'subsup','\u2211':'sum','\u266A':'sung','\xB9':'sup1','\xB2':'sup2','\xB3':'sup3','\u2283':'sup','\u22D1':'Sup','\u2ABE':'supdot','\u2AD8':'supdsub','\u2AC6':'supE','\u2287':'supe','\u2AC4':'supedot','\u27C9':'suphsol','\u2AD7':'suphsub','\u297B':'suplarr','\u2AC2':'supmult','\u2ACC':'supnE','\u228B':'supne','\u2AC0':'supplus','\u2AC8':'supsim','\u2AD4':'supsub','\u2AD6':'supsup','\u21D9':'swArr','\u292A':'swnwar','\xDF':'szlig','\t':'Tab','\u2316':'target','\u03A4':'Tau','\u03C4':'tau','\u0164':'Tcaron','\u0165':'tcaron','\u0162':'Tcedil','\u0163':'tcedil','\u0422':'Tcy','\u0442':'tcy','\u20DB':'tdot','\u2315':'telrec','\uD835\uDD17':'Tfr','\uD835\uDD31':'tfr','\u2234':'there4','\u0398':'Theta','\u03B8':'theta','\u03D1':'thetav','\u205F\u200A':'ThickSpace','\u2009':'thinsp','\xDE':'THORN','\xFE':'thorn','\u2A31':'timesbar','\xD7':'times','\u2A30':'timesd','\u2336':'topbot','\u2AF1':'topcir','\uD835\uDD4B':'Topf','\uD835\uDD65':'topf','\u2ADA':'topfork','\u2034':'tprime','\u2122':'trade','\u25B5':'utri','\u225C':'trie','\u25EC':'tridot','\u2A3A':'triminus','\u2A39':'triplus','\u29CD':'trisb','\u2A3B':'tritime','\u23E2':'trpezium','\uD835\uDCAF':'Tscr','\uD835\uDCC9':'tscr','\u0426':'TScy','\u0446':'tscy','\u040B':'TSHcy','\u045B':'tshcy','\u0166':'Tstrok','\u0167':'tstrok','\xDA':'Uacute','\xFA':'uacute','\u219F':'Uarr','\u2949':'Uarrocir','\u040E':'Ubrcy','\u045E':'ubrcy','\u016C':'Ubreve','\u016D':'ubreve','\xDB':'Ucirc','\xFB':'ucirc','\u0423':'Ucy','\u0443':'ucy','\u21C5':'udarr','\u0170':'Udblac','\u0171':'udblac','\u296E':'udhar','\u297E':'ufisht','\uD835\uDD18':'Ufr','\uD835\uDD32':'ufr','\xD9':'Ugrave','\xF9':'ugrave','\u2963':'uHar','\u2580':'uhblk','\u231C':'ulcorn','\u230F':'ulcrop','\u25F8':'ultri','\u016A':'Umacr','\u016B':'umacr','\u23DF':'UnderBrace','\u23DD':'UnderParenthesis','\u228E':'uplus','\u0172':'Uogon','\u0173':'uogon','\uD835\uDD4C':'Uopf','\uD835\uDD66':'uopf','\u2912':'UpArrowBar','\u2195':'varr','\u03C5':'upsi','\u03D2':'Upsi','\u03A5':'Upsilon','\u21C8':'uuarr','\u231D':'urcorn','\u230E':'urcrop','\u016E':'Uring','\u016F':'uring','\u25F9':'urtri','\uD835\uDCB0':'Uscr','\uD835\uDCCA':'uscr','\u22F0':'utdot','\u0168':'Utilde','\u0169':'utilde','\xDC':'Uuml','\xFC':'uuml','\u29A7':'uwangle','\u299C':'vangrt','\u228A\uFE00':'vsubne','\u2ACB\uFE00':'vsubnE','\u228B\uFE00':'vsupne','\u2ACC\uFE00':'vsupnE','\u2AE8':'vBar','\u2AEB':'Vbar','\u2AE9':'vBarv','\u0412':'Vcy','\u0432':'vcy','\u22A9':'Vdash','\u22AB':'VDash','\u2AE6':'Vdashl','\u22BB':'veebar','\u225A':'veeeq','\u22EE':'vellip','|':'vert','\u2016':'Vert','\u2758':'VerticalSeparator','\u2240':'wr','\uD835\uDD19':'Vfr','\uD835\uDD33':'vfr','\uD835\uDD4D':'Vopf','\uD835\uDD67':'vopf','\uD835\uDCB1':'Vscr','\uD835\uDCCB':'vscr','\u22AA':'Vvdash','\u299A':'vzigzag','\u0174':'Wcirc','\u0175':'wcirc','\u2A5F':'wedbar','\u2259':'wedgeq','\u2118':'wp','\uD835\uDD1A':'Wfr','\uD835\uDD34':'wfr','\uD835\uDD4E':'Wopf','\uD835\uDD68':'wopf','\uD835\uDCB2':'Wscr','\uD835\uDCCC':'wscr','\uD835\uDD1B':'Xfr','\uD835\uDD35':'xfr','\u039E':'Xi','\u03BE':'xi','\u22FB':'xnis','\uD835\uDD4F':'Xopf','\uD835\uDD69':'xopf','\uD835\uDCB3':'Xscr','\uD835\uDCCD':'xscr','\xDD':'Yacute','\xFD':'yacute','\u042F':'YAcy','\u044F':'yacy','\u0176':'Ycirc','\u0177':'ycirc','\u042B':'Ycy','\u044B':'ycy','\xA5':'yen','\uD835\uDD1C':'Yfr','\uD835\uDD36':'yfr','\u0407':'YIcy','\u0457':'yicy','\uD835\uDD50':'Yopf','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDCCE':'yscr','\u042E':'YUcy','\u044E':'yucy','\xFF':'yuml','\u0178':'Yuml','\u0179':'Zacute','\u017A':'zacute','\u017D':'Zcaron','\u017E':'zcaron','\u0417':'Zcy','\u0437':'zcy','\u017B':'Zdot','\u017C':'zdot','\u2128':'Zfr','\u0396':'Zeta','\u03B6':'zeta','\uD835\uDD37':'zfr','\u0416':'ZHcy','\u0436':'zhcy','\u21DD':'zigrarr','\uD835\uDD6B':'zopf','\uD835\uDCB5':'Zscr','\uD835\uDCCF':'zscr','\u200D':'zwj','\u200C':'zwnj'}; + var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g + var encodeMap = {'\xC1': 'Aacute', '\xE1': 'aacute', '\u0102': 'Abreve', '\u0103': 'abreve', '\u223E': 'ac', '\u223F': 'acd', '\u223E\u0333': 'acE', '\xC2': 'Acirc', '\xE2': 'acirc', '\xB4': 'acute', '\u0410': 'Acy', '\u0430': 'acy', '\xC6': 'AElig', '\xE6': 'aelig', '\u2061': 'af', '\uD835\uDD04': 'Afr', '\uD835\uDD1E': 'afr', '\xC0': 'Agrave', '\xE0': 'agrave', '\u2135': 'aleph', '\u0391': 'Alpha', '\u03B1': 'alpha', '\u0100': 'Amacr', '\u0101': 'amacr', '\u2A3F': 'amalg', '&': 'amp', '\u2A55': 'andand', '\u2A53': 'And', '\u2227': 'and', '\u2A5C': 'andd', '\u2A58': 'andslope', '\u2A5A': 'andv', '\u2220': 'ang', '\u29A4': 'ange', '\u29A8': 'angmsdaa', '\u29A9': 'angmsdab', '\u29AA': 'angmsdac', '\u29AB': 'angmsdad', '\u29AC': 'angmsdae', '\u29AD': 'angmsdaf', '\u29AE': 'angmsdag', '\u29AF': 'angmsdah', '\u2221': 'angmsd', '\u221F': 'angrt', '\u22BE': 'angrtvb', '\u299D': 'angrtvbd', '\u2222': 'angsph', '\xC5': 'angst', '\u237C': 'angzarr', '\u0104': 'Aogon', '\u0105': 'aogon', '\uD835\uDD38': 'Aopf', '\uD835\uDD52': 'aopf', '\u2A6F': 'apacir', '\u2248': 'ap', '\u2A70': 'apE', '\u224A': 'ape', '\u224B': 'apid', '\'': 'apos', '\xE5': 'aring', '\uD835\uDC9C': 'Ascr', '\uD835\uDCB6': 'ascr', '\u2254': 'colone', '*': 'ast', '\u224D': 'CupCap', '\xC3': 'Atilde', '\xE3': 'atilde', '\xC4': 'Auml', '\xE4': 'auml', '\u2233': 'awconint', '\u2A11': 'awint', '\u224C': 'bcong', '\u03F6': 'bepsi', '\u2035': 'bprime', '\u223D': 'bsim', '\u22CD': 'bsime', '\u2216': 'setmn', '\u2AE7': 'Barv', '\u22BD': 'barvee', '\u2305': 'barwed', '\u2306': 'Barwed', '\u23B5': 'bbrk', '\u23B6': 'bbrktbrk', '\u0411': 'Bcy', '\u0431': 'bcy', '\u201E': 'bdquo', '\u2235': 'becaus', '\u29B0': 'bemptyv', '\u212C': 'Bscr', '\u0392': 'Beta', '\u03B2': 'beta', '\u2136': 'beth', '\u226C': 'twixt', '\uD835\uDD05': 'Bfr', '\uD835\uDD1F': 'bfr', '\u22C2': 'xcap', '\u25EF': 'xcirc', '\u22C3': 'xcup', '\u2A00': 'xodot', '\u2A01': 'xoplus', '\u2A02': 'xotime', '\u2A06': 'xsqcup', '\u2605': 'starf', '\u25BD': 'xdtri', '\u25B3': 'xutri', '\u2A04': 'xuplus', '\u22C1': 'Vee', '\u22C0': 'Wedge', '\u290D': 'rbarr', '\u29EB': 'lozf', '\u25AA': 'squf', '\u25B4': 'utrif', '\u25BE': 'dtrif', '\u25C2': 'ltrif', '\u25B8': 'rtrif', '\u2423': 'blank', '\u2592': 'blk12', '\u2591': 'blk14', '\u2593': 'blk34', '\u2588': 'block', '=\u20E5': 'bne', '\u2261\u20E5': 'bnequiv', '\u2AED': 'bNot', '\u2310': 'bnot', '\uD835\uDD39': 'Bopf', '\uD835\uDD53': 'bopf', '\u22A5': 'bot', '\u22C8': 'bowtie', '\u29C9': 'boxbox', '\u2510': 'boxdl', '\u2555': 'boxdL', '\u2556': 'boxDl', '\u2557': 'boxDL', '\u250C': 'boxdr', '\u2552': 'boxdR', '\u2553': 'boxDr', '\u2554': 'boxDR', '\u2500': 'boxh', '\u2550': 'boxH', '\u252C': 'boxhd', '\u2564': 'boxHd', '\u2565': 'boxhD', '\u2566': 'boxHD', '\u2534': 'boxhu', '\u2567': 'boxHu', '\u2568': 'boxhU', '\u2569': 'boxHU', '\u229F': 'minusb', '\u229E': 'plusb', '\u22A0': 'timesb', '\u2518': 'boxul', '\u255B': 'boxuL', '\u255C': 'boxUl', '\u255D': 'boxUL', '\u2514': 'boxur', '\u2558': 'boxuR', '\u2559': 'boxUr', '\u255A': 'boxUR', '\u2502': 'boxv', '\u2551': 'boxV', '\u253C': 'boxvh', '\u256A': 'boxvH', '\u256B': 'boxVh', '\u256C': 'boxVH', '\u2524': 'boxvl', '\u2561': 'boxvL', '\u2562': 'boxVl', '\u2563': 'boxVL', '\u251C': 'boxvr', '\u255E': 'boxvR', '\u255F': 'boxVr', '\u2560': 'boxVR', '\u02D8': 'breve', '\xA6': 'brvbar', '\uD835\uDCB7': 'bscr', '\u204F': 'bsemi', '\u29C5': 'bsolb', '\\': 'bsol', '\u27C8': 'bsolhsub', '\u2022': 'bull', '\u224E': 'bump', '\u2AAE': 'bumpE', '\u224F': 'bumpe', '\u0106': 'Cacute', '\u0107': 'cacute', '\u2A44': 'capand', '\u2A49': 'capbrcup', '\u2A4B': 'capcap', '\u2229': 'cap', '\u22D2': 'Cap', '\u2A47': 'capcup', '\u2A40': 'capdot', '\u2145': 'DD', '\u2229\uFE00': 'caps', '\u2041': 'caret', '\u02C7': 'caron', '\u212D': 'Cfr', '\u2A4D': 'ccaps', '\u010C': 'Ccaron', '\u010D': 'ccaron', '\xC7': 'Ccedil', '\xE7': 'ccedil', '\u0108': 'Ccirc', '\u0109': 'ccirc', '\u2230': 'Cconint', '\u2A4C': 'ccups', '\u2A50': 'ccupssm', '\u010A': 'Cdot', '\u010B': 'cdot', '\xB8': 'cedil', '\u29B2': 'cemptyv', '\xA2': 'cent', '\xB7': 'middot', '\uD835\uDD20': 'cfr', '\u0427': 'CHcy', '\u0447': 'chcy', '\u2713': 'check', '\u03A7': 'Chi', '\u03C7': 'chi', '\u02C6': 'circ', '\u2257': 'cire', '\u21BA': 'olarr', '\u21BB': 'orarr', '\u229B': 'oast', '\u229A': 'ocir', '\u229D': 'odash', '\u2299': 'odot', '\xAE': 'reg', '\u24C8': 'oS', '\u2296': 'ominus', '\u2295': 'oplus', '\u2297': 'otimes', '\u25CB': 'cir', '\u29C3': 'cirE', '\u2A10': 'cirfnint', '\u2AEF': 'cirmid', '\u29C2': 'cirscir', '\u2232': 'cwconint', '\u201D': 'rdquo', '\u2019': 'rsquo', '\u2663': 'clubs', ':': 'colon', '\u2237': 'Colon', '\u2A74': 'Colone', ',': 'comma', '@': 'commat', '\u2201': 'comp', '\u2218': 'compfn', '\u2102': 'Copf', '\u2245': 'cong', '\u2A6D': 'congdot', '\u2261': 'equiv', '\u222E': 'oint', '\u222F': 'Conint', '\uD835\uDD54': 'copf', '\u2210': 'coprod', '\xA9': 'copy', '\u2117': 'copysr', '\u21B5': 'crarr', '\u2717': 'cross', '\u2A2F': 'Cross', '\uD835\uDC9E': 'Cscr', '\uD835\uDCB8': 'cscr', '\u2ACF': 'csub', '\u2AD1': 'csube', '\u2AD0': 'csup', '\u2AD2': 'csupe', '\u22EF': 'ctdot', '\u2938': 'cudarrl', '\u2935': 'cudarrr', '\u22DE': 'cuepr', '\u22DF': 'cuesc', '\u21B6': 'cularr', '\u293D': 'cularrp', '\u2A48': 'cupbrcap', '\u2A46': 'cupcap', '\u222A': 'cup', '\u22D3': 'Cup', '\u2A4A': 'cupcup', '\u228D': 'cupdot', '\u2A45': 'cupor', '\u222A\uFE00': 'cups', '\u21B7': 'curarr', '\u293C': 'curarrm', '\u22CE': 'cuvee', '\u22CF': 'cuwed', '\xA4': 'curren', '\u2231': 'cwint', '\u232D': 'cylcty', '\u2020': 'dagger', '\u2021': 'Dagger', '\u2138': 'daleth', '\u2193': 'darr', '\u21A1': 'Darr', '\u21D3': 'dArr', '\u2010': 'dash', '\u2AE4': 'Dashv', '\u22A3': 'dashv', '\u290F': 'rBarr', '\u02DD': 'dblac', '\u010E': 'Dcaron', '\u010F': 'dcaron', '\u0414': 'Dcy', '\u0434': 'dcy', '\u21CA': 'ddarr', '\u2146': 'dd', '\u2911': 'DDotrahd', '\u2A77': 'eDDot', '\xB0': 'deg', '\u2207': 'Del', '\u0394': 'Delta', '\u03B4': 'delta', '\u29B1': 'demptyv', '\u297F': 'dfisht', '\uD835\uDD07': 'Dfr', '\uD835\uDD21': 'dfr', '\u2965': 'dHar', '\u21C3': 'dharl', '\u21C2': 'dharr', '\u02D9': 'dot', '`': 'grave', '\u02DC': 'tilde', '\u22C4': 'diam', '\u2666': 'diams', '\xA8': 'die', '\u03DD': 'gammad', '\u22F2': 'disin', '\xF7': 'div', '\u22C7': 'divonx', '\u0402': 'DJcy', '\u0452': 'djcy', '\u231E': 'dlcorn', '\u230D': 'dlcrop', '$': 'dollar', '\uD835\uDD3B': 'Dopf', '\uD835\uDD55': 'dopf', '\u20DC': 'DotDot', '\u2250': 'doteq', '\u2251': 'eDot', '\u2238': 'minusd', '\u2214': 'plusdo', '\u22A1': 'sdotb', '\u21D0': 'lArr', '\u21D4': 'iff', '\u27F8': 'xlArr', '\u27FA': 'xhArr', '\u27F9': 'xrArr', '\u21D2': 'rArr', '\u22A8': 'vDash', '\u21D1': 'uArr', '\u21D5': 'vArr', '\u2225': 'par', '\u2913': 'DownArrowBar', '\u21F5': 'duarr', '\u0311': 'DownBreve', '\u2950': 'DownLeftRightVector', '\u295E': 'DownLeftTeeVector', '\u2956': 'DownLeftVectorBar', '\u21BD': 'lhard', '\u295F': 'DownRightTeeVector', '\u2957': 'DownRightVectorBar', '\u21C1': 'rhard', '\u21A7': 'mapstodown', '\u22A4': 'top', '\u2910': 'RBarr', '\u231F': 'drcorn', '\u230C': 'drcrop', '\uD835\uDC9F': 'Dscr', '\uD835\uDCB9': 'dscr', '\u0405': 'DScy', '\u0455': 'dscy', '\u29F6': 'dsol', '\u0110': 'Dstrok', '\u0111': 'dstrok', '\u22F1': 'dtdot', '\u25BF': 'dtri', '\u296F': 'duhar', '\u29A6': 'dwangle', '\u040F': 'DZcy', '\u045F': 'dzcy', '\u27FF': 'dzigrarr', '\xC9': 'Eacute', '\xE9': 'eacute', '\u2A6E': 'easter', '\u011A': 'Ecaron', '\u011B': 'ecaron', '\xCA': 'Ecirc', '\xEA': 'ecirc', '\u2256': 'ecir', '\u2255': 'ecolon', '\u042D': 'Ecy', '\u044D': 'ecy', '\u0116': 'Edot', '\u0117': 'edot', '\u2147': 'ee', '\u2252': 'efDot', '\uD835\uDD08': 'Efr', '\uD835\uDD22': 'efr', '\u2A9A': 'eg', '\xC8': 'Egrave', '\xE8': 'egrave', '\u2A96': 'egs', '\u2A98': 'egsdot', '\u2A99': 'el', '\u2208': 'in', '\u23E7': 'elinters', '\u2113': 'ell', '\u2A95': 'els', '\u2A97': 'elsdot', '\u0112': 'Emacr', '\u0113': 'emacr', '\u2205': 'empty', '\u25FB': 'EmptySmallSquare', '\u25AB': 'EmptyVerySmallSquare', '\u2004': 'emsp13', '\u2005': 'emsp14', '\u2003': 'emsp', '\u014A': 'ENG', '\u014B': 'eng', '\u2002': 'ensp', '\u0118': 'Eogon', '\u0119': 'eogon', '\uD835\uDD3C': 'Eopf', '\uD835\uDD56': 'eopf', '\u22D5': 'epar', '\u29E3': 'eparsl', '\u2A71': 'eplus', '\u03B5': 'epsi', '\u0395': 'Epsilon', '\u03F5': 'epsiv', '\u2242': 'esim', '\u2A75': 'Equal', '=': 'equals', '\u225F': 'equest', '\u21CC': 'rlhar', '\u2A78': 'equivDD', '\u29E5': 'eqvparsl', '\u2971': 'erarr', '\u2253': 'erDot', '\u212F': 'escr', '\u2130': 'Escr', '\u2A73': 'Esim', '\u0397': 'Eta', '\u03B7': 'eta', '\xD0': 'ETH', '\xF0': 'eth', '\xCB': 'Euml', '\xEB': 'euml', '\u20AC': 'euro', '!': 'excl', '\u2203': 'exist', '\u0424': 'Fcy', '\u0444': 'fcy', '\u2640': 'female', '\uFB03': 'ffilig', '\uFB00': 'fflig', '\uFB04': 'ffllig', '\uD835\uDD09': 'Ffr', '\uD835\uDD23': 'ffr', '\uFB01': 'filig', '\u25FC': 'FilledSmallSquare', 'fj': 'fjlig', '\u266D': 'flat', '\uFB02': 'fllig', '\u25B1': 'fltns', '\u0192': 'fnof', '\uD835\uDD3D': 'Fopf', '\uD835\uDD57': 'fopf', '\u2200': 'forall', '\u22D4': 'fork', '\u2AD9': 'forkv', '\u2131': 'Fscr', '\u2A0D': 'fpartint', '\xBD': 'half', '\u2153': 'frac13', '\xBC': 'frac14', '\u2155': 'frac15', '\u2159': 'frac16', '\u215B': 'frac18', '\u2154': 'frac23', '\u2156': 'frac25', '\xBE': 'frac34', '\u2157': 'frac35', '\u215C': 'frac38', '\u2158': 'frac45', '\u215A': 'frac56', '\u215D': 'frac58', '\u215E': 'frac78', '\u2044': 'frasl', '\u2322': 'frown', '\uD835\uDCBB': 'fscr', '\u01F5': 'gacute', '\u0393': 'Gamma', '\u03B3': 'gamma', '\u03DC': 'Gammad', '\u2A86': 'gap', '\u011E': 'Gbreve', '\u011F': 'gbreve', '\u0122': 'Gcedil', '\u011C': 'Gcirc', '\u011D': 'gcirc', '\u0413': 'Gcy', '\u0433': 'gcy', '\u0120': 'Gdot', '\u0121': 'gdot', '\u2265': 'ge', '\u2267': 'gE', '\u2A8C': 'gEl', '\u22DB': 'gel', '\u2A7E': 'ges', '\u2AA9': 'gescc', '\u2A80': 'gesdot', '\u2A82': 'gesdoto', '\u2A84': 'gesdotol', '\u22DB\uFE00': 'gesl', '\u2A94': 'gesles', '\uD835\uDD0A': 'Gfr', '\uD835\uDD24': 'gfr', '\u226B': 'gg', '\u22D9': 'Gg', '\u2137': 'gimel', '\u0403': 'GJcy', '\u0453': 'gjcy', '\u2AA5': 'gla', '\u2277': 'gl', '\u2A92': 'glE', '\u2AA4': 'glj', '\u2A8A': 'gnap', '\u2A88': 'gne', '\u2269': 'gnE', '\u22E7': 'gnsim', '\uD835\uDD3E': 'Gopf', '\uD835\uDD58': 'gopf', '\u2AA2': 'GreaterGreater', '\u2273': 'gsim', '\uD835\uDCA2': 'Gscr', '\u210A': 'gscr', '\u2A8E': 'gsime', '\u2A90': 'gsiml', '\u2AA7': 'gtcc', '\u2A7A': 'gtcir', '>': 'gt', '\u22D7': 'gtdot', '\u2995': 'gtlPar', '\u2A7C': 'gtquest', '\u2978': 'gtrarr', '\u2269\uFE00': 'gvnE', '\u200A': 'hairsp', '\u210B': 'Hscr', '\u042A': 'HARDcy', '\u044A': 'hardcy', '\u2948': 'harrcir', '\u2194': 'harr', '\u21AD': 'harrw', '^': 'Hat', '\u210F': 'hbar', '\u0124': 'Hcirc', '\u0125': 'hcirc', '\u2665': 'hearts', '\u2026': 'mldr', '\u22B9': 'hercon', '\uD835\uDD25': 'hfr', '\u210C': 'Hfr', '\u2925': 'searhk', '\u2926': 'swarhk', '\u21FF': 'hoarr', '\u223B': 'homtht', '\u21A9': 'larrhk', '\u21AA': 'rarrhk', '\uD835\uDD59': 'hopf', '\u210D': 'Hopf', '\u2015': 'horbar', '\uD835\uDCBD': 'hscr', '\u0126': 'Hstrok', '\u0127': 'hstrok', '\u2043': 'hybull', '\xCD': 'Iacute', '\xED': 'iacute', '\u2063': 'ic', '\xCE': 'Icirc', '\xEE': 'icirc', '\u0418': 'Icy', '\u0438': 'icy', '\u0130': 'Idot', '\u0415': 'IEcy', '\u0435': 'iecy', '\xA1': 'iexcl', '\uD835\uDD26': 'ifr', '\u2111': 'Im', '\xCC': 'Igrave', '\xEC': 'igrave', '\u2148': 'ii', '\u2A0C': 'qint', '\u222D': 'tint', '\u29DC': 'iinfin', '\u2129': 'iiota', '\u0132': 'IJlig', '\u0133': 'ijlig', '\u012A': 'Imacr', '\u012B': 'imacr', '\u2110': 'Iscr', '\u0131': 'imath', '\u22B7': 'imof', '\u01B5': 'imped', '\u2105': 'incare', '\u221E': 'infin', '\u29DD': 'infintie', '\u22BA': 'intcal', '\u222B': 'int', '\u222C': 'Int', '\u2124': 'Zopf', '\u2A17': 'intlarhk', '\u2A3C': 'iprod', '\u2062': 'it', '\u0401': 'IOcy', '\u0451': 'iocy', '\u012E': 'Iogon', '\u012F': 'iogon', '\uD835\uDD40': 'Iopf', '\uD835\uDD5A': 'iopf', '\u0399': 'Iota', '\u03B9': 'iota', '\xBF': 'iquest', '\uD835\uDCBE': 'iscr', '\u22F5': 'isindot', '\u22F9': 'isinE', '\u22F4': 'isins', '\u22F3': 'isinsv', '\u0128': 'Itilde', '\u0129': 'itilde', '\u0406': 'Iukcy', '\u0456': 'iukcy', '\xCF': 'Iuml', '\xEF': 'iuml', '\u0134': 'Jcirc', '\u0135': 'jcirc', '\u0419': 'Jcy', '\u0439': 'jcy', '\uD835\uDD0D': 'Jfr', '\uD835\uDD27': 'jfr', '\u0237': 'jmath', '\uD835\uDD41': 'Jopf', '\uD835\uDD5B': 'jopf', '\uD835\uDCA5': 'Jscr', '\uD835\uDCBF': 'jscr', '\u0408': 'Jsercy', '\u0458': 'jsercy', '\u0404': 'Jukcy', '\u0454': 'jukcy', '\u039A': 'Kappa', '\u03BA': 'kappa', '\u03F0': 'kappav', '\u0136': 'Kcedil', '\u0137': 'kcedil', '\u041A': 'Kcy', '\u043A': 'kcy', '\uD835\uDD0E': 'Kfr', '\uD835\uDD28': 'kfr', '\u0138': 'kgreen', '\u0425': 'KHcy', '\u0445': 'khcy', '\u040C': 'KJcy', '\u045C': 'kjcy', '\uD835\uDD42': 'Kopf', '\uD835\uDD5C': 'kopf', '\uD835\uDCA6': 'Kscr', '\uD835\uDCC0': 'kscr', '\u21DA': 'lAarr', '\u0139': 'Lacute', '\u013A': 'lacute', '\u29B4': 'laemptyv', '\u2112': 'Lscr', '\u039B': 'Lambda', '\u03BB': 'lambda', '\u27E8': 'lang', '\u27EA': 'Lang', '\u2991': 'langd', '\u2A85': 'lap', '\xAB': 'laquo', '\u21E4': 'larrb', '\u291F': 'larrbfs', '\u2190': 'larr', '\u219E': 'Larr', '\u291D': 'larrfs', '\u21AB': 'larrlp', '\u2939': 'larrpl', '\u2973': 'larrsim', '\u21A2': 'larrtl', '\u2919': 'latail', '\u291B': 'lAtail', '\u2AAB': 'lat', '\u2AAD': 'late', '\u2AAD\uFE00': 'lates', '\u290C': 'lbarr', '\u290E': 'lBarr', '\u2772': 'lbbrk', '{': 'lcub', '[': 'lsqb', '\u298B': 'lbrke', '\u298F': 'lbrksld', '\u298D': 'lbrkslu', '\u013D': 'Lcaron', '\u013E': 'lcaron', '\u013B': 'Lcedil', '\u013C': 'lcedil', '\u2308': 'lceil', '\u041B': 'Lcy', '\u043B': 'lcy', '\u2936': 'ldca', '\u201C': 'ldquo', '\u2967': 'ldrdhar', '\u294B': 'ldrushar', '\u21B2': 'ldsh', '\u2264': 'le', '\u2266': 'lE', '\u21C6': 'lrarr', '\u27E6': 'lobrk', '\u2961': 'LeftDownTeeVector', '\u2959': 'LeftDownVectorBar', '\u230A': 'lfloor', '\u21BC': 'lharu', '\u21C7': 'llarr', '\u21CB': 'lrhar', '\u294E': 'LeftRightVector', '\u21A4': 'mapstoleft', '\u295A': 'LeftTeeVector', '\u22CB': 'lthree', '\u29CF': 'LeftTriangleBar', '\u22B2': 'vltri', '\u22B4': 'ltrie', '\u2951': 'LeftUpDownVector', '\u2960': 'LeftUpTeeVector', '\u2958': 'LeftUpVectorBar', '\u21BF': 'uharl', '\u2952': 'LeftVectorBar', '\u2A8B': 'lEg', '\u22DA': 'leg', '\u2A7D': 'les', '\u2AA8': 'lescc', '\u2A7F': 'lesdot', '\u2A81': 'lesdoto', '\u2A83': 'lesdotor', '\u22DA\uFE00': 'lesg', '\u2A93': 'lesges', '\u22D6': 'ltdot', '\u2276': 'lg', '\u2AA1': 'LessLess', '\u2272': 'lsim', '\u297C': 'lfisht', '\uD835\uDD0F': 'Lfr', '\uD835\uDD29': 'lfr', '\u2A91': 'lgE', '\u2962': 'lHar', '\u296A': 'lharul', '\u2584': 'lhblk', '\u0409': 'LJcy', '\u0459': 'ljcy', '\u226A': 'll', '\u22D8': 'Ll', '\u296B': 'llhard', '\u25FA': 'lltri', '\u013F': 'Lmidot', '\u0140': 'lmidot', '\u23B0': 'lmoust', '\u2A89': 'lnap', '\u2A87': 'lne', '\u2268': 'lnE', '\u22E6': 'lnsim', '\u27EC': 'loang', '\u21FD': 'loarr', '\u27F5': 'xlarr', '\u27F7': 'xharr', '\u27FC': 'xmap', '\u27F6': 'xrarr', '\u21AC': 'rarrlp', '\u2985': 'lopar', '\uD835\uDD43': 'Lopf', '\uD835\uDD5D': 'lopf', '\u2A2D': 'loplus', '\u2A34': 'lotimes', '\u2217': 'lowast', '_': 'lowbar', '\u2199': 'swarr', '\u2198': 'searr', '\u25CA': 'loz', '(': 'lpar', '\u2993': 'lparlt', '\u296D': 'lrhard', '\u200E': 'lrm', '\u22BF': 'lrtri', '\u2039': 'lsaquo', '\uD835\uDCC1': 'lscr', '\u21B0': 'lsh', '\u2A8D': 'lsime', '\u2A8F': 'lsimg', '\u2018': 'lsquo', '\u201A': 'sbquo', '\u0141': 'Lstrok', '\u0142': 'lstrok', '\u2AA6': 'ltcc', '\u2A79': 'ltcir', '<': 'lt', '\u22C9': 'ltimes', '\u2976': 'ltlarr', '\u2A7B': 'ltquest', '\u25C3': 'ltri', '\u2996': 'ltrPar', '\u294A': 'lurdshar', '\u2966': 'luruhar', '\u2268\uFE00': 'lvnE', '\xAF': 'macr', '\u2642': 'male', '\u2720': 'malt', '\u2905': 'Map', '\u21A6': 'map', '\u21A5': 'mapstoup', '\u25AE': 'marker', '\u2A29': 'mcomma', '\u041C': 'Mcy', '\u043C': 'mcy', '\u2014': 'mdash', '\u223A': 'mDDot', '\u205F': 'MediumSpace', '\u2133': 'Mscr', '\uD835\uDD10': 'Mfr', '\uD835\uDD2A': 'mfr', '\u2127': 'mho', '\xB5': 'micro', '\u2AF0': 'midcir', '\u2223': 'mid', '\u2212': 'minus', '\u2A2A': 'minusdu', '\u2213': 'mp', '\u2ADB': 'mlcp', '\u22A7': 'models', '\uD835\uDD44': 'Mopf', '\uD835\uDD5E': 'mopf', '\uD835\uDCC2': 'mscr', '\u039C': 'Mu', '\u03BC': 'mu', '\u22B8': 'mumap', '\u0143': 'Nacute', '\u0144': 'nacute', '\u2220\u20D2': 'nang', '\u2249': 'nap', '\u2A70\u0338': 'napE', '\u224B\u0338': 'napid', '\u0149': 'napos', '\u266E': 'natur', '\u2115': 'Nopf', '\xA0': 'nbsp', '\u224E\u0338': 'nbump', '\u224F\u0338': 'nbumpe', '\u2A43': 'ncap', '\u0147': 'Ncaron', '\u0148': 'ncaron', '\u0145': 'Ncedil', '\u0146': 'ncedil', '\u2247': 'ncong', '\u2A6D\u0338': 'ncongdot', '\u2A42': 'ncup', '\u041D': 'Ncy', '\u043D': 'ncy', '\u2013': 'ndash', '\u2924': 'nearhk', '\u2197': 'nearr', '\u21D7': 'neArr', '\u2260': 'ne', '\u2250\u0338': 'nedot', '\u200B': 'ZeroWidthSpace', '\u2262': 'nequiv', '\u2928': 'toea', '\u2242\u0338': 'nesim', '\n': 'NewLine', '\u2204': 'nexist', '\uD835\uDD11': 'Nfr', '\uD835\uDD2B': 'nfr', '\u2267\u0338': 'ngE', '\u2271': 'nge', '\u2A7E\u0338': 'nges', '\u22D9\u0338': 'nGg', '\u2275': 'ngsim', '\u226B\u20D2': 'nGt', '\u226F': 'ngt', '\u226B\u0338': 'nGtv', '\u21AE': 'nharr', '\u21CE': 'nhArr', '\u2AF2': 'nhpar', '\u220B': 'ni', '\u22FC': 'nis', '\u22FA': 'nisd', '\u040A': 'NJcy', '\u045A': 'njcy', '\u219A': 'nlarr', '\u21CD': 'nlArr', '\u2025': 'nldr', '\u2266\u0338': 'nlE', '\u2270': 'nle', '\u2A7D\u0338': 'nles', '\u226E': 'nlt', '\u22D8\u0338': 'nLl', '\u2274': 'nlsim', '\u226A\u20D2': 'nLt', '\u22EA': 'nltri', '\u22EC': 'nltrie', '\u226A\u0338': 'nLtv', '\u2224': 'nmid', '\u2060': 'NoBreak', '\uD835\uDD5F': 'nopf', '\u2AEC': 'Not', '\xAC': 'not', '\u226D': 'NotCupCap', '\u2226': 'npar', '\u2209': 'notin', '\u2279': 'ntgl', '\u22F5\u0338': 'notindot', '\u22F9\u0338': 'notinE', '\u22F7': 'notinvb', '\u22F6': 'notinvc', '\u29CF\u0338': 'NotLeftTriangleBar', '\u2278': 'ntlg', '\u2AA2\u0338': 'NotNestedGreaterGreater', '\u2AA1\u0338': 'NotNestedLessLess', '\u220C': 'notni', '\u22FE': 'notnivb', '\u22FD': 'notnivc', '\u2280': 'npr', '\u2AAF\u0338': 'npre', '\u22E0': 'nprcue', '\u29D0\u0338': 'NotRightTriangleBar', '\u22EB': 'nrtri', '\u22ED': 'nrtrie', '\u228F\u0338': 'NotSquareSubset', '\u22E2': 'nsqsube', '\u2290\u0338': 'NotSquareSuperset', '\u22E3': 'nsqsupe', '\u2282\u20D2': 'vnsub', '\u2288': 'nsube', '\u2281': 'nsc', '\u2AB0\u0338': 'nsce', '\u22E1': 'nsccue', '\u227F\u0338': 'NotSucceedsTilde', '\u2283\u20D2': 'vnsup', '\u2289': 'nsupe', '\u2241': 'nsim', '\u2244': 'nsime', '\u2AFD\u20E5': 'nparsl', '\u2202\u0338': 'npart', '\u2A14': 'npolint', '\u2933\u0338': 'nrarrc', '\u219B': 'nrarr', '\u21CF': 'nrArr', '\u219D\u0338': 'nrarrw', '\uD835\uDCA9': 'Nscr', '\uD835\uDCC3': 'nscr', '\u2284': 'nsub', '\u2AC5\u0338': 'nsubE', '\u2285': 'nsup', '\u2AC6\u0338': 'nsupE', '\xD1': 'Ntilde', '\xF1': 'ntilde', '\u039D': 'Nu', '\u03BD': 'nu', '#': 'num', '\u2116': 'numero', '\u2007': 'numsp', '\u224D\u20D2': 'nvap', '\u22AC': 'nvdash', '\u22AD': 'nvDash', '\u22AE': 'nVdash', '\u22AF': 'nVDash', '\u2265\u20D2': 'nvge', '>\u20D2': 'nvgt', '\u2904': 'nvHarr', '\u29DE': 'nvinfin', '\u2902': 'nvlArr', '\u2264\u20D2': 'nvle', '<\u20D2': 'nvlt', '\u22B4\u20D2': 'nvltrie', '\u2903': 'nvrArr', '\u22B5\u20D2': 'nvrtrie', '\u223C\u20D2': 'nvsim', '\u2923': 'nwarhk', '\u2196': 'nwarr', '\u21D6': 'nwArr', '\u2927': 'nwnear', '\xD3': 'Oacute', '\xF3': 'oacute', '\xD4': 'Ocirc', '\xF4': 'ocirc', '\u041E': 'Ocy', '\u043E': 'ocy', '\u0150': 'Odblac', '\u0151': 'odblac', '\u2A38': 'odiv', '\u29BC': 'odsold', '\u0152': 'OElig', '\u0153': 'oelig', '\u29BF': 'ofcir', '\uD835\uDD12': 'Ofr', '\uD835\uDD2C': 'ofr', '\u02DB': 'ogon', '\xD2': 'Ograve', '\xF2': 'ograve', '\u29C1': 'ogt', '\u29B5': 'ohbar', '\u03A9': 'ohm', '\u29BE': 'olcir', '\u29BB': 'olcross', '\u203E': 'oline', '\u29C0': 'olt', '\u014C': 'Omacr', '\u014D': 'omacr', '\u03C9': 'omega', '\u039F': 'Omicron', '\u03BF': 'omicron', '\u29B6': 'omid', '\uD835\uDD46': 'Oopf', '\uD835\uDD60': 'oopf', '\u29B7': 'opar', '\u29B9': 'operp', '\u2A54': 'Or', '\u2228': 'or', '\u2A5D': 'ord', '\u2134': 'oscr', '\xAA': 'ordf', '\xBA': 'ordm', '\u22B6': 'origof', '\u2A56': 'oror', '\u2A57': 'orslope', '\u2A5B': 'orv', '\uD835\uDCAA': 'Oscr', '\xD8': 'Oslash', '\xF8': 'oslash', '\u2298': 'osol', '\xD5': 'Otilde', '\xF5': 'otilde', '\u2A36': 'otimesas', '\u2A37': 'Otimes', '\xD6': 'Ouml', '\xF6': 'ouml', '\u233D': 'ovbar', '\u23DE': 'OverBrace', '\u23B4': 'tbrk', '\u23DC': 'OverParenthesis', '\xB6': 'para', '\u2AF3': 'parsim', '\u2AFD': 'parsl', '\u2202': 'part', '\u041F': 'Pcy', '\u043F': 'pcy', '%': 'percnt', '.': 'period', '\u2030': 'permil', '\u2031': 'pertenk', '\uD835\uDD13': 'Pfr', '\uD835\uDD2D': 'pfr', '\u03A6': 'Phi', '\u03C6': 'phi', '\u03D5': 'phiv', '\u260E': 'phone', '\u03A0': 'Pi', '\u03C0': 'pi', '\u03D6': 'piv', '\u210E': 'planckh', '\u2A23': 'plusacir', '\u2A22': 'pluscir', '+': 'plus', '\u2A25': 'plusdu', '\u2A72': 'pluse', '\xB1': 'pm', '\u2A26': 'plussim', '\u2A27': 'plustwo', '\u2A15': 'pointint', '\uD835\uDD61': 'popf', '\u2119': 'Popf', '\xA3': 'pound', '\u2AB7': 'prap', '\u2ABB': 'Pr', '\u227A': 'pr', '\u227C': 'prcue', '\u2AAF': 'pre', '\u227E': 'prsim', '\u2AB9': 'prnap', '\u2AB5': 'prnE', '\u22E8': 'prnsim', '\u2AB3': 'prE', '\u2032': 'prime', '\u2033': 'Prime', '\u220F': 'prod', '\u232E': 'profalar', '\u2312': 'profline', '\u2313': 'profsurf', '\u221D': 'prop', '\u22B0': 'prurel', '\uD835\uDCAB': 'Pscr', '\uD835\uDCC5': 'pscr', '\u03A8': 'Psi', '\u03C8': 'psi', '\u2008': 'puncsp', '\uD835\uDD14': 'Qfr', '\uD835\uDD2E': 'qfr', '\uD835\uDD62': 'qopf', '\u211A': 'Qopf', '\u2057': 'qprime', '\uD835\uDCAC': 'Qscr', '\uD835\uDCC6': 'qscr', '\u2A16': 'quatint', '?': 'quest', '"': 'quot', '\u21DB': 'rAarr', '\u223D\u0331': 'race', '\u0154': 'Racute', '\u0155': 'racute', '\u221A': 'Sqrt', '\u29B3': 'raemptyv', '\u27E9': 'rang', '\u27EB': 'Rang', '\u2992': 'rangd', '\u29A5': 'range', '\xBB': 'raquo', '\u2975': 'rarrap', '\u21E5': 'rarrb', '\u2920': 'rarrbfs', '\u2933': 'rarrc', '\u2192': 'rarr', '\u21A0': 'Rarr', '\u291E': 'rarrfs', '\u2945': 'rarrpl', '\u2974': 'rarrsim', '\u2916': 'Rarrtl', '\u21A3': 'rarrtl', '\u219D': 'rarrw', '\u291A': 'ratail', '\u291C': 'rAtail', '\u2236': 'ratio', '\u2773': 'rbbrk', '}': 'rcub', ']': 'rsqb', '\u298C': 'rbrke', '\u298E': 'rbrksld', '\u2990': 'rbrkslu', '\u0158': 'Rcaron', '\u0159': 'rcaron', '\u0156': 'Rcedil', '\u0157': 'rcedil', '\u2309': 'rceil', '\u0420': 'Rcy', '\u0440': 'rcy', '\u2937': 'rdca', '\u2969': 'rdldhar', '\u21B3': 'rdsh', '\u211C': 'Re', '\u211B': 'Rscr', '\u211D': 'Ropf', '\u25AD': 'rect', '\u297D': 'rfisht', '\u230B': 'rfloor', '\uD835\uDD2F': 'rfr', '\u2964': 'rHar', '\u21C0': 'rharu', '\u296C': 'rharul', '\u03A1': 'Rho', '\u03C1': 'rho', '\u03F1': 'rhov', '\u21C4': 'rlarr', '\u27E7': 'robrk', '\u295D': 'RightDownTeeVector', '\u2955': 'RightDownVectorBar', '\u21C9': 'rrarr', '\u22A2': 'vdash', '\u295B': 'RightTeeVector', '\u22CC': 'rthree', '\u29D0': 'RightTriangleBar', '\u22B3': 'vrtri', '\u22B5': 'rtrie', '\u294F': 'RightUpDownVector', '\u295C': 'RightUpTeeVector', '\u2954': 'RightUpVectorBar', '\u21BE': 'uharr', '\u2953': 'RightVectorBar', '\u02DA': 'ring', '\u200F': 'rlm', '\u23B1': 'rmoust', '\u2AEE': 'rnmid', '\u27ED': 'roang', '\u21FE': 'roarr', '\u2986': 'ropar', '\uD835\uDD63': 'ropf', '\u2A2E': 'roplus', '\u2A35': 'rotimes', '\u2970': 'RoundImplies', ')': 'rpar', '\u2994': 'rpargt', '\u2A12': 'rppolint', '\u203A': 'rsaquo', '\uD835\uDCC7': 'rscr', '\u21B1': 'rsh', '\u22CA': 'rtimes', '\u25B9': 'rtri', '\u29CE': 'rtriltri', '\u29F4': 'RuleDelayed', '\u2968': 'ruluhar', '\u211E': 'rx', '\u015A': 'Sacute', '\u015B': 'sacute', '\u2AB8': 'scap', '\u0160': 'Scaron', '\u0161': 'scaron', '\u2ABC': 'Sc', '\u227B': 'sc', '\u227D': 'sccue', '\u2AB0': 'sce', '\u2AB4': 'scE', '\u015E': 'Scedil', '\u015F': 'scedil', '\u015C': 'Scirc', '\u015D': 'scirc', '\u2ABA': 'scnap', '\u2AB6': 'scnE', '\u22E9': 'scnsim', '\u2A13': 'scpolint', '\u227F': 'scsim', '\u0421': 'Scy', '\u0441': 'scy', '\u22C5': 'sdot', '\u2A66': 'sdote', '\u21D8': 'seArr', '\xA7': 'sect', ';': 'semi', '\u2929': 'tosa', '\u2736': 'sext', '\uD835\uDD16': 'Sfr', '\uD835\uDD30': 'sfr', '\u266F': 'sharp', '\u0429': 'SHCHcy', '\u0449': 'shchcy', '\u0428': 'SHcy', '\u0448': 'shcy', '\u2191': 'uarr', '\xAD': 'shy', '\u03A3': 'Sigma', '\u03C3': 'sigma', '\u03C2': 'sigmaf', '\u223C': 'sim', '\u2A6A': 'simdot', '\u2243': 'sime', '\u2A9E': 'simg', '\u2AA0': 'simgE', '\u2A9D': 'siml', '\u2A9F': 'simlE', '\u2246': 'simne', '\u2A24': 'simplus', '\u2972': 'simrarr', '\u2A33': 'smashp', '\u29E4': 'smeparsl', '\u2323': 'smile', '\u2AAA': 'smt', '\u2AAC': 'smte', '\u2AAC\uFE00': 'smtes', '\u042C': 'SOFTcy', '\u044C': 'softcy', '\u233F': 'solbar', '\u29C4': 'solb', '/': 'sol', '\uD835\uDD4A': 'Sopf', '\uD835\uDD64': 'sopf', '\u2660': 'spades', '\u2293': 'sqcap', '\u2293\uFE00': 'sqcaps', '\u2294': 'sqcup', '\u2294\uFE00': 'sqcups', '\u228F': 'sqsub', '\u2291': 'sqsube', '\u2290': 'sqsup', '\u2292': 'sqsupe', '\u25A1': 'squ', '\uD835\uDCAE': 'Sscr', '\uD835\uDCC8': 'sscr', '\u22C6': 'Star', '\u2606': 'star', '\u2282': 'sub', '\u22D0': 'Sub', '\u2ABD': 'subdot', '\u2AC5': 'subE', '\u2286': 'sube', '\u2AC3': 'subedot', '\u2AC1': 'submult', '\u2ACB': 'subnE', '\u228A': 'subne', '\u2ABF': 'subplus', '\u2979': 'subrarr', '\u2AC7': 'subsim', '\u2AD5': 'subsub', '\u2AD3': 'subsup', '\u2211': 'sum', '\u266A': 'sung', '\xB9': 'sup1', '\xB2': 'sup2', '\xB3': 'sup3', '\u2283': 'sup', '\u22D1': 'Sup', '\u2ABE': 'supdot', '\u2AD8': 'supdsub', '\u2AC6': 'supE', '\u2287': 'supe', '\u2AC4': 'supedot', '\u27C9': 'suphsol', '\u2AD7': 'suphsub', '\u297B': 'suplarr', '\u2AC2': 'supmult', '\u2ACC': 'supnE', '\u228B': 'supne', '\u2AC0': 'supplus', '\u2AC8': 'supsim', '\u2AD4': 'supsub', '\u2AD6': 'supsup', '\u21D9': 'swArr', '\u292A': 'swnwar', '\xDF': 'szlig', '\t': 'Tab', '\u2316': 'target', '\u03A4': 'Tau', '\u03C4': 'tau', '\u0164': 'Tcaron', '\u0165': 'tcaron', '\u0162': 'Tcedil', '\u0163': 'tcedil', '\u0422': 'Tcy', '\u0442': 'tcy', '\u20DB': 'tdot', '\u2315': 'telrec', '\uD835\uDD17': 'Tfr', '\uD835\uDD31': 'tfr', '\u2234': 'there4', '\u0398': 'Theta', '\u03B8': 'theta', '\u03D1': 'thetav', '\u205F\u200A': 'ThickSpace', '\u2009': 'thinsp', '\xDE': 'THORN', '\xFE': 'thorn', '\u2A31': 'timesbar', '\xD7': 'times', '\u2A30': 'timesd', '\u2336': 'topbot', '\u2AF1': 'topcir', '\uD835\uDD4B': 'Topf', '\uD835\uDD65': 'topf', '\u2ADA': 'topfork', '\u2034': 'tprime', '\u2122': 'trade', '\u25B5': 'utri', '\u225C': 'trie', '\u25EC': 'tridot', '\u2A3A': 'triminus', '\u2A39': 'triplus', '\u29CD': 'trisb', '\u2A3B': 'tritime', '\u23E2': 'trpezium', '\uD835\uDCAF': 'Tscr', '\uD835\uDCC9': 'tscr', '\u0426': 'TScy', '\u0446': 'tscy', '\u040B': 'TSHcy', '\u045B': 'tshcy', '\u0166': 'Tstrok', '\u0167': 'tstrok', '\xDA': 'Uacute', '\xFA': 'uacute', '\u219F': 'Uarr', '\u2949': 'Uarrocir', '\u040E': 'Ubrcy', '\u045E': 'ubrcy', '\u016C': 'Ubreve', '\u016D': 'ubreve', '\xDB': 'Ucirc', '\xFB': 'ucirc', '\u0423': 'Ucy', '\u0443': 'ucy', '\u21C5': 'udarr', '\u0170': 'Udblac', '\u0171': 'udblac', '\u296E': 'udhar', '\u297E': 'ufisht', '\uD835\uDD18': 'Ufr', '\uD835\uDD32': 'ufr', '\xD9': 'Ugrave', '\xF9': 'ugrave', '\u2963': 'uHar', '\u2580': 'uhblk', '\u231C': 'ulcorn', '\u230F': 'ulcrop', '\u25F8': 'ultri', '\u016A': 'Umacr', '\u016B': 'umacr', '\u23DF': 'UnderBrace', '\u23DD': 'UnderParenthesis', '\u228E': 'uplus', '\u0172': 'Uogon', '\u0173': 'uogon', '\uD835\uDD4C': 'Uopf', '\uD835\uDD66': 'uopf', '\u2912': 'UpArrowBar', '\u2195': 'varr', '\u03C5': 'upsi', '\u03D2': 'Upsi', '\u03A5': 'Upsilon', '\u21C8': 'uuarr', '\u231D': 'urcorn', '\u230E': 'urcrop', '\u016E': 'Uring', '\u016F': 'uring', '\u25F9': 'urtri', '\uD835\uDCB0': 'Uscr', '\uD835\uDCCA': 'uscr', '\u22F0': 'utdot', '\u0168': 'Utilde', '\u0169': 'utilde', '\xDC': 'Uuml', '\xFC': 'uuml', '\u29A7': 'uwangle', '\u299C': 'vangrt', '\u228A\uFE00': 'vsubne', '\u2ACB\uFE00': 'vsubnE', '\u228B\uFE00': 'vsupne', '\u2ACC\uFE00': 'vsupnE', '\u2AE8': 'vBar', '\u2AEB': 'Vbar', '\u2AE9': 'vBarv', '\u0412': 'Vcy', '\u0432': 'vcy', '\u22A9': 'Vdash', '\u22AB': 'VDash', '\u2AE6': 'Vdashl', '\u22BB': 'veebar', '\u225A': 'veeeq', '\u22EE': 'vellip', '|': 'vert', '\u2016': 'Vert', '\u2758': 'VerticalSeparator', '\u2240': 'wr', '\uD835\uDD19': 'Vfr', '\uD835\uDD33': 'vfr', '\uD835\uDD4D': 'Vopf', '\uD835\uDD67': 'vopf', '\uD835\uDCB1': 'Vscr', '\uD835\uDCCB': 'vscr', '\u22AA': 'Vvdash', '\u299A': 'vzigzag', '\u0174': 'Wcirc', '\u0175': 'wcirc', '\u2A5F': 'wedbar', '\u2259': 'wedgeq', '\u2118': 'wp', '\uD835\uDD1A': 'Wfr', '\uD835\uDD34': 'wfr', '\uD835\uDD4E': 'Wopf', '\uD835\uDD68': 'wopf', '\uD835\uDCB2': 'Wscr', '\uD835\uDCCC': 'wscr', '\uD835\uDD1B': 'Xfr', '\uD835\uDD35': 'xfr', '\u039E': 'Xi', '\u03BE': 'xi', '\u22FB': 'xnis', '\uD835\uDD4F': 'Xopf', '\uD835\uDD69': 'xopf', '\uD835\uDCB3': 'Xscr', '\uD835\uDCCD': 'xscr', '\xDD': 'Yacute', '\xFD': 'yacute', '\u042F': 'YAcy', '\u044F': 'yacy', '\u0176': 'Ycirc', '\u0177': 'ycirc', '\u042B': 'Ycy', '\u044B': 'ycy', '\xA5': 'yen', '\uD835\uDD1C': 'Yfr', '\uD835\uDD36': 'yfr', '\u0407': 'YIcy', '\u0457': 'yicy', '\uD835\uDD50': 'Yopf', '\uD835\uDD6A': 'yopf', '\uD835\uDCB4': 'Yscr', '\uD835\uDCCE': 'yscr', '\u042E': 'YUcy', '\u044E': 'yucy', '\xFF': 'yuml', '\u0178': 'Yuml', '\u0179': 'Zacute', '\u017A': 'zacute', '\u017D': 'Zcaron', '\u017E': 'zcaron', '\u0417': 'Zcy', '\u0437': 'zcy', '\u017B': 'Zdot', '\u017C': 'zdot', '\u2128': 'Zfr', '\u0396': 'Zeta', '\u03B6': 'zeta', '\uD835\uDD37': 'zfr', '\u0416': 'ZHcy', '\u0436': 'zhcy', '\u21DD': 'zigrarr', '\uD835\uDD6B': 'zopf', '\uD835\uDCB5': 'Zscr', '\uD835\uDCCF': 'zscr', '\u200D': 'zwj', '\u200C': 'zwnj'} - var regexEscape = /["&'<>`]/g; - var escapeMap = { - '"': '"', - '&': '&', - '\'': ''', - '<': '<', + var regexEscape = /["&'<>`]/g + var escapeMap = { + '"': '"', + '&': '&', + '\'': ''', + '<': '<', // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the // following is not strictly necessary unless it’s part of a tag or an // unquoted attribute value. We’re only escaping it to support those // situations, and for XML support. - '>': '>', + '>': '>', // In Internet Explorer ≤ 8, the backtick character can be used // to break out of (un)quoted attribute values or HTML comments. // See http://html5sec.org/#102, http://html5sec.org/#108, and // http://html5sec.org/#133. - '`': '`' - }; - - var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/; - var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; - var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|iacute|Uacute|plusmn|otilde|Otilde|Agrave|agrave|yacute|Yacute|oslash|Oslash|Atilde|atilde|brvbar|Ccedil|ccedil|ograve|curren|divide|Eacute|eacute|Ograve|oacute|Egrave|egrave|ugrave|frac12|frac14|frac34|Ugrave|Oacute|Iacute|ntilde|Ntilde|uacute|middot|Igrave|igrave|iquest|aacute|laquo|THORN|micro|iexcl|icirc|Icirc|Acirc|ucirc|ecirc|Ocirc|ocirc|Ecirc|Ucirc|aring|Aring|aelig|AElig|acute|pound|raquo|acirc|times|thorn|szlig|cedil|COPY|Auml|ordf|ordm|uuml|macr|Uuml|auml|Ouml|ouml|para|nbsp|Euml|quot|QUOT|euml|yuml|cent|sect|copy|sup1|sup2|sup3|Iuml|iuml|shy|eth|reg|not|yen|amp|AMP|REG|uml|ETH|deg|gt|GT|LT|lt)([=a-zA-Z0-9])?/g; - var decodeMap = {'Aacute':'\xC1','aacute':'\xE1','Abreve':'\u0102','abreve':'\u0103','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','Acy':'\u0410','acy':'\u0430','AElig':'\xC6','aelig':'\xE6','af':'\u2061','Afr':'\uD835\uDD04','afr':'\uD835\uDD1E','Agrave':'\xC0','agrave':'\xE0','alefsym':'\u2135','aleph':'\u2135','Alpha':'\u0391','alpha':'\u03B1','Amacr':'\u0100','amacr':'\u0101','amalg':'\u2A3F','amp':'&','AMP':'&','andand':'\u2A55','And':'\u2A53','and':'\u2227','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angmsd':'\u2221','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','Aogon':'\u0104','aogon':'\u0105','Aopf':'\uD835\uDD38','aopf':'\uD835\uDD52','apacir':'\u2A6F','ap':'\u2248','apE':'\u2A70','ape':'\u224A','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','Aring':'\xC5','aring':'\xE5','Ascr':'\uD835\uDC9C','ascr':'\uD835\uDCB6','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','Bcy':'\u0411','bcy':'\u0431','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','Beta':'\u0392','beta':'\u03B2','beth':'\u2136','between':'\u226C','Bfr':'\uD835\uDD05','bfr':'\uD835\uDD1F','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bNot':'\u2AED','bnot':'\u2310','Bopf':'\uD835\uDD39','bopf':'\uD835\uDD53','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxHd':'\u2564','boxhD':'\u2565','boxHD':'\u2566','boxhu':'\u2534','boxHu':'\u2567','boxhU':'\u2568','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsolb':'\u29C5','bsol':'\\','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpE':'\u2AAE','bumpe':'\u224F','Bumpeq':'\u224E','bumpeq':'\u224F','Cacute':'\u0106','cacute':'\u0107','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','cap':'\u2229','Cap':'\u22D2','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','Ccaron':'\u010C','ccaron':'\u010D','Ccedil':'\xC7','ccedil':'\xE7','Ccirc':'\u0108','ccirc':'\u0109','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','Cdot':'\u010A','cdot':'\u010B','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','CHcy':'\u0427','chcy':'\u0447','check':'\u2713','checkmark':'\u2713','Chi':'\u03A7','chi':'\u03C7','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cir':'\u25CB','cirE':'\u29C3','cire':'\u2257','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','Colone':'\u2A74','colone':'\u2254','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','Cscr':'\uD835\uDC9E','cscr':'\uD835\uDCB8','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cup':'\u222A','Cup':'\u22D3','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','Darr':'\u21A1','dArr':'\u21D3','dash':'\u2010','Dashv':'\u2AE4','dashv':'\u22A3','dbkarow':'\u290F','dblac':'\u02DD','Dcaron':'\u010E','dcaron':'\u010F','Dcy':'\u0414','dcy':'\u0434','ddagger':'\u2021','ddarr':'\u21CA','DD':'\u2145','dd':'\u2146','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','Delta':'\u0394','delta':'\u03B4','demptyv':'\u29B1','dfisht':'\u297F','Dfr':'\uD835\uDD07','dfr':'\uD835\uDD21','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','DJcy':'\u0402','djcy':'\u0452','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','Dopf':'\uD835\uDD3B','dopf':'\uD835\uDD55','Dot':'\xA8','dot':'\u02D9','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','DownArrowBar':'\u2913','downarrow':'\u2193','DownArrow':'\u2193','Downarrow':'\u21D3','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVectorBar':'\u2956','DownLeftVector':'\u21BD','DownRightTeeVector':'\u295F','DownRightVectorBar':'\u2957','DownRightVector':'\u21C1','DownTeeArrow':'\u21A7','DownTee':'\u22A4','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','Dscr':'\uD835\uDC9F','dscr':'\uD835\uDCB9','DScy':'\u0405','dscy':'\u0455','dsol':'\u29F6','Dstrok':'\u0110','dstrok':'\u0111','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','DZcy':'\u040F','dzcy':'\u045F','dzigrarr':'\u27FF','Eacute':'\xC9','eacute':'\xE9','easter':'\u2A6E','Ecaron':'\u011A','ecaron':'\u011B','Ecirc':'\xCA','ecirc':'\xEA','ecir':'\u2256','ecolon':'\u2255','Ecy':'\u042D','ecy':'\u044D','eDDot':'\u2A77','Edot':'\u0116','edot':'\u0117','eDot':'\u2251','ee':'\u2147','efDot':'\u2252','Efr':'\uD835\uDD08','efr':'\uD835\uDD22','eg':'\u2A9A','Egrave':'\xC8','egrave':'\xE8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','Emacr':'\u0112','emacr':'\u0113','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp13':'\u2004','emsp14':'\u2005','emsp':'\u2003','ENG':'\u014A','eng':'\u014B','ensp':'\u2002','Eogon':'\u0118','eogon':'\u0119','Eopf':'\uD835\uDD3C','eopf':'\uD835\uDD56','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','Epsilon':'\u0395','epsilon':'\u03B5','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','Esim':'\u2A73','esim':'\u2242','Eta':'\u0397','eta':'\u03B7','ETH':'\xD0','eth':'\xF0','Euml':'\xCB','euml':'\xEB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','Fcy':'\u0424','fcy':'\u0444','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','Ffr':'\uD835\uDD09','ffr':'\uD835\uDD23','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','Fopf':'\uD835\uDD3D','fopf':'\uD835\uDD57','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','Gamma':'\u0393','gamma':'\u03B3','Gammad':'\u03DC','gammad':'\u03DD','gap':'\u2A86','Gbreve':'\u011E','gbreve':'\u011F','Gcedil':'\u0122','Gcirc':'\u011C','gcirc':'\u011D','Gcy':'\u0413','gcy':'\u0433','Gdot':'\u0120','gdot':'\u0121','ge':'\u2265','gE':'\u2267','gEl':'\u2A8C','gel':'\u22DB','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','gescc':'\u2AA9','ges':'\u2A7E','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','Gfr':'\uD835\uDD0A','gfr':'\uD835\uDD24','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','GJcy':'\u0403','gjcy':'\u0453','gla':'\u2AA5','gl':'\u2277','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','Gopf':'\uD835\uDD3E','gopf':'\uD835\uDD58','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','Gscr':'\uD835\uDCA2','gscr':'\u210A','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gtcc':'\u2AA7','gtcir':'\u2A7A','gt':'>','GT':'>','Gt':'\u226B','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','HARDcy':'\u042A','hardcy':'\u044A','harrcir':'\u2948','harr':'\u2194','hArr':'\u21D4','harrw':'\u21AD','Hat':'^','hbar':'\u210F','Hcirc':'\u0124','hcirc':'\u0125','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','Hstrok':'\u0126','hstrok':'\u0127','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','Iacute':'\xCD','iacute':'\xED','ic':'\u2063','Icirc':'\xCE','icirc':'\xEE','Icy':'\u0418','icy':'\u0438','Idot':'\u0130','IEcy':'\u0415','iecy':'\u0435','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','Igrave':'\xCC','igrave':'\xEC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','IJlig':'\u0132','ijlig':'\u0133','Imacr':'\u012A','imacr':'\u012B','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','Im':'\u2111','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','incare':'\u2105','in':'\u2208','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','intcal':'\u22BA','int':'\u222B','Int':'\u222C','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','IOcy':'\u0401','iocy':'\u0451','Iogon':'\u012E','iogon':'\u012F','Iopf':'\uD835\uDD40','iopf':'\uD835\uDD5A','Iota':'\u0399','iota':'\u03B9','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','Itilde':'\u0128','itilde':'\u0129','Iukcy':'\u0406','iukcy':'\u0456','Iuml':'\xCF','iuml':'\xEF','Jcirc':'\u0134','jcirc':'\u0135','Jcy':'\u0419','jcy':'\u0439','Jfr':'\uD835\uDD0D','jfr':'\uD835\uDD27','jmath':'\u0237','Jopf':'\uD835\uDD41','jopf':'\uD835\uDD5B','Jscr':'\uD835\uDCA5','jscr':'\uD835\uDCBF','Jsercy':'\u0408','jsercy':'\u0458','Jukcy':'\u0404','jukcy':'\u0454','Kappa':'\u039A','kappa':'\u03BA','kappav':'\u03F0','Kcedil':'\u0136','kcedil':'\u0137','Kcy':'\u041A','kcy':'\u043A','Kfr':'\uD835\uDD0E','kfr':'\uD835\uDD28','kgreen':'\u0138','KHcy':'\u0425','khcy':'\u0445','KJcy':'\u040C','kjcy':'\u045C','Kopf':'\uD835\uDD42','kopf':'\uD835\uDD5C','Kscr':'\uD835\uDCA6','kscr':'\uD835\uDCC0','lAarr':'\u21DA','Lacute':'\u0139','lacute':'\u013A','laemptyv':'\u29B4','lagran':'\u2112','Lambda':'\u039B','lambda':'\u03BB','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larrb':'\u21E4','larrbfs':'\u291F','larr':'\u2190','Larr':'\u219E','lArr':'\u21D0','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','latail':'\u2919','lAtail':'\u291B','lat':'\u2AAB','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','Lcaron':'\u013D','lcaron':'\u013E','Lcedil':'\u013B','lcedil':'\u013C','lceil':'\u2308','lcub':'{','Lcy':'\u041B','lcy':'\u043B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','LeftArrowBar':'\u21E4','leftarrow':'\u2190','LeftArrow':'\u2190','Leftarrow':'\u21D0','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVectorBar':'\u2959','LeftDownVector':'\u21C3','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','LeftRightArrow':'\u2194','Leftrightarrow':'\u21D4','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTeeArrow':'\u21A4','LeftTee':'\u22A3','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangleBar':'\u29CF','LeftTriangle':'\u22B2','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVectorBar':'\u2958','LeftUpVector':'\u21BF','LeftVectorBar':'\u2952','LeftVector':'\u21BC','lEg':'\u2A8B','leg':'\u22DA','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','lescc':'\u2AA8','les':'\u2A7D','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','Lfr':'\uD835\uDD0F','lfr':'\uD835\uDD29','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','LJcy':'\u0409','ljcy':'\u0459','llarr':'\u21C7','ll':'\u226A','Ll':'\u22D8','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','Lmidot':'\u013F','lmidot':'\u0140','lmoustache':'\u23B0','lmoust':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','LongLeftArrow':'\u27F5','Longleftarrow':'\u27F8','longleftrightarrow':'\u27F7','LongLeftRightArrow':'\u27F7','Longleftrightarrow':'\u27FA','longmapsto':'\u27FC','longrightarrow':'\u27F6','LongRightArrow':'\u27F6','Longrightarrow':'\u27F9','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','Lopf':'\uD835\uDD43','lopf':'\uD835\uDD5D','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','Lstrok':'\u0141','lstrok':'\u0142','ltcc':'\u2AA6','ltcir':'\u2A79','lt':'<','LT':'<','Lt':'\u226A','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','Map':'\u2905','map':'\u21A6','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','Mcy':'\u041C','mcy':'\u043C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','Mfr':'\uD835\uDD10','mfr':'\uD835\uDD2A','mho':'\u2127','micro':'\xB5','midast':'*','midcir':'\u2AF0','mid':'\u2223','middot':'\xB7','minusb':'\u229F','minus':'\u2212','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','Mopf':'\uD835\uDD44','mopf':'\uD835\uDD5E','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','Mu':'\u039C','mu':'\u03BC','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','Nacute':'\u0143','nacute':'\u0144','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natural':'\u266E','naturals':'\u2115','natur':'\u266E','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','Ncaron':'\u0147','ncaron':'\u0148','Ncedil':'\u0145','ncedil':'\u0146','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','Ncy':'\u041D','ncy':'\u043D','ndash':'\u2013','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','ne':'\u2260','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','Nfr':'\uD835\uDD11','nfr':'\uD835\uDD2B','ngE':'\u2267\u0338','nge':'\u2271','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','nGt':'\u226B\u20D2','ngt':'\u226F','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','NJcy':'\u040A','njcy':'\u045A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nlE':'\u2266\u0338','nle':'\u2270','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nLt':'\u226A\u20D2','nlt':'\u226E','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','Not':'\u2AEC','not':'\xAC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangle':'\u22EA','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangle':'\u22EB','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','nparallel':'\u2226','npar':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','nprec':'\u2280','npreceq':'\u2AAF\u0338','npre':'\u2AAF\u0338','nrarrc':'\u2933\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','Nscr':'\uD835\uDCA9','nscr':'\uD835\uDCC3','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsubE':'\u2AC5\u0338','nsube':'\u2288','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupE':'\u2AC6\u0338','nsupe':'\u2289','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','Ntilde':'\xD1','ntilde':'\xF1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','Nu':'\u039D','nu':'\u03BD','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','Oacute':'\xD3','oacute':'\xF3','oast':'\u229B','Ocirc':'\xD4','ocirc':'\xF4','ocir':'\u229A','Ocy':'\u041E','ocy':'\u043E','odash':'\u229D','Odblac':'\u0150','odblac':'\u0151','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','OElig':'\u0152','oelig':'\u0153','ofcir':'\u29BF','Ofr':'\uD835\uDD12','ofr':'\uD835\uDD2C','ogon':'\u02DB','Ograve':'\xD2','ograve':'\xF2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','Omacr':'\u014C','omacr':'\u014D','Omega':'\u03A9','omega':'\u03C9','Omicron':'\u039F','omicron':'\u03BF','omid':'\u29B6','ominus':'\u2296','Oopf':'\uD835\uDD46','oopf':'\uD835\uDD60','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','orarr':'\u21BB','Or':'\u2A54','or':'\u2228','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','Oscr':'\uD835\uDCAA','oscr':'\u2134','Oslash':'\xD8','oslash':'\xF8','osol':'\u2298','Otilde':'\xD5','otilde':'\xF5','otimesas':'\u2A36','Otimes':'\u2A37','otimes':'\u2297','Ouml':'\xD6','ouml':'\xF6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','para':'\xB6','parallel':'\u2225','par':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','Pcy':'\u041F','pcy':'\u043F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','Pfr':'\uD835\uDD13','pfr':'\uD835\uDD2D','Phi':'\u03A6','phi':'\u03C6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','Pi':'\u03A0','pi':'\u03C0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plus':'+','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','prap':'\u2AB7','Pr':'\u2ABB','pr':'\u227A','prcue':'\u227C','precapprox':'\u2AB7','prec':'\u227A','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','pre':'\u2AAF','prE':'\u2AB3','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportional':'\u221D','Proportion':'\u2237','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','Pscr':'\uD835\uDCAB','pscr':'\uD835\uDCC5','Psi':'\u03A8','psi':'\u03C8','puncsp':'\u2008','Qfr':'\uD835\uDD14','qfr':'\uD835\uDD2E','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','Qscr':'\uD835\uDCAC','qscr':'\uD835\uDCC6','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','Racute':'\u0154','racute':'\u0155','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarr':'\u2192','Rarr':'\u21A0','rArr':'\u21D2','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','Rarrtl':'\u2916','rarrtl':'\u21A3','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','Rcaron':'\u0158','rcaron':'\u0159','Rcedil':'\u0156','rcedil':'\u0157','rceil':'\u2309','rcub':'}','Rcy':'\u0420','rcy':'\u0440','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','Re':'\u211C','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','Rho':'\u03A1','rho':'\u03C1','rhov':'\u03F1','RightAngleBracket':'\u27E9','RightArrowBar':'\u21E5','rightarrow':'\u2192','RightArrow':'\u2192','Rightarrow':'\u21D2','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVectorBar':'\u2955','RightDownVector':'\u21C2','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTeeArrow':'\u21A6','RightTee':'\u22A2','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangleBar':'\u29D0','RightTriangle':'\u22B3','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVectorBar':'\u2954','RightUpVector':'\u21BE','RightVectorBar':'\u2953','RightVector':'\u21C0','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoustache':'\u23B1','rmoust':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','Sacute':'\u015A','sacute':'\u015B','sbquo':'\u201A','scap':'\u2AB8','Scaron':'\u0160','scaron':'\u0161','Sc':'\u2ABC','sc':'\u227B','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','Scedil':'\u015E','scedil':'\u015F','Scirc':'\u015C','scirc':'\u015D','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','Scy':'\u0421','scy':'\u0441','sdotb':'\u22A1','sdot':'\u22C5','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','Sfr':'\uD835\uDD16','sfr':'\uD835\uDD30','sfrown':'\u2322','sharp':'\u266F','SHCHcy':'\u0429','shchcy':'\u0449','SHcy':'\u0428','shcy':'\u0448','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','Sigma':'\u03A3','sigma':'\u03C3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','SOFTcy':'\u042C','softcy':'\u044C','solbar':'\u233F','solb':'\u29C4','sol':'/','Sopf':'\uD835\uDD4A','sopf':'\uD835\uDD64','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squ':'\u25A1','squf':'\u25AA','srarr':'\u2192','Sscr':'\uD835\uDCAE','sscr':'\uD835\uDCC8','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','Star':'\u22C6','star':'\u2606','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','subE':'\u2AC5','sube':'\u2286','subedot':'\u2AC3','submult':'\u2AC1','subnE':'\u2ACB','subne':'\u228A','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succapprox':'\u2AB8','succ':'\u227B','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','sup':'\u2283','Sup':'\u22D1','supdot':'\u2ABE','supdsub':'\u2AD8','supE':'\u2AC6','supe':'\u2287','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supnE':'\u2ACC','supne':'\u228B','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','Tau':'\u03A4','tau':'\u03C4','tbrk':'\u23B4','Tcaron':'\u0164','tcaron':'\u0165','Tcedil':'\u0162','tcedil':'\u0163','Tcy':'\u0422','tcy':'\u0442','tdot':'\u20DB','telrec':'\u2315','Tfr':'\uD835\uDD17','tfr':'\uD835\uDD31','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','Theta':'\u0398','theta':'\u03B8','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','ThinSpace':'\u2009','thinsp':'\u2009','thkap':'\u2248','thksim':'\u223C','THORN':'\xDE','thorn':'\xFE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','timesbar':'\u2A31','timesb':'\u22A0','times':'\xD7','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','topbot':'\u2336','topcir':'\u2AF1','top':'\u22A4','Topf':'\uD835\uDD4B','topf':'\uD835\uDD65','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','Tscr':'\uD835\uDCAF','tscr':'\uD835\uDCC9','TScy':'\u0426','tscy':'\u0446','TSHcy':'\u040B','tshcy':'\u045B','Tstrok':'\u0166','tstrok':'\u0167','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','Uacute':'\xDA','uacute':'\xFA','uarr':'\u2191','Uarr':'\u219F','uArr':'\u21D1','Uarrocir':'\u2949','Ubrcy':'\u040E','ubrcy':'\u045E','Ubreve':'\u016C','ubreve':'\u016D','Ucirc':'\xDB','ucirc':'\xFB','Ucy':'\u0423','ucy':'\u0443','udarr':'\u21C5','Udblac':'\u0170','udblac':'\u0171','udhar':'\u296E','ufisht':'\u297E','Ufr':'\uD835\uDD18','ufr':'\uD835\uDD32','Ugrave':'\xD9','ugrave':'\xF9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','Umacr':'\u016A','umacr':'\u016B','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','Uogon':'\u0172','uogon':'\u0173','Uopf':'\uD835\uDD4C','uopf':'\uD835\uDD66','UpArrowBar':'\u2912','uparrow':'\u2191','UpArrow':'\u2191','Uparrow':'\u21D1','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','UpDownArrow':'\u2195','Updownarrow':'\u21D5','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','Upsilon':'\u03A5','upsilon':'\u03C5','UpTeeArrow':'\u21A5','UpTee':'\u22A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','Uring':'\u016E','uring':'\u016F','urtri':'\u25F9','Uscr':'\uD835\uDCB0','uscr':'\uD835\uDCCA','utdot':'\u22F0','Utilde':'\u0168','utilde':'\u0169','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','Uuml':'\xDC','uuml':'\xFC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','Vcy':'\u0412','vcy':'\u0432','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','veebar':'\u22BB','vee':'\u2228','Vee':'\u22C1','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','Vfr':'\uD835\uDD19','vfr':'\uD835\uDD33','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','Vopf':'\uD835\uDD4D','vopf':'\uD835\uDD67','vprop':'\u221D','vrtri':'\u22B3','Vscr':'\uD835\uDCB1','vscr':'\uD835\uDCCB','vsubnE':'\u2ACB\uFE00','vsubne':'\u228A\uFE00','vsupnE':'\u2ACC\uFE00','vsupne':'\u228B\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','Wcirc':'\u0174','wcirc':'\u0175','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','Wfr':'\uD835\uDD1A','wfr':'\uD835\uDD34','Wopf':'\uD835\uDD4E','wopf':'\uD835\uDD68','wp':'\u2118','wr':'\u2240','wreath':'\u2240','Wscr':'\uD835\uDCB2','wscr':'\uD835\uDCCC','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','Xfr':'\uD835\uDD1B','xfr':'\uD835\uDD35','xharr':'\u27F7','xhArr':'\u27FA','Xi':'\u039E','xi':'\u03BE','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','Xopf':'\uD835\uDD4F','xopf':'\uD835\uDD69','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','Xscr':'\uD835\uDCB3','xscr':'\uD835\uDCCD','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','Yacute':'\xDD','yacute':'\xFD','YAcy':'\u042F','yacy':'\u044F','Ycirc':'\u0176','ycirc':'\u0177','Ycy':'\u042B','ycy':'\u044B','yen':'\xA5','Yfr':'\uD835\uDD1C','yfr':'\uD835\uDD36','YIcy':'\u0407','yicy':'\u0457','Yopf':'\uD835\uDD50','yopf':'\uD835\uDD6A','Yscr':'\uD835\uDCB4','yscr':'\uD835\uDCCE','YUcy':'\u042E','yucy':'\u044E','yuml':'\xFF','Yuml':'\u0178','Zacute':'\u0179','zacute':'\u017A','Zcaron':'\u017D','zcaron':'\u017E','Zcy':'\u0417','zcy':'\u0437','Zdot':'\u017B','zdot':'\u017C','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','Zeta':'\u0396','zeta':'\u03B6','zfr':'\uD835\uDD37','Zfr':'\u2128','ZHcy':'\u0416','zhcy':'\u0436','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','Zscr':'\uD835\uDCB5','zscr':'\uD835\uDCCF','zwj':'\u200D','zwnj':'\u200C'}; - var decodeMapLegacy = {'Aacute':'\xC1','aacute':'\xE1','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','AElig':'\xC6','aelig':'\xE6','Agrave':'\xC0','agrave':'\xE0','amp':'&','AMP':'&','Aring':'\xC5','aring':'\xE5','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','brvbar':'\xA6','Ccedil':'\xC7','ccedil':'\xE7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','Eacute':'\xC9','eacute':'\xE9','Ecirc':'\xCA','ecirc':'\xEA','Egrave':'\xC8','egrave':'\xE8','ETH':'\xD0','eth':'\xF0','Euml':'\xCB','euml':'\xEB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','Iacute':'\xCD','iacute':'\xED','Icirc':'\xCE','icirc':'\xEE','iexcl':'\xA1','Igrave':'\xCC','igrave':'\xEC','iquest':'\xBF','Iuml':'\xCF','iuml':'\xEF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','Ntilde':'\xD1','ntilde':'\xF1','Oacute':'\xD3','oacute':'\xF3','Ocirc':'\xD4','ocirc':'\xF4','Ograve':'\xD2','ograve':'\xF2','ordf':'\xAA','ordm':'\xBA','Oslash':'\xD8','oslash':'\xF8','Otilde':'\xD5','otilde':'\xF5','Ouml':'\xD6','ouml':'\xF6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','THORN':'\xDE','thorn':'\xFE','times':'\xD7','Uacute':'\xDA','uacute':'\xFA','Ucirc':'\xDB','ucirc':'\xFB','Ugrave':'\xD9','ugrave':'\xF9','uml':'\xA8','Uuml':'\xDC','uuml':'\xFC','Yacute':'\xDD','yacute':'\xFD','yen':'\xA5','yuml':'\xFF'}; - var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'}; - var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]; - - /*--------------------------------------------------------------------------*/ - - var stringFromCharCode = String.fromCharCode; - - var object = {}; - var hasOwnProperty = object.hasOwnProperty; - var has = function(object, propertyName) { - return hasOwnProperty.call(object, propertyName); - }; - - var contains = function(array, value) { - var index = -1; - var length = array.length; - while (++index < length) { - if (array[index] == value) { - return true; - } - } - return false; - }; - - var merge = function(options, defaults) { - if (!options) { - return defaults; - } - var result = {}; - var key; - for (key in defaults) { + '`': '`' + } + + var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/ + var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/ + var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|iacute|Uacute|plusmn|otilde|Otilde|Agrave|agrave|yacute|Yacute|oslash|Oslash|Atilde|atilde|brvbar|Ccedil|ccedil|ograve|curren|divide|Eacute|eacute|Ograve|oacute|Egrave|egrave|ugrave|frac12|frac14|frac34|Ugrave|Oacute|Iacute|ntilde|Ntilde|uacute|middot|Igrave|igrave|iquest|aacute|laquo|THORN|micro|iexcl|icirc|Icirc|Acirc|ucirc|ecirc|Ocirc|ocirc|Ecirc|Ucirc|aring|Aring|aelig|AElig|acute|pound|raquo|acirc|times|thorn|szlig|cedil|COPY|Auml|ordf|ordm|uuml|macr|Uuml|auml|Ouml|ouml|para|nbsp|Euml|quot|QUOT|euml|yuml|cent|sect|copy|sup1|sup2|sup3|Iuml|iuml|shy|eth|reg|not|yen|amp|AMP|REG|uml|ETH|deg|gt|GT|LT|lt)([=a-zA-Z0-9])?/g + var decodeMap = {'Aacute': '\xC1', 'aacute': '\xE1', 'Abreve': '\u0102', 'abreve': '\u0103', 'ac': '\u223E', 'acd': '\u223F', 'acE': '\u223E\u0333', 'Acirc': '\xC2', 'acirc': '\xE2', 'acute': '\xB4', 'Acy': '\u0410', 'acy': '\u0430', 'AElig': '\xC6', 'aelig': '\xE6', 'af': '\u2061', 'Afr': '\uD835\uDD04', 'afr': '\uD835\uDD1E', 'Agrave': '\xC0', 'agrave': '\xE0', 'alefsym': '\u2135', 'aleph': '\u2135', 'Alpha': '\u0391', 'alpha': '\u03B1', 'Amacr': '\u0100', 'amacr': '\u0101', 'amalg': '\u2A3F', 'amp': '&', 'AMP': '&', 'andand': '\u2A55', 'And': '\u2A53', 'and': '\u2227', 'andd': '\u2A5C', 'andslope': '\u2A58', 'andv': '\u2A5A', 'ang': '\u2220', 'ange': '\u29A4', 'angle': '\u2220', 'angmsdaa': '\u29A8', 'angmsdab': '\u29A9', 'angmsdac': '\u29AA', 'angmsdad': '\u29AB', 'angmsdae': '\u29AC', 'angmsdaf': '\u29AD', 'angmsdag': '\u29AE', 'angmsdah': '\u29AF', 'angmsd': '\u2221', 'angrt': '\u221F', 'angrtvb': '\u22BE', 'angrtvbd': '\u299D', 'angsph': '\u2222', 'angst': '\xC5', 'angzarr': '\u237C', 'Aogon': '\u0104', 'aogon': '\u0105', 'Aopf': '\uD835\uDD38', 'aopf': '\uD835\uDD52', 'apacir': '\u2A6F', 'ap': '\u2248', 'apE': '\u2A70', 'ape': '\u224A', 'apid': '\u224B', 'apos': '\'', 'ApplyFunction': '\u2061', 'approx': '\u2248', 'approxeq': '\u224A', 'Aring': '\xC5', 'aring': '\xE5', 'Ascr': '\uD835\uDC9C', 'ascr': '\uD835\uDCB6', 'Assign': '\u2254', 'ast': '*', 'asymp': '\u2248', 'asympeq': '\u224D', 'Atilde': '\xC3', 'atilde': '\xE3', 'Auml': '\xC4', 'auml': '\xE4', 'awconint': '\u2233', 'awint': '\u2A11', 'backcong': '\u224C', 'backepsilon': '\u03F6', 'backprime': '\u2035', 'backsim': '\u223D', 'backsimeq': '\u22CD', 'Backslash': '\u2216', 'Barv': '\u2AE7', 'barvee': '\u22BD', 'barwed': '\u2305', 'Barwed': '\u2306', 'barwedge': '\u2305', 'bbrk': '\u23B5', 'bbrktbrk': '\u23B6', 'bcong': '\u224C', 'Bcy': '\u0411', 'bcy': '\u0431', 'bdquo': '\u201E', 'becaus': '\u2235', 'because': '\u2235', 'Because': '\u2235', 'bemptyv': '\u29B0', 'bepsi': '\u03F6', 'bernou': '\u212C', 'Bernoullis': '\u212C', 'Beta': '\u0392', 'beta': '\u03B2', 'beth': '\u2136', 'between': '\u226C', 'Bfr': '\uD835\uDD05', 'bfr': '\uD835\uDD1F', 'bigcap': '\u22C2', 'bigcirc': '\u25EF', 'bigcup': '\u22C3', 'bigodot': '\u2A00', 'bigoplus': '\u2A01', 'bigotimes': '\u2A02', 'bigsqcup': '\u2A06', 'bigstar': '\u2605', 'bigtriangledown': '\u25BD', 'bigtriangleup': '\u25B3', 'biguplus': '\u2A04', 'bigvee': '\u22C1', 'bigwedge': '\u22C0', 'bkarow': '\u290D', 'blacklozenge': '\u29EB', 'blacksquare': '\u25AA', 'blacktriangle': '\u25B4', 'blacktriangledown': '\u25BE', 'blacktriangleleft': '\u25C2', 'blacktriangleright': '\u25B8', 'blank': '\u2423', 'blk12': '\u2592', 'blk14': '\u2591', 'blk34': '\u2593', 'block': '\u2588', 'bne': '=\u20E5', 'bnequiv': '\u2261\u20E5', 'bNot': '\u2AED', 'bnot': '\u2310', 'Bopf': '\uD835\uDD39', 'bopf': '\uD835\uDD53', 'bot': '\u22A5', 'bottom': '\u22A5', 'bowtie': '\u22C8', 'boxbox': '\u29C9', 'boxdl': '\u2510', 'boxdL': '\u2555', 'boxDl': '\u2556', 'boxDL': '\u2557', 'boxdr': '\u250C', 'boxdR': '\u2552', 'boxDr': '\u2553', 'boxDR': '\u2554', 'boxh': '\u2500', 'boxH': '\u2550', 'boxhd': '\u252C', 'boxHd': '\u2564', 'boxhD': '\u2565', 'boxHD': '\u2566', 'boxhu': '\u2534', 'boxHu': '\u2567', 'boxhU': '\u2568', 'boxHU': '\u2569', 'boxminus': '\u229F', 'boxplus': '\u229E', 'boxtimes': '\u22A0', 'boxul': '\u2518', 'boxuL': '\u255B', 'boxUl': '\u255C', 'boxUL': '\u255D', 'boxur': '\u2514', 'boxuR': '\u2558', 'boxUr': '\u2559', 'boxUR': '\u255A', 'boxv': '\u2502', 'boxV': '\u2551', 'boxvh': '\u253C', 'boxvH': '\u256A', 'boxVh': '\u256B', 'boxVH': '\u256C', 'boxvl': '\u2524', 'boxvL': '\u2561', 'boxVl': '\u2562', 'boxVL': '\u2563', 'boxvr': '\u251C', 'boxvR': '\u255E', 'boxVr': '\u255F', 'boxVR': '\u2560', 'bprime': '\u2035', 'breve': '\u02D8', 'Breve': '\u02D8', 'brvbar': '\xA6', 'bscr': '\uD835\uDCB7', 'Bscr': '\u212C', 'bsemi': '\u204F', 'bsim': '\u223D', 'bsime': '\u22CD', 'bsolb': '\u29C5', 'bsol': '\\', 'bsolhsub': '\u27C8', 'bull': '\u2022', 'bullet': '\u2022', 'bump': '\u224E', 'bumpE': '\u2AAE', 'bumpe': '\u224F', 'Bumpeq': '\u224E', 'bumpeq': '\u224F', 'Cacute': '\u0106', 'cacute': '\u0107', 'capand': '\u2A44', 'capbrcup': '\u2A49', 'capcap': '\u2A4B', 'cap': '\u2229', 'Cap': '\u22D2', 'capcup': '\u2A47', 'capdot': '\u2A40', 'CapitalDifferentialD': '\u2145', 'caps': '\u2229\uFE00', 'caret': '\u2041', 'caron': '\u02C7', 'Cayleys': '\u212D', 'ccaps': '\u2A4D', 'Ccaron': '\u010C', 'ccaron': '\u010D', 'Ccedil': '\xC7', 'ccedil': '\xE7', 'Ccirc': '\u0108', 'ccirc': '\u0109', 'Cconint': '\u2230', 'ccups': '\u2A4C', 'ccupssm': '\u2A50', 'Cdot': '\u010A', 'cdot': '\u010B', 'cedil': '\xB8', 'Cedilla': '\xB8', 'cemptyv': '\u29B2', 'cent': '\xA2', 'centerdot': '\xB7', 'CenterDot': '\xB7', 'cfr': '\uD835\uDD20', 'Cfr': '\u212D', 'CHcy': '\u0427', 'chcy': '\u0447', 'check': '\u2713', 'checkmark': '\u2713', 'Chi': '\u03A7', 'chi': '\u03C7', 'circ': '\u02C6', 'circeq': '\u2257', 'circlearrowleft': '\u21BA', 'circlearrowright': '\u21BB', 'circledast': '\u229B', 'circledcirc': '\u229A', 'circleddash': '\u229D', 'CircleDot': '\u2299', 'circledR': '\xAE', 'circledS': '\u24C8', 'CircleMinus': '\u2296', 'CirclePlus': '\u2295', 'CircleTimes': '\u2297', 'cir': '\u25CB', 'cirE': '\u29C3', 'cire': '\u2257', 'cirfnint': '\u2A10', 'cirmid': '\u2AEF', 'cirscir': '\u29C2', 'ClockwiseContourIntegral': '\u2232', 'CloseCurlyDoubleQuote': '\u201D', 'CloseCurlyQuote': '\u2019', 'clubs': '\u2663', 'clubsuit': '\u2663', 'colon': ':', 'Colon': '\u2237', 'Colone': '\u2A74', 'colone': '\u2254', 'coloneq': '\u2254', 'comma': ',', 'commat': '@', 'comp': '\u2201', 'compfn': '\u2218', 'complement': '\u2201', 'complexes': '\u2102', 'cong': '\u2245', 'congdot': '\u2A6D', 'Congruent': '\u2261', 'conint': '\u222E', 'Conint': '\u222F', 'ContourIntegral': '\u222E', 'copf': '\uD835\uDD54', 'Copf': '\u2102', 'coprod': '\u2210', 'Coproduct': '\u2210', 'copy': '\xA9', 'COPY': '\xA9', 'copysr': '\u2117', 'CounterClockwiseContourIntegral': '\u2233', 'crarr': '\u21B5', 'cross': '\u2717', 'Cross': '\u2A2F', 'Cscr': '\uD835\uDC9E', 'cscr': '\uD835\uDCB8', 'csub': '\u2ACF', 'csube': '\u2AD1', 'csup': '\u2AD0', 'csupe': '\u2AD2', 'ctdot': '\u22EF', 'cudarrl': '\u2938', 'cudarrr': '\u2935', 'cuepr': '\u22DE', 'cuesc': '\u22DF', 'cularr': '\u21B6', 'cularrp': '\u293D', 'cupbrcap': '\u2A48', 'cupcap': '\u2A46', 'CupCap': '\u224D', 'cup': '\u222A', 'Cup': '\u22D3', 'cupcup': '\u2A4A', 'cupdot': '\u228D', 'cupor': '\u2A45', 'cups': '\u222A\uFE00', 'curarr': '\u21B7', 'curarrm': '\u293C', 'curlyeqprec': '\u22DE', 'curlyeqsucc': '\u22DF', 'curlyvee': '\u22CE', 'curlywedge': '\u22CF', 'curren': '\xA4', 'curvearrowleft': '\u21B6', 'curvearrowright': '\u21B7', 'cuvee': '\u22CE', 'cuwed': '\u22CF', 'cwconint': '\u2232', 'cwint': '\u2231', 'cylcty': '\u232D', 'dagger': '\u2020', 'Dagger': '\u2021', 'daleth': '\u2138', 'darr': '\u2193', 'Darr': '\u21A1', 'dArr': '\u21D3', 'dash': '\u2010', 'Dashv': '\u2AE4', 'dashv': '\u22A3', 'dbkarow': '\u290F', 'dblac': '\u02DD', 'Dcaron': '\u010E', 'dcaron': '\u010F', 'Dcy': '\u0414', 'dcy': '\u0434', 'ddagger': '\u2021', 'ddarr': '\u21CA', 'DD': '\u2145', 'dd': '\u2146', 'DDotrahd': '\u2911', 'ddotseq': '\u2A77', 'deg': '\xB0', 'Del': '\u2207', 'Delta': '\u0394', 'delta': '\u03B4', 'demptyv': '\u29B1', 'dfisht': '\u297F', 'Dfr': '\uD835\uDD07', 'dfr': '\uD835\uDD21', 'dHar': '\u2965', 'dharl': '\u21C3', 'dharr': '\u21C2', 'DiacriticalAcute': '\xB4', 'DiacriticalDot': '\u02D9', 'DiacriticalDoubleAcute': '\u02DD', 'DiacriticalGrave': '`', 'DiacriticalTilde': '\u02DC', 'diam': '\u22C4', 'diamond': '\u22C4', 'Diamond': '\u22C4', 'diamondsuit': '\u2666', 'diams': '\u2666', 'die': '\xA8', 'DifferentialD': '\u2146', 'digamma': '\u03DD', 'disin': '\u22F2', 'div': '\xF7', 'divide': '\xF7', 'divideontimes': '\u22C7', 'divonx': '\u22C7', 'DJcy': '\u0402', 'djcy': '\u0452', 'dlcorn': '\u231E', 'dlcrop': '\u230D', 'dollar': '$', 'Dopf': '\uD835\uDD3B', 'dopf': '\uD835\uDD55', 'Dot': '\xA8', 'dot': '\u02D9', 'DotDot': '\u20DC', 'doteq': '\u2250', 'doteqdot': '\u2251', 'DotEqual': '\u2250', 'dotminus': '\u2238', 'dotplus': '\u2214', 'dotsquare': '\u22A1', 'doublebarwedge': '\u2306', 'DoubleContourIntegral': '\u222F', 'DoubleDot': '\xA8', 'DoubleDownArrow': '\u21D3', 'DoubleLeftArrow': '\u21D0', 'DoubleLeftRightArrow': '\u21D4', 'DoubleLeftTee': '\u2AE4', 'DoubleLongLeftArrow': '\u27F8', 'DoubleLongLeftRightArrow': '\u27FA', 'DoubleLongRightArrow': '\u27F9', 'DoubleRightArrow': '\u21D2', 'DoubleRightTee': '\u22A8', 'DoubleUpArrow': '\u21D1', 'DoubleUpDownArrow': '\u21D5', 'DoubleVerticalBar': '\u2225', 'DownArrowBar': '\u2913', 'downarrow': '\u2193', 'DownArrow': '\u2193', 'Downarrow': '\u21D3', 'DownArrowUpArrow': '\u21F5', 'DownBreve': '\u0311', 'downdownarrows': '\u21CA', 'downharpoonleft': '\u21C3', 'downharpoonright': '\u21C2', 'DownLeftRightVector': '\u2950', 'DownLeftTeeVector': '\u295E', 'DownLeftVectorBar': '\u2956', 'DownLeftVector': '\u21BD', 'DownRightTeeVector': '\u295F', 'DownRightVectorBar': '\u2957', 'DownRightVector': '\u21C1', 'DownTeeArrow': '\u21A7', 'DownTee': '\u22A4', 'drbkarow': '\u2910', 'drcorn': '\u231F', 'drcrop': '\u230C', 'Dscr': '\uD835\uDC9F', 'dscr': '\uD835\uDCB9', 'DScy': '\u0405', 'dscy': '\u0455', 'dsol': '\u29F6', 'Dstrok': '\u0110', 'dstrok': '\u0111', 'dtdot': '\u22F1', 'dtri': '\u25BF', 'dtrif': '\u25BE', 'duarr': '\u21F5', 'duhar': '\u296F', 'dwangle': '\u29A6', 'DZcy': '\u040F', 'dzcy': '\u045F', 'dzigrarr': '\u27FF', 'Eacute': '\xC9', 'eacute': '\xE9', 'easter': '\u2A6E', 'Ecaron': '\u011A', 'ecaron': '\u011B', 'Ecirc': '\xCA', 'ecirc': '\xEA', 'ecir': '\u2256', 'ecolon': '\u2255', 'Ecy': '\u042D', 'ecy': '\u044D', 'eDDot': '\u2A77', 'Edot': '\u0116', 'edot': '\u0117', 'eDot': '\u2251', 'ee': '\u2147', 'efDot': '\u2252', 'Efr': '\uD835\uDD08', 'efr': '\uD835\uDD22', 'eg': '\u2A9A', 'Egrave': '\xC8', 'egrave': '\xE8', 'egs': '\u2A96', 'egsdot': '\u2A98', 'el': '\u2A99', 'Element': '\u2208', 'elinters': '\u23E7', 'ell': '\u2113', 'els': '\u2A95', 'elsdot': '\u2A97', 'Emacr': '\u0112', 'emacr': '\u0113', 'empty': '\u2205', 'emptyset': '\u2205', 'EmptySmallSquare': '\u25FB', 'emptyv': '\u2205', 'EmptyVerySmallSquare': '\u25AB', 'emsp13': '\u2004', 'emsp14': '\u2005', 'emsp': '\u2003', 'ENG': '\u014A', 'eng': '\u014B', 'ensp': '\u2002', 'Eogon': '\u0118', 'eogon': '\u0119', 'Eopf': '\uD835\uDD3C', 'eopf': '\uD835\uDD56', 'epar': '\u22D5', 'eparsl': '\u29E3', 'eplus': '\u2A71', 'epsi': '\u03B5', 'Epsilon': '\u0395', 'epsilon': '\u03B5', 'epsiv': '\u03F5', 'eqcirc': '\u2256', 'eqcolon': '\u2255', 'eqsim': '\u2242', 'eqslantgtr': '\u2A96', 'eqslantless': '\u2A95', 'Equal': '\u2A75', 'equals': '=', 'EqualTilde': '\u2242', 'equest': '\u225F', 'Equilibrium': '\u21CC', 'equiv': '\u2261', 'equivDD': '\u2A78', 'eqvparsl': '\u29E5', 'erarr': '\u2971', 'erDot': '\u2253', 'escr': '\u212F', 'Escr': '\u2130', 'esdot': '\u2250', 'Esim': '\u2A73', 'esim': '\u2242', 'Eta': '\u0397', 'eta': '\u03B7', 'ETH': '\xD0', 'eth': '\xF0', 'Euml': '\xCB', 'euml': '\xEB', 'euro': '\u20AC', 'excl': '!', 'exist': '\u2203', 'Exists': '\u2203', 'expectation': '\u2130', 'exponentiale': '\u2147', 'ExponentialE': '\u2147', 'fallingdotseq': '\u2252', 'Fcy': '\u0424', 'fcy': '\u0444', 'female': '\u2640', 'ffilig': '\uFB03', 'fflig': '\uFB00', 'ffllig': '\uFB04', 'Ffr': '\uD835\uDD09', 'ffr': '\uD835\uDD23', 'filig': '\uFB01', 'FilledSmallSquare': '\u25FC', 'FilledVerySmallSquare': '\u25AA', 'fjlig': 'fj', 'flat': '\u266D', 'fllig': '\uFB02', 'fltns': '\u25B1', 'fnof': '\u0192', 'Fopf': '\uD835\uDD3D', 'fopf': '\uD835\uDD57', 'forall': '\u2200', 'ForAll': '\u2200', 'fork': '\u22D4', 'forkv': '\u2AD9', 'Fouriertrf': '\u2131', 'fpartint': '\u2A0D', 'frac12': '\xBD', 'frac13': '\u2153', 'frac14': '\xBC', 'frac15': '\u2155', 'frac16': '\u2159', 'frac18': '\u215B', 'frac23': '\u2154', 'frac25': '\u2156', 'frac34': '\xBE', 'frac35': '\u2157', 'frac38': '\u215C', 'frac45': '\u2158', 'frac56': '\u215A', 'frac58': '\u215D', 'frac78': '\u215E', 'frasl': '\u2044', 'frown': '\u2322', 'fscr': '\uD835\uDCBB', 'Fscr': '\u2131', 'gacute': '\u01F5', 'Gamma': '\u0393', 'gamma': '\u03B3', 'Gammad': '\u03DC', 'gammad': '\u03DD', 'gap': '\u2A86', 'Gbreve': '\u011E', 'gbreve': '\u011F', 'Gcedil': '\u0122', 'Gcirc': '\u011C', 'gcirc': '\u011D', 'Gcy': '\u0413', 'gcy': '\u0433', 'Gdot': '\u0120', 'gdot': '\u0121', 'ge': '\u2265', 'gE': '\u2267', 'gEl': '\u2A8C', 'gel': '\u22DB', 'geq': '\u2265', 'geqq': '\u2267', 'geqslant': '\u2A7E', 'gescc': '\u2AA9', 'ges': '\u2A7E', 'gesdot': '\u2A80', 'gesdoto': '\u2A82', 'gesdotol': '\u2A84', 'gesl': '\u22DB\uFE00', 'gesles': '\u2A94', 'Gfr': '\uD835\uDD0A', 'gfr': '\uD835\uDD24', 'gg': '\u226B', 'Gg': '\u22D9', 'ggg': '\u22D9', 'gimel': '\u2137', 'GJcy': '\u0403', 'gjcy': '\u0453', 'gla': '\u2AA5', 'gl': '\u2277', 'glE': '\u2A92', 'glj': '\u2AA4', 'gnap': '\u2A8A', 'gnapprox': '\u2A8A', 'gne': '\u2A88', 'gnE': '\u2269', 'gneq': '\u2A88', 'gneqq': '\u2269', 'gnsim': '\u22E7', 'Gopf': '\uD835\uDD3E', 'gopf': '\uD835\uDD58', 'grave': '`', 'GreaterEqual': '\u2265', 'GreaterEqualLess': '\u22DB', 'GreaterFullEqual': '\u2267', 'GreaterGreater': '\u2AA2', 'GreaterLess': '\u2277', 'GreaterSlantEqual': '\u2A7E', 'GreaterTilde': '\u2273', 'Gscr': '\uD835\uDCA2', 'gscr': '\u210A', 'gsim': '\u2273', 'gsime': '\u2A8E', 'gsiml': '\u2A90', 'gtcc': '\u2AA7', 'gtcir': '\u2A7A', 'gt': '>', 'GT': '>', 'Gt': '\u226B', 'gtdot': '\u22D7', 'gtlPar': '\u2995', 'gtquest': '\u2A7C', 'gtrapprox': '\u2A86', 'gtrarr': '\u2978', 'gtrdot': '\u22D7', 'gtreqless': '\u22DB', 'gtreqqless': '\u2A8C', 'gtrless': '\u2277', 'gtrsim': '\u2273', 'gvertneqq': '\u2269\uFE00', 'gvnE': '\u2269\uFE00', 'Hacek': '\u02C7', 'hairsp': '\u200A', 'half': '\xBD', 'hamilt': '\u210B', 'HARDcy': '\u042A', 'hardcy': '\u044A', 'harrcir': '\u2948', 'harr': '\u2194', 'hArr': '\u21D4', 'harrw': '\u21AD', 'Hat': '^', 'hbar': '\u210F', 'Hcirc': '\u0124', 'hcirc': '\u0125', 'hearts': '\u2665', 'heartsuit': '\u2665', 'hellip': '\u2026', 'hercon': '\u22B9', 'hfr': '\uD835\uDD25', 'Hfr': '\u210C', 'HilbertSpace': '\u210B', 'hksearow': '\u2925', 'hkswarow': '\u2926', 'hoarr': '\u21FF', 'homtht': '\u223B', 'hookleftarrow': '\u21A9', 'hookrightarrow': '\u21AA', 'hopf': '\uD835\uDD59', 'Hopf': '\u210D', 'horbar': '\u2015', 'HorizontalLine': '\u2500', 'hscr': '\uD835\uDCBD', 'Hscr': '\u210B', 'hslash': '\u210F', 'Hstrok': '\u0126', 'hstrok': '\u0127', 'HumpDownHump': '\u224E', 'HumpEqual': '\u224F', 'hybull': '\u2043', 'hyphen': '\u2010', 'Iacute': '\xCD', 'iacute': '\xED', 'ic': '\u2063', 'Icirc': '\xCE', 'icirc': '\xEE', 'Icy': '\u0418', 'icy': '\u0438', 'Idot': '\u0130', 'IEcy': '\u0415', 'iecy': '\u0435', 'iexcl': '\xA1', 'iff': '\u21D4', 'ifr': '\uD835\uDD26', 'Ifr': '\u2111', 'Igrave': '\xCC', 'igrave': '\xEC', 'ii': '\u2148', 'iiiint': '\u2A0C', 'iiint': '\u222D', 'iinfin': '\u29DC', 'iiota': '\u2129', 'IJlig': '\u0132', 'ijlig': '\u0133', 'Imacr': '\u012A', 'imacr': '\u012B', 'image': '\u2111', 'ImaginaryI': '\u2148', 'imagline': '\u2110', 'imagpart': '\u2111', 'imath': '\u0131', 'Im': '\u2111', 'imof': '\u22B7', 'imped': '\u01B5', 'Implies': '\u21D2', 'incare': '\u2105', 'in': '\u2208', 'infin': '\u221E', 'infintie': '\u29DD', 'inodot': '\u0131', 'intcal': '\u22BA', 'int': '\u222B', 'Int': '\u222C', 'integers': '\u2124', 'Integral': '\u222B', 'intercal': '\u22BA', 'Intersection': '\u22C2', 'intlarhk': '\u2A17', 'intprod': '\u2A3C', 'InvisibleComma': '\u2063', 'InvisibleTimes': '\u2062', 'IOcy': '\u0401', 'iocy': '\u0451', 'Iogon': '\u012E', 'iogon': '\u012F', 'Iopf': '\uD835\uDD40', 'iopf': '\uD835\uDD5A', 'Iota': '\u0399', 'iota': '\u03B9', 'iprod': '\u2A3C', 'iquest': '\xBF', 'iscr': '\uD835\uDCBE', 'Iscr': '\u2110', 'isin': '\u2208', 'isindot': '\u22F5', 'isinE': '\u22F9', 'isins': '\u22F4', 'isinsv': '\u22F3', 'isinv': '\u2208', 'it': '\u2062', 'Itilde': '\u0128', 'itilde': '\u0129', 'Iukcy': '\u0406', 'iukcy': '\u0456', 'Iuml': '\xCF', 'iuml': '\xEF', 'Jcirc': '\u0134', 'jcirc': '\u0135', 'Jcy': '\u0419', 'jcy': '\u0439', 'Jfr': '\uD835\uDD0D', 'jfr': '\uD835\uDD27', 'jmath': '\u0237', 'Jopf': '\uD835\uDD41', 'jopf': '\uD835\uDD5B', 'Jscr': '\uD835\uDCA5', 'jscr': '\uD835\uDCBF', 'Jsercy': '\u0408', 'jsercy': '\u0458', 'Jukcy': '\u0404', 'jukcy': '\u0454', 'Kappa': '\u039A', 'kappa': '\u03BA', 'kappav': '\u03F0', 'Kcedil': '\u0136', 'kcedil': '\u0137', 'Kcy': '\u041A', 'kcy': '\u043A', 'Kfr': '\uD835\uDD0E', 'kfr': '\uD835\uDD28', 'kgreen': '\u0138', 'KHcy': '\u0425', 'khcy': '\u0445', 'KJcy': '\u040C', 'kjcy': '\u045C', 'Kopf': '\uD835\uDD42', 'kopf': '\uD835\uDD5C', 'Kscr': '\uD835\uDCA6', 'kscr': '\uD835\uDCC0', 'lAarr': '\u21DA', 'Lacute': '\u0139', 'lacute': '\u013A', 'laemptyv': '\u29B4', 'lagran': '\u2112', 'Lambda': '\u039B', 'lambda': '\u03BB', 'lang': '\u27E8', 'Lang': '\u27EA', 'langd': '\u2991', 'langle': '\u27E8', 'lap': '\u2A85', 'Laplacetrf': '\u2112', 'laquo': '\xAB', 'larrb': '\u21E4', 'larrbfs': '\u291F', 'larr': '\u2190', 'Larr': '\u219E', 'lArr': '\u21D0', 'larrfs': '\u291D', 'larrhk': '\u21A9', 'larrlp': '\u21AB', 'larrpl': '\u2939', 'larrsim': '\u2973', 'larrtl': '\u21A2', 'latail': '\u2919', 'lAtail': '\u291B', 'lat': '\u2AAB', 'late': '\u2AAD', 'lates': '\u2AAD\uFE00', 'lbarr': '\u290C', 'lBarr': '\u290E', 'lbbrk': '\u2772', 'lbrace': '{', 'lbrack': '[', 'lbrke': '\u298B', 'lbrksld': '\u298F', 'lbrkslu': '\u298D', 'Lcaron': '\u013D', 'lcaron': '\u013E', 'Lcedil': '\u013B', 'lcedil': '\u013C', 'lceil': '\u2308', 'lcub': '{', 'Lcy': '\u041B', 'lcy': '\u043B', 'ldca': '\u2936', 'ldquo': '\u201C', 'ldquor': '\u201E', 'ldrdhar': '\u2967', 'ldrushar': '\u294B', 'ldsh': '\u21B2', 'le': '\u2264', 'lE': '\u2266', 'LeftAngleBracket': '\u27E8', 'LeftArrowBar': '\u21E4', 'leftarrow': '\u2190', 'LeftArrow': '\u2190', 'Leftarrow': '\u21D0', 'LeftArrowRightArrow': '\u21C6', 'leftarrowtail': '\u21A2', 'LeftCeiling': '\u2308', 'LeftDoubleBracket': '\u27E6', 'LeftDownTeeVector': '\u2961', 'LeftDownVectorBar': '\u2959', 'LeftDownVector': '\u21C3', 'LeftFloor': '\u230A', 'leftharpoondown': '\u21BD', 'leftharpoonup': '\u21BC', 'leftleftarrows': '\u21C7', 'leftrightarrow': '\u2194', 'LeftRightArrow': '\u2194', 'Leftrightarrow': '\u21D4', 'leftrightarrows': '\u21C6', 'leftrightharpoons': '\u21CB', 'leftrightsquigarrow': '\u21AD', 'LeftRightVector': '\u294E', 'LeftTeeArrow': '\u21A4', 'LeftTee': '\u22A3', 'LeftTeeVector': '\u295A', 'leftthreetimes': '\u22CB', 'LeftTriangleBar': '\u29CF', 'LeftTriangle': '\u22B2', 'LeftTriangleEqual': '\u22B4', 'LeftUpDownVector': '\u2951', 'LeftUpTeeVector': '\u2960', 'LeftUpVectorBar': '\u2958', 'LeftUpVector': '\u21BF', 'LeftVectorBar': '\u2952', 'LeftVector': '\u21BC', 'lEg': '\u2A8B', 'leg': '\u22DA', 'leq': '\u2264', 'leqq': '\u2266', 'leqslant': '\u2A7D', 'lescc': '\u2AA8', 'les': '\u2A7D', 'lesdot': '\u2A7F', 'lesdoto': '\u2A81', 'lesdotor': '\u2A83', 'lesg': '\u22DA\uFE00', 'lesges': '\u2A93', 'lessapprox': '\u2A85', 'lessdot': '\u22D6', 'lesseqgtr': '\u22DA', 'lesseqqgtr': '\u2A8B', 'LessEqualGreater': '\u22DA', 'LessFullEqual': '\u2266', 'LessGreater': '\u2276', 'lessgtr': '\u2276', 'LessLess': '\u2AA1', 'lesssim': '\u2272', 'LessSlantEqual': '\u2A7D', 'LessTilde': '\u2272', 'lfisht': '\u297C', 'lfloor': '\u230A', 'Lfr': '\uD835\uDD0F', 'lfr': '\uD835\uDD29', 'lg': '\u2276', 'lgE': '\u2A91', 'lHar': '\u2962', 'lhard': '\u21BD', 'lharu': '\u21BC', 'lharul': '\u296A', 'lhblk': '\u2584', 'LJcy': '\u0409', 'ljcy': '\u0459', 'llarr': '\u21C7', 'll': '\u226A', 'Ll': '\u22D8', 'llcorner': '\u231E', 'Lleftarrow': '\u21DA', 'llhard': '\u296B', 'lltri': '\u25FA', 'Lmidot': '\u013F', 'lmidot': '\u0140', 'lmoustache': '\u23B0', 'lmoust': '\u23B0', 'lnap': '\u2A89', 'lnapprox': '\u2A89', 'lne': '\u2A87', 'lnE': '\u2268', 'lneq': '\u2A87', 'lneqq': '\u2268', 'lnsim': '\u22E6', 'loang': '\u27EC', 'loarr': '\u21FD', 'lobrk': '\u27E6', 'longleftarrow': '\u27F5', 'LongLeftArrow': '\u27F5', 'Longleftarrow': '\u27F8', 'longleftrightarrow': '\u27F7', 'LongLeftRightArrow': '\u27F7', 'Longleftrightarrow': '\u27FA', 'longmapsto': '\u27FC', 'longrightarrow': '\u27F6', 'LongRightArrow': '\u27F6', 'Longrightarrow': '\u27F9', 'looparrowleft': '\u21AB', 'looparrowright': '\u21AC', 'lopar': '\u2985', 'Lopf': '\uD835\uDD43', 'lopf': '\uD835\uDD5D', 'loplus': '\u2A2D', 'lotimes': '\u2A34', 'lowast': '\u2217', 'lowbar': '_', 'LowerLeftArrow': '\u2199', 'LowerRightArrow': '\u2198', 'loz': '\u25CA', 'lozenge': '\u25CA', 'lozf': '\u29EB', 'lpar': '(', 'lparlt': '\u2993', 'lrarr': '\u21C6', 'lrcorner': '\u231F', 'lrhar': '\u21CB', 'lrhard': '\u296D', 'lrm': '\u200E', 'lrtri': '\u22BF', 'lsaquo': '\u2039', 'lscr': '\uD835\uDCC1', 'Lscr': '\u2112', 'lsh': '\u21B0', 'Lsh': '\u21B0', 'lsim': '\u2272', 'lsime': '\u2A8D', 'lsimg': '\u2A8F', 'lsqb': '[', 'lsquo': '\u2018', 'lsquor': '\u201A', 'Lstrok': '\u0141', 'lstrok': '\u0142', 'ltcc': '\u2AA6', 'ltcir': '\u2A79', 'lt': '<', 'LT': '<', 'Lt': '\u226A', 'ltdot': '\u22D6', 'lthree': '\u22CB', 'ltimes': '\u22C9', 'ltlarr': '\u2976', 'ltquest': '\u2A7B', 'ltri': '\u25C3', 'ltrie': '\u22B4', 'ltrif': '\u25C2', 'ltrPar': '\u2996', 'lurdshar': '\u294A', 'luruhar': '\u2966', 'lvertneqq': '\u2268\uFE00', 'lvnE': '\u2268\uFE00', 'macr': '\xAF', 'male': '\u2642', 'malt': '\u2720', 'maltese': '\u2720', 'Map': '\u2905', 'map': '\u21A6', 'mapsto': '\u21A6', 'mapstodown': '\u21A7', 'mapstoleft': '\u21A4', 'mapstoup': '\u21A5', 'marker': '\u25AE', 'mcomma': '\u2A29', 'Mcy': '\u041C', 'mcy': '\u043C', 'mdash': '\u2014', 'mDDot': '\u223A', 'measuredangle': '\u2221', 'MediumSpace': '\u205F', 'Mellintrf': '\u2133', 'Mfr': '\uD835\uDD10', 'mfr': '\uD835\uDD2A', 'mho': '\u2127', 'micro': '\xB5', 'midast': '*', 'midcir': '\u2AF0', 'mid': '\u2223', 'middot': '\xB7', 'minusb': '\u229F', 'minus': '\u2212', 'minusd': '\u2238', 'minusdu': '\u2A2A', 'MinusPlus': '\u2213', 'mlcp': '\u2ADB', 'mldr': '\u2026', 'mnplus': '\u2213', 'models': '\u22A7', 'Mopf': '\uD835\uDD44', 'mopf': '\uD835\uDD5E', 'mp': '\u2213', 'mscr': '\uD835\uDCC2', 'Mscr': '\u2133', 'mstpos': '\u223E', 'Mu': '\u039C', 'mu': '\u03BC', 'multimap': '\u22B8', 'mumap': '\u22B8', 'nabla': '\u2207', 'Nacute': '\u0143', 'nacute': '\u0144', 'nang': '\u2220\u20D2', 'nap': '\u2249', 'napE': '\u2A70\u0338', 'napid': '\u224B\u0338', 'napos': '\u0149', 'napprox': '\u2249', 'natural': '\u266E', 'naturals': '\u2115', 'natur': '\u266E', 'nbsp': '\xA0', 'nbump': '\u224E\u0338', 'nbumpe': '\u224F\u0338', 'ncap': '\u2A43', 'Ncaron': '\u0147', 'ncaron': '\u0148', 'Ncedil': '\u0145', 'ncedil': '\u0146', 'ncong': '\u2247', 'ncongdot': '\u2A6D\u0338', 'ncup': '\u2A42', 'Ncy': '\u041D', 'ncy': '\u043D', 'ndash': '\u2013', 'nearhk': '\u2924', 'nearr': '\u2197', 'neArr': '\u21D7', 'nearrow': '\u2197', 'ne': '\u2260', 'nedot': '\u2250\u0338', 'NegativeMediumSpace': '\u200B', 'NegativeThickSpace': '\u200B', 'NegativeThinSpace': '\u200B', 'NegativeVeryThinSpace': '\u200B', 'nequiv': '\u2262', 'nesear': '\u2928', 'nesim': '\u2242\u0338', 'NestedGreaterGreater': '\u226B', 'NestedLessLess': '\u226A', 'NewLine': '\n', 'nexist': '\u2204', 'nexists': '\u2204', 'Nfr': '\uD835\uDD11', 'nfr': '\uD835\uDD2B', 'ngE': '\u2267\u0338', 'nge': '\u2271', 'ngeq': '\u2271', 'ngeqq': '\u2267\u0338', 'ngeqslant': '\u2A7E\u0338', 'nges': '\u2A7E\u0338', 'nGg': '\u22D9\u0338', 'ngsim': '\u2275', 'nGt': '\u226B\u20D2', 'ngt': '\u226F', 'ngtr': '\u226F', 'nGtv': '\u226B\u0338', 'nharr': '\u21AE', 'nhArr': '\u21CE', 'nhpar': '\u2AF2', 'ni': '\u220B', 'nis': '\u22FC', 'nisd': '\u22FA', 'niv': '\u220B', 'NJcy': '\u040A', 'njcy': '\u045A', 'nlarr': '\u219A', 'nlArr': '\u21CD', 'nldr': '\u2025', 'nlE': '\u2266\u0338', 'nle': '\u2270', 'nleftarrow': '\u219A', 'nLeftarrow': '\u21CD', 'nleftrightarrow': '\u21AE', 'nLeftrightarrow': '\u21CE', 'nleq': '\u2270', 'nleqq': '\u2266\u0338', 'nleqslant': '\u2A7D\u0338', 'nles': '\u2A7D\u0338', 'nless': '\u226E', 'nLl': '\u22D8\u0338', 'nlsim': '\u2274', 'nLt': '\u226A\u20D2', 'nlt': '\u226E', 'nltri': '\u22EA', 'nltrie': '\u22EC', 'nLtv': '\u226A\u0338', 'nmid': '\u2224', 'NoBreak': '\u2060', 'NonBreakingSpace': '\xA0', 'nopf': '\uD835\uDD5F', 'Nopf': '\u2115', 'Not': '\u2AEC', 'not': '\xAC', 'NotCongruent': '\u2262', 'NotCupCap': '\u226D', 'NotDoubleVerticalBar': '\u2226', 'NotElement': '\u2209', 'NotEqual': '\u2260', 'NotEqualTilde': '\u2242\u0338', 'NotExists': '\u2204', 'NotGreater': '\u226F', 'NotGreaterEqual': '\u2271', 'NotGreaterFullEqual': '\u2267\u0338', 'NotGreaterGreater': '\u226B\u0338', 'NotGreaterLess': '\u2279', 'NotGreaterSlantEqual': '\u2A7E\u0338', 'NotGreaterTilde': '\u2275', 'NotHumpDownHump': '\u224E\u0338', 'NotHumpEqual': '\u224F\u0338', 'notin': '\u2209', 'notindot': '\u22F5\u0338', 'notinE': '\u22F9\u0338', 'notinva': '\u2209', 'notinvb': '\u22F7', 'notinvc': '\u22F6', 'NotLeftTriangleBar': '\u29CF\u0338', 'NotLeftTriangle': '\u22EA', 'NotLeftTriangleEqual': '\u22EC', 'NotLess': '\u226E', 'NotLessEqual': '\u2270', 'NotLessGreater': '\u2278', 'NotLessLess': '\u226A\u0338', 'NotLessSlantEqual': '\u2A7D\u0338', 'NotLessTilde': '\u2274', 'NotNestedGreaterGreater': '\u2AA2\u0338', 'NotNestedLessLess': '\u2AA1\u0338', 'notni': '\u220C', 'notniva': '\u220C', 'notnivb': '\u22FE', 'notnivc': '\u22FD', 'NotPrecedes': '\u2280', 'NotPrecedesEqual': '\u2AAF\u0338', 'NotPrecedesSlantEqual': '\u22E0', 'NotReverseElement': '\u220C', 'NotRightTriangleBar': '\u29D0\u0338', 'NotRightTriangle': '\u22EB', 'NotRightTriangleEqual': '\u22ED', 'NotSquareSubset': '\u228F\u0338', 'NotSquareSubsetEqual': '\u22E2', 'NotSquareSuperset': '\u2290\u0338', 'NotSquareSupersetEqual': '\u22E3', 'NotSubset': '\u2282\u20D2', 'NotSubsetEqual': '\u2288', 'NotSucceeds': '\u2281', 'NotSucceedsEqual': '\u2AB0\u0338', 'NotSucceedsSlantEqual': '\u22E1', 'NotSucceedsTilde': '\u227F\u0338', 'NotSuperset': '\u2283\u20D2', 'NotSupersetEqual': '\u2289', 'NotTilde': '\u2241', 'NotTildeEqual': '\u2244', 'NotTildeFullEqual': '\u2247', 'NotTildeTilde': '\u2249', 'NotVerticalBar': '\u2224', 'nparallel': '\u2226', 'npar': '\u2226', 'nparsl': '\u2AFD\u20E5', 'npart': '\u2202\u0338', 'npolint': '\u2A14', 'npr': '\u2280', 'nprcue': '\u22E0', 'nprec': '\u2280', 'npreceq': '\u2AAF\u0338', 'npre': '\u2AAF\u0338', 'nrarrc': '\u2933\u0338', 'nrarr': '\u219B', 'nrArr': '\u21CF', 'nrarrw': '\u219D\u0338', 'nrightarrow': '\u219B', 'nRightarrow': '\u21CF', 'nrtri': '\u22EB', 'nrtrie': '\u22ED', 'nsc': '\u2281', 'nsccue': '\u22E1', 'nsce': '\u2AB0\u0338', 'Nscr': '\uD835\uDCA9', 'nscr': '\uD835\uDCC3', 'nshortmid': '\u2224', 'nshortparallel': '\u2226', 'nsim': '\u2241', 'nsime': '\u2244', 'nsimeq': '\u2244', 'nsmid': '\u2224', 'nspar': '\u2226', 'nsqsube': '\u22E2', 'nsqsupe': '\u22E3', 'nsub': '\u2284', 'nsubE': '\u2AC5\u0338', 'nsube': '\u2288', 'nsubset': '\u2282\u20D2', 'nsubseteq': '\u2288', 'nsubseteqq': '\u2AC5\u0338', 'nsucc': '\u2281', 'nsucceq': '\u2AB0\u0338', 'nsup': '\u2285', 'nsupE': '\u2AC6\u0338', 'nsupe': '\u2289', 'nsupset': '\u2283\u20D2', 'nsupseteq': '\u2289', 'nsupseteqq': '\u2AC6\u0338', 'ntgl': '\u2279', 'Ntilde': '\xD1', 'ntilde': '\xF1', 'ntlg': '\u2278', 'ntriangleleft': '\u22EA', 'ntrianglelefteq': '\u22EC', 'ntriangleright': '\u22EB', 'ntrianglerighteq': '\u22ED', 'Nu': '\u039D', 'nu': '\u03BD', 'num': '#', 'numero': '\u2116', 'numsp': '\u2007', 'nvap': '\u224D\u20D2', 'nvdash': '\u22AC', 'nvDash': '\u22AD', 'nVdash': '\u22AE', 'nVDash': '\u22AF', 'nvge': '\u2265\u20D2', 'nvgt': '>\u20D2', 'nvHarr': '\u2904', 'nvinfin': '\u29DE', 'nvlArr': '\u2902', 'nvle': '\u2264\u20D2', 'nvlt': '<\u20D2', 'nvltrie': '\u22B4\u20D2', 'nvrArr': '\u2903', 'nvrtrie': '\u22B5\u20D2', 'nvsim': '\u223C\u20D2', 'nwarhk': '\u2923', 'nwarr': '\u2196', 'nwArr': '\u21D6', 'nwarrow': '\u2196', 'nwnear': '\u2927', 'Oacute': '\xD3', 'oacute': '\xF3', 'oast': '\u229B', 'Ocirc': '\xD4', 'ocirc': '\xF4', 'ocir': '\u229A', 'Ocy': '\u041E', 'ocy': '\u043E', 'odash': '\u229D', 'Odblac': '\u0150', 'odblac': '\u0151', 'odiv': '\u2A38', 'odot': '\u2299', 'odsold': '\u29BC', 'OElig': '\u0152', 'oelig': '\u0153', 'ofcir': '\u29BF', 'Ofr': '\uD835\uDD12', 'ofr': '\uD835\uDD2C', 'ogon': '\u02DB', 'Ograve': '\xD2', 'ograve': '\xF2', 'ogt': '\u29C1', 'ohbar': '\u29B5', 'ohm': '\u03A9', 'oint': '\u222E', 'olarr': '\u21BA', 'olcir': '\u29BE', 'olcross': '\u29BB', 'oline': '\u203E', 'olt': '\u29C0', 'Omacr': '\u014C', 'omacr': '\u014D', 'Omega': '\u03A9', 'omega': '\u03C9', 'Omicron': '\u039F', 'omicron': '\u03BF', 'omid': '\u29B6', 'ominus': '\u2296', 'Oopf': '\uD835\uDD46', 'oopf': '\uD835\uDD60', 'opar': '\u29B7', 'OpenCurlyDoubleQuote': '\u201C', 'OpenCurlyQuote': '\u2018', 'operp': '\u29B9', 'oplus': '\u2295', 'orarr': '\u21BB', 'Or': '\u2A54', 'or': '\u2228', 'ord': '\u2A5D', 'order': '\u2134', 'orderof': '\u2134', 'ordf': '\xAA', 'ordm': '\xBA', 'origof': '\u22B6', 'oror': '\u2A56', 'orslope': '\u2A57', 'orv': '\u2A5B', 'oS': '\u24C8', 'Oscr': '\uD835\uDCAA', 'oscr': '\u2134', 'Oslash': '\xD8', 'oslash': '\xF8', 'osol': '\u2298', 'Otilde': '\xD5', 'otilde': '\xF5', 'otimesas': '\u2A36', 'Otimes': '\u2A37', 'otimes': '\u2297', 'Ouml': '\xD6', 'ouml': '\xF6', 'ovbar': '\u233D', 'OverBar': '\u203E', 'OverBrace': '\u23DE', 'OverBracket': '\u23B4', 'OverParenthesis': '\u23DC', 'para': '\xB6', 'parallel': '\u2225', 'par': '\u2225', 'parsim': '\u2AF3', 'parsl': '\u2AFD', 'part': '\u2202', 'PartialD': '\u2202', 'Pcy': '\u041F', 'pcy': '\u043F', 'percnt': '%', 'period': '.', 'permil': '\u2030', 'perp': '\u22A5', 'pertenk': '\u2031', 'Pfr': '\uD835\uDD13', 'pfr': '\uD835\uDD2D', 'Phi': '\u03A6', 'phi': '\u03C6', 'phiv': '\u03D5', 'phmmat': '\u2133', 'phone': '\u260E', 'Pi': '\u03A0', 'pi': '\u03C0', 'pitchfork': '\u22D4', 'piv': '\u03D6', 'planck': '\u210F', 'planckh': '\u210E', 'plankv': '\u210F', 'plusacir': '\u2A23', 'plusb': '\u229E', 'pluscir': '\u2A22', 'plus': '+', 'plusdo': '\u2214', 'plusdu': '\u2A25', 'pluse': '\u2A72', 'PlusMinus': '\xB1', 'plusmn': '\xB1', 'plussim': '\u2A26', 'plustwo': '\u2A27', 'pm': '\xB1', 'Poincareplane': '\u210C', 'pointint': '\u2A15', 'popf': '\uD835\uDD61', 'Popf': '\u2119', 'pound': '\xA3', 'prap': '\u2AB7', 'Pr': '\u2ABB', 'pr': '\u227A', 'prcue': '\u227C', 'precapprox': '\u2AB7', 'prec': '\u227A', 'preccurlyeq': '\u227C', 'Precedes': '\u227A', 'PrecedesEqual': '\u2AAF', 'PrecedesSlantEqual': '\u227C', 'PrecedesTilde': '\u227E', 'preceq': '\u2AAF', 'precnapprox': '\u2AB9', 'precneqq': '\u2AB5', 'precnsim': '\u22E8', 'pre': '\u2AAF', 'prE': '\u2AB3', 'precsim': '\u227E', 'prime': '\u2032', 'Prime': '\u2033', 'primes': '\u2119', 'prnap': '\u2AB9', 'prnE': '\u2AB5', 'prnsim': '\u22E8', 'prod': '\u220F', 'Product': '\u220F', 'profalar': '\u232E', 'profline': '\u2312', 'profsurf': '\u2313', 'prop': '\u221D', 'Proportional': '\u221D', 'Proportion': '\u2237', 'propto': '\u221D', 'prsim': '\u227E', 'prurel': '\u22B0', 'Pscr': '\uD835\uDCAB', 'pscr': '\uD835\uDCC5', 'Psi': '\u03A8', 'psi': '\u03C8', 'puncsp': '\u2008', 'Qfr': '\uD835\uDD14', 'qfr': '\uD835\uDD2E', 'qint': '\u2A0C', 'qopf': '\uD835\uDD62', 'Qopf': '\u211A', 'qprime': '\u2057', 'Qscr': '\uD835\uDCAC', 'qscr': '\uD835\uDCC6', 'quaternions': '\u210D', 'quatint': '\u2A16', 'quest': '?', 'questeq': '\u225F', 'quot': '"', 'QUOT': '"', 'rAarr': '\u21DB', 'race': '\u223D\u0331', 'Racute': '\u0154', 'racute': '\u0155', 'radic': '\u221A', 'raemptyv': '\u29B3', 'rang': '\u27E9', 'Rang': '\u27EB', 'rangd': '\u2992', 'range': '\u29A5', 'rangle': '\u27E9', 'raquo': '\xBB', 'rarrap': '\u2975', 'rarrb': '\u21E5', 'rarrbfs': '\u2920', 'rarrc': '\u2933', 'rarr': '\u2192', 'Rarr': '\u21A0', 'rArr': '\u21D2', 'rarrfs': '\u291E', 'rarrhk': '\u21AA', 'rarrlp': '\u21AC', 'rarrpl': '\u2945', 'rarrsim': '\u2974', 'Rarrtl': '\u2916', 'rarrtl': '\u21A3', 'rarrw': '\u219D', 'ratail': '\u291A', 'rAtail': '\u291C', 'ratio': '\u2236', 'rationals': '\u211A', 'rbarr': '\u290D', 'rBarr': '\u290F', 'RBarr': '\u2910', 'rbbrk': '\u2773', 'rbrace': '}', 'rbrack': ']', 'rbrke': '\u298C', 'rbrksld': '\u298E', 'rbrkslu': '\u2990', 'Rcaron': '\u0158', 'rcaron': '\u0159', 'Rcedil': '\u0156', 'rcedil': '\u0157', 'rceil': '\u2309', 'rcub': '}', 'Rcy': '\u0420', 'rcy': '\u0440', 'rdca': '\u2937', 'rdldhar': '\u2969', 'rdquo': '\u201D', 'rdquor': '\u201D', 'rdsh': '\u21B3', 'real': '\u211C', 'realine': '\u211B', 'realpart': '\u211C', 'reals': '\u211D', 'Re': '\u211C', 'rect': '\u25AD', 'reg': '\xAE', 'REG': '\xAE', 'ReverseElement': '\u220B', 'ReverseEquilibrium': '\u21CB', 'ReverseUpEquilibrium': '\u296F', 'rfisht': '\u297D', 'rfloor': '\u230B', 'rfr': '\uD835\uDD2F', 'Rfr': '\u211C', 'rHar': '\u2964', 'rhard': '\u21C1', 'rharu': '\u21C0', 'rharul': '\u296C', 'Rho': '\u03A1', 'rho': '\u03C1', 'rhov': '\u03F1', 'RightAngleBracket': '\u27E9', 'RightArrowBar': '\u21E5', 'rightarrow': '\u2192', 'RightArrow': '\u2192', 'Rightarrow': '\u21D2', 'RightArrowLeftArrow': '\u21C4', 'rightarrowtail': '\u21A3', 'RightCeiling': '\u2309', 'RightDoubleBracket': '\u27E7', 'RightDownTeeVector': '\u295D', 'RightDownVectorBar': '\u2955', 'RightDownVector': '\u21C2', 'RightFloor': '\u230B', 'rightharpoondown': '\u21C1', 'rightharpoonup': '\u21C0', 'rightleftarrows': '\u21C4', 'rightleftharpoons': '\u21CC', 'rightrightarrows': '\u21C9', 'rightsquigarrow': '\u219D', 'RightTeeArrow': '\u21A6', 'RightTee': '\u22A2', 'RightTeeVector': '\u295B', 'rightthreetimes': '\u22CC', 'RightTriangleBar': '\u29D0', 'RightTriangle': '\u22B3', 'RightTriangleEqual': '\u22B5', 'RightUpDownVector': '\u294F', 'RightUpTeeVector': '\u295C', 'RightUpVectorBar': '\u2954', 'RightUpVector': '\u21BE', 'RightVectorBar': '\u2953', 'RightVector': '\u21C0', 'ring': '\u02DA', 'risingdotseq': '\u2253', 'rlarr': '\u21C4', 'rlhar': '\u21CC', 'rlm': '\u200F', 'rmoustache': '\u23B1', 'rmoust': '\u23B1', 'rnmid': '\u2AEE', 'roang': '\u27ED', 'roarr': '\u21FE', 'robrk': '\u27E7', 'ropar': '\u2986', 'ropf': '\uD835\uDD63', 'Ropf': '\u211D', 'roplus': '\u2A2E', 'rotimes': '\u2A35', 'RoundImplies': '\u2970', 'rpar': ')', 'rpargt': '\u2994', 'rppolint': '\u2A12', 'rrarr': '\u21C9', 'Rrightarrow': '\u21DB', 'rsaquo': '\u203A', 'rscr': '\uD835\uDCC7', 'Rscr': '\u211B', 'rsh': '\u21B1', 'Rsh': '\u21B1', 'rsqb': ']', 'rsquo': '\u2019', 'rsquor': '\u2019', 'rthree': '\u22CC', 'rtimes': '\u22CA', 'rtri': '\u25B9', 'rtrie': '\u22B5', 'rtrif': '\u25B8', 'rtriltri': '\u29CE', 'RuleDelayed': '\u29F4', 'ruluhar': '\u2968', 'rx': '\u211E', 'Sacute': '\u015A', 'sacute': '\u015B', 'sbquo': '\u201A', 'scap': '\u2AB8', 'Scaron': '\u0160', 'scaron': '\u0161', 'Sc': '\u2ABC', 'sc': '\u227B', 'sccue': '\u227D', 'sce': '\u2AB0', 'scE': '\u2AB4', 'Scedil': '\u015E', 'scedil': '\u015F', 'Scirc': '\u015C', 'scirc': '\u015D', 'scnap': '\u2ABA', 'scnE': '\u2AB6', 'scnsim': '\u22E9', 'scpolint': '\u2A13', 'scsim': '\u227F', 'Scy': '\u0421', 'scy': '\u0441', 'sdotb': '\u22A1', 'sdot': '\u22C5', 'sdote': '\u2A66', 'searhk': '\u2925', 'searr': '\u2198', 'seArr': '\u21D8', 'searrow': '\u2198', 'sect': '\xA7', 'semi': ';', 'seswar': '\u2929', 'setminus': '\u2216', 'setmn': '\u2216', 'sext': '\u2736', 'Sfr': '\uD835\uDD16', 'sfr': '\uD835\uDD30', 'sfrown': '\u2322', 'sharp': '\u266F', 'SHCHcy': '\u0429', 'shchcy': '\u0449', 'SHcy': '\u0428', 'shcy': '\u0448', 'ShortDownArrow': '\u2193', 'ShortLeftArrow': '\u2190', 'shortmid': '\u2223', 'shortparallel': '\u2225', 'ShortRightArrow': '\u2192', 'ShortUpArrow': '\u2191', 'shy': '\xAD', 'Sigma': '\u03A3', 'sigma': '\u03C3', 'sigmaf': '\u03C2', 'sigmav': '\u03C2', 'sim': '\u223C', 'simdot': '\u2A6A', 'sime': '\u2243', 'simeq': '\u2243', 'simg': '\u2A9E', 'simgE': '\u2AA0', 'siml': '\u2A9D', 'simlE': '\u2A9F', 'simne': '\u2246', 'simplus': '\u2A24', 'simrarr': '\u2972', 'slarr': '\u2190', 'SmallCircle': '\u2218', 'smallsetminus': '\u2216', 'smashp': '\u2A33', 'smeparsl': '\u29E4', 'smid': '\u2223', 'smile': '\u2323', 'smt': '\u2AAA', 'smte': '\u2AAC', 'smtes': '\u2AAC\uFE00', 'SOFTcy': '\u042C', 'softcy': '\u044C', 'solbar': '\u233F', 'solb': '\u29C4', 'sol': '/', 'Sopf': '\uD835\uDD4A', 'sopf': '\uD835\uDD64', 'spades': '\u2660', 'spadesuit': '\u2660', 'spar': '\u2225', 'sqcap': '\u2293', 'sqcaps': '\u2293\uFE00', 'sqcup': '\u2294', 'sqcups': '\u2294\uFE00', 'Sqrt': '\u221A', 'sqsub': '\u228F', 'sqsube': '\u2291', 'sqsubset': '\u228F', 'sqsubseteq': '\u2291', 'sqsup': '\u2290', 'sqsupe': '\u2292', 'sqsupset': '\u2290', 'sqsupseteq': '\u2292', 'square': '\u25A1', 'Square': '\u25A1', 'SquareIntersection': '\u2293', 'SquareSubset': '\u228F', 'SquareSubsetEqual': '\u2291', 'SquareSuperset': '\u2290', 'SquareSupersetEqual': '\u2292', 'SquareUnion': '\u2294', 'squarf': '\u25AA', 'squ': '\u25A1', 'squf': '\u25AA', 'srarr': '\u2192', 'Sscr': '\uD835\uDCAE', 'sscr': '\uD835\uDCC8', 'ssetmn': '\u2216', 'ssmile': '\u2323', 'sstarf': '\u22C6', 'Star': '\u22C6', 'star': '\u2606', 'starf': '\u2605', 'straightepsilon': '\u03F5', 'straightphi': '\u03D5', 'strns': '\xAF', 'sub': '\u2282', 'Sub': '\u22D0', 'subdot': '\u2ABD', 'subE': '\u2AC5', 'sube': '\u2286', 'subedot': '\u2AC3', 'submult': '\u2AC1', 'subnE': '\u2ACB', 'subne': '\u228A', 'subplus': '\u2ABF', 'subrarr': '\u2979', 'subset': '\u2282', 'Subset': '\u22D0', 'subseteq': '\u2286', 'subseteqq': '\u2AC5', 'SubsetEqual': '\u2286', 'subsetneq': '\u228A', 'subsetneqq': '\u2ACB', 'subsim': '\u2AC7', 'subsub': '\u2AD5', 'subsup': '\u2AD3', 'succapprox': '\u2AB8', 'succ': '\u227B', 'succcurlyeq': '\u227D', 'Succeeds': '\u227B', 'SucceedsEqual': '\u2AB0', 'SucceedsSlantEqual': '\u227D', 'SucceedsTilde': '\u227F', 'succeq': '\u2AB0', 'succnapprox': '\u2ABA', 'succneqq': '\u2AB6', 'succnsim': '\u22E9', 'succsim': '\u227F', 'SuchThat': '\u220B', 'sum': '\u2211', 'Sum': '\u2211', 'sung': '\u266A', 'sup1': '\xB9', 'sup2': '\xB2', 'sup3': '\xB3', 'sup': '\u2283', 'Sup': '\u22D1', 'supdot': '\u2ABE', 'supdsub': '\u2AD8', 'supE': '\u2AC6', 'supe': '\u2287', 'supedot': '\u2AC4', 'Superset': '\u2283', 'SupersetEqual': '\u2287', 'suphsol': '\u27C9', 'suphsub': '\u2AD7', 'suplarr': '\u297B', 'supmult': '\u2AC2', 'supnE': '\u2ACC', 'supne': '\u228B', 'supplus': '\u2AC0', 'supset': '\u2283', 'Supset': '\u22D1', 'supseteq': '\u2287', 'supseteqq': '\u2AC6', 'supsetneq': '\u228B', 'supsetneqq': '\u2ACC', 'supsim': '\u2AC8', 'supsub': '\u2AD4', 'supsup': '\u2AD6', 'swarhk': '\u2926', 'swarr': '\u2199', 'swArr': '\u21D9', 'swarrow': '\u2199', 'swnwar': '\u292A', 'szlig': '\xDF', 'Tab': '\t', 'target': '\u2316', 'Tau': '\u03A4', 'tau': '\u03C4', 'tbrk': '\u23B4', 'Tcaron': '\u0164', 'tcaron': '\u0165', 'Tcedil': '\u0162', 'tcedil': '\u0163', 'Tcy': '\u0422', 'tcy': '\u0442', 'tdot': '\u20DB', 'telrec': '\u2315', 'Tfr': '\uD835\uDD17', 'tfr': '\uD835\uDD31', 'there4': '\u2234', 'therefore': '\u2234', 'Therefore': '\u2234', 'Theta': '\u0398', 'theta': '\u03B8', 'thetasym': '\u03D1', 'thetav': '\u03D1', 'thickapprox': '\u2248', 'thicksim': '\u223C', 'ThickSpace': '\u205F\u200A', 'ThinSpace': '\u2009', 'thinsp': '\u2009', 'thkap': '\u2248', 'thksim': '\u223C', 'THORN': '\xDE', 'thorn': '\xFE', 'tilde': '\u02DC', 'Tilde': '\u223C', 'TildeEqual': '\u2243', 'TildeFullEqual': '\u2245', 'TildeTilde': '\u2248', 'timesbar': '\u2A31', 'timesb': '\u22A0', 'times': '\xD7', 'timesd': '\u2A30', 'tint': '\u222D', 'toea': '\u2928', 'topbot': '\u2336', 'topcir': '\u2AF1', 'top': '\u22A4', 'Topf': '\uD835\uDD4B', 'topf': '\uD835\uDD65', 'topfork': '\u2ADA', 'tosa': '\u2929', 'tprime': '\u2034', 'trade': '\u2122', 'TRADE': '\u2122', 'triangle': '\u25B5', 'triangledown': '\u25BF', 'triangleleft': '\u25C3', 'trianglelefteq': '\u22B4', 'triangleq': '\u225C', 'triangleright': '\u25B9', 'trianglerighteq': '\u22B5', 'tridot': '\u25EC', 'trie': '\u225C', 'triminus': '\u2A3A', 'TripleDot': '\u20DB', 'triplus': '\u2A39', 'trisb': '\u29CD', 'tritime': '\u2A3B', 'trpezium': '\u23E2', 'Tscr': '\uD835\uDCAF', 'tscr': '\uD835\uDCC9', 'TScy': '\u0426', 'tscy': '\u0446', 'TSHcy': '\u040B', 'tshcy': '\u045B', 'Tstrok': '\u0166', 'tstrok': '\u0167', 'twixt': '\u226C', 'twoheadleftarrow': '\u219E', 'twoheadrightarrow': '\u21A0', 'Uacute': '\xDA', 'uacute': '\xFA', 'uarr': '\u2191', 'Uarr': '\u219F', 'uArr': '\u21D1', 'Uarrocir': '\u2949', 'Ubrcy': '\u040E', 'ubrcy': '\u045E', 'Ubreve': '\u016C', 'ubreve': '\u016D', 'Ucirc': '\xDB', 'ucirc': '\xFB', 'Ucy': '\u0423', 'ucy': '\u0443', 'udarr': '\u21C5', 'Udblac': '\u0170', 'udblac': '\u0171', 'udhar': '\u296E', 'ufisht': '\u297E', 'Ufr': '\uD835\uDD18', 'ufr': '\uD835\uDD32', 'Ugrave': '\xD9', 'ugrave': '\xF9', 'uHar': '\u2963', 'uharl': '\u21BF', 'uharr': '\u21BE', 'uhblk': '\u2580', 'ulcorn': '\u231C', 'ulcorner': '\u231C', 'ulcrop': '\u230F', 'ultri': '\u25F8', 'Umacr': '\u016A', 'umacr': '\u016B', 'uml': '\xA8', 'UnderBar': '_', 'UnderBrace': '\u23DF', 'UnderBracket': '\u23B5', 'UnderParenthesis': '\u23DD', 'Union': '\u22C3', 'UnionPlus': '\u228E', 'Uogon': '\u0172', 'uogon': '\u0173', 'Uopf': '\uD835\uDD4C', 'uopf': '\uD835\uDD66', 'UpArrowBar': '\u2912', 'uparrow': '\u2191', 'UpArrow': '\u2191', 'Uparrow': '\u21D1', 'UpArrowDownArrow': '\u21C5', 'updownarrow': '\u2195', 'UpDownArrow': '\u2195', 'Updownarrow': '\u21D5', 'UpEquilibrium': '\u296E', 'upharpoonleft': '\u21BF', 'upharpoonright': '\u21BE', 'uplus': '\u228E', 'UpperLeftArrow': '\u2196', 'UpperRightArrow': '\u2197', 'upsi': '\u03C5', 'Upsi': '\u03D2', 'upsih': '\u03D2', 'Upsilon': '\u03A5', 'upsilon': '\u03C5', 'UpTeeArrow': '\u21A5', 'UpTee': '\u22A5', 'upuparrows': '\u21C8', 'urcorn': '\u231D', 'urcorner': '\u231D', 'urcrop': '\u230E', 'Uring': '\u016E', 'uring': '\u016F', 'urtri': '\u25F9', 'Uscr': '\uD835\uDCB0', 'uscr': '\uD835\uDCCA', 'utdot': '\u22F0', 'Utilde': '\u0168', 'utilde': '\u0169', 'utri': '\u25B5', 'utrif': '\u25B4', 'uuarr': '\u21C8', 'Uuml': '\xDC', 'uuml': '\xFC', 'uwangle': '\u29A7', 'vangrt': '\u299C', 'varepsilon': '\u03F5', 'varkappa': '\u03F0', 'varnothing': '\u2205', 'varphi': '\u03D5', 'varpi': '\u03D6', 'varpropto': '\u221D', 'varr': '\u2195', 'vArr': '\u21D5', 'varrho': '\u03F1', 'varsigma': '\u03C2', 'varsubsetneq': '\u228A\uFE00', 'varsubsetneqq': '\u2ACB\uFE00', 'varsupsetneq': '\u228B\uFE00', 'varsupsetneqq': '\u2ACC\uFE00', 'vartheta': '\u03D1', 'vartriangleleft': '\u22B2', 'vartriangleright': '\u22B3', 'vBar': '\u2AE8', 'Vbar': '\u2AEB', 'vBarv': '\u2AE9', 'Vcy': '\u0412', 'vcy': '\u0432', 'vdash': '\u22A2', 'vDash': '\u22A8', 'Vdash': '\u22A9', 'VDash': '\u22AB', 'Vdashl': '\u2AE6', 'veebar': '\u22BB', 'vee': '\u2228', 'Vee': '\u22C1', 'veeeq': '\u225A', 'vellip': '\u22EE', 'verbar': '|', 'Verbar': '\u2016', 'vert': '|', 'Vert': '\u2016', 'VerticalBar': '\u2223', 'VerticalLine': '|', 'VerticalSeparator': '\u2758', 'VerticalTilde': '\u2240', 'VeryThinSpace': '\u200A', 'Vfr': '\uD835\uDD19', 'vfr': '\uD835\uDD33', 'vltri': '\u22B2', 'vnsub': '\u2282\u20D2', 'vnsup': '\u2283\u20D2', 'Vopf': '\uD835\uDD4D', 'vopf': '\uD835\uDD67', 'vprop': '\u221D', 'vrtri': '\u22B3', 'Vscr': '\uD835\uDCB1', 'vscr': '\uD835\uDCCB', 'vsubnE': '\u2ACB\uFE00', 'vsubne': '\u228A\uFE00', 'vsupnE': '\u2ACC\uFE00', 'vsupne': '\u228B\uFE00', 'Vvdash': '\u22AA', 'vzigzag': '\u299A', 'Wcirc': '\u0174', 'wcirc': '\u0175', 'wedbar': '\u2A5F', 'wedge': '\u2227', 'Wedge': '\u22C0', 'wedgeq': '\u2259', 'weierp': '\u2118', 'Wfr': '\uD835\uDD1A', 'wfr': '\uD835\uDD34', 'Wopf': '\uD835\uDD4E', 'wopf': '\uD835\uDD68', 'wp': '\u2118', 'wr': '\u2240', 'wreath': '\u2240', 'Wscr': '\uD835\uDCB2', 'wscr': '\uD835\uDCCC', 'xcap': '\u22C2', 'xcirc': '\u25EF', 'xcup': '\u22C3', 'xdtri': '\u25BD', 'Xfr': '\uD835\uDD1B', 'xfr': '\uD835\uDD35', 'xharr': '\u27F7', 'xhArr': '\u27FA', 'Xi': '\u039E', 'xi': '\u03BE', 'xlarr': '\u27F5', 'xlArr': '\u27F8', 'xmap': '\u27FC', 'xnis': '\u22FB', 'xodot': '\u2A00', 'Xopf': '\uD835\uDD4F', 'xopf': '\uD835\uDD69', 'xoplus': '\u2A01', 'xotime': '\u2A02', 'xrarr': '\u27F6', 'xrArr': '\u27F9', 'Xscr': '\uD835\uDCB3', 'xscr': '\uD835\uDCCD', 'xsqcup': '\u2A06', 'xuplus': '\u2A04', 'xutri': '\u25B3', 'xvee': '\u22C1', 'xwedge': '\u22C0', 'Yacute': '\xDD', 'yacute': '\xFD', 'YAcy': '\u042F', 'yacy': '\u044F', 'Ycirc': '\u0176', 'ycirc': '\u0177', 'Ycy': '\u042B', 'ycy': '\u044B', 'yen': '\xA5', 'Yfr': '\uD835\uDD1C', 'yfr': '\uD835\uDD36', 'YIcy': '\u0407', 'yicy': '\u0457', 'Yopf': '\uD835\uDD50', 'yopf': '\uD835\uDD6A', 'Yscr': '\uD835\uDCB4', 'yscr': '\uD835\uDCCE', 'YUcy': '\u042E', 'yucy': '\u044E', 'yuml': '\xFF', 'Yuml': '\u0178', 'Zacute': '\u0179', 'zacute': '\u017A', 'Zcaron': '\u017D', 'zcaron': '\u017E', 'Zcy': '\u0417', 'zcy': '\u0437', 'Zdot': '\u017B', 'zdot': '\u017C', 'zeetrf': '\u2128', 'ZeroWidthSpace': '\u200B', 'Zeta': '\u0396', 'zeta': '\u03B6', 'zfr': '\uD835\uDD37', 'Zfr': '\u2128', 'ZHcy': '\u0416', 'zhcy': '\u0436', 'zigrarr': '\u21DD', 'zopf': '\uD835\uDD6B', 'Zopf': '\u2124', 'Zscr': '\uD835\uDCB5', 'zscr': '\uD835\uDCCF', 'zwj': '\u200D', 'zwnj': '\u200C'} + var decodeMapLegacy = {'Aacute': '\xC1', 'aacute': '\xE1', 'Acirc': '\xC2', 'acirc': '\xE2', 'acute': '\xB4', 'AElig': '\xC6', 'aelig': '\xE6', 'Agrave': '\xC0', 'agrave': '\xE0', 'amp': '&', 'AMP': '&', 'Aring': '\xC5', 'aring': '\xE5', 'Atilde': '\xC3', 'atilde': '\xE3', 'Auml': '\xC4', 'auml': '\xE4', 'brvbar': '\xA6', 'Ccedil': '\xC7', 'ccedil': '\xE7', 'cedil': '\xB8', 'cent': '\xA2', 'copy': '\xA9', 'COPY': '\xA9', 'curren': '\xA4', 'deg': '\xB0', 'divide': '\xF7', 'Eacute': '\xC9', 'eacute': '\xE9', 'Ecirc': '\xCA', 'ecirc': '\xEA', 'Egrave': '\xC8', 'egrave': '\xE8', 'ETH': '\xD0', 'eth': '\xF0', 'Euml': '\xCB', 'euml': '\xEB', 'frac12': '\xBD', 'frac14': '\xBC', 'frac34': '\xBE', 'gt': '>', 'GT': '>', 'Iacute': '\xCD', 'iacute': '\xED', 'Icirc': '\xCE', 'icirc': '\xEE', 'iexcl': '\xA1', 'Igrave': '\xCC', 'igrave': '\xEC', 'iquest': '\xBF', 'Iuml': '\xCF', 'iuml': '\xEF', 'laquo': '\xAB', 'lt': '<', 'LT': '<', 'macr': '\xAF', 'micro': '\xB5', 'middot': '\xB7', 'nbsp': '\xA0', 'not': '\xAC', 'Ntilde': '\xD1', 'ntilde': '\xF1', 'Oacute': '\xD3', 'oacute': '\xF3', 'Ocirc': '\xD4', 'ocirc': '\xF4', 'Ograve': '\xD2', 'ograve': '\xF2', 'ordf': '\xAA', 'ordm': '\xBA', 'Oslash': '\xD8', 'oslash': '\xF8', 'Otilde': '\xD5', 'otilde': '\xF5', 'Ouml': '\xD6', 'ouml': '\xF6', 'para': '\xB6', 'plusmn': '\xB1', 'pound': '\xA3', 'quot': '"', 'QUOT': '"', 'raquo': '\xBB', 'reg': '\xAE', 'REG': '\xAE', 'sect': '\xA7', 'shy': '\xAD', 'sup1': '\xB9', 'sup2': '\xB2', 'sup3': '\xB3', 'szlig': '\xDF', 'THORN': '\xDE', 'thorn': '\xFE', 'times': '\xD7', 'Uacute': '\xDA', 'uacute': '\xFA', 'Ucirc': '\xDB', 'ucirc': '\xFB', 'Ugrave': '\xD9', 'ugrave': '\xF9', 'uml': '\xA8', 'Uuml': '\xDC', 'uuml': '\xFC', 'Yacute': '\xDD', 'yacute': '\xFD', 'yen': '\xA5', 'yuml': '\xFF'} + var decodeMapNumeric = {'0': '\uFFFD', '128': '\u20AC', '130': '\u201A', '131': '\u0192', '132': '\u201E', '133': '\u2026', '134': '\u2020', '135': '\u2021', '136': '\u02C6', '137': '\u2030', '138': '\u0160', '139': '\u2039', '140': '\u0152', '142': '\u017D', '145': '\u2018', '146': '\u2019', '147': '\u201C', '148': '\u201D', '149': '\u2022', '150': '\u2013', '151': '\u2014', '152': '\u02DC', '153': '\u2122', '154': '\u0161', '155': '\u203A', '156': '\u0153', '158': '\u017E', '159': '\u0178'} + var invalidReferenceCodePoints = [1, 2, 3, 4, 5, 6, 7, 8, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 64976, 64977, 64978, 64979, 64980, 64981, 64982, 64983, 64984, 64985, 64986, 64987, 64988, 64989, 64990, 64991, 64992, 64993, 64994, 64995, 64996, 64997, 64998, 64999, 65000, 65001, 65002, 65003, 65004, 65005, 65006, 65007, 65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214, 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894, 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574, 1048575, 1114110, 1114111] + + /* -------------------------------------------------------------------------- */ + + var stringFromCharCode = String.fromCharCode + + var object = {} + var hasOwnProperty = object.hasOwnProperty + var has = function (object, propertyName) { + return hasOwnProperty.call(object, propertyName) + } + + var contains = function (array, value) { + var index = -1 + var length = array.length + while (++index < length) { + if (array[index] == value) { + return true + } + } + return false + } + + var merge = function (options, defaults) { + if (!options) { + return defaults + } + var result = {} + var key + for (key in defaults) { // A `hasOwnProperty` check is not needed here, since only recognized // option names are used anyway. Any others are ignored. - result[key] = has(options, key) ? options[key] : defaults[key]; - } - return result; - }; + result[key] = has(options, key) ? options[key] : defaults[key] + } + return result + } // Modified version of `ucs2encode`; see http://mths.be/punycode. - var codePointToSymbol = function(codePoint, strict) { - var output = ''; - if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) { + var codePointToSymbol = function (codePoint, strict) { + var output = '' + if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) { // See issue #4: // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD // REPLACEMENT CHARACTER.” - if (strict) { - parseError('character reference outside the permissible Unicode range'); - } - return '\uFFFD'; - } - if (has(decodeMapNumeric, codePoint)) { - if (strict) { - parseError('disallowed character reference'); - } - return decodeMapNumeric[codePoint]; - } - if (strict && contains(invalidReferenceCodePoints, codePoint)) { - parseError('disallowed character reference'); - } - if (codePoint > 0xFFFF) { - codePoint -= 0x10000; - output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800); - codePoint = 0xDC00 | codePoint & 0x3FF; - } - output += stringFromCharCode(codePoint); - return output; - }; - - var hexEscape = function(symbol) { - return '&#x' + symbol.charCodeAt(0).toString(16).toUpperCase() + ';'; - }; - - var parseError = function(message) { - throw Error('Parse error: ' + message); - }; - - /*--------------------------------------------------------------------------*/ - - var encode = function(string, options) { - options = merge(options, encode.options); - var strict = options.strict; - if (strict && regexInvalidRawCodePoint.test(string)) { - parseError('forbidden code point'); - } - var encodeEverything = options.encodeEverything; - var useNamedReferences = options.useNamedReferences; - var allowUnsafeSymbols = options.allowUnsafeSymbols; - if (encodeEverything) { + if (strict) { + parseError('character reference outside the permissible Unicode range') + } + return '\uFFFD' + } + if (has(decodeMapNumeric, codePoint)) { + if (strict) { + parseError('disallowed character reference') + } + return decodeMapNumeric[codePoint] + } + if (strict && contains(invalidReferenceCodePoints, codePoint)) { + parseError('disallowed character reference') + } + if (codePoint > 0xFFFF) { + codePoint -= 0x10000 + output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + output += stringFromCharCode(codePoint) + return output + } + + var hexEscape = function (symbol) { + return '&#x' + symbol.charCodeAt(0).toString(16).toUpperCase() + ';' + } + + var parseError = function (message) { + throw Error('Parse error: ' + message) + } + + /* -------------------------------------------------------------------------- */ + + var encode = function (string, options) { + options = merge(options, encode.options) + var strict = options.strict + if (strict && regexInvalidRawCodePoint.test(string)) { + parseError('forbidden code point') + } + var encodeEverything = options.encodeEverything + var useNamedReferences = options.useNamedReferences + var allowUnsafeSymbols = options.allowUnsafeSymbols + if (encodeEverything) { // Encode ASCII symbols. - string = string.replace(regexAsciiWhitelist, function(symbol) { + string = string.replace(regexAsciiWhitelist, function (symbol) { // Use named references if requested & possible. - if (useNamedReferences && has(encodeMap, symbol)) { - return '&' + encodeMap[symbol] + ';'; - } - return hexEscape(symbol); - }); + if (useNamedReferences && has(encodeMap, symbol)) { + return '&' + encodeMap[symbol] + ';' + } + return hexEscape(symbol) + }) // Shorten a few escapes that represent two symbols, of which at least one // is within the ASCII range. - if (useNamedReferences) { - string = string + if (useNamedReferences) { + string = string .replace(/>\u20D2/g, '>⃒') .replace(/<\u20D2/g, '<⃒') - .replace(/fj/g, 'fj'); - } + .replace(/fj/g, 'fj') + } // Encode non-ASCII symbols. - if (useNamedReferences) { + if (useNamedReferences) { // Encode non-ASCII symbols that can be replaced with a named reference. - string = string.replace(regexEncodeNonAscii, function(string) { + string = string.replace(regexEncodeNonAscii, function (string) { // Note: there is no need to check `has(encodeMap, string)` here. - return '&' + encodeMap[string] + ';'; - }); - } + return '&' + encodeMap[string] + ';' + }) + } // Note: any remaining non-ASCII symbols are handled outside of the `if`. - } else if (useNamedReferences) { + } else if (useNamedReferences) { // Apply named character references. // Encode `<>"'&` using named character references. - if (!allowUnsafeSymbols) { - string = string.replace(regexEscape, function(string) { - return '&' + encodeMap[string] + ';'; // no need to check `has()` here - }); - } + if (!allowUnsafeSymbols) { + string = string.replace(regexEscape, function (string) { + return '&' + encodeMap[string] + ';' // no need to check `has()` here + }) + } // Shorten escapes that represent two symbols, of which at least one is // `<>"'&`. - string = string + string = string .replace(/>\u20D2/g, '>⃒') - .replace(/<\u20D2/g, '<⃒'); + .replace(/<\u20D2/g, '<⃒') // Encode non-ASCII symbols that can be replaced with a named reference. - string = string.replace(regexEncodeNonAscii, function(string) { + string = string.replace(regexEncodeNonAscii, function (string) { // Note: there is no need to check `has(encodeMap, string)` here. - return '&' + encodeMap[string] + ';'; - }); - } else if (!allowUnsafeSymbols) { + return '&' + encodeMap[string] + ';' + }) + } else if (!allowUnsafeSymbols) { // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled // using named character references. - string = string.replace(regexEscape, hexEscape); - } - return string + string = string.replace(regexEscape, hexEscape) + } + return string // Encode astral symbols. - .replace(regexAstralSymbols, function($0) { + .replace(regexAstralSymbols, function ($0) { // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - var high = $0.charCodeAt(0); - var low = $0.charCodeAt(1); - var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000; - return '&#x' + codePoint.toString(16).toUpperCase() + ';'; - }) + var high = $0.charCodeAt(0) + var low = $0.charCodeAt(1) + var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000 + return '&#x' + codePoint.toString(16).toUpperCase() + ';' +}) // Encode any remaining BMP symbols that are not printable ASCII symbols // using a hexadecimal escape. - .replace(regexBmpWhitelist, hexEscape); - }; + .replace(regexBmpWhitelist, hexEscape) + } // Expose default options (so they can be overridden globally). - encode.options = { - 'allowUnsafeSymbols': false, - 'encodeEverything': false, - 'strict': false, - 'useNamedReferences': false - }; - - var decode = function(html, options) { - options = merge(options, decode.options); - var strict = options.strict; - if (strict && regexInvalidEntity.test(html)) { - parseError('malformed character reference'); - } - return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) { - var codePoint; - var semicolon; - var hexDigits; - var reference; - var next; - if ($1) { + encode.options = { + 'allowUnsafeSymbols': false, + 'encodeEverything': false, + 'strict': false, + 'useNamedReferences': false + } + + var decode = function (html, options) { + options = merge(options, decode.options) + var strict = options.strict + if (strict && regexInvalidEntity.test(html)) { + parseError('malformed character reference') + } + return html.replace(regexDecode, function ($0, $1, $2, $3, $4, $5, $6, $7) { + var codePoint + var semicolon + var hexDigits + var reference + var next + if ($1) { // Decode decimal escapes, e.g. `𝌆`. - codePoint = $1; - semicolon = $2; - if (strict && !semicolon) { - parseError('character reference was not terminated by a semicolon'); - } - return codePointToSymbol(codePoint, strict); - } - if ($3) { + codePoint = $1 + semicolon = $2 + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon') + } + return codePointToSymbol(codePoint, strict) + } + if ($3) { // Decode hexadecimal escapes, e.g. `𝌆`. - hexDigits = $3; - semicolon = $4; - if (strict && !semicolon) { - parseError('character reference was not terminated by a semicolon'); - } - codePoint = parseInt(hexDigits, 16); - return codePointToSymbol(codePoint, strict); - } - if ($5) { + hexDigits = $3 + semicolon = $4 + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon') + } + codePoint = parseInt(hexDigits, 16) + return codePointToSymbol(codePoint, strict) + } + if ($5) { // Decode named character references with trailing `;`, e.g. `©`. - reference = $5; - if (has(decodeMap, reference)) { - return decodeMap[reference]; - } else { + reference = $5 + if (has(decodeMap, reference)) { + return decodeMap[reference] + } else { // Ambiguous ampersand; see http://mths.be/notes/ambiguous-ampersands. - if (strict) { - parseError( + if (strict) { + parseError( 'named character reference was not terminated by a semicolon' - ); - } - return $0; - } - } + ) + } + return $0 + } + } // If we’re still here, it’s a legacy reference for sure. No need for an // extra `if` check. // Decode named character references without trailing `;`, e.g. `&` // This is only a parse error if it gets converted to `&`, or if it is // followed by `=` in an attribute context. - reference = $6; - next = $7; - if (next && options.isAttributeValue) { - if (strict && next == '=') { - parseError('`&` did not start a character reference'); - } - return $0; - } else { - if (strict) { - parseError( + reference = $6 + next = $7 + if (next && options.isAttributeValue) { + if (strict && next == '=') { + parseError('`&` did not start a character reference') + } + return $0 + } else { + if (strict) { + parseError( 'named character reference was not terminated by a semicolon' - ); - } + ) + } // Note: there is no need to check `has(decodeMapLegacy, reference)`. - return decodeMapLegacy[reference] + (next || ''); - } - }); - }; + return decodeMapLegacy[reference] + (next || '') + } + }) + } // Expose default options (so they can be overridden globally). - decode.options = { - 'isAttributeValue': false, - 'strict': false - }; + decode.options = { + 'isAttributeValue': false, + 'strict': false + } - var escape = function(string) { - return string.replace(regexEscape, function($0) { + var escape = function (string) { + return string.replace(regexEscape, function ($0) { // Note: there is no need to check `has(escapeMap, $0)` here. - return escapeMap[$0]; - }); - }; + return escapeMap[$0] + }) + } - /*--------------------------------------------------------------------------*/ + /* -------------------------------------------------------------------------- */ - var he = { - 'version': '0.5.0', - 'encode': encode, - 'decode': decode, - 'escape': escape, - 'unescape': decode - }; + var he = { + 'version': '0.5.0', + 'encode': encode, + 'decode': decode, + 'escape': escape, + 'unescape': decode + } // Some AMD build optimizers, like r.js, check for specific condition patterns // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && + if ( + typeof define === 'function' && + typeof define.amd === 'object' && define.amd ) { - define(function() { - return he; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = he; - } else { // in Narwhal or RingoJS v0.7.0- - for (var key in he) { - has(he, key) && (freeExports[key] = he[key]); - } - } - } else { // in Rhino or a web browser - root.he = he; - } - -}(this)); - -}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],106:[function(_dereq_,module,exports){ -(function (global){ + define(function () { + return he + }) + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = he + } else { // in Narwhal or RingoJS v0.7.0- + for (var key in he) { + has(he, key) && (freeExports[key] = he[key]) + } + } + } else { // in Rhino or a web browser + root.he = he + } + }(this)) + }).call(this, typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}) + }, {}], + 106: [function (_dereq_, module, exports) { + (function (global) { /** * @license * lodash @@ -27806,274 +27952,273 @@ process.chdir = function (dir) { * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ -;(function() { - + ;(function () { /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; + var undefined /** Used as the semantic version number. */ - var VERSION = '4.13.1'; + var VERSION = '4.13.1' /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; + var LARGE_ARRAY_SIZE = 200 /** Used as the `TypeError` message for "Functions" methods. */ - var FUNC_ERROR_TEXT = 'Expected a function'; + var FUNC_ERROR_TEXT = 'Expected a function' /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; + var HASH_UNDEFINED = '__lodash_hash_undefined__' /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; + var PLACEHOLDER = '__lodash_placeholder__' /** Used to compose bitmasks for wrapper metadata. */ - var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_BOUND_FLAG = 4, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64, - ARY_FLAG = 128, - REARG_FLAG = 256, - FLIP_FLAG = 512; + var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64, + ARY_FLAG = 128, + REARG_FLAG = 256, + FLIP_FLAG = 512 /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; + var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2 /** Used as default options for `_.truncate`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...' /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 150, - HOT_SPAN = 16; + var HOT_COUNT = 150, + HOT_SPAN = 16 /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3; + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3 /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e+308, - NAN = 0 / 0; + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0 /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1 /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]', - weakSetTag = '[object WeakSet]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]' + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]' /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, - reUnescapedHtml = /[&<>"'`]/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, + reUnescapedHtml = /[&<>"'`]/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source) /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(\.|\[\])(?:\4|$))/g; + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(\.|\[\])(?:\4|$))/g /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source) /** Used to match leading and trailing whitespace. */ - var reTrim = /^\s+|\s+$/g, - reTrimStart = /^\s+/, - reTrimEnd = /\s+$/; + var reTrim = /^\s+|\s+$/g, + reTrimStart = /^\s+/, + reTrimEnd = /\s+$/ /** Used to match non-compound words composed of alphanumeric characters. */ - var reBasicWord = /[a-zA-Z0-9]+/g; + var reBasicWord = /[a-zA-Z0-9]+/g /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; + var reEscapeChar = /\\(\\)?/g /** * Used to match * [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; + var reFlags = /\w*$/ /** Used to detect hexadecimal string values. */ - var reHasHexPrefix = /^0x/i; + var reHasHexPrefix = /^0x/i /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; + var reIsBinary = /^0b[01]+$/i /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; + var reIsHostCtor = /^\[object .+?Constructor\]$/ /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; + var reIsOctal = /^0o[0-7]+$/i /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; + var reIsUint = /^(?:0|[1-9]\d*)$/ /** Used to match latin-1 supplementary letters (excluding mathematical operators). */ - var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; + var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; + var reNoMatch = /($^)/ /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + var reUnescapedString = /['\n\r\u2028\u2029\\]/g /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange /** Used to compose unicode capture groups. */ - var rsApos = "['\u2019]", - rsAstral = '[' + rsAstralRange + ']', - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d' /** Used to compose unicode regexes. */ - var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', - rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', + rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')' /** Used to match apostrophes. */ - var reApos = RegExp(rsApos, 'g'); + var reApos = RegExp(rsApos, 'g') /** * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). */ - var reComboMark = RegExp(rsCombo, 'g'); + var reComboMark = RegExp(rsCombo, 'g') /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g') /** Used to match complex or compound words. */ - var reComplexWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', - rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr, - rsUpper + '+' + rsOptUpperContr, - rsDigits, - rsEmoji - ].join('|'), 'g'); + var reComplexWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', + rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr, + rsUpper + '+' + rsOptUpperContr, + rsDigits, + rsEmoji + ].join('|'), 'g') /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']') /** Used to detect strings that need a more robust regexp to match words. */ - var reHasComplexWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + var reHasComplexWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/ /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', - 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', - 'Promise', 'Reflect', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', - 'Uint8Array', 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', - '_', 'isFinite', 'parseInt', 'setTimeout' - ]; + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'Reflect', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', + 'Uint8Array', 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'isFinite', 'parseInt', 'setTimeout' + ] /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; + var templateCounter = -1 /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + var typedArrayTags = {} + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[uint32Tag] = true + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = - typedArrayTags[weakMapTag] = false; + typedArrayTags[weakMapTag] = false /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = + var cloneableTags = {} + cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = @@ -28083,87 +28228,132 @@ process.chdir = function (dir) { cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[weakMapTag] = false; + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false /** Used to map latin-1 supplementary letters to basic latin letters. */ - var deburredLetters = { - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss' - }; + var deburredLetters = { + '\xc0': 'A', + '\xc1': 'A', + '\xc2': 'A', + '\xc3': 'A', + '\xc4': 'A', + '\xc5': 'A', + '\xe0': 'a', + '\xe1': 'a', + '\xe2': 'a', + '\xe3': 'a', + '\xe4': 'a', + '\xe5': 'a', + '\xc7': 'C', + '\xe7': 'c', + '\xd0': 'D', + '\xf0': 'd', + '\xc8': 'E', + '\xc9': 'E', + '\xca': 'E', + '\xcb': 'E', + '\xe8': 'e', + '\xe9': 'e', + '\xea': 'e', + '\xeb': 'e', + '\xcC': 'I', + '\xcd': 'I', + '\xce': 'I', + '\xcf': 'I', + '\xeC': 'i', + '\xed': 'i', + '\xee': 'i', + '\xef': 'i', + '\xd1': 'N', + '\xf1': 'n', + '\xd2': 'O', + '\xd3': 'O', + '\xd4': 'O', + '\xd5': 'O', + '\xd6': 'O', + '\xd8': 'O', + '\xf2': 'o', + '\xf3': 'o', + '\xf4': 'o', + '\xf5': 'o', + '\xf6': 'o', + '\xf8': 'o', + '\xd9': 'U', + '\xda': 'U', + '\xdb': 'U', + '\xdc': 'U', + '\xf9': 'u', + '\xfa': 'u', + '\xfb': 'u', + '\xfc': 'u', + '\xdd': 'Y', + '\xfd': 'y', + '\xff': 'y', + '\xc6': 'Ae', + '\xe6': 'ae', + '\xde': 'Th', + '\xfe': 'th', + '\xdf': 'ss' + } /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + } /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'", - '`': '`' - }; + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' + } /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + } /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt; + var freeParseFloat = parseFloat, + freeParseInt = parseInt /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports; + var freeExports = typeof exports === 'object' && exports /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module; + var freeModule = freeExports && typeof module === 'object' && module /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; + var moduleExports = freeModule && freeModule.exports === freeExports /** Detect free variable `global` from Node.js. */ - var freeGlobal = checkGlobal(typeof global == 'object' && global); + var freeGlobal = checkGlobal(typeof global === 'object' && global) /** Detect free variable `self`. */ - var freeSelf = checkGlobal(typeof self == 'object' && self); + var freeSelf = checkGlobal(typeof self === 'object' && self) /** Detect `this` as the global object. */ - var thisGlobal = checkGlobal(typeof this == 'object' && this); + var thisGlobal = checkGlobal(typeof this === 'object' && this) /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || thisGlobal || Function('return this')(); + var root = freeGlobal || freeSelf || thisGlobal || Function('return this')() - /*--------------------------------------------------------------------------*/ + /* -------------------------------------------------------------------------- */ /** * Adds the key-value `pair` to `map`. @@ -28173,11 +28363,11 @@ process.chdir = function (dir) { * @param {Array} pair The key-value pair to add. * @returns {Object} Returns `map`. */ - function addMapEntry(map, pair) { + function addMapEntry (map, pair) { // Don't return `Map#set` because it doesn't return the map instance in IE 11. - map.set(pair[0], pair[1]); - return map; - } + map.set(pair[0], pair[1]) + return map + } /** * Adds `value` to `set`. @@ -28187,10 +28377,10 @@ process.chdir = function (dir) { * @param {*} value The value to add. * @returns {Object} Returns `set`. */ - function addSetEntry(set, value) { - set.add(value); - return set; - } + function addSetEntry (set, value) { + set.add(value) + return set + } /** * A faster alternative to `Function#apply`, this function invokes `func` @@ -28202,16 +28392,16 @@ process.chdir = function (dir) { * @param {Array} args The arguments to invoke `func` with. * @returns {*} Returns the result of `func`. */ - function apply(func, thisArg, args) { - var length = args.length; - switch (length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } + function apply (func, thisArg, args) { + var length = args.length + switch (length) { + case 0: return func.call(thisArg) + case 1: return func.call(thisArg, args[0]) + case 2: return func.call(thisArg, args[0], args[1]) + case 3: return func.call(thisArg, args[0], args[1], args[2]) + } + return func.apply(thisArg, args) + } /** * A specialized version of `baseAggregator` for arrays. @@ -28223,16 +28413,16 @@ process.chdir = function (dir) { * @param {Object} accumulator The initial aggregated object. * @returns {Function} Returns `accumulator`. */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array ? array.length : 0; + function arrayAggregator (array, setter, iteratee, accumulator) { + var index = -1, + length = array ? array.length : 0 - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } + while (++index < length) { + var value = array[index] + setter(accumulator, value, iteratee(value), array) + } + return accumulator + } /** * A specialized version of `_.forEach` for arrays without support for @@ -28243,17 +28433,17 @@ process.chdir = function (dir) { * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns `array`. */ - function arrayEach(array, iteratee) { - var index = -1, - length = array ? array.length : 0; + function arrayEach (array, iteratee) { + var index = -1, + length = array ? array.length : 0 - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break + } + } + return array + } /** * A specialized version of `_.forEachRight` for arrays without support for @@ -28264,16 +28454,16 @@ process.chdir = function (dir) { * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns `array`. */ - function arrayEachRight(array, iteratee) { - var length = array ? array.length : 0; + function arrayEachRight (array, iteratee) { + var length = array ? array.length : 0 - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } + while (length--) { + if (iteratee(array[length], length, array) === false) { + break + } + } + return array + } /** * A specialized version of `_.every` for arrays without support for @@ -28285,17 +28475,17 @@ process.chdir = function (dir) { * @returns {boolean} Returns `true` if all elements pass the predicate check, * else `false`. */ - function arrayEvery(array, predicate) { - var index = -1, - length = array ? array.length : 0; + function arrayEvery (array, predicate) { + var index = -1, + length = array ? array.length : 0 - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false + } + } + return true + } /** * A specialized version of `_.filter` for arrays without support for @@ -28306,20 +28496,20 @@ process.chdir = function (dir) { * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ - function arrayFilter(array, predicate) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; - } + function arrayFilter (array, predicate) { + var index = -1, + length = array ? array.length : 0, + resIndex = 0, + result = [] + + while (++index < length) { + var value = array[index] + if (predicate(value, index, array)) { + result[resIndex++] = value + } + } + return result + } /** * A specialized version of `_.includes` for arrays without support for @@ -28330,10 +28520,10 @@ process.chdir = function (dir) { * @param {*} target The value to search for. * @returns {boolean} Returns `true` if `target` is found, else `false`. */ - function arrayIncludes(array, value) { - var length = array ? array.length : 0; - return !!length && baseIndexOf(array, value, 0) > -1; - } + function arrayIncludes (array, value) { + var length = array ? array.length : 0 + return !!length && baseIndexOf(array, value, 0) > -1 + } /** * This function is like `arrayIncludes` except that it accepts a comparator. @@ -28344,17 +28534,17 @@ process.chdir = function (dir) { * @param {Function} comparator The comparator invoked per element. * @returns {boolean} Returns `true` if `target` is found, else `false`. */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array ? array.length : 0; + function arrayIncludesWith (array, value, comparator) { + var index = -1, + length = array ? array.length : 0 - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } + while (++index < length) { + if (comparator(value, array[index])) { + return true + } + } + return false + } /** * A specialized version of `_.map` for arrays without support for iteratee @@ -28365,16 +28555,16 @@ process.chdir = function (dir) { * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ - function arrayMap(array, iteratee) { - var index = -1, - length = array ? array.length : 0, - result = Array(length); + function arrayMap (array, iteratee) { + var index = -1, + length = array ? array.length : 0, + result = Array(length) - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } + while (++index < length) { + result[index] = iteratee(array[index], index, array) + } + return result + } /** * Appends the elements of `values` to `array`. @@ -28384,16 +28574,16 @@ process.chdir = function (dir) { * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; + function arrayPush (array, values) { + var index = -1, + length = values.length, + offset = array.length - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } + while (++index < length) { + array[offset + index] = values[index] + } + return array + } /** * A specialized version of `_.reduce` for arrays without support for @@ -28407,18 +28597,18 @@ process.chdir = function (dir) { * the initial value. * @returns {*} Returns the accumulated value. */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array ? array.length : 0; + function arrayReduce (array, iteratee, accumulator, initAccum) { + var index = -1, + length = array ? array.length : 0 - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } + if (initAccum && length) { + accumulator = array[++index] + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array) + } + return accumulator + } /** * A specialized version of `_.reduceRight` for arrays without support for @@ -28432,16 +28622,16 @@ process.chdir = function (dir) { * the initial value. * @returns {*} Returns the accumulated value. */ - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array ? array.length : 0; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } + function arrayReduceRight (array, iteratee, accumulator, initAccum) { + var length = array ? array.length : 0 + if (initAccum && length) { + accumulator = array[--length] + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array) + } + return accumulator + } /** * A specialized version of `_.some` for arrays without support for iteratee @@ -28453,17 +28643,17 @@ process.chdir = function (dir) { * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */ - function arraySome(array, predicate) { - var index = -1, - length = array ? array.length : 0; + function arraySome (array, predicate) { + var index = -1, + length = array ? array.length : 0 - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } + while (++index < length) { + if (predicate(array[index], index, array)) { + return true + } + } + return false + } /** * The base implementation of methods like `_.findKey` and `_.findLastKey`, @@ -28476,16 +28666,16 @@ process.chdir = function (dir) { * @param {Function} eachFunc The function to iterate over `collection`. * @returns {*} Returns the found element or its key, else `undefined`. */ - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; - } + function baseFindKey (collection, predicate, eachFunc) { + var result + eachFunc(collection, function (value, key, collection) { + if (predicate(value, key, collection)) { + result = key + return false + } + }) + return result + } /** * The base implementation of `_.findIndex` and `_.findLastIndex` without @@ -28498,17 +28688,17 @@ process.chdir = function (dir) { * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); + function baseFindIndex (array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1) - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index + } + } + return -1 + } /** * The base implementation of `_.indexOf` without `fromIndex` bounds checks. @@ -28519,20 +28709,20 @@ process.chdir = function (dir) { * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ - function baseIndexOf(array, value, fromIndex) { - if (value !== value) { - return indexOfNaN(array, fromIndex); - } - var index = fromIndex - 1, - length = array.length; + function baseIndexOf (array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex) + } + var index = fromIndex - 1, + length = array.length - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } + while (++index < length) { + if (array[index] === value) { + return index + } + } + return -1 + } /** * This function is like `baseIndexOf` except that it accepts a comparator. @@ -28544,17 +28734,17 @@ process.chdir = function (dir) { * @param {Function} comparator The comparator invoked per element. * @returns {number} Returns the index of the matched value, else `-1`. */ - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; + function baseIndexOfWith (array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; - } + while (++index < length) { + if (comparator(array[index], value)) { + return index + } + } + return -1 + } /** * The base implementation of `_.mean` and `_.meanBy` without support for @@ -28565,10 +28755,10 @@ process.chdir = function (dir) { * @param {Function} iteratee The function invoked per iteration. * @returns {number} Returns the mean. */ - function baseMean(array, iteratee) { - var length = array ? array.length : 0; - return length ? (baseSum(array, iteratee) / length) : NAN; - } + function baseMean (array, iteratee) { + var length = array ? array.length : 0 + return length ? (baseSum(array, iteratee) / length) : NAN + } /** * The base implementation of `_.reduce` and `_.reduceRight`, without support @@ -28583,14 +28773,14 @@ process.chdir = function (dir) { * @param {Function} eachFunc The function to iterate over `collection`. * @returns {*} Returns the accumulated value. */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum + function baseReduce (collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function (value, index, collection) { + accumulator = initAccum ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } + : iteratee(accumulator, value, index, collection) + }) + return accumulator + } /** * The base implementation of `_.sortBy` which uses `comparer` to define the @@ -28602,15 +28792,15 @@ process.chdir = function (dir) { * @param {Function} comparer The function to define sort order. * @returns {Array} Returns `array`. */ - function baseSortBy(array, comparer) { - var length = array.length; + function baseSortBy (array, comparer) { + var length = array.length - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } + array.sort(comparer) + while (length--) { + array[length] = array[length].value + } + return array + } /** * The base implementation of `_.sum` and `_.sumBy` without support for @@ -28621,19 +28811,19 @@ process.chdir = function (dir) { * @param {Function} iteratee The function invoked per iteration. * @returns {number} Returns the sum. */ - function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; - } + function baseSum (array, iteratee) { + var result, + index = -1, + length = array.length + + while (++index < length) { + var current = iteratee(array[index]) + if (current !== undefined) { + result = result === undefined ? current : (result + current) + } + } + return result + } /** * The base implementation of `_.times` without support for iteratee shorthands @@ -28644,15 +28834,15 @@ process.chdir = function (dir) { * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); + function baseTimes (n, iteratee) { + var index = -1, + result = Array(n) - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } + while (++index < n) { + result[index] = iteratee(index) + } + return result + } /** * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array @@ -28663,11 +28853,11 @@ process.chdir = function (dir) { * @param {Array} props The property names to get values for. * @returns {Object} Returns the key-value pairs. */ - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } + function baseToPairs (object, props) { + return arrayMap(props, function (key) { + return [key, object[key]] + }) + } /** * The base implementation of `_.unary` without support for storing wrapper metadata. @@ -28676,11 +28866,11 @@ process.chdir = function (dir) { * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } + function baseUnary (func) { + return function (value) { + return func(value) + } + } /** * The base implementation of `_.values` and `_.valuesIn` which creates an @@ -28692,11 +28882,11 @@ process.chdir = function (dir) { * @param {Array} props The property names to get values for. * @returns {Object} Returns the array of property values. */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } + function baseValues (object, props) { + return arrayMap(props, function (key) { + return object[key] + }) + } /** * Checks if a cache value for `key` exists. @@ -28706,9 +28896,9 @@ process.chdir = function (dir) { * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ - function cacheHas(cache, key) { - return cache.has(key); - } + function cacheHas (cache, key) { + return cache.has(key) + } /** * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol @@ -28719,13 +28909,13 @@ process.chdir = function (dir) { * @param {Array} chrSymbols The character symbols to find. * @returns {number} Returns the index of the first unmatched string symbol. */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; + function charsStartIndex (strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index + } /** * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol @@ -28736,12 +28926,12 @@ process.chdir = function (dir) { * @param {Array} chrSymbols The character symbols to find. * @returns {number} Returns the index of the last unmatched string symbol. */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; + function charsEndIndex (strSymbols, chrSymbols) { + var index = strSymbols.length - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index + } /** * Checks if `value` is a global object. @@ -28750,9 +28940,9 @@ process.chdir = function (dir) { * @param {*} value The value to check. * @returns {null|Object} Returns `value` if it's a global object, else `null`. */ - function checkGlobal(value) { - return (value && value.Object === Object) ? value : null; - } + function checkGlobal (value) { + return (value && value.Object === Object) ? value : null + } /** * Gets the number of `placeholder` occurrences in `array`. @@ -28762,17 +28952,17 @@ process.chdir = function (dir) { * @param {*} placeholder The placeholder to search for. * @returns {number} Returns the placeholder count. */ - function countHolders(array, placeholder) { - var length = array.length, - result = 0; + function countHolders (array, placeholder) { + var length = array.length, + result = 0 - while (length--) { - if (array[length] === placeholder) { - result++; - } - } - return result; - } + while (length--) { + if (array[length] === placeholder) { + result++ + } + } + return result + } /** * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. @@ -28781,9 +28971,9 @@ process.chdir = function (dir) { * @param {string} letter The matched letter to deburr. * @returns {string} Returns the deburred letter. */ - function deburrLetter(letter) { - return deburredLetters[letter]; - } + function deburrLetter (letter) { + return deburredLetters[letter] + } /** * Used by `_.escape` to convert characters to HTML entities. @@ -28792,9 +28982,9 @@ process.chdir = function (dir) { * @param {string} chr The matched character to escape. * @returns {string} Returns the escaped character. */ - function escapeHtmlChar(chr) { - return htmlEscapes[chr]; - } + function escapeHtmlChar (chr) { + return htmlEscapes[chr] + } /** * Used by `_.template` to escape characters for inclusion in compiled string literals. @@ -28803,9 +28993,9 @@ process.chdir = function (dir) { * @param {string} chr The matched character to escape. * @returns {string} Returns the escaped character. */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; - } + function escapeStringChar (chr) { + return '\\' + stringEscapes[chr] + } /** * Gets the value at `key` of `object`. @@ -28815,9 +29005,9 @@ process.chdir = function (dir) { * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } + function getValue (object, key) { + return object == null ? undefined : object[key] + } /** * Gets the index at which the first occurrence of `NaN` is found in `array`. @@ -28828,18 +29018,18 @@ process.chdir = function (dir) { * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched `NaN`, else `-1`. */ - function indexOfNaN(array, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - var other = array[index]; - if (other !== other) { - return index; - } - } - return -1; - } + function indexOfNaN (array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1) + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index] + if (other !== other) { + return index + } + } + return -1 + } /** * Checks if `value` is a host object in IE < 9. @@ -28848,17 +29038,17 @@ process.chdir = function (dir) { * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a host object, else `false`. */ - function isHostObject(value) { + function isHostObject (value) { // Many host objects are `Object` objects that can coerce to strings // despite having improperly defined `toString` methods. - var result = false; - if (value != null && typeof value.toString != 'function') { - try { - result = !!(value + ''); - } catch (e) {} - } - return result; - } + var result = false + if (value != null && typeof value.toString !== 'function') { + try { + result = !!(value + '') + } catch (e) {} + } + return result + } /** * Converts `iterator` to an array. @@ -28867,15 +29057,15 @@ process.chdir = function (dir) { * @param {Object} iterator The iterator to convert. * @returns {Array} Returns the converted array. */ - function iteratorToArray(iterator) { - var data, - result = []; + function iteratorToArray (iterator) { + var data, + result = [] - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } + while (!(data = iterator.next()).done) { + result.push(data.value) + } + return result + } /** * Converts `map` to its key-value pairs. @@ -28884,15 +29074,15 @@ process.chdir = function (dir) { * @param {Object} map The map to convert. * @returns {Array} Returns the key-value pairs. */ - function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } + function mapToArray (map) { + var index = -1, + result = Array(map.size) + + map.forEach(function (value, key) { + result[++index] = [key, value] + }) + return result + } /** * Replaces all `placeholder` elements in `array` with an internal placeholder @@ -28903,21 +29093,21 @@ process.chdir = function (dir) { * @param {*} placeholder The placeholder to replace. * @returns {Array} Returns the new array of placeholder indexes. */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; - } + function replaceHolders (array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = [] + + while (++index < length) { + var value = array[index] + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER + result[resIndex++] = index + } + } + return result + } /** * Converts `set` to an array of its values. @@ -28926,15 +29116,15 @@ process.chdir = function (dir) { * @param {Object} set The set to convert. * @returns {Array} Returns the values. */ - function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } + function setToArray (set) { + var index = -1, + result = Array(set.size) + + set.forEach(function (value) { + result[++index] = value + }) + return result + } /** * Converts `set` to its value-value pairs. @@ -28943,15 +29133,15 @@ process.chdir = function (dir) { * @param {Object} set The set to convert. * @returns {Array} Returns the value-value pairs. */ - function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; - } + function setToPairs (set) { + var index = -1, + result = Array(set.size) + + set.forEach(function (value) { + result[++index] = [value, value] + }) + return result + } /** * Gets the number of symbols in `string`. @@ -28960,16 +29150,16 @@ process.chdir = function (dir) { * @param {string} string The string to inspect. * @returns {number} Returns the string size. */ - function stringSize(string) { - if (!(string && reHasComplexSymbol.test(string))) { - return string.length; - } - var result = reComplexSymbol.lastIndex = 0; - while (reComplexSymbol.test(string)) { - result++; - } - return result; - } + function stringSize (string) { + if (!(string && reHasComplexSymbol.test(string))) { + return string.length + } + var result = reComplexSymbol.lastIndex = 0 + while (reComplexSymbol.test(string)) { + result++ + } + return result + } /** * Converts `string` to an array. @@ -28978,9 +29168,9 @@ process.chdir = function (dir) { * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ - function stringToArray(string) { - return string.match(reComplexSymbol); - } + function stringToArray (string) { + return string.match(reComplexSymbol) + } /** * Used by `_.unescape` to convert HTML entities to characters. @@ -28989,11 +29179,11 @@ process.chdir = function (dir) { * @param {string} chr The matched character to unescape. * @returns {string} Returns the unescaped character. */ - function unescapeHtmlChar(chr) { - return htmlUnescapes[chr]; - } + function unescapeHtmlChar (chr) { + return htmlUnescapes[chr] + } - /*--------------------------------------------------------------------------*/ + /* -------------------------------------------------------------------------- */ /** * Create a new pristine `lodash` function using the `context` object. @@ -29031,118 +29221,118 @@ process.chdir = function (dir) { * // Create a suped-up `defer` in Node.js. * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; */ - function runInContext(context) { - context = context ? _.defaults({}, context, _.pick(root, contextProps)) : root; + function runInContext (context) { + context = context ? _.defaults({}, context, _.pick(root, contextProps)) : root /** Built-in constructor references. */ - var Date = context.Date, - Error = context.Error, - Math = context.Math, - RegExp = context.RegExp, - TypeError = context.TypeError; + var Date = context.Date, + Error = context.Error, + Math = context.Math, + RegExp = context.RegExp, + TypeError = context.TypeError /** Used for built-in method references. */ - var arrayProto = context.Array.prototype, - objectProto = context.Object.prototype, - stringProto = context.String.prototype; + var arrayProto = context.Array.prototype, + objectProto = context.Object.prototype, + stringProto = context.String.prototype /** Used to detect overreaching core-js shims. */ - var coreJsData = context['__core-js_shared__']; + var coreJsData = context['__core-js_shared__'] /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); + var maskSrcKey = (function () { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '') + return uid ? ('Symbol(src)_1.' + uid) : '' + }()) /** Used to resolve the decompiled source of functions. */ - var funcToString = context.Function.prototype.toString; + var funcToString = context.Function.prototype.toString /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; + var hasOwnProperty = objectProto.hasOwnProperty /** Used to generate unique IDs. */ - var idCounter = 0; + var idCounter = 0 /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); + var objectCtorString = funcToString.call(Object) /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) * of values. */ - var objectToString = objectProto.toString; + var objectToString = objectProto.toString /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; + var oldDash = root._ /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + + var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); + ) /** Built-in value references. */ - var Buffer = moduleExports ? context.Buffer : undefined, - Reflect = context.Reflect, - Symbol = context.Symbol, - Uint8Array = context.Uint8Array, - enumerate = Reflect ? Reflect.enumerate : undefined, - getOwnPropertySymbols = Object.getOwnPropertySymbols, - iteratorSymbol = typeof (iteratorSymbol = Symbol && Symbol.iterator) == 'symbol' ? iteratorSymbol : undefined, - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice; + var Buffer = moduleExports ? context.Buffer : undefined, + Reflect = context.Reflect, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + enumerate = Reflect ? Reflect.enumerate : undefined, + getOwnPropertySymbols = Object.getOwnPropertySymbols, + iteratorSymbol = typeof (iteratorSymbol = Symbol && Symbol.iterator) === 'symbol' ? iteratorSymbol : undefined, + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice /** Built-in method references that are mockable. */ - var setTimeout = function(func, wait) { return context.setTimeout.call(root, func, wait); }; + var setTimeout = function (func, wait) { return context.setTimeout.call(root, func, wait) } /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeGetPrototype = Object.getPrototypeOf, - nativeIsFinite = context.isFinite, - nativeJoin = arrayProto.join, - nativeKeys = Object.keys, - nativeMax = Math.max, - nativeMin = Math.min, - nativeParseInt = context.parseInt, - nativeRandom = Math.random, - nativeReplace = stringProto.replace, - nativeReverse = arrayProto.reverse, - nativeSplit = stringProto.split; + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetPrototype = Object.getPrototypeOf, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = Object.keys, + nativeMax = Math.max, + nativeMin = Math.min, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReplace = stringProto.replace, + nativeReverse = arrayProto.reverse, + nativeSplit = stringProto.split /* Built-in method references that are verified to be native. */ - var DataView = getNative(context, 'DataView'), - Map = getNative(context, 'Map'), - Promise = getNative(context, 'Promise'), - Set = getNative(context, 'Set'), - WeakMap = getNative(context, 'WeakMap'), - nativeCreate = getNative(Object, 'create'); + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create') /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; + var metaMap = WeakMap && new WeakMap() /** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ - var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); + var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf') /** Used to lookup unminified function names. */ - var realNames = {}; + var realNames = {} /** Used to detect maps, sets, and weakmaps. */ - var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap) /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a `lodash` object which wraps `value` to enable implicit method @@ -29261,26 +29451,26 @@ process.chdir = function (dir) { * _.isArray(squares.value()); * // => true */ - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } + function lodash (value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value) + } + } + return new LodashWrapper(value) + } /** * The function whose prototype chain sequence wrappers inherit from. * * @private */ - function baseLodash() { + function baseLodash () { // No operation performed. - } + } /** * The base constructor for creating `lodash` wrapper objects. @@ -29289,13 +29479,13 @@ process.chdir = function (dir) { * @param {*} value The value to wrap. * @param {boolean} [chainAll] Enable explicit method chain sequences. */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; - } + function LodashWrapper (value, chainAll) { + this.__wrapped__ = value + this.__actions__ = [] + this.__chain__ = !!chainAll + this.__index__ = 0 + this.__values__ = undefined + } /** * By default, the template delimiters used by lodash are like those in @@ -29306,7 +29496,7 @@ process.chdir = function (dir) { * @memberOf _ * @type {Object} */ - lodash.templateSettings = { + lodash.templateSettings = { /** * Used to detect `data` property values to be HTML-escaped. @@ -29314,7 +29504,7 @@ process.chdir = function (dir) { * @memberOf _.templateSettings * @type {RegExp} */ - 'escape': reEscape, + 'escape': reEscape, /** * Used to detect code to be evaluated. @@ -29322,7 +29512,7 @@ process.chdir = function (dir) { * @memberOf _.templateSettings * @type {RegExp} */ - 'evaluate': reEvaluate, + 'evaluate': reEvaluate, /** * Used to detect `data` property values to inject. @@ -29330,7 +29520,7 @@ process.chdir = function (dir) { * @memberOf _.templateSettings * @type {RegExp} */ - 'interpolate': reInterpolate, + 'interpolate': reInterpolate, /** * Used to reference the data object in the template text. @@ -29338,7 +29528,7 @@ process.chdir = function (dir) { * @memberOf _.templateSettings * @type {string} */ - 'variable': '', + 'variable': '', /** * Used to import variables into the compiled template. @@ -29346,7 +29536,7 @@ process.chdir = function (dir) { * @memberOf _.templateSettings * @type {Object} */ - 'imports': { + 'imports': { /** * A reference to the `lodash` function. @@ -29354,18 +29544,18 @@ process.chdir = function (dir) { * @memberOf _.templateSettings.imports * @type {Function} */ - '_': lodash - } - }; + '_': lodash + } + } // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; + lodash.prototype = baseLodash.prototype + lodash.prototype.constructor = lodash - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; + LodashWrapper.prototype = baseCreate(baseLodash.prototype) + LodashWrapper.prototype.constructor = LodashWrapper - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. @@ -29374,15 +29564,15 @@ process.chdir = function (dir) { * @constructor * @param {*} value The value to wrap. */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } + function LazyWrapper (value) { + this.__wrapped__ = value + this.__actions__ = [] + this.__dir__ = 1 + this.__filtered__ = false + this.__iteratees__ = [] + this.__takeCount__ = MAX_ARRAY_LENGTH + this.__views__ = [] + } /** * Creates a clone of the lazy wrapper object. @@ -29392,16 +29582,16 @@ process.chdir = function (dir) { * @memberOf LazyWrapper * @returns {Object} Returns the cloned `LazyWrapper` object. */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; - } + function lazyClone () { + var result = new LazyWrapper(this.__wrapped__) + result.__actions__ = copyArray(this.__actions__) + result.__dir__ = this.__dir__ + result.__filtered__ = this.__filtered__ + result.__iteratees__ = copyArray(this.__iteratees__) + result.__takeCount__ = this.__takeCount__ + result.__views__ = copyArray(this.__views__) + return result + } /** * Reverses the direction of lazy iteration. @@ -29411,17 +29601,17 @@ process.chdir = function (dir) { * @memberOf LazyWrapper * @returns {Object} Returns the new reversed `LazyWrapper` object. */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } + function lazyReverse () { + if (this.__filtered__) { + var result = new LazyWrapper(this) + result.__dir__ = -1 + result.__filtered__ = true + } else { + result = this.clone() + result.__dir__ *= -1 + } + return result + } /** * Extracts the unwrapped value from its lazy wrapper. @@ -29431,61 +29621,61 @@ process.chdir = function (dir) { * @memberOf LazyWrapper * @returns {*} Returns the unwrapped value. */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || arrLength < LARGE_ARRAY_SIZE || + function lazyValue () { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__) + + if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; + return baseWrapperValue(array, this.__actions__) + } + var result = [] - outer: + outer: while (length-- && resIndex < takeCount) { - index += dir; + index += dir var iterIndex = -1, - value = array[index]; + value = array[index] while (++iterIndex < iterLength) { var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value) if (type == LAZY_MAP_FLAG) { - value = computed; + value = computed } else if (!computed) { if (type == LAZY_FILTER_FLAG) { - continue outer; + continue outer } else { - break outer; + break outer } } } - result[resIndex++] = value; + result[resIndex++] = value } - return result; - } + return result + } // Ensure `LazyWrapper` is an instance of `baseLodash`. - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; + LazyWrapper.prototype = baseCreate(baseLodash.prototype) + LazyWrapper.prototype.constructor = LazyWrapper - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a hash object. @@ -29494,16 +29684,16 @@ process.chdir = function (dir) { * @constructor * @param {Array} [entries] The key-value pairs to cache. */ - function Hash(entries) { - var index = -1, - length = entries ? entries.length : 0; + function Hash (entries) { + var index = -1, + length = entries ? entries.length : 0 - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } + this.clear() + while (++index < length) { + var entry = entries[index] + this.set(entry[0], entry[1]) + } + } /** * Removes all key-value entries from the hash. @@ -29512,9 +29702,9 @@ process.chdir = function (dir) { * @name clear * @memberOf Hash */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - } + function hashClear () { + this.__data__ = nativeCreate ? nativeCreate(null) : {} + } /** * Removes `key` and its value from the hash. @@ -29526,9 +29716,9 @@ process.chdir = function (dir) { * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ - function hashDelete(key) { - return this.has(key) && delete this.__data__[key]; - } + function hashDelete (key) { + return this.has(key) && delete this.__data__[key] + } /** * Gets the hash value for `key`. @@ -29539,14 +29729,14 @@ process.chdir = function (dir) { * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; - } + function hashGet (key) { + var data = this.__data__ + if (nativeCreate) { + var result = data[key] + return result === HASH_UNDEFINED ? undefined : result + } + return hasOwnProperty.call(data, key) ? data[key] : undefined + } /** * Checks if a hash value for `key` exists. @@ -29557,10 +29747,10 @@ process.chdir = function (dir) { * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); - } + function hashHas (key) { + var data = this.__data__ + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key) + } /** * Sets the hash `key` to `value`. @@ -29572,20 +29762,20 @@ process.chdir = function (dir) { * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ - function hashSet(key, value) { - var data = this.__data__; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; - } + function hashSet (key, value) { + var data = this.__data__ + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value + return this + } // Add methods to `Hash`. - Hash.prototype.clear = hashClear; - Hash.prototype['delete'] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; + Hash.prototype.clear = hashClear + Hash.prototype['delete'] = hashDelete + Hash.prototype.get = hashGet + Hash.prototype.has = hashHas + Hash.prototype.set = hashSet - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates an list cache object. @@ -29594,16 +29784,16 @@ process.chdir = function (dir) { * @constructor * @param {Array} [entries] The key-value pairs to cache. */ - function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; + function ListCache (entries) { + var index = -1, + length = entries ? entries.length : 0 - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } + this.clear() + while (++index < length) { + var entry = entries[index] + this.set(entry[0], entry[1]) + } + } /** * Removes all key-value entries from the list cache. @@ -29612,9 +29802,9 @@ process.chdir = function (dir) { * @name clear * @memberOf ListCache */ - function listCacheClear() { - this.__data__ = []; - } + function listCacheClear () { + this.__data__ = [] + } /** * Removes `key` and its value from the list cache. @@ -29625,21 +29815,21 @@ process.chdir = function (dir) { * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ - function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); + function listCacheDelete (key) { + var data = this.__data__, + index = assocIndexOf(data, key) - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - return true; - } + if (index < 0) { + return false + } + var lastIndex = data.length - 1 + if (index == lastIndex) { + data.pop() + } else { + splice.call(data, index, 1) + } + return true + } /** * Gets the list cache value for `key`. @@ -29650,12 +29840,12 @@ process.chdir = function (dir) { * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ - function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); + function listCacheGet (key) { + var data = this.__data__, + index = assocIndexOf(data, key) - return index < 0 ? undefined : data[index][1]; - } + return index < 0 ? undefined : data[index][1] + } /** * Checks if a list cache value for `key` exists. @@ -29666,9 +29856,9 @@ process.chdir = function (dir) { * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } + function listCacheHas (key) { + return assocIndexOf(this.__data__, key) > -1 + } /** * Sets the list cache `key` to `value`. @@ -29680,26 +29870,26 @@ process.chdir = function (dir) { * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ - function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); + function listCacheSet (key, value) { + var data = this.__data__, + index = assocIndexOf(data, key) - if (index < 0) { - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } + if (index < 0) { + data.push([key, value]) + } else { + data[index][1] = value + } + return this + } // Add methods to `ListCache`. - ListCache.prototype.clear = listCacheClear; - ListCache.prototype['delete'] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; + ListCache.prototype.clear = listCacheClear + ListCache.prototype['delete'] = listCacheDelete + ListCache.prototype.get = listCacheGet + ListCache.prototype.has = listCacheHas + ListCache.prototype.set = listCacheSet - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a map cache object to store key-value pairs. @@ -29708,16 +29898,16 @@ process.chdir = function (dir) { * @constructor * @param {Array} [entries] The key-value pairs to cache. */ - function MapCache(entries) { - var index = -1, - length = entries ? entries.length : 0; + function MapCache (entries) { + var index = -1, + length = entries ? entries.length : 0 - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } + this.clear() + while (++index < length) { + var entry = entries[index] + this.set(entry[0], entry[1]) + } + } /** * Removes all key-value entries from the map. @@ -29726,13 +29916,13 @@ process.chdir = function (dir) { * @name clear * @memberOf MapCache */ - function mapCacheClear() { - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; - } + function mapCacheClear () { + this.__data__ = { + 'hash': new Hash(), + 'map': new (Map || ListCache)(), + 'string': new Hash() + } + } /** * Removes `key` and its value from the map. @@ -29743,9 +29933,9 @@ process.chdir = function (dir) { * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ - function mapCacheDelete(key) { - return getMapData(this, key)['delete'](key); - } + function mapCacheDelete (key) { + return getMapData(this, key)['delete'](key) + } /** * Gets the map value for `key`. @@ -29756,9 +29946,9 @@ process.chdir = function (dir) { * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } + function mapCacheGet (key) { + return getMapData(this, key).get(key) + } /** * Checks if a map value for `key` exists. @@ -29769,9 +29959,9 @@ process.chdir = function (dir) { * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } + function mapCacheHas (key) { + return getMapData(this, key).has(key) + } /** * Sets the map `key` to `value`. @@ -29783,19 +29973,19 @@ process.chdir = function (dir) { * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ - function mapCacheSet(key, value) { - getMapData(this, key).set(key, value); - return this; - } + function mapCacheSet (key, value) { + getMapData(this, key).set(key, value) + return this + } // Add methods to `MapCache`. - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype['delete'] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; + MapCache.prototype.clear = mapCacheClear + MapCache.prototype['delete'] = mapCacheDelete + MapCache.prototype.get = mapCacheGet + MapCache.prototype.has = mapCacheHas + MapCache.prototype.set = mapCacheSet - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * @@ -29805,15 +29995,15 @@ process.chdir = function (dir) { * @constructor * @param {Array} [values] The values to cache. */ - function SetCache(values) { - var index = -1, - length = values ? values.length : 0; + function SetCache (values) { + var index = -1, + length = values ? values.length : 0 - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } - } + this.__data__ = new MapCache() + while (++index < length) { + this.add(values[index]) + } + } /** * Adds `value` to the array cache. @@ -29825,10 +30015,10 @@ process.chdir = function (dir) { * @param {*} value The value to cache. * @returns {Object} Returns the cache instance. */ - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } + function setCacheAdd (value) { + this.__data__.set(value, HASH_UNDEFINED) + return this + } /** * Checks if `value` is in the array cache. @@ -29839,15 +30029,15 @@ process.chdir = function (dir) { * @param {*} value The value to search for. * @returns {number} Returns `true` if `value` is found, else `false`. */ - function setCacheHas(value) { - return this.__data__.has(value); - } + function setCacheHas (value) { + return this.__data__.has(value) + } // Add methods to `SetCache`. - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd + SetCache.prototype.has = setCacheHas - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a stack cache object to store key-value pairs. @@ -29856,9 +30046,9 @@ process.chdir = function (dir) { * @constructor * @param {Array} [entries] The key-value pairs to cache. */ - function Stack(entries) { - this.__data__ = new ListCache(entries); - } + function Stack (entries) { + this.__data__ = new ListCache(entries) + } /** * Removes all key-value entries from the stack. @@ -29867,9 +30057,9 @@ process.chdir = function (dir) { * @name clear * @memberOf Stack */ - function stackClear() { - this.__data__ = new ListCache; - } + function stackClear () { + this.__data__ = new ListCache() + } /** * Removes `key` and its value from the stack. @@ -29880,9 +30070,9 @@ process.chdir = function (dir) { * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ - function stackDelete(key) { - return this.__data__['delete'](key); - } + function stackDelete (key) { + return this.__data__['delete'](key) + } /** * Gets the stack value for `key`. @@ -29893,9 +30083,9 @@ process.chdir = function (dir) { * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ - function stackGet(key) { - return this.__data__.get(key); - } + function stackGet (key) { + return this.__data__.get(key) + } /** * Checks if a stack value for `key` exists. @@ -29906,9 +30096,9 @@ process.chdir = function (dir) { * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ - function stackHas(key) { - return this.__data__.has(key); - } + function stackHas (key) { + return this.__data__.has(key) + } /** * Sets the stack `key` to `value`. @@ -29920,23 +30110,23 @@ process.chdir = function (dir) { * @param {*} value The value to set. * @returns {Object} Returns the stack cache instance. */ - function stackSet(key, value) { - var cache = this.__data__; - if (cache instanceof ListCache && cache.__data__.length == LARGE_ARRAY_SIZE) { - cache = this.__data__ = new MapCache(cache.__data__); - } - cache.set(key, value); - return this; - } + function stackSet (key, value) { + var cache = this.__data__ + if (cache instanceof ListCache && cache.__data__.length == LARGE_ARRAY_SIZE) { + cache = this.__data__ = new MapCache(cache.__data__) + } + cache.set(key, value) + return this + } // Add methods to `Stack`. - Stack.prototype.clear = stackClear; - Stack.prototype['delete'] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; + Stack.prototype.clear = stackClear + Stack.prototype['delete'] = stackDelete + Stack.prototype.get = stackGet + Stack.prototype.has = stackHas + Stack.prototype.set = stackSet - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Used by `_.defaults` to customize its `_.assignIn` use. @@ -29948,13 +30138,13 @@ process.chdir = function (dir) { * @param {Object} object The parent object of `objValue`. * @returns {*} Returns the value to assign. */ - function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || + function assignInDefaults (objValue, srcValue, key, object) { + if (objValue === undefined || (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } + return srcValue + } + return objValue + } /** * This function is like `assignValue` except that it doesn't assign @@ -29965,12 +30155,12 @@ process.chdir = function (dir) { * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ - function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (typeof key == 'number' && value === undefined && !(key in object))) { - object[key] = value; - } - } + function assignMergeValue (object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (typeof key === 'number' && value === undefined && !(key in object))) { + object[key] = value + } + } /** * Assigns `value` to `key` of `object` if the existing value is not equivalent @@ -29982,13 +30172,13 @@ process.chdir = function (dir) { * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + function assignValue (object, key, value) { + var objValue = object[key] + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || (value === undefined && !(key in object))) { - object[key] = value; - } - } + object[key] = value + } + } /** * Gets the index at which the `key` is found in `array` of key-value pairs. @@ -29998,15 +30188,15 @@ process.chdir = function (dir) { * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } + function assocIndexOf (array, key) { + var length = array.length + while (length--) { + if (eq(array[length][0], key)) { + return length + } + } + return -1 + } /** * Aggregates elements of `collection` on `accumulator` with keys transformed @@ -30019,12 +30209,12 @@ process.chdir = function (dir) { * @param {Object} accumulator The initial aggregated object. * @returns {Function} Returns `accumulator`. */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; - } + function baseAggregator (collection, setter, iteratee, accumulator) { + baseEach(collection, function (value, key, collection) { + setter(accumulator, value, iteratee(value), collection) + }) + return accumulator + } /** * The base implementation of `_.assign` without support for multiple sources @@ -30035,9 +30225,9 @@ process.chdir = function (dir) { * @param {Object} source The source object. * @returns {Object} Returns `object`. */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } + function baseAssign (object, source) { + return object && copyObject(source, keys(source), object) + } /** * The base implementation of `_.at` without support for individual paths. @@ -30047,17 +30237,17 @@ process.chdir = function (dir) { * @param {string[]} paths The property paths of elements to pick. * @returns {Array} Returns the picked elements. */ - function baseAt(object, paths) { - var index = -1, - isNil = object == null, - length = paths.length, - result = Array(length); + function baseAt (object, paths) { + var index = -1, + isNil = object == null, + length = paths.length, + result = Array(length) - while (++index < length) { - result[index] = isNil ? undefined : get(object, paths[index]); - } - return result; - } + while (++index < length) { + result[index] = isNil ? undefined : get(object, paths[index]) + } + return result + } /** * The base implementation of `_.clamp` which doesn't coerce arguments to numbers. @@ -30068,17 +30258,17 @@ process.chdir = function (dir) { * @param {number} upper The upper bound. * @returns {number} Returns the clamped number. */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; - } + function baseClamp (number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper + } + if (lower !== undefined) { + number = number >= lower ? number : lower + } + } + return number + } /** * The base implementation of `_.clone` and `_.cloneDeep` which tracks @@ -30094,66 +30284,66 @@ process.chdir = function (dir) { * @param {Object} [stack] Tracks traversed objects and their clone counterparts. * @returns {*} Returns the cloned value. */ - function baseClone(value, isDeep, isFull, customizer, key, object, stack) { - var result; - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; + function baseClone (value, isDeep, isFull, customizer, key, object, stack) { + var result + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value) + } + if (result !== undefined) { + return result + } + if (!isObject(value)) { + return value + } + var isArr = isArray(value) + if (isArr) { + result = initCloneArray(value) + if (!isDeep) { + return copyArray(value, result) + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - if (isHostObject(value)) { - return object ? value : {}; - } - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, baseClone, isDeep); - } - } + if (isBuffer(value)) { + return cloneBuffer(value, isDeep) + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + if (isHostObject(value)) { + return object ? value : {} + } + result = initCloneObject(isFunc ? {} : value) + if (!isDeep) { + return copySymbols(value, baseAssign(result, value)) + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {} + } + result = initCloneByTag(value, tag, baseClone, isDeep) + } + } // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); + stack || (stack = new Stack()) + var stacked = stack.get(value) + if (stacked) { + return stacked + } + stack.set(value, result) - if (!isArr) { - var props = isFull ? getAllKeys(value) : keys(value); - } + if (!isArr) { + var props = isFull ? getAllKeys(value) : keys(value) + } // Recursively populate clone (susceptible to call stack limits). - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); - }); - return result; - } + arrayEach(props || value, function (subValue, key) { + if (props) { + key = subValue + subValue = value[key] + } + assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)) + }) + return result + } /** * The base implementation of `_.conforms` which doesn't clone `source`. @@ -30162,28 +30352,28 @@ process.chdir = function (dir) { * @param {Object} source The object of property predicates to conform to. * @returns {Function} Returns the new spec function. */ - function baseConforms(source) { - var props = keys(source), - length = props.length; + function baseConforms (source) { + var props = keys(source), + length = props.length - return function(object) { - if (object == null) { - return !length; - } - var index = length; - while (index--) { - var key = props[index], - predicate = source[key], - value = object[key]; + return function (object) { + if (object == null) { + return !length + } + var index = length + while (index--) { + var key = props[index], + predicate = source[key], + value = object[key] - if ((value === undefined && + if ((value === undefined && !(key in Object(object))) || !predicate(value)) { - return false; - } - } - return true; - }; - } + return false + } + } + return true + } + } /** * The base implementation of `_.create` without support for assigning @@ -30193,9 +30383,9 @@ process.chdir = function (dir) { * @param {Object} prototype The object to inherit from. * @returns {Object} Returns the new object. */ - function baseCreate(proto) { - return isObject(proto) ? objectCreate(proto) : {}; - } + function baseCreate (proto) { + return isObject(proto) ? objectCreate(proto) : {} + } /** * The base implementation of `_.delay` and `_.defer` which accepts an array @@ -30207,12 +30397,12 @@ process.chdir = function (dir) { * @param {Object} args The arguments to provide to `func`. * @returns {number} Returns the timer id. */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } + function baseDelay (func, wait, args) { + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + return setTimeout(function () { func.apply(undefined, args) }, wait) + } /** * The base implementation of methods like `_.difference` without support @@ -30225,50 +30415,48 @@ process.chdir = function (dir) { * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new array of filtered values. */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; + function baseDifference (array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: + if (!length) { + return result + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)) + } + if (comparator) { + includes = arrayIncludesWith + isCommon = false + } else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas + isCommon = false + values = new SetCache(values) + } + outer: while (++index < length) { var value = array[index], - computed = iteratee ? iteratee(value) : value; + computed = iteratee ? iteratee(value) : value - value = (comparator || value !== 0) ? value : 0; + value = (comparator || value !== 0) ? value : 0 if (isCommon && computed === computed) { - var valuesIndex = valuesLength; + var valuesIndex = valuesLength while (valuesIndex--) { if (values[valuesIndex] === computed) { - continue outer; + continue outer } } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); + result.push(value) + } else if (!includes(values, computed, comparator)) { + result.push(value) } } - return result; - } + return result + } /** * The base implementation of `_.forEach` without support for iteratee shorthands. @@ -30278,7 +30466,7 @@ process.chdir = function (dir) { * @param {Function} iteratee The function invoked per iteration. * @returns {Array|Object} Returns `collection`. */ - var baseEach = createBaseEach(baseForOwn); + var baseEach = createBaseEach(baseForOwn) /** * The base implementation of `_.forEachRight` without support for iteratee shorthands. @@ -30288,7 +30476,7 @@ process.chdir = function (dir) { * @param {Function} iteratee The function invoked per iteration. * @returns {Array|Object} Returns `collection`. */ - var baseEachRight = createBaseEach(baseForOwnRight, true); + var baseEachRight = createBaseEach(baseForOwnRight, true) /** * The base implementation of `_.every` without support for iteratee shorthands. @@ -30299,14 +30487,14 @@ process.chdir = function (dir) { * @returns {boolean} Returns `true` if all elements pass the predicate check, * else `false` */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } + function baseEvery (collection, predicate) { + var result = true + baseEach(collection, function (value, index, collection) { + result = !!predicate(value, index, collection) + return result + }) + return result + } /** * The base implementation of methods like `_.max` and `_.min` which accepts a @@ -30318,24 +30506,24 @@ process.chdir = function (dir) { * @param {Function} comparator The comparator used to compare values. * @returns {*} Returns the extremum value. */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; + function baseExtremum (array, iteratee, comparator) { + var index = -1, + length = array.length - while (++index < length) { - var value = array[index], - current = iteratee(value); + while (++index < length) { + var value = array[index], + current = iteratee(value) - if (current != null && (computed === undefined + if (current != null && (computed === undefined ? (current === current && !isSymbol(current)) : comparator(current, computed) )) { - var computed = current, - result = value; - } - } - return result; - } + var computed = current, + result = value + } + } + return result + } /** * The base implementation of `_.fill` without an iteratee call guard. @@ -30347,23 +30535,23 @@ process.chdir = function (dir) { * @param {number} [end=array.length] The end position. * @returns {Array} Returns `array`. */ - function baseFill(array, value, start, end) { - var length = array.length; + function baseFill (array, value, start, end) { + var length = array.length - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; - } + start = toInteger(start) + if (start < 0) { + start = -start > length ? 0 : (length + start) + } + end = (end === undefined || end > length) ? length : toInteger(end) + if (end < 0) { + end += length + } + end = start > end ? 0 : toLength(end) + while (start < end) { + array[start++] = value + } + return array + } /** * The base implementation of `_.filter` without support for iteratee shorthands. @@ -30373,15 +30561,15 @@ process.chdir = function (dir) { * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } + function baseFilter (collection, predicate) { + var result = [] + baseEach(collection, function (value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value) + } + }) + return result + } /** * The base implementation of `_.flatten` with support for restricting flattening. @@ -30394,28 +30582,28 @@ process.chdir = function (dir) { * @param {Array} [result=[]] The initial result value. * @returns {Array} Returns the new flattened array. */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; + function baseFlatten (array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length - predicate || (predicate = isFlattenable); - result || (result = []); + predicate || (predicate = isFlattenable) + result || (result = []) - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { + while (++index < length) { + var value = array[index] + if (depth > 0 && predicate(value)) { + if (depth > 1) { // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } + baseFlatten(value, depth - 1, predicate, isStrict, result) + } else { + arrayPush(result, value) + } + } else if (!isStrict) { + result[result.length] = value + } + } + return result + } /** * The base implementation of `baseForOwn` which iterates over `object` @@ -30428,7 +30616,7 @@ process.chdir = function (dir) { * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ - var baseFor = createBaseFor(); + var baseFor = createBaseFor() /** * This function is like `baseFor` except that it iterates over properties @@ -30440,7 +30628,7 @@ process.chdir = function (dir) { * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ - var baseForRight = createBaseFor(true); + var baseForRight = createBaseFor(true) /** * The base implementation of `_.forOwn` without support for iteratee shorthands. @@ -30450,9 +30638,9 @@ process.chdir = function (dir) { * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } + function baseForOwn (object, iteratee) { + return object && baseFor(object, iteratee, keys) + } /** * The base implementation of `_.forOwnRight` without support for iteratee shorthands. @@ -30462,9 +30650,9 @@ process.chdir = function (dir) { * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } + function baseForOwnRight (object, iteratee) { + return object && baseForRight(object, iteratee, keys) + } /** * The base implementation of `_.functions` which creates an array of @@ -30475,11 +30663,11 @@ process.chdir = function (dir) { * @param {Array} props The property names to filter. * @returns {Array} Returns the function names. */ - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); - } + function baseFunctions (object, props) { + return arrayFilter(props, function (key) { + return isFunction(object[key]) + }) + } /** * The base implementation of `_.get` without support for default values. @@ -30489,17 +30677,17 @@ process.chdir = function (dir) { * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */ - function baseGet(object, path) { - path = isKey(path, object) ? [path] : castPath(path); + function baseGet (object, path) { + path = isKey(path, object) ? [path] : castPath(path) - var index = 0, - length = path.length; + var index = 0, + length = path.length - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; - } + while (object != null && index < length) { + object = object[toKey(path[index++])] + } + return (index && index == length) ? object : undefined + } /** * The base implementation of `getAllKeys` and `getAllKeysIn` which uses @@ -30512,10 +30700,10 @@ process.chdir = function (dir) { * @param {Function} symbolsFunc The function to get the symbols of `object`. * @returns {Array} Returns the array of property names and symbols. */ - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); - } + function baseGetAllKeys (object, keysFunc, symbolsFunc) { + var result = keysFunc(object) + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)) + } /** * The base implementation of `_.gt` which doesn't coerce arguments to numbers. @@ -30526,9 +30714,9 @@ process.chdir = function (dir) { * @returns {boolean} Returns `true` if `value` is greater than `other`, * else `false`. */ - function baseGt(value, other) { - return value > other; - } + function baseGt (value, other) { + return value > other + } /** * The base implementation of `_.has` without support for deep paths. @@ -30538,14 +30726,14 @@ process.chdir = function (dir) { * @param {Array|string} key The key to check. * @returns {boolean} Returns `true` if `key` exists, else `false`. */ - function baseHas(object, key) { + function baseHas (object, key) { // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`, // that are composed entirely of index properties, return `false` for // `hasOwnProperty` checks of them. - return object != null && + return object != null && (hasOwnProperty.call(object, key) || - (typeof object == 'object' && key in object && getPrototype(object) === null)); - } + (typeof object === 'object' && key in object && getPrototype(object) === null)) + } /** * The base implementation of `_.hasIn` without support for deep paths. @@ -30555,9 +30743,9 @@ process.chdir = function (dir) { * @param {Array|string} key The key to check. * @returns {boolean} Returns `true` if `key` exists, else `false`. */ - function baseHasIn(object, key) { - return object != null && key in Object(object); - } + function baseHasIn (object, key) { + return object != null && key in Object(object) + } /** * The base implementation of `_.inRange` which doesn't coerce arguments to numbers. @@ -30568,9 +30756,9 @@ process.chdir = function (dir) { * @param {number} end The end of the range. * @returns {boolean} Returns `true` if `number` is in the range, else `false`. */ - function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); - } + function baseInRange (number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end) + } /** * The base implementation of methods like `_.intersection`, without support @@ -30582,58 +30770,58 @@ process.chdir = function (dir) { * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new array of shared values. */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + function baseIntersection (arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = [] + + while (othIndex--) { + var array = arrays[othIndex] + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)) + } + maxLength = nativeMin(array.length, maxLength) + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; + : undefined + } + array = arrays[0] - var index = -1, - seen = caches[0]; + var index = -1, + seen = caches[0] - outer: + outer: while (++index < length && result.length < maxLength) { var value = array[index], - computed = iteratee ? iteratee(value) : value; + computed = iteratee ? iteratee(value) : value - value = (comparator || value !== 0) ? value : 0; + value = (comparator || value !== 0) ? value : 0 if (!(seen ? cacheHas(seen, computed) : includes(result, computed, comparator) )) { - othIndex = othLength; + othIndex = othLength while (--othIndex) { - var cache = caches[othIndex]; + var cache = caches[othIndex] if (!(cache ? cacheHas(cache, computed) : includes(arrays[othIndex], computed, comparator)) ) { - continue outer; + continue outer } } if (seen) { - seen.push(computed); + seen.push(computed) } - result.push(value); + result.push(value) } } - return result; - } + return result + } /** * The base implementation of `_.invert` and `_.invertBy` which inverts @@ -30646,12 +30834,12 @@ process.chdir = function (dir) { * @param {Object} accumulator The initial inverted object. * @returns {Function} Returns `accumulator`. */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; - } + function baseInverter (object, setter, iteratee, accumulator) { + baseForOwn(object, function (value, key, object) { + setter(accumulator, iteratee(value), key, object) + }) + return accumulator + } /** * The base implementation of `_.invoke` without support for individual @@ -30663,15 +30851,15 @@ process.chdir = function (dir) { * @param {Array} args The arguments to invoke the method with. * @returns {*} Returns the result of the invoked method. */ - function baseInvoke(object, path, args) { - if (!isKey(path, object)) { - path = castPath(path); - object = parent(object, path); - path = last(path); - } - var func = object == null ? object : object[toKey(path)]; - return func == null ? undefined : apply(func, object, args); - } + function baseInvoke (object, path, args) { + if (!isKey(path, object)) { + path = castPath(path) + object = parent(object, path) + path = last(path) + } + var func = object == null ? object : object[toKey(path)] + return func == null ? undefined : apply(func, object, args) + } /** * The base implementation of `_.isEqual` which supports partial comparisons @@ -30688,15 +30876,15 @@ process.chdir = function (dir) { * @param {Object} [stack] Tracks traversed `value` and `other` objects. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. */ - function baseIsEqual(value, other, customizer, bitmask, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); - } + function baseIsEqual (value, other, customizer, bitmask, stack) { + if (value === other) { + return true + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack) + } /** * A specialized version of `baseIsEqual` for arrays and objects which performs @@ -30713,48 +30901,48 @@ process.chdir = function (dir) { * @param {Object} [stack] Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ - function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; + function baseIsEqualDeep (object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag - if (!objIsArr) { - objTag = getTag(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = getTag(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag && !isHostObject(object), - othIsObj = othTag == objectTag && !isHostObject(other), - isSameTag = objTag == othTag; + if (!objIsArr) { + objTag = getTag(object) + objTag = objTag == argsTag ? objectTag : objTag + } + if (!othIsArr) { + othTag = getTag(other) + othTag = othTag == argsTag ? objectTag : othTag + } + var objIsObj = objTag == objectTag && !isHostObject(object), + othIsObj = othTag == objectTag && !isHostObject(other), + isSameTag = objTag == othTag - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) + if (isSameTag && !objIsObj) { + stack || (stack = new Stack()) + return (objIsArr || isTypedArray(object)) ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) - : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); - } - if (!(bitmask & PARTIAL_COMPARE_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack) + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__') - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, equalFunc, customizer, bitmask, stack); - } + stack || (stack = new Stack()) + return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack) + } + } + if (!isSameTag) { + return false + } + stack || (stack = new Stack()) + return equalObjects(object, other, equalFunc, customizer, bitmask, stack) + } /** * The base implementation of `_.isMatch` without support for iteratee shorthands. @@ -30766,49 +30954,49 @@ process.chdir = function (dir) { * @param {Function} [customizer] The function to customize comparisons. * @returns {boolean} Returns `true` if `object` is a match, else `false`. */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; + function baseIsMatch (object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) + if (object == null) { + return !length + } + object = Object(object) + while (index--) { + var data = matchData[index] + if ((noCustomizer && data[2]) ? data[1] !== object[data[0]] : !(data[0] in object) ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined + return false + } + } + while (++index < length) { + data = matchData[index] + var key = data[0], + objValue = object[key], + srcValue = data[1] + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false + } + } else { + var stack = new Stack() + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack) + } + if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) : result )) { - return false; - } - } - } - return true; - } + return false + } + } + } + return true + } /** * The base implementation of `_.isNative` without bad shim checks. @@ -30818,13 +31006,13 @@ process.chdir = function (dir) { * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } + function baseIsNative (value) { + if (!isObject(value) || isMasked(value)) { + return false + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor + return pattern.test(toSource(value)) + } /** * The base implementation of `_.iteratee`. @@ -30833,22 +31021,22 @@ process.chdir = function (dir) { * @param {*} [value=_.identity] The value to convert to an iteratee. * @returns {Function} Returns the iteratee. */ - function baseIteratee(value) { + function baseIteratee (value) { // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) + if (typeof value === 'function') { + return value + } + if (value == null) { + return identity + } + if (typeof value === 'object') { + return isArray(value) ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); - } + : baseMatches(value) + } + return property(value) + } /** * The base implementation of `_.keys` which doesn't skip the constructor @@ -30858,9 +31046,9 @@ process.chdir = function (dir) { * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ - function baseKeys(object) { - return nativeKeys(Object(object)); - } + function baseKeys (object) { + return nativeKeys(Object(object)) + } /** * The base implementation of `_.keysIn` which doesn't skip the constructor @@ -30870,22 +31058,22 @@ process.chdir = function (dir) { * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ - function baseKeysIn(object) { - object = object == null ? object : Object(object); + function baseKeysIn (object) { + object = object == null ? object : Object(object) - var result = []; - for (var key in object) { - result.push(key); - } - return result; - } + var result = [] + for (var key in object) { + result.push(key) + } + return result + } // Fallback for IE < 9 with es6-shim. - if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { - baseKeysIn = function(object) { - return iteratorToArray(enumerate(object)); - }; - } + if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { + baseKeysIn = function (object) { + return iteratorToArray(enumerate(object)) + } + } /** * The base implementation of `_.lt` which doesn't coerce arguments to numbers. @@ -30896,9 +31084,9 @@ process.chdir = function (dir) { * @returns {boolean} Returns `true` if `value` is less than `other`, * else `false`. */ - function baseLt(value, other) { - return value < other; - } + function baseLt (value, other) { + return value < other + } /** * The base implementation of `_.map` without support for iteratee shorthands. @@ -30908,15 +31096,15 @@ process.chdir = function (dir) { * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; + function baseMap (collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : [] - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } + baseEach(collection, function (value, key, collection) { + result[++index] = iteratee(value, key, collection) + }) + return result + } /** * The base implementation of `_.matches` which doesn't clone `source`. @@ -30925,15 +31113,15 @@ process.chdir = function (dir) { * @param {Object} source The object of property values to match. * @returns {Function} Returns the new spec function. */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } + function baseMatches (source) { + var matchData = getMatchData(source) + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]) + } + return function (object) { + return object === source || baseIsMatch(object, source, matchData) + } + } /** * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. @@ -30943,17 +31131,17 @@ process.chdir = function (dir) { * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) + function baseMatchesProperty (path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue) + } + return function (object) { + var objValue = get(object, path) + return (objValue === undefined && objValue === srcValue) ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); - }; - } + : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG) + } + } /** * The base implementation of `_.merge` without support for multiple sources. @@ -30966,34 +31154,33 @@ process.chdir = function (dir) { * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - if (!(isArray(source) || isTypedArray(source))) { - var props = keysIn(source); - } - arrayEach(props || source, function(srcValue, key) { - if (props) { - key = srcValue; - srcValue = source[key]; - } - if (isObject(srcValue)) { - stack || (stack = new Stack); - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer + function baseMerge (object, source, srcIndex, customizer, stack) { + if (object === source) { + return + } + if (!(isArray(source) || isTypedArray(source))) { + var props = keysIn(source) + } + arrayEach(props || source, function (srcValue, key) { + if (props) { + key = srcValue + srcValue = source[key] + } + if (isObject(srcValue)) { + stack || (stack = new Stack()) + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack) + } else { + var newValue = customizer ? customizer(object[key], srcValue, (key + ''), object, source, stack) - : undefined; + : undefined - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }); - } + if (newValue === undefined) { + newValue = srcValue + } + assignMergeValue(object, key, newValue) + } + }) + } /** * A specialized version of `baseMerge` for arrays and objects which performs @@ -31010,60 +31197,54 @@ process.chdir = function (dir) { * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = object[key], - srcValue = source[key], - stacked = stack.get(srcValue); + function baseMergeDeep (object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = object[key], + srcValue = source[key], + stacked = stack.get(srcValue) - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer + if (stacked) { + assignMergeValue(object, key, stacked) + return + } + var newValue = customizer ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - newValue = srcValue; - if (isArray(srcValue) || isTypedArray(srcValue)) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else { - isCommon = false; - newValue = baseClone(srcValue, true); - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { - isCommon = false; - newValue = baseClone(srcValue, true); - } - else { - newValue = objValue; - } - } - else { - isCommon = false; - } - } - stack.set(srcValue, newValue); + : undefined + + var isCommon = newValue === undefined + + if (isCommon) { + newValue = srcValue + if (isArray(srcValue) || isTypedArray(srcValue)) { + if (isArray(objValue)) { + newValue = objValue + } else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue) + } else { + isCommon = false + newValue = baseClone(srcValue, true) + } + } else if (isPlainObject(srcValue) || isArguments(srcValue)) { + if (isArguments(objValue)) { + newValue = toPlainObject(objValue) + } else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { + isCommon = false + newValue = baseClone(srcValue, true) + } else { + newValue = objValue + } + } else { + isCommon = false + } + } + stack.set(srcValue, newValue) - if (isCommon) { + if (isCommon) { // Recursively merge objects and arrays (susceptible to call stack limits). - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - } - stack['delete'](srcValue); - assignMergeValue(object, key, newValue); - } + mergeFunc(newValue, srcValue, srcIndex, customizer, stack) + } + stack['delete'](srcValue) + assignMergeValue(object, key, newValue) + } /** * The base implementation of `_.nth` which doesn't coerce `n` to an integer. @@ -31073,14 +31254,14 @@ process.chdir = function (dir) { * @param {number} n The index of the element to return. * @returns {*} Returns the nth element of `array`. */ - function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; - } + function baseNth (array, n) { + var length = array.length + if (!length) { + return + } + n += n < 0 ? length : 0 + return isIndex(n, length) ? array[n] : undefined + } /** * The base implementation of `_.orderBy` without param guards. @@ -31091,21 +31272,21 @@ process.chdir = function (dir) { * @param {string[]} orders The sort orders of `iteratees`. * @returns {Array} Returns the new sorted array. */ - function baseOrderBy(collection, iteratees, orders) { - var index = -1; - iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); + function baseOrderBy (collection, iteratees, orders) { + var index = -1 + iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())) - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); + var result = baseMap(collection, function (value, key, collection) { + var criteria = arrayMap(iteratees, function (iteratee) { + return iteratee(value) + }) + return { 'criteria': criteria, 'index': ++index, 'value': value } + }) - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } + return baseSortBy(result, function (object, other) { + return compareMultiple(object, other, orders) + }) + } /** * The base implementation of `_.pick` without support for individual @@ -31116,15 +31297,15 @@ process.chdir = function (dir) { * @param {string[]} props The property identifiers to pick. * @returns {Object} Returns the new object. */ - function basePick(object, props) { - object = Object(object); - return arrayReduce(props, function(result, key) { - if (key in object) { - result[key] = object[key]; - } - return result; - }, {}); - } + function basePick (object, props) { + object = Object(object) + return arrayReduce(props, function (result, key) { + if (key in object) { + result[key] = object[key] + } + return result + }, {}) + } /** * The base implementation of `_.pickBy` without support for iteratee shorthands. @@ -31134,22 +31315,22 @@ process.chdir = function (dir) { * @param {Function} predicate The function invoked per property. * @returns {Object} Returns the new object. */ - function basePickBy(object, predicate) { - var index = -1, - props = getAllKeysIn(object), - length = props.length, - result = {}; + function basePickBy (object, predicate) { + var index = -1, + props = getAllKeysIn(object), + length = props.length, + result = {} - while (++index < length) { - var key = props[index], - value = object[key]; + while (++index < length) { + var key = props[index], + value = object[key] - if (predicate(value, key)) { - result[key] = value; - } - } - return result; - } + if (predicate(value, key)) { + result[key] = value + } + } + return result + } /** * The base implementation of `_.property` without support for deep paths. @@ -31158,11 +31339,11 @@ process.chdir = function (dir) { * @param {string} key The key of the property to get. * @returns {Function} Returns the new accessor function. */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } + function baseProperty (key) { + return function (object) { + return object == null ? undefined : object[key] + } + } /** * A specialized version of `baseProperty` which supports deep paths. @@ -31171,11 +31352,11 @@ process.chdir = function (dir) { * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. */ - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } + function basePropertyDeep (path) { + return function (object) { + return baseGet(object, path) + } + } /** * The base implementation of `_.pullAllBy` without support for iteratee @@ -31188,32 +31369,32 @@ process.chdir = function (dir) { * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns `array`. */ - function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; + function basePullAll (array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; - } + if (array === values) { + values = copyArray(values) + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)) + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1) + } + splice.call(array, fromIndex, 1) + } + } + return array + } /** * The base implementation of `_.pullAt` without support for individual @@ -31224,32 +31405,30 @@ process.chdir = function (dir) { * @param {number[]} indexes The indexes of elements to remove. * @returns {Array} Returns `array`. */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } - else if (!isKey(index, array)) { - var path = castPath(index), - object = parent(array, path); - - if (object != null) { - delete object[toKey(last(path))]; + function basePullAt (array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1 + + while (length--) { + var index = indexes[length] + if (length == lastIndex || index !== previous) { + var previous = index + if (isIndex(index)) { + splice.call(array, index, 1) + } else if (!isKey(index, array)) { + var path = castPath(index), + object = parent(array, path) + + if (object != null) { + delete object[toKey(last(path))] + } + } else { + delete array[toKey(index)] + } + } + } + return array } - } - else { - delete array[toKey(index)]; - } - } - } - return array; - } /** * The base implementation of `_.random` without support for returning @@ -31260,9 +31439,9 @@ process.chdir = function (dir) { * @param {number} upper The upper bound. * @returns {number} Returns the random number. */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } + function baseRandom (lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)) + } /** * The base implementation of `_.range` and `_.rangeRight` which doesn't @@ -31275,17 +31454,17 @@ process.chdir = function (dir) { * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Array} Returns the range of numbers. */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); + function baseRange (start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length) - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } + while (length--) { + result[fromRight ? length : ++index] = start + start += step + } + return result + } /** * The base implementation of `_.repeat` which doesn't coerce arguments. @@ -31295,25 +31474,25 @@ process.chdir = function (dir) { * @param {number} n The number of times to repeat the string. * @returns {string} Returns the repeated string. */ - function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } + function baseRepeat (string, n) { + var result = '' + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result + } // Leverage the exponentiation by squaring algorithm for a faster repeat. // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); + do { + if (n % 2) { + result += string + } + n = nativeFloor(n / 2) + if (n) { + string += string + } + } while (n) - return result; - } + return result + } /** * The base implementation of `_.set`. @@ -31325,33 +31504,33 @@ process.chdir = function (dir) { * @param {Function} [customizer] The function to customize path creation. * @returns {Object} Returns `object`. */ - function baseSet(object, path, value, customizer) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]); - if (isObject(nested)) { - var newValue = value; - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = objValue == null + function baseSet (object, path, value, customizer) { + path = isKey(path, object) ? [path] : castPath(path) + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object + + while (nested != null && ++index < length) { + var key = toKey(path[index]) + if (isObject(nested)) { + var newValue = value + if (index != lastIndex) { + var objValue = nested[key] + newValue = customizer ? customizer(objValue, key, nested) : undefined + if (newValue === undefined) { + newValue = objValue == null ? (isIndex(path[index + 1]) ? [] : {}) - : objValue; + : objValue + } + } + assignValue(nested, key, newValue) + } + nested = nested[key] + } + return object } - } - assignValue(nested, key, newValue); - } - nested = nested[key]; - } - return object; - } /** * The base implementation of `setData` without support for hot loop detection. @@ -31361,10 +31540,10 @@ process.chdir = function (dir) { * @param {*} data The metadata. * @returns {Function} Returns `func`. */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; + var baseSetData = !metaMap ? identity : function (func, data) { + metaMap.set(func, data) + return func + } /** * The base implementation of `_.slice` without an iteratee call guard. @@ -31375,26 +31554,26 @@ process.chdir = function (dir) { * @param {number} [end=array.length] The end position. * @returns {Array} Returns the slice of `array`. */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; + function baseSlice (array, start, end) { + var index = -1, + length = array.length - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; + if (start < 0) { + start = -start > length ? 0 : (length + start) + } + end = end > length ? length : end + if (end < 0) { + end += length + } + length = start > end ? 0 : ((end - start) >>> 0) + start >>>= 0 - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } + var result = Array(length) + while (++index < length) { + result[index] = array[index + start] + } + return result + } /** * The base implementation of `_.some` without support for iteratee shorthands. @@ -31405,15 +31584,15 @@ process.chdir = function (dir) { * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */ - function baseSome(collection, predicate) { - var result; + function baseSome (collection, predicate) { + var result - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } + baseEach(collection, function (value, index, collection) { + result = predicate(value, index, collection) + return !result + }) + return !!result + } /** * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which @@ -31427,26 +31606,26 @@ process.chdir = function (dir) { * @returns {number} Returns the index at which `value` should be inserted * into `array`. */ - function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array ? array.length : low; + function baseSortedIndex (array, value, retHighest) { + var low = 0, + high = array ? array.length : low - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; + if (typeof value === 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid] - if (computed !== null && !isSymbol(computed) && + if (computed !== null && !isSymbol(computed) && (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); - } + low = mid + 1 + } else { + high = mid + } + } + return high + } + return baseSortedIndexBy(array, value, identity, retHighest) + } /** * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` @@ -31461,45 +31640,45 @@ process.chdir = function (dir) { * @returns {number} Returns the index at which `value` should be inserted * into `array`. */ - function baseSortedIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array ? array.length : 0, - valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } + function baseSortedIndexBy (array, value, iteratee, retHighest) { + value = iteratee(value) + + var low = 0, + high = array ? array.length : 0, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed) + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined) + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull) + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol) + } else if (othIsNull || othIsSymbol) { + setLow = false + } else { + setLow = retHighest ? (computed <= value) : (computed < value) + } + if (setLow) { + low = mid + 1 + } else { + high = mid + } + } + return nativeMin(high, MAX_ARRAY_INDEX) + } /** * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without @@ -31510,23 +31689,23 @@ process.chdir = function (dir) { * @param {Function} [iteratee] The iteratee invoked per element. * @returns {Array} Returns the new duplicate free array. */ - function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; + function baseSortedUniq (array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = [] - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; - } + if (!index || !eq(computed, seen)) { + var seen = computed + result[resIndex++] = value === 0 ? 0 : value + } + } + return result + } /** * The base implementation of `_.toNumber` which doesn't ensure correct @@ -31536,15 +31715,15 @@ process.chdir = function (dir) { * @param {*} value The value to process. * @returns {number} Returns the number. */ - function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; - } + function baseToNumber (value) { + if (typeof value === 'number') { + return value + } + if (isSymbol(value)) { + return NAN + } + return +value + } /** * The base implementation of `_.toString` which doesn't convert nullish @@ -31554,17 +31733,17 @@ process.chdir = function (dir) { * @param {*} value The value to process. * @returns {string} Returns the string. */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } + function baseToString (value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value === 'string') { + return value + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : '' + } + var result = (value + '') + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result + } /** * The base implementation of `_.uniqBy` without support for iteratee shorthands. @@ -31575,57 +31754,54 @@ process.chdir = function (dir) { * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new duplicate free array. */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: + function baseUniq (array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result + + if (comparator) { + isCommon = false + includes = arrayIncludesWith + } else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array) + if (set) { + return setToArray(set) + } + isCommon = false + includes = cacheHas + seen = new SetCache() + } else { + seen = iteratee ? [] : result + } + outer: while (++index < length) { var value = array[index], - computed = iteratee ? iteratee(value) : value; + computed = iteratee ? iteratee(value) : value - value = (comparator || value !== 0) ? value : 0; + value = (comparator || value !== 0) ? value : 0 if (isCommon && computed === computed) { - var seenIndex = seen.length; + var seenIndex = seen.length while (seenIndex--) { if (seen[seenIndex] === computed) { - continue outer; + continue outer } } if (iteratee) { - seen.push(computed); + seen.push(computed) } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { + result.push(value) + } else if (!includes(seen, computed, comparator)) { if (seen !== result) { - seen.push(computed); + seen.push(computed) } - result.push(value); + result.push(value) } } - return result; - } + return result + } /** * The base implementation of `_.unset`. @@ -31635,13 +31811,13 @@ process.chdir = function (dir) { * @param {Array|string} path The path of the property to unset. * @returns {boolean} Returns `true` if the property is deleted, else `false`. */ - function baseUnset(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - object = parent(object, path); + function baseUnset (object, path) { + path = isKey(path, object) ? [path] : castPath(path) + object = parent(object, path) - var key = toKey(last(path)); - return !(object != null && baseHas(object, key)) || delete object[key]; - } + var key = toKey(last(path)) + return !(object != null && baseHas(object, key)) || delete object[key] + } /** * The base implementation of `_.update`. @@ -31653,9 +31829,9 @@ process.chdir = function (dir) { * @param {Function} [customizer] The function to customize path creation. * @returns {Object} Returns `object`. */ - function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); - } + function baseUpdate (object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer) + } /** * The base implementation of methods like `_.dropWhile` and `_.takeWhile` @@ -31668,17 +31844,17 @@ process.chdir = function (dir) { * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Array} Returns the slice of `array`. */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; + function baseWhile (array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1 - while ((fromRight ? index-- : ++index < length) && + while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} - return isDrop + return isDrop ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); - } + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)) + } /** * The base implementation of `wrapperValue` which returns the result of @@ -31690,15 +31866,15 @@ process.chdir = function (dir) { * @param {Array} actions Actions to perform to resolve the unwrapped value. * @returns {*} Returns the resolved value. */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } + function baseWrapperValue (value, actions) { + var result = value + if (result instanceof LazyWrapper) { + result = result.value() + } + return arrayReduce(actions, function (result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)) + }, result) + } /** * The base implementation of methods like `_.xor`, without support for @@ -31710,20 +31886,20 @@ process.chdir = function (dir) { * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new array of values. */ - function baseXor(arrays, iteratee, comparator) { - var index = -1, - length = arrays.length; + function baseXor (arrays, iteratee, comparator) { + var index = -1, + length = arrays.length - while (++index < length) { - var result = result + while (++index < length) { + var result = result ? arrayPush( baseDifference(result, arrays[index], iteratee, comparator), baseDifference(arrays[index], result, iteratee, comparator) ) - : arrays[index]; - } - return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; - } + : arrays[index] + } + return (result && result.length) ? baseUniq(result, iteratee, comparator) : [] + } /** * This base implementation of `_.zipObject` which assigns values using `assignFunc`. @@ -31734,18 +31910,18 @@ process.chdir = function (dir) { * @param {Function} assignFunc The function to assign values. * @returns {Object} Returns the new object. */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; + function baseZipObject (props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {} - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; - } + while (++index < length) { + var value = index < valsLength ? values[index] : undefined + assignFunc(result, props[index], value) + } + return result + } /** * Casts `value` to an empty array if it's not an array like object. @@ -31754,9 +31930,9 @@ process.chdir = function (dir) { * @param {*} value The value to inspect. * @returns {Array|Object} Returns the cast array-like object. */ - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } + function castArrayLikeObject (value) { + return isArrayLikeObject(value) ? value : [] + } /** * Casts `value` to `identity` if it's not a function. @@ -31765,9 +31941,9 @@ process.chdir = function (dir) { * @param {*} value The value to inspect. * @returns {Function} Returns cast function. */ - function castFunction(value) { - return typeof value == 'function' ? value : identity; - } + function castFunction (value) { + return typeof value === 'function' ? value : identity + } /** * Casts `value` to a path array if it's not one. @@ -31776,9 +31952,9 @@ process.chdir = function (dir) { * @param {*} value The value to inspect. * @returns {Array} Returns the cast property path array. */ - function castPath(value) { - return isArray(value) ? value : stringToPath(value); - } + function castPath (value) { + return isArray(value) ? value : stringToPath(value) + } /** * Casts `array` to a slice if it's needed. @@ -31789,11 +31965,11 @@ process.chdir = function (dir) { * @param {number} [end=array.length] The end position. * @returns {Array} Returns the cast slice. */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } + function castSlice (array, start, end) { + var length = array.length + end = end === undefined ? length : end + return (!start && end >= length) ? array : baseSlice(array, start, end) + } /** * Creates a clone of `buffer`. @@ -31803,14 +31979,14 @@ process.chdir = function (dir) { * @param {boolean} [isDeep] Specify a deep clone. * @returns {Buffer} Returns the cloned buffer. */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var result = new buffer.constructor(buffer.length); - buffer.copy(result); - return result; - } + function cloneBuffer (buffer, isDeep) { + if (isDeep) { + return buffer.slice() + } + var result = new buffer.constructor(buffer.length) + buffer.copy(result) + return result + } /** * Creates a clone of `arrayBuffer`. @@ -31819,11 +31995,11 @@ process.chdir = function (dir) { * @param {ArrayBuffer} arrayBuffer The array buffer to clone. * @returns {ArrayBuffer} Returns the cloned array buffer. */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } + function cloneArrayBuffer (arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength) + new Uint8Array(result).set(new Uint8Array(arrayBuffer)) + return result + } /** * Creates a clone of `dataView`. @@ -31833,10 +32009,10 @@ process.chdir = function (dir) { * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned data view. */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } + function cloneDataView (dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength) + } /** * Creates a clone of `map`. @@ -31847,10 +32023,10 @@ process.chdir = function (dir) { * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned map. */ - function cloneMap(map, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map); - return arrayReduce(array, addMapEntry, new map.constructor); - } + function cloneMap (map, isDeep, cloneFunc) { + var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map) + return arrayReduce(array, addMapEntry, new map.constructor()) + } /** * Creates a clone of `regexp`. @@ -31859,11 +32035,11 @@ process.chdir = function (dir) { * @param {Object} regexp The regexp to clone. * @returns {Object} Returns the cloned regexp. */ - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; - } + function cloneRegExp (regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)) + result.lastIndex = regexp.lastIndex + return result + } /** * Creates a clone of `set`. @@ -31874,10 +32050,10 @@ process.chdir = function (dir) { * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned set. */ - function cloneSet(set, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set); - return arrayReduce(array, addSetEntry, new set.constructor); - } + function cloneSet (set, isDeep, cloneFunc) { + var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set) + return arrayReduce(array, addSetEntry, new set.constructor()) + } /** * Creates a clone of the `symbol` object. @@ -31886,9 +32062,9 @@ process.chdir = function (dir) { * @param {Object} symbol The symbol object to clone. * @returns {Object} Returns the cloned symbol object. */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; - } + function cloneSymbol (symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {} + } /** * Creates a clone of `typedArray`. @@ -31898,10 +32074,10 @@ process.chdir = function (dir) { * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned typed array. */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } + function cloneTypedArray (typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length) + } /** * Compares values to sort them in ascending order. @@ -31911,35 +32087,35 @@ process.chdir = function (dir) { * @param {*} other The other value to compare. * @returns {number} Returns the sort order indicator for `value`. */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); + function compareAscending (value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value) - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other) - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || (valIsNull && othIsDefined && othIsReflexive) || (!valIsDefined && othIsReflexive) || !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + return 1 + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || (othIsNull && valIsDefined && valIsReflexive) || (!othIsDefined && valIsReflexive) || !othIsReflexive) { - return -1; - } - } - return 0; - } + return -1 + } + } + return 0 + } /** * Used by `_.orderBy` to compare multiple properties of a value to another @@ -31955,23 +32131,23 @@ process.chdir = function (dir) { * @param {boolean[]|string[]} orders The order to sort by for each property. * @returns {number} Returns the sort order indicator for `object`. */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } + function compareMultiple (object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]) + if (result) { + if (index >= ordersLength) { + return result + } + var order = orders[index] + return result * (order == 'desc' ? -1 : 1) + } + } // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications // that causes it, under certain circumstances, to provide the same value for // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 @@ -31979,8 +32155,8 @@ process.chdir = function (dir) { // // This also ensures a stable sort in V8 and other engines. // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } + return object.index - other.index + } /** * Creates an array that is the composition of partially applied arguments, @@ -31993,29 +32169,29 @@ process.chdir = function (dir) { * @params {boolean} [isCurried] Specify composing for a curried function. * @returns {Array} Returns the new array of composed arguments. */ - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } + function composeArgs (args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex] + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex] + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++] + } + return result + } /** * This function is like `composeArgs` except that the arguments composition @@ -32028,31 +32204,31 @@ process.chdir = function (dir) { * @params {boolean} [isCurried] Specify composing for a curried function. * @returns {Array} Returns the new array of composed arguments. */ - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; - } + function composeArgsRight (args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex] + } + var offset = argsIndex + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex] + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++] + } + } + return result + } /** * Copies the values of `source` to `array`. @@ -32062,16 +32238,16 @@ process.chdir = function (dir) { * @param {Array} [array=[]] The array to copy values to. * @returns {Array} Returns `array`. */ - function copyArray(source, array) { - var index = -1, - length = source.length; + function copyArray (source, array) { + var index = -1, + length = source.length - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } + array || (array = Array(length)) + while (++index < length) { + array[index] = source[index] + } + return array + } /** * Copies properties of `source` to `object`. @@ -32083,23 +32259,23 @@ process.chdir = function (dir) { * @param {Function} [customizer] The function to customize copied values. * @returns {Object} Returns `object`. */ - function copyObject(source, props, object, customizer) { - object || (object = {}); + function copyObject (source, props, object, customizer) { + object || (object = {}) - var index = -1, - length = props.length; + var index = -1, + length = props.length - while (++index < length) { - var key = props[index]; + while (++index < length) { + var key = props[index] - var newValue = customizer + var newValue = customizer ? customizer(object[key], source[key], key, object, source) - : source[key]; + : source[key] - assignValue(object, key, newValue); - } - return object; - } + assignValue(object, key, newValue) + } + return object + } /** * Copies own symbol properties of `source` to `object`. @@ -32109,9 +32285,9 @@ process.chdir = function (dir) { * @param {Object} [object={}] The object to copy symbols to. * @returns {Object} Returns `object`. */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } + function copySymbols (source, object) { + return copyObject(source, getSymbols(source), object) + } /** * Creates a function like `_.groupBy`. @@ -32121,14 +32297,14 @@ process.chdir = function (dir) { * @param {Function} [initializer] The accumulator object initializer. * @returns {Function} Returns the new aggregator function. */ - function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; + function createAggregator (setter, initializer) { + return function (collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {} - return func(collection, setter, getIteratee(iteratee), accumulator); - }; - } + return func(collection, setter, getIteratee(iteratee), accumulator) + } + } /** * Creates a function like `_.assign`. @@ -32137,31 +32313,31 @@ process.chdir = function (dir) { * @param {Function} assigner The function to assign values. * @returns {Function} Returns the new assigner function. */ - function createAssigner(assigner) { - return rest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; + function createAssigner (assigner) { + return rest(function (object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined - customizer = (assigner.length > 3 && typeof customizer == 'function') + customizer = (assigner.length > 3 && typeof customizer === 'function') ? (length--, customizer) - : undefined; + : undefined - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer + length = 1 + } + object = Object(object) + while (++index < length) { + var source = sources[index] + if (source) { + assigner(object, source, index, customizer) + } + } + return object + }) + } /** * Creates a `baseEach` or `baseEachRight` function. @@ -32171,26 +32347,26 @@ process.chdir = function (dir) { * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } + function createBaseEach (eachFunc, fromRight) { + return function (collection, iteratee) { + if (collection == null) { + return collection + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee) + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection) + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break + } + } + return collection + } + } /** * Creates a base function for methods like `_.forIn` and `_.forOwn`. @@ -32199,22 +32375,22 @@ process.chdir = function (dir) { * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } + function createBaseFor (fromRight) { + return function (object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length + + while (length--) { + var key = props[fromRight ? length : ++index] + if (iteratee(iterable[key], key, iterable) === false) { + break + } + } + return object + } + } /** * Creates a function that wraps `func` to invoke it with the optional `this` @@ -32227,16 +32403,16 @@ process.chdir = function (dir) { * @param {*} [thisArg] The `this` binding of `func`. * @returns {Function} Returns the new wrapped function. */ - function createBaseWrapper(func, bitmask, thisArg) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtorWrapper(func); + function createBaseWrapper (func, bitmask, thisArg) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func) - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } + function wrapper () { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func + return fn.apply(isBind ? thisArg : this, arguments) + } + return wrapper + } /** * Creates a function like `_.lowerFirst`. @@ -32245,25 +32421,25 @@ process.chdir = function (dir) { * @param {string} methodName The name of the `String` case method to use. * @returns {Function} Returns the new case function. */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); + function createCaseFirst (methodName) { + return function (string) { + string = toString(string) - var strSymbols = reHasComplexSymbol.test(string) + var strSymbols = reHasComplexSymbol.test(string) ? stringToArray(string) - : undefined; + : undefined - var chr = strSymbols + var chr = strSymbols ? strSymbols[0] - : string.charAt(0); + : string.charAt(0) - var trailing = strSymbols + var trailing = strSymbols ? castSlice(strSymbols, 1).join('') - : string.slice(1); + : string.slice(1) - return chr[methodName]() + trailing; - }; - } + return chr[methodName]() + trailing + } + } /** * Creates a function like `_.camelCase`. @@ -32272,11 +32448,11 @@ process.chdir = function (dir) { * @param {Function} callback The function to combine each word. * @returns {Function} Returns the new compounder function. */ - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; - } + function createCompounder (callback) { + return function (string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '') + } + } /** * Creates a function that produces an instance of `Ctor` regardless of @@ -32286,30 +32462,30 @@ process.chdir = function (dir) { * @param {Function} Ctor The constructor to wrap. * @returns {Function} Returns the new wrapped function. */ - function createCtorWrapper(Ctor) { - return function() { + function createCtorWrapper (Ctor) { + return function () { // Use a `switch` statement to work with class constructors. See // http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); + var args = arguments + switch (args.length) { + case 0: return new Ctor() + case 1: return new Ctor(args[0]) + case 2: return new Ctor(args[0], args[1]) + case 3: return new Ctor(args[0], args[1], args[2]) + case 4: return new Ctor(args[0], args[1], args[2], args[3]) + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]) + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]) + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]) + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args) // Mimic the constructor's `return` behavior. // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } + return isObject(result) ? result : thisBinding + } + } /** * Creates a function that wraps `func` to enable currying. @@ -32321,33 +32497,33 @@ process.chdir = function (dir) { * @param {number} arity The arity of `func`. * @returns {Function} Returns the new wrapped function. */ - function createCurryWrapper(func, bitmask, arity) { - var Ctor = createCtorWrapper(func); + function createCurryWrapper (func, bitmask, arity) { + var Ctor = createCtorWrapper(func) - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); + function wrapper () { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper) - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + while (index--) { + args[index] = arguments[index] + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) ? [] - : replaceHolders(args, placeholder); + : replaceHolders(args, placeholder) - length -= holders.length; - if (length < arity) { - return createRecurryWrapper( + length -= holders.length + if (length < arity) { + return createRecurryWrapper( func, bitmask, createHybridWrapper, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } + args, holders, undefined, undefined, arity - length) + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func + return apply(fn, this, args) + } + return wrapper + } /** * Creates a `_.find` or `_.findLast` function. @@ -32356,23 +32532,23 @@ process.chdir = function (dir) { * @param {Function} findIndexFunc The function to find the collection index. * @returns {Function} Returns the new find function. */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - predicate = getIteratee(predicate, 3); - if (!isArrayLike(collection)) { - var props = keys(collection); - } - var index = findIndexFunc(props || collection, function(value, key) { - if (props) { - key = value; - value = iterable[key]; - } - return predicate(value, key, iterable); - }, fromIndex); - return index > -1 ? collection[props ? props[index] : index] : undefined; - }; - } + function createFind (findIndexFunc) { + return function (collection, predicate, fromIndex) { + var iterable = Object(collection) + predicate = getIteratee(predicate, 3) + if (!isArrayLike(collection)) { + var props = keys(collection) + } + var index = findIndexFunc(props || collection, function (value, key) { + if (props) { + key = value + value = iterable[key] + } + return predicate(value, key, iterable) + }, fromIndex) + return index > -1 ? collection[props ? props[index] : index] : undefined + } + } /** * Creates a `_.flow` or `_.flowRight` function. @@ -32381,62 +32557,62 @@ process.chdir = function (dir) { * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new flow function. */ - function createFlow(fromRight) { - return rest(function(funcs) { - funcs = baseFlatten(funcs, 1); + function createFlow (fromRight) { + return rest(function (funcs) { + funcs = baseFlatten(funcs, 1) - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; + if (fromRight) { + funcs.reverse() + } + while (index--) { + var func = funcs[index] + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true) + } + } + index = wrapper ? index : length + while (++index < length) { + func = funcs[index] - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined - if (data && isLaziable(data[0]) && + if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1 ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]) + } else { + wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; + : wrapper.thru(func) + } + } + return function () { + var args = arguments, + value = args[0] - if (wrapper && args.length == 1 && + if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); - } + return wrapper.plant(value).value() + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value + + while (++index < length) { + result = funcs[index].call(this, result) + } + return result + } + }) + } /** * Creates a function that wraps `func` to invoke it with optional `this` @@ -32458,59 +32634,59 @@ process.chdir = function (dir) { * @param {number} [arity] The arity of `func`. * @returns {Function} Returns the new wrapped function. */ - function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & ARY_FLAG, - isBind = bitmask & BIND_FLAG, - isBindKey = bitmask & BIND_KEY_FLAG, - isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), - isFlip = bitmask & FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtorWrapper(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurryWrapper( + function createHybridWrapper (func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), + isFlip = bitmask & FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtorWrapper(func) + + function wrapper () { + var length = arguments.length, + args = Array(length), + index = length + + while (index--) { + args[index] = arguments[index] + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder) + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried) + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried) + } + length -= holdersCount + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder) + return createRecurryWrapper( func, bitmask, createHybridWrapper, wrapper.placeholder, thisArg, args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtorWrapper(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } + ) + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func + + length = args.length + if (argPos) { + args = reorder(args, argPos) + } else if (isFlip && length > 1) { + args.reverse() + } + if (isAry && ary < length) { + args.length = ary + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtorWrapper(fn) + } + return fn.apply(thisBinding, args) + } + return wrapper + } /** * Creates a function like `_.invertBy`. @@ -32520,11 +32696,11 @@ process.chdir = function (dir) { * @param {Function} toIteratee The function to resolve iteratees. * @returns {Function} Returns the new inverter function. */ - function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } + function createInverter (setter, toIteratee) { + return function (object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}) + } + } /** * Creates a function that performs a mathematical operation on two values. @@ -32533,31 +32709,31 @@ process.chdir = function (dir) { * @param {Function} operator The function to perform the operation. * @returns {Function} Returns the new mathematical operation function. */ - function createMathOperation(operator) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return 0; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; - } + function createMathOperation (operator) { + return function (value, other) { + var result + if (value === undefined && other === undefined) { + return 0 + } + if (value !== undefined) { + result = value + } + if (other !== undefined) { + if (result === undefined) { + return other + } + if (typeof value === 'string' || typeof other === 'string') { + value = baseToString(value) + other = baseToString(other) + } else { + value = baseToNumber(value) + other = baseToNumber(other) + } + result = operator(value, other) + } + return result + } + } /** * Creates a function like `_.over`. @@ -32566,20 +32742,20 @@ process.chdir = function (dir) { * @param {Function} arrayFunc The function to iterate over iteratees. * @returns {Function} Returns the new over function. */ - function createOver(arrayFunc) { - return rest(function(iteratees) { - iteratees = (iteratees.length == 1 && isArray(iteratees[0])) + function createOver (arrayFunc) { + return rest(function (iteratees) { + iteratees = (iteratees.length == 1 && isArray(iteratees[0])) ? arrayMap(iteratees[0], baseUnary(getIteratee())) - : arrayMap(baseFlatten(iteratees, 1, isFlattenableIteratee), baseUnary(getIteratee())); - - return rest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); - } + : arrayMap(baseFlatten(iteratees, 1, isFlattenableIteratee), baseUnary(getIteratee())) + + return rest(function (args) { + var thisArg = this + return arrayFunc(iteratees, function (iteratee) { + return apply(iteratee, thisArg, args) + }) + }) + }) + } /** * Creates the padding for `string` based on `length`. The `chars` string @@ -32590,18 +32766,18 @@ process.chdir = function (dir) { * @param {string} [chars=' '] The string used as padding. * @returns {string} Returns the padding for `string`. */ - function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); + function createPadding (length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars) - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return reHasComplexSymbol.test(chars) + var charsLength = chars.length + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))) + return reHasComplexSymbol.test(chars) ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); - } + : result.slice(0, length) + } /** * Creates a function that wraps `func` to invoke it with the `this` binding @@ -32616,28 +32792,28 @@ process.chdir = function (dir) { * the new function. * @returns {Function} Returns the new wrapped function. */ - function createPartialWrapper(func, bitmask, thisArg, partials) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtorWrapper(func); + function createPartialWrapper (func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func) - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + function wrapper () { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex] + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex] + } + return apply(fn, isBind ? thisArg : this, args) + } + return wrapper + } /** * Creates a `_.range` or `_.rangeRight` function. @@ -32646,24 +32822,24 @@ process.chdir = function (dir) { * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new range function. */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } + function createRange (fromRight) { + return function (start, end, step) { + if (step && typeof step !== 'number' && isIterateeCall(start, end, step)) { + end = step = undefined + } // Ensure the sign of `-0` is preserved. - start = toNumber(start); - start = start === start ? start : 0; - if (end === undefined) { - end = start; - start = 0; - } else { - end = toNumber(end) || 0; - } - step = step === undefined ? (start < end ? 1 : -1) : (toNumber(step) || 0); - return baseRange(start, end, step, fromRight); - }; - } + start = toNumber(start) + start = start === start ? start : 0 + if (end === undefined) { + end = start + start = 0 + } else { + end = toNumber(end) || 0 + } + step = step === undefined ? (start < end ? 1 : -1) : (toNumber(step) || 0) + return baseRange(start, end, step, fromRight) + } + } /** * Creates a function that performs a relational operation on two values. @@ -32672,15 +32848,15 @@ process.chdir = function (dir) { * @param {Function} operator The function to perform the operation. * @returns {Function} Returns the new relational operation function. */ - function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; - } + function createRelationalOperation (operator) { + return function (value, other) { + if (!(typeof value === 'string' && typeof other === 'string')) { + value = toNumber(value) + other = toNumber(other) + } + return operator(value, other) + } + } /** * Creates a function that wraps `func` to continue currying. @@ -32700,31 +32876,31 @@ process.chdir = function (dir) { * @param {number} [arity] The arity of `func`. * @returns {Function} Returns the new wrapped function. */ - function createRecurryWrapper(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + function createRecurryWrapper (func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials - if (!(bitmask & CURRY_BOUND_FLAG)) { - bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG) + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG) - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return result; - } + if (!(bitmask & CURRY_BOUND_FLAG)) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG) + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ] + + var result = wrapFunc.apply(undefined, newData) + if (isLaziable(func)) { + setData(result, newData) + } + result.placeholder = placeholder + return result + } /** * Creates a function like `_.round`. @@ -32733,23 +32909,23 @@ process.chdir = function (dir) { * @param {string} methodName The name of the `Math` method to use when rounding. * @returns {Function} Returns the new round function. */ - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = nativeMin(toInteger(precision), 292); - if (precision) { + function createRound (methodName) { + var func = Math[methodName] + return function (number, precision) { + number = toNumber(number) + precision = nativeMin(toInteger(precision), 292) + if (precision) { // Shift with exponential notation to avoid floating-point issues. // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)) - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; - } + pair = (toString(value) + 'e').split('e') + return +(pair[0] + 'e' + (+pair[1] - precision)) + } + return func(number) + } + } /** * Creates a set of `values`. @@ -32758,9 +32934,9 @@ process.chdir = function (dir) { * @param {Array} values The values to add to the set. * @returns {Object} Returns the new set. */ - var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); - }; + var createSet = !(Set && (1 / setToArray(new Set([, -0]))[1]) == INFINITY) ? noop : function (values) { + return new Set(values) + } /** * Creates a `_.toPairs` or `_.toPairsIn` function. @@ -32769,18 +32945,18 @@ process.chdir = function (dir) { * @param {Function} keysFunc The function to get the keys of a given object. * @returns {Function} Returns the new pairs function. */ - function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; - } + function createToPairs (keysFunc) { + return function (object) { + var tag = getTag(object) + if (tag == mapTag) { + return mapToArray(object) + } + if (tag == setTag) { + return setToPairs(object) + } + return baseToPairs(object, keysFunc(object)) + } + } /** * Creates a function that either curries or invokes `func` with optional @@ -32808,60 +32984,60 @@ process.chdir = function (dir) { * @param {number} [arity] The arity of `func`. * @returns {Function} Returns the new wrapped function. */ - function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; + function createWrapper (func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG + if (!isBindKey && typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + var length = partials ? partials.length : 0 + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG) + partials = holders = undefined + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0) + arity = arity === undefined ? arity : toInteger(arity) + length -= holders ? holders.length : 0 - if (bitmask & PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); + partials = holders = undefined + } + var data = isBindKey ? undefined : getData(func) - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ] - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] == null + if (data) { + mergeData(newData, data) + } + func = newData[0] + bitmask = newData[1] + thisArg = newData[2] + partials = newData[3] + holders = newData[4] + arity = newData[9] = newData[9] == null ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); + : nativeMax(newData[9] - length, 0) - if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { - bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == BIND_FLAG) { - var result = createBaseWrapper(func, bitmask, thisArg); - } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { - result = createCurryWrapper(func, bitmask, arity); - } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { - result = createPartialWrapper(func, bitmask, thisArg, partials); - } else { - result = createHybridWrapper.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setter(result, newData); - } + if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { + bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG) + } + if (!bitmask || bitmask == BIND_FLAG) { + var result = createBaseWrapper(func, bitmask, thisArg) + } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { + result = createCurryWrapper(func, bitmask, arity) + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { + result = createPartialWrapper(func, bitmask, thisArg, partials) + } else { + result = createHybridWrapper.apply(undefined, newData) + } + var setter = data ? baseSetData : setData + return setter(result, newData) + } /** * A specialized version of `baseIsEqualDeep` for arrays with support for @@ -32877,64 +33053,64 @@ process.chdir = function (dir) { * @param {Object} stack Tracks traversed `array` and `other` objects. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. */ - function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - arrLength = array.length, - othLength = other.length; + function equalArrays (array, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false + } // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked) { - return stacked == other; - } - var index = -1, - result = true, - seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined; + var stacked = stack.get(array) + if (stacked) { + return stacked == other + } + var index = -1, + result = true, + seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache() : undefined - stack.set(array, other); + stack.set(array, other) // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index] - if (customizer) { - var compared = isPartial + if (customizer) { + var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } + : customizer(arrValue, othValue, index, array, other, stack) + } + if (compared !== undefined) { + if (compared) { + continue + } + result = false + break + } // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!seen.has(othIndex) && + if (seen) { + if (!arraySome(other, function (othValue, othIndex) { + if (!seen.has(othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { - return seen.add(othIndex); - } - })) { - result = false; - break; - } - } else if (!( + return seen.add(othIndex) + } + })) { + result = false + break + } + } else if (!( arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack) )) { - result = false; - break; - } - } - stack['delete'](array); - return result; - } + result = false + break + } + } + stack['delete'](array) + return result + } /** * A specialized version of `baseIsEqualDeep` for comparing objects of @@ -32954,72 +33130,72 @@ process.chdir = function (dir) { * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ - function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || + function equalByTag (object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; + return false + } + object = object.buffer + other = other.buffer - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; + return false + } + return true - case boolTag: - case dateTag: + case boolTag: + case dateTag: // Coerce dates and booleans to numbers, dates to milliseconds and // booleans to `1` or `0` treating invalid dates coerced to `NaN` as // not equal. - return +object == +other; + return +object == +other - case errorTag: - return object.name == other.name && object.message == other.message; + case errorTag: + return object.name == other.name && object.message == other.message - case numberTag: + case numberTag: // Treat `NaN` vs. `NaN` as equal. - return (object != +object) ? other != +other : object == +other; + return (object != +object) ? other != +other : object == +other - case regexpTag: - case stringTag: + case regexpTag: + case stringTag: // Coerce regexes to strings and treat strings, primitives and objects, // as equal. See http://www.ecma-international.org/ecma-262/6.0/#sec-regexp.prototype.tostring // for more details. - return object == (other + ''); + return object == (other + '') - case mapTag: - var convert = mapToArray; + case mapTag: + var convert = mapToArray - case setTag: - var isPartial = bitmask & PARTIAL_COMPARE_FLAG; - convert || (convert = setToArray); + case setTag: + var isPartial = bitmask & PARTIAL_COMPARE_FLAG + convert || (convert = setToArray) - if (object.size != other.size && !isPartial) { - return false; - } + if (object.size != other.size && !isPartial) { + return false + } // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= UNORDERED_COMPARE_FLAG; - stack.set(object, other); + var stacked = stack.get(object) + if (stacked) { + return stacked == other + } + bitmask |= UNORDERED_COMPARE_FLAG + stack.set(object, other) // Recursively compare objects (susceptible to call stack limits). - return equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); + return equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack) - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; - } + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other) + } + } + return false + } /** * A specialized version of `baseIsEqualDeep` for objects with support for @@ -33035,67 +33211,67 @@ process.chdir = function (dir) { * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ - function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; + function equalObjects (object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : baseHas(other, key))) { - return false; - } - } + if (objLength != othLength && !isPartial) { + return false + } + var index = objLength + while (index--) { + var key = objProps[index] + if (!(isPartial ? key in other : baseHas(other, key))) { + return false + } + } // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - var result = true; - stack.set(object, other); + var stacked = stack.get(object) + if (stacked) { + return stacked == other + } + var result = true + stack.set(object, other) - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; + var skipCtor = isPartial + while (++index < objLength) { + key = objProps[index] + var objValue = object[key], + othValue = other[key] - if (customizer) { - var compared = isPartial + if (customizer) { + var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } + : customizer(objValue, othValue, key, object, other, stack) + } // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined + if (!(compared === undefined ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) : compared )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; + result = false + break + } + skipCtor || (skipCtor = key == 'constructor') + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && + if (objCtor != othCtor && ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - return result; - } + !(typeof objCtor === 'function' && objCtor instanceof objCtor && + typeof othCtor === 'function' && othCtor instanceof othCtor)) { + result = false + } + } + stack['delete'](object) + return result + } /** * Creates an array of own enumerable property names and symbols of `object`. @@ -33104,9 +33280,9 @@ process.chdir = function (dir) { * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); - } + function getAllKeys (object) { + return baseGetAllKeys(object, keys, getSymbols) + } /** * Creates an array of own and inherited enumerable property names and @@ -33116,9 +33292,9 @@ process.chdir = function (dir) { * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } + function getAllKeysIn (object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn) + } /** * Gets metadata for `func`. @@ -33127,9 +33303,9 @@ process.chdir = function (dir) { * @param {Function} func The function to query. * @returns {*} Returns the metadata for `func`. */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; + var getData = !metaMap ? noop : function (func) { + return metaMap.get(func) + } /** * Gets the name of `func`. @@ -33138,20 +33314,20 @@ process.chdir = function (dir) { * @param {Function} func The function to query. * @returns {string} Returns the function name. */ - function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; + function getFuncName (func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0 - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } + while (length--) { + var data = array[length], + otherFunc = data.func + if (otherFunc == null || otherFunc == func) { + return data.name + } + } + return result + } /** * Gets the argument placeholder value for `func`. @@ -33160,10 +33336,10 @@ process.chdir = function (dir) { * @param {Function} func The function to inspect. * @returns {*} Returns the placeholder value. */ - function getHolder(func) { - var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; - return object.placeholder; - } + function getHolder (func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func + return object.placeholder + } /** * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, @@ -33176,11 +33352,11 @@ process.chdir = function (dir) { * @param {number} [arity] The arity of the created iteratee. * @returns {Function} Returns the chosen function or its result. */ - function getIteratee() { - var result = lodash.iteratee || iteratee; - result = result === iteratee ? baseIteratee : result; - return arguments.length ? result(arguments[0], arguments[1]) : result; - } + function getIteratee () { + var result = lodash.iteratee || iteratee + result = result === iteratee ? baseIteratee : result + return arguments.length ? result(arguments[0], arguments[1]) : result + } /** * Gets the "length" property value of `object`. @@ -33193,7 +33369,7 @@ process.chdir = function (dir) { * @param {Object} object The object to query. * @returns {*} Returns the "length" value. */ - var getLength = baseProperty('length'); + var getLength = baseProperty('length') /** * Gets the data for `map`. @@ -33203,12 +33379,12 @@ process.chdir = function (dir) { * @param {string} key The reference key. * @returns {*} Returns the map data. */ - function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; - } + function getMapData (map, key) { + var data = map.__data__ + return isKeyable(key) + ? data[typeof key === 'string' ? 'string' : 'hash'] + : data.map + } /** * Gets the property names, values, and compare flags of `object`. @@ -33217,18 +33393,18 @@ process.chdir = function (dir) { * @param {Object} object The object to query. * @returns {Array} Returns the match data of `object`. */ - function getMatchData(object) { - var result = keys(object), - length = result.length; + function getMatchData (object) { + var result = keys(object), + length = result.length - while (length--) { - var key = result[length], - value = object[key]; + while (length--) { + var key = result[length], + value = object[key] - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } + result[length] = [key, value, isStrictComparable(value)] + } + return result + } /** * Gets the native function at `key` of `object`. @@ -33238,10 +33414,10 @@ process.chdir = function (dir) { * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } + function getNative (object, key) { + var value = getValue(object, key) + return baseIsNative(value) ? value : undefined + } /** * Gets the `[[Prototype]]` of `value`. @@ -33250,9 +33426,9 @@ process.chdir = function (dir) { * @param {*} value The value to query. * @returns {null|Object} Returns the `[[Prototype]]`. */ - function getPrototype(value) { - return nativeGetPrototype(Object(value)); - } + function getPrototype (value) { + return nativeGetPrototype(Object(value)) + } /** * Creates an array of the own enumerable symbol properties of `object`. @@ -33261,16 +33437,16 @@ process.chdir = function (dir) { * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ - function getSymbols(object) { + function getSymbols (object) { // Coerce `object` to an object to avoid non-object errors in V8. // See https://bugs.chromium.org/p/v8/issues/detail?id=3443 for more details. - return getOwnPropertySymbols(Object(object)); - } + return getOwnPropertySymbols(Object(object)) + } // Fallback for IE < 11. - if (!getOwnPropertySymbols) { - getSymbols = stubArray; - } + if (!getOwnPropertySymbols) { + getSymbols = stubArray + } /** * Creates an array of the own and inherited enumerable symbol properties @@ -33280,14 +33456,14 @@ process.chdir = function (dir) { * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ - var getSymbolsIn = !getOwnPropertySymbols ? getSymbols : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; + var getSymbolsIn = !getOwnPropertySymbols ? getSymbols : function (object) { + var result = [] + while (object) { + arrayPush(result, getSymbols(object)) + object = getPrototype(object) + } + return result + } /** * Gets the `toStringTag` of `value`. @@ -33296,34 +33472,34 @@ process.chdir = function (dir) { * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ - function getTag(value) { - return objectToString.call(value); - } + function getTag (value) { + return objectToString.call(value) + } // Fallback for data views, maps, sets, and weak maps in IE 11, // for data views in Edge, and promises in Node.js. - if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map()) != mapTag) || (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = objectToString.call(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : undefined; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; - } + (Set && getTag(new Set()) != setTag) || + (WeakMap && getTag(new WeakMap()) != weakMapTag)) { + getTag = function (value) { + var result = objectToString.call(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : undefined + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag + case mapCtorString: return mapTag + case promiseCtorString: return promiseTag + case setCtorString: return setTag + case weakMapCtorString: return weakMapTag + } + } + return result + } + } /** * Gets the view, applying any `transforms` to the `start` and `end` positions. @@ -33335,23 +33511,23 @@ process.chdir = function (dir) { * @returns {Object} Returns an object containing the `start` and `end` * positions of the view. */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; + function getView (start, end, transforms) { + var index = -1, + length = transforms.length - while (++index < length) { - var data = transforms[index], - size = data.size; + while (++index < length) { + var data = transforms[index], + size = data.size - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; - } + switch (data.type) { + case 'drop': start += size; break + case 'dropRight': end -= size; break + case 'take': end = nativeMin(end, start + size); break + case 'takeRight': start = nativeMax(start, end - size); break + } + } + return { 'start': start, 'end': end } + } /** * Checks if `path` exists on `object`. @@ -33362,27 +33538,27 @@ process.chdir = function (dir) { * @param {Function} hasFunc The function to check properties. * @returns {boolean} Returns `true` if `path` exists, else `false`. */ - function hasPath(object, path, hasFunc) { - path = isKey(path, object) ? [path] : castPath(path); + function hasPath (object, path, hasFunc) { + path = isKey(path, object) ? [path] : castPath(path) - var result, - index = -1, - length = path.length; + var result, + index = -1, + length = path.length - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result) { - return result; - } - var length = object ? object.length : 0; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isString(object) || isArguments(object)); - } + while (++index < length) { + var key = toKey(path[index]) + if (!(result = object != null && hasFunc(object, key))) { + break + } + object = object[key] + } + if (result) { + return result + } + var length = object ? object.length : 0 + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isString(object) || isArguments(object)) + } /** * Initializes an array clone. @@ -33391,17 +33567,17 @@ process.chdir = function (dir) { * @param {Array} array The array to clone. * @returns {Array} Returns the initialized clone. */ - function initCloneArray(array) { - var length = array.length, - result = array.constructor(length); + function initCloneArray (array) { + var length = array.length, + result = array.constructor(length) // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } + if (length && typeof array[0] === 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index + result.input = array.input + } + return result + } /** * Initializes an object clone. @@ -33410,11 +33586,11 @@ process.chdir = function (dir) { * @param {Object} object The object to clone. * @returns {Object} Returns the initialized clone. */ - function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) + function initCloneObject (object) { + return (typeof object.constructor === 'function' && !isPrototype(object)) ? baseCreate(getPrototype(object)) - : {}; - } + : {} + } /** * Initializes an object clone based on its `toStringTag`. @@ -33429,41 +33605,41 @@ process.chdir = function (dir) { * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the initialized clone. */ - function initCloneByTag(object, tag, cloneFunc, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); + function initCloneByTag (object, tag, cloneFunc, isDeep) { + var Ctor = object.constructor + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object) - case boolTag: - case dateTag: - return new Ctor(+object); + case boolTag: + case dateTag: + return new Ctor(+object) - case dataViewTag: - return cloneDataView(object, isDeep); + case dataViewTag: + return cloneDataView(object, isDeep) - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep) - case mapTag: - return cloneMap(object, isDeep, cloneFunc); + case mapTag: + return cloneMap(object, isDeep, cloneFunc) - case numberTag: - case stringTag: - return new Ctor(object); + case numberTag: + case stringTag: + return new Ctor(object) - case regexpTag: - return cloneRegExp(object); + case regexpTag: + return cloneRegExp(object) - case setTag: - return cloneSet(object, isDeep, cloneFunc); + case setTag: + return cloneSet(object, isDeep, cloneFunc) - case symbolTag: - return cloneSymbol(object); - } - } + case symbolTag: + return cloneSymbol(object) + } + } /** * Creates an array of index keys for `object` values of arrays, @@ -33473,14 +33649,14 @@ process.chdir = function (dir) { * @param {Object} object The object to query. * @returns {Array|null} Returns index keys, else `null`. */ - function indexKeys(object) { - var length = object ? object.length : undefined; - if (isLength(length) && + function indexKeys (object) { + var length = object ? object.length : undefined + if (isLength(length) && (isArray(object) || isString(object) || isArguments(object))) { - return baseTimes(length, String); - } - return null; - } + return baseTimes(length, String) + } + return null + } /** * Checks if `value` is a flattenable `arguments` object or array. @@ -33489,9 +33665,9 @@ process.chdir = function (dir) { * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. */ - function isFlattenable(value) { - return isArray(value) || isArguments(value); - } + function isFlattenable (value) { + return isArray(value) || isArguments(value) + } /** * Checks if `value` is a flattenable array and not a `_.matchesProperty` @@ -33501,9 +33677,9 @@ process.chdir = function (dir) { * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. */ - function isFlattenableIteratee(value) { - return isArray(value) && !(value.length == 2 && !isFunction(value[0])); - } + function isFlattenableIteratee (value) { + return isArray(value) && !(value.length == 2 && !isFunction(value[0])) + } /** * Checks if `value` is a valid array-like index. @@ -33513,12 +33689,12 @@ process.chdir = function (dir) { * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ - function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); - } + function isIndex (value, length) { + length = length == null ? MAX_SAFE_INTEGER : length + return !!length && + (typeof value === 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length) + } /** * Checks if the given arguments are from an iteratee call. @@ -33530,19 +33706,19 @@ process.chdir = function (dir) { * @returns {boolean} Returns `true` if the arguments are from an iteratee call, * else `false`. */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' + function isIterateeCall (value, index, object) { + if (!isObject(object)) { + return false + } + var type = typeof index + if (type == 'number' ? (isArrayLike(object) && isIndex(index, object.length)) : (type == 'string' && index in object) ) { - return eq(object[index], value); - } - return false; - } + return eq(object[index], value) + } + return false + } /** * Checks if `value` is a property name and not a property path. @@ -33552,18 +33728,18 @@ process.chdir = function (dir) { * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ - function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || + function isKey (value, object) { + if (isArray(value)) { + return false + } + var type = typeof value + if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); - } + return true + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)) + } /** * Checks if `value` is suitable for use as unique object key. @@ -33572,12 +33748,12 @@ process.chdir = function (dir) { * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ - function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + function isKeyable (value) { + var type = typeof value + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') ? (value !== '__proto__') - : (value === null); - } + : (value === null) + } /** * Checks if `func` has a lazy counterpart. @@ -33587,19 +33763,19 @@ process.chdir = function (dir) { * @returns {boolean} Returns `true` if `func` has a lazy counterpart, * else `false`. */ - function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; + function isLaziable (func) { + var funcName = getFuncName(func), + other = lodash[funcName] - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } + if (typeof other !== 'function' || !(funcName in LazyWrapper.prototype)) { + return false + } + if (func === other) { + return true + } + var data = getData(other) + return !!data && func === data[0] + } /** * Checks if `func` has its source masked. @@ -33608,9 +33784,9 @@ process.chdir = function (dir) { * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } + function isMasked (func) { + return !!maskSrcKey && (maskSrcKey in func) + } /** * Checks if `func` is capable of being masked. @@ -33619,7 +33795,7 @@ process.chdir = function (dir) { * @param {*} value The value to check. * @returns {boolean} Returns `true` if `func` is maskable, else `false`. */ - var isMaskable = coreJsData ? isFunction : stubFalse; + var isMaskable = coreJsData ? isFunction : stubFalse /** * Checks if `value` is likely a prototype object. @@ -33628,12 +33804,12 @@ process.chdir = function (dir) { * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + function isPrototype (value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor === 'function' && Ctor.prototype) || objectProto - return value === proto; - } + return value === proto + } /** * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. @@ -33643,9 +33819,9 @@ process.chdir = function (dir) { * @returns {boolean} Returns `true` if `value` if suitable for strict * equality comparisons, else `false`. */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } + function isStrictComparable (value) { + return value === value && !isObject(value) + } /** * A specialized version of `matchesProperty` for source values suitable @@ -33656,15 +33832,15 @@ process.chdir = function (dir) { * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; - } + function matchesStrictComparable (key, srcValue) { + return function (object) { + if (object == null) { + return false + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))) + } + } /** * Merges the function metadata of `source` into `data`. @@ -33682,60 +33858,60 @@ process.chdir = function (dir) { * @param {Array} source The source metadata. * @returns {Array} Returns `data`. */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); + function mergeData (data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG) - var isCombo = + var isCombo = ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); + ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)) // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } + if (!(isCommon || isCombo)) { + return data + } // Use source `thisArg` if available. - if (srcBitmask & BIND_FLAG) { - data[2] = source[2]; + if (srcBitmask & BIND_FLAG) { + data[2] = source[2] // Set when currying a bound function. - newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG; - } + newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG + } // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } + var value = source[3] + if (value) { + var partials = data[3] + data[3] = partials ? composeArgs(partials, value, source[4]) : value + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4] + } // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } + value = source[5] + if (value) { + partials = data[5] + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6] + } // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } + value = source[7] + if (value) { + data[7] = value + } // Use source `ary` if it's smaller. - if (srcBitmask & ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]) + } // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } + if (data[9] == null) { + data[9] = source[9] + } // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; + data[0] = source[0] + data[1] = newBitmask - return data; - } + return data + } /** * Used by `_.defaultsDeep` to customize its `_.merge` use. @@ -33750,12 +33926,12 @@ process.chdir = function (dir) { * counterparts. * @returns {*} Returns the value to assign. */ - function mergeDefaults(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - baseMerge(objValue, srcValue, undefined, mergeDefaults, stack.set(srcValue, objValue)); - } - return objValue; - } + function mergeDefaults (objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + baseMerge(objValue, srcValue, undefined, mergeDefaults, stack.set(srcValue, objValue)) + } + return objValue + } /** * Gets the parent value at `path` of `object`. @@ -33765,9 +33941,9 @@ process.chdir = function (dir) { * @param {Array} path The path to get the parent value of. * @returns {*} Returns the parent value. */ - function parent(object, path) { - return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - } + function parent (object, path) { + return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)) + } /** * Reorder `array` according to the specified indexes where the element at @@ -33779,17 +33955,17 @@ process.chdir = function (dir) { * @param {Array} indexes The arranged array indexes. * @returns {Array} Returns `array`. */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); + function reorder (array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array) - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; - } + while (length--) { + var index = indexes[length] + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined + } + return array + } /** * Sets metadata for `func`. @@ -33805,25 +33981,25 @@ process.chdir = function (dir) { * @param {*} data The metadata. * @returns {Function} Returns `func`. */ - var setData = (function() { - var count = 0, - lastCalled = 0; + var setData = (function () { + var count = 0, + lastCalled = 0 - return function(key, value) { - var stamp = now(), - remaining = HOT_SPAN - (stamp - lastCalled); + return function (key, value) { + var stamp = now(), + remaining = HOT_SPAN - (stamp - lastCalled) - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return key; - } - } else { - count = 0; - } - return baseSetData(key, value); - }; - }()); + lastCalled = stamp + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return key + } + } else { + count = 0 + } + return baseSetData(key, value) + } + }()) /** * Converts `string` to a property path array. @@ -33832,13 +34008,13 @@ process.chdir = function (dir) { * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ - var stringToPath = memoize(function(string) { - var result = []; - toString(string).replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - }); + var stringToPath = memoize(function (string) { + var result = [] + toString(string).replace(rePropName, function (match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)) + }) + return result + }) /** * Converts `value` to a string key if it's not a string or symbol. @@ -33847,13 +34023,13 @@ process.chdir = function (dir) { * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ - function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } + function toKey (value) { + if (typeof value === 'string' || isSymbol(value)) { + return value + } + var result = (value + '') + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result + } /** * Converts `func` to its source code. @@ -33862,17 +34038,17 @@ process.chdir = function (dir) { * @param {Function} func The function to process. * @returns {string} Returns the source code. */ - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } + function toSource (func) { + if (func != null) { + try { + return funcToString.call(func) + } catch (e) {} + try { + return (func + '') + } catch (e) {} + } + return '' + } /** * Creates a clone of `wrapper`. @@ -33881,18 +34057,18 @@ process.chdir = function (dir) { * @param {Object} wrapper The wrapper to clone. * @returns {Object} Returns the cloned wrapper. */ - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; - } + function wrapperClone (wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone() + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__) + result.__actions__ = copyArray(wrapper.__actions__) + result.__index__ = wrapper.__index__ + result.__values__ = wrapper.__values__ + return result + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates an array of elements split into groups the length of `size`. @@ -33915,25 +34091,25 @@ process.chdir = function (dir) { * _.chunk(['a', 'b', 'c', 'd'], 3); * // => [['a', 'b', 'c'], ['d']] */ - function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array ? array.length : 0; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); + function chunk (array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1 + } else { + size = nativeMax(toInteger(size), 0) + } + var length = array ? array.length : 0 + if (!length || size < 1) { + return [] + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)) - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; - } + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)) + } + return result + } /** * Creates an array with all falsey values removed. The values `false`, `null`, @@ -33950,20 +34126,20 @@ process.chdir = function (dir) { * _.compact([0, 1, false, 2, '', 3]); * // => [1, 2, 3] */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; + function compact (array) { + var index = -1, + length = array ? array.length : 0, + resIndex = 0, + result = [] - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; - } + while (++index < length) { + var value = array[index] + if (value) { + result[resIndex++] = value + } + } + return result + } /** * Creates a new array concatenating `array` with any additional arrays @@ -33987,19 +34163,19 @@ process.chdir = function (dir) { * console.log(array); * // => [1] */ - function concat() { - var length = arguments.length, - args = Array(length ? length - 1 : 0), - array = arguments[0], - index = length; + function concat () { + var length = arguments.length, + args = Array(length ? length - 1 : 0), + array = arguments[0], + index = length - while (index--) { - args[index - 1] = arguments[index]; - } - return length + while (index--) { + args[index - 1] = arguments[index] + } + return length ? arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)) - : []; - } + : [] + } /** * Creates an array of unique `array` values not included in the other given @@ -34020,11 +34196,11 @@ process.chdir = function (dir) { * _.difference([2, 1], [2, 3]); * // => [1] */ - var difference = rest(function(array, values) { - return isArrayLikeObject(array) + var difference = rest(function (array, values) { + return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; - }); + : [] + }) /** * This method is like `_.difference` except that it accepts `iteratee` which @@ -34050,15 +34226,15 @@ process.chdir = function (dir) { * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); * // => [{ 'x': 2 }] */ - var differenceBy = rest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) + var differenceBy = rest(function (array, values) { + var iteratee = last(values) + if (isArrayLikeObject(iteratee)) { + iteratee = undefined + } + return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee)) - : []; - }); + : [] + }) /** * This method is like `_.difference` except that it accepts `comparator` @@ -34081,15 +34257,15 @@ process.chdir = function (dir) { * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); * // => [{ 'x': 2, 'y': 1 }] */ - var differenceWith = rest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) + var differenceWith = rest(function (array, values) { + var comparator = last(values) + if (isArrayLikeObject(comparator)) { + comparator = undefined + } + return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) - : []; - }); + : [] + }) /** * Creates a slice of `array` with `n` elements dropped from the beginning. @@ -34116,14 +34292,14 @@ process.chdir = function (dir) { * _.drop([1, 2, 3], 0); * // => [1, 2, 3] */ - function drop(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } + function drop (array, n, guard) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + n = (guard || n === undefined) ? 1 : toInteger(n) + return baseSlice(array, n < 0 ? 0 : n, length) + } /** * Creates a slice of `array` with `n` elements dropped from the end. @@ -34150,15 +34326,15 @@ process.chdir = function (dir) { * _.dropRight([1, 2, 3], 0); * // => [1, 2, 3] */ - function dropRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } + function dropRight (array, n, guard) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + n = (guard || n === undefined) ? 1 : toInteger(n) + n = length - n + return baseSlice(array, 0, n < 0 ? 0 : n) + } /** * Creates a slice of `array` excluding elements dropped from the end. @@ -34196,11 +34372,11 @@ process.chdir = function (dir) { * _.dropRightWhile(users, 'active'); * // => objects for ['barney', 'fred', 'pebbles'] */ - function dropRightWhile(array, predicate) { - return (array && array.length) + function dropRightWhile (array, predicate) { + return (array && array.length) ? baseWhile(array, getIteratee(predicate, 3), true, true) - : []; - } + : [] + } /** * Creates a slice of `array` excluding elements dropped from the beginning. @@ -34238,11 +34414,11 @@ process.chdir = function (dir) { * _.dropWhile(users, 'active'); * // => objects for ['barney', 'fred', 'pebbles'] */ - function dropWhile(array, predicate) { - return (array && array.length) + function dropWhile (array, predicate) { + return (array && array.length) ? baseWhile(array, getIteratee(predicate, 3), true) - : []; - } + : [] + } /** * Fills elements of `array` with `value` from `start` up to, but not @@ -34273,17 +34449,17 @@ process.chdir = function (dir) { * _.fill([4, 6, 8, 10], '*', 1, 3); * // => [4, '*', '*', 10] */ - function fill(array, value, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } + function fill (array, value, start, end) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + if (start && typeof start !== 'number' && isIterateeCall(array, value, start)) { + start = 0 + end = length + } + return baseFill(array, value, start, end) + } /** * This method is like `_.find` except that it returns the index of the first @@ -34321,17 +34497,17 @@ process.chdir = function (dir) { * _.findIndex(users, 'active'); * // => 2 */ - function findIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, getIteratee(predicate, 3), index); - } + function findIndex (array, predicate, fromIndex) { + var length = array ? array.length : 0 + if (!length) { + return -1 + } + var index = fromIndex == null ? 0 : toInteger(fromIndex) + if (index < 0) { + index = nativeMax(length + index, 0) + } + return baseFindIndex(array, getIteratee(predicate, 3), index) + } /** * This method is like `_.findIndex` except that it iterates over elements @@ -34369,20 +34545,20 @@ process.chdir = function (dir) { * _.findLastIndex(users, 'active'); * // => 0 */ - function findLastIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 + function findLastIndex (array, predicate, fromIndex) { + var length = array ? array.length : 0 + if (!length) { + return -1 + } + var index = length - 1 + if (fromIndex !== undefined) { + index = toInteger(fromIndex) + index = fromIndex < 0 ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, getIteratee(predicate, 3), index, true); - } + : nativeMin(index, length - 1) + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true) + } /** * Flattens `array` a single level deep. @@ -34398,10 +34574,10 @@ process.chdir = function (dir) { * _.flatten([1, [2, [3, [4]], 5]]); * // => [1, 2, [3, [4]], 5] */ - function flatten(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, 1) : []; - } + function flatten (array) { + var length = array ? array.length : 0 + return length ? baseFlatten(array, 1) : [] + } /** * Recursively flattens `array`. @@ -34417,10 +34593,10 @@ process.chdir = function (dir) { * _.flattenDeep([1, [2, [3, [4]], 5]]); * // => [1, 2, 3, 4, 5] */ - function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, INFINITY) : []; - } + function flattenDeep (array) { + var length = array ? array.length : 0 + return length ? baseFlatten(array, INFINITY) : [] + } /** * Recursively flatten `array` up to `depth` times. @@ -34442,14 +34618,14 @@ process.chdir = function (dir) { * _.flattenDepth(array, 2); * // => [1, 2, 3, [4], 5] */ - function flattenDepth(array, depth) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } + function flattenDepth (array, depth) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + depth = depth === undefined ? 1 : toInteger(depth) + return baseFlatten(array, depth) + } /** * The inverse of `_.toPairs`; this method returns an object composed @@ -34466,17 +34642,17 @@ process.chdir = function (dir) { * _.fromPairs([['fred', 30], ['barney', 40]]); * // => { 'fred': 30, 'barney': 40 } */ - function fromPairs(pairs) { - var index = -1, - length = pairs ? pairs.length : 0, - result = {}; + function fromPairs (pairs) { + var index = -1, + length = pairs ? pairs.length : 0, + result = {} - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; - } + while (++index < length) { + var pair = pairs[index] + result[pair[0]] = pair[1] + } + return result + } /** * Gets the first element of `array`. @@ -34496,9 +34672,9 @@ process.chdir = function (dir) { * _.head([]); * // => undefined */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } + function head (array) { + return (array && array.length) ? array[0] : undefined + } /** * Gets the index at which the first occurrence of `value` is found in `array` @@ -34523,17 +34699,17 @@ process.chdir = function (dir) { * _.indexOf([1, 2, 1, 2], 2, 2); * // => 3 */ - function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); - } + function indexOf (array, value, fromIndex) { + var length = array ? array.length : 0 + if (!length) { + return -1 + } + var index = fromIndex == null ? 0 : toInteger(fromIndex) + if (index < 0) { + index = nativeMax(length + index, 0) + } + return baseIndexOf(array, value, index) + } /** * Gets all but the last element of `array`. @@ -34549,9 +34725,9 @@ process.chdir = function (dir) { * _.initial([1, 2, 3]); * // => [1, 2] */ - function initial(array) { - return dropRight(array, 1); - } + function initial (array) { + return dropRight(array, 1) + } /** * Creates an array of unique values that are included in all given arrays @@ -34570,12 +34746,12 @@ process.chdir = function (dir) { * _.intersection([2, 1], [2, 3]); * // => [2] */ - var intersection = rest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) + var intersection = rest(function (arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject) + return (mapped.length && mapped[0] === arrays[0]) ? baseIntersection(mapped) - : []; - }); + : [] + }) /** * This method is like `_.intersection` except that it accepts `iteratee` @@ -34600,19 +34776,19 @@ process.chdir = function (dir) { * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * // => [{ 'x': 1 }] */ - var intersectionBy = rest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); + var intersectionBy = rest(function (arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject) - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) + if (iteratee === last(mapped)) { + iteratee = undefined + } else { + mapped.pop() + } + return (mapped.length && mapped[0] === arrays[0]) ? baseIntersection(mapped, getIteratee(iteratee)) - : []; - }); + : [] + }) /** * This method is like `_.intersection` except that it accepts `comparator` @@ -34635,19 +34811,19 @@ process.chdir = function (dir) { * _.intersectionWith(objects, others, _.isEqual); * // => [{ 'x': 1, 'y': 2 }] */ - var intersectionWith = rest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); + var intersectionWith = rest(function (arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject) - if (comparator === last(mapped)) { - comparator = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) + if (comparator === last(mapped)) { + comparator = undefined + } else { + mapped.pop() + } + return (mapped.length && mapped[0] === arrays[0]) ? baseIntersection(mapped, undefined, comparator) - : []; - }); + : [] + }) /** * Converts all elements in `array` into a string separated by `separator`. @@ -34664,9 +34840,9 @@ process.chdir = function (dir) { * _.join(['a', 'b', 'c'], '~'); * // => 'a~b~c' */ - function join(array, separator) { - return array ? nativeJoin.call(array, separator) : ''; - } + function join (array, separator) { + return array ? nativeJoin.call(array, separator) : '' + } /** * Gets the last element of `array`. @@ -34682,10 +34858,10 @@ process.chdir = function (dir) { * _.last([1, 2, 3]); * // => 3 */ - function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; - } + function last (array) { + var length = array ? array.length : 0 + return length ? array[length - 1] : undefined + } /** * This method is like `_.indexOf` except that it iterates over elements of @@ -34708,30 +34884,30 @@ process.chdir = function (dir) { * _.lastIndexOf([1, 2, 1, 2], 2, 2); * // => 1 */ - function lastIndexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = ( + function lastIndexOf (array, value, fromIndex) { + var length = array ? array.length : 0 + if (!length) { + return -1 + } + var index = length + if (fromIndex !== undefined) { + index = toInteger(fromIndex) + index = ( index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1) - ) + 1; - } - if (value !== value) { - return indexOfNaN(array, index - 1, true); - } - while (index--) { - if (array[index] === value) { - return index; - } - } - return -1; - } + ) + 1 + } + if (value !== value) { + return indexOfNaN(array, index - 1, true) + } + while (index--) { + if (array[index] === value) { + return index + } + } + return -1 + } /** * Gets the element at index `n` of `array`. If `n` is negative, the nth @@ -34754,9 +34930,9 @@ process.chdir = function (dir) { * _.nth(array, -2); * // => 'c'; */ - function nth(array, n) { - return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; - } + function nth (array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined + } /** * Removes all given values from `array` using @@ -34781,7 +34957,7 @@ process.chdir = function (dir) { * console.log(array); * // => ['b', 'b'] */ - var pull = rest(pullAll); + var pull = rest(pullAll) /** * This method is like `_.pull` except that it accepts an array of values to remove. @@ -34803,11 +34979,11 @@ process.chdir = function (dir) { * console.log(array); * // => ['b', 'b'] */ - function pullAll(array, values) { - return (array && array.length && values && values.length) + function pullAll (array, values) { + return (array && array.length && values && values.length) ? basePullAll(array, values) - : array; - } + : array + } /** * This method is like `_.pullAll` except that it accepts `iteratee` which is @@ -34833,11 +35009,11 @@ process.chdir = function (dir) { * console.log(array); * // => [{ 'x': 2 }] */ - function pullAllBy(array, values, iteratee) { - return (array && array.length && values && values.length) + function pullAllBy (array, values, iteratee) { + return (array && array.length && values && values.length) ? basePullAll(array, values, getIteratee(iteratee)) - : array; - } + : array + } /** * This method is like `_.pullAll` except that it accepts `comparator` which @@ -34862,11 +35038,11 @@ process.chdir = function (dir) { * console.log(array); * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] */ - function pullAllWith(array, values, comparator) { - return (array && array.length && values && values.length) + function pullAllWith (array, values, comparator) { + return (array && array.length && values && values.length) ? basePullAll(array, values, undefined, comparator) - : array; - } + : array + } /** * Removes elements from `array` corresponding to `indexes` and returns an @@ -34892,18 +35068,18 @@ process.chdir = function (dir) { * console.log(pulled); * // => ['b', 'd'] */ - var pullAt = rest(function(array, indexes) { - indexes = baseFlatten(indexes, 1); + var pullAt = rest(function (array, indexes) { + indexes = baseFlatten(indexes, 1) - var length = array ? array.length : 0, - result = baseAt(array, indexes); + var length = array ? array.length : 0, + result = baseAt(array, indexes) - basePullAt(array, arrayMap(indexes, function(index) { - return isIndex(index, length) ? +index : index; - }).sort(compareAscending)); + basePullAt(array, arrayMap(indexes, function (index) { + return isIndex(index, length) ? +index : index + }).sort(compareAscending)) - return result; - }); + return result + }) /** * Removes all elements from `array` that `predicate` returns truthy for @@ -34934,26 +35110,26 @@ process.chdir = function (dir) { * console.log(evens); * // => [2, 4] */ - function remove(array, predicate) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, - indexes = [], - length = array.length; - - predicate = getIteratee(predicate, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } + function remove (array, predicate) { + var result = [] + if (!(array && array.length)) { + return result + } + var index = -1, + indexes = [], + length = array.length + + predicate = getIteratee(predicate, 3) + while (++index < length) { + var value = array[index] + if (predicate(value, index, array)) { + result.push(value) + indexes.push(index) + } + } + basePullAt(array, indexes) + return result + } /** * Reverses `array` so that the first element becomes the last, the second @@ -34978,9 +35154,9 @@ process.chdir = function (dir) { * console.log(array); * // => [3, 2, 1] */ - function reverse(array) { - return array ? nativeReverse.call(array) : array; - } + function reverse (array) { + return array ? nativeReverse.call(array) : array + } /** * Creates a slice of `array` from `start` up to, but not including, `end`. @@ -34998,21 +35174,20 @@ process.chdir = function (dir) { * @param {number} [end=array.length] The end position. * @returns {Array} Returns the slice of `array`. */ - function slice(array, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - else { - start = start == null ? 0 : toInteger(start); - end = end === undefined ? length : toInteger(end); - } - return baseSlice(array, start, end); - } + function slice (array, start, end) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + if (end && typeof end !== 'number' && isIterateeCall(array, start, end)) { + start = 0 + end = length + } else { + start = start == null ? 0 : toInteger(start) + end = end === undefined ? length : toInteger(end) + } + return baseSlice(array, start, end) + } /** * Uses a binary search to determine the lowest index at which `value` @@ -35031,9 +35206,9 @@ process.chdir = function (dir) { * _.sortedIndex([30, 50], 40); * // => 1 */ - function sortedIndex(array, value) { - return baseSortedIndex(array, value); - } + function sortedIndex (array, value) { + return baseSortedIndex(array, value) + } /** * This method is like `_.sortedIndex` except that it accepts `iteratee` @@ -35061,9 +35236,9 @@ process.chdir = function (dir) { * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); * // => 0 */ - function sortedIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee)); - } + function sortedIndexBy (array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee)) + } /** * This method is like `_.indexOf` except that it performs a binary @@ -35081,16 +35256,16 @@ process.chdir = function (dir) { * _.sortedIndexOf([4, 5, 5, 5, 6], 5); * // => 1 */ - function sortedIndexOf(array, value) { - var length = array ? array.length : 0; - if (length) { - var index = baseSortedIndex(array, value); - if (index < length && eq(array[index], value)) { - return index; - } - } - return -1; - } + function sortedIndexOf (array, value) { + var length = array ? array.length : 0 + if (length) { + var index = baseSortedIndex(array, value) + if (index < length && eq(array[index], value)) { + return index + } + } + return -1 + } /** * This method is like `_.sortedIndex` except that it returns the highest @@ -35110,9 +35285,9 @@ process.chdir = function (dir) { * _.sortedLastIndex([4, 5, 5, 5, 6], 5); * // => 4 */ - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true); - } + function sortedLastIndex (array, value) { + return baseSortedIndex(array, value, true) + } /** * This method is like `_.sortedLastIndex` except that it accepts `iteratee` @@ -35140,9 +35315,9 @@ process.chdir = function (dir) { * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); * // => 1 */ - function sortedLastIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee), true); - } + function sortedLastIndexBy (array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee), true) + } /** * This method is like `_.lastIndexOf` except that it performs a binary @@ -35160,16 +35335,16 @@ process.chdir = function (dir) { * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); * // => 3 */ - function sortedLastIndexOf(array, value) { - var length = array ? array.length : 0; - if (length) { - var index = baseSortedIndex(array, value, true) - 1; - if (eq(array[index], value)) { - return index; - } - } - return -1; - } + function sortedLastIndexOf (array, value) { + var length = array ? array.length : 0 + if (length) { + var index = baseSortedIndex(array, value, true) - 1 + if (eq(array[index], value)) { + return index + } + } + return -1 + } /** * This method is like `_.uniq` except that it's designed and optimized @@ -35186,11 +35361,11 @@ process.chdir = function (dir) { * _.sortedUniq([1, 1, 2]); * // => [1, 2] */ - function sortedUniq(array) { - return (array && array.length) + function sortedUniq (array) { + return (array && array.length) ? baseSortedUniq(array) - : []; - } + : [] + } /** * This method is like `_.uniqBy` except that it's designed and optimized @@ -35208,11 +35383,11 @@ process.chdir = function (dir) { * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); * // => [1.1, 2.3] */ - function sortedUniqBy(array, iteratee) { - return (array && array.length) + function sortedUniqBy (array, iteratee) { + return (array && array.length) ? baseSortedUniq(array, getIteratee(iteratee)) - : []; - } + : [] + } /** * Gets all but the first element of `array`. @@ -35228,9 +35403,9 @@ process.chdir = function (dir) { * _.tail([1, 2, 3]); * // => [2, 3] */ - function tail(array) { - return drop(array, 1); - } + function tail (array) { + return drop(array, 1) + } /** * Creates a slice of `array` with `n` elements taken from the beginning. @@ -35257,13 +35432,13 @@ process.chdir = function (dir) { * _.take([1, 2, 3], 0); * // => [] */ - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } + function take (array, n, guard) { + if (!(array && array.length)) { + return [] + } + n = (guard || n === undefined) ? 1 : toInteger(n) + return baseSlice(array, 0, n < 0 ? 0 : n) + } /** * Creates a slice of `array` with `n` elements taken from the end. @@ -35290,15 +35465,15 @@ process.chdir = function (dir) { * _.takeRight([1, 2, 3], 0); * // => [] */ - function takeRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } + function takeRight (array, n, guard) { + var length = array ? array.length : 0 + if (!length) { + return [] + } + n = (guard || n === undefined) ? 1 : toInteger(n) + n = length - n + return baseSlice(array, n < 0 ? 0 : n, length) + } /** * Creates a slice of `array` with elements taken from the end. Elements are @@ -35336,11 +35511,11 @@ process.chdir = function (dir) { * _.takeRightWhile(users, 'active'); * // => [] */ - function takeRightWhile(array, predicate) { - return (array && array.length) + function takeRightWhile (array, predicate) { + return (array && array.length) ? baseWhile(array, getIteratee(predicate, 3), false, true) - : []; - } + : [] + } /** * Creates a slice of `array` with elements taken from the beginning. Elements @@ -35378,11 +35553,11 @@ process.chdir = function (dir) { * _.takeWhile(users, 'active'); * // => [] */ - function takeWhile(array, predicate) { - return (array && array.length) + function takeWhile (array, predicate) { + return (array && array.length) ? baseWhile(array, getIteratee(predicate, 3)) - : []; - } + : [] + } /** * Creates an array of unique values, in order, from all given arrays using @@ -35400,9 +35575,9 @@ process.chdir = function (dir) { * _.union([2], [1, 2]); * // => [2, 1] */ - var union = rest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); + var union = rest(function (arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)) + }) /** * This method is like `_.union` except that it accepts `iteratee` which is @@ -35427,13 +35602,13 @@ process.chdir = function (dir) { * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * // => [{ 'x': 1 }, { 'x': 2 }] */ - var unionBy = rest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee)); - }); + var unionBy = rest(function (arrays) { + var iteratee = last(arrays) + if (isArrayLikeObject(iteratee)) { + iteratee = undefined + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee)) + }) /** * This method is like `_.union` except that it accepts `comparator` which @@ -35455,13 +35630,13 @@ process.chdir = function (dir) { * _.unionWith(objects, others, _.isEqual); * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] */ - var unionWith = rest(function(arrays) { - var comparator = last(arrays); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); - }); + var unionWith = rest(function (arrays) { + var comparator = last(arrays) + if (isArrayLikeObject(comparator)) { + comparator = undefined + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator) + }) /** * Creates a duplicate-free version of an array, using @@ -35480,11 +35655,11 @@ process.chdir = function (dir) { * _.uniq([2, 1, 2]); * // => [2, 1] */ - function uniq(array) { - return (array && array.length) + function uniq (array) { + return (array && array.length) ? baseUniq(array) - : []; - } + : [] + } /** * This method is like `_.uniq` except that it accepts `iteratee` which is @@ -35508,11 +35683,11 @@ process.chdir = function (dir) { * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); * // => [{ 'x': 1 }, { 'x': 2 }] */ - function uniqBy(array, iteratee) { - return (array && array.length) + function uniqBy (array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee)) - : []; - } + : [] + } /** * This method is like `_.uniq` except that it accepts `comparator` which @@ -35533,11 +35708,11 @@ process.chdir = function (dir) { * _.uniqWith(objects, _.isEqual); * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] */ - function uniqWith(array, comparator) { - return (array && array.length) + function uniqWith (array, comparator) { + return (array && array.length) ? baseUniq(array, undefined, comparator) - : []; - } + : [] + } /** * This method is like `_.zip` except that it accepts an array of grouped @@ -35558,21 +35733,21 @@ process.chdir = function (dir) { * _.unzip(zipped); * // => [['fred', 'barney'], [30, 40], [true, false]] */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - return baseTimes(length, function(index) { - return arrayMap(array, baseProperty(index)); - }); - } + function unzip (array) { + if (!(array && array.length)) { + return [] + } + var length = 0 + array = arrayFilter(array, function (group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length) + return true + } + }) + return baseTimes(length, function (index) { + return arrayMap(array, baseProperty(index)) + }) + } /** * This method is like `_.unzip` except that it accepts `iteratee` to specify @@ -35595,18 +35770,18 @@ process.chdir = function (dir) { * _.unzipWith(zipped, _.add); * // => [3, 30, 300] */ - function unzipWith(array, iteratee) { - if (!(array && array.length)) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - return arrayMap(result, function(group) { - return apply(iteratee, undefined, group); - }); - } + function unzipWith (array, iteratee) { + if (!(array && array.length)) { + return [] + } + var result = unzip(array) + if (iteratee == null) { + return result + } + return arrayMap(result, function (group) { + return apply(iteratee, undefined, group) + }) + } /** * Creates an array excluding all given values using @@ -35626,11 +35801,11 @@ process.chdir = function (dir) { * _.without([2, 1, 2, 3], 1, 2); * // => [3] */ - var without = rest(function(array, values) { - return isArrayLikeObject(array) + var without = rest(function (array, values) { + return isArrayLikeObject(array) ? baseDifference(array, values) - : []; - }); + : [] + }) /** * Creates an array of unique values that is the @@ -35650,9 +35825,9 @@ process.chdir = function (dir) { * _.xor([2, 1], [2, 3]); * // => [1, 3] */ - var xor = rest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); + var xor = rest(function (arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)) + }) /** * This method is like `_.xor` except that it accepts `iteratee` which is @@ -35677,13 +35852,13 @@ process.chdir = function (dir) { * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * // => [{ 'x': 2 }] */ - var xorBy = rest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee)); - }); + var xorBy = rest(function (arrays) { + var iteratee = last(arrays) + if (isArrayLikeObject(iteratee)) { + iteratee = undefined + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee)) + }) /** * This method is like `_.xor` except that it accepts `comparator` which is @@ -35705,13 +35880,13 @@ process.chdir = function (dir) { * _.xorWith(objects, others, _.isEqual); * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] */ - var xorWith = rest(function(arrays) { - var comparator = last(arrays); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); - }); + var xorWith = rest(function (arrays) { + var comparator = last(arrays) + if (isArrayLikeObject(comparator)) { + comparator = undefined + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator) + }) /** * Creates an array of grouped elements, the first of which contains the @@ -35729,7 +35904,7 @@ process.chdir = function (dir) { * _.zip(['fred', 'barney'], [30, 40], [true, false]); * // => [['fred', 30, true], ['barney', 40, false]] */ - var zip = rest(unzip); + var zip = rest(unzip) /** * This method is like `_.fromPairs` except that it accepts two arrays, @@ -35747,9 +35922,9 @@ process.chdir = function (dir) { * _.zipObject(['a', 'b'], [1, 2]); * // => { 'a': 1, 'b': 2 } */ - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue); - } + function zipObject (props, values) { + return baseZipObject(props || [], values || [], assignValue) + } /** * This method is like `_.zipObject` except that it supports property paths. @@ -35766,9 +35941,9 @@ process.chdir = function (dir) { * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } */ - function zipObjectDeep(props, values) { - return baseZipObject(props || [], values || [], baseSet); - } + function zipObjectDeep (props, values) { + return baseZipObject(props || [], values || [], baseSet) + } /** * This method is like `_.zip` except that it accepts `iteratee` to specify @@ -35789,15 +35964,15 @@ process.chdir = function (dir) { * }); * // => [111, 222] */ - var zipWith = rest(function(arrays) { - var length = arrays.length, - iteratee = length > 1 ? arrays[length - 1] : undefined; + var zipWith = rest(function (arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined - iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; - return unzipWith(arrays, iteratee); - }); + iteratee = typeof iteratee === 'function' ? (arrays.pop(), iteratee) : undefined + return unzipWith(arrays, iteratee) + }) - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates a `lodash` wrapper instance that wraps `value` with explicit method @@ -35828,11 +36003,11 @@ process.chdir = function (dir) { * .value(); * // => 'pebbles is 1' */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } + function chain (value) { + var result = lodash(value) + result.__chain__ = true + return result + } /** * This method invokes `interceptor` and returns `value`. The interceptor @@ -35857,10 +36032,10 @@ process.chdir = function (dir) { * .value(); * // => [2, 1] */ - function tap(value, interceptor) { - interceptor(value); - return value; - } + function tap (value, interceptor) { + interceptor(value) + return value + } /** * This method is like `_.tap` except that it returns the result of `interceptor`. @@ -35885,9 +36060,9 @@ process.chdir = function (dir) { * .value(); * // => ['abc'] */ - function thru(value, interceptor) { - return interceptor(value); - } + function thru (value, interceptor) { + return interceptor(value) + } /** * This method is the wrapper version of `_.at`. @@ -35905,30 +36080,30 @@ process.chdir = function (dir) { * _(object).at(['a[0].b.c', 'a[1]']).value(); * // => [3, 4] */ - var wrapperAt = rest(function(paths) { - paths = baseFlatten(paths, 1); - var length = paths.length, - start = length ? paths[0] : 0, - value = this.__wrapped__, - interceptor = function(object) { return baseAt(object, paths); }; + var wrapperAt = rest(function (paths) { + paths = baseFlatten(paths, 1) + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function (object) { return baseAt(object, paths) } - if (length > 1 || this.__actions__.length || + if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - 'func': thru, - 'args': [interceptor], - 'thisArg': undefined - }); - return new LodashWrapper(value, this.__chain__).thru(function(array) { - if (length && !array.length) { - array.push(undefined); - } - return array; - }); - }); + return this.thru(interceptor) + } + value = value.slice(start, +start + (length ? 1 : 0)) + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }) + return new LodashWrapper(value, this.__chain__).thru(function (array) { + if (length && !array.length) { + array.push(undefined) + } + return array + }) + }) /** * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. @@ -35957,9 +36132,9 @@ process.chdir = function (dir) { * .value(); * // => { 'user': 'barney' } */ - function wrapperChain() { - return chain(this); - } + function wrapperChain () { + return chain(this) + } /** * Executes the chain sequence and returns the wrapped result. @@ -35987,9 +36162,9 @@ process.chdir = function (dir) { * console.log(array); * // => [1, 2, 3] */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } + function wrapperCommit () { + return new LodashWrapper(this.value(), this.__chain__) + } /** * Gets the next value on a wrapped object following the @@ -36013,15 +36188,15 @@ process.chdir = function (dir) { * wrapped.next(); * // => { 'done': true, 'value': undefined } */ - function wrapperNext() { - if (this.__values__ === undefined) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, - value = done ? undefined : this.__values__[this.__index__++]; + function wrapperNext () { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()) + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++] - return { 'done': done, 'value': value }; - } + return { 'done': done, 'value': value } + } /** * Enables the wrapper to be iterable. @@ -36041,9 +36216,9 @@ process.chdir = function (dir) { * Array.from(wrapped); * // => [1, 2] */ - function wrapperToIterator() { - return this; - } + function wrapperToIterator () { + return this + } /** * Creates a clone of the chain sequence planting `value` as the wrapped value. @@ -36069,25 +36244,25 @@ process.chdir = function (dir) { * wrapped.value(); * // => [1, 4] */ - function wrapperPlant(value) { - var result, - parent = this; + function wrapperPlant (value) { + var result, + parent = this - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - clone.__index__ = 0; - clone.__values__ = undefined; - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent) + clone.__index__ = 0 + clone.__values__ = undefined + if (result) { + previous.__wrapped__ = clone + } else { + result = clone + } + var previous = clone + parent = parent.__wrapped__ + } + previous.__wrapped__ = value + return result + } /** * This method is the wrapper version of `_.reverse`. @@ -36109,23 +36284,23 @@ process.chdir = function (dir) { * console.log(array); * // => [3, 2, 1] */ - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - 'func': thru, - 'args': [reverse], - 'thisArg': undefined - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } + function wrapperReverse () { + var value = this.__wrapped__ + if (value instanceof LazyWrapper) { + var wrapped = value + if (this.__actions__.length) { + wrapped = new LazyWrapper(this) + } + wrapped = wrapped.reverse() + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }) + return new LodashWrapper(wrapped, this.__chain__) + } + return this.thru(reverse) + } /** * Executes the chain sequence to resolve the unwrapped value. @@ -36141,11 +36316,11 @@ process.chdir = function (dir) { * _([1, 2, 3]).value(); * // => [1, 2, 3] */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } + function wrapperValue () { + return baseWrapperValue(this.__wrapped__, this.__actions__) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Creates an object composed of keys generated from the results of running @@ -36170,9 +36345,9 @@ process.chdir = function (dir) { * _.countBy(['one', 'two', 'three'], 'length'); * // => { '3': 2, '5': 1 } */ - var countBy = createAggregator(function(result, value, key) { - hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); - }); + var countBy = createAggregator(function (result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1) + }) /** * Checks if `predicate` returns truthy for **all** elements of `collection`. @@ -36211,13 +36386,13 @@ process.chdir = function (dir) { * _.every(users, 'active'); * // => false */ - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } + function every (collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined + } + return func(collection, getIteratee(predicate, 3)) + } /** * Iterates over elements of `collection`, returning an array of all elements @@ -36255,10 +36430,10 @@ process.chdir = function (dir) { * _.filter(users, 'active'); * // => objects for ['barney'] */ - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } + function filter (collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter + return func(collection, getIteratee(predicate, 3)) + } /** * Iterates over elements of `collection`, returning the first element @@ -36297,7 +36472,7 @@ process.chdir = function (dir) { * _.find(users, 'active'); * // => object for 'barney' */ - var find = createFind(findIndex); + var find = createFind(findIndex) /** * This method is like `_.find` except that it iterates over elements of @@ -36319,7 +36494,7 @@ process.chdir = function (dir) { * }); * // => 3 */ - var findLast = createFind(findLastIndex); + var findLast = createFind(findLastIndex) /** * Creates a flattened array of values by running each element in `collection` @@ -36343,9 +36518,9 @@ process.chdir = function (dir) { * _.flatMap([1, 2], duplicate); * // => [1, 1, 2, 2] */ - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); - } + function flatMap (collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1) + } /** * This method is like `_.flatMap` except that it recursively flattens the @@ -36368,9 +36543,9 @@ process.chdir = function (dir) { * _.flatMapDeep([1, 2], duplicate); * // => [1, 1, 2, 2] */ - function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); - } + function flatMapDeep (collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY) + } /** * This method is like `_.flatMap` except that it recursively flattens the @@ -36394,10 +36569,10 @@ process.chdir = function (dir) { * _.flatMapDepth([1, 2], duplicate, 2); * // => [[1, 1], [2, 2]] */ - function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); - } + function flatMapDepth (collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth) + return baseFlatten(map(collection, iteratee), depth) + } /** * Iterates over elements of `collection` and invokes `iteratee` for each element. @@ -36429,10 +36604,10 @@ process.chdir = function (dir) { * }); * // => Logs 'a' then 'b' (iteration order is not guaranteed). */ - function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, getIteratee(iteratee, 3)); - } + function forEach (collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach + return func(collection, getIteratee(iteratee, 3)) + } /** * This method is like `_.forEach` except that it iterates over elements of @@ -36454,10 +36629,10 @@ process.chdir = function (dir) { * }); * // => Logs `2` then `1`. */ - function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, getIteratee(iteratee, 3)); - } + function forEachRight (collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight + return func(collection, getIteratee(iteratee, 3)) + } /** * Creates an object composed of keys generated from the results of running @@ -36483,13 +36658,13 @@ process.chdir = function (dir) { * _.groupBy(['one', 'two', 'three'], 'length'); * // => { '3': ['one', 'two'], '5': ['three'] } */ - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - result[key] = [value]; - } - }); + var groupBy = createAggregator(function (result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value) + } else { + result[key] = [value] + } + }) /** * Checks if `value` is in `collection`. If `collection` is a string, it's @@ -36521,18 +36696,18 @@ process.chdir = function (dir) { * _.includes('pebbles', 'eb'); * // => true */ - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + function includes (collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection) + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0 - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) + var length = collection.length + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0) + } + return isString(collection) ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); - } + : (!!length && baseIndexOf(collection, value, fromIndex) > -1) + } /** * Invokes the method at `path` of each element in `collection`, returning @@ -36557,18 +36732,18 @@ process.chdir = function (dir) { * _.invokeMap([123, 456], String.prototype.split, ''); * // => [['1', '2', '3'], ['4', '5', '6']] */ - var invokeMap = rest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - isProp = isKey(path), - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); - result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); - }); - return result; - }); + var invokeMap = rest(function (collection, path, args) { + var index = -1, + isFunc = typeof path === 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : [] + + baseEach(collection, function (value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined) + result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args) + }) + return result + }) /** * Creates an object composed of keys generated from the results of running @@ -36599,9 +36774,9 @@ process.chdir = function (dir) { * _.keyBy(array, 'dir'); * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } */ - var keyBy = createAggregator(function(result, value, key) { - result[key] = value; - }); + var keyBy = createAggregator(function (result, value, key) { + result[key] = value + }) /** * Creates an array of values by running each element in `collection` thru @@ -36646,10 +36821,10 @@ process.chdir = function (dir) { * _.map(users, 'user'); * // => ['barney', 'fred'] */ - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee, 3)); - } + function map (collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap + return func(collection, getIteratee(iteratee, 3)) + } /** * This method is like `_.sortBy` except that it allows specifying the sort @@ -36680,19 +36855,19 @@ process.chdir = function (dir) { * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] */ - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } + function orderBy (collection, iteratees, orders, guard) { + if (collection == null) { + return [] + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees] + } + orders = guard ? undefined : orders + if (!isArray(orders)) { + orders = orders == null ? [] : [orders] + } + return baseOrderBy(collection, iteratees, orders) + } /** * Creates an array of elements split into two groups, the first of which @@ -36731,9 +36906,9 @@ process.chdir = function (dir) { * _.partition(users, 'active'); * // => objects for [['fred'], ['barney', 'pebbles']] */ - var partition = createAggregator(function(result, value, key) { - result[key ? 0 : 1].push(value); - }, function() { return [[], []]; }); + var partition = createAggregator(function (result, value, key) { + result[key ? 0 : 1].push(value) + }, function () { return [[], []] }) /** * Reduces `collection` to a value which is the accumulated result of running @@ -36772,12 +36947,12 @@ process.chdir = function (dir) { * }, {}); * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) */ - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3; + function reduce (collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3 - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); - } + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach) + } /** * This method is like `_.reduce` except that it iterates over elements of @@ -36801,12 +36976,12 @@ process.chdir = function (dir) { * }, []); * // => [4, 5, 2, 3, 0, 1] */ - function reduceRight(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, - initAccum = arguments.length < 3; + function reduceRight (collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3 - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); - } + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight) + } /** * The opposite of `_.filter`; this method returns the elements of `collection` @@ -36843,13 +37018,13 @@ process.chdir = function (dir) { * _.reject(users, 'active'); * // => objects for ['barney'] */ - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - predicate = getIteratee(predicate, 3); - return func(collection, function(value, index, collection) { - return !predicate(value, index, collection); - }); - } + function reject (collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter + predicate = getIteratee(predicate, 3) + return func(collection, function (value, index, collection) { + return !predicate(value, index, collection) + }) + } /** * Gets a random element from `collection`. @@ -36865,12 +37040,12 @@ process.chdir = function (dir) { * _.sample([1, 2, 3, 4]); * // => 2 */ - function sample(collection) { - var array = isArrayLike(collection) ? collection : values(collection), - length = array.length; + function sample (collection) { + var array = isArrayLike(collection) ? collection : values(collection), + length = array.length - return length > 0 ? array[baseRandom(0, length - 1)] : undefined; - } + return length > 0 ? array[baseRandom(0, length - 1)] : undefined + } /** * Gets `n` random elements at unique keys from `collection` up to the @@ -36892,27 +37067,27 @@ process.chdir = function (dir) { * _.sampleSize([1, 2, 3], 4); * // => [2, 3, 1] */ - function sampleSize(collection, n, guard) { - var index = -1, - result = toArray(collection), - length = result.length, - lastIndex = length - 1; + function sampleSize (collection, n, guard) { + var index = -1, + result = toArray(collection), + length = result.length, + lastIndex = length - 1 - if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { - n = 1; - } else { - n = baseClamp(toInteger(n), 0, length); - } - while (++index < n) { - var rand = baseRandom(index, lastIndex), - value = result[rand]; + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1 + } else { + n = baseClamp(toInteger(n), 0, length) + } + while (++index < n) { + var rand = baseRandom(index, lastIndex), + value = result[rand] - result[rand] = result[index]; - result[index] = value; - } - result.length = n; - return result; - } + result[rand] = result[index] + result[index] = value + } + result.length = n + return result + } /** * Creates an array of shuffled values, using a version of the @@ -36929,9 +37104,9 @@ process.chdir = function (dir) { * _.shuffle([1, 2, 3, 4]); * // => [4, 1, 3, 2] */ - function shuffle(collection) { - return sampleSize(collection, MAX_ARRAY_LENGTH); - } + function shuffle (collection) { + return sampleSize(collection, MAX_ARRAY_LENGTH) + } /** * Gets the size of `collection` by returning its length for array-like @@ -36954,22 +37129,22 @@ process.chdir = function (dir) { * _.size('pebbles'); * // => 7 */ - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - var result = collection.length; - return (result && isString(collection)) ? stringSize(collection) : result; - } - if (isObjectLike(collection)) { - var tag = getTag(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - } - return keys(collection).length; - } + function size (collection) { + if (collection == null) { + return 0 + } + if (isArrayLike(collection)) { + var result = collection.length + return (result && isString(collection)) ? stringSize(collection) : result + } + if (isObjectLike(collection)) { + var tag = getTag(collection) + if (tag == mapTag || tag == setTag) { + return collection.size + } + } + return keys(collection).length + } /** * Checks if `predicate` returns truthy for **any** element of `collection`. @@ -37008,13 +37183,13 @@ process.chdir = function (dir) { * _.some(users, 'active'); * // => true */ - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } + function some (collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined + } + return func(collection, getIteratee(predicate, 3)) + } /** * Creates an array of elements, sorted in ascending order by the results of @@ -37050,24 +37225,24 @@ process.chdir = function (dir) { * }); * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] */ - var sortBy = rest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - iteratees = (iteratees.length == 1 && isArray(iteratees[0])) + var sortBy = rest(function (collection, iteratees) { + if (collection == null) { + return [] + } + var length = iteratees.length + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = [] + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]] + } + iteratees = (iteratees.length == 1 && isArray(iteratees[0])) ? iteratees[0] - : baseFlatten(iteratees, 1, isFlattenableIteratee); + : baseFlatten(iteratees, 1, isFlattenableIteratee) - return baseOrderBy(collection, iteratees, []); - }); + return baseOrderBy(collection, iteratees, []) + }) - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Gets the timestamp of the number of milliseconds that have elapsed since @@ -37085,11 +37260,11 @@ process.chdir = function (dir) { * }, _.now()); * // => Logs the number of milliseconds it took for the deferred invocation. */ - function now() { - return Date.now(); - } + function now () { + return Date.now() + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * The opposite of `_.before`; this method creates a function that invokes @@ -37115,17 +37290,17 @@ process.chdir = function (dir) { * }); * // => Logs 'done saving!' after the two async saves have completed. */ - function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } + function after (n, func) { + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + n = toInteger(n) + return function () { + if (--n < 1) { + return func.apply(this, arguments) + } + } + } /** * Creates a function that invokes `func`, with up to `n` arguments, @@ -37144,11 +37319,11 @@ process.chdir = function (dir) { * _.map(['6', '8', '10'], _.ary(parseInt, 1)); * // => [6, 8, 10] */ - function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); - } + function ary (func, n, guard) { + n = guard ? undefined : n + n = (func && n == null) ? func.length : n + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n) + } /** * Creates a function that invokes `func`, with the `this` binding and arguments @@ -37167,22 +37342,22 @@ process.chdir = function (dir) { * jQuery(element).on('click', _.before(5, addContactToList)); * // => allows adding up to 4 contacts to the list */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } + function before (n, func) { + var result + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + n = toInteger(n) + return function () { + if (--n > 0) { + result = func.apply(this, arguments) + } + if (n <= 1) { + func = undefined + } + return result + } + } /** * Creates a function that invokes `func` with the `this` binding of `thisArg` @@ -37219,14 +37394,14 @@ process.chdir = function (dir) { * bound('hi'); * // => 'hi fred!' */ - var bind = rest(function(func, thisArg, partials) { - var bitmask = BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= PARTIAL_FLAG; - } - return createWrapper(func, bitmask, thisArg, partials, holders); - }); + var bind = rest(function (func, thisArg, partials) { + var bitmask = BIND_FLAG + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)) + bitmask |= PARTIAL_FLAG + } + return createWrapper(func, bitmask, thisArg, partials, holders) + }) /** * Creates a function that invokes the method at `object[key]` with `partials` @@ -37273,14 +37448,14 @@ process.chdir = function (dir) { * bound('hi'); * // => 'hiya fred!' */ - var bindKey = rest(function(object, key, partials) { - var bitmask = BIND_FLAG | BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= PARTIAL_FLAG; - } - return createWrapper(key, bitmask, object, partials, holders); - }); + var bindKey = rest(function (object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)) + bitmask |= PARTIAL_FLAG + } + return createWrapper(key, bitmask, object, partials, holders) + }) /** * Creates a function that accepts arguments of `func` and either invokes @@ -37323,12 +37498,12 @@ process.chdir = function (dir) { * curried(1)(_, 3)(2); * // => [1, 2, 3] */ - function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curry.placeholder; - return result; - } + function curry (func, arity, guard) { + arity = guard ? undefined : arity + var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity) + result.placeholder = curry.placeholder + return result + } /** * This method is like `_.curry` except that arguments are applied to `func` @@ -37368,12 +37543,12 @@ process.chdir = function (dir) { * curried(3)(1, _)(2); * // => [1, 2, 3] */ - function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryRight.placeholder; - return result; - } + function curryRight (func, arity, guard) { + arity = guard ? undefined : arity + var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity) + result.placeholder = curryRight.placeholder + return result + } /** * Creates a debounced function that delays invoking `func` until after `wait` @@ -37425,124 +37600,124 @@ process.chdir = function (dir) { * // Cancel the trailing debounced invocation. * jQuery(window).on('popstate', debounced.cancel); */ - function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } + function debounce (func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true + + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + wait = toNumber(wait) || 0 + if (isObject(options)) { + leading = !!options.leading + maxing = 'maxWait' in options + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait + trailing = 'trailing' in options ? !!options.trailing : trailing + } - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; + function invokeFunc (time) { + var args = lastArgs, + thisArg = lastThis - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } + lastArgs = lastThis = undefined + lastInvokeTime = time + result = func.apply(thisArg, args) + return result + } - function leadingEdge(time) { + function leadingEdge (time) { // Reset any `maxWait` timer. - lastInvokeTime = time; + lastInvokeTime = time // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); + timerId = setTimeout(timerExpired, wait) // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } + return leading ? invokeFunc(time) : result + } - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - result = wait - timeSinceLastCall; + function remainingWait (time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + result = wait - timeSinceLastCall - return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; - } + return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result + } - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; + function shouldInvoke (time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime // Either this is the first call, activity has stopped and we're at the // trailing edge, the system time has gone backwards and we're treating // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)) + } - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } + function timerExpired () { + var time = now() + if (shouldInvoke(time)) { + return trailingEdge(time) + } // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } + timerId = setTimeout(timerExpired, remainingWait(time)) + } - function trailingEdge(time) { - timerId = undefined; + function trailingEdge (time) { + timerId = undefined // Only invoke if we have `lastArgs` which means `func` has been // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } + if (trailing && lastArgs) { + return invokeFunc(time) + } + lastArgs = lastThis = undefined + return result + } - function cancel() { - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } + function cancel () { + lastInvokeTime = 0 + lastArgs = lastCallTime = lastThis = timerId = undefined + } - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } + function flush () { + return timerId === undefined ? result : trailingEdge(now()) + } - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); + function debounced () { + var time = now(), + isInvoking = shouldInvoke(time) - lastArgs = arguments; - lastThis = this; - lastCallTime = time; + lastArgs = arguments + lastThis = this + lastCallTime = time - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime) + } + if (maxing) { // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } + timerId = setTimeout(timerExpired, wait) + return invokeFunc(lastCallTime) + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait) + } + return result + } + debounced.cancel = cancel + debounced.flush = flush + return debounced + } /** * Defers invoking the `func` until the current call stack has cleared. Any @@ -37562,9 +37737,9 @@ process.chdir = function (dir) { * }, 'deferred'); * // => Logs 'deferred' after one or more milliseconds. */ - var defer = rest(function(func, args) { - return baseDelay(func, 1, args); - }); + var defer = rest(function (func, args) { + return baseDelay(func, 1, args) + }) /** * Invokes `func` after `wait` milliseconds. Any additional arguments are @@ -37585,9 +37760,9 @@ process.chdir = function (dir) { * }, 1000, 'later'); * // => Logs 'later' after one second. */ - var delay = rest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); + var delay = rest(function (func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args) + }) /** * Creates a function that invokes `func` with arguments reversed. @@ -37607,9 +37782,9 @@ process.chdir = function (dir) { * flipped('a', 'b', 'c', 'd'); * // => ['d', 'c', 'b', 'a'] */ - function flip(func) { - return createWrapper(func, FLIP_FLAG); - } + function flip (func) { + return createWrapper(func, FLIP_FLAG) + } /** * Creates a function that memoizes the result of `func`. If `resolver` is @@ -37655,28 +37830,28 @@ process.chdir = function (dir) { * // Replace `_.memoize.Cache`. * _.memoize.Cache = WeakMap; */ - function memoize(func, resolver) { - if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; + function memoize (func, resolver) { + if (typeof func !== 'function' || (resolver && typeof resolver !== 'function')) { + throw new TypeError(FUNC_ERROR_TEXT) + } + var memoized = function () { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result); - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; - } + if (cache.has(key)) { + return cache.get(key) + } + var result = func.apply(this, args) + memoized.cache = cache.set(key, result) + return result + } + memoized.cache = new (memoize.Cache || MapCache)() + return memoized + } // Assign cache to `_.memoize`. - memoize.Cache = MapCache; + memoize.Cache = MapCache /** * Creates a function that negates the result of the predicate `func`. The @@ -37698,14 +37873,14 @@ process.chdir = function (dir) { * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); * // => [1, 3, 5] */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - return !predicate.apply(this, arguments); - }; - } + function negate (predicate) { + if (typeof predicate !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + return function () { + return !predicate.apply(this, arguments) + } + } /** * Creates a function that is restricted to invoking `func` once. Repeat calls @@ -37725,9 +37900,9 @@ process.chdir = function (dir) { * initialize(); * // `initialize` invokes `createApplication` once */ - function once(func) { - return before(2, func); - } + function once (func) { + return before(2, func) + } /** * Creates a function that invokes `func` with arguments transformed by @@ -37761,22 +37936,22 @@ process.chdir = function (dir) { * func(10, 5); * // => [100, 10] */ - var overArgs = rest(function(func, transforms) { - transforms = (transforms.length == 1 && isArray(transforms[0])) + var overArgs = rest(function (func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) ? arrayMap(transforms[0], baseUnary(getIteratee())) - : arrayMap(baseFlatten(transforms, 1, isFlattenableIteratee), baseUnary(getIteratee())); + : arrayMap(baseFlatten(transforms, 1, isFlattenableIteratee), baseUnary(getIteratee())) - var funcsLength = transforms.length; - return rest(function(args) { - var index = -1, - length = nativeMin(args.length, funcsLength); + var funcsLength = transforms.length + return rest(function (args) { + var index = -1, + length = nativeMin(args.length, funcsLength) - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); + while (++index < length) { + args[index] = transforms[index].call(this, args[index]) + } + return apply(func, this, args) + }) + }) /** * Creates a function that invokes `func` with `partials` prepended to the @@ -37811,10 +37986,10 @@ process.chdir = function (dir) { * greetFred('hi'); * // => 'hi fred' */ - var partial = rest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partial)); - return createWrapper(func, PARTIAL_FLAG, undefined, partials, holders); - }); + var partial = rest(function (func, partials) { + var holders = replaceHolders(partials, getHolder(partial)) + return createWrapper(func, PARTIAL_FLAG, undefined, partials, holders) + }) /** * This method is like `_.partial` except that partially applied arguments @@ -37848,10 +38023,10 @@ process.chdir = function (dir) { * sayHelloTo('fred'); * // => 'hello fred' */ - var partialRight = rest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrapper(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders); - }); + var partialRight = rest(function (func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)) + return createWrapper(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders) + }) /** * Creates a function that invokes `func` with arguments arranged according @@ -37875,9 +38050,9 @@ process.chdir = function (dir) { * rearged('b', 'c', 'a') * // => ['a', 'b', 'c'] */ - var rearg = rest(function(func, indexes) { - return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes, 1)); - }); + var rearg = rest(function (func, indexes) { + return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes, 1)) + }) /** * Creates a function that invokes `func` with the `this` binding of the @@ -37904,34 +38079,34 @@ process.chdir = function (dir) { * say('hello', 'fred', 'barney', 'pebbles'); * // => 'hello fred, barney, & pebbles' */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - switch (start) { - case 0: return func.call(this, array); - case 1: return func.call(this, args[0], array); - case 2: return func.call(this, args[0], args[1], array); - } - var otherArgs = Array(start + 1); - index = -1; - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = array; - return apply(func, this, otherArgs); - }; - } + function rest (func, start) { + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0) + return function () { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length) + + while (++index < length) { + array[index] = args[start + index] + } + switch (start) { + case 0: return func.call(this, array) + case 1: return func.call(this, args[0], array) + case 2: return func.call(this, args[0], args[1], array) + } + var otherArgs = Array(start + 1) + index = -1 + while (++index < start) { + otherArgs[index] = args[index] + } + otherArgs[start] = array + return apply(func, this, otherArgs) + } + } /** * Creates a function that invokes `func` with the `this` binding of the @@ -37967,21 +38142,21 @@ process.chdir = function (dir) { * })); * // => a Promise of 76 */ - function spread(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? 0 : nativeMax(toInteger(start), 0); - return rest(function(args) { - var array = args[start], - otherArgs = castSlice(args, 0, start); + function spread (func, start) { + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + start = start === undefined ? 0 : nativeMax(toInteger(start), 0) + return rest(function (args) { + var array = args[start], + otherArgs = castSlice(args, 0, start) - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } + if (array) { + arrayPush(otherArgs, array) + } + return apply(func, this, otherArgs) + }) + } /** * Creates a throttled function that only invokes `func` at most once per @@ -38024,23 +38199,23 @@ process.chdir = function (dir) { * // Cancel the trailing throttled invocation. * jQuery(window).on('popstate', throttled.cancel); */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; + function throttle (func, wait, options) { + var leading = true, + trailing = true - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - 'leading': leading, - 'maxWait': wait, - 'trailing': trailing - }); - } + if (typeof func !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading + trailing = 'trailing' in options ? !!options.trailing : trailing + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }) + } /** * Creates a function that accepts up to one argument, ignoring any @@ -38057,9 +38232,9 @@ process.chdir = function (dir) { * _.map(['6', '8', '10'], _.unary(parseInt)); * // => [6, 8, 10] */ - function unary(func) { - return ary(func, 1); - } + function unary (func) { + return ary(func, 1) + } /** * Creates a function that provides `value` to the wrapper function as its @@ -38083,12 +38258,12 @@ process.chdir = function (dir) { * p('fred, barney, & pebbles'); * // => '

fred, barney, & pebbles

' */ - function wrap(value, wrapper) { - wrapper = wrapper == null ? identity : wrapper; - return partial(wrapper, value); - } + function wrap (value, wrapper) { + wrapper = wrapper == null ? identity : wrapper + return partial(wrapper, value) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Casts `value` as an array if it's not one. @@ -38123,13 +38298,13 @@ process.chdir = function (dir) { * console.log(_.castArray(array) === array); * // => true */ - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } + function castArray () { + if (!arguments.length) { + return [] + } + var value = arguments[0] + return isArray(value) ? value : [value] + } /** * Creates a shallow clone of `value`. @@ -38157,9 +38332,9 @@ process.chdir = function (dir) { * console.log(shallow[0] === objects[0]); * // => true */ - function clone(value) { - return baseClone(value, false, true); - } + function clone (value) { + return baseClone(value, false, true) + } /** * This method is like `_.clone` except that it accepts `customizer` which @@ -38192,9 +38367,9 @@ process.chdir = function (dir) { * console.log(el.childNodes.length); * // => 0 */ - function cloneWith(value, customizer) { - return baseClone(value, false, true, customizer); - } + function cloneWith (value, customizer) { + return baseClone(value, false, true, customizer) + } /** * This method is like `_.clone` except that it recursively clones `value`. @@ -38214,9 +38389,9 @@ process.chdir = function (dir) { * console.log(deep[0] === objects[0]); * // => false */ - function cloneDeep(value) { - return baseClone(value, true, true); - } + function cloneDeep (value) { + return baseClone(value, true, true) + } /** * This method is like `_.cloneWith` except that it recursively clones `value`. @@ -38246,9 +38421,9 @@ process.chdir = function (dir) { * console.log(el.childNodes.length); * // => 20 */ - function cloneDeepWith(value, customizer) { - return baseClone(value, true, true, customizer); - } + function cloneDeepWith (value, customizer) { + return baseClone(value, true, true, customizer) + } /** * Performs a @@ -38282,9 +38457,9 @@ process.chdir = function (dir) { * _.eq(NaN, NaN); * // => true */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } + function eq (value, other) { + return value === other || (value !== value && other !== other) + } /** * Checks if `value` is greater than `other`. @@ -38309,7 +38484,7 @@ process.chdir = function (dir) { * _.gt(1, 3); * // => false */ - var gt = createRelationalOperation(baseGt); + var gt = createRelationalOperation(baseGt) /** * Checks if `value` is greater than or equal to `other`. @@ -38334,9 +38509,9 @@ process.chdir = function (dir) { * _.gte(1, 3); * // => false */ - var gte = createRelationalOperation(function(value, other) { - return value >= other; - }); + var gte = createRelationalOperation(function (value, other) { + return value >= other + }) /** * Checks if `value` is likely an `arguments` object. @@ -38356,11 +38531,11 @@ process.chdir = function (dir) { * _.isArguments([1, 2, 3]); * // => false */ - function isArguments(value) { + function isArguments (value) { // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. - return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && - (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); - } + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag) + } /** * Checks if `value` is classified as an `Array` object. @@ -38387,7 +38562,7 @@ process.chdir = function (dir) { * _.isArray(_.noop); * // => false */ - var isArray = Array.isArray; + var isArray = Array.isArray /** * Checks if `value` is classified as an `ArrayBuffer` object. @@ -38407,9 +38582,9 @@ process.chdir = function (dir) { * _.isArrayBuffer(new Array(2)); * // => false */ - function isArrayBuffer(value) { - return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; - } + function isArrayBuffer (value) { + return isObjectLike(value) && objectToString.call(value) == arrayBufferTag + } /** * Checks if `value` is array-like. A value is considered array-like if it's @@ -38436,9 +38611,9 @@ process.chdir = function (dir) { * _.isArrayLike(_.noop); * // => false */ - function isArrayLike(value) { - return value != null && isLength(getLength(value)) && !isFunction(value); - } + function isArrayLike (value) { + return value != null && isLength(getLength(value)) && !isFunction(value) + } /** * This method is like `_.isArrayLike` except that it also checks if `value` @@ -38465,9 +38640,9 @@ process.chdir = function (dir) { * _.isArrayLikeObject(_.noop); * // => false */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } + function isArrayLikeObject (value) { + return isObjectLike(value) && isArrayLike(value) + } /** * Checks if `value` is classified as a boolean primitive or object. @@ -38487,10 +38662,10 @@ process.chdir = function (dir) { * _.isBoolean(null); * // => false */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && objectToString.call(value) == boolTag); - } + function isBoolean (value) { + return value === true || value === false || + (isObjectLike(value) && objectToString.call(value) == boolTag) + } /** * Checks if `value` is a buffer. @@ -38509,9 +38684,9 @@ process.chdir = function (dir) { * _.isBuffer(new Uint8Array(2)); * // => false */ - var isBuffer = !Buffer ? stubFalse : function(value) { - return value instanceof Buffer; - }; + var isBuffer = !Buffer ? stubFalse : function (value) { + return value instanceof Buffer + } /** * Checks if `value` is classified as a `Date` object. @@ -38531,9 +38706,9 @@ process.chdir = function (dir) { * _.isDate('Mon April 23 2012'); * // => false */ - function isDate(value) { - return isObjectLike(value) && objectToString.call(value) == dateTag; - } + function isDate (value) { + return isObjectLike(value) && objectToString.call(value) == dateTag + } /** * Checks if `value` is likely a DOM element. @@ -38553,9 +38728,9 @@ process.chdir = function (dir) { * _.isElement(''); * // => false */ - function isElement(value) { - return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); - } + function isElement (value) { + return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value) + } /** * Checks if `value` is an empty object, collection, map, or set. @@ -38590,25 +38765,25 @@ process.chdir = function (dir) { * _.isEmpty({ 'a': 1 }); * // => false */ - function isEmpty(value) { - if (isArrayLike(value) && + function isEmpty (value) { + if (isArrayLike(value) && (isArray(value) || isString(value) || isFunction(value.splice) || isArguments(value) || isBuffer(value))) { - return !value.length; - } - if (isObjectLike(value)) { - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return !(nonEnumShadows && keys(value).length); - } + return !value.length + } + if (isObjectLike(value)) { + var tag = getTag(value) + if (tag == mapTag || tag == setTag) { + return !value.size + } + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false + } + } + return !(nonEnumShadows && keys(value).length) + } /** * Performs a deep comparison between two values to determine if they are @@ -38639,9 +38814,9 @@ process.chdir = function (dir) { * object === other; * // => false */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } + function isEqual (value, other) { + return baseIsEqual(value, other) + } /** * This method is like `_.isEqual` except that it accepts `customizer` which @@ -38676,11 +38851,11 @@ process.chdir = function (dir) { * _.isEqualWith(array, other, customizer); * // => true */ - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, customizer) : !!result; - } + function isEqualWith (value, other, customizer) { + customizer = typeof customizer === 'function' ? customizer : undefined + var result = customizer ? customizer(value, other) : undefined + return result === undefined ? baseIsEqual(value, other, customizer) : !!result + } /** * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, @@ -38701,13 +38876,13 @@ process.chdir = function (dir) { * _.isError(Error); * // => false */ - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - return (objectToString.call(value) == errorTag) || - (typeof value.message == 'string' && typeof value.name == 'string'); - } + function isError (value) { + if (!isObjectLike(value)) { + return false + } + return (objectToString.call(value) == errorTag) || + (typeof value.message === 'string' && typeof value.name === 'string') + } /** * Checks if `value` is a finite primitive number. @@ -38736,9 +38911,9 @@ process.chdir = function (dir) { * _.isFinite('3'); * // => false */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } + function isFinite (value) { + return typeof value === 'number' && nativeIsFinite(value) + } /** * Checks if `value` is classified as a `Function` object. @@ -38758,13 +38933,13 @@ process.chdir = function (dir) { * _.isFunction(/abc/); * // => false */ - function isFunction(value) { + function isFunction (value) { // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 8 which returns 'object' for typed array and weak map constructors, // and PhantomJS 1.9 which returns 'function' for `NodeList` instances. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; - } + var tag = isObject(value) ? objectToString.call(value) : '' + return tag == funcTag || tag == genTag + } /** * Checks if `value` is an integer. @@ -38792,9 +38967,9 @@ process.chdir = function (dir) { * _.isInteger('3'); * // => false */ - function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); - } + function isInteger (value) { + return typeof value === 'number' && value == toInteger(value) + } /** * Checks if `value` is a valid array-like length. @@ -38823,10 +38998,10 @@ process.chdir = function (dir) { * _.isLength('3'); * // => false */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } + function isLength (value) { + return typeof value === 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER + } /** * Checks if `value` is the @@ -38853,10 +39028,10 @@ process.chdir = function (dir) { * _.isObject(null); * // => false */ - function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); - } + function isObject (value) { + var type = typeof value + return !!value && (type == 'object' || type == 'function') + } /** * Checks if `value` is object-like. A value is object-like if it's not `null` @@ -38882,9 +39057,9 @@ process.chdir = function (dir) { * _.isObjectLike(null); * // => false */ - function isObjectLike(value) { - return !!value && typeof value == 'object'; - } + function isObjectLike (value) { + return !!value && typeof value === 'object' + } /** * Checks if `value` is classified as a `Map` object. @@ -38904,9 +39079,9 @@ process.chdir = function (dir) { * _.isMap(new WeakMap); * // => false */ - function isMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } + function isMap (value) { + return isObjectLike(value) && getTag(value) == mapTag + } /** * Performs a partial deep comparison between `object` and `source` to @@ -38932,9 +39107,9 @@ process.chdir = function (dir) { * _.isMatch(object, { 'age': 36 }); * // => false */ - function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } + function isMatch (object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)) + } /** * This method is like `_.isMatch` except that it accepts `customizer` which @@ -38968,10 +39143,10 @@ process.chdir = function (dir) { * _.isMatchWith(object, source, customizer); * // => true */ - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); - } + function isMatchWith (object, source, customizer) { + customizer = typeof customizer === 'function' ? customizer : undefined + return baseIsMatch(object, source, getMatchData(source), customizer) + } /** * Checks if `value` is `NaN`. @@ -39001,12 +39176,12 @@ process.chdir = function (dir) { * _.isNaN(undefined); * // => false */ - function isNaN(value) { + function isNaN (value) { // An `NaN` primitive is the only value that is not equal to itself. // Perform the `toStringTag` check first to avoid errors with some // ActiveX objects in IE. - return isNumber(value) && value != +value; - } + return isNumber(value) && value != +value + } /** * Checks if `value` is a pristine native function. @@ -39034,12 +39209,12 @@ process.chdir = function (dir) { * _.isNative(_); * // => false */ - function isNative(value) { - if (isMaskable(value)) { - throw new Error('This method is not supported with `core-js`. Try https://github.com/es-shims.'); - } - return baseIsNative(value); - } + function isNative (value) { + if (isMaskable(value)) { + throw new Error('This method is not supported with `core-js`. Try https://github.com/es-shims.') + } + return baseIsNative(value) + } /** * Checks if `value` is `null`. @@ -39058,9 +39233,9 @@ process.chdir = function (dir) { * _.isNull(void 0); * // => false */ - function isNull(value) { - return value === null; - } + function isNull (value) { + return value === null + } /** * Checks if `value` is `null` or `undefined`. @@ -39082,9 +39257,9 @@ process.chdir = function (dir) { * _.isNil(NaN); * // => false */ - function isNil(value) { - return value == null; - } + function isNil (value) { + return value == null + } /** * Checks if `value` is classified as a `Number` primitive or object. @@ -39113,10 +39288,10 @@ process.chdir = function (dir) { * _.isNumber('3'); * // => false */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && objectToString.call(value) == numberTag); - } + function isNumber (value) { + return typeof value === 'number' || + (isObjectLike(value) && objectToString.call(value) == numberTag) + } /** * Checks if `value` is a plain object, that is, an object created by the @@ -39147,19 +39322,19 @@ process.chdir = function (dir) { * _.isPlainObject(Object.create(null)); * // => true */ - function isPlainObject(value) { - if (!isObjectLike(value) || + function isPlainObject (value) { + if (!isObjectLike(value) || objectToString.call(value) != objectTag || isHostObject(value)) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return (typeof Ctor == 'function' && - Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); - } + return false + } + var proto = getPrototype(value) + if (proto === null) { + return true + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor + return (typeof Ctor === 'function' && + Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString) + } /** * Checks if `value` is classified as a `RegExp` object. @@ -39179,9 +39354,9 @@ process.chdir = function (dir) { * _.isRegExp('/abc/'); * // => false */ - function isRegExp(value) { - return isObject(value) && objectToString.call(value) == regexpTag; - } + function isRegExp (value) { + return isObject(value) && objectToString.call(value) == regexpTag + } /** * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 @@ -39211,9 +39386,9 @@ process.chdir = function (dir) { * _.isSafeInteger('3'); * // => false */ - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; - } + function isSafeInteger (value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER + } /** * Checks if `value` is classified as a `Set` object. @@ -39233,9 +39408,9 @@ process.chdir = function (dir) { * _.isSet(new WeakSet); * // => false */ - function isSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } + function isSet (value) { + return isObjectLike(value) && getTag(value) == setTag + } /** * Checks if `value` is classified as a `String` primitive or object. @@ -39255,10 +39430,10 @@ process.chdir = function (dir) { * _.isString(1); * // => false */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); - } + function isString (value) { + return typeof value === 'string' || + (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag) + } /** * Checks if `value` is classified as a `Symbol` primitive or object. @@ -39278,10 +39453,10 @@ process.chdir = function (dir) { * _.isSymbol('abc'); * // => false */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); - } + function isSymbol (value) { + return typeof value === 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag) + } /** * Checks if `value` is classified as a typed array. @@ -39301,10 +39476,10 @@ process.chdir = function (dir) { * _.isTypedArray([]); * // => false */ - function isTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; - } + function isTypedArray (value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[objectToString.call(value)] + } /** * Checks if `value` is `undefined`. @@ -39323,9 +39498,9 @@ process.chdir = function (dir) { * _.isUndefined(null); * // => false */ - function isUndefined(value) { - return value === undefined; - } + function isUndefined (value) { + return value === undefined + } /** * Checks if `value` is classified as a `WeakMap` object. @@ -39345,9 +39520,9 @@ process.chdir = function (dir) { * _.isWeakMap(new Map); * // => false */ - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } + function isWeakMap (value) { + return isObjectLike(value) && getTag(value) == weakMapTag + } /** * Checks if `value` is classified as a `WeakSet` object. @@ -39367,9 +39542,9 @@ process.chdir = function (dir) { * _.isWeakSet(new Set); * // => false */ - function isWeakSet(value) { - return isObjectLike(value) && objectToString.call(value) == weakSetTag; - } + function isWeakSet (value) { + return isObjectLike(value) && objectToString.call(value) == weakSetTag + } /** * Checks if `value` is less than `other`. @@ -39394,7 +39569,7 @@ process.chdir = function (dir) { * _.lt(3, 1); * // => false */ - var lt = createRelationalOperation(baseLt); + var lt = createRelationalOperation(baseLt) /** * Checks if `value` is less than or equal to `other`. @@ -39419,9 +39594,9 @@ process.chdir = function (dir) { * _.lte(3, 1); * // => false */ - var lte = createRelationalOperation(function(value, other) { - return value <= other; - }); + var lte = createRelationalOperation(function (value, other) { + return value <= other + }) /** * Converts `value` to an array. @@ -39446,21 +39621,21 @@ process.chdir = function (dir) { * _.toArray(null); * // => [] */ - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (iteratorSymbol && value[iteratorSymbol]) { - return iteratorToArray(value[iteratorSymbol]()); - } - var tag = getTag(value), - func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + function toArray (value) { + if (!value) { + return [] + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value) + } + if (iteratorSymbol && value[iteratorSymbol]) { + return iteratorToArray(value[iteratorSymbol]()) + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values) - return func(value); - } + return func(value) + } /** * Converts `value` to a finite number. @@ -39485,17 +39660,17 @@ process.chdir = function (dir) { * _.toFinite('3.2'); * // => 3.2 */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } + function toFinite (value) { + if (!value) { + return value === 0 ? value : 0 + } + value = toNumber(value) + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1) + return sign * MAX_INTEGER + } + return value === value ? value : 0 + } /** * Converts `value` to an integer. @@ -39523,12 +39698,12 @@ process.chdir = function (dir) { * _.toInteger('3.2'); * // => 3 */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; + function toInteger (value) { + var result = toFinite(value), + remainder = result % 1 - return result === result ? (remainder ? result - remainder : result) : 0; - } + return result === result ? (remainder ? result - remainder : result) : 0 + } /** * Converts `value` to an integer suitable for use as the length of an @@ -39557,9 +39732,9 @@ process.chdir = function (dir) { * _.toLength('3.2'); * // => 3 */ - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; - } + function toLength (value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0 + } /** * Converts `value` to a number. @@ -39584,26 +39759,26 @@ process.chdir = function (dir) { * _.toNumber('3.2'); * // => 3.2 */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = isFunction(value.valueOf) ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = value.replace(reTrim, ''); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) + function toNumber (value) { + if (typeof value === 'number') { + return value + } + if (isSymbol(value)) { + return NAN + } + if (isObject(value)) { + var other = isFunction(value.valueOf) ? value.valueOf() : value + value = isObject(other) ? (other + '') : other + } + if (typeof value !== 'string') { + return value === 0 ? value : +value + } + value = value.replace(reTrim, '') + var isBinary = reIsBinary.test(value) + return (isBinary || reIsOctal.test(value)) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } + : (reIsBadHex.test(value) ? NAN : +value) + } /** * Converts `value` to a plain object flattening inherited enumerable string @@ -39629,9 +39804,9 @@ process.chdir = function (dir) { * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); * // => { 'a': 1, 'b': 2, 'c': 3 } */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } + function toPlainObject (value) { + return copyObject(value, keysIn(value)) + } /** * Converts `value` to a safe integer. A safe integer can be compared and @@ -39657,9 +39832,9 @@ process.chdir = function (dir) { * _.toSafeInteger('3.2'); * // => 3 */ - function toSafeInteger(value) { - return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); - } + function toSafeInteger (value) { + return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + } /** * Converts `value` to a string. An empty string is returned for `null` @@ -39682,11 +39857,11 @@ process.chdir = function (dir) { * _.toString([1, 2, 3]); * // => '1,2,3' */ - function toString(value) { - return value == null ? '' : baseToString(value); - } + function toString (value) { + return value == null ? '' : baseToString(value) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Assigns own enumerable string keyed properties of source objects to the @@ -39720,17 +39895,17 @@ process.chdir = function (dir) { * _.assign({ 'a': 1 }, new Foo, new Bar); * // => { 'a': 1, 'c': 3, 'e': 5 } */ - var assign = createAssigner(function(object, source) { - if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); + var assign = createAssigner(function (object, source) { + if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object) + return + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]) + } + } + }) /** * This method is like `_.assign` except that it iterates over own and @@ -39763,15 +39938,15 @@ process.chdir = function (dir) { * _.assignIn({ 'a': 1 }, new Foo, new Bar); * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 } */ - var assignIn = createAssigner(function(object, source) { - if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { - copyObject(source, keysIn(source), object); - return; - } - for (var key in source) { - assignValue(object, key, source[key]); - } - }); + var assignIn = createAssigner(function (object, source) { + if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { + copyObject(source, keysIn(source), object) + return + } + for (var key in source) { + assignValue(object, key, source[key]) + } + }) /** * This method is like `_.assignIn` except that it accepts `customizer` @@ -39802,9 +39977,9 @@ process.chdir = function (dir) { * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); * // => { 'a': 1, 'b': 2 } */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); + var assignInWith = createAssigner(function (object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer) + }) /** * This method is like `_.assign` except that it accepts `customizer` @@ -39834,9 +40009,9 @@ process.chdir = function (dir) { * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); * // => { 'a': 1, 'b': 2 } */ - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); - }); + var assignWith = createAssigner(function (object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer) + }) /** * Creates an array of values corresponding to `paths` of `object`. @@ -39855,9 +40030,9 @@ process.chdir = function (dir) { * _.at(object, ['a[0].b.c', 'a[1]']); * // => [3, 4] */ - var at = rest(function(object, paths) { - return baseAt(object, baseFlatten(paths, 1)); - }); + var at = rest(function (object, paths) { + return baseAt(object, baseFlatten(paths, 1)) + }) /** * Creates an object that inherits from the `prototype` object. If a @@ -39893,10 +40068,10 @@ process.chdir = function (dir) { * circle instanceof Shape; * // => true */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? baseAssign(result, properties) : result; - } + function create (prototype, properties) { + var result = baseCreate(prototype) + return properties ? baseAssign(result, properties) : result + } /** * Assigns own and inherited enumerable string keyed properties of source @@ -39919,10 +40094,10 @@ process.chdir = function (dir) { * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); * // => { 'user': 'barney', 'age': 36 } */ - var defaults = rest(function(args) { - args.push(undefined, assignInDefaults); - return apply(assignInWith, undefined, args); - }); + var defaults = rest(function (args) { + args.push(undefined, assignInDefaults) + return apply(assignInWith, undefined, args) + }) /** * This method is like `_.defaults` except that it recursively assigns @@ -39944,10 +40119,10 @@ process.chdir = function (dir) { * // => { 'user': { 'name': 'barney', 'age': 36 } } * */ - var defaultsDeep = rest(function(args) { - args.push(undefined, mergeDefaults); - return apply(mergeWith, undefined, args); - }); + var defaultsDeep = rest(function (args) { + args.push(undefined, mergeDefaults) + return apply(mergeWith, undefined, args) + }) /** * This method is like `_.find` except that it returns the key of the first @@ -39985,9 +40160,9 @@ process.chdir = function (dir) { * _.findKey(users, 'active'); * // => 'barney' */ - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); - } + function findKey (object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn) + } /** * This method is like `_.findKey` except that it iterates over elements of @@ -40025,9 +40200,9 @@ process.chdir = function (dir) { * _.findLastKey(users, 'active'); * // => 'pebbles' */ - function findLastKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); - } + function findLastKey (object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight) + } /** * Iterates over own and inherited enumerable string keyed properties of an @@ -40057,11 +40232,11 @@ process.chdir = function (dir) { * }); * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). */ - function forIn(object, iteratee) { - return object == null + function forIn (object, iteratee) { + return object == null ? object - : baseFor(object, getIteratee(iteratee, 3), keysIn); - } + : baseFor(object, getIteratee(iteratee, 3), keysIn) + } /** * This method is like `_.forIn` except that it iterates over properties of @@ -40089,11 +40264,11 @@ process.chdir = function (dir) { * }); * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. */ - function forInRight(object, iteratee) { - return object == null + function forInRight (object, iteratee) { + return object == null ? object - : baseForRight(object, getIteratee(iteratee, 3), keysIn); - } + : baseForRight(object, getIteratee(iteratee, 3), keysIn) + } /** * Iterates over own enumerable string keyed properties of an object and @@ -40123,9 +40298,9 @@ process.chdir = function (dir) { * }); * // => Logs 'a' then 'b' (iteration order is not guaranteed). */ - function forOwn(object, iteratee) { - return object && baseForOwn(object, getIteratee(iteratee, 3)); - } + function forOwn (object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)) + } /** * This method is like `_.forOwn` except that it iterates over properties of @@ -40153,9 +40328,9 @@ process.chdir = function (dir) { * }); * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. */ - function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, getIteratee(iteratee, 3)); - } + function forOwnRight (object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)) + } /** * Creates an array of function property names from own enumerable properties @@ -40180,9 +40355,9 @@ process.chdir = function (dir) { * _.functions(new Foo); * // => ['a', 'b'] */ - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); - } + function functions (object) { + return object == null ? [] : baseFunctions(object, keys(object)) + } /** * Creates an array of function property names from own and inherited @@ -40207,9 +40382,9 @@ process.chdir = function (dir) { * _.functionsIn(new Foo); * // => ['a', 'b', 'c'] */ - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); - } + function functionsIn (object) { + return object == null ? [] : baseFunctions(object, keysIn(object)) + } /** * Gets the value at `path` of `object`. If the resolved value is @@ -40236,10 +40411,10 @@ process.chdir = function (dir) { * _.get(object, 'a.b.c', 'default'); * // => 'default' */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; - } + function get (object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path) + return result === undefined ? defaultValue : result + } /** * Checks if `path` is a direct property of `object`. @@ -40268,9 +40443,9 @@ process.chdir = function (dir) { * _.has(other, 'a'); * // => false */ - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } + function has (object, path) { + return object != null && hasPath(object, path, baseHas) + } /** * Checks if `path` is a direct or inherited property of `object`. @@ -40298,9 +40473,9 @@ process.chdir = function (dir) { * _.hasIn(object, 'b'); * // => false */ - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } + function hasIn (object, path) { + return object != null && hasPath(object, path, baseHasIn) + } /** * Creates an object composed of the inverted keys and values of `object`. @@ -40320,9 +40495,9 @@ process.chdir = function (dir) { * _.invert(object); * // => { '1': 'c', '2': 'b' } */ - var invert = createInverter(function(result, value, key) { - result[value] = key; - }, constant(identity)); + var invert = createInverter(function (result, value, key) { + result[value] = key + }, constant(identity)) /** * This method is like `_.invert` except that the inverted object is generated @@ -40351,13 +40526,13 @@ process.chdir = function (dir) { * }); * // => { 'group1': ['a', 'c'], 'group2': ['b'] } */ - var invertBy = createInverter(function(result, value, key) { - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - }, getIteratee); + var invertBy = createInverter(function (result, value, key) { + if (hasOwnProperty.call(result, value)) { + result[value].push(key) + } else { + result[value] = [key] + } + }, getIteratee) /** * Invokes the method at `path` of `object`. @@ -40377,7 +40552,7 @@ process.chdir = function (dir) { * _.invoke(object, 'a[0].b.c.slice', 1, 3); * // => [2, 3] */ - var invoke = rest(baseInvoke); + var invoke = rest(baseInvoke) /** * Creates an array of the own enumerable property names of `object`. @@ -40407,25 +40582,25 @@ process.chdir = function (dir) { * _.keys('hi'); * // => ['0', '1'] */ - function keys(object) { - var isProto = isPrototype(object); - if (!(isProto || isArrayLike(object))) { - return baseKeys(object); - } - var indexes = indexKeys(object), - skipIndexes = !!indexes, - result = indexes || [], - length = result.length; + function keys (object) { + var isProto = isPrototype(object) + if (!(isProto || isArrayLike(object))) { + return baseKeys(object) + } + var indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length - for (var key in object) { - if (baseHas(object, key) && + for (var key in object) { + if (baseHas(object, key) && !(skipIndexes && (key == 'length' || isIndex(key, length))) && !(isProto && key == 'constructor')) { - result.push(key); - } - } - return result; - } + result.push(key) + } + } + return result + } /** * Creates an array of the own and inherited enumerable property names of `object`. @@ -40450,25 +40625,25 @@ process.chdir = function (dir) { * _.keysIn(new Foo); * // => ['a', 'b', 'c'] (iteration order is not guaranteed) */ - function keysIn(object) { - var index = -1, - isProto = isPrototype(object), - props = baseKeysIn(object), - propsLength = props.length, - indexes = indexKeys(object), - skipIndexes = !!indexes, - result = indexes || [], - length = result.length; - - while (++index < propsLength) { - var key = props[index]; - if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && + function keysIn (object) { + var index = -1, + isProto = isPrototype(object), + props = baseKeysIn(object), + propsLength = props.length, + indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length + + while (++index < propsLength) { + var key = props[index] + if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } + result.push(key) + } + } + return result + } /** * The opposite of `_.mapValues`; this method creates an object with the @@ -40492,15 +40667,15 @@ process.chdir = function (dir) { * }); * // => { 'a1': 1, 'b2': 2 } */ - function mapKeys(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); + function mapKeys (object, iteratee) { + var result = {} + iteratee = getIteratee(iteratee, 3) - baseForOwn(object, function(value, key, object) { - result[iteratee(value, key, object)] = value; - }); - return result; - } + baseForOwn(object, function (value, key, object) { + result[iteratee(value, key, object)] = value + }) + return result + } /** * Creates an object with the same keys as `object` and values generated @@ -40531,15 +40706,15 @@ process.chdir = function (dir) { * _.mapValues(users, 'age'); * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) */ - function mapValues(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); + function mapValues (object, iteratee) { + var result = {} + iteratee = getIteratee(iteratee, 3) - baseForOwn(object, function(value, key, object) { - result[key] = iteratee(value, key, object); - }); - return result; - } + baseForOwn(object, function (value, key, object) { + result[key] = iteratee(value, key, object) + }) + return result + } /** * This method is like `_.assign` except that it recursively merges own and @@ -40572,9 +40747,9 @@ process.chdir = function (dir) { * _.merge(users, ages); * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } */ - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); + var merge = createAssigner(function (object, source, srcIndex) { + baseMerge(object, source, srcIndex) + }) /** * This method is like `_.merge` except that it accepts `customizer` which @@ -40614,9 +40789,9 @@ process.chdir = function (dir) { * _.mergeWith(object, other, customizer); * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } */ - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); + var mergeWith = createAssigner(function (object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer) + }) /** * The opposite of `_.pick`; this method creates an object composed of the @@ -40637,13 +40812,13 @@ process.chdir = function (dir) { * _.omit(object, ['a', 'c']); * // => { 'b': '2' } */ - var omit = rest(function(object, props) { - if (object == null) { - return {}; - } - props = arrayMap(baseFlatten(props, 1), toKey); - return basePick(object, baseDifference(getAllKeysIn(object), props)); - }); + var omit = rest(function (object, props) { + if (object == null) { + return {} + } + props = arrayMap(baseFlatten(props, 1), toKey) + return basePick(object, baseDifference(getAllKeysIn(object), props)) + }) /** * The opposite of `_.pickBy`; this method creates an object composed of @@ -40666,12 +40841,12 @@ process.chdir = function (dir) { * _.omitBy(object, _.isNumber); * // => { 'b': '2' } */ - function omitBy(object, predicate) { - predicate = getIteratee(predicate); - return basePickBy(object, function(value, key) { - return !predicate(value, key); - }); - } + function omitBy (object, predicate) { + predicate = getIteratee(predicate) + return basePickBy(object, function (value, key) { + return !predicate(value, key) + }) + } /** * Creates an object composed of the picked `object` properties. @@ -40690,9 +40865,9 @@ process.chdir = function (dir) { * _.pick(object, ['a', 'c']); * // => { 'a': 1, 'c': 3 } */ - var pick = rest(function(object, props) { - return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey)); - }); + var pick = rest(function (object, props) { + return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey)) + }) /** * Creates an object composed of the `object` properties `predicate` returns @@ -40713,9 +40888,9 @@ process.chdir = function (dir) { * _.pickBy(object, _.isNumber); * // => { 'a': 1, 'c': 3 } */ - function pickBy(object, predicate) { - return object == null ? {} : basePickBy(object, getIteratee(predicate)); - } + function pickBy (object, predicate) { + return object == null ? {} : basePickBy(object, getIteratee(predicate)) + } /** * This method is like `_.get` except that if the resolved value is a @@ -40746,27 +40921,27 @@ process.chdir = function (dir) { * _.result(object, 'a[0].b.c3', _.constant('default')); * // => 'default' */ - function result(object, path, defaultValue) { - path = isKey(path, object) ? [path] : castPath(path); + function result (object, path, defaultValue) { + path = isKey(path, object) ? [path] : castPath(path) - var index = -1, - length = path.length; + var index = -1, + length = path.length // Ensure the loop is entered when path is empty. - if (!length) { - object = undefined; - length = 1; - } - while (++index < length) { - var value = object == null ? undefined : object[toKey(path[index])]; - if (value === undefined) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; - } - return object; - } + if (!length) { + object = undefined + length = 1 + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])] + if (value === undefined) { + index = length + value = defaultValue + } + object = isFunction(value) ? value.call(object) : value + } + return object + } /** * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, @@ -40796,9 +40971,9 @@ process.chdir = function (dir) { * console.log(object.x[0].y.z); * // => 5 */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } + function set (object, path, value) { + return object == null ? object : baseSet(object, path, value) + } /** * This method is like `_.set` except that it accepts `customizer` which is @@ -40824,10 +40999,10 @@ process.chdir = function (dir) { * _.setWith(object, '[0][1]', 'a', Object); * // => { '0': { '1': 'a' } } */ - function setWith(object, path, value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseSet(object, path, value, customizer); - } + function setWith (object, path, value, customizer) { + customizer = typeof customizer === 'function' ? customizer : undefined + return object == null ? object : baseSet(object, path, value, customizer) + } /** * Creates an array of own enumerable string keyed-value pairs for `object` @@ -40853,7 +41028,7 @@ process.chdir = function (dir) { * _.toPairs(new Foo); * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) */ - var toPairs = createToPairs(keys); + var toPairs = createToPairs(keys) /** * Creates an array of own and inherited enumerable string keyed-value pairs @@ -40879,7 +41054,7 @@ process.chdir = function (dir) { * _.toPairsIn(new Foo); * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) */ - var toPairsIn = createToPairs(keysIn); + var toPairsIn = createToPairs(keysIn) /** * An alternative to `_.reduce`; this method transforms `object` to a new @@ -40911,27 +41086,27 @@ process.chdir = function (dir) { * }, {}); * // => { '1': ['a', 'c'], '2': ['b'] } */ - function transform(object, iteratee, accumulator) { - var isArr = isArray(object) || isTypedArray(object); - iteratee = getIteratee(iteratee, 4); - - if (accumulator == null) { - if (isArr || isObject(object)) { - var Ctor = object.constructor; - if (isArr) { - accumulator = isArray(object) ? new Ctor : []; - } else { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; - } - } else { - accumulator = {}; - } - } - (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; - } + function transform (object, iteratee, accumulator) { + var isArr = isArray(object) || isTypedArray(object) + iteratee = getIteratee(iteratee, 4) + + if (accumulator == null) { + if (isArr || isObject(object)) { + var Ctor = object.constructor + if (isArr) { + accumulator = isArray(object) ? new Ctor() : [] + } else { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {} + } + } else { + accumulator = {} + } + } + (isArr ? arrayEach : baseForOwn)(object, function (value, index, object) { + return iteratee(accumulator, value, index, object) + }) + return accumulator + } /** * Removes the property at `path` of `object`. @@ -40960,9 +41135,9 @@ process.chdir = function (dir) { * console.log(object); * // => { 'a': [{ 'b': {} }] }; */ - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } + function unset (object, path) { + return object == null ? true : baseUnset(object, path) + } /** * This method is like `_.set` except that accepts `updater` to produce the @@ -40991,9 +41166,9 @@ process.chdir = function (dir) { * console.log(object.x[0].y.z); * // => 0 */ - function update(object, path, updater) { - return object == null ? object : baseUpdate(object, path, castFunction(updater)); - } + function update (object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)) + } /** * This method is like `_.update` except that it accepts `customizer` which is @@ -41019,10 +41194,10 @@ process.chdir = function (dir) { * _.updateWith(object, '[0][1]', _.constant('a'), Object); * // => { '0': { '1': 'a' } } */ - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); - } + function updateWith (object, path, updater, customizer) { + customizer = typeof customizer === 'function' ? customizer : undefined + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer) + } /** * Creates an array of the own enumerable string keyed property values of `object`. @@ -41050,9 +41225,9 @@ process.chdir = function (dir) { * _.values('hi'); * // => ['h', 'i'] */ - function values(object) { - return object ? baseValues(object, keys(object)) : []; - } + function values (object) { + return object ? baseValues(object, keys(object)) : [] + } /** * Creates an array of the own and inherited enumerable string keyed property @@ -41078,11 +41253,11 @@ process.chdir = function (dir) { * _.valuesIn(new Foo); * // => [1, 2, 3] (iteration order is not guaranteed) */ - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } + function valuesIn (object) { + return object == null ? [] : baseValues(object, keysIn(object)) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Clamps `number` within the inclusive `lower` and `upper` bounds. @@ -41103,21 +41278,21 @@ process.chdir = function (dir) { * _.clamp(10, -5, 5); * // => 5 */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } + function clamp (number, lower, upper) { + if (upper === undefined) { + upper = lower + lower = undefined + } + if (upper !== undefined) { + upper = toNumber(upper) + upper = upper === upper ? upper : 0 + } + if (lower !== undefined) { + lower = toNumber(lower) + lower = lower === lower ? lower : 0 + } + return baseClamp(toNumber(number), lower, upper) + } /** * Checks if `n` is between `start` and up to, but not including, `end`. If @@ -41157,17 +41332,17 @@ process.chdir = function (dir) { * _.inRange(-3, -2, -6); * // => true */ - function inRange(number, start, end) { - start = toNumber(start) || 0; - if (end === undefined) { - end = start; - start = 0; - } else { - end = toNumber(end) || 0; - } - number = toNumber(number); - return baseInRange(number, start, end); - } + function inRange (number, start, end) { + start = toNumber(start) || 0 + if (end === undefined) { + end = start + start = 0 + } else { + end = toNumber(end) || 0 + } + number = toNumber(number) + return baseInRange(number, start, end) + } /** * Produces a random number between the inclusive `lower` and `upper` bounds. @@ -41200,46 +41375,44 @@ process.chdir = function (dir) { * _.random(1.2, 5.2); * // => a floating-point number between 1.2 and 5.2 */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toNumber(lower) || 0; - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toNumber(upper) || 0; - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } + function random (lower, upper, floating) { + if (floating && typeof floating !== 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined + } + if (floating === undefined) { + if (typeof upper === 'boolean') { + floating = upper + upper = undefined + } else if (typeof lower === 'boolean') { + floating = lower + lower = undefined + } + } + if (lower === undefined && upper === undefined) { + lower = 0 + upper = 1 + } else { + lower = toNumber(lower) || 0 + if (upper === undefined) { + upper = lower + lower = 0 + } else { + upper = toNumber(upper) || 0 + } + } + if (lower > upper) { + var temp = lower + lower = upper + upper = temp + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom() + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper) + } + return baseRandom(lower, upper) + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). @@ -41261,10 +41434,10 @@ process.chdir = function (dir) { * _.camelCase('__FOO_BAR__'); * // => 'fooBar' */ - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); - }); + var camelCase = createCompounder(function (result, word, index) { + word = word.toLowerCase() + return result + (index ? capitalize(word) : word) + }) /** * Converts the first character of `string` to upper case and the remaining @@ -41281,9 +41454,9 @@ process.chdir = function (dir) { * _.capitalize('FRED'); * // => 'Fred' */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } + function capitalize (string) { + return upperFirst(toString(string).toLowerCase()) + } /** * Deburrs `string` by converting @@ -41302,10 +41475,10 @@ process.chdir = function (dir) { * _.deburr('déjà vu'); * // => 'deja vu' */ - function deburr(string) { - string = toString(string); - return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); - } + function deburr (string) { + string = toString(string) + return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '') + } /** * Checks if `string` ends with the given target string. @@ -41330,18 +41503,18 @@ process.chdir = function (dir) { * _.endsWith('abc', 'b', 2); * // => true */ - function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); + function endsWith (string, target, position) { + string = toString(string) + target = baseToString(target) - var length = string.length; - position = position === undefined + var length = string.length + position = position === undefined ? length - : baseClamp(toInteger(position), 0, length); + : baseClamp(toInteger(position), 0, length) - position -= target.length; - return position >= 0 && string.indexOf(target, position) == position; - } + position -= target.length + return position >= 0 && string.indexOf(target, position) == position + } /** * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to @@ -41377,12 +41550,12 @@ process.chdir = function (dir) { * _.escape('fred, barney, & pebbles'); * // => 'fred, barney, & pebbles' */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) + function escape (string) { + string = toString(string) + return (string && reHasUnescapedHtml.test(string)) ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } + : string + } /** * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", @@ -41399,12 +41572,12 @@ process.chdir = function (dir) { * _.escapeRegExp('[lodash](https://lodash.com/)'); * // => '\[lodash\]\(https://lodash\.com/\)' */ - function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) + function escapeRegExp (string) { + string = toString(string) + return (string && reHasRegExpChar.test(string)) ? string.replace(reRegExpChar, '\\$&') - : string; - } + : string + } /** * Converts `string` to @@ -41427,9 +41600,9 @@ process.chdir = function (dir) { * _.kebabCase('__FOO_BAR__'); * // => 'foo-bar' */ - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); + var kebabCase = createCompounder(function (result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase() + }) /** * Converts `string`, as space separated words, to lower case. @@ -41451,9 +41624,9 @@ process.chdir = function (dir) { * _.lowerCase('__FOO_BAR__'); * // => 'foo bar' */ - var lowerCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + word.toLowerCase(); - }); + var lowerCase = createCompounder(function (result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase() + }) /** * Converts the first character of `string` to lower case. @@ -41472,7 +41645,7 @@ process.chdir = function (dir) { * _.lowerFirst('FRED'); * // => 'fRED' */ - var lowerFirst = createCaseFirst('toLowerCase'); + var lowerFirst = createCaseFirst('toLowerCase') /** * Pads `string` on the left and right sides if it's shorter than `length`. @@ -41497,21 +41670,21 @@ process.chdir = function (dir) { * _.pad('abc', 3); * // => 'abc' */ - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); + function pad (string, length, chars) { + string = toString(string) + length = toInteger(length) - var strLength = length ? stringSize(string) : 0; - if (!length || strLength >= length) { - return string; - } - var mid = (length - strLength) / 2; - return ( + var strLength = length ? stringSize(string) : 0 + if (!length || strLength >= length) { + return string + } + var mid = (length - strLength) / 2 + return ( createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars) - ); - } + ) + } /** * Pads `string` on the right side if it's shorter than `length`. Padding @@ -41536,15 +41709,15 @@ process.chdir = function (dir) { * _.padEnd('abc', 3); * // => 'abc' */ - function padEnd(string, length, chars) { - string = toString(string); - length = toInteger(length); + function padEnd (string, length, chars) { + string = toString(string) + length = toInteger(length) - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) + var strLength = length ? stringSize(string) : 0 + return (length && strLength < length) ? (string + createPadding(length - strLength, chars)) - : string; - } + : string + } /** * Pads `string` on the left side if it's shorter than `length`. Padding @@ -41569,15 +41742,15 @@ process.chdir = function (dir) { * _.padStart('abc', 3); * // => 'abc' */ - function padStart(string, length, chars) { - string = toString(string); - length = toInteger(length); + function padStart (string, length, chars) { + string = toString(string) + length = toInteger(length) - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) + var strLength = length ? stringSize(string) : 0 + return (length && strLength < length) ? (createPadding(length - strLength, chars) + string) - : string; - } + : string + } /** * Converts `string` to an integer of the specified radix. If `radix` is @@ -41603,17 +41776,17 @@ process.chdir = function (dir) { * _.map(['6', '08', '10'], _.parseInt); * // => [6, 8, 10] */ - function parseInt(string, radix, guard) { + function parseInt (string, radix, guard) { // Chrome fails to trim leading whitespace characters. // See https://bugs.chromium.org/p/v8/issues/detail?id=3109 for more details. - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - string = toString(string).replace(reTrim, ''); - return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)); - } + if (guard || radix == null) { + radix = 0 + } else if (radix) { + radix = +radix + } + string = toString(string).replace(reTrim, '') + return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)) + } /** * Repeats the given string `n` times. @@ -41637,14 +41810,14 @@ process.chdir = function (dir) { * _.repeat('abc', 0); * // => '' */ - function repeat(string, n, guard) { - if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string), n); - } + function repeat (string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { + n = 1 + } else { + n = toInteger(n) + } + return baseRepeat(toString(string), n) + } /** * Replaces matches for `pattern` in `string` with `replacement`. @@ -41665,12 +41838,12 @@ process.chdir = function (dir) { * _.replace('Hi Fred', 'Fred', 'Barney'); * // => 'Hi Barney' */ - function replace() { - var args = arguments, - string = toString(args[0]); + function replace () { + var args = arguments, + string = toString(args[0]) - return args.length < 3 ? string : nativeReplace.call(string, args[1], args[2]); - } + return args.length < 3 ? string : nativeReplace.call(string, args[1], args[2]) + } /** * Converts `string` to @@ -41693,9 +41866,9 @@ process.chdir = function (dir) { * _.snakeCase('--FOO-BAR--'); * // => 'foo_bar' */ - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); + var snakeCase = createCompounder(function (result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase() + }) /** * Splits `string` by `separator`. @@ -41716,26 +41889,26 @@ process.chdir = function (dir) { * _.split('a-b-c', '-', 2); * // => ['a', 'b'] */ - function split(string, separator, limit) { - if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { - separator = limit = undefined; - } - limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string = toString(string); - if (string && ( - typeof separator == 'string' || + function split (string, separator, limit) { + if (limit && typeof limit !== 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined + } + limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0 + if (!limit) { + return [] + } + string = toString(string) + if (string && ( + typeof separator === 'string' || (separator != null && !isRegExp(separator)) )) { - separator = baseToString(separator); - if (separator == '' && reHasComplexSymbol.test(string)) { - return castSlice(stringToArray(string), 0, limit); - } - } - return nativeSplit.call(string, separator, limit); - } + separator = baseToString(separator) + if (separator == '' && reHasComplexSymbol.test(string)) { + return castSlice(stringToArray(string), 0, limit) + } + } + return nativeSplit.call(string, separator, limit) + } /** * Converts `string` to @@ -41758,9 +41931,9 @@ process.chdir = function (dir) { * _.startCase('__FOO_BAR__'); * // => 'FOO BAR' */ - var startCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + upperFirst(word); - }); + var startCase = createCompounder(function (result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word) + }) /** * Checks if `string` starts with the given target string. @@ -41785,11 +41958,11 @@ process.chdir = function (dir) { * _.startsWith('abc', 'b', 1); * // => true */ - function startsWith(string, target, position) { - string = toString(string); - position = baseClamp(toInteger(position), 0, string.length); - return string.lastIndexOf(baseToString(target), position) == position; - } + function startsWith (string, target, position) { + string = toString(string) + position = baseClamp(toInteger(position), 0, string.length) + return string.lastIndexOf(baseToString(target), position) == position + } /** * Creates a compiled template function that can interpolate data properties @@ -41894,83 +42067,83 @@ process.chdir = function (dir) { * };\ * '); */ - function template(string, options, guard) { + function template (string, options, guard) { // Based on John Resig's `tmpl` implementation // (http://ejohn.org/blog/javascript-micro-templating/) // and Laura Doktorova's doT.js (https://github.com/olado/doT). - var settings = lodash.templateSettings; + var settings = lodash.templateSettings - if (guard && isIterateeCall(string, options, guard)) { - options = undefined; - } - string = toString(string); - options = assignInWith({}, options, settings, assignInDefaults); + if (guard && isIterateeCall(string, options, guard)) { + options = undefined + } + string = toString(string) + options = assignInWith({}, options, settings, assignInDefaults) - var imports = assignInWith({}, options.imports, settings.imports, assignInDefaults), - importsKeys = keys(imports), - importsValues = baseValues(imports, importsKeys); + var imports = assignInWith({}, options.imports, settings.imports, assignInDefaults), + importsKeys = keys(imports), + importsValues = baseValues(imports, importsKeys) - var isEscaping, - isEvaluating, - index = 0, - interpolate = options.interpolate || reNoMatch, - source = "__p += '"; + var isEscaping, + isEvaluating, + index = 0, + interpolate = options.interpolate || reNoMatch, + source = "__p += '" // Compile the regexp to match each delimiter. - var reDelimiters = RegExp( + var reDelimiters = RegExp( (options.escape || reNoMatch).source + '|' + interpolate.source + '|' + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + (options.evaluate || reNoMatch).source + '|$' - , 'g'); + , 'g') // Use a sourceURL for easier debugging. - var sourceURL = '//# sourceURL=' + + var sourceURL = '//# sourceURL=' + ('sourceURL' in options ? options.sourceURL : ('lodash.templateSources[' + (++templateCounter) + ']') - ) + '\n'; + ) + '\n' - string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { - interpolateValue || (interpolateValue = esTemplateValue); + string.replace(reDelimiters, function (match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { + interpolateValue || (interpolateValue = esTemplateValue) // Escape characters that can't be included in string literals. - source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); + source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar) // Replace delimiters with snippets. - if (escapeValue) { - isEscaping = true; - source += "' +\n__e(" + escapeValue + ") +\n'"; - } - if (evaluateValue) { - isEvaluating = true; - source += "';\n" + evaluateValue + ";\n__p += '"; - } - if (interpolateValue) { - source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; - } - index = offset + match.length; + if (escapeValue) { + isEscaping = true + source += "' +\n__e(" + escapeValue + ") +\n'" + } + if (evaluateValue) { + isEvaluating = true + source += "';\n" + evaluateValue + ";\n__p += '" + } + if (interpolateValue) { + source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'" + } + index = offset + match.length // The JS engine embedded in Adobe products needs `match` returned in // order to produce the correct `offset` value. - return match; - }); + return match + }) - source += "';\n"; + source += "';\n" // If `variable` is not specified wrap a with-statement around the generated // code to add the data object to the top of the scope chain. - var variable = options.variable; - if (!variable) { - source = 'with (obj) {\n' + source + '\n}\n'; - } + var variable = options.variable + if (!variable) { + source = 'with (obj) {\n' + source + '\n}\n' + } // Cleanup code by stripping empty strings. - source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) + source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) .replace(reEmptyStringMiddle, '$1') - .replace(reEmptyStringTrailing, '$1;'); + .replace(reEmptyStringTrailing, '$1;') // Frame code as the function body. - source = 'function(' + (variable || 'obj') + ') {\n' + + source = 'function(' + (variable || 'obj') + ') {\n' + (variable ? '' : 'obj || (obj = {});\n' @@ -41986,21 +42159,21 @@ process.chdir = function (dir) { : ';\n' ) + source + - 'return __p\n}'; + 'return __p\n}' - var result = attempt(function() { - return Function(importsKeys, sourceURL + 'return ' + source) - .apply(undefined, importsValues); - }); + var result = attempt(function () { + return Function(importsKeys, sourceURL + 'return ' + source) + .apply(undefined, importsValues) + }) // Provide the compiled function's source by its `toString` method or // the `source` property as a convenience for inlining compiled templates. - result.source = source; - if (isError(result)) { - throw result; - } - return result; - } + result.source = source + if (isError(result)) { + throw result + } + return result + } /** * Converts `string`, as a whole, to lower case just like @@ -42023,9 +42196,9 @@ process.chdir = function (dir) { * _.toLower('__FOO_BAR__'); * // => '__foo_bar__' */ - function toLower(value) { - return toString(value).toLowerCase(); - } + function toLower (value) { + return toString(value).toLowerCase() + } /** * Converts `string`, as a whole, to upper case just like @@ -42048,9 +42221,9 @@ process.chdir = function (dir) { * _.toUpper('__foo_bar__'); * // => '__FOO_BAR__' */ - function toUpper(value) { - return toString(value).toUpperCase(); - } + function toUpper (value) { + return toString(value).toUpperCase() + } /** * Removes leading and trailing whitespace or specified characters from `string`. @@ -42074,21 +42247,21 @@ process.chdir = function (dir) { * _.map([' foo ', ' bar '], _.trim); * // => ['foo', 'bar'] */ - function trim(string, chars, guard) { - string = toString(string); - if (string && (guard || chars === undefined)) { - return string.replace(reTrim, ''); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), - chrSymbols = stringToArray(chars), - start = charsStartIndex(strSymbols, chrSymbols), - end = charsEndIndex(strSymbols, chrSymbols) + 1; + function trim (string, chars, guard) { + string = toString(string) + if (string && (guard || chars === undefined)) { + return string.replace(reTrim, '') + } + if (!string || !(chars = baseToString(chars))) { + return string + } + var strSymbols = stringToArray(string), + chrSymbols = stringToArray(chars), + start = charsStartIndex(strSymbols, chrSymbols), + end = charsEndIndex(strSymbols, chrSymbols) + 1 - return castSlice(strSymbols, start, end).join(''); - } + return castSlice(strSymbols, start, end).join('') + } /** * Removes trailing whitespace or specified characters from `string`. @@ -42109,19 +42282,19 @@ process.chdir = function (dir) { * _.trimEnd('-_-abc-_-', '_-'); * // => '-_-abc' */ - function trimEnd(string, chars, guard) { - string = toString(string); - if (string && (guard || chars === undefined)) { - return string.replace(reTrimEnd, ''); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), - end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; + function trimEnd (string, chars, guard) { + string = toString(string) + if (string && (guard || chars === undefined)) { + return string.replace(reTrimEnd, '') + } + if (!string || !(chars = baseToString(chars))) { + return string + } + var strSymbols = stringToArray(string), + end = charsEndIndex(strSymbols, stringToArray(chars)) + 1 - return castSlice(strSymbols, 0, end).join(''); - } + return castSlice(strSymbols, 0, end).join('') + } /** * Removes leading whitespace or specified characters from `string`. @@ -42142,19 +42315,19 @@ process.chdir = function (dir) { * _.trimStart('-_-abc-_-', '_-'); * // => 'abc-_-' */ - function trimStart(string, chars, guard) { - string = toString(string); - if (string && (guard || chars === undefined)) { - return string.replace(reTrimStart, ''); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), - start = charsStartIndex(strSymbols, stringToArray(chars)); + function trimStart (string, chars, guard) { + string = toString(string) + if (string && (guard || chars === undefined)) { + return string.replace(reTrimStart, '') + } + if (!string || !(chars = baseToString(chars))) { + return string + } + var strSymbols = stringToArray(string), + start = charsStartIndex(strSymbols, stringToArray(chars)) - return castSlice(strSymbols, start).join(''); - } + return castSlice(strSymbols, start).join('') + } /** * Truncates `string` if it's longer than the given maximum string length. @@ -42193,61 +42366,61 @@ process.chdir = function (dir) { * }); * // => 'hi-diddly-ho there, neig [...]' */ - function truncate(string, options) { - var length = DEFAULT_TRUNC_LENGTH, - omission = DEFAULT_TRUNC_OMISSION; + function truncate (string, options) { + var length = DEFAULT_TRUNC_LENGTH, + omission = DEFAULT_TRUNC_OMISSION - if (isObject(options)) { - var separator = 'separator' in options ? options.separator : separator; - length = 'length' in options ? toInteger(options.length) : length; - omission = 'omission' in options ? baseToString(options.omission) : omission; - } - string = toString(string); + if (isObject(options)) { + var separator = 'separator' in options ? options.separator : separator + length = 'length' in options ? toInteger(options.length) : length + omission = 'omission' in options ? baseToString(options.omission) : omission + } + string = toString(string) - var strLength = string.length; - if (reHasComplexSymbol.test(string)) { - var strSymbols = stringToArray(string); - strLength = strSymbols.length; - } - if (length >= strLength) { - return string; - } - var end = length - stringSize(omission); - if (end < 1) { - return omission; - } - var result = strSymbols + var strLength = string.length + if (reHasComplexSymbol.test(string)) { + var strSymbols = stringToArray(string) + strLength = strSymbols.length + } + if (length >= strLength) { + return string + } + var end = length - stringSize(omission) + if (end < 1) { + return omission + } + var result = strSymbols ? castSlice(strSymbols, 0, end).join('') - : string.slice(0, end); + : string.slice(0, end) - if (separator === undefined) { - return result + omission; - } - if (strSymbols) { - end += (result.length - end); - } - if (isRegExp(separator)) { - if (string.slice(end).search(separator)) { - var match, - substring = result; - - if (!separator.global) { - separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); - } - separator.lastIndex = 0; - while ((match = separator.exec(substring))) { - var newEnd = match.index; - } - result = result.slice(0, newEnd === undefined ? end : newEnd); - } - } else if (string.indexOf(baseToString(separator), end) != end) { - var index = result.lastIndexOf(separator); - if (index > -1) { - result = result.slice(0, index); - } - } - return result + omission; - } + if (separator === undefined) { + return result + omission + } + if (strSymbols) { + end += (result.length - end) + } + if (isRegExp(separator)) { + if (string.slice(end).search(separator)) { + var match, + substring = result + + if (!separator.global) { + separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g') + } + separator.lastIndex = 0 + while ((match = separator.exec(substring))) { + var newEnd = match.index + } + result = result.slice(0, newEnd === undefined ? end : newEnd) + } + } else if (string.indexOf(baseToString(separator), end) != end) { + var index = result.lastIndexOf(separator) + if (index > -1) { + result = result.slice(0, index) + } + } + return result + omission + } /** * The inverse of `_.escape`; this method converts the HTML entities @@ -42268,12 +42441,12 @@ process.chdir = function (dir) { * _.unescape('fred, barney, & pebbles'); * // => 'fred, barney, & pebbles' */ - function unescape(string) { - string = toString(string); - return (string && reHasEscapedHtml.test(string)) + function unescape (string) { + string = toString(string) + return (string && reHasEscapedHtml.test(string)) ? string.replace(reEscapedHtml, unescapeHtmlChar) - : string; - } + : string + } /** * Converts `string`, as space separated words, to upper case. @@ -42295,9 +42468,9 @@ process.chdir = function (dir) { * _.upperCase('__foo_bar__'); * // => 'FOO BAR' */ - var upperCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + word.toUpperCase(); - }); + var upperCase = createCompounder(function (result, word, index) { + return result + (index ? ' ' : '') + word.toUpperCase() + }) /** * Converts the first character of `string` to upper case. @@ -42316,7 +42489,7 @@ process.chdir = function (dir) { * _.upperFirst('FRED'); * // => 'FRED' */ - var upperFirst = createCaseFirst('toUpperCase'); + var upperFirst = createCaseFirst('toUpperCase') /** * Splits `string` into an array of its words. @@ -42337,17 +42510,17 @@ process.chdir = function (dir) { * _.words('fred, barney, & pebbles', /[^, ]+/g); * // => ['fred', 'barney', '&', 'pebbles'] */ - function words(string, pattern, guard) { - string = toString(string); - pattern = guard ? undefined : pattern; + function words (string, pattern, guard) { + string = toString(string) + pattern = guard ? undefined : pattern - if (pattern === undefined) { - pattern = reHasComplexWord.test(string) ? reComplexWord : reBasicWord; - } - return string.match(pattern) || []; - } + if (pattern === undefined) { + pattern = reHasComplexWord.test(string) ? reComplexWord : reBasicWord + } + return string.match(pattern) || [] + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Attempts to invoke `func`, returning either the result or the caught error @@ -42371,13 +42544,13 @@ process.chdir = function (dir) { * elements = []; * } */ - var attempt = rest(function(func, args) { - try { - return apply(func, undefined, args); - } catch (e) { - return isError(e) ? e : new Error(e); - } - }); + var attempt = rest(function (func, args) { + try { + return apply(func, undefined, args) + } catch (e) { + return isError(e) ? e : new Error(e) + } + }) /** * Binds methods of an object to the object itself, overwriting the existing @@ -42405,13 +42578,13 @@ process.chdir = function (dir) { * jQuery(element).on('click', view.onClick); * // => Logs 'clicked docs' when clicked. */ - var bindAll = rest(function(object, methodNames) { - arrayEach(baseFlatten(methodNames, 1), function(key) { - key = toKey(key); - object[key] = bind(object[key], object); - }); - return object; - }); + var bindAll = rest(function (object, methodNames) { + arrayEach(baseFlatten(methodNames, 1), function (key) { + key = toKey(key) + object[key] = bind(object[key], object) + }) + return object + }) /** * Creates a function that iterates over `pairs` and invokes the corresponding @@ -42442,27 +42615,27 @@ process.chdir = function (dir) { * func({ 'a': '1', 'b': '2' }); * // => 'no match' */ - function cond(pairs) { - var length = pairs ? pairs.length : 0, - toIteratee = getIteratee(); - - pairs = !length ? [] : arrayMap(pairs, function(pair) { - if (typeof pair[1] != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return [toIteratee(pair[0]), pair[1]]; - }); + function cond (pairs) { + var length = pairs ? pairs.length : 0, + toIteratee = getIteratee() - return rest(function(args) { - var index = -1; - while (++index < length) { - var pair = pairs[index]; - if (apply(pair[0], this, args)) { - return apply(pair[1], this, args); - } - } - }); - } + pairs = !length ? [] : arrayMap(pairs, function (pair) { + if (typeof pair[1] !== 'function') { + throw new TypeError(FUNC_ERROR_TEXT) + } + return [toIteratee(pair[0]), pair[1]] + }) + + return rest(function (args) { + var index = -1 + while (++index < length) { + var pair = pairs[index] + if (apply(pair[0], this, args)) { + return apply(pair[1], this, args) + } + } + }) + } /** * Creates a function that invokes the predicate properties of `source` with @@ -42485,9 +42658,9 @@ process.chdir = function (dir) { * _.filter(users, _.conforms({ 'age': function(n) { return n > 38; } })); * // => [{ 'user': 'fred', 'age': 40 }] */ - function conforms(source) { - return baseConforms(baseClone(source, true)); - } + function conforms (source) { + return baseConforms(baseClone(source, true)) + } /** * Creates a function that returns `value`. @@ -42508,11 +42681,11 @@ process.chdir = function (dir) { * console.log(objects[0] === objects[1]); * // => true */ - function constant(value) { - return function() { - return value; - }; - } + function constant (value) { + return function () { + return value + } + } /** * Creates a function that returns the result of invoking the given functions @@ -42536,7 +42709,7 @@ process.chdir = function (dir) { * addSquare(1, 2); * // => 9 */ - var flow = createFlow(); + var flow = createFlow() /** * This method is like `_.flow` except that it creates a function that @@ -42559,7 +42732,7 @@ process.chdir = function (dir) { * addSquare(1, 2); * // => 9 */ - var flowRight = createFlow(true); + var flowRight = createFlow(true) /** * This method returns the first argument given to it. @@ -42577,9 +42750,9 @@ process.chdir = function (dir) { * console.log(_.identity(object) === object); * // => true */ - function identity(value) { - return value; - } + function identity (value) { + return value + } /** * Creates a function that invokes `func` with the arguments of the created @@ -42623,9 +42796,9 @@ process.chdir = function (dir) { * _.filter(['abc', 'def'], /ef/); * // => ['def'] */ - function iteratee(func) { - return baseIteratee(typeof func == 'function' ? func : baseClone(func, true)); - } + function iteratee (func) { + return baseIteratee(typeof func === 'function' ? func : baseClone(func, true)) + } /** * Creates a function that performs a partial deep comparison between a given @@ -42651,9 +42824,9 @@ process.chdir = function (dir) { * _.filter(users, _.matches({ 'age': 40, 'active': false })); * // => [{ 'user': 'fred', 'age': 40, 'active': false }] */ - function matches(source) { - return baseMatches(baseClone(source, true)); - } + function matches (source) { + return baseMatches(baseClone(source, true)) + } /** * Creates a function that performs a partial deep comparison between the @@ -42679,9 +42852,9 @@ process.chdir = function (dir) { * _.find(users, _.matchesProperty('user', 'fred')); * // => { 'user': 'fred' } */ - function matchesProperty(path, srcValue) { - return baseMatchesProperty(path, baseClone(srcValue, true)); - } + function matchesProperty (path, srcValue) { + return baseMatchesProperty(path, baseClone(srcValue, true)) + } /** * Creates a function that invokes the method at `path` of a given object. @@ -42707,11 +42880,11 @@ process.chdir = function (dir) { * _.map(objects, _.method(['a', 'b'])); * // => [2, 1] */ - var method = rest(function(path, args) { - return function(object) { - return baseInvoke(object, path, args); - }; - }); + var method = rest(function (path, args) { + return function (object) { + return baseInvoke(object, path, args) + } + }) /** * The opposite of `_.method`; this method creates a function that invokes @@ -42736,11 +42909,11 @@ process.chdir = function (dir) { * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); * // => [2, 0] */ - var methodOf = rest(function(object, args) { - return function(path) { - return baseInvoke(object, path, args); - }; - }); + var methodOf = rest(function (object, args) { + return function (path) { + return baseInvoke(object, path, args) + } + }) /** * Adds all own enumerable string keyed function properties of a source @@ -42778,41 +42951,41 @@ process.chdir = function (dir) { * _('fred').vowels(); * // => ['e'] */ - function mixin(object, source, options) { - var props = keys(source), - methodNames = baseFunctions(source, props); + function mixin (object, source, options) { + var props = keys(source), + methodNames = baseFunctions(source, props) - if (options == null && + if (options == null && !(isObject(source) && (methodNames.length || !props.length))) { - options = source; - source = object; - object = this; - methodNames = baseFunctions(source, keys(source)); - } - var chain = !(isObject(options) && 'chain' in options) || !!options.chain, - isFunc = isFunction(object); - - arrayEach(methodNames, function(methodName) { - var func = source[methodName]; - object[methodName] = func; - if (isFunc) { - object.prototype[methodName] = function() { - var chainAll = this.__chain__; - if (chain || chainAll) { - var result = object(this.__wrapped__), - actions = result.__actions__ = copyArray(this.__actions__); - - actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); - result.__chain__ = chainAll; - return result; - } - return func.apply(object, arrayPush([this.value()], arguments)); - }; - } - }); + options = source + source = object + object = this + methodNames = baseFunctions(source, keys(source)) + } + var chain = !(isObject(options) && 'chain' in options) || !!options.chain, + isFunc = isFunction(object) + + arrayEach(methodNames, function (methodName) { + var func = source[methodName] + object[methodName] = func + if (isFunc) { + object.prototype[methodName] = function () { + var chainAll = this.__chain__ + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = copyArray(this.__actions__) + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }) + result.__chain__ = chainAll + return result + } + return func.apply(object, arrayPush([this.value()], arguments)) + } + } + }) - return object; - } + return object + } /** * Reverts the `_` variable to its previous value and returns a reference to @@ -42827,12 +43000,12 @@ process.chdir = function (dir) { * * var lodash = _.noConflict(); */ - function noConflict() { - if (root._ === this) { - root._ = oldDash; - } - return this; - } + function noConflict () { + if (root._ === this) { + root._ = oldDash + } + return this + } /** * A method that returns `undefined`. @@ -42846,9 +43019,9 @@ process.chdir = function (dir) { * _.times(2, _.noop); * // => [undefined, undefined] */ - function noop() { + function noop () { // No operation performed. - } + } /** * Creates a function that gets the argument at index `n`. If `n` is negative, @@ -42870,12 +43043,12 @@ process.chdir = function (dir) { * func('a', 'b', 'c', 'd'); * // => 'c' */ - function nthArg(n) { - n = toInteger(n); - return rest(function(args) { - return baseNth(args, n); - }); - } + function nthArg (n) { + n = toInteger(n) + return rest(function (args) { + return baseNth(args, n) + }) + } /** * Creates a function that invokes `iteratees` with the arguments it receives @@ -42895,7 +43068,7 @@ process.chdir = function (dir) { * func(1, 2, 3, 4); * // => [4, 1] */ - var over = createOver(arrayMap); + var over = createOver(arrayMap) /** * Creates a function that checks if **all** of the `predicates` return @@ -42921,7 +43094,7 @@ process.chdir = function (dir) { * func(NaN); * // => false */ - var overEvery = createOver(arrayEvery); + var overEvery = createOver(arrayEvery) /** * Creates a function that checks if **any** of the `predicates` return @@ -42947,7 +43120,7 @@ process.chdir = function (dir) { * func(NaN); * // => false */ - var overSome = createOver(arraySome); + var overSome = createOver(arraySome) /** * Creates a function that returns the value at `path` of a given object. @@ -42971,9 +43144,9 @@ process.chdir = function (dir) { * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); * // => [1, 2] */ - function property(path) { - return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); - } + function property (path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path) + } /** * The opposite of `_.property`; this method creates a function that returns @@ -42996,11 +43169,11 @@ process.chdir = function (dir) { * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); * // => [2, 0] */ - function propertyOf(object) { - return function(path) { - return object == null ? undefined : baseGet(object, path); - }; - } + function propertyOf (object) { + return function (path) { + return object == null ? undefined : baseGet(object, path) + } + } /** * Creates an array of numbers (positive and/or negative) progressing from @@ -43043,7 +43216,7 @@ process.chdir = function (dir) { * _.range(0); * // => [] */ - var range = createRange(); + var range = createRange() /** * This method is like `_.range` except that it populates values in @@ -43081,7 +43254,7 @@ process.chdir = function (dir) { * _.rangeRight(0); * // => [] */ - var rangeRight = createRange(true); + var rangeRight = createRange(true) /** * A method that returns a new empty array. @@ -43101,9 +43274,9 @@ process.chdir = function (dir) { * console.log(arrays[0] === arrays[1]); * // => false */ - function stubArray() { - return []; - } + function stubArray () { + return [] + } /** * A method that returns `false`. @@ -43118,9 +43291,9 @@ process.chdir = function (dir) { * _.times(2, _.stubFalse); * // => [false, false] */ - function stubFalse() { - return false; - } + function stubFalse () { + return false + } /** * A method that returns a new empty object. @@ -43140,9 +43313,9 @@ process.chdir = function (dir) { * console.log(objects[0] === objects[1]); * // => false */ - function stubObject() { - return {}; - } + function stubObject () { + return {} + } /** * A method that returns an empty string. @@ -43157,9 +43330,9 @@ process.chdir = function (dir) { * _.times(2, _.stubString); * // => ['', ''] */ - function stubString() { - return ''; - } + function stubString () { + return '' + } /** * A method that returns `true`. @@ -43174,9 +43347,9 @@ process.chdir = function (dir) { * _.times(2, _.stubTrue); * // => [true, true] */ - function stubTrue() { - return true; - } + function stubTrue () { + return true + } /** * Invokes the iteratee `n` times, returning an array of the results of @@ -43197,23 +43370,23 @@ process.chdir = function (dir) { * _.times(4, _.constant(0)); * // => [0, 0, 0, 0] */ - function times(n, iteratee) { - n = toInteger(n); - if (n < 1 || n > MAX_SAFE_INTEGER) { - return []; - } - var index = MAX_ARRAY_LENGTH, - length = nativeMin(n, MAX_ARRAY_LENGTH); + function times (n, iteratee) { + n = toInteger(n) + if (n < 1 || n > MAX_SAFE_INTEGER) { + return [] + } + var index = MAX_ARRAY_LENGTH, + length = nativeMin(n, MAX_ARRAY_LENGTH) - iteratee = getIteratee(iteratee); - n -= MAX_ARRAY_LENGTH; + iteratee = getIteratee(iteratee) + n -= MAX_ARRAY_LENGTH - var result = baseTimes(length, iteratee); - while (++index < n) { - iteratee(index); - } - return result; - } + var result = baseTimes(length, iteratee) + while (++index < n) { + iteratee(index) + } + return result + } /** * Converts `value` to a property path array. @@ -43232,12 +43405,12 @@ process.chdir = function (dir) { * _.toPath('a[0].b.c'); * // => ['a', '0', 'b', 'c'] */ - function toPath(value) { - if (isArray(value)) { - return arrayMap(value, toKey); - } - return isSymbol(value) ? [value] : copyArray(stringToPath(value)); - } + function toPath (value) { + if (isArray(value)) { + return arrayMap(value, toKey) + } + return isSymbol(value) ? [value] : copyArray(stringToPath(value)) + } /** * Generates a unique ID. If `prefix` is given, the ID is appended to it. @@ -43256,12 +43429,12 @@ process.chdir = function (dir) { * _.uniqueId(); * // => '105' */ - function uniqueId(prefix) { - var id = ++idCounter; - return toString(prefix) + id; - } + function uniqueId (prefix) { + var id = ++idCounter + return toString(prefix) + id + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * Adds two numbers. @@ -43278,9 +43451,9 @@ process.chdir = function (dir) { * _.add(6, 4); * // => 10 */ - var add = createMathOperation(function(augend, addend) { - return augend + addend; - }); + var add = createMathOperation(function (augend, addend) { + return augend + addend + }) /** * Computes `number` rounded up to `precision`. @@ -43303,7 +43476,7 @@ process.chdir = function (dir) { * _.ceil(6040, -2); * // => 6100 */ - var ceil = createRound('ceil'); + var ceil = createRound('ceil') /** * Divide two numbers. @@ -43320,9 +43493,9 @@ process.chdir = function (dir) { * _.divide(6, 4); * // => 1.5 */ - var divide = createMathOperation(function(dividend, divisor) { - return dividend / divisor; - }); + var divide = createMathOperation(function (dividend, divisor) { + return dividend / divisor + }) /** * Computes `number` rounded down to `precision`. @@ -43345,7 +43518,7 @@ process.chdir = function (dir) { * _.floor(4060, -2); * // => 4000 */ - var floor = createRound('floor'); + var floor = createRound('floor') /** * Computes the maximum value of `array`. If `array` is empty or falsey, @@ -43365,11 +43538,11 @@ process.chdir = function (dir) { * _.max([]); * // => undefined */ - function max(array) { - return (array && array.length) + function max (array) { + return (array && array.length) ? baseExtremum(array, identity, baseGt) - : undefined; - } + : undefined + } /** * This method is like `_.max` except that it accepts `iteratee` which is @@ -43395,11 +43568,11 @@ process.chdir = function (dir) { * _.maxBy(objects, 'n'); * // => { 'n': 2 } */ - function maxBy(array, iteratee) { - return (array && array.length) + function maxBy (array, iteratee) { + return (array && array.length) ? baseExtremum(array, getIteratee(iteratee), baseGt) - : undefined; - } + : undefined + } /** * Computes the mean of the values in `array`. @@ -43415,9 +43588,9 @@ process.chdir = function (dir) { * _.mean([4, 2, 8, 6]); * // => 5 */ - function mean(array) { - return baseMean(array, identity); - } + function mean (array) { + return baseMean(array, identity) + } /** * This method is like `_.mean` except that it accepts `iteratee` which is @@ -43443,9 +43616,9 @@ process.chdir = function (dir) { * _.meanBy(objects, 'n'); * // => 5 */ - function meanBy(array, iteratee) { - return baseMean(array, getIteratee(iteratee)); - } + function meanBy (array, iteratee) { + return baseMean(array, getIteratee(iteratee)) + } /** * Computes the minimum value of `array`. If `array` is empty or falsey, @@ -43465,11 +43638,11 @@ process.chdir = function (dir) { * _.min([]); * // => undefined */ - function min(array) { - return (array && array.length) + function min (array) { + return (array && array.length) ? baseExtremum(array, identity, baseLt) - : undefined; - } + : undefined + } /** * This method is like `_.min` except that it accepts `iteratee` which is @@ -43495,11 +43668,11 @@ process.chdir = function (dir) { * _.minBy(objects, 'n'); * // => { 'n': 1 } */ - function minBy(array, iteratee) { - return (array && array.length) + function minBy (array, iteratee) { + return (array && array.length) ? baseExtremum(array, getIteratee(iteratee), baseLt) - : undefined; - } + : undefined + } /** * Multiply two numbers. @@ -43516,9 +43689,9 @@ process.chdir = function (dir) { * _.multiply(6, 4); * // => 24 */ - var multiply = createMathOperation(function(multiplier, multiplicand) { - return multiplier * multiplicand; - }); + var multiply = createMathOperation(function (multiplier, multiplicand) { + return multiplier * multiplicand + }) /** * Computes `number` rounded to `precision`. @@ -43541,7 +43714,7 @@ process.chdir = function (dir) { * _.round(4060, -2); * // => 4100 */ - var round = createRound('round'); + var round = createRound('round') /** * Subtract two numbers. @@ -43558,9 +43731,9 @@ process.chdir = function (dir) { * _.subtract(6, 4); * // => 2 */ - var subtract = createMathOperation(function(minuend, subtrahend) { - return minuend - subtrahend; - }); + var subtract = createMathOperation(function (minuend, subtrahend) { + return minuend - subtrahend + }) /** * Computes the sum of the values in `array`. @@ -43576,11 +43749,11 @@ process.chdir = function (dir) { * _.sum([4, 2, 8, 6]); * // => 20 */ - function sum(array) { - return (array && array.length) + function sum (array) { + return (array && array.length) ? baseSum(array, identity) - : 0; - } + : 0 + } /** * This method is like `_.sum` except that it accepts `iteratee` which is @@ -43606,341 +43779,341 @@ process.chdir = function (dir) { * _.sumBy(objects, 'n'); * // => 20 */ - function sumBy(array, iteratee) { - return (array && array.length) + function sumBy (array, iteratee) { + return (array && array.length) ? baseSum(array, getIteratee(iteratee)) - : 0; - } + : 0 + } - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ // Add methods that return wrapped values in chain sequences. - lodash.after = after; - lodash.ary = ary; - lodash.assign = assign; - lodash.assignIn = assignIn; - lodash.assignInWith = assignInWith; - lodash.assignWith = assignWith; - lodash.at = at; - lodash.before = before; - lodash.bind = bind; - lodash.bindAll = bindAll; - lodash.bindKey = bindKey; - lodash.castArray = castArray; - lodash.chain = chain; - lodash.chunk = chunk; - lodash.compact = compact; - lodash.concat = concat; - lodash.cond = cond; - lodash.conforms = conforms; - lodash.constant = constant; - lodash.countBy = countBy; - lodash.create = create; - lodash.curry = curry; - lodash.curryRight = curryRight; - lodash.debounce = debounce; - lodash.defaults = defaults; - lodash.defaultsDeep = defaultsDeep; - lodash.defer = defer; - lodash.delay = delay; - lodash.difference = difference; - lodash.differenceBy = differenceBy; - lodash.differenceWith = differenceWith; - lodash.drop = drop; - lodash.dropRight = dropRight; - lodash.dropRightWhile = dropRightWhile; - lodash.dropWhile = dropWhile; - lodash.fill = fill; - lodash.filter = filter; - lodash.flatMap = flatMap; - lodash.flatMapDeep = flatMapDeep; - lodash.flatMapDepth = flatMapDepth; - lodash.flatten = flatten; - lodash.flattenDeep = flattenDeep; - lodash.flattenDepth = flattenDepth; - lodash.flip = flip; - lodash.flow = flow; - lodash.flowRight = flowRight; - lodash.fromPairs = fromPairs; - lodash.functions = functions; - lodash.functionsIn = functionsIn; - lodash.groupBy = groupBy; - lodash.initial = initial; - lodash.intersection = intersection; - lodash.intersectionBy = intersectionBy; - lodash.intersectionWith = intersectionWith; - lodash.invert = invert; - lodash.invertBy = invertBy; - lodash.invokeMap = invokeMap; - lodash.iteratee = iteratee; - lodash.keyBy = keyBy; - lodash.keys = keys; - lodash.keysIn = keysIn; - lodash.map = map; - lodash.mapKeys = mapKeys; - lodash.mapValues = mapValues; - lodash.matches = matches; - lodash.matchesProperty = matchesProperty; - lodash.memoize = memoize; - lodash.merge = merge; - lodash.mergeWith = mergeWith; - lodash.method = method; - lodash.methodOf = methodOf; - lodash.mixin = mixin; - lodash.negate = negate; - lodash.nthArg = nthArg; - lodash.omit = omit; - lodash.omitBy = omitBy; - lodash.once = once; - lodash.orderBy = orderBy; - lodash.over = over; - lodash.overArgs = overArgs; - lodash.overEvery = overEvery; - lodash.overSome = overSome; - lodash.partial = partial; - lodash.partialRight = partialRight; - lodash.partition = partition; - lodash.pick = pick; - lodash.pickBy = pickBy; - lodash.property = property; - lodash.propertyOf = propertyOf; - lodash.pull = pull; - lodash.pullAll = pullAll; - lodash.pullAllBy = pullAllBy; - lodash.pullAllWith = pullAllWith; - lodash.pullAt = pullAt; - lodash.range = range; - lodash.rangeRight = rangeRight; - lodash.rearg = rearg; - lodash.reject = reject; - lodash.remove = remove; - lodash.rest = rest; - lodash.reverse = reverse; - lodash.sampleSize = sampleSize; - lodash.set = set; - lodash.setWith = setWith; - lodash.shuffle = shuffle; - lodash.slice = slice; - lodash.sortBy = sortBy; - lodash.sortedUniq = sortedUniq; - lodash.sortedUniqBy = sortedUniqBy; - lodash.split = split; - lodash.spread = spread; - lodash.tail = tail; - lodash.take = take; - lodash.takeRight = takeRight; - lodash.takeRightWhile = takeRightWhile; - lodash.takeWhile = takeWhile; - lodash.tap = tap; - lodash.throttle = throttle; - lodash.thru = thru; - lodash.toArray = toArray; - lodash.toPairs = toPairs; - lodash.toPairsIn = toPairsIn; - lodash.toPath = toPath; - lodash.toPlainObject = toPlainObject; - lodash.transform = transform; - lodash.unary = unary; - lodash.union = union; - lodash.unionBy = unionBy; - lodash.unionWith = unionWith; - lodash.uniq = uniq; - lodash.uniqBy = uniqBy; - lodash.uniqWith = uniqWith; - lodash.unset = unset; - lodash.unzip = unzip; - lodash.unzipWith = unzipWith; - lodash.update = update; - lodash.updateWith = updateWith; - lodash.values = values; - lodash.valuesIn = valuesIn; - lodash.without = without; - lodash.words = words; - lodash.wrap = wrap; - lodash.xor = xor; - lodash.xorBy = xorBy; - lodash.xorWith = xorWith; - lodash.zip = zip; - lodash.zipObject = zipObject; - lodash.zipObjectDeep = zipObjectDeep; - lodash.zipWith = zipWith; + lodash.after = after + lodash.ary = ary + lodash.assign = assign + lodash.assignIn = assignIn + lodash.assignInWith = assignInWith + lodash.assignWith = assignWith + lodash.at = at + lodash.before = before + lodash.bind = bind + lodash.bindAll = bindAll + lodash.bindKey = bindKey + lodash.castArray = castArray + lodash.chain = chain + lodash.chunk = chunk + lodash.compact = compact + lodash.concat = concat + lodash.cond = cond + lodash.conforms = conforms + lodash.constant = constant + lodash.countBy = countBy + lodash.create = create + lodash.curry = curry + lodash.curryRight = curryRight + lodash.debounce = debounce + lodash.defaults = defaults + lodash.defaultsDeep = defaultsDeep + lodash.defer = defer + lodash.delay = delay + lodash.difference = difference + lodash.differenceBy = differenceBy + lodash.differenceWith = differenceWith + lodash.drop = drop + lodash.dropRight = dropRight + lodash.dropRightWhile = dropRightWhile + lodash.dropWhile = dropWhile + lodash.fill = fill + lodash.filter = filter + lodash.flatMap = flatMap + lodash.flatMapDeep = flatMapDeep + lodash.flatMapDepth = flatMapDepth + lodash.flatten = flatten + lodash.flattenDeep = flattenDeep + lodash.flattenDepth = flattenDepth + lodash.flip = flip + lodash.flow = flow + lodash.flowRight = flowRight + lodash.fromPairs = fromPairs + lodash.functions = functions + lodash.functionsIn = functionsIn + lodash.groupBy = groupBy + lodash.initial = initial + lodash.intersection = intersection + lodash.intersectionBy = intersectionBy + lodash.intersectionWith = intersectionWith + lodash.invert = invert + lodash.invertBy = invertBy + lodash.invokeMap = invokeMap + lodash.iteratee = iteratee + lodash.keyBy = keyBy + lodash.keys = keys + lodash.keysIn = keysIn + lodash.map = map + lodash.mapKeys = mapKeys + lodash.mapValues = mapValues + lodash.matches = matches + lodash.matchesProperty = matchesProperty + lodash.memoize = memoize + lodash.merge = merge + lodash.mergeWith = mergeWith + lodash.method = method + lodash.methodOf = methodOf + lodash.mixin = mixin + lodash.negate = negate + lodash.nthArg = nthArg + lodash.omit = omit + lodash.omitBy = omitBy + lodash.once = once + lodash.orderBy = orderBy + lodash.over = over + lodash.overArgs = overArgs + lodash.overEvery = overEvery + lodash.overSome = overSome + lodash.partial = partial + lodash.partialRight = partialRight + lodash.partition = partition + lodash.pick = pick + lodash.pickBy = pickBy + lodash.property = property + lodash.propertyOf = propertyOf + lodash.pull = pull + lodash.pullAll = pullAll + lodash.pullAllBy = pullAllBy + lodash.pullAllWith = pullAllWith + lodash.pullAt = pullAt + lodash.range = range + lodash.rangeRight = rangeRight + lodash.rearg = rearg + lodash.reject = reject + lodash.remove = remove + lodash.rest = rest + lodash.reverse = reverse + lodash.sampleSize = sampleSize + lodash.set = set + lodash.setWith = setWith + lodash.shuffle = shuffle + lodash.slice = slice + lodash.sortBy = sortBy + lodash.sortedUniq = sortedUniq + lodash.sortedUniqBy = sortedUniqBy + lodash.split = split + lodash.spread = spread + lodash.tail = tail + lodash.take = take + lodash.takeRight = takeRight + lodash.takeRightWhile = takeRightWhile + lodash.takeWhile = takeWhile + lodash.tap = tap + lodash.throttle = throttle + lodash.thru = thru + lodash.toArray = toArray + lodash.toPairs = toPairs + lodash.toPairsIn = toPairsIn + lodash.toPath = toPath + lodash.toPlainObject = toPlainObject + lodash.transform = transform + lodash.unary = unary + lodash.union = union + lodash.unionBy = unionBy + lodash.unionWith = unionWith + lodash.uniq = uniq + lodash.uniqBy = uniqBy + lodash.uniqWith = uniqWith + lodash.unset = unset + lodash.unzip = unzip + lodash.unzipWith = unzipWith + lodash.update = update + lodash.updateWith = updateWith + lodash.values = values + lodash.valuesIn = valuesIn + lodash.without = without + lodash.words = words + lodash.wrap = wrap + lodash.xor = xor + lodash.xorBy = xorBy + lodash.xorWith = xorWith + lodash.zip = zip + lodash.zipObject = zipObject + lodash.zipObjectDeep = zipObjectDeep + lodash.zipWith = zipWith // Add aliases. - lodash.entries = toPairs; - lodash.entriesIn = toPairsIn; - lodash.extend = assignIn; - lodash.extendWith = assignInWith; + lodash.entries = toPairs + lodash.entriesIn = toPairsIn + lodash.extend = assignIn + lodash.extendWith = assignInWith // Add methods to `lodash.prototype`. - mixin(lodash, lodash); + mixin(lodash, lodash) - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ // Add methods that return unwrapped values in chain sequences. - lodash.add = add; - lodash.attempt = attempt; - lodash.camelCase = camelCase; - lodash.capitalize = capitalize; - lodash.ceil = ceil; - lodash.clamp = clamp; - lodash.clone = clone; - lodash.cloneDeep = cloneDeep; - lodash.cloneDeepWith = cloneDeepWith; - lodash.cloneWith = cloneWith; - lodash.deburr = deburr; - lodash.divide = divide; - lodash.endsWith = endsWith; - lodash.eq = eq; - lodash.escape = escape; - lodash.escapeRegExp = escapeRegExp; - lodash.every = every; - lodash.find = find; - lodash.findIndex = findIndex; - lodash.findKey = findKey; - lodash.findLast = findLast; - lodash.findLastIndex = findLastIndex; - lodash.findLastKey = findLastKey; - lodash.floor = floor; - lodash.forEach = forEach; - lodash.forEachRight = forEachRight; - lodash.forIn = forIn; - lodash.forInRight = forInRight; - lodash.forOwn = forOwn; - lodash.forOwnRight = forOwnRight; - lodash.get = get; - lodash.gt = gt; - lodash.gte = gte; - lodash.has = has; - lodash.hasIn = hasIn; - lodash.head = head; - lodash.identity = identity; - lodash.includes = includes; - lodash.indexOf = indexOf; - lodash.inRange = inRange; - lodash.invoke = invoke; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isArrayBuffer = isArrayBuffer; - lodash.isArrayLike = isArrayLike; - lodash.isArrayLikeObject = isArrayLikeObject; - lodash.isBoolean = isBoolean; - lodash.isBuffer = isBuffer; - lodash.isDate = isDate; - lodash.isElement = isElement; - lodash.isEmpty = isEmpty; - lodash.isEqual = isEqual; - lodash.isEqualWith = isEqualWith; - lodash.isError = isError; - lodash.isFinite = isFinite; - lodash.isFunction = isFunction; - lodash.isInteger = isInteger; - lodash.isLength = isLength; - lodash.isMap = isMap; - lodash.isMatch = isMatch; - lodash.isMatchWith = isMatchWith; - lodash.isNaN = isNaN; - lodash.isNative = isNative; - lodash.isNil = isNil; - lodash.isNull = isNull; - lodash.isNumber = isNumber; - lodash.isObject = isObject; - lodash.isObjectLike = isObjectLike; - lodash.isPlainObject = isPlainObject; - lodash.isRegExp = isRegExp; - lodash.isSafeInteger = isSafeInteger; - lodash.isSet = isSet; - lodash.isString = isString; - lodash.isSymbol = isSymbol; - lodash.isTypedArray = isTypedArray; - lodash.isUndefined = isUndefined; - lodash.isWeakMap = isWeakMap; - lodash.isWeakSet = isWeakSet; - lodash.join = join; - lodash.kebabCase = kebabCase; - lodash.last = last; - lodash.lastIndexOf = lastIndexOf; - lodash.lowerCase = lowerCase; - lodash.lowerFirst = lowerFirst; - lodash.lt = lt; - lodash.lte = lte; - lodash.max = max; - lodash.maxBy = maxBy; - lodash.mean = mean; - lodash.meanBy = meanBy; - lodash.min = min; - lodash.minBy = minBy; - lodash.stubArray = stubArray; - lodash.stubFalse = stubFalse; - lodash.stubObject = stubObject; - lodash.stubString = stubString; - lodash.stubTrue = stubTrue; - lodash.multiply = multiply; - lodash.nth = nth; - lodash.noConflict = noConflict; - lodash.noop = noop; - lodash.now = now; - lodash.pad = pad; - lodash.padEnd = padEnd; - lodash.padStart = padStart; - lodash.parseInt = parseInt; - lodash.random = random; - lodash.reduce = reduce; - lodash.reduceRight = reduceRight; - lodash.repeat = repeat; - lodash.replace = replace; - lodash.result = result; - lodash.round = round; - lodash.runInContext = runInContext; - lodash.sample = sample; - lodash.size = size; - lodash.snakeCase = snakeCase; - lodash.some = some; - lodash.sortedIndex = sortedIndex; - lodash.sortedIndexBy = sortedIndexBy; - lodash.sortedIndexOf = sortedIndexOf; - lodash.sortedLastIndex = sortedLastIndex; - lodash.sortedLastIndexBy = sortedLastIndexBy; - lodash.sortedLastIndexOf = sortedLastIndexOf; - lodash.startCase = startCase; - lodash.startsWith = startsWith; - lodash.subtract = subtract; - lodash.sum = sum; - lodash.sumBy = sumBy; - lodash.template = template; - lodash.times = times; - lodash.toFinite = toFinite; - lodash.toInteger = toInteger; - lodash.toLength = toLength; - lodash.toLower = toLower; - lodash.toNumber = toNumber; - lodash.toSafeInteger = toSafeInteger; - lodash.toString = toString; - lodash.toUpper = toUpper; - lodash.trim = trim; - lodash.trimEnd = trimEnd; - lodash.trimStart = trimStart; - lodash.truncate = truncate; - lodash.unescape = unescape; - lodash.uniqueId = uniqueId; - lodash.upperCase = upperCase; - lodash.upperFirst = upperFirst; + lodash.add = add + lodash.attempt = attempt + lodash.camelCase = camelCase + lodash.capitalize = capitalize + lodash.ceil = ceil + lodash.clamp = clamp + lodash.clone = clone + lodash.cloneDeep = cloneDeep + lodash.cloneDeepWith = cloneDeepWith + lodash.cloneWith = cloneWith + lodash.deburr = deburr + lodash.divide = divide + lodash.endsWith = endsWith + lodash.eq = eq + lodash.escape = escape + lodash.escapeRegExp = escapeRegExp + lodash.every = every + lodash.find = find + lodash.findIndex = findIndex + lodash.findKey = findKey + lodash.findLast = findLast + lodash.findLastIndex = findLastIndex + lodash.findLastKey = findLastKey + lodash.floor = floor + lodash.forEach = forEach + lodash.forEachRight = forEachRight + lodash.forIn = forIn + lodash.forInRight = forInRight + lodash.forOwn = forOwn + lodash.forOwnRight = forOwnRight + lodash.get = get + lodash.gt = gt + lodash.gte = gte + lodash.has = has + lodash.hasIn = hasIn + lodash.head = head + lodash.identity = identity + lodash.includes = includes + lodash.indexOf = indexOf + lodash.inRange = inRange + lodash.invoke = invoke + lodash.isArguments = isArguments + lodash.isArray = isArray + lodash.isArrayBuffer = isArrayBuffer + lodash.isArrayLike = isArrayLike + lodash.isArrayLikeObject = isArrayLikeObject + lodash.isBoolean = isBoolean + lodash.isBuffer = isBuffer + lodash.isDate = isDate + lodash.isElement = isElement + lodash.isEmpty = isEmpty + lodash.isEqual = isEqual + lodash.isEqualWith = isEqualWith + lodash.isError = isError + lodash.isFinite = isFinite + lodash.isFunction = isFunction + lodash.isInteger = isInteger + lodash.isLength = isLength + lodash.isMap = isMap + lodash.isMatch = isMatch + lodash.isMatchWith = isMatchWith + lodash.isNaN = isNaN + lodash.isNative = isNative + lodash.isNil = isNil + lodash.isNull = isNull + lodash.isNumber = isNumber + lodash.isObject = isObject + lodash.isObjectLike = isObjectLike + lodash.isPlainObject = isPlainObject + lodash.isRegExp = isRegExp + lodash.isSafeInteger = isSafeInteger + lodash.isSet = isSet + lodash.isString = isString + lodash.isSymbol = isSymbol + lodash.isTypedArray = isTypedArray + lodash.isUndefined = isUndefined + lodash.isWeakMap = isWeakMap + lodash.isWeakSet = isWeakSet + lodash.join = join + lodash.kebabCase = kebabCase + lodash.last = last + lodash.lastIndexOf = lastIndexOf + lodash.lowerCase = lowerCase + lodash.lowerFirst = lowerFirst + lodash.lt = lt + lodash.lte = lte + lodash.max = max + lodash.maxBy = maxBy + lodash.mean = mean + lodash.meanBy = meanBy + lodash.min = min + lodash.minBy = minBy + lodash.stubArray = stubArray + lodash.stubFalse = stubFalse + lodash.stubObject = stubObject + lodash.stubString = stubString + lodash.stubTrue = stubTrue + lodash.multiply = multiply + lodash.nth = nth + lodash.noConflict = noConflict + lodash.noop = noop + lodash.now = now + lodash.pad = pad + lodash.padEnd = padEnd + lodash.padStart = padStart + lodash.parseInt = parseInt + lodash.random = random + lodash.reduce = reduce + lodash.reduceRight = reduceRight + lodash.repeat = repeat + lodash.replace = replace + lodash.result = result + lodash.round = round + lodash.runInContext = runInContext + lodash.sample = sample + lodash.size = size + lodash.snakeCase = snakeCase + lodash.some = some + lodash.sortedIndex = sortedIndex + lodash.sortedIndexBy = sortedIndexBy + lodash.sortedIndexOf = sortedIndexOf + lodash.sortedLastIndex = sortedLastIndex + lodash.sortedLastIndexBy = sortedLastIndexBy + lodash.sortedLastIndexOf = sortedLastIndexOf + lodash.startCase = startCase + lodash.startsWith = startsWith + lodash.subtract = subtract + lodash.sum = sum + lodash.sumBy = sumBy + lodash.template = template + lodash.times = times + lodash.toFinite = toFinite + lodash.toInteger = toInteger + lodash.toLength = toLength + lodash.toLower = toLower + lodash.toNumber = toNumber + lodash.toSafeInteger = toSafeInteger + lodash.toString = toString + lodash.toUpper = toUpper + lodash.trim = trim + lodash.trimEnd = trimEnd + lodash.trimStart = trimStart + lodash.truncate = truncate + lodash.unescape = unescape + lodash.uniqueId = uniqueId + lodash.upperCase = upperCase + lodash.upperFirst = upperFirst // Add aliases. - lodash.each = forEach; - lodash.eachRight = forEachRight; - lodash.first = head; - - mixin(lodash, (function() { - var source = {}; - baseForOwn(lodash, function(func, methodName) { - if (!hasOwnProperty.call(lodash.prototype, methodName)) { - source[methodName] = func; - } - }); - return source; - }()), { 'chain': false }); + lodash.each = forEach + lodash.eachRight = forEachRight + lodash.first = head + + mixin(lodash, (function () { + var source = {} + baseForOwn(lodash, function (func, methodName) { + if (!hasOwnProperty.call(lodash.prototype, methodName)) { + source[methodName] = func + } + }) + return source + }()), { 'chain': false }) - /*------------------------------------------------------------------------*/ + /* ------------------------------------------------------------------------ */ /** * The semantic version number. @@ -43949,377 +44122,377 @@ process.chdir = function (dir) { * @memberOf _ * @type {string} */ - lodash.VERSION = VERSION; + lodash.VERSION = VERSION // Assign default placeholders. - arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { - lodash[methodName].placeholder = lodash; - }); + arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function (methodName) { + lodash[methodName].placeholder = lodash + }) // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. - arrayEach(['drop', 'take'], function(methodName, index) { - LazyWrapper.prototype[methodName] = function(n) { - var filtered = this.__filtered__; - if (filtered && !index) { - return new LazyWrapper(this); - } - n = n === undefined ? 1 : nativeMax(toInteger(n), 0); + arrayEach(['drop', 'take'], function (methodName, index) { + LazyWrapper.prototype[methodName] = function (n) { + var filtered = this.__filtered__ + if (filtered && !index) { + return new LazyWrapper(this) + } + n = n === undefined ? 1 : nativeMax(toInteger(n), 0) - var result = this.clone(); - if (filtered) { - result.__takeCount__ = nativeMin(n, result.__takeCount__); - } else { - result.__views__.push({ - 'size': nativeMin(n, MAX_ARRAY_LENGTH), - 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') - }); - } - return result; - }; + var result = this.clone() + if (filtered) { + result.__takeCount__ = nativeMin(n, result.__takeCount__) + } else { + result.__views__.push({ + 'size': nativeMin(n, MAX_ARRAY_LENGTH), + 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') + }) + } + return result + } - LazyWrapper.prototype[methodName + 'Right'] = function(n) { - return this.reverse()[methodName](n).reverse(); - }; - }); + LazyWrapper.prototype[methodName + 'Right'] = function (n) { + return this.reverse()[methodName](n).reverse() + } + }) // Add `LazyWrapper` methods that accept an `iteratee` value. - arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { - var type = index + 1, - isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; - - LazyWrapper.prototype[methodName] = function(iteratee) { - var result = this.clone(); - result.__iteratees__.push({ - 'iteratee': getIteratee(iteratee, 3), - 'type': type - }); - result.__filtered__ = result.__filtered__ || isFilter; - return result; - }; - }); + arrayEach(['filter', 'map', 'takeWhile'], function (methodName, index) { + var type = index + 1, + isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG + + LazyWrapper.prototype[methodName] = function (iteratee) { + var result = this.clone() + result.__iteratees__.push({ + 'iteratee': getIteratee(iteratee, 3), + 'type': type + }) + result.__filtered__ = result.__filtered__ || isFilter + return result + } + }) // Add `LazyWrapper` methods for `_.head` and `_.last`. - arrayEach(['head', 'last'], function(methodName, index) { - var takeName = 'take' + (index ? 'Right' : ''); + arrayEach(['head', 'last'], function (methodName, index) { + var takeName = 'take' + (index ? 'Right' : '') - LazyWrapper.prototype[methodName] = function() { - return this[takeName](1).value()[0]; - }; - }); + LazyWrapper.prototype[methodName] = function () { + return this[takeName](1).value()[0] + } + }) // Add `LazyWrapper` methods for `_.initial` and `_.tail`. - arrayEach(['initial', 'tail'], function(methodName, index) { - var dropName = 'drop' + (index ? '' : 'Right'); + arrayEach(['initial', 'tail'], function (methodName, index) { + var dropName = 'drop' + (index ? '' : 'Right') - LazyWrapper.prototype[methodName] = function() { - return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); - }; - }); + LazyWrapper.prototype[methodName] = function () { + return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1) + } + }) - LazyWrapper.prototype.compact = function() { - return this.filter(identity); - }; + LazyWrapper.prototype.compact = function () { + return this.filter(identity) + } - LazyWrapper.prototype.find = function(predicate) { - return this.filter(predicate).head(); - }; + LazyWrapper.prototype.find = function (predicate) { + return this.filter(predicate).head() + } - LazyWrapper.prototype.findLast = function(predicate) { - return this.reverse().find(predicate); - }; + LazyWrapper.prototype.findLast = function (predicate) { + return this.reverse().find(predicate) + } - LazyWrapper.prototype.invokeMap = rest(function(path, args) { - if (typeof path == 'function') { - return new LazyWrapper(this); - } - return this.map(function(value) { - return baseInvoke(value, path, args); - }); - }); + LazyWrapper.prototype.invokeMap = rest(function (path, args) { + if (typeof path === 'function') { + return new LazyWrapper(this) + } + return this.map(function (value) { + return baseInvoke(value, path, args) + }) + }) - LazyWrapper.prototype.reject = function(predicate) { - predicate = getIteratee(predicate, 3); - return this.filter(function(value) { - return !predicate(value); - }); - }; + LazyWrapper.prototype.reject = function (predicate) { + predicate = getIteratee(predicate, 3) + return this.filter(function (value) { + return !predicate(value) + }) + } - LazyWrapper.prototype.slice = function(start, end) { - start = toInteger(start); + LazyWrapper.prototype.slice = function (start, end) { + start = toInteger(start) - var result = this; - if (result.__filtered__ && (start > 0 || end < 0)) { - return new LazyWrapper(result); - } - if (start < 0) { - result = result.takeRight(-start); - } else if (start) { - result = result.drop(start); - } - if (end !== undefined) { - end = toInteger(end); - result = end < 0 ? result.dropRight(-end) : result.take(end - start); - } - return result; - }; + var result = this + if (result.__filtered__ && (start > 0 || end < 0)) { + return new LazyWrapper(result) + } + if (start < 0) { + result = result.takeRight(-start) + } else if (start) { + result = result.drop(start) + } + if (end !== undefined) { + end = toInteger(end) + result = end < 0 ? result.dropRight(-end) : result.take(end - start) + } + return result + } - LazyWrapper.prototype.takeRightWhile = function(predicate) { - return this.reverse().takeWhile(predicate).reverse(); - }; + LazyWrapper.prototype.takeRightWhile = function (predicate) { + return this.reverse().takeWhile(predicate).reverse() + } - LazyWrapper.prototype.toArray = function() { - return this.take(MAX_ARRAY_LENGTH); - }; + LazyWrapper.prototype.toArray = function () { + return this.take(MAX_ARRAY_LENGTH) + } // Add `LazyWrapper` methods to `lodash.prototype`. - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), - isTaker = /^(?:head|last)$/.test(methodName), - lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], - retUnwrapped = isTaker || /^find/.test(methodName); - - if (!lodashFunc) { - return; - } - lodash.prototype[methodName] = function() { - var value = this.__wrapped__, - args = isTaker ? [1] : arguments, - isLazy = value instanceof LazyWrapper, - iteratee = args[0], - useLazy = isLazy || isArray(value); - - var interceptor = function(value) { - var result = lodashFunc.apply(lodash, arrayPush([value], args)); - return (isTaker && chainAll) ? result[0] : result; - }; + baseForOwn(LazyWrapper.prototype, function (func, methodName) { + var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), + isTaker = /^(?:head|last)$/.test(methodName), + lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], + retUnwrapped = isTaker || /^find/.test(methodName) + + if (!lodashFunc) { + return + } + lodash.prototype[methodName] = function () { + var value = this.__wrapped__, + args = isTaker ? [1] : arguments, + isLazy = value instanceof LazyWrapper, + iteratee = args[0], + useLazy = isLazy || isArray(value) + + var interceptor = function (value) { + var result = lodashFunc.apply(lodash, arrayPush([value], args)) + return (isTaker && chainAll) ? result[0] : result + } - if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { + if (useLazy && checkIteratee && typeof iteratee === 'function' && iteratee.length != 1) { // Avoid lazy use if the iteratee has a "length" value other than `1`. - isLazy = useLazy = false; - } - var chainAll = this.__chain__, - isHybrid = !!this.__actions__.length, - isUnwrapped = retUnwrapped && !chainAll, - onlyLazy = isLazy && !isHybrid; - - if (!retUnwrapped && useLazy) { - value = onlyLazy ? value : new LazyWrapper(this); - var result = func.apply(value, args); - result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); - return new LodashWrapper(result, chainAll); - } - if (isUnwrapped && onlyLazy) { - return func.apply(this, args); - } - result = this.thru(interceptor); - return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; - }; - }); + isLazy = useLazy = false + } + var chainAll = this.__chain__, + isHybrid = !!this.__actions__.length, + isUnwrapped = retUnwrapped && !chainAll, + onlyLazy = isLazy && !isHybrid + + if (!retUnwrapped && useLazy) { + value = onlyLazy ? value : new LazyWrapper(this) + var result = func.apply(value, args) + result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }) + return new LodashWrapper(result, chainAll) + } + if (isUnwrapped && onlyLazy) { + return func.apply(this, args) + } + result = this.thru(interceptor) + return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result + } + }) // Add `Array` methods to `lodash.prototype`. - arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { - var func = arrayProto[methodName], - chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', - retUnwrapped = /^(?:pop|shift)$/.test(methodName); - - lodash.prototype[methodName] = function() { - var args = arguments; - if (retUnwrapped && !this.__chain__) { - var value = this.value(); - return func.apply(isArray(value) ? value : [], args); - } - return this[chainName](function(value) { - return func.apply(isArray(value) ? value : [], args); - }); - }; - }); + arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function (methodName) { + var func = arrayProto[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:pop|shift)$/.test(methodName) + + lodash.prototype[methodName] = function () { + var args = arguments + if (retUnwrapped && !this.__chain__) { + var value = this.value() + return func.apply(isArray(value) ? value : [], args) + } + return this[chainName](function (value) { + return func.apply(isArray(value) ? value : [], args) + }) + } + }) // Map minified method names to their real names. - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var lodashFunc = lodash[methodName]; - if (lodashFunc) { - var key = (lodashFunc.name + ''), - names = realNames[key] || (realNames[key] = []); + baseForOwn(LazyWrapper.prototype, function (func, methodName) { + var lodashFunc = lodash[methodName] + if (lodashFunc) { + var key = (lodashFunc.name + ''), + names = realNames[key] || (realNames[key] = []) - names.push({ 'name': methodName, 'func': lodashFunc }); - } - }); + names.push({ 'name': methodName, 'func': lodashFunc }) + } + }) - realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ - 'name': 'wrapper', - 'func': undefined - }]; + realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ + 'name': 'wrapper', + 'func': undefined + }] // Add methods to `LazyWrapper`. - LazyWrapper.prototype.clone = lazyClone; - LazyWrapper.prototype.reverse = lazyReverse; - LazyWrapper.prototype.value = lazyValue; + LazyWrapper.prototype.clone = lazyClone + LazyWrapper.prototype.reverse = lazyReverse + LazyWrapper.prototype.value = lazyValue // Add chain sequence methods to the `lodash` wrapper. - lodash.prototype.at = wrapperAt; - lodash.prototype.chain = wrapperChain; - lodash.prototype.commit = wrapperCommit; - lodash.prototype.next = wrapperNext; - lodash.prototype.plant = wrapperPlant; - lodash.prototype.reverse = wrapperReverse; - lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; - - if (iteratorSymbol) { - lodash.prototype[iteratorSymbol] = wrapperToIterator; - } - return lodash; - } + lodash.prototype.at = wrapperAt + lodash.prototype.chain = wrapperChain + lodash.prototype.commit = wrapperCommit + lodash.prototype.next = wrapperNext + lodash.prototype.plant = wrapperPlant + lodash.prototype.reverse = wrapperReverse + lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue + + if (iteratorSymbol) { + lodash.prototype[iteratorSymbol] = wrapperToIterator + } + return lodash + } - /*--------------------------------------------------------------------------*/ + /* -------------------------------------------------------------------------- */ // Export lodash. - var _ = runInContext(); + var _ = runInContext(); // Expose Lodash on the free variable `window` or `self` when available so it's // globally accessible, even when bundled with Browserify, Webpack, etc. This // also prevents errors in cases where Lodash is loaded by a script tag in the // presence of an AMD loader. See http://requirejs.org/docs/errors.html#mismatch // for more details. Use `_.noConflict` to remove Lodash from the global object. - (freeSelf || {})._ = _; + (freeSelf || {})._ = _ // Some AMD build optimizers like r.js check for condition patterns like the following: - if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { + if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) { // Define as an anonymous module so, through path mapping, it can be // referenced as the "underscore" module. - define(function() { - return _; - }); - } + define(function () { + return _ + }) + } // Check for `exports` after `define` in case a build optimizer adds an `exports` object. - else if (freeModule) { + else if (freeModule) { // Export for Node.js. - (freeModule.exports = _)._ = _; + (freeModule.exports = _)._ = _ // Export for CommonJS support. - freeExports._ = _; - } - else { + freeExports._ = _ + } else { // Export to the global object. - root._ = _; - } -}.call(this)); - -}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],107:[function(_dereq_,module,exports){ + root._ = _ + } + }.call(this)) + }).call(this, typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}) + }, {}], + 107: [function (_dereq_, module, exports) { //! moment.js //! version : 2.13.0 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - global.moment = factory() -}(this, function () { 'use strict'; + ;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() + : typeof define === 'function' && define.amd ? define(factory) + : global.moment = factory() + }(this, function () { + 'use strict' - var hookCallback; + var hookCallback - function utils_hooks__hooks () { - return hookCallback.apply(null, arguments); - } + function utils_hooks__hooks () { + return hookCallback.apply(null, arguments) + } // This is done to register the method called with moment() // without creating circular dependencies. - function setHookCallback (callback) { - hookCallback = callback; - } + function setHookCallback (callback) { + hookCallback = callback + } - function isArray(input) { - return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; - } + function isArray (input) { + return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]' + } - function isDate(input) { - return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; - } + function isDate (input) { + return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]' + } - function map(arr, fn) { - var res = [], i; - for (i = 0; i < arr.length; ++i) { - res.push(fn(arr[i], i)); + function map (arr, fn) { + var res = [], i + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)) + } + return res } - return res; - } - function hasOwnProp(a, b) { - return Object.prototype.hasOwnProperty.call(a, b); - } + function hasOwnProp (a, b) { + return Object.prototype.hasOwnProperty.call(a, b) + } - function extend(a, b) { - for (var i in b) { + function extend (a, b) { + for (var i in b) { if (hasOwnProp(b, i)) { - a[i] = b[i]; + a[i] = b[i] } - } + } - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString + } - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; - } + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf + } - return a; - } + return a + } - function create_utc__createUTC (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, true).utc(); - } + function create_utc__createUTC (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc() + } - function defaultParsingFlags() { + function defaultParsingFlags () { // We need to deep clone this object. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso : false, - parsedDateParts : [], - meridiem : null - }; - } + return { + empty: false, + unusedTokens: [], + unusedInput: [], + overflow: -2, + charsLeftOver: 0, + nullInput: false, + invalidMonth: null, + invalidFormat: false, + userInvalidated: false, + iso: false, + parsedDateParts: [], + meridiem: null + } + } - function getParsingFlags(m) { - if (m._pf == null) { - m._pf = defaultParsingFlags(); + function getParsingFlags (m) { + if (m._pf == null) { + m._pf = defaultParsingFlags() + } + return m._pf } - return m._pf; - } - var some; - if (Array.prototype.some) { - some = Array.prototype.some; - } else { - some = function (fun) { - var t = Object(this); - var len = t.length >>> 0; + var some + if (Array.prototype.some) { + some = Array.prototype.some + } else { + some = function (fun) { + var t = Object(this) + var len = t.length >>> 0 for (var i = 0; i < len; i++) { - if (i in t && fun.call(this, t[i], i, t)) { - return true; - } + if (i in t && fun.call(this, t[i], i, t)) { + return true + } } - return false; - }; - } + return false + } + } - function valid__isValid(m) { - if (m._isValid == null) { - var flags = getParsingFlags(m); + function valid__isValid (m) { + if (m._isValid == null) { + var flags = getParsingFlags(m) var parsedParts = some.call(flags.parsedDateParts, function (i) { - return i != null; - }); + return i != null + }) m._isValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && @@ -44328,957 +44501,954 @@ process.chdir = function (dir) { !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && - (!flags.meridiem || (flags.meridiem && parsedParts)); + (!flags.meridiem || (flags.meridiem && parsedParts)) if (m._strict) { - m._isValid = m._isValid && + m._isValid = m._isValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && - flags.bigHour === undefined; + flags.bigHour === undefined } + } + return m._isValid } - return m._isValid; - } - function valid__createInvalid (flags) { - var m = create_utc__createUTC(NaN); - if (flags != null) { - extend(getParsingFlags(m), flags); - } - else { - getParsingFlags(m).userInvalidated = true; - } + function valid__createInvalid (flags) { + var m = create_utc__createUTC(NaN) + if (flags != null) { + extend(getParsingFlags(m), flags) + } else { + getParsingFlags(m).userInvalidated = true + } - return m; - } + return m + } - function isUndefined(input) { - return input === void 0; - } + function isUndefined (input) { + return input === void 0 + } // Plugins that add properties should also add the key here (null value), // so we can properly clone ourselves. - var momentProperties = utils_hooks__hooks.momentProperties = []; + var momentProperties = utils_hooks__hooks.momentProperties = [] - function copyConfig(to, from) { - var i, prop, val; + function copyConfig (to, from) { + var i, prop, val - if (!isUndefined(from._isAMomentObject)) { - to._isAMomentObject = from._isAMomentObject; - } - if (!isUndefined(from._i)) { - to._i = from._i; - } - if (!isUndefined(from._f)) { - to._f = from._f; - } - if (!isUndefined(from._l)) { - to._l = from._l; - } - if (!isUndefined(from._strict)) { - to._strict = from._strict; - } - if (!isUndefined(from._tzm)) { - to._tzm = from._tzm; - } - if (!isUndefined(from._isUTC)) { - to._isUTC = from._isUTC; - } - if (!isUndefined(from._offset)) { - to._offset = from._offset; - } - if (!isUndefined(from._pf)) { - to._pf = getParsingFlags(from); - } - if (!isUndefined(from._locale)) { - to._locale = from._locale; - } + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject + } + if (!isUndefined(from._i)) { + to._i = from._i + } + if (!isUndefined(from._f)) { + to._f = from._f + } + if (!isUndefined(from._l)) { + to._l = from._l + } + if (!isUndefined(from._strict)) { + to._strict = from._strict + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC + } + if (!isUndefined(from._offset)) { + to._offset = from._offset + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from) + } + if (!isUndefined(from._locale)) { + to._locale = from._locale + } - if (momentProperties.length > 0) { + if (momentProperties.length > 0) { for (i in momentProperties) { - prop = momentProperties[i]; - val = from[prop]; - if (!isUndefined(val)) { - to[prop] = val; - } + prop = momentProperties[i] + val = from[prop] + if (!isUndefined(val)) { + to[prop] = val + } } - } + } - return to; - } + return to + } - var updateInProgress = false; + var updateInProgress = false // Moment prototype object - function Moment(config) { - copyConfig(this, config); - this._d = new Date(config._d != null ? config._d.getTime() : NaN); + function Moment (config) { + copyConfig(this, config) + this._d = new Date(config._d != null ? config._d.getTime() : NaN) // Prevent infinite loop in case updateOffset creates new moment // objects. - if (updateInProgress === false) { - updateInProgress = true; - utils_hooks__hooks.updateOffset(this); - updateInProgress = false; + if (updateInProgress === false) { + updateInProgress = true + utils_hooks__hooks.updateOffset(this) + updateInProgress = false + } } - } - function isMoment (obj) { - return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); - } + function isMoment (obj) { + return obj instanceof Moment || (obj != null && obj._isAMomentObject != null) + } - function absFloor (number) { - if (number < 0) { - return Math.ceil(number); - } else { - return Math.floor(number); + function absFloor (number) { + if (number < 0) { + return Math.ceil(number) + } else { + return Math.floor(number) + } } - } - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; + function toInt (argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0 - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - value = absFloor(coercedNumber); - } + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber) + } - return value; - } + return value + } // compare two arrays, return the number of differences - function compareArrays(array1, array2, dontConvert) { - var len = Math.min(array1.length, array2.length), + function compareArrays (array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, - i; - for (i = 0; i < len; i++) { + i + for (i = 0; i < len; i++) { if ((dontConvert && array1[i] !== array2[i]) || (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { - diffs++; + diffs++ } + } + return diffs + lengthDiff } - return diffs + lengthDiff; - } - function warn(msg) { - if (utils_hooks__hooks.suppressDeprecationWarnings === false && - (typeof console !== 'undefined') && console.warn) { - console.warn('Deprecation warning: ' + msg); + function warn (msg) { + if (utils_hooks__hooks.suppressDeprecationWarnings === false && + (typeof console !== 'undefined') && console.warn) { + console.warn('Deprecation warning: ' + msg) + } } - } - function deprecate(msg, fn) { - var firstTime = true; + function deprecate (msg, fn) { + var firstTime = true - return extend(function () { + return extend(function () { if (utils_hooks__hooks.deprecationHandler != null) { - utils_hooks__hooks.deprecationHandler(null, msg); + utils_hooks__hooks.deprecationHandler(null, msg) } if (firstTime) { - warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack); - firstTime = false; + warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack) + firstTime = false } - return fn.apply(this, arguments); - }, fn); - } + return fn.apply(this, arguments) + }, fn) + } - var deprecations = {}; + var deprecations = {} - function deprecateSimple(name, msg) { - if (utils_hooks__hooks.deprecationHandler != null) { - utils_hooks__hooks.deprecationHandler(name, msg); - } - if (!deprecations[name]) { - warn(msg); - deprecations[name] = true; + function deprecateSimple (name, msg) { + if (utils_hooks__hooks.deprecationHandler != null) { + utils_hooks__hooks.deprecationHandler(name, msg) + } + if (!deprecations[name]) { + warn(msg) + deprecations[name] = true + } } - } - utils_hooks__hooks.suppressDeprecationWarnings = false; - utils_hooks__hooks.deprecationHandler = null; + utils_hooks__hooks.suppressDeprecationWarnings = false + utils_hooks__hooks.deprecationHandler = null - function isFunction(input) { - return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; - } + function isFunction (input) { + return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]' + } - function isObject(input) { - return Object.prototype.toString.call(input) === '[object Object]'; - } + function isObject (input) { + return Object.prototype.toString.call(input) === '[object Object]' + } - function locale_set__set (config) { - var prop, i; - for (i in config) { - prop = config[i]; + function locale_set__set (config) { + var prop, i + for (i in config) { + prop = config[i] if (isFunction(prop)) { - this[i] = prop; + this[i] = prop } else { - this['_' + i] = prop; + this['_' + i] = prop } - } - this._config = config; + } + this._config = config // Lenient ordinal parsing accepts just a number in addition to // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); - } + this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source) + } - function mergeConfigs(parentConfig, childConfig) { - var res = extend({}, parentConfig), prop; - for (prop in childConfig) { + function mergeConfigs (parentConfig, childConfig) { + var res = extend({}, parentConfig), prop + for (prop in childConfig) { if (hasOwnProp(childConfig, prop)) { - if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { - res[prop] = {}; - extend(res[prop], parentConfig[prop]); - extend(res[prop], childConfig[prop]); - } else if (childConfig[prop] != null) { - res[prop] = childConfig[prop]; - } else { - delete res[prop]; - } + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {} + extend(res[prop], parentConfig[prop]) + extend(res[prop], childConfig[prop]) + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop] + } else { + delete res[prop] + } } + } + return res } - return res; - } - function Locale(config) { - if (config != null) { - this.set(config); + function Locale (config) { + if (config != null) { + this.set(config) + } } - } - var keys; + var keys - if (Object.keys) { - keys = Object.keys; - } else { - keys = function (obj) { - var i, res = []; + if (Object.keys) { + keys = Object.keys + } else { + keys = function (obj) { + var i, res = [] for (i in obj) { - if (hasOwnProp(obj, i)) { - res.push(i); - } + if (hasOwnProp(obj, i)) { + res.push(i) + } } - return res; - }; - } + return res + } + } // internal storage for locale config files - var locales = {}; - var globalLocale; + var locales = {} + var globalLocale - function normalizeLocale(key) { - return key ? key.toLowerCase().replace('_', '-') : key; - } + function normalizeLocale (key) { + return key ? key.toLowerCase().replace('_', '-') : key + } // pick the locale from the array // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root - function chooseLocale(names) { - var i = 0, j, next, locale, split; - - while (i < names.length) { - split = normalizeLocale(names[i]).split('-'); - j = split.length; - next = normalizeLocale(names[i + 1]); - next = next ? next.split('-') : null; + function chooseLocale (names) { + var i = 0, j, next, locale, split + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-') + j = split.length + next = normalizeLocale(names[i + 1]) + next = next ? next.split('-') : null while (j > 0) { - locale = loadLocale(split.slice(0, j).join('-')); - if (locale) { - return locale; - } - if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { - //the next array item is better than a shallower substring of this one - break; - } - j--; + locale = loadLocale(split.slice(0, j).join('-')) + if (locale) { + return locale + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + // the next array item is better than a shallower substring of this one + break + } + j-- } - i++; + i++ + } + return null } - return null; - } - function loadLocale(name) { - var oldLocale = null; + function loadLocale (name) { + var oldLocale = null // TODO: Find a better way to register and load all the locales in Node - if (!locales[name] && (typeof module !== 'undefined') && + if (!locales[name] && (typeof module !== 'undefined') && module && module.exports) { try { - oldLocale = globalLocale._abbr; - _dereq_('./locale/' + name); + oldLocale = globalLocale._abbr + _dereq_('./locale/' + name) // because defineLocale currently also sets the global locale, we // want to undo that for lazy loaded locales - locale_locales__getSetGlobalLocale(oldLocale); + locale_locales__getSetGlobalLocale(oldLocale) } catch (e) { } + } + return locales[name] } - return locales[name]; - } // This function will load locale and then set the global locale. If // no arguments are passed in, it will simply return the current global // locale key. - function locale_locales__getSetGlobalLocale (key, values) { - var data; - if (key) { + function locale_locales__getSetGlobalLocale (key, values) { + var data + if (key) { if (isUndefined(values)) { - data = locale_locales__getLocale(key); - } - else { - data = defineLocale(key, values); + data = locale_locales__getLocale(key) + } else { + data = defineLocale(key, values) } if (data) { // moment.duration._locale = moment._locale = data; - globalLocale = data; + globalLocale = data } - } + } - return globalLocale._abbr; - } + return globalLocale._abbr + } - function defineLocale (name, config) { - if (config !== null) { - config.abbr = name; + function defineLocale (name, config) { + if (config !== null) { + config.abbr = name if (locales[name] != null) { - deprecateSimple('defineLocaleOverride', + deprecateSimple('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + - 'config) should only be used for creating a new locale'); - config = mergeConfigs(locales[name]._config, config); + 'config) should only be used for creating a new locale') + config = mergeConfigs(locales[name]._config, config) } else if (config.parentLocale != null) { - if (locales[config.parentLocale] != null) { - config = mergeConfigs(locales[config.parentLocale]._config, config); - } else { + if (locales[config.parentLocale] != null) { + config = mergeConfigs(locales[config.parentLocale]._config, config) + } else { // treat as if there is no base config - deprecateSimple('parentLocaleUndefined', - 'specified parentLocale is not defined yet'); - } + deprecateSimple('parentLocaleUndefined', + 'specified parentLocale is not defined yet') + } } - locales[name] = new Locale(config); + locales[name] = new Locale(config) // backwards compat for now: also set the locale - locale_locales__getSetGlobalLocale(name); + locale_locales__getSetGlobalLocale(name) - return locales[name]; - } else { + return locales[name] + } else { // useful for testing - delete locales[name]; - return null; + delete locales[name] + return null + } } - } - function updateLocale(name, config) { - if (config != null) { - var locale; + function updateLocale (name, config) { + if (config != null) { + var locale if (locales[name] != null) { - config = mergeConfigs(locales[name]._config, config); + config = mergeConfigs(locales[name]._config, config) } - locale = new Locale(config); - locale.parentLocale = locales[name]; - locales[name] = locale; + locale = new Locale(config) + locale.parentLocale = locales[name] + locales[name] = locale // backwards compat for now: also set the locale - locale_locales__getSetGlobalLocale(name); - } else { + locale_locales__getSetGlobalLocale(name) + } else { // pass null for config to unupdate, useful for tests if (locales[name] != null) { - if (locales[name].parentLocale != null) { - locales[name] = locales[name].parentLocale; - } else if (locales[name] != null) { - delete locales[name]; - } + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale + } else if (locales[name] != null) { + delete locales[name] + } } + } + return locales[name] } - return locales[name]; - } // returns locale data - function locale_locales__getLocale (key) { - var locale; + function locale_locales__getLocale (key) { + var locale - if (key && key._locale && key._locale._abbr) { - key = key._locale._abbr; - } + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr + } - if (!key) { - return globalLocale; - } + if (!key) { + return globalLocale + } - if (!isArray(key)) { - //short-circuit everything else - locale = loadLocale(key); + if (!isArray(key)) { + // short-circuit everything else + locale = loadLocale(key) if (locale) { - return locale; + return locale } - key = [key]; - } + key = [key] + } - return chooseLocale(key); - } + return chooseLocale(key) + } - function locale_locales__listLocales() { - return keys(locales); - } + function locale_locales__listLocales () { + return keys(locales) + } - var aliases = {}; + var aliases = {} - function addUnitAlias (unit, shorthand) { - var lowerCase = unit.toLowerCase(); - aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; - } + function addUnitAlias (unit, shorthand) { + var lowerCase = unit.toLowerCase() + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit + } - function normalizeUnits(units) { - return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; - } + function normalizeUnits (units) { + return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined + } - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, + function normalizeObjectUnits (inputObject) { + var normalizedInput = {}, normalizedProp, - prop; + prop - for (prop in inputObject) { + for (prop in inputObject) { if (hasOwnProp(inputObject, prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } + normalizedProp = normalizeUnits(prop) + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop] + } } - } + } - return normalizedInput; - } + return normalizedInput + } - function makeGetSet (unit, keepTime) { - return function (value) { + function makeGetSet (unit, keepTime) { + return function (value) { if (value != null) { - get_set__set(this, unit, value); - utils_hooks__hooks.updateOffset(this, keepTime); - return this; + get_set__set(this, unit, value) + utils_hooks__hooks.updateOffset(this, keepTime) + return this } else { - return get_set__get(this, unit); + return get_set__get(this, unit) } - }; - } + } + } - function get_set__get (mom, unit) { - return mom.isValid() ? - mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; - } + function get_set__get (mom, unit) { + return mom.isValid() + ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN + } - function get_set__set (mom, unit, value) { - if (mom.isValid()) { - mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + function get_set__set (mom, unit, value) { + if (mom.isValid()) { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value) + } } - } // MOMENTS - function getSet (units, value) { - var unit; - if (typeof units === 'object') { + function getSet (units, value) { + var unit + if (typeof units === 'object') { for (unit in units) { - this.set(unit, units[unit]); + this.set(unit, units[unit]) } - } else { - units = normalizeUnits(units); + } else { + units = normalizeUnits(units) if (isFunction(this[units])) { - return this[units](value); + return this[units](value) } + } + return this } - return this; - } - function zeroFill(number, targetLength, forceSign) { - var absNumber = '' + Math.abs(number), + function zeroFill (number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), zerosToFill = targetLength - absNumber.length, - sign = number >= 0; - return (sign ? (forceSign ? '+' : '') : '-') + - Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; - } + sign = number >= 0 + return (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber + } - var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; + var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g - var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; + var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g - var formatFunctions = {}; + var formatFunctions = {} - var formatTokenFunctions = {}; + var formatTokenFunctions = {} // token: 'M' // padded: ['MM', 2] // ordinal: 'Mo' // callback: function () { this.month() + 1 } - function addFormatToken (token, padded, ordinal, callback) { - var func = callback; - if (typeof callback === 'string') { + function addFormatToken (token, padded, ordinal, callback) { + var func = callback + if (typeof callback === 'string') { func = function () { - return this[callback](); - }; - } - if (token) { - formatTokenFunctions[token] = func; - } - if (padded) { + return this[callback]() + } + } + if (token) { + formatTokenFunctions[token] = func + } + if (padded) { formatTokenFunctions[padded[0]] = function () { - return zeroFill(func.apply(this, arguments), padded[1], padded[2]); - }; - } - if (ordinal) { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]) + } + } + if (ordinal) { formatTokenFunctions[ordinal] = function () { - return this.localeData().ordinal(func.apply(this, arguments), token); - }; + return this.localeData().ordinal(func.apply(this, arguments), token) + } + } } - } - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ''); + function removeFormattingTokens (input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, '') + } + return input.replace(/\\/g, '') } - return input.replace(/\\/g, ''); - } - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; + function makeFormatFunction (format) { + var array = format.match(formattingTokens), i, length - for (i = 0, length = array.length; i < length; i++) { + for (i = 0, length = array.length; i < length; i++) { if (formatTokenFunctions[array[i]]) { - array[i] = formatTokenFunctions[array[i]]; + array[i] = formatTokenFunctions[array[i]] } else { - array[i] = removeFormattingTokens(array[i]); + array[i] = removeFormattingTokens(array[i]) } - } + } - return function (mom) { - var output = '', i; + return function (mom) { + var output = '', i for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i] } - return output; - }; - } + return output + } + } // format date using native date object - function formatMoment(m, format) { - if (!m.isValid()) { - return m.localeData().invalidDate(); - } + function formatMoment (m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate() + } - format = expandFormat(format, m.localeData()); - formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); + format = expandFormat(format, m.localeData()) + formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format) - return formatFunctions[format](m); - } + return formatFunctions[format](m) + } - function expandFormat(format, locale) { - var i = 5; + function expandFormat (format, locale) { + var i = 5 - function replaceLongDateFormatTokens(input) { - return locale.longDateFormat(input) || input; - } + function replaceLongDateFormatTokens (input) { + return locale.longDateFormat(input) || input + } - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; - } + localFormattingTokens.lastIndex = 0 + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens) + localFormattingTokens.lastIndex = 0 + i -= 1 + } - return format; - } + return format + } - var match1 = /\d/; // 0 - 9 - var match2 = /\d\d/; // 00 - 99 - var match3 = /\d{3}/; // 000 - 999 - var match4 = /\d{4}/; // 0000 - 9999 - var match6 = /[+-]?\d{6}/; // -999999 - 999999 - var match1to2 = /\d\d?/; // 0 - 99 - var match3to4 = /\d\d\d\d?/; // 999 - 9999 - var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 - var match1to3 = /\d{1,3}/; // 0 - 999 - var match1to4 = /\d{1,4}/; // 0 - 9999 - var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 + var match1 = /\d/ // 0 - 9 + var match2 = /\d\d/ // 00 - 99 + var match3 = /\d{3}/ // 000 - 999 + var match4 = /\d{4}/ // 0000 - 9999 + var match6 = /[+-]?\d{6}/ // -999999 - 999999 + var match1to2 = /\d\d?/ // 0 - 99 + var match3to4 = /\d\d\d\d?/ // 999 - 9999 + var match5to6 = /\d\d\d\d\d\d?/ // 99999 - 999999 + var match1to3 = /\d{1,3}/ // 0 - 999 + var match1to4 = /\d{1,4}/ // 0 - 9999 + var match1to6 = /[+-]?\d{1,6}/ // -999999 - 999999 - var matchUnsigned = /\d+/; // 0 - inf - var matchSigned = /[+-]?\d+/; // -inf - inf + var matchUnsigned = /\d+/ // 0 - inf + var matchSigned = /[+-]?\d+/ // -inf - inf - var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z - var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z + var matchOffset = /Z|[+-]\d\d:?\d\d/gi // +00:00 -00:00 +0000 -0000 or Z + var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi // +00 -00 +00:00 -00:00 +0000 -0000 or Z - var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 + var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/ // 123456789 123456789.123 // any word (or two) characters or numbers including two/three word month in arabic. // includes scottish gaelic two word and hyphenated months - var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; + var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i + var regexes = {} - var regexes = {}; + function addRegexToken (token, regex, strictRegex) { + regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { + return (isStrict && strictRegex) ? strictRegex : regex + } + } - function addRegexToken (token, regex, strictRegex) { - regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { - return (isStrict && strictRegex) ? strictRegex : regex; - }; - } + function getParseRegexForToken (token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)) + } - function getParseRegexForToken (token, config) { - if (!hasOwnProp(regexes, token)) { - return new RegExp(unescapeFormat(token)); + return regexes[token](config._strict, config._locale) } - return regexes[token](config._strict, config._locale); - } - // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - function unescapeFormat(s) { - return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { - return p1 || p2 || p3 || p4; - })); - } + function unescapeFormat (s) { + return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4 + })) + } - function regexEscape(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - } + function regexEscape (s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + } - var tokens = {}; + var tokens = {} - function addParseToken (token, callback) { - var i, func = callback; - if (typeof token === 'string') { - token = [token]; - } - if (typeof callback === 'number') { + function addParseToken (token, callback) { + var i, func = callback + if (typeof token === 'string') { + token = [token] + } + if (typeof callback === 'number') { func = function (input, array) { - array[callback] = toInt(input); - }; - } - for (i = 0; i < token.length; i++) { - tokens[token[i]] = func; + array[callback] = toInt(input) + } + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func + } } - } - function addWeekParseToken (token, callback) { - addParseToken(token, function (input, array, config, token) { - config._w = config._w || {}; - callback(input, config._w, config, token); - }); - } + function addWeekParseToken (token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {} + callback(input, config._w, config, token) + }) + } - function addTimeToArrayFromToken(token, input, config) { - if (input != null && hasOwnProp(tokens, token)) { - tokens[token](input, config._a, config, token); + function addTimeToArrayFromToken (token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token) + } } - } - var YEAR = 0; - var MONTH = 1; - var DATE = 2; - var HOUR = 3; - var MINUTE = 4; - var SECOND = 5; - var MILLISECOND = 6; - var WEEK = 7; - var WEEKDAY = 8; - - var indexOf; - - if (Array.prototype.indexOf) { - indexOf = Array.prototype.indexOf; - } else { - indexOf = function (o) { + var YEAR = 0 + var MONTH = 1 + var DATE = 2 + var HOUR = 3 + var MINUTE = 4 + var SECOND = 5 + var MILLISECOND = 6 + var WEEK = 7 + var WEEKDAY = 8 + + var indexOf + + if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf + } else { + indexOf = function (o) { // I know - var i; + var i for (i = 0; i < this.length; ++i) { - if (this[i] === o) { - return i; - } + if (this[i] === o) { + return i + } } - return -1; - }; - } + return -1 + } + } - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); - } + function daysInMonth (year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate() + } // FORMATTING - addFormatToken('M', ['MM', 2], 'Mo', function () { - return this.month() + 1; - }); + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1 + }) - addFormatToken('MMM', 0, 0, function (format) { - return this.localeData().monthsShort(this, format); - }); + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format) + }) - addFormatToken('MMMM', 0, 0, function (format) { - return this.localeData().months(this, format); - }); + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format) + }) // ALIASES - addUnitAlias('month', 'M'); + addUnitAlias('month', 'M') // PARSING - addRegexToken('M', match1to2); - addRegexToken('MM', match1to2, match2); - addRegexToken('MMM', function (isStrict, locale) { - return locale.monthsShortRegex(isStrict); - }); - addRegexToken('MMMM', function (isStrict, locale) { - return locale.monthsRegex(isStrict); - }); - - addParseToken(['M', 'MM'], function (input, array) { - array[MONTH] = toInt(input) - 1; - }); - - addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { - var month = config._locale.monthsParse(input, token, config._strict); + addRegexToken('M', match1to2) + addRegexToken('MM', match1to2, match2) + addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict) + }) + addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict) + }) + + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1 + }) + + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict) // if we didn't find a month name, mark the date as invalid. - if (month != null) { - array[MONTH] = month; - } else { - getParsingFlags(config).invalidMonth = input; - } - }); + if (month != null) { + array[MONTH] = month + } else { + getParsingFlags(config).invalidMonth = input + } + }) // LOCALES - var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/; - var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); - function localeMonths (m, format) { - return isArray(this._months) ? this._months[m.month()] : - this._months[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; - } + var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/ + var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_') + function localeMonths (m, format) { + return isArray(this._months) ? this._months[m.month()] + : this._months[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()] + } - var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); - function localeMonthsShort (m, format) { - return isArray(this._monthsShort) ? this._monthsShort[m.month()] : - this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; - } + var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_') + function localeMonthsShort (m, format) { + return isArray(this._monthsShort) ? this._monthsShort[m.month()] + : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()] + } - function units_month__handleStrictParse(monthName, format, strict) { - var i, ii, mom, llc = monthName.toLocaleLowerCase(); - if (!this._monthsParse) { + function units_month__handleStrictParse (monthName, format, strict) { + var i, ii, mom, llc = monthName.toLocaleLowerCase() + if (!this._monthsParse) { // this is not used - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; + this._monthsParse = [] + this._longMonthsParse = [] + this._shortMonthsParse = [] for (i = 0; i < 12; ++i) { - mom = create_utc__createUTC([2000, i]); - this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); - this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + mom = create_utc__createUTC([2000, i]) + this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase() + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase() } - } + } - if (strict) { + if (strict) { if (format === 'MMM') { - ii = indexOf.call(this._shortMonthsParse, llc); - return ii !== -1 ? ii : null; + ii = indexOf.call(this._shortMonthsParse, llc) + return ii !== -1 ? ii : null } else { - ii = indexOf.call(this._longMonthsParse, llc); - return ii !== -1 ? ii : null; + ii = indexOf.call(this._longMonthsParse, llc) + return ii !== -1 ? ii : null } - } else { + } else { if (format === 'MMM') { - ii = indexOf.call(this._shortMonthsParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._longMonthsParse, llc); - return ii !== -1 ? ii : null; + ii = indexOf.call(this._shortMonthsParse, llc) + if (ii !== -1) { + return ii + } + ii = indexOf.call(this._longMonthsParse, llc) + return ii !== -1 ? ii : null } else { - ii = indexOf.call(this._longMonthsParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._shortMonthsParse, llc); - return ii !== -1 ? ii : null; + ii = indexOf.call(this._longMonthsParse, llc) + if (ii !== -1) { + return ii + } + ii = indexOf.call(this._shortMonthsParse, llc) + return ii !== -1 ? ii : null } + } } - } - function localeMonthsParse (monthName, format, strict) { - var i, mom, regex; + function localeMonthsParse (monthName, format, strict) { + var i, mom, regex - if (this._monthsParseExact) { - return units_month__handleStrictParse.call(this, monthName, format, strict); - } + if (this._monthsParseExact) { + return units_month__handleStrictParse.call(this, monthName, format, strict) + } - if (!this._monthsParse) { - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - } + if (!this._monthsParse) { + this._monthsParse = [] + this._longMonthsParse = [] + this._shortMonthsParse = [] + } // TODO: add sorting // Sorting makes sure if one month (or abbr) is a prefix of another // see sorting in computeMonthsParse - for (i = 0; i < 12; i++) { + for (i = 0; i < 12; i++) { // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); + mom = create_utc__createUTC([2000, i]) if (strict && !this._longMonthsParse[i]) { - this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); - this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i') + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i') } if (!strict && !this._monthsParse[i]) { - regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); - this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '') + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i') } // test the regex if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { - return i; + return i } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { - return i; + return i } else if (!strict && this._monthsParse[i].test(monthName)) { - return i; + return i } + } } - } // MOMENTS - function setMonth (mom, value) { - var dayOfMonth; + function setMonth (mom, value) { + var dayOfMonth - if (!mom.isValid()) { + if (!mom.isValid()) { // No op - return mom; - } + return mom + } - if (typeof value === 'string') { + if (typeof value === 'string') { if (/^\d+$/.test(value)) { - value = toInt(value); + value = toInt(value) } else { - value = mom.localeData().monthsParse(value); + value = mom.localeData().monthsParse(value) // TODO: Another silent failure? - if (typeof value !== 'number') { - return mom; - } + if (typeof value !== 'number') { + return mom + } } - } + } - dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; - } + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)) + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth) + return mom + } - function getSetMonth (value) { - if (value != null) { - setMonth(this, value); - utils_hooks__hooks.updateOffset(this, true); - return this; - } else { - return get_set__get(this, 'Month'); + function getSetMonth (value) { + if (value != null) { + setMonth(this, value) + utils_hooks__hooks.updateOffset(this, true) + return this + } else { + return get_set__get(this, 'Month') + } } - } - function getDaysInMonth () { - return daysInMonth(this.year(), this.month()); - } + function getDaysInMonth () { + return daysInMonth(this.year(), this.month()) + } - var defaultMonthsShortRegex = matchWord; - function monthsShortRegex (isStrict) { - if (this._monthsParseExact) { + var defaultMonthsShortRegex = matchWord + function monthsShortRegex (isStrict) { + if (this._monthsParseExact) { if (!hasOwnProp(this, '_monthsRegex')) { - computeMonthsParse.call(this); + computeMonthsParse.call(this) } if (isStrict) { - return this._monthsShortStrictRegex; + return this._monthsShortStrictRegex } else { - return this._monthsShortRegex; + return this._monthsShortRegex } - } else { - return this._monthsShortStrictRegex && isStrict ? - this._monthsShortStrictRegex : this._monthsShortRegex; + } else { + return this._monthsShortStrictRegex && isStrict + ? this._monthsShortStrictRegex : this._monthsShortRegex + } } - } - var defaultMonthsRegex = matchWord; - function monthsRegex (isStrict) { - if (this._monthsParseExact) { + var defaultMonthsRegex = matchWord + function monthsRegex (isStrict) { + if (this._monthsParseExact) { if (!hasOwnProp(this, '_monthsRegex')) { - computeMonthsParse.call(this); + computeMonthsParse.call(this) } if (isStrict) { - return this._monthsStrictRegex; + return this._monthsStrictRegex } else { - return this._monthsRegex; + return this._monthsRegex } - } else { - return this._monthsStrictRegex && isStrict ? - this._monthsStrictRegex : this._monthsRegex; + } else { + return this._monthsStrictRegex && isStrict + ? this._monthsStrictRegex : this._monthsRegex + } } - } - function computeMonthsParse () { - function cmpLenRev(a, b) { - return b.length - a.length; - } + function computeMonthsParse () { + function cmpLenRev (a, b) { + return b.length - a.length + } - var shortPieces = [], longPieces = [], mixedPieces = [], - i, mom; - for (i = 0; i < 12; i++) { + var shortPieces = [], longPieces = [], mixedPieces = [], + i, mom + for (i = 0; i < 12; i++) { // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); - shortPieces.push(this.monthsShort(mom, '')); - longPieces.push(this.months(mom, '')); - mixedPieces.push(this.months(mom, '')); - mixedPieces.push(this.monthsShort(mom, '')); - } + mom = create_utc__createUTC([2000, i]) + shortPieces.push(this.monthsShort(mom, '')) + longPieces.push(this.months(mom, '')) + mixedPieces.push(this.months(mom, '')) + mixedPieces.push(this.monthsShort(mom, '')) + } // Sorting makes sure if one month (or abbr) is a prefix of another it // will match the longer piece. - shortPieces.sort(cmpLenRev); - longPieces.sort(cmpLenRev); - mixedPieces.sort(cmpLenRev); - for (i = 0; i < 12; i++) { - shortPieces[i] = regexEscape(shortPieces[i]); - longPieces[i] = regexEscape(longPieces[i]); - mixedPieces[i] = regexEscape(mixedPieces[i]); - } - - this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); - this._monthsShortRegex = this._monthsRegex; - this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); - this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); - } + shortPieces.sort(cmpLenRev) + longPieces.sort(cmpLenRev) + mixedPieces.sort(cmpLenRev) + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]) + longPieces[i] = regexEscape(longPieces[i]) + mixedPieces[i] = regexEscape(mixedPieces[i]) + } - function checkOverflow (m) { - var overflow; - var a = m._a; + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i') + this._monthsShortRegex = this._monthsRegex + this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i') + this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i') + } + + function checkOverflow (m) { + var overflow + var a = m._a - if (a && getParsingFlags(m).overflow === -2) { + if (a && getParsingFlags(m).overflow === -2) { overflow = - a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : - a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : - a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : - a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : - a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : - a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : - -1; + a[MONTH] < 0 || a[MONTH] > 11 ? MONTH + : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE + : a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR + : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE + : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND + : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND + : -1 if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; + overflow = DATE } if (getParsingFlags(m)._overflowWeeks && overflow === -1) { - overflow = WEEK; + overflow = WEEK } if (getParsingFlags(m)._overflowWeekday && overflow === -1) { - overflow = WEEKDAY; + overflow = WEEKDAY } - getParsingFlags(m).overflow = overflow; - } + getParsingFlags(m).overflow = overflow + } - return m; - } + return m + } // iso 8601 regex // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) - var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; - var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; + var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/ + var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/ - var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; + var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/ - var isoDates = [ + var isoDates = [ ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], @@ -45291,10 +45461,10 @@ process.chdir = function (dir) { ['GGGG[W]WWE', /\d{4}W\d{3}/], ['GGGG[W]WW', /\d{4}W\d{2}/, false], ['YYYYDDD', /\d{7}/] - ]; + ] // iso time formats and regexes - var isoTimes = [ + var isoTimes = [ ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], ['HH:mm:ss', /\d\d:\d\d:\d\d/], @@ -45304,685 +45474,682 @@ process.chdir = function (dir) { ['HHmmss', /\d\d\d\d\d\d/], ['HHmm', /\d\d\d\d/], ['HH', /\d\d/] - ]; + ] - var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; + var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i // date from iso format - function configFromISO(config) { - var i, l, + function configFromISO (config) { + var i, l, string = config._i, match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), - allowTime, dateFormat, timeFormat, tzFormat; + allowTime, dateFormat, timeFormat, tzFormat - if (match) { - getParsingFlags(config).iso = true; + if (match) { + getParsingFlags(config).iso = true for (i = 0, l = isoDates.length; i < l; i++) { - if (isoDates[i][1].exec(match[1])) { - dateFormat = isoDates[i][0]; - allowTime = isoDates[i][2] !== false; - break; - } + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0] + allowTime = isoDates[i][2] !== false + break + } } if (dateFormat == null) { - config._isValid = false; - return; + config._isValid = false + return } if (match[3]) { - for (i = 0, l = isoTimes.length; i < l; i++) { - if (isoTimes[i][1].exec(match[3])) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { // match[2] should be 'T' or space - timeFormat = (match[2] || ' ') + isoTimes[i][0]; - break; - } - } - if (timeFormat == null) { - config._isValid = false; - return; + timeFormat = (match[2] || ' ') + isoTimes[i][0] + break } + } + if (timeFormat == null) { + config._isValid = false + return + } } if (!allowTime && timeFormat != null) { - config._isValid = false; - return; + config._isValid = false + return } if (match[4]) { - if (tzRegex.exec(match[4])) { - tzFormat = 'Z'; - } else { - config._isValid = false; - return; - } + if (tzRegex.exec(match[4])) { + tzFormat = 'Z' + } else { + config._isValid = false + return + } } - config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); - configFromStringAndFormat(config); - } else { - config._isValid = false; + config._f = dateFormat + (timeFormat || '') + (tzFormat || '') + configFromStringAndFormat(config) + } else { + config._isValid = false + } } - } // date from iso format or fallback - function configFromString(config) { - var matched = aspNetJsonRegex.exec(config._i); + function configFromString (config) { + var matched = aspNetJsonRegex.exec(config._i) - if (matched !== null) { - config._d = new Date(+matched[1]); - return; - } + if (matched !== null) { + config._d = new Date(+matched[1]) + return + } - configFromISO(config); - if (config._isValid === false) { - delete config._isValid; - utils_hooks__hooks.createFromInputFallback(config); + configFromISO(config) + if (config._isValid === false) { + delete config._isValid + utils_hooks__hooks.createFromInputFallback(config) + } } - } - utils_hooks__hooks.createFromInputFallback = deprecate( + utils_hooks__hooks.createFromInputFallback = deprecate( 'moment construction falls back to js Date. This is ' + 'discouraged and will be removed in upcoming major ' + 'release. Please refer to ' + 'https://github.com/moment/moment/issues/1407 for more info.', function (config) { - config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')) } - ); + ) - function createDate (y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply - var date = new Date(y, m, d, h, M, s, ms); + function createDate (y, m, d, h, M, s, ms) { + // can't just apply() to create a date: + // http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms) - //the date constructor remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { - date.setFullYear(y); + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { + date.setFullYear(y) + } + return date } - return date; - } - function createUTCDate (y) { - var date = new Date(Date.UTC.apply(null, arguments)); + function createUTCDate (y) { + var date = new Date(Date.UTC.apply(null, arguments)) - //the Date.UTC function remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { - date.setUTCFullYear(y); + // the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y) + } + return date } - return date; - } // FORMATTING - addFormatToken('Y', 0, 0, function () { - var y = this.year(); - return y <= 9999 ? '' + y : '+' + y; - }); + addFormatToken('Y', 0, 0, function () { + var y = this.year() + return y <= 9999 ? '' + y : '+' + y + }) - addFormatToken(0, ['YY', 2], 0, function () { - return this.year() % 100; - }); + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100 + }) - addFormatToken(0, ['YYYY', 4], 0, 'year'); - addFormatToken(0, ['YYYYY', 5], 0, 'year'); - addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + addFormatToken(0, ['YYYY', 4], 0, 'year') + addFormatToken(0, ['YYYYY', 5], 0, 'year') + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year') // ALIASES - addUnitAlias('year', 'y'); + addUnitAlias('year', 'y') // PARSING - addRegexToken('Y', matchSigned); - addRegexToken('YY', match1to2, match2); - addRegexToken('YYYY', match1to4, match4); - addRegexToken('YYYYY', match1to6, match6); - addRegexToken('YYYYYY', match1to6, match6); - - addParseToken(['YYYYY', 'YYYYYY'], YEAR); - addParseToken('YYYY', function (input, array) { - array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input); - }); - addParseToken('YY', function (input, array) { - array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); - }); - addParseToken('Y', function (input, array) { - array[YEAR] = parseInt(input, 10); - }); + addRegexToken('Y', matchSigned) + addRegexToken('YY', match1to2, match2) + addRegexToken('YYYY', match1to4, match4) + addRegexToken('YYYYY', match1to6, match6) + addRegexToken('YYYYYY', match1to6, match6) + + addParseToken(['YYYYY', 'YYYYYY'], YEAR) + addParseToken('YYYY', function (input, array) { + array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input) + }) + addParseToken('YY', function (input, array) { + array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input) + }) + addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10) + }) // HELPERS - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; - } + function daysInYear (year) { + return isLeapYear(year) ? 366 : 365 + } - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } + function isLeapYear (year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 + } // HOOKS - utils_hooks__hooks.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; + utils_hooks__hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000) + } // MOMENTS - var getSetYear = makeGetSet('FullYear', true); + var getSetYear = makeGetSet('FullYear', true) - function getIsLeapYear () { - return isLeapYear(this.year()); - } + function getIsLeapYear () { + return isLeapYear(this.year()) + } // start-of-first-week - start-of-year - function firstWeekOffset(year, dow, doy) { - var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + function firstWeekOffset (year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) fwd = 7 + dow - doy, // first-week day local weekday -- which local weekday is fwd - fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7 - return -fwdlw + fwd - 1; - } + return -fwdlw + fwd - 1 + } - //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday - function dayOfYearFromWeeks(year, week, weekday, dow, doy) { - var localWeekday = (7 + weekday - dow) % 7, + // http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks (year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, weekOffset = firstWeekOffset(year, dow, doy), dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, - resYear, resDayOfYear; - - if (dayOfYear <= 0) { - resYear = year - 1; - resDayOfYear = daysInYear(resYear) + dayOfYear; - } else if (dayOfYear > daysInYear(year)) { - resYear = year + 1; - resDayOfYear = dayOfYear - daysInYear(year); - } else { - resYear = year; - resDayOfYear = dayOfYear; - } + resYear, resDayOfYear + + if (dayOfYear <= 0) { + resYear = year - 1 + resDayOfYear = daysInYear(resYear) + dayOfYear + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1 + resDayOfYear = dayOfYear - daysInYear(year) + } else { + resYear = year + resDayOfYear = dayOfYear + } - return { + return { year: resYear, dayOfYear: resDayOfYear - }; - } + } + } - function weekOfYear(mom, dow, doy) { - var weekOffset = firstWeekOffset(mom.year(), dow, doy), + function weekOfYear (mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, - resWeek, resYear; - - if (week < 1) { - resYear = mom.year() - 1; - resWeek = week + weeksInYear(resYear, dow, doy); - } else if (week > weeksInYear(mom.year(), dow, doy)) { - resWeek = week - weeksInYear(mom.year(), dow, doy); - resYear = mom.year() + 1; - } else { - resYear = mom.year(); - resWeek = week; - } + resWeek, resYear + + if (week < 1) { + resYear = mom.year() - 1 + resWeek = week + weeksInYear(resYear, dow, doy) + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy) + resYear = mom.year() + 1 + } else { + resYear = mom.year() + resWeek = week + } - return { + return { week: resWeek, year: resYear - }; - } + } + } - function weeksInYear(year, dow, doy) { - var weekOffset = firstWeekOffset(year, dow, doy), - weekOffsetNext = firstWeekOffset(year + 1, dow, doy); - return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; - } + function weeksInYear (year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy) + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7 + } // Pick the first defined of two or three arguments. - function defaults(a, b, c) { - if (a != null) { - return a; - } - if (b != null) { - return b; + function defaults (a, b, c) { + if (a != null) { + return a + } + if (b != null) { + return b + } + return c } - return c; - } - function currentDateArray(config) { + function currentDateArray (config) { // hooks is actually the exported moment object - var nowValue = new Date(utils_hooks__hooks.now()); - if (config._useUTC) { - return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; + var nowValue = new Date(utils_hooks__hooks.now()) + if (config._useUTC) { + return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()] + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()] } - return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; - } // convert an array to a date. // the array should mirror the parameters below // note: all values past the year are optional and will default to the lowest possible value. // [year, month, day , hour, minute, second, millisecond] - function configFromArray (config) { - var i, date, input = [], currentDate, yearToUse; + function configFromArray (config) { + var i, date, input = [], currentDate, yearToUse - if (config._d) { - return; - } + if (config._d) { + return + } - currentDate = currentDateArray(config); + currentDate = currentDateArray(config) - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); - } + // compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config) + } - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + // if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]) if (config._dayOfYear > daysInYear(yearToUse)) { - getParsingFlags(config)._overflowDayOfYear = true; + getParsingFlags(config)._overflowDayOfYear = true } - date = createUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } + date = createUTCDate(yearToUse, 0, config._dayOfYear) + config._a[MONTH] = date.getUTCMonth() + config._a[DATE] = date.getUTCDate() + } // Default to current date. // * if no year, month, day of month are given, default to today // * if day of month is given, default month and year // * if month is given, default only year // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; - } + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i] + } // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; - } + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i] + } // Check for 24:00:00.000 - if (config._a[HOUR] === 24 && + if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) { - config._nextDay = true; - config._a[HOUR] = 0; - } + config._nextDay = true + config._a[HOUR] = 0 + } - config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); + config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input) // Apply timezone offset from input. The actual utcOffset can be changed // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); - } + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm) + } - if (config._nextDay) { - config._a[HOUR] = 24; + if (config._nextDay) { + config._a[HOUR] = 24 + } } - } - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; + function dayOfYearFromWeekInfo (config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; + w = config._w + if (w.GG != null || w.W != null || w.E != null) { + dow = 1 + doy = 4 // TODO: We need to take the current isoWeekYear, but that depends on // how we interpret now (local, utc, fixed offset). So create // a now version of current config (take local/utc/offset flags, and // create now). - weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); - week = defaults(w.W, 1); - weekday = defaults(w.E, 1); + weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year) + week = defaults(w.W, 1) + weekday = defaults(w.E, 1) if (weekday < 1 || weekday > 7) { - weekdayOverflow = true; + weekdayOverflow = true } - } else { - dow = config._locale._week.dow; - doy = config._locale._week.doy; + } else { + dow = config._locale._week.dow + doy = config._locale._week.doy - weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); - week = defaults(w.w, 1); + weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year) + week = defaults(w.w, 1) if (w.d != null) { // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < 0 || weekday > 6) { - weekdayOverflow = true; - } + weekday = w.d + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true + } } else if (w.e != null) { // local weekday -- counting starts from begining of week - weekday = w.e + dow; - if (w.e < 0 || w.e > 6) { - weekdayOverflow = true; - } + weekday = w.e + dow + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true + } } else { // default to begining of week - weekday = dow; + weekday = dow } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy) + config._a[YEAR] = temp.year + config._dayOfYear = temp.dayOfYear + } } - if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { - getParsingFlags(config)._overflowWeeks = true; - } else if (weekdayOverflow != null) { - getParsingFlags(config)._overflowWeekday = true; - } else { - temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; - } - } // constant that refers to the ISO standard - utils_hooks__hooks.ISO_8601 = function () {}; + utils_hooks__hooks.ISO_8601 = function () {} // date from string and format string - function configFromStringAndFormat(config) { + function configFromStringAndFormat (config) { // TODO: Move this to another part of the creation flow to prevent circular deps - if (config._f === utils_hooks__hooks.ISO_8601) { - configFromISO(config); - return; - } + if (config._f === utils_hooks__hooks.ISO_8601) { + configFromISO(config) + return + } - config._a = []; - getParsingFlags(config).empty = true; + config._a = [] + getParsingFlags(config).empty = true // This array is used to make a Date, either with `new Date` or `Date.UTC` - var string = '' + config._i, + var string = '' + config._i, i, parsedInput, tokens, token, skipped, stringLength = string.length, - totalParsedInputLength = 0; + totalParsedInputLength = 0 - tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [] - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + for (i = 0; i < tokens.length; i++) { + token = tokens[i] + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0] // console.log('token', token, 'parsedInput', parsedInput, // 'regex', getParseRegexForToken(token, config)); if (parsedInput) { - skipped = string.substr(0, string.indexOf(parsedInput)); - if (skipped.length > 0) { - getParsingFlags(config).unusedInput.push(skipped); - } - string = string.slice(string.indexOf(parsedInput) + parsedInput.length); - totalParsedInputLength += parsedInput.length; + skipped = string.substr(0, string.indexOf(parsedInput)) + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped) + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length) + totalParsedInputLength += parsedInput.length } // don't parse if it's not a known token if (formatTokenFunctions[token]) { - if (parsedInput) { - getParsingFlags(config).empty = false; - } - else { - getParsingFlags(config).unusedTokens.push(token); - } - addTimeToArrayFromToken(token, parsedInput, config); - } - else if (config._strict && !parsedInput) { - getParsingFlags(config).unusedTokens.push(token); + if (parsedInput) { + getParsingFlags(config).empty = false + } else { + getParsingFlags(config).unusedTokens.push(token) + } + addTimeToArrayFromToken(token, parsedInput, config) + } else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token) } - } + } // add remaining unparsed input length to the string - getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - getParsingFlags(config).unusedInput.push(string); - } + getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string) + } // clear _12h flag if hour is <= 12 - if (getParsingFlags(config).bigHour === true && + if (getParsingFlags(config).bigHour === true && config._a[HOUR] <= 12 && config._a[HOUR] > 0) { - getParsingFlags(config).bigHour = undefined; - } + getParsingFlags(config).bigHour = undefined + } - getParsingFlags(config).parsedDateParts = config._a.slice(0); - getParsingFlags(config).meridiem = config._meridiem; + getParsingFlags(config).parsedDateParts = config._a.slice(0) + getParsingFlags(config).meridiem = config._meridiem // handle meridiem - config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); - - configFromArray(config); - checkOverflow(config); - } + config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem) + configFromArray(config) + checkOverflow(config) + } - function meridiemFixWrap (locale, hour, meridiem) { - var isPm; + function meridiemFixWrap (locale, hour, meridiem) { + var isPm - if (meridiem == null) { + if (meridiem == null) { // nothing to do - return hour; - } - if (locale.meridiemHour != null) { - return locale.meridiemHour(hour, meridiem); - } else if (locale.isPM != null) { + return hour + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem) + } else if (locale.isPM != null) { // Fallback - isPm = locale.isPM(meridiem); + isPm = locale.isPM(meridiem) if (isPm && hour < 12) { - hour += 12; + hour += 12 } if (!isPm && hour === 12) { - hour = 0; + hour = 0 } - return hour; - } else { + return hour + } else { // this is not supposed to happen - return hour; + return hour + } } - } // date from string and array of format strings - function configFromStringAndArray(config) { - var tempConfig, + function configFromStringAndArray (config) { + var tempConfig, bestMoment, scoreToBeat, i, - currentScore; + currentScore - if (config._f.length === 0) { - getParsingFlags(config).invalidFormat = true; - config._d = new Date(NaN); - return; - } + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true + config._d = new Date(NaN) + return + } - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = copyConfig({}, config); + for (i = 0; i < config._f.length; i++) { + currentScore = 0 + tempConfig = copyConfig({}, config) if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; + tempConfig._useUTC = config._useUTC } - tempConfig._f = config._f[i]; - configFromStringAndFormat(tempConfig); + tempConfig._f = config._f[i] + configFromStringAndFormat(tempConfig) if (!valid__isValid(tempConfig)) { - continue; + continue } // if there is any input that was not parsed add a penalty for that format - currentScore += getParsingFlags(tempConfig).charsLeftOver; + currentScore += getParsingFlags(tempConfig).charsLeftOver - //or tokens - currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + // or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10 - getParsingFlags(tempConfig).score = currentScore; + getParsingFlags(tempConfig).score = currentScore if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; + scoreToBeat = currentScore + bestMoment = tempConfig } - } - - extend(config, bestMoment || tempConfig); - } + } - function configFromObject(config) { - if (config._d) { - return; + extend(config, bestMoment || tempConfig) } - var i = normalizeObjectUnits(config._i); - config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { - return obj && parseInt(obj, 10); - }); + function configFromObject (config) { + if (config._d) { + return + } - configFromArray(config); - } + var i = normalizeObjectUnits(config._i) + config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { + return obj && parseInt(obj, 10) + }) + + configFromArray(config) + } - function createFromConfig (config) { - var res = new Moment(checkOverflow(prepareConfig(config))); - if (res._nextDay) { + function createFromConfig (config) { + var res = new Moment(checkOverflow(prepareConfig(config))) + if (res._nextDay) { // Adding is smart enough around DST - res.add(1, 'd'); - res._nextDay = undefined; + res.add(1, 'd') + res._nextDay = undefined + } + + return res } - return res; - } + function prepareConfig (config) { + var input = config._i, + format = config._f - function prepareConfig (config) { - var input = config._i, - format = config._f; + config._locale = config._locale || locale_locales__getLocale(config._l) - config._locale = config._locale || locale_locales__getLocale(config._l); + if (input === null || (format === undefined && input === '')) { + return valid__createInvalid({nullInput: true}) + } - if (input === null || (format === undefined && input === '')) { - return valid__createInvalid({nullInput: true}); - } + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input) + } - if (typeof input === 'string') { - config._i = input = config._locale.preparse(input); - } + if (isMoment(input)) { + return new Moment(checkOverflow(input)) + } else if (isArray(format)) { + configFromStringAndArray(config) + } else if (format) { + configFromStringAndFormat(config) + } else if (isDate(input)) { + config._d = input + } else { + configFromInput(config) + } - if (isMoment(input)) { - return new Moment(checkOverflow(input)); - } else if (isArray(format)) { - configFromStringAndArray(config); - } else if (format) { - configFromStringAndFormat(config); - } else if (isDate(input)) { - config._d = input; - } else { - configFromInput(config); - } + if (!valid__isValid(config)) { + config._d = null + } - if (!valid__isValid(config)) { - config._d = null; + return config } - return config; - } - - function configFromInput(config) { - var input = config._i; - if (input === undefined) { - config._d = new Date(utils_hooks__hooks.now()); - } else if (isDate(input)) { - config._d = new Date(input.valueOf()); - } else if (typeof input === 'string') { - configFromString(config); - } else if (isArray(input)) { + function configFromInput (config) { + var input = config._i + if (input === undefined) { + config._d = new Date(utils_hooks__hooks.now()) + } else if (isDate(input)) { + config._d = new Date(input.valueOf()) + } else if (typeof input === 'string') { + configFromString(config) + } else if (isArray(input)) { config._a = map(input.slice(0), function (obj) { - return parseInt(obj, 10); - }); - configFromArray(config); - } else if (typeof(input) === 'object') { - configFromObject(config); - } else if (typeof(input) === 'number') { + return parseInt(obj, 10) + }) + configFromArray(config) + } else if (typeof (input) === 'object') { + configFromObject(config) + } else if (typeof (input) === 'number') { // from milliseconds - config._d = new Date(input); - } else { - utils_hooks__hooks.createFromInputFallback(config); + config._d = new Date(input) + } else { + utils_hooks__hooks.createFromInputFallback(config) + } } - } - function createLocalOrUTC (input, format, locale, strict, isUTC) { - var c = {}; + function createLocalOrUTC (input, format, locale, strict, isUTC) { + var c = {} - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } + if (typeof (locale) === 'boolean') { + strict = locale + locale = undefined + } // object construction must be done this way. // https://github.com/moment/moment/issues/1423 - c._isAMomentObject = true; - c._useUTC = c._isUTC = isUTC; - c._l = locale; - c._i = input; - c._f = format; - c._strict = strict; - - return createFromConfig(c); - } + c._isAMomentObject = true + c._useUTC = c._isUTC = isUTC + c._l = locale + c._i = input + c._f = format + c._strict = strict - function local__createLocal (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, false); - } + return createFromConfig(c) + } + + function local__createLocal (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false) + } - var prototypeMin = deprecate( + var prototypeMin = deprecate( 'moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', function () { - var other = local__createLocal.apply(null, arguments); - if (this.isValid() && other.isValid()) { - return other < this ? this : other; - } else { - return valid__createInvalid(); - } + var other = local__createLocal.apply(null, arguments) + if (this.isValid() && other.isValid()) { + return other < this ? this : other + } else { + return valid__createInvalid() + } } - ); + ) - var prototypeMax = deprecate( + var prototypeMax = deprecate( 'moment().max is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', function () { - var other = local__createLocal.apply(null, arguments); - if (this.isValid() && other.isValid()) { - return other > this ? this : other; - } else { - return valid__createInvalid(); - } + var other = local__createLocal.apply(null, arguments) + if (this.isValid() && other.isValid()) { + return other > this ? this : other + } else { + return valid__createInvalid() + } } - ); + ) // Pick a moment m from moments so that m[fn](other) is true for all // other. This relies on the function fn to be transitive. // // moments should either be an array of moment objects or an array, whose // first element is an array of moment objects. - function pickBy(fn, moments) { - var res, i; - if (moments.length === 1 && isArray(moments[0])) { - moments = moments[0]; - } - if (!moments.length) { - return local__createLocal(); - } - res = moments[0]; - for (i = 1; i < moments.length; ++i) { + function pickBy (fn, moments) { + var res, i + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0] + } + if (!moments.length) { + return local__createLocal() + } + res = moments[0] + for (i = 1; i < moments.length; ++i) { if (!moments[i].isValid() || moments[i][fn](res)) { - res = moments[i]; + res = moments[i] } + } + return res } - return res; - } // TODO: Use [].sort instead? - function min () { - var args = [].slice.call(arguments, 0); + function min () { + var args = [].slice.call(arguments, 0) - return pickBy('isBefore', args); - } + return pickBy('isBefore', args) + } - function max () { - var args = [].slice.call(arguments, 0); + function max () { + var args = [].slice.call(arguments, 0) - return pickBy('isAfter', args); - } + return pickBy('isAfter', args) + } - var now = function () { - return Date.now ? Date.now() : +(new Date()); - }; + var now = function () { + return Date.now ? Date.now() : +(new Date()) + } - function Duration (duration) { - var normalizedInput = normalizeObjectUnits(duration), + function Duration (duration) { + var normalizedInput = normalizeObjectUnits(duration), years = normalizedInput.year || 0, quarters = normalizedInput.quarter || 0, months = normalizedInput.month || 0, @@ -45991,103 +46158,103 @@ process.chdir = function (dir) { hours = normalizedInput.hour || 0, minutes = normalizedInput.minute || 0, seconds = normalizedInput.second || 0, - milliseconds = normalizedInput.millisecond || 0; + milliseconds = normalizedInput.millisecond || 0 // representation for dateAddRemove - this._milliseconds = +milliseconds + + this._milliseconds = +milliseconds + seconds * 1e3 + // 1000 minutes * 6e4 + // 1000 * 60 - hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + hours * 1000 * 60 * 60 // using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 // Because of dateAddRemove treats 24 hours as different from a // day when working around DST, we need to store them separately - this._days = +days + - weeks * 7; + this._days = +days + + weeks * 7 // It is impossible translate months into days without knowing // which months you are are talking about, so we have to store // it separately. - this._months = +months + + this._months = +months + quarters * 3 + - years * 12; + years * 12 - this._data = {}; + this._data = {} - this._locale = locale_locales__getLocale(); + this._locale = locale_locales__getLocale() - this._bubble(); - } + this._bubble() + } - function isDuration (obj) { - return obj instanceof Duration; - } + function isDuration (obj) { + return obj instanceof Duration + } // FORMATTING - function offset (token, separator) { - addFormatToken(token, 0, 0, function () { - var offset = this.utcOffset(); - var sign = '+'; + function offset (token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset() + var sign = '+' if (offset < 0) { - offset = -offset; - sign = '-'; + offset = -offset + sign = '-' } - return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); - }); - } + return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2) + }) + } - offset('Z', ':'); - offset('ZZ', ''); + offset('Z', ':') + offset('ZZ', '') // PARSING - addRegexToken('Z', matchShortOffset); - addRegexToken('ZZ', matchShortOffset); - addParseToken(['Z', 'ZZ'], function (input, array, config) { - config._useUTC = true; - config._tzm = offsetFromString(matchShortOffset, input); - }); + addRegexToken('Z', matchShortOffset) + addRegexToken('ZZ', matchShortOffset) + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true + config._tzm = offsetFromString(matchShortOffset, input) + }) // HELPERS // timezone chunker // '+10:00' > ['10', '00'] // '-1530' > ['-15', '30'] - var chunkOffset = /([\+\-]|\d\d)/gi; + var chunkOffset = /([\+\-]|\d\d)/gi - function offsetFromString(matcher, string) { - var matches = ((string || '').match(matcher) || []); - var chunk = matches[matches.length - 1] || []; - var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; - var minutes = +(parts[1] * 60) + toInt(parts[2]); + function offsetFromString (matcher, string) { + var matches = ((string || '').match(matcher) || []) + var chunk = matches[matches.length - 1] || [] + var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0] + var minutes = +(parts[1] * 60) + toInt(parts[2]) - return parts[0] === '+' ? minutes : -minutes; - } + return parts[0] === '+' ? minutes : -minutes + } // Return a moment from input, that is local/utc/zone equivalent to model. - function cloneWithOffset(input, model) { - var res, diff; - if (model._isUTC) { - res = model.clone(); - diff = (isMoment(input) || isDate(input) ? input.valueOf() : local__createLocal(input).valueOf()) - res.valueOf(); + function cloneWithOffset (input, model) { + var res, diff + if (model._isUTC) { + res = model.clone() + diff = (isMoment(input) || isDate(input) ? input.valueOf() : local__createLocal(input).valueOf()) - res.valueOf() // Use low-level api, because this fn is low-level api. - res._d.setTime(res._d.valueOf() + diff); - utils_hooks__hooks.updateOffset(res, false); - return res; - } else { - return local__createLocal(input).local(); + res._d.setTime(res._d.valueOf() + diff) + utils_hooks__hooks.updateOffset(res, false) + return res + } else { + return local__createLocal(input).local() + } } - } - function getDateOffset (m) { + function getDateOffset (m) { // On Firefox.24 Date#getTimezoneOffset returns a floating point. // https://github.com/moment/moment/pull/1871 - return -Math.round(m._d.getTimezoneOffset() / 15) * 15; - } + return -Math.round(m._d.getTimezoneOffset() / 15) * 15 + } // HOOKS // This function will be called whenever a moment is mutated. // It is intended to keep the offset in sync with the timezone. - utils_hooks__hooks.updateOffset = function () {}; + utils_hooks__hooks.updateOffset = function () {} // MOMENTS @@ -46101,598 +46268,598 @@ process.chdir = function (dir) { // a second time. In case it wants us to change the offset again // _changeInProgress == true case, then we have to adjust, because // there is no such time in the given timezone. - function getSetOffset (input, keepLocalTime) { - var offset = this._offset || 0, - localAdjust; - if (!this.isValid()) { - return input != null ? this : NaN; - } - if (input != null) { + function getSetOffset (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust + if (!this.isValid()) { + return input != null ? this : NaN + } + if (input != null) { if (typeof input === 'string') { - input = offsetFromString(matchShortOffset, input); + input = offsetFromString(matchShortOffset, input) } else if (Math.abs(input) < 16) { - input = input * 60; + input = input * 60 } if (!this._isUTC && keepLocalTime) { - localAdjust = getDateOffset(this); + localAdjust = getDateOffset(this) } - this._offset = input; - this._isUTC = true; + this._offset = input + this._isUTC = true if (localAdjust != null) { - this.add(localAdjust, 'm'); + this.add(localAdjust, 'm') } if (offset !== input) { - if (!keepLocalTime || this._changeInProgress) { - add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); - } else if (!this._changeInProgress) { - this._changeInProgress = true; - utils_hooks__hooks.updateOffset(this, true); - this._changeInProgress = null; - } + if (!keepLocalTime || this._changeInProgress) { + add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false) + } else if (!this._changeInProgress) { + this._changeInProgress = true + utils_hooks__hooks.updateOffset(this, true) + this._changeInProgress = null + } } - return this; - } else { - return this._isUTC ? offset : getDateOffset(this); + return this + } else { + return this._isUTC ? offset : getDateOffset(this) + } } - } - function getSetZone (input, keepLocalTime) { - if (input != null) { + function getSetZone (input, keepLocalTime) { + if (input != null) { if (typeof input !== 'string') { - input = -input; + input = -input } - this.utcOffset(input, keepLocalTime); + this.utcOffset(input, keepLocalTime) - return this; - } else { - return -this.utcOffset(); + return this + } else { + return -this.utcOffset() + } } - } - function setOffsetToUTC (keepLocalTime) { - return this.utcOffset(0, keepLocalTime); - } + function setOffsetToUTC (keepLocalTime) { + return this.utcOffset(0, keepLocalTime) + } - function setOffsetToLocal (keepLocalTime) { - if (this._isUTC) { - this.utcOffset(0, keepLocalTime); - this._isUTC = false; + function setOffsetToLocal (keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime) + this._isUTC = false if (keepLocalTime) { - this.subtract(getDateOffset(this), 'm'); + this.subtract(getDateOffset(this), 'm') } + } + return this } - return this; - } - function setOffsetToParsedOffset () { - if (this._tzm) { - this.utcOffset(this._tzm); - } else if (typeof this._i === 'string') { - this.utcOffset(offsetFromString(matchOffset, this._i)); + function setOffsetToParsedOffset () { + if (this._tzm) { + this.utcOffset(this._tzm) + } else if (typeof this._i === 'string') { + this.utcOffset(offsetFromString(matchOffset, this._i)) + } + return this } - return this; - } - function hasAlignedHourOffset (input) { - if (!this.isValid()) { - return false; - } - input = input ? local__createLocal(input).utcOffset() : 0; + function hasAlignedHourOffset (input) { + if (!this.isValid()) { + return false + } + input = input ? local__createLocal(input).utcOffset() : 0 - return (this.utcOffset() - input) % 60 === 0; - } + return (this.utcOffset() - input) % 60 === 0 + } - function isDaylightSavingTime () { - return ( + function isDaylightSavingTime () { + return ( this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset() - ); - } - - function isDaylightSavingTimeShifted () { - if (!isUndefined(this._isDSTShifted)) { - return this._isDSTShifted; + ) } - var c = {}; + function isDaylightSavingTimeShifted () { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted + } + + var c = {} - copyConfig(c, this); - c = prepareConfig(c); + copyConfig(c, this) + c = prepareConfig(c) - if (c._a) { - var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a); + if (c._a) { + var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a) this._isDSTShifted = this.isValid() && - compareArrays(c._a, other.toArray()) > 0; - } else { - this._isDSTShifted = false; - } + compareArrays(c._a, other.toArray()) > 0 + } else { + this._isDSTShifted = false + } - return this._isDSTShifted; - } + return this._isDSTShifted + } - function isLocal () { - return this.isValid() ? !this._isUTC : false; - } + function isLocal () { + return this.isValid() ? !this._isUTC : false + } - function isUtcOffset () { - return this.isValid() ? this._isUTC : false; - } + function isUtcOffset () { + return this.isValid() ? this._isUTC : false + } - function isUtc () { - return this.isValid() ? this._isUTC && this._offset === 0 : false; - } + function isUtc () { + return this.isValid() ? this._isUTC && this._offset === 0 : false + } // ASP.NET json date format regex - var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/; + var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/ // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere // and further modified to allow for strings containing both week and day - var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/; + var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/ - function create__createDuration (input, key) { - var duration = input, + function create__createDuration (input, key) { + var duration = input, // matching against regexp is expensive, do it on demand match = null, sign, ret, - diffRes; + diffRes - if (isDuration(input)) { + if (isDuration(input)) { duration = { - ms : input._milliseconds, - d : input._days, - M : input._months - }; - } else if (typeof input === 'number') { - duration = {}; + ms: input._milliseconds, + d: input._days, + M: input._months + } + } else if (typeof input === 'number') { + duration = {} if (key) { - duration[key] = input; + duration[key] = input } else { - duration.milliseconds = input; + duration.milliseconds = input } - } else if (!!(match = aspNetRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; + } else if (match = aspNetRegex.exec(input)) { + sign = (match[1] === '-') ? -1 : 1 duration = { - y : 0, - d : toInt(match[DATE]) * sign, - h : toInt(match[HOUR]) * sign, - m : toInt(match[MINUTE]) * sign, - s : toInt(match[SECOND]) * sign, - ms : toInt(match[MILLISECOND]) * sign - }; - } else if (!!(match = isoRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(match[MILLISECOND]) * sign + } + } else if (match = isoRegex.exec(input)) { + sign = (match[1] === '-') ? -1 : 1 duration = { - y : parseIso(match[2], sign), - M : parseIso(match[3], sign), - w : parseIso(match[4], sign), - d : parseIso(match[5], sign), - h : parseIso(match[6], sign), - m : parseIso(match[7], sign), - s : parseIso(match[8], sign) - }; - } else if (duration == null) {// checks for null or undefined - duration = {}; - } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { - diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); + y: parseIso(match[2], sign), + M: parseIso(match[3], sign), + w: parseIso(match[4], sign), + d: parseIso(match[5], sign), + h: parseIso(match[6], sign), + m: parseIso(match[7], sign), + s: parseIso(match[8], sign) + } + } else if (duration == null) { // checks for null or undefined + duration = {} + } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)) + + duration = {} + duration.ms = diffRes.milliseconds + duration.M = diffRes.months + } - duration = {}; - duration.ms = diffRes.milliseconds; - duration.M = diffRes.months; - } + ret = new Duration(duration) - ret = new Duration(duration); + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale + } - if (isDuration(input) && hasOwnProp(input, '_locale')) { - ret._locale = input._locale; + return ret } - return ret; - } - - create__createDuration.fn = Duration.prototype; + create__createDuration.fn = Duration.prototype - function parseIso (inp, sign) { + function parseIso (inp, sign) { // We'd normally use ~~inp for this, but unfortunately it also // converts floats to ints. // inp may be undefined, so careful calling replace on it. - var res = inp && parseFloat(inp.replace(',', '.')); + var res = inp && parseFloat(inp.replace(',', '.')) // apply sign while we're at it - return (isNaN(res) ? 0 : res) * sign; - } - - function positiveMomentsDifference(base, other) { - var res = {milliseconds: 0, months: 0}; - - res.months = other.month() - base.month() + - (other.year() - base.year()) * 12; - if (base.clone().add(res.months, 'M').isAfter(other)) { - --res.months; + return (isNaN(res) ? 0 : res) * sign } - res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + function positiveMomentsDifference (base, other) { + var res = {milliseconds: 0, months: 0} - return res; - } + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12 + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months + } - function momentsDifference(base, other) { - var res; - if (!(base.isValid() && other.isValid())) { - return {milliseconds: 0, months: 0}; - } + res.milliseconds = +other - +(base.clone().add(res.months, 'M')) - other = cloneWithOffset(other, base); - if (base.isBefore(other)) { - res = positiveMomentsDifference(base, other); - } else { - res = positiveMomentsDifference(other, base); - res.milliseconds = -res.milliseconds; - res.months = -res.months; + return res } - return res; - } + function momentsDifference (base, other) { + var res + if (!(base.isValid() && other.isValid())) { + return {milliseconds: 0, months: 0} + } - function absRound (number) { - if (number < 0) { - return Math.round(-1 * number) * -1; - } else { - return Math.round(number); + other = cloneWithOffset(other, base) + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other) + } else { + res = positiveMomentsDifference(other, base) + res.milliseconds = -res.milliseconds + res.months = -res.months + } + + return res + } + + function absRound (number) { + if (number < 0) { + return Math.round(-1 * number) * -1 + } else { + return Math.round(number) + } } - } // TODO: remove 'name' arg after deprecation is removed - function createAdder(direction, name) { - return function (val, period) { - var dur, tmp; - //invert the arguments, but complain about it + function createAdder (direction, name) { + return function (val, period) { + var dur, tmp + // invert the arguments, but complain about it if (period !== null && !isNaN(+period)) { - deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); - tmp = val; val = period; period = tmp; + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).') + tmp = val; val = period; period = tmp } - val = typeof val === 'string' ? +val : val; - dur = create__createDuration(val, period); - add_subtract__addSubtract(this, dur, direction); - return this; - }; - } + val = typeof val === 'string' ? +val : val + dur = create__createDuration(val, period) + add_subtract__addSubtract(this, dur, direction) + return this + } + } - function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, + function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, days = absRound(duration._days), - months = absRound(duration._months); + months = absRound(duration._months) - if (!mom.isValid()) { + if (!mom.isValid()) { // No op - return; - } + return + } - updateOffset = updateOffset == null ? true : updateOffset; + updateOffset = updateOffset == null ? true : updateOffset - if (milliseconds) { - mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); - } - if (days) { - get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); - } - if (months) { - setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); - } - if (updateOffset) { - utils_hooks__hooks.updateOffset(mom, days || months); + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding) + } + if (days) { + get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding) + } + if (months) { + setMonth(mom, get_set__get(mom, 'Month') + months * isAdding) + } + if (updateOffset) { + utils_hooks__hooks.updateOffset(mom, days || months) + } } - } - var add_subtract__add = createAdder(1, 'add'); - var add_subtract__subtract = createAdder(-1, 'subtract'); + var add_subtract__add = createAdder(1, 'add') + var add_subtract__subtract = createAdder(-1, 'subtract') - function moment_calendar__calendar (time, formats) { + function moment_calendar__calendar (time, formats) { // We want to compare the start of today, vs this. // Getting start-of-today depends on whether we're local/utc/offset or not. - var now = time || local__createLocal(), + var now = time || local__createLocal(), sod = cloneWithOffset(now, this).startOf('day'), diff = this.diff(sod, 'days', true), - format = diff < -6 ? 'sameElse' : - diff < -1 ? 'lastWeek' : - diff < 0 ? 'lastDay' : - diff < 1 ? 'sameDay' : - diff < 2 ? 'nextDay' : - diff < 7 ? 'nextWeek' : 'sameElse'; - - var output = formats && (isFunction(formats[format]) ? formats[format]() : formats[format]); + format = diff < -6 ? 'sameElse' + : diff < -1 ? 'lastWeek' + : diff < 0 ? 'lastDay' + : diff < 1 ? 'sameDay' + : diff < 2 ? 'nextDay' + : diff < 7 ? 'nextWeek' : 'sameElse' - return this.format(output || this.localeData().calendar(format, this, local__createLocal(now))); - } - - function clone () { - return new Moment(this); - } + var output = formats && (isFunction(formats[format]) ? formats[format]() : formats[format]) - function isAfter (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input); - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); - if (units === 'millisecond') { - return this.valueOf() > localInput.valueOf(); - } else { - return localInput.valueOf() < this.clone().startOf(units).valueOf(); + return this.format(output || this.localeData().calendar(format, this, local__createLocal(now))) } - } - function isBefore (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input); - if (!(this.isValid() && localInput.isValid())) { - return false; + function clone () { + return new Moment(this) } - units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); - if (units === 'millisecond') { - return this.valueOf() < localInput.valueOf(); - } else { - return this.clone().endOf(units).valueOf() < localInput.valueOf(); + + function isAfter (input, units) { + var localInput = isMoment(input) ? input : local__createLocal(input) + if (!(this.isValid() && localInput.isValid())) { + return false + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond') + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf() + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf() + } } - } - function isBetween (from, to, units, inclusivity) { - inclusivity = inclusivity || '()'; - return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && - (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)); - } + function isBefore (input, units) { + var localInput = isMoment(input) ? input : local__createLocal(input) + if (!(this.isValid() && localInput.isValid())) { + return false + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond') + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf() + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf() + } + } - function isSame (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input), - inputMs; - if (!(this.isValid() && localInput.isValid())) { - return false; + function isBetween (from, to, units, inclusivity) { + inclusivity = inclusivity || '()' + return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && + (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)) } - units = normalizeUnits(units || 'millisecond'); - if (units === 'millisecond') { - return this.valueOf() === localInput.valueOf(); - } else { - inputMs = localInput.valueOf(); - return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); + + function isSame (input, units) { + var localInput = isMoment(input) ? input : local__createLocal(input), + inputMs + if (!(this.isValid() && localInput.isValid())) { + return false + } + units = normalizeUnits(units || 'millisecond') + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf() + } else { + inputMs = localInput.valueOf() + return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf() + } } - } - function isSameOrAfter (input, units) { - return this.isSame(input, units) || this.isAfter(input,units); - } + function isSameOrAfter (input, units) { + return this.isSame(input, units) || this.isAfter(input, units) + } - function isSameOrBefore (input, units) { - return this.isSame(input, units) || this.isBefore(input,units); - } + function isSameOrBefore (input, units) { + return this.isSame(input, units) || this.isBefore(input, units) + } - function diff (input, units, asFloat) { - var that, + function diff (input, units, asFloat) { + var that, zoneDelta, - delta, output; + delta, output - if (!this.isValid()) { - return NaN; - } + if (!this.isValid()) { + return NaN + } - that = cloneWithOffset(input, this); + that = cloneWithOffset(input, this) - if (!that.isValid()) { - return NaN; - } + if (!that.isValid()) { + return NaN + } - zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4 - units = normalizeUnits(units); + units = normalizeUnits(units) - if (units === 'year' || units === 'month' || units === 'quarter') { - output = monthDiff(this, that); + if (units === 'year' || units === 'month' || units === 'quarter') { + output = monthDiff(this, that) if (units === 'quarter') { - output = output / 3; + output = output / 3 } else if (units === 'year') { - output = output / 12; + output = output / 12 } - } else { - delta = this - that; - output = units === 'second' ? delta / 1e3 : // 1000 - units === 'minute' ? delta / 6e4 : // 1000 * 60 - units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - delta; - } - return asFloat ? output : absFloor(output); - } + } else { + delta = this - that + output = units === 'second' ? delta / 1e3 // 1000 + : units === 'minute' ? delta / 6e4 // 1000 * 60 + : units === 'hour' ? delta / 36e5 // 1000 * 60 * 60 + : units === 'day' ? (delta - zoneDelta) / 864e5 // 1000 * 60 * 60 * 24, negate dst + : units === 'week' ? (delta - zoneDelta) / 6048e5 // 1000 * 60 * 60 * 24 * 7, negate dst + : delta + } + return asFloat ? output : absFloor(output) + } - function monthDiff (a, b) { + function monthDiff (a, b) { // difference in months - var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), + var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), // b is in (anchor - 1 month, anchor + 1 month) anchor = a.clone().add(wholeMonthDiff, 'months'), - anchor2, adjust; + anchor2, adjust - if (b - anchor < 0) { - anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months') // linear across the month - adjust = (b - anchor) / (anchor - anchor2); - } else { - anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + adjust = (b - anchor) / (anchor - anchor2) + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months') // linear across the month - adjust = (b - anchor) / (anchor2 - anchor); - } + adjust = (b - anchor) / (anchor2 - anchor) + } - //check for negative zero, return zero if negative zero - return -(wholeMonthDiff + adjust) || 0; - } + // check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0 + } - utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; - utils_hooks__hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ' + utils_hooks__hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]' - function toString () { - return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); - } + function toString () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ') + } - function moment_format__toISOString () { - var m = this.clone().utc(); - if (0 < m.year() && m.year() <= 9999) { + function moment_format__toISOString () { + var m = this.clone().utc() + if (m.year() > 0 && m.year() <= 9999) { if (isFunction(Date.prototype.toISOString)) { // native implementation is ~50x faster, use it when we can - return this.toDate().toISOString(); + return this.toDate().toISOString() } else { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]') } - } else { - return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]') + } } - } - function format (inputString) { - if (!inputString) { - inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat; + function format (inputString) { + if (!inputString) { + inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat + } + var output = formatMoment(this, inputString) + return this.localeData().postformat(output) } - var output = formatMoment(this, inputString); - return this.localeData().postformat(output); - } - function from (time, withoutSuffix) { - if (this.isValid() && + function from (time, withoutSuffix) { + if (this.isValid() && ((isMoment(time) && time.isValid()) || local__createLocal(time).isValid())) { - return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); - } else { - return this.localeData().invalidDate(); + return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix) + } else { + return this.localeData().invalidDate() + } } - } - function fromNow (withoutSuffix) { - return this.from(local__createLocal(), withoutSuffix); - } + function fromNow (withoutSuffix) { + return this.from(local__createLocal(), withoutSuffix) + } - function to (time, withoutSuffix) { - if (this.isValid() && + function to (time, withoutSuffix) { + if (this.isValid() && ((isMoment(time) && time.isValid()) || local__createLocal(time).isValid())) { - return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); - } else { - return this.localeData().invalidDate(); + return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix) + } else { + return this.localeData().invalidDate() + } } - } - function toNow (withoutSuffix) { - return this.to(local__createLocal(), withoutSuffix); - } + function toNow (withoutSuffix) { + return this.to(local__createLocal(), withoutSuffix) + } // If passed a locale key, it will set the locale for this // instance. Otherwise, it will return the locale configuration // variables for this instance. - function locale (key) { - var newLocaleData; + function locale (key) { + var newLocaleData - if (key === undefined) { - return this._locale._abbr; - } else { - newLocaleData = locale_locales__getLocale(key); + if (key === undefined) { + return this._locale._abbr + } else { + newLocaleData = locale_locales__getLocale(key) if (newLocaleData != null) { - this._locale = newLocaleData; + this._locale = newLocaleData } - return this; + return this + } } - } - var lang = deprecate( + var lang = deprecate( 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) { - if (key === undefined) { - return this.localeData(); - } else { - return this.locale(key); - } + if (key === undefined) { + return this.localeData() + } else { + return this.locale(key) + } } - ); + ) - function localeData () { - return this._locale; - } + function localeData () { + return this._locale + } - function startOf (units) { - units = normalizeUnits(units); + function startOf (units) { + units = normalizeUnits(units) // the following switch intentionally omits break keywords // to utilize falling through the cases. - switch (units) { - case 'year': - this.month(0); + switch (units) { + case 'year': + this.month(0) /* falls through */ - case 'quarter': - case 'month': - this.date(1); + case 'quarter': + case 'month': + this.date(1) /* falls through */ - case 'week': - case 'isoWeek': - case 'day': - case 'date': - this.hours(0); + case 'week': + case 'isoWeek': + case 'day': + case 'date': + this.hours(0) /* falls through */ - case 'hour': - this.minutes(0); + case 'hour': + this.minutes(0) /* falls through */ - case 'minute': - this.seconds(0); + case 'minute': + this.seconds(0) /* falls through */ - case 'second': - this.milliseconds(0); - } + case 'second': + this.milliseconds(0) + } // weeks are a special case - if (units === 'week') { - this.weekday(0); - } - if (units === 'isoWeek') { - this.isoWeekday(1); - } + if (units === 'week') { + this.weekday(0) + } + if (units === 'isoWeek') { + this.isoWeekday(1) + } // quarters are also special - if (units === 'quarter') { - this.month(Math.floor(this.month() / 3) * 3); - } - - return this; - } + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3) + } - function endOf (units) { - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond') { - return this; + return this } + function endOf (units) { + units = normalizeUnits(units) + if (units === undefined || units === 'millisecond') { + return this + } + // 'date' is an alias for 'day', so it should be considered as such. - if (units === 'date') { - units = 'day'; - } + if (units === 'date') { + units = 'day' + } - return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); - } + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms') + } - function to_type__valueOf () { - return this._d.valueOf() - ((this._offset || 0) * 60000); - } + function to_type__valueOf () { + return this._d.valueOf() - ((this._offset || 0) * 60000) + } - function unix () { - return Math.floor(this.valueOf() / 1000); - } + function unix () { + return Math.floor(this.valueOf() / 1000) + } - function toDate () { - return this._offset ? new Date(this.valueOf()) : this._d; - } + function toDate () { + return this._offset ? new Date(this.valueOf()) : this._d + } - function toArray () { - var m = this; - return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; - } + function toArray () { + var m = this + return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()] + } - function toObject () { - var m = this; - return { + function toObject () { + var m = this + return { years: m.year(), months: m.month(), date: m.date(), @@ -46700,689 +46867,687 @@ process.chdir = function (dir) { minutes: m.minutes(), seconds: m.seconds(), milliseconds: m.milliseconds() - }; - } + } + } - function toJSON () { + function toJSON () { // new Date(NaN).toJSON() === null - return this.isValid() ? this.toISOString() : null; - } + return this.isValid() ? this.toISOString() : null + } - function moment_valid__isValid () { - return valid__isValid(this); - } + function moment_valid__isValid () { + return valid__isValid(this) + } - function parsingFlags () { - return extend({}, getParsingFlags(this)); - } + function parsingFlags () { + return extend({}, getParsingFlags(this)) + } - function invalidAt () { - return getParsingFlags(this).overflow; - } + function invalidAt () { + return getParsingFlags(this).overflow + } - function creationData() { - return { + function creationData () { + return { input: this._i, format: this._f, locale: this._locale, isUTC: this._isUTC, strict: this._strict - }; - } + } + } // FORMATTING - addFormatToken(0, ['gg', 2], 0, function () { - return this.weekYear() % 100; - }); + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100 + }) - addFormatToken(0, ['GG', 2], 0, function () { - return this.isoWeekYear() % 100; - }); + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100 + }) - function addWeekYearFormatToken (token, getter) { - addFormatToken(0, [token, token.length], 0, getter); - } + function addWeekYearFormatToken (token, getter) { + addFormatToken(0, [token, token.length], 0, getter) + } - addWeekYearFormatToken('gggg', 'weekYear'); - addWeekYearFormatToken('ggggg', 'weekYear'); - addWeekYearFormatToken('GGGG', 'isoWeekYear'); - addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + addWeekYearFormatToken('gggg', 'weekYear') + addWeekYearFormatToken('ggggg', 'weekYear') + addWeekYearFormatToken('GGGG', 'isoWeekYear') + addWeekYearFormatToken('GGGGG', 'isoWeekYear') // ALIASES - addUnitAlias('weekYear', 'gg'); - addUnitAlias('isoWeekYear', 'GG'); + addUnitAlias('weekYear', 'gg') + addUnitAlias('isoWeekYear', 'GG') // PARSING - addRegexToken('G', matchSigned); - addRegexToken('g', matchSigned); - addRegexToken('GG', match1to2, match2); - addRegexToken('gg', match1to2, match2); - addRegexToken('GGGG', match1to4, match4); - addRegexToken('gggg', match1to4, match4); - addRegexToken('GGGGG', match1to6, match6); - addRegexToken('ggggg', match1to6, match6); - - addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { - week[token.substr(0, 2)] = toInt(input); - }); + addRegexToken('G', matchSigned) + addRegexToken('g', matchSigned) + addRegexToken('GG', match1to2, match2) + addRegexToken('gg', match1to2, match2) + addRegexToken('GGGG', match1to4, match4) + addRegexToken('gggg', match1to4, match4) + addRegexToken('GGGGG', match1to6, match6) + addRegexToken('ggggg', match1to6, match6) + + addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input) + }) - addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { - week[token] = utils_hooks__hooks.parseTwoDigitYear(input); - }); + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = utils_hooks__hooks.parseTwoDigitYear(input) + }) // MOMENTS - function getSetWeekYear (input) { - return getSetWeekYearHelper.call(this, + function getSetWeekYear (input) { + return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, - this.localeData()._week.doy); - } + this.localeData()._week.doy) + } - function getSetISOWeekYear (input) { - return getSetWeekYearHelper.call(this, - input, this.isoWeek(), this.isoWeekday(), 1, 4); - } + function getSetISOWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, this.isoWeek(), this.isoWeekday(), 1, 4) + } - function getISOWeeksInYear () { - return weeksInYear(this.year(), 1, 4); - } + function getISOWeeksInYear () { + return weeksInYear(this.year(), 1, 4) + } - function getWeeksInYear () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); - } + function getWeeksInYear () { + var weekInfo = this.localeData()._week + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy) + } - function getSetWeekYearHelper(input, week, weekday, dow, doy) { - var weeksTarget; - if (input == null) { - return weekOfYear(this, dow, doy).year; - } else { - weeksTarget = weeksInYear(input, dow, doy); + function getSetWeekYearHelper (input, week, weekday, dow, doy) { + var weeksTarget + if (input == null) { + return weekOfYear(this, dow, doy).year + } else { + weeksTarget = weeksInYear(input, dow, doy) if (week > weeksTarget) { - week = weeksTarget; + week = weeksTarget } - return setWeekAll.call(this, input, week, weekday, dow, doy); + return setWeekAll.call(this, input, week, weekday, dow, doy) + } } - } - function setWeekAll(weekYear, week, weekday, dow, doy) { - var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), - date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + function setWeekAll (weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear) - this.year(date.getUTCFullYear()); - this.month(date.getUTCMonth()); - this.date(date.getUTCDate()); - return this; - } + this.year(date.getUTCFullYear()) + this.month(date.getUTCMonth()) + this.date(date.getUTCDate()) + return this + } // FORMATTING - addFormatToken('Q', 0, 'Qo', 'quarter'); + addFormatToken('Q', 0, 'Qo', 'quarter') // ALIASES - addUnitAlias('quarter', 'Q'); + addUnitAlias('quarter', 'Q') // PARSING - addRegexToken('Q', match1); - addParseToken('Q', function (input, array) { - array[MONTH] = (toInt(input) - 1) * 3; - }); + addRegexToken('Q', match1) + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3 + }) // MOMENTS - function getSetQuarter (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); - } + function getSetQuarter (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3) + } // FORMATTING - addFormatToken('w', ['ww', 2], 'wo', 'week'); - addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + addFormatToken('w', ['ww', 2], 'wo', 'week') + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek') // ALIASES - addUnitAlias('week', 'w'); - addUnitAlias('isoWeek', 'W'); + addUnitAlias('week', 'w') + addUnitAlias('isoWeek', 'W') // PARSING - addRegexToken('w', match1to2); - addRegexToken('ww', match1to2, match2); - addRegexToken('W', match1to2); - addRegexToken('WW', match1to2, match2); + addRegexToken('w', match1to2) + addRegexToken('ww', match1to2, match2) + addRegexToken('W', match1to2) + addRegexToken('WW', match1to2, match2) - addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { - week[token.substr(0, 1)] = toInt(input); - }); + addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input) + }) // HELPERS // LOCALES - function localeWeek (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; - } + function localeWeek (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week + } - var defaultLocaleWeek = { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - }; + var defaultLocaleWeek = { + dow: 0, // Sunday is the first day of the week. + doy: 6 // The week that contains Jan 1st is the first week of the year. + } - function localeFirstDayOfWeek () { - return this._week.dow; - } + function localeFirstDayOfWeek () { + return this._week.dow + } - function localeFirstDayOfYear () { - return this._week.doy; - } + function localeFirstDayOfYear () { + return this._week.doy + } // MOMENTS - function getSetWeek (input) { - var week = this.localeData().week(this); - return input == null ? week : this.add((input - week) * 7, 'd'); - } + function getSetWeek (input) { + var week = this.localeData().week(this) + return input == null ? week : this.add((input - week) * 7, 'd') + } - function getSetISOWeek (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add((input - week) * 7, 'd'); - } + function getSetISOWeek (input) { + var week = weekOfYear(this, 1, 4).week + return input == null ? week : this.add((input - week) * 7, 'd') + } // FORMATTING - addFormatToken('D', ['DD', 2], 'Do', 'date'); + addFormatToken('D', ['DD', 2], 'Do', 'date') // ALIASES - addUnitAlias('date', 'D'); + addUnitAlias('date', 'D') // PARSING - addRegexToken('D', match1to2); - addRegexToken('DD', match1to2, match2); - addRegexToken('Do', function (isStrict, locale) { - return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; - }); + addRegexToken('D', match1to2) + addRegexToken('DD', match1to2, match2) + addRegexToken('Do', function (isStrict, locale) { + return isStrict ? locale._ordinalParse : locale._ordinalParseLenient + }) - addParseToken(['D', 'DD'], DATE); - addParseToken('Do', function (input, array) { - array[DATE] = toInt(input.match(match1to2)[0], 10); - }); + addParseToken(['D', 'DD'], DATE) + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0], 10) + }) // MOMENTS - var getSetDayOfMonth = makeGetSet('Date', true); + var getSetDayOfMonth = makeGetSet('Date', true) // FORMATTING - addFormatToken('d', 0, 'do', 'day'); + addFormatToken('d', 0, 'do', 'day') - addFormatToken('dd', 0, 0, function (format) { - return this.localeData().weekdaysMin(this, format); - }); + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format) + }) - addFormatToken('ddd', 0, 0, function (format) { - return this.localeData().weekdaysShort(this, format); - }); + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format) + }) - addFormatToken('dddd', 0, 0, function (format) { - return this.localeData().weekdays(this, format); - }); + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format) + }) - addFormatToken('e', 0, 0, 'weekday'); - addFormatToken('E', 0, 0, 'isoWeekday'); + addFormatToken('e', 0, 0, 'weekday') + addFormatToken('E', 0, 0, 'isoWeekday') // ALIASES - addUnitAlias('day', 'd'); - addUnitAlias('weekday', 'e'); - addUnitAlias('isoWeekday', 'E'); + addUnitAlias('day', 'd') + addUnitAlias('weekday', 'e') + addUnitAlias('isoWeekday', 'E') // PARSING - addRegexToken('d', match1to2); - addRegexToken('e', match1to2); - addRegexToken('E', match1to2); - addRegexToken('dd', function (isStrict, locale) { - return locale.weekdaysMinRegex(isStrict); - }); - addRegexToken('ddd', function (isStrict, locale) { - return locale.weekdaysShortRegex(isStrict); - }); - addRegexToken('dddd', function (isStrict, locale) { - return locale.weekdaysRegex(isStrict); - }); - - addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { - var weekday = config._locale.weekdaysParse(input, token, config._strict); + addRegexToken('d', match1to2) + addRegexToken('e', match1to2) + addRegexToken('E', match1to2) + addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict) + }) + addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict) + }) + addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict) + }) + + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict) // if we didn't get a weekday name, mark the date as invalid - if (weekday != null) { - week.d = weekday; - } else { - getParsingFlags(config).invalidWeekday = input; - } - }); + if (weekday != null) { + week.d = weekday + } else { + getParsingFlags(config).invalidWeekday = input + } + }) - addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { - week[token] = toInt(input); - }); + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input) + }) // HELPERS - function parseWeekday(input, locale) { - if (typeof input !== 'string') { - return input; - } + function parseWeekday (input, locale) { + if (typeof input !== 'string') { + return input + } - if (!isNaN(input)) { - return parseInt(input, 10); - } + if (!isNaN(input)) { + return parseInt(input, 10) + } - input = locale.weekdaysParse(input); - if (typeof input === 'number') { - return input; - } + input = locale.weekdaysParse(input) + if (typeof input === 'number') { + return input + } - return null; - } + return null + } // LOCALES - var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); - function localeWeekdays (m, format) { - return isArray(this._weekdays) ? this._weekdays[m.day()] : - this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; - } + var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_') + function localeWeekdays (m, format) { + return isArray(this._weekdays) ? this._weekdays[m.day()] + : this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()] + } - var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); - function localeWeekdaysShort (m) { - return this._weekdaysShort[m.day()]; - } + var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_') + function localeWeekdaysShort (m) { + return this._weekdaysShort[m.day()] + } - var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); - function localeWeekdaysMin (m) { - return this._weekdaysMin[m.day()]; - } + var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_') + function localeWeekdaysMin (m) { + return this._weekdaysMin[m.day()] + } - function day_of_week__handleStrictParse(weekdayName, format, strict) { - var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); - if (!this._weekdaysParse) { - this._weekdaysParse = []; - this._shortWeekdaysParse = []; - this._minWeekdaysParse = []; + function day_of_week__handleStrictParse (weekdayName, format, strict) { + var i, ii, mom, llc = weekdayName.toLocaleLowerCase() + if (!this._weekdaysParse) { + this._weekdaysParse = [] + this._shortWeekdaysParse = [] + this._minWeekdaysParse = [] for (i = 0; i < 7; ++i) { - mom = create_utc__createUTC([2000, 1]).day(i); - this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); - this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); - this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + mom = create_utc__createUTC([2000, 1]).day(i) + this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase() + this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase() + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase() } - } + } - if (strict) { + if (strict) { if (format === 'dddd') { - ii = indexOf.call(this._weekdaysParse, llc); - return ii !== -1 ? ii : null; + ii = indexOf.call(this._weekdaysParse, llc) + return ii !== -1 ? ii : null } else if (format === 'ddd') { - ii = indexOf.call(this._shortWeekdaysParse, llc); - return ii !== -1 ? ii : null; + ii = indexOf.call(this._shortWeekdaysParse, llc) + return ii !== -1 ? ii : null } else { - ii = indexOf.call(this._minWeekdaysParse, llc); - return ii !== -1 ? ii : null; + ii = indexOf.call(this._minWeekdaysParse, llc) + return ii !== -1 ? ii : null } - } else { + } else { if (format === 'dddd') { - ii = indexOf.call(this._weekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._shortWeekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._minWeekdaysParse, llc); - return ii !== -1 ? ii : null; + ii = indexOf.call(this._weekdaysParse, llc) + if (ii !== -1) { + return ii + } + ii = indexOf.call(this._shortWeekdaysParse, llc) + if (ii !== -1) { + return ii + } + ii = indexOf.call(this._minWeekdaysParse, llc) + return ii !== -1 ? ii : null } else if (format === 'ddd') { - ii = indexOf.call(this._shortWeekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._weekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._minWeekdaysParse, llc); - return ii !== -1 ? ii : null; + ii = indexOf.call(this._shortWeekdaysParse, llc) + if (ii !== -1) { + return ii + } + ii = indexOf.call(this._weekdaysParse, llc) + if (ii !== -1) { + return ii + } + ii = indexOf.call(this._minWeekdaysParse, llc) + return ii !== -1 ? ii : null } else { - ii = indexOf.call(this._minWeekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._weekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._shortWeekdaysParse, llc); - return ii !== -1 ? ii : null; + ii = indexOf.call(this._minWeekdaysParse, llc) + if (ii !== -1) { + return ii + } + ii = indexOf.call(this._weekdaysParse, llc) + if (ii !== -1) { + return ii + } + ii = indexOf.call(this._shortWeekdaysParse, llc) + return ii !== -1 ? ii : null } + } } - } - function localeWeekdaysParse (weekdayName, format, strict) { - var i, mom, regex; + function localeWeekdaysParse (weekdayName, format, strict) { + var i, mom, regex - if (this._weekdaysParseExact) { - return day_of_week__handleStrictParse.call(this, weekdayName, format, strict); - } + if (this._weekdaysParseExact) { + return day_of_week__handleStrictParse.call(this, weekdayName, format, strict) + } - if (!this._weekdaysParse) { - this._weekdaysParse = []; - this._minWeekdaysParse = []; - this._shortWeekdaysParse = []; - this._fullWeekdaysParse = []; - } + if (!this._weekdaysParse) { + this._weekdaysParse = [] + this._minWeekdaysParse = [] + this._shortWeekdaysParse = [] + this._fullWeekdaysParse = [] + } - for (i = 0; i < 7; i++) { + for (i = 0; i < 7; i++) { // make the regex if we don't have it already - mom = create_utc__createUTC([2000, 1]).day(i); + mom = create_utc__createUTC([2000, 1]).day(i) if (strict && !this._fullWeekdaysParse[i]) { - this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); - this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); - this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); + this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i') + this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i') + this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i') } if (!this._weekdaysParse[i]) { - regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); - this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '') + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i') } // test the regex if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { - return i; + return i } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { - return i; + return i } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { - return i; + return i } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { - return i; + return i } + } } - } // MOMENTS - function getSetDayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); - if (input != null) { - input = parseWeekday(input, this.localeData()); - return this.add(input - day, 'd'); - } else { - return day; + function getSetDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay() + if (input != null) { + input = parseWeekday(input, this.localeData()) + return this.add(input - day, 'd') + } else { + return day + } } - } - function getSetLocaleDayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; + function getSetLocaleDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7 + return input == null ? weekday : this.add(input - weekday, 'd') } - var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; - return input == null ? weekday : this.add(input - weekday, 'd'); - } - function getSetISODayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } + function getSetISODayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN + } // behaves the same as moment#day except // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) // as a setter, sunday should belong to the previous week. - return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); - } + return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7) + } - var defaultWeekdaysRegex = matchWord; - function weekdaysRegex (isStrict) { - if (this._weekdaysParseExact) { + var defaultWeekdaysRegex = matchWord + function weekdaysRegex (isStrict) { + if (this._weekdaysParseExact) { if (!hasOwnProp(this, '_weekdaysRegex')) { - computeWeekdaysParse.call(this); + computeWeekdaysParse.call(this) } if (isStrict) { - return this._weekdaysStrictRegex; + return this._weekdaysStrictRegex } else { - return this._weekdaysRegex; + return this._weekdaysRegex } - } else { - return this._weekdaysStrictRegex && isStrict ? - this._weekdaysStrictRegex : this._weekdaysRegex; + } else { + return this._weekdaysStrictRegex && isStrict + ? this._weekdaysStrictRegex : this._weekdaysRegex + } } - } - var defaultWeekdaysShortRegex = matchWord; - function weekdaysShortRegex (isStrict) { - if (this._weekdaysParseExact) { + var defaultWeekdaysShortRegex = matchWord + function weekdaysShortRegex (isStrict) { + if (this._weekdaysParseExact) { if (!hasOwnProp(this, '_weekdaysRegex')) { - computeWeekdaysParse.call(this); + computeWeekdaysParse.call(this) } if (isStrict) { - return this._weekdaysShortStrictRegex; + return this._weekdaysShortStrictRegex } else { - return this._weekdaysShortRegex; + return this._weekdaysShortRegex } - } else { - return this._weekdaysShortStrictRegex && isStrict ? - this._weekdaysShortStrictRegex : this._weekdaysShortRegex; + } else { + return this._weekdaysShortStrictRegex && isStrict + ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex + } } - } - var defaultWeekdaysMinRegex = matchWord; - function weekdaysMinRegex (isStrict) { - if (this._weekdaysParseExact) { + var defaultWeekdaysMinRegex = matchWord + function weekdaysMinRegex (isStrict) { + if (this._weekdaysParseExact) { if (!hasOwnProp(this, '_weekdaysRegex')) { - computeWeekdaysParse.call(this); + computeWeekdaysParse.call(this) } if (isStrict) { - return this._weekdaysMinStrictRegex; + return this._weekdaysMinStrictRegex } else { - return this._weekdaysMinRegex; + return this._weekdaysMinRegex } - } else { - return this._weekdaysMinStrictRegex && isStrict ? - this._weekdaysMinStrictRegex : this._weekdaysMinRegex; + } else { + return this._weekdaysMinStrictRegex && isStrict + ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex + } } - } - - function computeWeekdaysParse () { - function cmpLenRev(a, b) { - return b.length - a.length; - } + function computeWeekdaysParse () { + function cmpLenRev (a, b) { + return b.length - a.length + } - var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], - i, mom, minp, shortp, longp; - for (i = 0; i < 7; i++) { + var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], + i, mom, minp, shortp, longp + for (i = 0; i < 7; i++) { // make the regex if we don't have it already - mom = create_utc__createUTC([2000, 1]).day(i); - minp = this.weekdaysMin(mom, ''); - shortp = this.weekdaysShort(mom, ''); - longp = this.weekdays(mom, ''); - minPieces.push(minp); - shortPieces.push(shortp); - longPieces.push(longp); - mixedPieces.push(minp); - mixedPieces.push(shortp); - mixedPieces.push(longp); - } + mom = create_utc__createUTC([2000, 1]).day(i) + minp = this.weekdaysMin(mom, '') + shortp = this.weekdaysShort(mom, '') + longp = this.weekdays(mom, '') + minPieces.push(minp) + shortPieces.push(shortp) + longPieces.push(longp) + mixedPieces.push(minp) + mixedPieces.push(shortp) + mixedPieces.push(longp) + } // Sorting makes sure if one weekday (or abbr) is a prefix of another it // will match the longer piece. - minPieces.sort(cmpLenRev); - shortPieces.sort(cmpLenRev); - longPieces.sort(cmpLenRev); - mixedPieces.sort(cmpLenRev); - for (i = 0; i < 7; i++) { - shortPieces[i] = regexEscape(shortPieces[i]); - longPieces[i] = regexEscape(longPieces[i]); - mixedPieces[i] = regexEscape(mixedPieces[i]); - } - - this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); - this._weekdaysShortRegex = this._weekdaysRegex; - this._weekdaysMinRegex = this._weekdaysRegex; - - this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); - this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); - this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); - } + minPieces.sort(cmpLenRev) + shortPieces.sort(cmpLenRev) + longPieces.sort(cmpLenRev) + mixedPieces.sort(cmpLenRev) + for (i = 0; i < 7; i++) { + shortPieces[i] = regexEscape(shortPieces[i]) + longPieces[i] = regexEscape(longPieces[i]) + mixedPieces[i] = regexEscape(mixedPieces[i]) + } + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i') + this._weekdaysShortRegex = this._weekdaysRegex + this._weekdaysMinRegex = this._weekdaysRegex + + this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i') + this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i') + this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i') + } // FORMATTING - addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear') // ALIASES - addUnitAlias('dayOfYear', 'DDD'); + addUnitAlias('dayOfYear', 'DDD') // PARSING - addRegexToken('DDD', match1to3); - addRegexToken('DDDD', match3); - addParseToken(['DDD', 'DDDD'], function (input, array, config) { - config._dayOfYear = toInt(input); - }); + addRegexToken('DDD', match1to3) + addRegexToken('DDDD', match3) + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input) + }) // HELPERS // MOMENTS - function getSetDayOfYear (input) { - var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; - return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); - } + function getSetDayOfYear (input) { + var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1 + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd') + } // FORMATTING - function hFormat() { - return this.hours() % 12 || 12; - } + function hFormat () { + return this.hours() % 12 || 12 + } - function kFormat() { - return this.hours() || 24; - } + function kFormat () { + return this.hours() || 24 + } - addFormatToken('H', ['HH', 2], 0, 'hour'); - addFormatToken('h', ['hh', 2], 0, hFormat); - addFormatToken('k', ['kk', 2], 0, kFormat); + addFormatToken('H', ['HH', 2], 0, 'hour') + addFormatToken('h', ['hh', 2], 0, hFormat) + addFormatToken('k', ['kk', 2], 0, kFormat) - addFormatToken('hmm', 0, 0, function () { - return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); - }); + addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + }) - addFormatToken('hmmss', 0, 0, function () { - return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + - zeroFill(this.seconds(), 2); - }); + addFormatToken('hmmss', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + }) - addFormatToken('Hmm', 0, 0, function () { - return '' + this.hours() + zeroFill(this.minutes(), 2); - }); + addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2) + }) - addFormatToken('Hmmss', 0, 0, function () { - return '' + this.hours() + zeroFill(this.minutes(), 2) + - zeroFill(this.seconds(), 2); - }); + addFormatToken('Hmmss', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + }) - function meridiem (token, lowercase) { - addFormatToken(token, 0, 0, function () { - return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); - }); - } + function meridiem (token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem(this.hours(), this.minutes(), lowercase) + }) + } - meridiem('a', true); - meridiem('A', false); + meridiem('a', true) + meridiem('A', false) // ALIASES - addUnitAlias('hour', 'h'); + addUnitAlias('hour', 'h') // PARSING - function matchMeridiem (isStrict, locale) { - return locale._meridiemParse; - } + function matchMeridiem (isStrict, locale) { + return locale._meridiemParse + } + + addRegexToken('a', matchMeridiem) + addRegexToken('A', matchMeridiem) + addRegexToken('H', match1to2) + addRegexToken('h', match1to2) + addRegexToken('HH', match1to2, match2) + addRegexToken('hh', match1to2, match2) - addRegexToken('a', matchMeridiem); - addRegexToken('A', matchMeridiem); - addRegexToken('H', match1to2); - addRegexToken('h', match1to2); - addRegexToken('HH', match1to2, match2); - addRegexToken('hh', match1to2, match2); - - addRegexToken('hmm', match3to4); - addRegexToken('hmmss', match5to6); - addRegexToken('Hmm', match3to4); - addRegexToken('Hmmss', match5to6); - - addParseToken(['H', 'HH'], HOUR); - addParseToken(['a', 'A'], function (input, array, config) { - config._isPm = config._locale.isPM(input); - config._meridiem = input; - }); - addParseToken(['h', 'hh'], function (input, array, config) { - array[HOUR] = toInt(input); - getParsingFlags(config).bigHour = true; - }); - addParseToken('hmm', function (input, array, config) { - var pos = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos)); - array[MINUTE] = toInt(input.substr(pos)); - getParsingFlags(config).bigHour = true; - }); - addParseToken('hmmss', function (input, array, config) { - var pos1 = input.length - 4; - var pos2 = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos1)); - array[MINUTE] = toInt(input.substr(pos1, 2)); - array[SECOND] = toInt(input.substr(pos2)); - getParsingFlags(config).bigHour = true; - }); - addParseToken('Hmm', function (input, array, config) { - var pos = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos)); - array[MINUTE] = toInt(input.substr(pos)); - }); - addParseToken('Hmmss', function (input, array, config) { - var pos1 = input.length - 4; - var pos2 = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos1)); - array[MINUTE] = toInt(input.substr(pos1, 2)); - array[SECOND] = toInt(input.substr(pos2)); - }); + addRegexToken('hmm', match3to4) + addRegexToken('hmmss', match5to6) + addRegexToken('Hmm', match3to4) + addRegexToken('Hmmss', match5to6) + + addParseToken(['H', 'HH'], HOUR) + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input) + config._meridiem = input + }) + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input) + getParsingFlags(config).bigHour = true + }) + addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2 + array[HOUR] = toInt(input.substr(0, pos)) + array[MINUTE] = toInt(input.substr(pos)) + getParsingFlags(config).bigHour = true + }) + addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4 + var pos2 = input.length - 2 + array[HOUR] = toInt(input.substr(0, pos1)) + array[MINUTE] = toInt(input.substr(pos1, 2)) + array[SECOND] = toInt(input.substr(pos2)) + getParsingFlags(config).bigHour = true + }) + addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2 + array[HOUR] = toInt(input.substr(0, pos)) + array[MINUTE] = toInt(input.substr(pos)) + }) + addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4 + var pos2 = input.length - 2 + array[HOUR] = toInt(input.substr(0, pos1)) + array[MINUTE] = toInt(input.substr(pos1, 2)) + array[SECOND] = toInt(input.substr(pos2)) + }) // LOCALES - function localeIsPM (input) { + function localeIsPM (input) { // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays // Using charAt should be more compatible. - return ((input + '').toLowerCase().charAt(0) === 'p'); - } - - var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; - function localeMeridiem (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; + return ((input + '').toLowerCase().charAt(0) === 'p') } - } + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i + function localeMeridiem (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM' + } else { + return isLower ? 'am' : 'AM' + } + } // MOMENTS @@ -47390,393 +47555,392 @@ process.chdir = function (dir) { // specified which hour he wants. So trying to maintain the same hour (in // a new timezone) makes sense. Adding/subtracting hours does not follow // this rule. - var getSetHour = makeGetSet('Hours', true); + var getSetHour = makeGetSet('Hours', true) // FORMATTING - addFormatToken('m', ['mm', 2], 0, 'minute'); + addFormatToken('m', ['mm', 2], 0, 'minute') // ALIASES - addUnitAlias('minute', 'm'); + addUnitAlias('minute', 'm') // PARSING - addRegexToken('m', match1to2); - addRegexToken('mm', match1to2, match2); - addParseToken(['m', 'mm'], MINUTE); + addRegexToken('m', match1to2) + addRegexToken('mm', match1to2, match2) + addParseToken(['m', 'mm'], MINUTE) // MOMENTS - var getSetMinute = makeGetSet('Minutes', false); + var getSetMinute = makeGetSet('Minutes', false) // FORMATTING - addFormatToken('s', ['ss', 2], 0, 'second'); + addFormatToken('s', ['ss', 2], 0, 'second') // ALIASES - addUnitAlias('second', 's'); + addUnitAlias('second', 's') // PARSING - addRegexToken('s', match1to2); - addRegexToken('ss', match1to2, match2); - addParseToken(['s', 'ss'], SECOND); + addRegexToken('s', match1to2) + addRegexToken('ss', match1to2, match2) + addParseToken(['s', 'ss'], SECOND) // MOMENTS - var getSetSecond = makeGetSet('Seconds', false); + var getSetSecond = makeGetSet('Seconds', false) // FORMATTING - addFormatToken('S', 0, 0, function () { - return ~~(this.millisecond() / 100); - }); - - addFormatToken(0, ['SS', 2], 0, function () { - return ~~(this.millisecond() / 10); - }); - - addFormatToken(0, ['SSS', 3], 0, 'millisecond'); - addFormatToken(0, ['SSSS', 4], 0, function () { - return this.millisecond() * 10; - }); - addFormatToken(0, ['SSSSS', 5], 0, function () { - return this.millisecond() * 100; - }); - addFormatToken(0, ['SSSSSS', 6], 0, function () { - return this.millisecond() * 1000; - }); - addFormatToken(0, ['SSSSSSS', 7], 0, function () { - return this.millisecond() * 10000; - }); - addFormatToken(0, ['SSSSSSSS', 8], 0, function () { - return this.millisecond() * 100000; - }); - addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { - return this.millisecond() * 1000000; - }); + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100) + }) + + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10) + }) + addFormatToken(0, ['SSS', 3], 0, 'millisecond') + addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10 + }) + addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100 + }) + addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000 + }) + addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000 + }) + addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000 + }) + addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000 + }) // ALIASES - addUnitAlias('millisecond', 'ms'); + addUnitAlias('millisecond', 'ms') // PARSING - addRegexToken('S', match1to3, match1); - addRegexToken('SS', match1to3, match2); - addRegexToken('SSS', match1to3, match3); + addRegexToken('S', match1to3, match1) + addRegexToken('SS', match1to3, match2) + addRegexToken('SSS', match1to3, match3) - var token; - for (token = 'SSSS'; token.length <= 9; token += 'S') { - addRegexToken(token, matchUnsigned); - } + var token + for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned) + } - function parseMs(input, array) { - array[MILLISECOND] = toInt(('0.' + input) * 1000); - } + function parseMs (input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000) + } - for (token = 'S'; token.length <= 9; token += 'S') { - addParseToken(token, parseMs); - } + for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs) + } // MOMENTS - var getSetMillisecond = makeGetSet('Milliseconds', false); + var getSetMillisecond = makeGetSet('Milliseconds', false) // FORMATTING - addFormatToken('z', 0, 0, 'zoneAbbr'); - addFormatToken('zz', 0, 0, 'zoneName'); + addFormatToken('z', 0, 0, 'zoneAbbr') + addFormatToken('zz', 0, 0, 'zoneName') // MOMENTS - function getZoneAbbr () { - return this._isUTC ? 'UTC' : ''; - } - - function getZoneName () { - return this._isUTC ? 'Coordinated Universal Time' : ''; - } - - var momentPrototype__proto = Moment.prototype; - - momentPrototype__proto.add = add_subtract__add; - momentPrototype__proto.calendar = moment_calendar__calendar; - momentPrototype__proto.clone = clone; - momentPrototype__proto.diff = diff; - momentPrototype__proto.endOf = endOf; - momentPrototype__proto.format = format; - momentPrototype__proto.from = from; - momentPrototype__proto.fromNow = fromNow; - momentPrototype__proto.to = to; - momentPrototype__proto.toNow = toNow; - momentPrototype__proto.get = getSet; - momentPrototype__proto.invalidAt = invalidAt; - momentPrototype__proto.isAfter = isAfter; - momentPrototype__proto.isBefore = isBefore; - momentPrototype__proto.isBetween = isBetween; - momentPrototype__proto.isSame = isSame; - momentPrototype__proto.isSameOrAfter = isSameOrAfter; - momentPrototype__proto.isSameOrBefore = isSameOrBefore; - momentPrototype__proto.isValid = moment_valid__isValid; - momentPrototype__proto.lang = lang; - momentPrototype__proto.locale = locale; - momentPrototype__proto.localeData = localeData; - momentPrototype__proto.max = prototypeMax; - momentPrototype__proto.min = prototypeMin; - momentPrototype__proto.parsingFlags = parsingFlags; - momentPrototype__proto.set = getSet; - momentPrototype__proto.startOf = startOf; - momentPrototype__proto.subtract = add_subtract__subtract; - momentPrototype__proto.toArray = toArray; - momentPrototype__proto.toObject = toObject; - momentPrototype__proto.toDate = toDate; - momentPrototype__proto.toISOString = moment_format__toISOString; - momentPrototype__proto.toJSON = toJSON; - momentPrototype__proto.toString = toString; - momentPrototype__proto.unix = unix; - momentPrototype__proto.valueOf = to_type__valueOf; - momentPrototype__proto.creationData = creationData; + function getZoneAbbr () { + return this._isUTC ? 'UTC' : '' + } + + function getZoneName () { + return this._isUTC ? 'Coordinated Universal Time' : '' + } + + var momentPrototype__proto = Moment.prototype + + momentPrototype__proto.add = add_subtract__add + momentPrototype__proto.calendar = moment_calendar__calendar + momentPrototype__proto.clone = clone + momentPrototype__proto.diff = diff + momentPrototype__proto.endOf = endOf + momentPrototype__proto.format = format + momentPrototype__proto.from = from + momentPrototype__proto.fromNow = fromNow + momentPrototype__proto.to = to + momentPrototype__proto.toNow = toNow + momentPrototype__proto.get = getSet + momentPrototype__proto.invalidAt = invalidAt + momentPrototype__proto.isAfter = isAfter + momentPrototype__proto.isBefore = isBefore + momentPrototype__proto.isBetween = isBetween + momentPrototype__proto.isSame = isSame + momentPrototype__proto.isSameOrAfter = isSameOrAfter + momentPrototype__proto.isSameOrBefore = isSameOrBefore + momentPrototype__proto.isValid = moment_valid__isValid + momentPrototype__proto.lang = lang + momentPrototype__proto.locale = locale + momentPrototype__proto.localeData = localeData + momentPrototype__proto.max = prototypeMax + momentPrototype__proto.min = prototypeMin + momentPrototype__proto.parsingFlags = parsingFlags + momentPrototype__proto.set = getSet + momentPrototype__proto.startOf = startOf + momentPrototype__proto.subtract = add_subtract__subtract + momentPrototype__proto.toArray = toArray + momentPrototype__proto.toObject = toObject + momentPrototype__proto.toDate = toDate + momentPrototype__proto.toISOString = moment_format__toISOString + momentPrototype__proto.toJSON = toJSON + momentPrototype__proto.toString = toString + momentPrototype__proto.unix = unix + momentPrototype__proto.valueOf = to_type__valueOf + momentPrototype__proto.creationData = creationData // Year - momentPrototype__proto.year = getSetYear; - momentPrototype__proto.isLeapYear = getIsLeapYear; + momentPrototype__proto.year = getSetYear + momentPrototype__proto.isLeapYear = getIsLeapYear // Week Year - momentPrototype__proto.weekYear = getSetWeekYear; - momentPrototype__proto.isoWeekYear = getSetISOWeekYear; + momentPrototype__proto.weekYear = getSetWeekYear + momentPrototype__proto.isoWeekYear = getSetISOWeekYear // Quarter - momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; + momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter // Month - momentPrototype__proto.month = getSetMonth; - momentPrototype__proto.daysInMonth = getDaysInMonth; + momentPrototype__proto.month = getSetMonth + momentPrototype__proto.daysInMonth = getDaysInMonth // Week - momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; - momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; - momentPrototype__proto.weeksInYear = getWeeksInYear; - momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; + momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek + momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek + momentPrototype__proto.weeksInYear = getWeeksInYear + momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear // Day - momentPrototype__proto.date = getSetDayOfMonth; - momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; - momentPrototype__proto.weekday = getSetLocaleDayOfWeek; - momentPrototype__proto.isoWeekday = getSetISODayOfWeek; - momentPrototype__proto.dayOfYear = getSetDayOfYear; + momentPrototype__proto.date = getSetDayOfMonth + momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek + momentPrototype__proto.weekday = getSetLocaleDayOfWeek + momentPrototype__proto.isoWeekday = getSetISODayOfWeek + momentPrototype__proto.dayOfYear = getSetDayOfYear // Hour - momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; + momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour // Minute - momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; + momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute // Second - momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; + momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond // Millisecond - momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; + momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond // Offset - momentPrototype__proto.utcOffset = getSetOffset; - momentPrototype__proto.utc = setOffsetToUTC; - momentPrototype__proto.local = setOffsetToLocal; - momentPrototype__proto.parseZone = setOffsetToParsedOffset; - momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; - momentPrototype__proto.isDST = isDaylightSavingTime; - momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted; - momentPrototype__proto.isLocal = isLocal; - momentPrototype__proto.isUtcOffset = isUtcOffset; - momentPrototype__proto.isUtc = isUtc; - momentPrototype__proto.isUTC = isUtc; + momentPrototype__proto.utcOffset = getSetOffset + momentPrototype__proto.utc = setOffsetToUTC + momentPrototype__proto.local = setOffsetToLocal + momentPrototype__proto.parseZone = setOffsetToParsedOffset + momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset + momentPrototype__proto.isDST = isDaylightSavingTime + momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted + momentPrototype__proto.isLocal = isLocal + momentPrototype__proto.isUtcOffset = isUtcOffset + momentPrototype__proto.isUtc = isUtc + momentPrototype__proto.isUTC = isUtc // Timezone - momentPrototype__proto.zoneAbbr = getZoneAbbr; - momentPrototype__proto.zoneName = getZoneName; + momentPrototype__proto.zoneAbbr = getZoneAbbr + momentPrototype__proto.zoneName = getZoneName // Deprecations - momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); - momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); - momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); - momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone); + momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth) + momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth) + momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear) + momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone) - var momentPrototype = momentPrototype__proto; + var momentPrototype = momentPrototype__proto - function moment__createUnix (input) { - return local__createLocal(input * 1000); - } + function moment__createUnix (input) { + return local__createLocal(input * 1000) + } - function moment__createInZone () { - return local__createLocal.apply(null, arguments).parseZone(); - } + function moment__createInZone () { + return local__createLocal.apply(null, arguments).parseZone() + } - var defaultCalendar = { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }; - - function locale_calendar__calendar (key, mom, now) { - var output = this._calendar[key]; - return isFunction(output) ? output.call(mom, now) : output; - } + var defaultCalendar = { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L' + } + + function locale_calendar__calendar (key, mom, now) { + var output = this._calendar[key] + return isFunction(output) ? output.call(mom, now) : output + } + + var defaultLongDateFormat = { + LTS: 'h:mm:ss A', + LT: 'h:mm A', + L: 'MM/DD/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A' + } + + function longDateFormat (key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()] - var defaultLongDateFormat = { - LTS : 'h:mm:ss A', - LT : 'h:mm A', - L : 'MM/DD/YYYY', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY h:mm A', - LLLL : 'dddd, MMMM D, YYYY h:mm A' - }; + if (format || !formatUpper) { + return format + } - function longDateFormat (key) { - var format = this._longDateFormat[key], - formatUpper = this._longDateFormat[key.toUpperCase()]; + this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1) + }) - if (format || !formatUpper) { - return format; + return this._longDateFormat[key] } - this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); + var defaultInvalidDate = 'Invalid date' - return this._longDateFormat[key]; - } + function invalidDate () { + return this._invalidDate + } - var defaultInvalidDate = 'Invalid date'; + var defaultOrdinal = '%d' + var defaultOrdinalParse = /\d{1,2}/ - function invalidDate () { - return this._invalidDate; - } + function ordinal (number) { + return this._ordinal.replace('%d', number) + } - var defaultOrdinal = '%d'; - var defaultOrdinalParse = /\d{1,2}/; + function preParsePostFormat (string) { + return string + } - function ordinal (number) { - return this._ordinal.replace('%d', number); - } + var defaultRelativeTime = { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + } - function preParsePostFormat (string) { - return string; - } + function relative__relativeTime (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string] + return (isFunction(output)) + ? output(number, withoutSuffix, string, isFuture) + : output.replace(/%d/i, number) + } - var defaultRelativeTime = { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }; - - function relative__relativeTime (number, withoutSuffix, string, isFuture) { - var output = this._relativeTime[string]; - return (isFunction(output)) ? - output(number, withoutSuffix, string, isFuture) : - output.replace(/%d/i, number); - } + function pastFuture (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past'] + return isFunction(format) ? format(output) : format.replace(/%s/i, output) + } - function pastFuture (diff, output) { - var format = this._relativeTime[diff > 0 ? 'future' : 'past']; - return isFunction(format) ? format(output) : format.replace(/%s/i, output); - } + var prototype__proto = Locale.prototype - var prototype__proto = Locale.prototype; - - prototype__proto._calendar = defaultCalendar; - prototype__proto.calendar = locale_calendar__calendar; - prototype__proto._longDateFormat = defaultLongDateFormat; - prototype__proto.longDateFormat = longDateFormat; - prototype__proto._invalidDate = defaultInvalidDate; - prototype__proto.invalidDate = invalidDate; - prototype__proto._ordinal = defaultOrdinal; - prototype__proto.ordinal = ordinal; - prototype__proto._ordinalParse = defaultOrdinalParse; - prototype__proto.preparse = preParsePostFormat; - prototype__proto.postformat = preParsePostFormat; - prototype__proto._relativeTime = defaultRelativeTime; - prototype__proto.relativeTime = relative__relativeTime; - prototype__proto.pastFuture = pastFuture; - prototype__proto.set = locale_set__set; + prototype__proto._calendar = defaultCalendar + prototype__proto.calendar = locale_calendar__calendar + prototype__proto._longDateFormat = defaultLongDateFormat + prototype__proto.longDateFormat = longDateFormat + prototype__proto._invalidDate = defaultInvalidDate + prototype__proto.invalidDate = invalidDate + prototype__proto._ordinal = defaultOrdinal + prototype__proto.ordinal = ordinal + prototype__proto._ordinalParse = defaultOrdinalParse + prototype__proto.preparse = preParsePostFormat + prototype__proto.postformat = preParsePostFormat + prototype__proto._relativeTime = defaultRelativeTime + prototype__proto.relativeTime = relative__relativeTime + prototype__proto.pastFuture = pastFuture + prototype__proto.set = locale_set__set // Month - prototype__proto.months = localeMonths; - prototype__proto._months = defaultLocaleMonths; - prototype__proto.monthsShort = localeMonthsShort; - prototype__proto._monthsShort = defaultLocaleMonthsShort; - prototype__proto.monthsParse = localeMonthsParse; - prototype__proto._monthsRegex = defaultMonthsRegex; - prototype__proto.monthsRegex = monthsRegex; - prototype__proto._monthsShortRegex = defaultMonthsShortRegex; - prototype__proto.monthsShortRegex = monthsShortRegex; + prototype__proto.months = localeMonths + prototype__proto._months = defaultLocaleMonths + prototype__proto.monthsShort = localeMonthsShort + prototype__proto._monthsShort = defaultLocaleMonthsShort + prototype__proto.monthsParse = localeMonthsParse + prototype__proto._monthsRegex = defaultMonthsRegex + prototype__proto.monthsRegex = monthsRegex + prototype__proto._monthsShortRegex = defaultMonthsShortRegex + prototype__proto.monthsShortRegex = monthsShortRegex // Week - prototype__proto.week = localeWeek; - prototype__proto._week = defaultLocaleWeek; - prototype__proto.firstDayOfYear = localeFirstDayOfYear; - prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; + prototype__proto.week = localeWeek + prototype__proto._week = defaultLocaleWeek + prototype__proto.firstDayOfYear = localeFirstDayOfYear + prototype__proto.firstDayOfWeek = localeFirstDayOfWeek // Day of Week - prototype__proto.weekdays = localeWeekdays; - prototype__proto._weekdays = defaultLocaleWeekdays; - prototype__proto.weekdaysMin = localeWeekdaysMin; - prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin; - prototype__proto.weekdaysShort = localeWeekdaysShort; - prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort; - prototype__proto.weekdaysParse = localeWeekdaysParse; - - prototype__proto._weekdaysRegex = defaultWeekdaysRegex; - prototype__proto.weekdaysRegex = weekdaysRegex; - prototype__proto._weekdaysShortRegex = defaultWeekdaysShortRegex; - prototype__proto.weekdaysShortRegex = weekdaysShortRegex; - prototype__proto._weekdaysMinRegex = defaultWeekdaysMinRegex; - prototype__proto.weekdaysMinRegex = weekdaysMinRegex; + prototype__proto.weekdays = localeWeekdays + prototype__proto._weekdays = defaultLocaleWeekdays + prototype__proto.weekdaysMin = localeWeekdaysMin + prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin + prototype__proto.weekdaysShort = localeWeekdaysShort + prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort + prototype__proto.weekdaysParse = localeWeekdaysParse + + prototype__proto._weekdaysRegex = defaultWeekdaysRegex + prototype__proto.weekdaysRegex = weekdaysRegex + prototype__proto._weekdaysShortRegex = defaultWeekdaysShortRegex + prototype__proto.weekdaysShortRegex = weekdaysShortRegex + prototype__proto._weekdaysMinRegex = defaultWeekdaysMinRegex + prototype__proto.weekdaysMinRegex = weekdaysMinRegex // Hours - prototype__proto.isPM = localeIsPM; - prototype__proto._meridiemParse = defaultLocaleMeridiemParse; - prototype__proto.meridiem = localeMeridiem; - - function lists__get (format, index, field, setter) { - var locale = locale_locales__getLocale(); - var utc = create_utc__createUTC().set(setter, index); - return locale[field](utc, format); - } + prototype__proto.isPM = localeIsPM + prototype__proto._meridiemParse = defaultLocaleMeridiemParse + prototype__proto.meridiem = localeMeridiem - function listMonthsImpl (format, index, field) { - if (typeof format === 'number') { - index = format; - format = undefined; + function lists__get (format, index, field, setter) { + var locale = locale_locales__getLocale() + var utc = create_utc__createUTC().set(setter, index) + return locale[field](utc, format) } - format = format || ''; + function listMonthsImpl (format, index, field) { + if (typeof format === 'number') { + index = format + format = undefined + } + + format = format || '' - if (index != null) { - return lists__get(format, index, field, 'month'); - } + if (index != null) { + return lists__get(format, index, field, 'month') + } - var i; - var out = []; - for (i = 0; i < 12; i++) { - out[i] = lists__get(format, i, field, 'month'); + var i + var out = [] + for (i = 0; i < 12; i++) { + out[i] = lists__get(format, i, field, 'month') + } + return out } - return out; - } // () // (5) @@ -47786,324 +47950,324 @@ process.chdir = function (dir) { // (true, 5) // (true, fmt, 5) // (true, fmt) - function listWeekdaysImpl (localeSorted, format, index, field) { - if (typeof localeSorted === 'boolean') { + function listWeekdaysImpl (localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { if (typeof format === 'number') { - index = format; - format = undefined; + index = format + format = undefined } - format = format || ''; - } else { - format = localeSorted; - index = format; - localeSorted = false; + format = format || '' + } else { + format = localeSorted + index = format + localeSorted = false if (typeof format === 'number') { - index = format; - format = undefined; + index = format + format = undefined } - format = format || ''; - } + format = format || '' + } - var locale = locale_locales__getLocale(), - shift = localeSorted ? locale._week.dow : 0; + var locale = locale_locales__getLocale(), + shift = localeSorted ? locale._week.dow : 0 - if (index != null) { - return lists__get(format, (index + shift) % 7, field, 'day'); - } + if (index != null) { + return lists__get(format, (index + shift) % 7, field, 'day') + } - var i; - var out = []; - for (i = 0; i < 7; i++) { - out[i] = lists__get(format, (i + shift) % 7, field, 'day'); + var i + var out = [] + for (i = 0; i < 7; i++) { + out[i] = lists__get(format, (i + shift) % 7, field, 'day') + } + return out } - return out; - } - function lists__listMonths (format, index) { - return listMonthsImpl(format, index, 'months'); - } + function lists__listMonths (format, index) { + return listMonthsImpl(format, index, 'months') + } - function lists__listMonthsShort (format, index) { - return listMonthsImpl(format, index, 'monthsShort'); - } + function lists__listMonthsShort (format, index) { + return listMonthsImpl(format, index, 'monthsShort') + } - function lists__listWeekdays (localeSorted, format, index) { - return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); - } + function lists__listWeekdays (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays') + } - function lists__listWeekdaysShort (localeSorted, format, index) { - return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); - } + function lists__listWeekdaysShort (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort') + } - function lists__listWeekdaysMin (localeSorted, format, index) { - return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); - } + function lists__listWeekdaysMin (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin') + } - locale_locales__getSetGlobalLocale('en', { - ordinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { + locale_locales__getSetGlobalLocale('en', { + ordinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { var b = number % 10, - output = (toInt(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); + output = (toInt(number % 100 / 10) === 1) ? 'th' + : (b === 1) ? 'st' + : (b === 2) ? 'nd' + : (b === 3) ? 'rd' : 'th' + return number + output + } + }) // Side effect imports - utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); - utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); + utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale) + utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale) - var mathAbs = Math.abs; + var mathAbs = Math.abs - function duration_abs__abs () { - var data = this._data; + function duration_abs__abs () { + var data = this._data - this._milliseconds = mathAbs(this._milliseconds); - this._days = mathAbs(this._days); - this._months = mathAbs(this._months); + this._milliseconds = mathAbs(this._milliseconds) + this._days = mathAbs(this._days) + this._months = mathAbs(this._months) - data.milliseconds = mathAbs(data.milliseconds); - data.seconds = mathAbs(data.seconds); - data.minutes = mathAbs(data.minutes); - data.hours = mathAbs(data.hours); - data.months = mathAbs(data.months); - data.years = mathAbs(data.years); + data.milliseconds = mathAbs(data.milliseconds) + data.seconds = mathAbs(data.seconds) + data.minutes = mathAbs(data.minutes) + data.hours = mathAbs(data.hours) + data.months = mathAbs(data.months) + data.years = mathAbs(data.years) - return this; - } + return this + } - function duration_add_subtract__addSubtract (duration, input, value, direction) { - var other = create__createDuration(input, value); + function duration_add_subtract__addSubtract (duration, input, value, direction) { + var other = create__createDuration(input, value) - duration._milliseconds += direction * other._milliseconds; - duration._days += direction * other._days; - duration._months += direction * other._months; + duration._milliseconds += direction * other._milliseconds + duration._days += direction * other._days + duration._months += direction * other._months - return duration._bubble(); - } + return duration._bubble() + } // supports only 2.0-style add(1, 's') or add(duration) - function duration_add_subtract__add (input, value) { - return duration_add_subtract__addSubtract(this, input, value, 1); - } + function duration_add_subtract__add (input, value) { + return duration_add_subtract__addSubtract(this, input, value, 1) + } // supports only 2.0-style subtract(1, 's') or subtract(duration) - function duration_add_subtract__subtract (input, value) { - return duration_add_subtract__addSubtract(this, input, value, -1); - } + function duration_add_subtract__subtract (input, value) { + return duration_add_subtract__addSubtract(this, input, value, -1) + } - function absCeil (number) { - if (number < 0) { - return Math.floor(number); - } else { - return Math.ceil(number); + function absCeil (number) { + if (number < 0) { + return Math.floor(number) + } else { + return Math.ceil(number) + } } - } - function bubble () { - var milliseconds = this._milliseconds; - var days = this._days; - var months = this._months; - var data = this._data; - var seconds, minutes, hours, years, monthsFromDays; + function bubble () { + var milliseconds = this._milliseconds + var days = this._days + var months = this._months + var data = this._data + var seconds, minutes, hours, years, monthsFromDays // if we have a mix of positive and negative values, bubble down first // check: https://github.com/moment/moment/issues/2166 - if (!((milliseconds >= 0 && days >= 0 && months >= 0) || + if (!((milliseconds >= 0 && days >= 0 && months >= 0) || (milliseconds <= 0 && days <= 0 && months <= 0))) { - milliseconds += absCeil(monthsToDays(months) + days) * 864e5; - days = 0; - months = 0; - } + milliseconds += absCeil(monthsToDays(months) + days) * 864e5 + days = 0 + months = 0 + } // The following code bubbles up values, see the tests for // examples of what that means. - data.milliseconds = milliseconds % 1000; + data.milliseconds = milliseconds % 1000 - seconds = absFloor(milliseconds / 1000); - data.seconds = seconds % 60; + seconds = absFloor(milliseconds / 1000) + data.seconds = seconds % 60 - minutes = absFloor(seconds / 60); - data.minutes = minutes % 60; + minutes = absFloor(seconds / 60) + data.minutes = minutes % 60 - hours = absFloor(minutes / 60); - data.hours = hours % 24; + hours = absFloor(minutes / 60) + data.hours = hours % 24 - days += absFloor(hours / 24); + days += absFloor(hours / 24) // convert days to months - monthsFromDays = absFloor(daysToMonths(days)); - months += monthsFromDays; - days -= absCeil(monthsToDays(monthsFromDays)); + monthsFromDays = absFloor(daysToMonths(days)) + months += monthsFromDays + days -= absCeil(monthsToDays(monthsFromDays)) // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; + years = absFloor(months / 12) + months %= 12 - data.days = days; - data.months = months; - data.years = years; + data.days = days + data.months = months + data.years = years - return this; - } + return this + } - function daysToMonths (days) { + function daysToMonths (days) { // 400 years have 146097 days (taking into account leap year rules) // 400 years have 12 months === 4800 - return days * 4800 / 146097; - } + return days * 4800 / 146097 + } - function monthsToDays (months) { + function monthsToDays (months) { // the reverse of daysToMonths - return months * 146097 / 4800; - } + return months * 146097 / 4800 + } - function as (units) { - var days; - var months; - var milliseconds = this._milliseconds; + function as (units) { + var days + var months + var milliseconds = this._milliseconds - units = normalizeUnits(units); + units = normalizeUnits(units) - if (units === 'month' || units === 'year') { - days = this._days + milliseconds / 864e5; - months = this._months + daysToMonths(days); - return units === 'month' ? months : months / 12; - } else { + if (units === 'month' || units === 'year') { + days = this._days + milliseconds / 864e5 + months = this._months + daysToMonths(days) + return units === 'month' ? months : months / 12 + } else { // handle milliseconds separately because of floating point math errors (issue #1867) - days = this._days + Math.round(monthsToDays(this._months)); + days = this._days + Math.round(monthsToDays(this._months)) switch (units) { - case 'week' : return days / 7 + milliseconds / 6048e5; - case 'day' : return days + milliseconds / 864e5; - case 'hour' : return days * 24 + milliseconds / 36e5; - case 'minute' : return days * 1440 + milliseconds / 6e4; - case 'second' : return days * 86400 + milliseconds / 1000; + case 'week' : return days / 7 + milliseconds / 6048e5 + case 'day' : return days + milliseconds / 864e5 + case 'hour' : return days * 24 + milliseconds / 36e5 + case 'minute' : return days * 1440 + milliseconds / 6e4 + case 'second' : return days * 86400 + milliseconds / 1000 // Math.floor prevents floating point math errors here - case 'millisecond': return Math.floor(days * 864e5) + milliseconds; - default: throw new Error('Unknown unit ' + units); + case 'millisecond': return Math.floor(days * 864e5) + milliseconds + default: throw new Error('Unknown unit ' + units) } + } } - } // TODO: Use this.as('ms')? - function duration_as__valueOf () { - return ( + function duration_as__valueOf () { + return ( this._milliseconds + this._days * 864e5 + (this._months % 12) * 2592e6 + toInt(this._months / 12) * 31536e6 - ); - } + ) + } - function makeAs (alias) { - return function () { - return this.as(alias); - }; - } + function makeAs (alias) { + return function () { + return this.as(alias) + } + } - var asMilliseconds = makeAs('ms'); - var asSeconds = makeAs('s'); - var asMinutes = makeAs('m'); - var asHours = makeAs('h'); - var asDays = makeAs('d'); - var asWeeks = makeAs('w'); - var asMonths = makeAs('M'); - var asYears = makeAs('y'); - - function duration_get__get (units) { - units = normalizeUnits(units); - return this[units + 's'](); - } + var asMilliseconds = makeAs('ms') + var asSeconds = makeAs('s') + var asMinutes = makeAs('m') + var asHours = makeAs('h') + var asDays = makeAs('d') + var asWeeks = makeAs('w') + var asMonths = makeAs('M') + var asYears = makeAs('y') - function makeGetter(name) { - return function () { - return this._data[name]; - }; - } + function duration_get__get (units) { + units = normalizeUnits(units) + return this[units + 's']() + } - var milliseconds = makeGetter('milliseconds'); - var seconds = makeGetter('seconds'); - var minutes = makeGetter('minutes'); - var hours = makeGetter('hours'); - var days = makeGetter('days'); - var months = makeGetter('months'); - var years = makeGetter('years'); + function makeGetter (name) { + return function () { + return this._data[name] + } + } - function weeks () { - return absFloor(this.days() / 7); - } + var milliseconds = makeGetter('milliseconds') + var seconds = makeGetter('seconds') + var minutes = makeGetter('minutes') + var hours = makeGetter('hours') + var days = makeGetter('days') + var months = makeGetter('months') + var years = makeGetter('years') + + function weeks () { + return absFloor(this.days() / 7) + } - var round = Math.round; - var thresholds = { - s: 45, // seconds to minute - m: 45, // minutes to hour - h: 22, // hours to day - d: 26, // days to month - M: 11 // months to year - }; + var round = Math.round + var thresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year + } // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize - function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { - return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); - } + function substituteTimeAgo (string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture) + } - function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { - var duration = create__createDuration(posNegDuration).abs(); - var seconds = round(duration.as('s')); - var minutes = round(duration.as('m')); - var hours = round(duration.as('h')); - var days = round(duration.as('d')); - var months = round(duration.as('M')); - var years = round(duration.as('y')); - - var a = seconds < thresholds.s && ['s', seconds] || - minutes <= 1 && ['m'] || + function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { + var duration = create__createDuration(posNegDuration).abs() + var seconds = round(duration.as('s')) + var minutes = round(duration.as('m')) + var hours = round(duration.as('h')) + var days = round(duration.as('d')) + var months = round(duration.as('M')) + var years = round(duration.as('y')) + + var a = seconds < thresholds.s && ['s', seconds] || + minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || - hours <= 1 && ['h'] || - hours < thresholds.h && ['hh', hours] || - days <= 1 && ['d'] || - days < thresholds.d && ['dd', days] || - months <= 1 && ['M'] || - months < thresholds.M && ['MM', months] || - years <= 1 && ['y'] || ['yy', years]; - - a[2] = withoutSuffix; - a[3] = +posNegDuration > 0; - a[4] = locale; - return substituteTimeAgo.apply(null, a); - } + hours <= 1 && ['h'] || + hours < thresholds.h && ['hh', hours] || + days <= 1 && ['d'] || + days < thresholds.d && ['dd', days] || + months <= 1 && ['M'] || + months < thresholds.M && ['MM', months] || + years <= 1 && ['y'] || ['yy', years] - // This function allows you to set a threshold for relative time strings - function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { - if (thresholds[threshold] === undefined) { - return false; + a[2] = withoutSuffix + a[3] = +posNegDuration > 0 + a[4] = locale + return substituteTimeAgo.apply(null, a) } - if (limit === undefined) { - return thresholds[threshold]; + + // This function allows you to set a threshold for relative time strings + function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { + if (thresholds[threshold] === undefined) { + return false + } + if (limit === undefined) { + return thresholds[threshold] + } + thresholds[threshold] = limit + return true } - thresholds[threshold] = limit; - return true; - } - function humanize (withSuffix) { - var locale = this.localeData(); - var output = duration_humanize__relativeTime(this, !withSuffix, locale); + function humanize (withSuffix) { + var locale = this.localeData() + var output = duration_humanize__relativeTime(this, !withSuffix, locale) - if (withSuffix) { - output = locale.pastFuture(+this, output); - } + if (withSuffix) { + output = locale.pastFuture(+this, output) + } - return locale.postformat(output); - } + return locale.postformat(output) + } - var iso_string__abs = Math.abs; + var iso_string__abs = Math.abs - function iso_string__toISOString() { + function iso_string__toISOString () { // for ISO strings we do not use the normal bubbling rules: // * milliseconds bubble up until they become hours // * days do not bubble at all @@ -48111,38 +48275,37 @@ process.chdir = function (dir) { // This is because there is no context-free conversion between hours and days // (think of clock changes) // and also not between days and months (28-31 days per month) - var seconds = iso_string__abs(this._milliseconds) / 1000; - var days = iso_string__abs(this._days); - var months = iso_string__abs(this._months); - var minutes, hours, years; + var seconds = iso_string__abs(this._milliseconds) / 1000 + var days = iso_string__abs(this._days) + var months = iso_string__abs(this._months) + var minutes, hours, years // 3600 seconds -> 60 minutes -> 1 hour - minutes = absFloor(seconds / 60); - hours = absFloor(minutes / 60); - seconds %= 60; - minutes %= 60; + minutes = absFloor(seconds / 60) + hours = absFloor(minutes / 60) + seconds %= 60 + minutes %= 60 // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; - + years = absFloor(months / 12) + months %= 12 // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js - var Y = years; - var M = months; - var D = days; - var h = hours; - var m = minutes; - var s = seconds; - var total = this.asSeconds(); - - if (!total) { + var Y = years + var M = months + var D = days + var h = hours + var m = minutes + var s = seconds + var total = this.asSeconds() + + if (!total) { // this is the same as C#'s (Noda) and python (isodate)... // but not other JS (goog.date) - return 'P0D'; - } + return 'P0D' + } - return (total < 0 ? '-' : '') + + return (total < 0 ? '-' : '') + 'P' + (Y ? Y + 'Y' : '') + (M ? M + 'M' : '') + @@ -48150,256 +48313,255 @@ process.chdir = function (dir) { ((h || m || s) ? 'T' : '') + (h ? h + 'H' : '') + (m ? m + 'M' : '') + - (s ? s + 'S' : ''); - } - - var duration_prototype__proto = Duration.prototype; - - duration_prototype__proto.abs = duration_abs__abs; - duration_prototype__proto.add = duration_add_subtract__add; - duration_prototype__proto.subtract = duration_add_subtract__subtract; - duration_prototype__proto.as = as; - duration_prototype__proto.asMilliseconds = asMilliseconds; - duration_prototype__proto.asSeconds = asSeconds; - duration_prototype__proto.asMinutes = asMinutes; - duration_prototype__proto.asHours = asHours; - duration_prototype__proto.asDays = asDays; - duration_prototype__proto.asWeeks = asWeeks; - duration_prototype__proto.asMonths = asMonths; - duration_prototype__proto.asYears = asYears; - duration_prototype__proto.valueOf = duration_as__valueOf; - duration_prototype__proto._bubble = bubble; - duration_prototype__proto.get = duration_get__get; - duration_prototype__proto.milliseconds = milliseconds; - duration_prototype__proto.seconds = seconds; - duration_prototype__proto.minutes = minutes; - duration_prototype__proto.hours = hours; - duration_prototype__proto.days = days; - duration_prototype__proto.weeks = weeks; - duration_prototype__proto.months = months; - duration_prototype__proto.years = years; - duration_prototype__proto.humanize = humanize; - duration_prototype__proto.toISOString = iso_string__toISOString; - duration_prototype__proto.toString = iso_string__toISOString; - duration_prototype__proto.toJSON = iso_string__toISOString; - duration_prototype__proto.locale = locale; - duration_prototype__proto.localeData = localeData; + (s ? s + 'S' : '') + } + + var duration_prototype__proto = Duration.prototype + + duration_prototype__proto.abs = duration_abs__abs + duration_prototype__proto.add = duration_add_subtract__add + duration_prototype__proto.subtract = duration_add_subtract__subtract + duration_prototype__proto.as = as + duration_prototype__proto.asMilliseconds = asMilliseconds + duration_prototype__proto.asSeconds = asSeconds + duration_prototype__proto.asMinutes = asMinutes + duration_prototype__proto.asHours = asHours + duration_prototype__proto.asDays = asDays + duration_prototype__proto.asWeeks = asWeeks + duration_prototype__proto.asMonths = asMonths + duration_prototype__proto.asYears = asYears + duration_prototype__proto.valueOf = duration_as__valueOf + duration_prototype__proto._bubble = bubble + duration_prototype__proto.get = duration_get__get + duration_prototype__proto.milliseconds = milliseconds + duration_prototype__proto.seconds = seconds + duration_prototype__proto.minutes = minutes + duration_prototype__proto.hours = hours + duration_prototype__proto.days = days + duration_prototype__proto.weeks = weeks + duration_prototype__proto.months = months + duration_prototype__proto.years = years + duration_prototype__proto.humanize = humanize + duration_prototype__proto.toISOString = iso_string__toISOString + duration_prototype__proto.toString = iso_string__toISOString + duration_prototype__proto.toJSON = iso_string__toISOString + duration_prototype__proto.locale = locale + duration_prototype__proto.localeData = localeData // Deprecations - duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); - duration_prototype__proto.lang = lang; + duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString) + duration_prototype__proto.lang = lang // Side effect imports // FORMATTING - addFormatToken('X', 0, 0, 'unix'); - addFormatToken('x', 0, 0, 'valueOf'); + addFormatToken('X', 0, 0, 'unix') + addFormatToken('x', 0, 0, 'valueOf') // PARSING - addRegexToken('x', matchSigned); - addRegexToken('X', matchTimestamp); - addParseToken('X', function (input, array, config) { - config._d = new Date(parseFloat(input, 10) * 1000); - }); - addParseToken('x', function (input, array, config) { - config._d = new Date(toInt(input)); - }); + addRegexToken('x', matchSigned) + addRegexToken('X', matchTimestamp) + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input, 10) * 1000) + }) + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)) + }) // Side effect imports - - utils_hooks__hooks.version = '2.13.0'; - - setHookCallback(local__createLocal); - - utils_hooks__hooks.fn = momentPrototype; - utils_hooks__hooks.min = min; - utils_hooks__hooks.max = max; - utils_hooks__hooks.now = now; - utils_hooks__hooks.utc = create_utc__createUTC; - utils_hooks__hooks.unix = moment__createUnix; - utils_hooks__hooks.months = lists__listMonths; - utils_hooks__hooks.isDate = isDate; - utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; - utils_hooks__hooks.invalid = valid__createInvalid; - utils_hooks__hooks.duration = create__createDuration; - utils_hooks__hooks.isMoment = isMoment; - utils_hooks__hooks.weekdays = lists__listWeekdays; - utils_hooks__hooks.parseZone = moment__createInZone; - utils_hooks__hooks.localeData = locale_locales__getLocale; - utils_hooks__hooks.isDuration = isDuration; - utils_hooks__hooks.monthsShort = lists__listMonthsShort; - utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; - utils_hooks__hooks.defineLocale = defineLocale; - utils_hooks__hooks.updateLocale = updateLocale; - utils_hooks__hooks.locales = locale_locales__listLocales; - utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; - utils_hooks__hooks.normalizeUnits = normalizeUnits; - utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; - utils_hooks__hooks.prototype = momentPrototype; - - var _moment = utils_hooks__hooks; - - return _moment; - -})); -},{}],108:[function(_dereq_,module,exports){ -module.exports={ - "name": "mermaid", - "version": "6.0.0", - "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams and gantt charts.", - "main": "src/mermaid.js", - "keywords": [ - "diagram", - "markdown", - "flowchart", - "sequence diagram", - "gantt" - ], - "bin": { - "mermaid": "./bin/mermaid.js" - }, - "scripts": { - "live": "live-server ./test/examples", - "lint": "node node_modules/eslint/bin/eslint.js src", - "jison": "gulp jison_legacy", - "karma": "node node_modules/karma/bin/karma start karma.conf.js --single-run", - "watch": "source ./scripts/watch.sh", - "doc": "rm -r build;rm -r dist/www;gulp vartree;cp dist/www/all.html ../mermaid-pages/index.html;cp dist/mermaid.js ../mermaid-pages/javascripts/lib;cp dist/mermaid.forest.css ../mermaid-pages/stylesheets", - "tape": "node node_modules/tape/bin/tape test/cli_test-*.js", - "jasmine": "npm run jison &&node node_modules/jasmine-es6/bin/jasmine.js", - "pretest": "npm run jison", - "test": "npm run dist && npm run karma && npm run tape", - "dist-slim-mermaid": "node node_modules/browserify/bin/cmd.js src/mermaid.js -t babelify -s mermaid -o dist/mermaid.slim.js -x d3 && cat dist/mermaid.slim.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaid.slim.min.js", - "dist-slim-mermaidAPI": "node node_modules/browserify/bin/cmd.js src/mermaidAPI.js -t babelify -s mermaidAPI -o dist/mermaidAPI.slim.js -x d3 && cat dist/mermaidAPI.slim.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaidAPI.slim.min.js", - "dist-mermaid": "node node_modules/browserify/bin/cmd.js src/mermaid.js -t babelify -s mermaid -o dist/mermaid.js && cat dist/mermaid.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaid.min.js", - "dist-mermaid-nomin": "node node_modules/browserify/bin/cmd.js src/mermaid.js -t babelify -s mermaid -o dist/mermaid.js && node bin/mermaid -v -s testgitgraph.mm && testgitgraph.mm.svg", - "dist-mermaidAPI": "node node_modules/browserify/bin/cmd.js src/mermaidAPI.js -t babelify -s mermaidAPI -o dist/mermaidAPI.js && cat dist/mermaidAPI.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaidAPI.min.js", - "dist": "npm run dist-slim-mermaid && npm run dist-slim-mermaidAPI && npm run dist-mermaid && npm run dist-mermaidAPI" - }, - "repository": { - "type": "git", - "url": "https://github.com/knsv/mermaid" - }, - "author": "Knut Sveidqvist", - "license": "MIT", - "dependencies": { - "chalk": "^0.5.1", - "d3": "3.5.6", - "dagre": "^0.7.4", - "dagre-d3": "0.4.10", - "he": "^0.5.0", - "lodash": "^4.6.1", - "minimist": "^1.1.0", - "mkdirp": "^0.5.0", - "moment": "^2.9.0", - "semver": "^4.1.1", - "which": "^1.0.8" - }, - "devDependencies": { - "async": "^0.9.0", - "babel-eslint": "^4.1.3", - "babelify": "^6.4.0", - "browserify": "~6.2.0", - "clone": "^0.2.0", - "codeclimate-test-reporter": "0.0.4", - "dateformat": "^1.0.11", - "dox": "^0.8.0", - "eslint": "^1.6.0", - "eslint-watch": "^2.1.2", - "event-stream": "^3.2.0", - "foundation": "^4.2.1-1", - "front-matter": "^0.2.0", - "gulp": "~3.9.0", - "gulp-bower": "0.0.10", - "gulp-browserify": "^0.5.0", - "gulp-bump": "^0.1.11", - "gulp-concat": "~2.4.1", - "gulp-data": "^1.1.1", - "gulp-dox": "^0.1.6", - "gulp-ext-replace": "^0.2.0", - "gulp-filelog": "^0.4.1", - "gulp-front-matter": "^1.2.3", - "gulp-hogan": "^1.1.0", - "gulp-if": "^1.2.5", - "gulp-insert": "^0.4.0", - "gulp-istanbul": "^0.4.0", - "gulp-jasmine": "~2.1.0", - "gulp-jasmine-browser": "^0.2.3", - "gulp-jison": "~1.2.0", - "gulp-jshint": "^1.9.0", - "gulp-less": "^3.0.1", - "gulp-livereload": "^3.8.0", - "gulp-marked": "^1.0.0", - "gulp-mdvars": "^2.0.0", - "gulp-qunit": "~1.2.1", - "gulp-rename": "~1.2.0", - "gulp-shell": "^0.2.10", - "gulp-tag-version": "^1.2.1", - "gulp-uglify": "~1.0.1", - "gulp-util": "^3.0.7", - "gulp-vartree": "^2.0.1", - "hogan.js": "^3.0.2", - "jasmine": "2.3.2", - "jasmine-es6": "0.0.18", - "jison": "zaach/jison", - "jsdom": "^7.0.2", - "jshint-stylish": "^2.0.1", - "karma": "^0.13.15", - "karma-babel-preprocessor": "^6.0.1", - "karma-browserify": "^4.4.0", - "karma-jasmine": "^0.3.6", - "karma-phantomjs-launcher": "^0.2.1", - "live-server": "^0.9.0", - "map-stream": "0.0.6", - "marked": "^0.3.2", - "mock-browser": "^0.91.34", - "path": "^0.4.9", - "phantomjs": "^2.1.3", - "proxyquire": "^1.7.3", - "proxyquire-universal": "^1.0.8", - "proxyquireify": "^3.0.0", - "require-dir": "^0.3.0", - "rewire": "^2.1.3", - "rimraf": "^2.2.8", - "tape": "^3.0.3", - "testdom": "^2.0.0", - "uglifyjs": "^2.4.10", - "vinyl-source-stream": "^1.1.0", - "watchify": "^3.6.1" - } -} - -},{}],109:[function(_dereq_,module,exports){ + utils_hooks__hooks.version = '2.13.0' + + setHookCallback(local__createLocal) + + utils_hooks__hooks.fn = momentPrototype + utils_hooks__hooks.min = min + utils_hooks__hooks.max = max + utils_hooks__hooks.now = now + utils_hooks__hooks.utc = create_utc__createUTC + utils_hooks__hooks.unix = moment__createUnix + utils_hooks__hooks.months = lists__listMonths + utils_hooks__hooks.isDate = isDate + utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale + utils_hooks__hooks.invalid = valid__createInvalid + utils_hooks__hooks.duration = create__createDuration + utils_hooks__hooks.isMoment = isMoment + utils_hooks__hooks.weekdays = lists__listWeekdays + utils_hooks__hooks.parseZone = moment__createInZone + utils_hooks__hooks.localeData = locale_locales__getLocale + utils_hooks__hooks.isDuration = isDuration + utils_hooks__hooks.monthsShort = lists__listMonthsShort + utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin + utils_hooks__hooks.defineLocale = defineLocale + utils_hooks__hooks.updateLocale = updateLocale + utils_hooks__hooks.locales = locale_locales__listLocales + utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort + utils_hooks__hooks.normalizeUnits = normalizeUnits + utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold + utils_hooks__hooks.prototype = momentPrototype + + var _moment = utils_hooks__hooks + + return _moment + })) + }, {}], + 108: [function (_dereq_, module, exports) { + module.exports = { + 'name': 'mermaid', + 'version': '6.0.0', + 'description': 'Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams and gantt charts.', + 'main': 'src/mermaid.js', + 'keywords': [ + 'diagram', + 'markdown', + 'flowchart', + 'sequence diagram', + 'gantt' + ], + 'bin': { + 'mermaid': './bin/mermaid.js' + }, + 'scripts': { + 'live': 'live-server ./test/examples', + 'lint': 'node node_modules/eslint/bin/eslint.js src', + 'jison': 'gulp jison_legacy', + 'karma': 'node node_modules/karma/bin/karma start karma.conf.js --single-run', + 'watch': 'source ./scripts/watch.sh', + 'doc': 'rm -r build;rm -r dist/www;gulp vartree;cp dist/www/all.html ../mermaid-pages/index.html;cp dist/mermaid.js ../mermaid-pages/javascripts/lib;cp dist/mermaid.forest.css ../mermaid-pages/stylesheets', + 'tape': 'node node_modules/tape/bin/tape test/cli_test-*.js', + 'jasmine': 'npm run jison &&node node_modules/jasmine-es6/bin/jasmine.js', + 'pretest': 'npm run jison', + 'test': 'npm run dist && npm run karma && npm run tape', + 'dist-slim-mermaid': 'node node_modules/browserify/bin/cmd.js src/mermaid.js -t babelify -s mermaid -o dist/mermaid.slim.js -x d3 && cat dist/mermaid.slim.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaid.slim.min.js', + 'dist-slim-mermaidAPI': 'node node_modules/browserify/bin/cmd.js src/mermaidAPI.js -t babelify -s mermaidAPI -o dist/mermaidAPI.slim.js -x d3 && cat dist/mermaidAPI.slim.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaidAPI.slim.min.js', + 'dist-mermaid': 'node node_modules/browserify/bin/cmd.js src/mermaid.js -t babelify -s mermaid -o dist/mermaid.js && cat dist/mermaid.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaid.min.js', + 'dist-mermaid-nomin': 'node node_modules/browserify/bin/cmd.js src/mermaid.js -t babelify -s mermaid -o dist/mermaid.js && node bin/mermaid -v -s testgitgraph.mm && testgitgraph.mm.svg', + 'dist-mermaidAPI': 'node node_modules/browserify/bin/cmd.js src/mermaidAPI.js -t babelify -s mermaidAPI -o dist/mermaidAPI.js && cat dist/mermaidAPI.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaidAPI.min.js', + 'dist': 'npm run dist-slim-mermaid && npm run dist-slim-mermaidAPI && npm run dist-mermaid && npm run dist-mermaidAPI' + }, + 'repository': { + 'type': 'git', + 'url': 'https://github.com/knsv/mermaid' + }, + 'author': 'Knut Sveidqvist', + 'license': 'MIT', + 'dependencies': { + 'chalk': '^0.5.1', + 'd3': '3.5.6', + 'dagre': '^0.7.4', + 'dagre-d3': '0.4.10', + 'he': '^0.5.0', + 'lodash': '^4.6.1', + 'minimist': '^1.1.0', + 'mkdirp': '^0.5.0', + 'moment': '^2.9.0', + 'semver': '^4.1.1', + 'which': '^1.0.8' + }, + 'devDependencies': { + 'async': '^0.9.0', + 'babel-eslint': '^4.1.3', + 'babelify': '^6.4.0', + 'browserify': '~6.2.0', + 'clone': '^0.2.0', + 'codeclimate-test-reporter': '0.0.4', + 'dateformat': '^1.0.11', + 'dox': '^0.8.0', + 'eslint': '^1.6.0', + 'eslint-watch': '^2.1.2', + 'event-stream': '^3.2.0', + 'foundation': '^4.2.1-1', + 'front-matter': '^0.2.0', + 'gulp': '~3.9.0', + 'gulp-bower': '0.0.10', + 'gulp-browserify': '^0.5.0', + 'gulp-bump': '^0.1.11', + 'gulp-concat': '~2.4.1', + 'gulp-data': '^1.1.1', + 'gulp-dox': '^0.1.6', + 'gulp-ext-replace': '^0.2.0', + 'gulp-filelog': '^0.4.1', + 'gulp-front-matter': '^1.2.3', + 'gulp-hogan': '^1.1.0', + 'gulp-if': '^1.2.5', + 'gulp-insert': '^0.4.0', + 'gulp-istanbul': '^0.4.0', + 'gulp-jasmine': '~2.1.0', + 'gulp-jasmine-browser': '^0.2.3', + 'gulp-jison': '~1.2.0', + 'gulp-jshint': '^1.9.0', + 'gulp-less': '^3.0.1', + 'gulp-livereload': '^3.8.0', + 'gulp-marked': '^1.0.0', + 'gulp-mdvars': '^2.0.0', + 'gulp-qunit': '~1.2.1', + 'gulp-rename': '~1.2.0', + 'gulp-shell': '^0.2.10', + 'gulp-tag-version': '^1.2.1', + 'gulp-uglify': '~1.0.1', + 'gulp-util': '^3.0.7', + 'gulp-vartree': '^2.0.1', + 'hogan.js': '^3.0.2', + 'jasmine': '2.3.2', + 'jasmine-es6': '0.0.18', + 'jison': 'zaach/jison', + 'jsdom': '^7.0.2', + 'jshint-stylish': '^2.0.1', + 'karma': '^0.13.15', + 'karma-babel-preprocessor': '^6.0.1', + 'karma-browserify': '^4.4.0', + 'karma-jasmine': '^0.3.6', + 'karma-phantomjs-launcher': '^0.2.1', + 'live-server': '^0.9.0', + 'map-stream': '0.0.6', + 'marked': '^0.3.2', + 'mock-browser': '^0.91.34', + 'path': '^0.4.9', + 'phantomjs': '^2.1.3', + 'proxyquire': '^1.7.3', + 'proxyquire-universal': '^1.0.8', + 'proxyquireify': '^3.0.0', + 'require-dir': '^0.3.0', + 'rewire': '^2.1.3', + 'rimraf': '^2.2.8', + 'tape': '^3.0.3', + 'testdom': '^2.0.0', + 'uglifyjs': '^2.4.10', + 'vinyl-source-stream': '^1.1.0', + 'watchify': '^3.6.1' + } + } + }, {}], + 109: [function (_dereq_, module, exports) { /* global window */ -//log.debug('Setting up d3'); -var d3; - -if (_dereq_) { - try { - d3 = _dereq_('d3'); - } catch (e) { - //log.debug('Exception ... but ok'); - //log.debug(e); - } -} +// log.debug('Setting up d3'); + var d3 + + if (_dereq_) { + try { + d3 = _dereq_('d3') + } catch (e) { + // log.debug('Exception ... but ok'); + // log.debug(e); + } + } -//log.debug(d3); +// log.debug(d3); -if (!d3) { - //if(typeof window !== 'undefined') - d3 = window.d3; -} + if (!d3) { + // if(typeof window !== 'undefined') + d3 = window.d3 + } -//if(typeof window === 'undefined'){ +// if(typeof window === 'undefined'){ // window = {}; // window.d3 = d3; -//} -//log.debug('window'); -//log.debug(window); -module.exports = d3; +// } +// log.debug('window'); +// log.debug(window); + module.exports = d3; /* jshint ignore:start */ /* @@ -48413,86 +48575,84 @@ module.exports = d3; */ -(function() { - + (function () { // set this variable to a string value to always force a particular // wrap method for development purposes, for example to check tspan // rendering using a foreignobject-enabled browser. set to 'tspan' to // use tspans and 'foreignobject' to use foreignobject - var force_wrap_method = false; // by default no wrap method is forced - force_wrap_method = 'tspans'; // uncomment this statement to force tspans + var force_wrap_method = false // by default no wrap method is forced + force_wrap_method = 'tspans' // uncomment this statement to force tspans // force_wrap_method = 'foreignobjects'; // uncomment this statement to force foreignobjects // exit immediately if something in this location // has already been defined; the plugin will defer to whatever // else you're doing in your code - if(d3.selection.prototype.textwrap) { - return false; - } + if (d3.selection.prototype.textwrap) { + return false + } // double check the force_wrap_method flag // and reset if someone screwed up the above // settings - if(typeof force_wrap_method == 'undefined') { - var force_wrap_method = false; - } + if (typeof force_wrap_method === 'undefined') { + var force_wrap_method = false + } // create the plugin method twice, both for regular use // and again for use inside the enter() selection - d3.selection.prototype.textwrap = d3.selection.enter.prototype.textwrap = function(bounds, padding) { - + d3.selection.prototype.textwrap = d3.selection.enter.prototype.textwrap = function (bounds, padding) { // default value of padding is zero if it's undefined - var padding = parseInt(padding) || 0; + var padding = parseInt(padding) || 0 // save callee into a variable so we can continue to refer to it // as the function scope changes - var selection = this; + var selection = this // create a variable to store desired return values in - var return_value; + var return_value // extract wrap boundaries from any d3-selected rect and return them // in a format that matches the simpler object argument option - var extract_bounds = function(bounds) { + var extract_bounds = function (bounds) { // discard the nested array wrappers added by d3 - var bounding_rect = bounds[0][0]; + var bounding_rect = bounds[0][0] // sanitize the svg element name so we can test against it - var element_type = bounding_rect.tagName.toString(); + var element_type = bounding_rect.tagName.toString() // if it's not a rect, exit - if(element_type !== 'rect') { - return false; + if (element_type !== 'rect') { + return false // if it's a rect, proceed to extracting the position attributes } else { - var bounds_extracted = {}; - bounds_extracted.x = d3.select(bounding_rect).attr('x') || 0; - bounds_extracted.y = d3.select(bounding_rect).attr('y') || 0; - bounds_extracted.width = d3.select(bounding_rect).attr('width') || 0; - bounds_extracted.height = d3.select(bounding_rect).attr('height') || 0; + var bounds_extracted = {} + bounds_extracted.x = d3.select(bounding_rect).attr('x') || 0 + bounds_extracted.y = d3.select(bounding_rect).attr('y') || 0 + bounds_extracted.width = d3.select(bounding_rect).attr('width') || 0 + bounds_extracted.height = d3.select(bounding_rect).attr('height') || 0 // also pass along the getter function - bounds_extracted.attr = bounds.attr; + bounds_extracted.attr = bounds.attr } - return bounds_extracted; - } + return bounds_extracted + } // double check the input argument for the wrapping // boundaries to make sure it actually contains all // the information we'll need in order to wrap successfully - var verify_bounds = function(bounds) { + var verify_bounds = function (bounds) { // quickly add a simple getter method so you can use either // bounds.x or bounds.attr('x') as your notation, // the latter being a common convention among D3 // developers - if(!bounds.attr) { - bounds.attr = function(property) { - if(this[property]) { - return this[property]; - } + if (!bounds.attr) { + bounds.attr = function (property) { + if (this[property]) { + return this[property] } + } } // if it's an associative array, make sure it has all the // necessary properties represented directly - if( - (typeof bounds == 'object') && + if ( + (typeof bounds === 'object') && (typeof bounds.x !== 'undefined') && (typeof bounds.y !== 'undefined') && (typeof bounds.width !== 'undefined') && @@ -48500,13 +48660,13 @@ module.exports = d3; // if that's the case, then the bounds are fine ) { // return the lightly modified bounds - return bounds; + return bounds // if it's a numerically indexed array, assume it's a // d3-selected rect and try to extract the positions } else if ( // first try to make sure it's an array using Array.isArray ( - (typeof Array.isArray == 'function') && + (typeof Array.isArray === 'function') && (Array.isArray(bounds)) ) || // but since Array.isArray isn't always supported, fall @@ -48515,37 +48675,37 @@ module.exports = d3; ) { // once you're sure it's an array, extract the boundaries // from the rect - var extracted_bounds = extract_bounds(bounds); - return extracted_bounds; + var extracted_bounds = extract_bounds(bounds) + return extracted_bounds } else { // but if the bounds are neither an object nor a numerical // array, then the bounds argument is invalid and you'll // need to fix it - return false; + return false } - } + } - var apply_padding = function(bounds, padding) { - var padded_bounds = bounds; - if(padding !== 0) { - padded_bounds.x = parseInt(padded_bounds.x) + padding; - padded_bounds.y = parseInt(padded_bounds.y) + padding; - padded_bounds.width -= padding * 2; - padded_bounds.height -= padding * 2; + var apply_padding = function (bounds, padding) { + var padded_bounds = bounds + if (padding !== 0) { + padded_bounds.x = parseInt(padded_bounds.x) + padding + padded_bounds.y = parseInt(padded_bounds.y) + padding + padded_bounds.width -= padding * 2 + padded_bounds.height -= padding * 2 } - return padded_bounds; - } + return padded_bounds + } // verify bounds - var verified_bounds = verify_bounds(bounds); + var verified_bounds = verify_bounds(bounds) // modify bounds if a padding value is provided - if(padding) { - verified_bounds = apply_padding(verified_bounds, padding); - } + if (padding) { + verified_bounds = apply_padding(verified_bounds, padding) + } // check that we have the necessary conditions for this function to operate properly - if( + if ( // selection it's operating on cannot be not empty (selection.length == 0) || // d3 must be available @@ -48558,133 +48718,131 @@ module.exports = d3; // try to return the calling selection if possible // so as not to interfere with methods downstream in the // chain - if(selection) { - return selection; + if (selection) { + return selection // if all else fails, just return false. if you hit this point then you're // almost certainly trying to call the textwrap() method on something that // doesn't make sense! } else { - return false; + return false } // if we've validated everything then we can finally proceed - // to the meat of this operation - } else { - + // to the meat of this operation + } else { // reassign the verified bounds as the set we want // to work with from here on; this ensures that we're // using the same data structure for our bounds regardless // of whether the input argument was a simple object or // a d3 selection - bounds = verified_bounds; + bounds = verified_bounds // wrap using html and foreignObjects if they are supported - var wrap_with_foreignobjects = function(item) { + var wrap_with_foreignobjects = function (item) { // establish variables to quickly reference target nodes later - var parent = d3.select(item[0].parentNode); - var text_node = parent.select('text'); - var styled_line_height = text_node.style('line-height'); + var parent = d3.select(item[0].parentNode) + var text_node = parent.select('text') + var styled_line_height = text_node.style('line-height') // extract our desired content from the single text element - var text_to_wrap = text_node.text(); + var text_to_wrap = text_node.text() // remove the text node and replace with a foreign object - text_node.remove(); - var foreign_object = parent.append('foreignObject'); + text_node.remove() + var foreign_object = parent.append('foreignObject') // add foreign object and set dimensions, position, etc - foreign_object + foreign_object .attr('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility') .attr('x', bounds.x) .attr('y', bounds.y) .attr('width', bounds.width) - .attr('height', bounds.height); + .attr('height', bounds.height) // insert an HTML div - var wrap_div = foreign_object + var wrap_div = foreign_object .append('xhtml:div') // this class is currently hardcoded // probably not necessary but easy to // override using .classed() and for now // it's nice to avoid a litany of input // arguments - .attr('class', 'wrapped'); + .attr('class', 'wrapped') // set div to same dimensions as foreign object - wrap_div + wrap_div .style('height', bounds.height) .style('width', bounds.width) // insert text content - .html(text_to_wrap); - if(styled_line_height) { - wrap_div.style('line-height', styled_line_height); - } - return_value = parent.select('foreignObject'); + .html(text_to_wrap) + if (styled_line_height) { + wrap_div.style('line-height', styled_line_height) + } + return_value = parent.select('foreignObject') } - // wrap with tspans if foreignObject is undefined - var wrap_with_tspans = function(item) { + var wrap_with_tspans = function (item) { // operate on the first text item in the selection - var text_node = item[0]; - var parent = text_node.parentNode; - var text_node_selected = d3.select(text_node); + var text_node = item[0] + var parent = text_node.parentNode + var text_node_selected = d3.select(text_node) // measure initial size of the text node as rendered - var text_node_height = text_node.getBBox().height; - var text_node_width = text_node.getBBox().width; + var text_node_height = text_node.getBBox().height + var text_node_width = text_node.getBBox().width // figure out the line height, either from rendered height // of the font or attached styling - var line_height; - var rendered_line_height = text_node_height; - var styled_line_height = text_node_selected.style('line-height'); - if( + var line_height + var rendered_line_height = text_node_height + var styled_line_height = text_node_selected.style('line-height') + if ( (styled_line_height) && (parseInt(styled_line_height)) ) { - line_height = parseInt(styled_line_height.replace('px', '')); - } else { - line_height = rendered_line_height; - } + line_height = parseInt(styled_line_height.replace('px', '')) + } else { + line_height = rendered_line_height + } // only fire the rest of this if the text content // overflows the desired dimensions - if(text_node_width > bounds.width) { + if (text_node_width > bounds.width) { // store whatever is inside the text node // in a variable and then zero out the // initial content; we'll reinsert in a moment // using tspan elements. - var text_to_wrap = text_node_selected.text(); - text_node_selected.text(''); - if(text_to_wrap) { + var text_to_wrap = text_node_selected.text() + text_node_selected.text('') + if (text_to_wrap) { // keep track of whether we are splitting by spaces // so we know whether to reinsert those spaces later - var break_delimiter; + var break_delimiter // split at spaces to create an array of individual words - var text_to_wrap_array; - if(text_to_wrap.indexOf(' ') !== -1) { - var break_delimiter = ' '; - text_to_wrap_array = text_to_wrap.split(' '); - } else { + var text_to_wrap_array + if (text_to_wrap.indexOf(' ') !== -1) { + var break_delimiter = ' ' + text_to_wrap_array = text_to_wrap.split(' ') + } else { // if there are no spaces, figure out the split // points by comparing rendered text width against // bounds and translating that into character position // cuts - break_delimiter = ''; - var string_length = text_to_wrap.length; - var number_of_substrings = Math.ceil(text_node_width / bounds.width); - var splice_interval = Math.floor(string_length / number_of_substrings); - if( + break_delimiter = '' + var string_length = text_to_wrap.length + var number_of_substrings = Math.ceil(text_node_width / bounds.width) + var splice_interval = Math.floor(string_length / number_of_substrings) + if ( !(splice_interval * number_of_substrings >= string_length) ) { - number_of_substrings++; - } - var text_to_wrap_array = []; - var substring; - var start_position; - for(var i = 0; i < number_of_substrings; i++) { - start_position = i * splice_interval; - substring = text_to_wrap.substr(start_position, splice_interval); - text_to_wrap_array.push(substring); - } - } + number_of_substrings++ + } + var text_to_wrap_array = [] + var substring + var start_position + for (var i = 0; i < number_of_substrings; i++) { + start_position = i * splice_interval + substring = text_to_wrap.substr(start_position, splice_interval) + text_to_wrap_array.push(substring) + } + } // new array where we'll store the words re-assembled into // substrings that have been tested against the desired // maximum wrapping width - var substrings = []; + var substrings = [] // computed text length is arguably incorrectly reported for // all tspans after the first one, in that they will include // the width of previous separate tspans. to compensate we need @@ -48692,102 +48850,102 @@ module.exports = d3; // previous tspans and substrings, and then use that to offset // the miscalculation. this then gives us the actual correct // position we want to use in rendering the text in the SVG. - var total_offset = 0; + var total_offset = 0 // object for storing the results of text length computations later - var temp = {}; + var temp = {} // loop through the words and test the computed text length // of the string against the maximum desired wrapping width - for(var i = 0; i < text_to_wrap_array.length; i++) { - var word = text_to_wrap_array[i]; - var previous_string = text_node_selected.text(); - var previous_width = text_node.getComputedTextLength(); + for (var i = 0; i < text_to_wrap_array.length; i++) { + var word = text_to_wrap_array[i] + var previous_string = text_node_selected.text() + var previous_width = text_node.getComputedTextLength() // initialize the current word as the first word // or append to the previous string if one exists - var new_string; - if(previous_string) { - new_string = previous_string + break_delimiter + word; - } else { - new_string = word; - } + var new_string + if (previous_string) { + new_string = previous_string + break_delimiter + word + } else { + new_string = word + } // add the newest substring back to the text node and // measure the length - text_node_selected.text(new_string); - var new_width = text_node.getComputedTextLength(); + text_node_selected.text(new_string) + var new_width = text_node.getComputedTextLength() // adjust the length by the offset we've tracked // due to the misreported length discussed above - var test_width = new_width - total_offset; + var test_width = new_width - total_offset // if our latest version of the string is too // big for the bounds, use the previous // version of the string (without the newest word // added) and use the latest word to restart the // process with a new tspan - if(new_width > bounds.width) { - if( + if (new_width > bounds.width) { + if ( (previous_string) && (previous_string !== '') ) { - total_offset = total_offset + previous_width; - temp = {string: previous_string, width: previous_width, offset: total_offset}; - substrings.push(temp); - text_node_selected.text(''); - text_node_selected.text(word); + total_offset = total_offset + previous_width + temp = {string: previous_string, width: previous_width, offset: total_offset} + substrings.push(temp) + text_node_selected.text('') + text_node_selected.text(word) // Handle case where there is just one more word to be wrapped - if(i == text_to_wrap_array.length - 1) { - new_string = word; - text_node_selected.text(new_string); - new_width = text_node.getComputedTextLength(); - } - } - } + if (i == text_to_wrap_array.length - 1) { + new_string = word + text_node_selected.text(new_string) + new_width = text_node.getComputedTextLength() + } + } + } // if we're up to the last word in the array, // get the computed length as is without // appending anything further to it - if(i == text_to_wrap_array.length - 1) { - text_node_selected.text(''); - var final_string = new_string; - if( + if (i == text_to_wrap_array.length - 1) { + text_node_selected.text('') + var final_string = new_string + if ( (final_string) && (final_string !== '') ) { - if((new_width - total_offset) > 0) {new_width = new_width - total_offset} - temp = {string: final_string, width: new_width, offset: total_offset}; - substrings.push(temp); - } - } - } + if ((new_width - total_offset) > 0) { new_width = new_width - total_offset } + temp = {string: final_string, width: new_width, offset: total_offset} + substrings.push(temp) + } + } + } // append each substring as a tspan - var current_tspan; - var tspan_count; + var current_tspan + var tspan_count // double check that the text content has been removed // before we start appending tspans - text_node_selected.text(''); - for(var i = 0; i < substrings.length; i++) { - var substring = substrings[i].string; - if(i > 0) { - var previous_substring = substrings[i - 1]; - } + text_node_selected.text('') + for (var i = 0; i < substrings.length; i++) { + var substring = substrings[i].string + if (i > 0) { + var previous_substring = substrings[i - 1] + } // only append if we're sure it won't make the tspans // overflow the bounds. - if((i) * line_height < bounds.height - (line_height * 1.5)) { - current_tspan = text_node_selected.append('tspan') - .text(substring); + if ((i) * line_height < bounds.height - (line_height * 1.5)) { + current_tspan = text_node_selected.append('tspan') + .text(substring) // vertical shift to all tspans after the first one - current_tspan - .attr('dy', function(d) { - if(i > 0) { - return line_height; - } - }); + current_tspan + .attr('dy', function (d) { + if (i > 0) { + return line_height + } + }) // shift left from default position, which // is probably based on the full length of the // text string until we make this adjustment - current_tspan - .attr('x', function() { - var x_offset = bounds.x; - if(padding) {x_offset += padding;} - return x_offset; - }); + current_tspan + .attr('x', function () { + var x_offset = bounds.x + if (padding) { x_offset += padding } + return x_offset + }) // .attr('dx', function() { // if(i == 0) { // var render_offset = 0; @@ -48797,90 +48955,86 @@ module.exports = d3; // } // return render_offset; // }); - } - } } + } } + } // position the overall text node, whether wrapped or not - text_node_selected.attr('y', function() { - var y_offset = bounds.y; + text_node_selected.attr('y', function () { + var y_offset = bounds.y // shift by line-height to move the baseline into // the bounds – otherwise the text baseline would be // at the top of the bounds - if(line_height) {y_offset += line_height;} + if (line_height) { y_offset += line_height } // shift by padding, if it's there - if(padding) {y_offset += padding;} - return y_offset; - }); + if (padding) { y_offset += padding } + return y_offset + }) // shift to the right by the padding value - text_node_selected.attr('x', function() { - var x_offset = bounds.x; - if(padding) {x_offset += padding;} - return x_offset; - }); - + text_node_selected.attr('x', function () { + var x_offset = bounds.x + if (padding) { x_offset += padding } + return x_offset + }) // assign our modified text node with tspans // to the return value - return_value = d3.select(parent).selectAll('text'); + return_value = d3.select(parent).selectAll('text') } // variable used to hold the functions that let us // switch between the wrap methods - var wrap_method; + var wrap_method // if a wrap method if being forced, assign that // function - if(force_wrap_method) { - if(force_wrap_method == 'foreignobjects') { - wrap_method = wrap_with_foreignobjects; - } else if (force_wrap_method == 'tspans') { - wrap_method = wrap_with_tspans; - } + if (force_wrap_method) { + if (force_wrap_method == 'foreignobjects') { + wrap_method = wrap_with_foreignobjects + } else if (force_wrap_method == 'tspans') { + wrap_method = wrap_with_tspans + } } // if no wrap method is being forced, then instead // test for browser support of foreignobject and // use whichever wrap method makes sense accordingly - if(!force_wrap_method) { - if(typeof SVGForeignObjectElement !== 'undefined') { - wrap_method = wrap_with_foreignobjects; - } else { - wrap_method = wrap_with_tspans; - } + if (!force_wrap_method) { + if (typeof SVGForeignObjectElement !== 'undefined') { + wrap_method = wrap_with_foreignobjects + } else { + wrap_method = wrap_with_tspans + } } // run the desired wrap function for each item // in the d3 selection that called .textwrap() - for(var i = 0; i < selection.length; i++) { - var item = selection[i]; - wrap_method(item); + for (var i = 0; i < selection.length; i++) { + var item = selection[i] + wrap_method(item) } // return the modified nodes so we can chain other // methods to them. - return return_value; - + return return_value + } } - - } - -})(); + })() /* jshint ignore:end */ -},{"d3":1}],110:[function(_dereq_,module,exports){ - -var Logger = _dereq_('../../logger'); -var log = new Logger.Log(); + }, {'d3': 1}], + 110: [function (_dereq_, module, exports) { + var Logger = _dereq_('../../logger') + var log = new Logger.Log() -var relations = []; + var relations = [] -var classes; -var idCache; -classes = { -}; + var classes + var idCache + classes = { + } // Functions to be run after graph rendering -var funs = []; + var funs = [] /** * Function called by parser when a node definition has been found. * @param id @@ -48888,116 +49042,113 @@ var funs = []; * @param type * @param style */ -exports.addClass = function (id) { - if(typeof classes[id] === 'undefined'){ - classes[id] = { - id:id, - methods:[], - members:[] - }; - } -}; + exports.addClass = function (id) { + if (typeof classes[id] === 'undefined') { + classes[id] = { + id: id, + methods: [], + members: [] + } + } + } -exports.clear = function () { - relations = []; - classes = {}; -}; + exports.clear = function () { + relations = [] + classes = {} + } -module.exports.getClass = function (id) { - return classes[id]; -}; -module.exports.getClasses = function () { - return classes; -}; + module.exports.getClass = function (id) { + return classes[id] + } + module.exports.getClasses = function () { + return classes + } -module.exports.getRelations = function () { - return relations; -}; + module.exports.getRelations = function () { + return relations + } -exports.addRelation = function (relation) { - log.warn('Adding relation: ' + JSON.stringify(relation)); - exports.addClass(relation.id1); - exports.addClass(relation.id2); + exports.addRelation = function (relation) { + log.warn('Adding relation: ' + JSON.stringify(relation)) + exports.addClass(relation.id1) + exports.addClass(relation.id2) - relations.push(relation); -}; + relations.push(relation) + } -exports.addMembers = function (className, MembersArr) { - var theClass = classes[className]; - if(typeof MembersArr === 'string'){ - if(MembersArr.substr(-1) === ')'){ - theClass.methods.push(MembersArr); - } - else{ - theClass.members.push(MembersArr); + exports.addMembers = function (className, MembersArr) { + var theClass = classes[className] + if (typeof MembersArr === 'string') { + if (MembersArr.substr(-1) === ')') { + theClass.methods.push(MembersArr) + } else { + theClass.members.push(MembersArr) + } } - } -}; - -exports.cleanupLabel = function (label) { - - if(label.substring(0,1) === ':'){ - return label.substr(2).trim(); - } - else{ - return label.trim(); - } -}; + } -exports.lineType = { - LINE:0, - DOTTED_LINE:1 -}; + exports.cleanupLabel = function (label) { + if (label.substring(0, 1) === ':') { + return label.substr(2).trim() + } else { + return label.trim() + } + } -exports.relationType = { - AGGREGATION:0, - EXTENSION:1, - COMPOSITION:2, - DEPENDENCY:3 -}; + exports.lineType = { + LINE: 0, + DOTTED_LINE: 1 + } -},{"../../logger":132}],111:[function(_dereq_,module,exports){ + exports.relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3 + } + }, {'../../logger': 132}], + 111: [function (_dereq_, module, exports) { /** * Created by knut on 14-11-23. */ -var cd = _dereq_('./parser/classDiagram').parser; -var cDDb = _dereq_('./classDb'); -cd.yy = cDDb; -var d3 = _dereq_('../../d3'); -var Logger = _dereq_('../../logger'); -var dagre = _dereq_('dagre'); -var log = new Logger.Log(); + var cd = _dereq_('./parser/classDiagram').parser + var cDDb = _dereq_('./classDb') + cd.yy = cDDb + var d3 = _dereq_('../../d3') + var Logger = _dereq_('../../logger') + var dagre = _dereq_('dagre') + var log = new Logger.Log() -var idCache; -idCache = {}; + var idCache + idCache = {} -var classCnt = 0; -var conf = { - dividerMargin: 10, - padding: 5, - textHeight: 14 -}; + var classCnt = 0 + var conf = { + dividerMargin: 10, + padding: 5, + textHeight: 14 + } // Todo optimize -var getGraphId = function (label) { - var keys = Object.keys(idCache); + var getGraphId = function (label) { + var keys = Object.keys(idCache) - var i; - for(i=0;i ' + e.w + ': ' + JSON.stringify(g.edge(e))); - drawEdge(diagram, g.edge(e), g.edge(e).relation); - }); - + // } + dagre.layout(g) + g.nodes().forEach(function (v) { + if (typeof v !== 'undefined') { + log.debug('Node ' + v + ': ' + JSON.stringify(g.node(v))) + d3.select('#' + v).attr('transform', 'translate(' + (g.node(v).x - (g.node(v).width / 2)) + ',' + (g.node(v).y - (g.node(v).height / 2)) + ' )') + // d3.select('#' +v +' rect').attr('x',(g.node(v).x-(g.node(v).width/2))) + // .attr('y',(g.node(v).y-(g.node(v).height/2))); + } + }) + g.edges().forEach(function (e) { + log.debug('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(g.edge(e))) + drawEdge(diagram, g.edge(e), g.edge(e).relation) + }) // - diagram.attr('height', '100%'); - diagram.attr('width', '100%'); + diagram.attr('height', '100%') + diagram.attr('width', '100%') // // // // - //if(conf.useMaxWidth) { + // if(conf.useMaxWidth) { // diagram.attr('height', '100%'); // diagram.attr('width', '100%'); // diagram.attr('style', 'max-width:' + (width) + 'px;'); - //}else{ + // }else{ // diagram.attr('height',height); // diagram.attr('width', width ); - //} - //diagram.attr('viewBox', (box.startx-conf.diagramMarginX) + ' -' +conf.diagramMarginY + ' ' + width + ' ' + height); -}; - -},{"../../d3":109,"../../logger":132,"./classDb":110,"./parser/classDiagram":112,"dagre":51}],112:[function(_dereq_,module,exports){ -(function (process){ + // } + // diagram.attr('viewBox', (box.startx-conf.diagramMarginX) + ' -' +conf.diagramMarginY + ' ' + width + ' ' + height); + } + }, {'../../d3': 109, '../../logger': 132, './classDb': 110, './parser/classDiagram': 112, 'dagre': 51}], + 112: [function (_dereq_, module, exports) { + (function (process) { /* parser generated by jison 0.4.17 */ /* Returns a Parser object of the following structure: @@ -49433,7 +49574,6 @@ module.exports.draw = function (text, id) { } } - token location info (@$, _$, etc.): { first_line: n, last_line: n, @@ -49442,7 +49582,6 @@ module.exports.draw = function (text, id) { range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) } - the parseError function receives a 'hash' object with these members for lexer and parser errors: { text: (matched text) token: (the produced terminal token, if any) @@ -49454,755 +49593,756 @@ module.exports.draw = function (text, id) { recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) } */ -var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,11],$V1=[1,12],$V2=[1,13],$V3=[1,15],$V4=[1,16],$V5=[1,17],$V6=[6,8],$V7=[1,26],$V8=[1,27],$V9=[1,28],$Va=[1,29],$Vb=[1,30],$Vc=[1,31],$Vd=[6,8,13,17,23,26,27,28,29,30,31],$Ve=[6,8,13,17,23,26,27,28,29,30,31,45,46,47],$Vf=[23,45,46,47],$Vg=[23,30,31,45,46,47],$Vh=[23,26,27,28,29,45,46,47],$Vi=[6,8,13],$Vj=[1,46]; -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"mermaidDoc":3,"graphConfig":4,"CLASS_DIAGRAM":5,"NEWLINE":6,"statements":7,"EOF":8,"statement":9,"className":10,"alphaNumToken":11,"relationStatement":12,"LABEL":13,"classStatement":14,"methodStatement":15,"CLASS":16,"STRUCT_START":17,"members":18,"STRUCT_STOP":19,"MEMBER":20,"SEPARATOR":21,"relation":22,"STR":23,"relationType":24,"lineType":25,"AGGREGATION":26,"EXTENSION":27,"COMPOSITION":28,"DEPENDENCY":29,"LINE":30,"DOTTED_LINE":31,"commentToken":32,"textToken":33,"graphCodeTokens":34,"textNoTagsToken":35,"TAGSTART":36,"TAGEND":37,"==":38,"--":39,"PCT":40,"DEFAULT":41,"SPACE":42,"MINUS":43,"keywords":44,"UNICODE_TEXT":45,"NUM":46,"ALPHA":47,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"CLASS_DIAGRAM",6:"NEWLINE",8:"EOF",13:"LABEL",16:"CLASS",17:"STRUCT_START",19:"STRUCT_STOP",20:"MEMBER",21:"SEPARATOR",23:"STR",26:"AGGREGATION",27:"EXTENSION",28:"COMPOSITION",29:"DEPENDENCY",30:"LINE",31:"DOTTED_LINE",34:"graphCodeTokens",36:"TAGSTART",37:"TAGEND",38:"==",39:"--",40:"PCT",41:"DEFAULT",42:"SPACE",43:"MINUS",44:"keywords",45:"UNICODE_TEXT",46:"NUM",47:"ALPHA"}, -productions_: [0,[3,1],[4,4],[7,1],[7,3],[10,2],[10,1],[9,1],[9,2],[9,1],[9,1],[14,2],[14,5],[18,1],[18,2],[15,1],[15,2],[15,1],[15,1],[12,3],[12,4],[12,4],[12,5],[22,3],[22,2],[22,2],[22,1],[24,1],[24,1],[24,1],[24,1],[25,1],[25,1],[32,1],[32,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[35,1],[35,1],[35,1],[35,1],[11,1],[11,1],[11,1]], -performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { + var parser = (function () { + var o = function (k, v, o, l) { for (o = o || {}, l = k.length; l--; o[k[l]] = v);return o }, $V0 = [1, 11], $V1 = [1, 12], $V2 = [1, 13], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [6, 8], $V7 = [1, 26], $V8 = [1, 27], $V9 = [1, 28], $Va = [1, 29], $Vb = [1, 30], $Vc = [1, 31], $Vd = [6, 8, 13, 17, 23, 26, 27, 28, 29, 30, 31], $Ve = [6, 8, 13, 17, 23, 26, 27, 28, 29, 30, 31, 45, 46, 47], $Vf = [23, 45, 46, 47], $Vg = [23, 30, 31, 45, 46, 47], $Vh = [23, 26, 27, 28, 29, 45, 46, 47], $Vi = [6, 8, 13], $Vj = [1, 46] + var parser = {trace: function trace () { }, + yy: {}, + symbols_: {'error': 2, 'mermaidDoc': 3, 'graphConfig': 4, 'CLASS_DIAGRAM': 5, 'NEWLINE': 6, 'statements': 7, 'EOF': 8, 'statement': 9, 'className': 10, 'alphaNumToken': 11, 'relationStatement': 12, 'LABEL': 13, 'classStatement': 14, 'methodStatement': 15, 'CLASS': 16, 'STRUCT_START': 17, 'members': 18, 'STRUCT_STOP': 19, 'MEMBER': 20, 'SEPARATOR': 21, 'relation': 22, 'STR': 23, 'relationType': 24, 'lineType': 25, 'AGGREGATION': 26, 'EXTENSION': 27, 'COMPOSITION': 28, 'DEPENDENCY': 29, 'LINE': 30, 'DOTTED_LINE': 31, 'commentToken': 32, 'textToken': 33, 'graphCodeTokens': 34, 'textNoTagsToken': 35, 'TAGSTART': 36, 'TAGEND': 37, '==': 38, '--': 39, 'PCT': 40, 'DEFAULT': 41, 'SPACE': 42, 'MINUS': 43, 'keywords': 44, 'UNICODE_TEXT': 45, 'NUM': 46, 'ALPHA': 47, '$accept': 0, '$end': 1}, + terminals_: {2: 'error', 5: 'CLASS_DIAGRAM', 6: 'NEWLINE', 8: 'EOF', 13: 'LABEL', 16: 'CLASS', 17: 'STRUCT_START', 19: 'STRUCT_STOP', 20: 'MEMBER', 21: 'SEPARATOR', 23: 'STR', 26: 'AGGREGATION', 27: 'EXTENSION', 28: 'COMPOSITION', 29: 'DEPENDENCY', 30: 'LINE', 31: 'DOTTED_LINE', 34: 'graphCodeTokens', 36: 'TAGSTART', 37: 'TAGEND', 38: '==', 39: '--', 40: 'PCT', 41: 'DEFAULT', 42: 'SPACE', 43: 'MINUS', 44: 'keywords', 45: 'UNICODE_TEXT', 46: 'NUM', 47: 'ALPHA'}, + productions_: [0, [3, 1], [4, 4], [7, 1], [7, 3], [10, 2], [10, 1], [9, 1], [9, 2], [9, 1], [9, 1], [14, 2], [14, 5], [18, 1], [18, 2], [15, 1], [15, 2], [15, 1], [15, 1], [12, 3], [12, 4], [12, 4], [12, 5], [22, 3], [22, 2], [22, 2], [22, 1], [24, 1], [24, 1], [24, 1], [24, 1], [25, 1], [25, 1], [32, 1], [32, 1], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1], [35, 1], [35, 1], [35, 1], [35, 1], [11, 1], [11, 1], [11, 1]], + performAction: function anonymous (yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ -var $0 = $$.length - 1; -switch (yystate) { -case 5: - this.$=$$[$0-1]+$$[$0]; -break; -case 6: - this.$=$$[$0]; -break; -case 7: - yy.addRelation($$[$0]); -break; -case 8: - $$[$0-1].title = yy.cleanupLabel($$[$0]); yy.addRelation($$[$0-1]); -break; -case 12: -/*console.log($$[$0-3],JSON.stringify($$[$0-1]));*/yy.addMembers($$[$0-3],$$[$0-1]); -break; -case 13: - this.$ = [$$[$0]]; -break; -case 14: - $$[$0].push($$[$0-1]);this.$=$$[$0]; -break; -case 15: -/*console.log('Rel found',$$[$0]);*/ -break; -case 16: -yy.addMembers($$[$0-1],yy.cleanupLabel($$[$0])); -break; -case 17: -console.warn('Member',$$[$0]); -break; -case 18: -/*console.log('sep found',$$[$0]);*/ -break; -case 19: - this.$ = {'id1':$$[$0-2],'id2':$$[$0], relation:$$[$0-1], relationTitle1:'none', relationTitle2:'none'}; -break; -case 20: - this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-1], relationTitle1:$$[$0-2], relationTitle2:'none'} -break; -case 21: - this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-2], relationTitle1:'none', relationTitle2:$$[$0-1]}; -break; -case 22: - this.$ = {id1:$$[$0-4], id2:$$[$0], relation:$$[$0-2], relationTitle1:$$[$0-3], relationTitle2:$$[$0-1]} -break; -case 23: - this.$={type1:$$[$0-2],type2:$$[$0],lineType:$$[$0-1]}; -break; -case 24: - this.$={type1:'none',type2:$$[$0],lineType:$$[$0-1]}; -break; -case 25: - this.$={type1:$$[$0-1],type2:'none',lineType:$$[$0]}; -break; -case 26: - this.$={type1:'none',type2:'none',lineType:$$[$0]}; -break; -case 27: - this.$=yy.relationType.AGGREGATION; -break; -case 28: - this.$=yy.relationType.EXTENSION; -break; -case 29: - this.$=yy.relationType.COMPOSITION; -break; -case 30: - this.$=yy.relationType.DEPENDENCY; -break; -case 31: -this.$=yy.lineType.LINE; -break; -case 32: -this.$=yy.lineType.DOTTED_LINE; -break; -} -}, -table: [{3:1,4:2,5:[1,3]},{1:[3]},{1:[2,1]},{6:[1,4]},{7:5,9:6,10:10,11:14,12:7,14:8,15:9,16:$V0,20:$V1,21:$V2,45:$V3,46:$V4,47:$V5},{8:[1,18]},{6:[1,19],8:[2,3]},o($V6,[2,7],{13:[1,20]}),o($V6,[2,9]),o($V6,[2,10]),o($V6,[2,15],{22:21,24:24,25:25,13:[1,23],23:[1,22],26:$V7,27:$V8,28:$V9,29:$Va,30:$Vb,31:$Vc}),{10:32,11:14,45:$V3,46:$V4,47:$V5},o($V6,[2,17]),o($V6,[2,18]),o($Vd,[2,6],{11:14,10:33,45:$V3,46:$V4,47:$V5}),o($Ve,[2,46]),o($Ve,[2,47]),o($Ve,[2,48]),{1:[2,2]},{7:34,9:6,10:10,11:14,12:7,14:8,15:9,16:$V0,20:$V1,21:$V2,45:$V3,46:$V4,47:$V5},o($V6,[2,8]),{10:35,11:14,23:[1,36],45:$V3,46:$V4,47:$V5},{22:37,24:24,25:25,26:$V7,27:$V8,28:$V9,29:$Va,30:$Vb,31:$Vc},o($V6,[2,16]),{25:38,30:$Vb,31:$Vc},o($Vf,[2,26],{24:39,26:$V7,27:$V8,28:$V9,29:$Va}),o($Vg,[2,27]),o($Vg,[2,28]),o($Vg,[2,29]),o($Vg,[2,30]),o($Vh,[2,31]),o($Vh,[2,32]),o($V6,[2,11],{17:[1,40]}),o($Vd,[2,5]),{8:[2,4]},o($Vi,[2,19]),{10:41,11:14,45:$V3,46:$V4,47:$V5},{10:42,11:14,23:[1,43],45:$V3,46:$V4,47:$V5},o($Vf,[2,25],{24:44,26:$V7,27:$V8,28:$V9,29:$Va}),o($Vf,[2,24]),{18:45,20:$Vj},o($Vi,[2,21]),o($Vi,[2,20]),{10:47,11:14,45:$V3,46:$V4,47:$V5},o($Vf,[2,23]),{19:[1,48]},{18:49,19:[2,13],20:$Vj},o($Vi,[2,22]),o($V6,[2,12]),{19:[2,14]}], -defaultActions: {2:[2,1],18:[2,2],34:[2,4],49:[2,14]}, -parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - function _parseError (msg, hash) { - this.message = msg; - this.hash = hash; - } - _parseError.prototype = Error; - - throw new _parseError(str, hash); - } -}, -parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - _token_stack: + var $0 = $$.length - 1 + switch (yystate) { + case 5: + this.$ = $$[$0 - 1] + $$[$0] + break + case 6: + this.$ = $$[$0] + break + case 7: + yy.addRelation($$[$0]) + break + case 8: + $$[$0 - 1].title = yy.cleanupLabel($$[$0]); yy.addRelation($$[$0 - 1]) + break + case 12: + /* console.log($$[$0-3],JSON.stringify($$[$0-1])); */yy.addMembers($$[$0 - 3], $$[$0 - 1]) + break + case 13: + this.$ = [$$[$0]] + break + case 14: + $$[$0].push($$[$0 - 1]); this.$ = $$[$0] + break + case 15: +/* console.log('Rel found',$$[$0]); */ + break + case 16: + yy.addMembers($$[$0 - 1], yy.cleanupLabel($$[$0])) + break + case 17: + console.warn('Member', $$[$0]) + break + case 18: +/* console.log('sep found',$$[$0]); */ + break + case 19: + this.$ = {'id1': $$[$0 - 2], 'id2': $$[$0], relation: $$[$0 - 1], relationTitle1: 'none', relationTitle2: 'none'} + break + case 20: + this.$ = {id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: 'none'} + break + case 21: + this.$ = {id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: 'none', relationTitle2: $$[$0 - 1]} + break + case 22: + this.$ = {id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1]} + break + case 23: + this.$ = {type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1]} + break + case 24: + this.$ = {type1: 'none', type2: $$[$0], lineType: $$[$0 - 1]} + break + case 25: + this.$ = {type1: $$[$0 - 1], type2: 'none', lineType: $$[$0]} + break + case 26: + this.$ = {type1: 'none', type2: 'none', lineType: $$[$0]} + break + case 27: + this.$ = yy.relationType.AGGREGATION + break + case 28: + this.$ = yy.relationType.EXTENSION + break + case 29: + this.$ = yy.relationType.COMPOSITION + break + case 30: + this.$ = yy.relationType.DEPENDENCY + break + case 31: + this.$ = yy.lineType.LINE + break + case 32: + this.$ = yy.lineType.DOTTED_LINE + break + } + }, + table: [{3: 1, 4: 2, 5: [1, 3]}, {1: [3]}, {1: [2, 1]}, {6: [1, 4]}, {7: 5, 9: 6, 10: 10, 11: 14, 12: 7, 14: 8, 15: 9, 16: $V0, 20: $V1, 21: $V2, 45: $V3, 46: $V4, 47: $V5}, {8: [1, 18]}, {6: [1, 19], 8: [2, 3]}, o($V6, [2, 7], {13: [1, 20]}), o($V6, [2, 9]), o($V6, [2, 10]), o($V6, [2, 15], {22: 21, 24: 24, 25: 25, 13: [1, 23], 23: [1, 22], 26: $V7, 27: $V8, 28: $V9, 29: $Va, 30: $Vb, 31: $Vc}), {10: 32, 11: 14, 45: $V3, 46: $V4, 47: $V5}, o($V6, [2, 17]), o($V6, [2, 18]), o($Vd, [2, 6], {11: 14, 10: 33, 45: $V3, 46: $V4, 47: $V5}), o($Ve, [2, 46]), o($Ve, [2, 47]), o($Ve, [2, 48]), {1: [2, 2]}, {7: 34, 9: 6, 10: 10, 11: 14, 12: 7, 14: 8, 15: 9, 16: $V0, 20: $V1, 21: $V2, 45: $V3, 46: $V4, 47: $V5}, o($V6, [2, 8]), {10: 35, 11: 14, 23: [1, 36], 45: $V3, 46: $V4, 47: $V5}, {22: 37, 24: 24, 25: 25, 26: $V7, 27: $V8, 28: $V9, 29: $Va, 30: $Vb, 31: $Vc}, o($V6, [2, 16]), {25: 38, 30: $Vb, 31: $Vc}, o($Vf, [2, 26], {24: 39, 26: $V7, 27: $V8, 28: $V9, 29: $Va}), o($Vg, [2, 27]), o($Vg, [2, 28]), o($Vg, [2, 29]), o($Vg, [2, 30]), o($Vh, [2, 31]), o($Vh, [2, 32]), o($V6, [2, 11], {17: [1, 40]}), o($Vd, [2, 5]), {8: [2, 4]}, o($Vi, [2, 19]), {10: 41, 11: 14, 45: $V3, 46: $V4, 47: $V5}, {10: 42, 11: 14, 23: [1, 43], 45: $V3, 46: $V4, 47: $V5}, o($Vf, [2, 25], {24: 44, 26: $V7, 27: $V8, 28: $V9, 29: $Va}), o($Vf, [2, 24]), {18: 45, 20: $Vj}, o($Vi, [2, 21]), o($Vi, [2, 20]), {10: 47, 11: 14, 45: $V3, 46: $V4, 47: $V5}, o($Vf, [2, 23]), {19: [1, 48]}, {18: 49, 19: [2, 13], 20: $Vj}, o($Vi, [2, 22]), o($V6, [2, 12]), {19: [2, 14]}], + defaultActions: {2: [2, 1], 18: [2, 2], 34: [2, 4], 49: [2, 14]}, + parseError: function parseError (str, hash) { + if (hash.recoverable) { + this.trace(str) + } else { + function _parseError (msg, hash) { + this.message = msg + this.hash = hash + } + _parseError.prototype = Error + + throw new _parseError(str, hash) + } + }, + parse: function parse (input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1 + var args = lstack.slice.call(arguments, 1) + var lexer = Object.create(this.lexer) + var sharedState = { yy: {} } + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k] + } + } + lexer.setInput(input, sharedState.yy) + sharedState.yy.lexer = lexer + sharedState.yy.parser = this + if (typeof lexer.yylloc === 'undefined') { + lexer.yylloc = {} + } + var yyloc = lexer.yylloc + lstack.push(yyloc) + var ranges = lexer.options && lexer.options.ranges + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError + } else { + this.parseError = Object.getPrototypeOf(this).parseError + } + function popStack (n) { + stack.length = stack.length - 2 * n + vstack.length = vstack.length - n + lstack.length = lstack.length - n + } + _token_stack: var lex = function () { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - }; - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; + var token + token = lexer.lex() || EOF + if (typeof token !== 'number') { + token = self.symbols_[token] || token + } + return token } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } - } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected + while (true) { + state = stack[stack.length - 1] + if (this.defaultActions[state]) { + action = this.defaultActions[state] } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + if (symbol === null || typeof symbol === 'undefined') { + symbol = lex() + } + action = table[state] && table[state][symbol] } - this.parseError(errStr, { + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = '' + expected = [] + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\'') + } + } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'' + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'') + } + this.parseError(errStr, { text: lexer.match, token: this.terminals_[symbol] || symbol, line: lexer.yylineno, loc: yyloc, expected: expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - if (recovering > 0) { - recovering--; + }) } - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -}}; + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol) + } + switch (action[0]) { + case 1: + stack.push(symbol) + vstack.push(lexer.yytext) + lstack.push(lexer.yylloc) + stack.push(action[1]) + symbol = null + if (!preErrorSymbol) { + yyleng = lexer.yyleng + yytext = lexer.yytext + yylineno = lexer.yylineno + yyloc = lexer.yylloc + if (recovering > 0) { + recovering-- + } + } else { + symbol = preErrorSymbol + preErrorSymbol = null + } + break + case 2: + len = this.productions_[action[1]][1] + yyval.$ = vstack[vstack.length - len] + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + } + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ] + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)) + if (typeof r !== 'undefined') { + return r + } + if (len) { + stack = stack.slice(0, -1 * len * 2) + vstack = vstack.slice(0, -1 * len) + lstack = lstack.slice(0, -1 * len) + } + stack.push(this.productions_[action[1]][0]) + vstack.push(yyval.$) + lstack.push(yyval._$) + newState = table[stack[stack.length - 2]][stack[stack.length - 1]] + stack.push(newState) + break + case 3: + return true + } + } + return true + }} /* generated by jison-lex 0.3.4 */ -var lexer = (function(){ -var lexer = ({ + var lexer = (function () { + var lexer = ({ -EOF:1, + EOF: 1, -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, + parseError: function parseError (str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash) + } else { + throw new Error(str) + } + }, // resets the lexer, sets new input -setInput:function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0,0]; - } - this.offset = 0; - return this; - }, + setInput: function (input, yy) { + this.yy = yy || this.yy || {} + this._input = input + this._more = this._backtrack = this.done = false + this.yylineno = this.yyleng = 0 + this.yytext = this.matched = this.match = '' + this.conditionStack = ['INITIAL'] + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + } + if (this.options.ranges) { + this.yylloc.range = [0, 0] + } + this.offset = 0 + return this + }, // consumes and returns one char from the input -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } + input: function () { + var ch = this._input[0] + this.yytext += ch + this.yyleng++ + this.offset++ + this.match += ch + this.matched += ch + var lines = ch.match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno++ + this.yylloc.last_line++ + } else { + this.yylloc.last_column++ + } + if (this.options.ranges) { + this.yylloc.range[1]++ + } - this._input = this._input.slice(1); - return ch; - }, + this._input = this._input.slice(1) + return ch + }, // unshifts one char (or a string) into the input -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) - + oldLines[oldLines.length - lines.length].length - lines[0].length : - this.yylloc.first_column - len - }; + unput: function (ch) { + var len = ch.length + var lines = ch.split(/(?:\r\n?|\n)/g) + + this._input = ch + this._input + this.yytext = this.yytext.substr(0, this.yytext.length - len) + // this.yyleng -= len; + this.offset -= len + var oldLines = this.match.split(/(?:\r\n?|\n)/g) + this.match = this.match.substr(0, this.match.length - 1) + this.matched = this.matched.substr(0, this.matched.length - 1) + + if (lines.length - 1) { + this.yylineno -= lines.length - 1 + } + var r = this.yylloc.range + + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines + ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + + oldLines[oldLines.length - lines.length].length - lines[0].length + : this.yylloc.first_column - len + } - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len] + } + this.yyleng = this.yytext.length + return this + }, // When called from action, caches matched text and appends it on next action -more:function () { - this._more = true; - return this; - }, + more: function () { + this._more = true + return this + }, // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. -reject:function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - - } - return this; - }, + reject: function () { + if (this.options.backtrack_lexer) { + this._backtrack = true + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + return this + }, // retain first n characters of the match -less:function (n) { - this.unput(this.match.slice(n)); - }, + less: function (n) { + this.unput(this.match.slice(n)) + }, // displays already matched input, i.e. for error messages -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, + pastInput: function () { + var past = this.matched.substr(0, this.matched.length - this.match.length) + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, '') + }, // displays upcoming input, i.e. for error messages -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, + upcomingInput: function () { + var next = this.match + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length) + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, '') + }, // displays the character position where the lexing error occurred, i.e. for error messages -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, + showPosition: function () { + var pre = this.pastInput() + var c = new Array(pre.length + 1).join('-') + return pre + this.upcomingInput() + '\n' + c + '^' + }, // test the lexed token: return FALSE when not a match, otherwise return token -test_match:function (match, indexed_rule) { - var token, - lines, - backup; + test_match: function (match, indexed_rule) { + var token, + lines, + backup - if (this.options.backtrack_lexer) { + if (this.options.backtrack_lexer) { // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? - lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : - this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + } + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0) + } + } + + lines = match[0].match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno += lines.length + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines + ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length + : this.yylloc.last_column + match[0].length + } + this.yytext += match[0] + this.match += match[0] + this.matches = match + this.yyleng = this.yytext.length + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng] + } + this._more = false + this._backtrack = false + this._input = this._input.slice(match[0].length) + this.matched += match[0] + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]) + if (this.done && this._input) { + this.done = false + } + if (token) { + return token + } else if (this._backtrack) { // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, + for (var k in backup) { + this[k] = backup[k] + } + return false // rule action called reject() implying the next rule should be tested instead. + } + return false + }, // return next match in input -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - - var token, - match, - tempMatch, - index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } else { + next: function () { + if (this.done) { + return this.EOF + } + if (!this._input) { + this.done = true + } + + var token, + match, + tempMatch, + index + if (!this._more) { + this.yytext = '' + this.match = '' + } + var rules = this._currentRules() + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]) + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch + index = i + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]) + if (token !== false) { + return token + } else if (this._backtrack) { + match = false + continue // rule action called reject() implying a rule MISmatch. + } else { // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; + return false + } + } else if (!this.options.flex) { + break } - } else if (!this.options.flex) { - break; + } } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } + if (match) { + token = this.test_match(match, rules[index]) + if (token !== false) { + return token + } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, + return false + } + if (this._input === '') { + return this.EOF + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + }, // return next match that has a token -lex:function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, + lex: function lex () { + var r = this.next() + if (r) { + return r + } else { + return this.lex() + } + }, // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) -begin:function begin(condition) { - this.conditionStack.push(condition); - }, + begin: function begin (condition) { + this.conditionStack.push(condition) + }, // pop the previously active lexer condition state off the condition stack -popState:function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, + popState: function popState () { + var n = this.conditionStack.length - 1 + if (n > 0) { + return this.conditionStack.pop() + } else { + return this.conditionStack[0] + } + }, // produce the lexer rule set which is active for the currently active lexer condition state -_currentRules:function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; + _currentRules: function _currentRules () { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules + } else { + return this.conditions['INITIAL'].rules + } + }, + +// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState (n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0) + if (n >= 0) { + return this.conditionStack[n] + } else { + return 'INITIAL' + } + }, + +// alias for begin(condition) + pushState: function pushState (condition) { + this.begin(condition) + }, + +// return the number of states currently on the stack + stateStackSize: function stateStackSize () { + return this.conditionStack.length + }, + options: {}, + performAction: function anonymous (yy, yy_, $avoiding_name_collisions, YY_START) { + var YYSTATE = YY_START + switch ($avoiding_name_collisions) { + case 0:/* do nothing */ + break + case 1:return 6 + break + case 2:/* skip whitespace */ + break + case 3:return 5 + break + case 4: this.begin('struct'); /* console.log('Starting struct'); */return 17 + break + case 5: /* console.log('Ending struct'); */this.popState(); return 19 + break + case 6:/* nothing */ + break + case 7: return 'MEMBER' + break + case 8:return 16 + break + case 9:this.begin('string') + break + case 10:this.popState() + break + case 11:return 'STR' + break + case 12:return 27 + break + case 13:return 27 + break + case 14:return 29 + break + case 15:return 29 + break + case 16:return 28 + break + case 17:return 26 + break + case 18:return 30 + break + case 19:return 31 + break + case 20:return 13 + break + case 21:return 43 + break + case 22:return 'DOT' + break + case 23:return 'PLUS' + break + case 24:return 40 + break + case 25:return 'EQUALS' + break + case 26:return 'EQUALS' + break + case 27:return 47 + break + case 28:return 'PUNCTUATION' + break + case 29:return 46 + break + case 30:return 45 + break + case 31:return 42 + break + case 32:return 8 + break + } + }, + rules: [/^(?:%%[^\n]*)/, /^(?:\n+)/, /^(?:\s+)/, /^(?:classDiagram\b)/, /^(?:[\{])/, /^(?:\})/, /^(?:[\n])/, /^(?:[^\{\}\n]*)/, /^(?:class\b)/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:--)/, /^(?:\.\.)/, /^(?::[^#\n;]+)/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:[A-Za-z]+)/, /^(?:[!"#$%&'*+,-.`?\\_\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:$)/], + conditions: {'string': {'rules': [10, 11], 'inclusive': false}, 'struct': {'rules': [5, 6, 7], 'inclusive': false}, 'INITIAL': {'rules': [0, 1, 2, 3, 4, 8, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], 'inclusive': true}} + }) + return lexer + })() + parser.lexer = lexer + function Parser () { + this.yy = {} + } + Parser.prototype = parser; parser.Parser = Parser + return new Parser() + })() + + if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { + exports.parser = parser + exports.Parser = parser.Parser + exports.parse = function () { return parser.parse.apply(parser, arguments) } + exports.main = function commonjsMain (args) { + if (!args[1]) { + console.log('Usage: ' + args[0] + ' FILE') + process.exit(1) + } + var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), 'utf8') + return exports.parser.parse(source) + } + if (typeof module !== 'undefined' && _dereq_.main === module) { + exports.main(process.argv.slice(1)) + } + } + }).call(this, _dereq_('1YiZ5S')) + }, {'1YiZ5S': 104, 'fs': 102, 'path': 103}], + 113: [function (_dereq_, module, exports) { + (function (global) { +/** + * Created by knut on 15-01-14. + */ + var Logger = _dereq_('../../logger') + var log = new Logger.Log() + + var message = '' + var info = false + + exports.setMessage = function (txt) { + log.debug('Setting message to: ' + txt) + message = txt + } + + exports.getMessage = function () { + return message } - }, -// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available -topState:function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; + exports.setInfo = function (inf) { + info = inf } - }, -// alias for begin(condition) -pushState:function pushState(condition) { - this.begin(condition); - }, + exports.getInfo = function () { + return info + } -// return the number of states currently on the stack -stateStackSize:function stateStackSize() { - return this.conditionStack.length; - }, -options: {}, -performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { -var YYSTATE=YY_START; -switch($avoiding_name_collisions) { -case 0:/* do nothing */ -break; -case 1:return 6; -break; -case 2:/* skip whitespace */ -break; -case 3:return 5; -break; -case 4: this.begin("struct"); /*console.log('Starting struct');*/return 17; -break; -case 5: /*console.log('Ending struct');*/this.popState(); return 19; -break; -case 6:/* nothing */ -break; -case 7: /*console.log('lex-member: ' + yy_.yytext);*/ return "MEMBER"; -break; -case 8:return 16; -break; -case 9:this.begin("string"); -break; -case 10:this.popState(); -break; -case 11:return "STR"; -break; -case 12:return 27; -break; -case 13:return 27; -break; -case 14:return 29; -break; -case 15:return 29; -break; -case 16:return 28; -break; -case 17:return 26; -break; -case 18:return 30; -break; -case 19:return 31; -break; -case 20:return 13; -break; -case 21:return 43; -break; -case 22:return 'DOT'; -break; -case 23:return 'PLUS'; -break; -case 24:return 40; -break; -case 25:return 'EQUALS'; -break; -case 26:return 'EQUALS'; -break; -case 27:return 47; -break; -case 28:return 'PUNCTUATION'; -break; -case 29:return 46; -break; -case 30:return 45; -break; -case 31:return 42; -break; -case 32:return 8; -break; -} -}, -rules: [/^(?:%%[^\n]*)/,/^(?:\n+)/,/^(?:\s+)/,/^(?:classDiagram\b)/,/^(?:[\{])/,/^(?:\})/,/^(?:[\n])/,/^(?:[^\{\}\n]*)/,/^(?:class\b)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::[^#\n;]+)/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!"#$%&'*+,-.`?\\_\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/], -conditions: {"string":{"rules":[10,11],"inclusive":false},"struct":{"rules":[5,6,7],"inclusive":false},"INITIAL":{"rules":[0,1,2,3,4,8,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"inclusive":true}} -}); -return lexer; -})(); -parser.lexer = lexer; -function Parser () { - this.yy = {}; -} -Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})(); - - -if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; -exports.main = function commonjsMain(args) { - if (!args[1]) { - console.log('Usage: '+args[0]+' FILE'); - process.exit(1); - } - var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), "utf8"); - return exports.parser.parse(source); -}; -if (typeof module !== 'undefined' && _dereq_.main === module) { - exports.main(process.argv.slice(1)); -} -} -}).call(this,_dereq_("1YiZ5S")) -},{"1YiZ5S":104,"fs":102,"path":103}],113:[function(_dereq_,module,exports){ -(function (global){ -/** - * Created by knut on 15-01-14. - */ -var Logger = _dereq_('../../logger'); -var log = new Logger.Log(); - -var message = ''; -var info = false; - -exports.setMessage = function(txt){ - log.debug('Setting message to: '+txt); - message = txt; -}; - -exports.getMessage = function(){ - return message; -}; - -exports.setInfo = function(inf){ - info = inf; -}; - -exports.getInfo = function(){ - return info; -}; - -exports.parseError = function(err,hash){ - global.mermaidAPI.parseError(err,hash); -}; -}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../logger":132}],114:[function(_dereq_,module,exports){ + exports.parseError = function (err, hash) { + global.mermaidAPI.parseError(err, hash) + } + }).call(this, typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}) + }, {'../../logger': 132}], + 114: [function (_dereq_, module, exports) { /** * Created by knut on 14-12-11. */ -var db = _dereq_('./exampleDb'); -var exampleParser = _dereq_('./parser/example.js'); -var d3 = _dereq_('../../d3'); -var Logger = _dereq_('../../logger'); -var log = new Logger.Log(); + var db = _dereq_('./exampleDb') + var exampleParser = _dereq_('./parser/example.js') + var d3 = _dereq_('../../d3') + var Logger = _dereq_('../../logger') + var log = new Logger.Log() /** * Draws a an info picture in the tag with id: id based on the graph definition in text. * @param text * @param id */ -exports.draw = function (txt, id, ver) { - var parser; - parser = exampleParser.parser; - parser.yy = db; - log.debug('Renering example diagram'); + exports.draw = function (txt, id, ver) { + var parser + parser = exampleParser.parser + parser.yy = db + log.debug('Renering example diagram') // Parse the graph definition - parser.parse(txt); + parser.parse(txt) // Fetch the default direction, use TD if none was found - var svg = d3.select('#'+id); + var svg = d3.select('#' + id) - var g = svg.append('g'); + var g = svg.append('g') - g.append('text') // text label for the x axis + g.append('text') // text label for the x axis .attr('x', 100) .attr('y', 40) - .attr('class','version') - .attr('font-size','32px') + .attr('class', 'version') + .attr('font-size', '32px') .style('text-anchor', 'middle') - .text('mermaid '+ ver); + .text('mermaid ' + ver) /* var box = exports.bounds.getBounds(); var height = box.stopy-box.starty+2*conf.diagramMarginY; - var width = box.stopx-box.startx+2*conf.diagramMarginX;*/ - - svg.attr('height',100); - svg.attr('width', 400 ); - //svg.attr('viewBox', '0 0 300 150'); -}; -},{"../../d3":109,"../../logger":132,"./exampleDb":113,"./parser/example.js":115}],115:[function(_dereq_,module,exports){ -(function (process){ + var width = box.stopx-box.startx+2*conf.diagramMarginX; */ + + svg.attr('height', 100) + svg.attr('width', 400) + // svg.attr('viewBox', '0 0 300 150'); + } + }, {'../../d3': 109, '../../logger': 132, './exampleDb': 113, './parser/example.js': 115}], + 115: [function (_dereq_, module, exports) { + (function (process) { /* parser generated by jison 0.4.17 */ /* Returns a Parser object of the following structure: @@ -50255,7 +50395,6 @@ exports.draw = function (txt, id, ver) { } } - token location info (@$, _$, etc.): { first_line: n, last_line: n, @@ -50264,7 +50403,6 @@ exports.draw = function (txt, id, ver) { range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) } - the parseError function receives a 'hash' object with these members for lexer and parser errors: { text: (matched text) token: (the produced terminal token, if any) @@ -50276,930 +50414,916 @@ exports.draw = function (txt, id, ver) { recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) } */ -var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,9,10,12]; -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"start":3,"info":4,"document":5,"EOF":6,"line":7,"statement":8,"NL":9,"showInfo":10,"message":11,"say":12,"TXT":13,"$accept":0,"$end":1}, -terminals_: {2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo",12:"say",13:"TXT"}, -productions_: [0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1],[8,1],[11,2]], -performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { + var parser = (function () { + var o = function (k, v, o, l) { for (o = o || {}, l = k.length; l--; o[k[l]] = v);return o }, $V0 = [6, 9, 10, 12] + var parser = {trace: function trace () { }, + yy: {}, + symbols_: {'error': 2, 'start': 3, 'info': 4, 'document': 5, 'EOF': 6, 'line': 7, 'statement': 8, 'NL': 9, 'showInfo': 10, 'message': 11, 'say': 12, 'TXT': 13, '$accept': 0, '$end': 1}, + terminals_: {2: 'error', 4: 'info', 6: 'EOF', 9: 'NL', 10: 'showInfo', 12: 'say', 13: 'TXT'}, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 1], [7, 1], [8, 1], [8, 1], [11, 2]], + performAction: function anonymous (yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ -var $0 = $$.length - 1; -switch (yystate) { -case 1: - return yy; -break; -case 4: - -break; -case 6: - yy.setInfo(true); -break; -case 7: - yy.setMessage($$[$0]); -break; -case 8: - this.$ = $$[$0-1].substring(1).trim().replace(/\\n/gm, "\n"); -break; -} -}, -table: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8],11:9,12:[1,10]},{1:[2,1]},o($V0,[2,3]),o($V0,[2,4]),o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,7]),{13:[1,11]},o($V0,[2,8])], -defaultActions: {4:[2,1]}, -parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - function _parseError (msg, hash) { - this.message = msg; - this.hash = hash; - } - _parseError.prototype = Error; - - throw new _parseError(str, hash); - } -}, -parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - _token_stack: + var $0 = $$.length - 1 + switch (yystate) { + case 1: + return yy + break + case 4: + + break + case 6: + yy.setInfo(true) + break + case 7: + yy.setMessage($$[$0]) + break + case 8: + this.$ = $$[$0 - 1].substring(1).trim().replace(/\\n/gm, '\n') + break + } + }, + table: [{3: 1, 4: [1, 2]}, {1: [3]}, o($V0, [2, 2], {5: 3}), {6: [1, 4], 7: 5, 8: 6, 9: [1, 7], 10: [1, 8], 11: 9, 12: [1, 10]}, {1: [2, 1]}, o($V0, [2, 3]), o($V0, [2, 4]), o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 7]), {13: [1, 11]}, o($V0, [2, 8])], + defaultActions: {4: [2, 1]}, + parseError: function parseError (str, hash) { + if (hash.recoverable) { + this.trace(str) + } else { + function _parseError (msg, hash) { + this.message = msg + this.hash = hash + } + _parseError.prototype = Error + + throw new _parseError(str, hash) + } + }, + parse: function parse (input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1 + var args = lstack.slice.call(arguments, 1) + var lexer = Object.create(this.lexer) + var sharedState = { yy: {} } + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k] + } + } + lexer.setInput(input, sharedState.yy) + sharedState.yy.lexer = lexer + sharedState.yy.parser = this + if (typeof lexer.yylloc === 'undefined') { + lexer.yylloc = {} + } + var yyloc = lexer.yylloc + lstack.push(yyloc) + var ranges = lexer.options && lexer.options.ranges + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError + } else { + this.parseError = Object.getPrototypeOf(this).parseError + } + function popStack (n) { + stack.length = stack.length - 2 * n + vstack.length = vstack.length - n + lstack.length = lstack.length - n + } + _token_stack: var lex = function () { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - }; - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; + var token + token = lexer.lex() || EOF + if (typeof token !== 'number') { + token = self.symbols_[token] || token + } + return token } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } - } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected + while (true) { + state = stack[stack.length - 1] + if (this.defaultActions[state]) { + action = this.defaultActions[state] } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + if (symbol === null || typeof symbol === 'undefined') { + symbol = lex() + } + action = table[state] && table[state][symbol] } - this.parseError(errStr, { + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = '' + expected = [] + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\'') + } + } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'' + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'') + } + this.parseError(errStr, { text: lexer.match, token: this.terminals_[symbol] || symbol, line: lexer.yylineno, loc: yyloc, expected: expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - if (recovering > 0) { - recovering--; + }) } - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -}}; + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol) + } + switch (action[0]) { + case 1: + stack.push(symbol) + vstack.push(lexer.yytext) + lstack.push(lexer.yylloc) + stack.push(action[1]) + symbol = null + if (!preErrorSymbol) { + yyleng = lexer.yyleng + yytext = lexer.yytext + yylineno = lexer.yylineno + yyloc = lexer.yylloc + if (recovering > 0) { + recovering-- + } + } else { + symbol = preErrorSymbol + preErrorSymbol = null + } + break + case 2: + len = this.productions_[action[1]][1] + yyval.$ = vstack[vstack.length - len] + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + } + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ] + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)) + if (typeof r !== 'undefined') { + return r + } + if (len) { + stack = stack.slice(0, -1 * len * 2) + vstack = vstack.slice(0, -1 * len) + lstack = lstack.slice(0, -1 * len) + } + stack.push(this.productions_[action[1]][0]) + vstack.push(yyval.$) + lstack.push(yyval._$) + newState = table[stack[stack.length - 2]][stack[stack.length - 1]] + stack.push(newState) + break + case 3: + return true + } + } + return true + }} /* generated by jison-lex 0.3.4 */ -var lexer = (function(){ -var lexer = ({ + var lexer = (function () { + var lexer = ({ -EOF:1, + EOF: 1, -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, + parseError: function parseError (str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash) + } else { + throw new Error(str) + } + }, // resets the lexer, sets new input -setInput:function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0,0]; - } - this.offset = 0; - return this; - }, + setInput: function (input, yy) { + this.yy = yy || this.yy || {} + this._input = input + this._more = this._backtrack = this.done = false + this.yylineno = this.yyleng = 0 + this.yytext = this.matched = this.match = '' + this.conditionStack = ['INITIAL'] + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + } + if (this.options.ranges) { + this.yylloc.range = [0, 0] + } + this.offset = 0 + return this + }, // consumes and returns one char from the input -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } + input: function () { + var ch = this._input[0] + this.yytext += ch + this.yyleng++ + this.offset++ + this.match += ch + this.matched += ch + var lines = ch.match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno++ + this.yylloc.last_line++ + } else { + this.yylloc.last_column++ + } + if (this.options.ranges) { + this.yylloc.range[1]++ + } - this._input = this._input.slice(1); - return ch; - }, + this._input = this._input.slice(1) + return ch + }, // unshifts one char (or a string) into the input -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) - + oldLines[oldLines.length - lines.length].length - lines[0].length : - this.yylloc.first_column - len - }; + unput: function (ch) { + var len = ch.length + var lines = ch.split(/(?:\r\n?|\n)/g) + + this._input = ch + this._input + this.yytext = this.yytext.substr(0, this.yytext.length - len) + // this.yyleng -= len; + this.offset -= len + var oldLines = this.match.split(/(?:\r\n?|\n)/g) + this.match = this.match.substr(0, this.match.length - 1) + this.matched = this.matched.substr(0, this.matched.length - 1) + + if (lines.length - 1) { + this.yylineno -= lines.length - 1 + } + var r = this.yylloc.range + + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines + ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + + oldLines[oldLines.length - lines.length].length - lines[0].length + : this.yylloc.first_column - len + } - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len] + } + this.yyleng = this.yytext.length + return this + }, // When called from action, caches matched text and appends it on next action -more:function () { - this._more = true; - return this; - }, + more: function () { + this._more = true + return this + }, // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. -reject:function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - - } - return this; - }, + reject: function () { + if (this.options.backtrack_lexer) { + this._backtrack = true + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + return this + }, // retain first n characters of the match -less:function (n) { - this.unput(this.match.slice(n)); - }, + less: function (n) { + this.unput(this.match.slice(n)) + }, // displays already matched input, i.e. for error messages -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, + pastInput: function () { + var past = this.matched.substr(0, this.matched.length - this.match.length) + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, '') + }, // displays upcoming input, i.e. for error messages -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, + upcomingInput: function () { + var next = this.match + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length) + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, '') + }, // displays the character position where the lexing error occurred, i.e. for error messages -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, + showPosition: function () { + var pre = this.pastInput() + var c = new Array(pre.length + 1).join('-') + return pre + this.upcomingInput() + '\n' + c + '^' + }, // test the lexed token: return FALSE when not a match, otherwise return token -test_match:function (match, indexed_rule) { - var token, - lines, - backup; + test_match: function (match, indexed_rule) { + var token, + lines, + backup - if (this.options.backtrack_lexer) { + if (this.options.backtrack_lexer) { // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? - lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : - this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + } + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0) + } + } + + lines = match[0].match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno += lines.length + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines + ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length + : this.yylloc.last_column + match[0].length + } + this.yytext += match[0] + this.match += match[0] + this.matches = match + this.yyleng = this.yytext.length + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng] + } + this._more = false + this._backtrack = false + this._input = this._input.slice(match[0].length) + this.matched += match[0] + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]) + if (this.done && this._input) { + this.done = false + } + if (token) { + return token + } else if (this._backtrack) { // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, + for (var k in backup) { + this[k] = backup[k] + } + return false // rule action called reject() implying the next rule should be tested instead. + } + return false + }, // return next match in input -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - - var token, - match, - tempMatch, - index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } else { + next: function () { + if (this.done) { + return this.EOF + } + if (!this._input) { + this.done = true + } + + var token, + match, + tempMatch, + index + if (!this._more) { + this.yytext = '' + this.match = '' + } + var rules = this._currentRules() + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]) + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch + index = i + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]) + if (token !== false) { + return token + } else if (this._backtrack) { + match = false + continue // rule action called reject() implying a rule MISmatch. + } else { // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; + return false + } + } else if (!this.options.flex) { + break } - } else if (!this.options.flex) { - break; + } } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } + if (match) { + token = this.test_match(match, rules[index]) + if (token !== false) { + return token + } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, + return false + } + if (this._input === '') { + return this.EOF + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + }, // return next match that has a token -lex:function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, + lex: function lex () { + var r = this.next() + if (r) { + return r + } else { + return this.lex() + } + }, // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) -begin:function begin(condition) { - this.conditionStack.push(condition); - }, + begin: function begin (condition) { + this.conditionStack.push(condition) + }, // pop the previously active lexer condition state off the condition stack -popState:function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, + popState: function popState () { + var n = this.conditionStack.length - 1 + if (n > 0) { + return this.conditionStack.pop() + } else { + return this.conditionStack[0] + } + }, // produce the lexer rule set which is active for the currently active lexer condition state -_currentRules:function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, + _currentRules: function _currentRules () { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules + } else { + return this.conditions['INITIAL'].rules + } + }, // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available -topState:function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, + topState: function topState (n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0) + if (n >= 0) { + return this.conditionStack[n] + } else { + return 'INITIAL' + } + }, // alias for begin(condition) -pushState:function pushState(condition) { - this.begin(condition); - }, + pushState: function pushState (condition) { + this.begin(condition) + }, // return the number of states currently on the stack -stateStackSize:function stateStackSize() { - return this.conditionStack.length; - }, -options: {"case-insensitive":true}, -performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { + stateStackSize: function stateStackSize () { + return this.conditionStack.length + }, + options: {'case-insensitive': true}, + performAction: function anonymous (yy, yy_, $avoiding_name_collisions, YY_START) { // Pre-lexer code can go here -var YYSTATE=YY_START; -switch($avoiding_name_collisions) { -case 0:return 9; -break; -case 1:return 10; -break; -case 2:return 4; -break; -case 3:return 12; -break; -case 4:return 13; -break; -case 5:return 6; -break; -case 6:return 'INVALID'; -break; -} -}, -rules: [/^(?:[\n]+)/i,/^(?:showInfo\b)/i,/^(?:info\b)/i,/^(?:say\b)/i,/^(?::[^#\n;]+)/i,/^(?:$)/i,/^(?:.)/i], -conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6],"inclusive":true}} -}); -return lexer; -})(); -parser.lexer = lexer; -function Parser () { - this.yy = {}; -} -Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})(); - - -if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; -exports.main = function commonjsMain(args) { - if (!args[1]) { - console.log('Usage: '+args[0]+' FILE'); - process.exit(1); - } - var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), "utf8"); - return exports.parser.parse(source); -}; -if (typeof module !== 'undefined' && _dereq_.main === module) { - exports.main(process.argv.slice(1)); -} -} -}).call(this,_dereq_("1YiZ5S")) -},{"1YiZ5S":104,"fs":102,"path":103}],116:[function(_dereq_,module,exports){ + var YYSTATE = YY_START + switch ($avoiding_name_collisions) { + case 0:return 9 + break + case 1:return 10 + break + case 2:return 4 + break + case 3:return 12 + break + case 4:return 13 + break + case 5:return 6 + break + case 6:return 'INVALID' + break + } + }, + rules: [/^(?:[\n]+)/i, /^(?:showInfo\b)/i, /^(?:info\b)/i, /^(?:say\b)/i, /^(?::[^#\n;]+)/i, /^(?:$)/i, /^(?:.)/i], + conditions: {'INITIAL': {'rules': [0, 1, 2, 3, 4, 5, 6], 'inclusive': true}} + }) + return lexer + })() + parser.lexer = lexer + function Parser () { + this.yy = {} + } + Parser.prototype = parser; parser.Parser = Parser + return new Parser() + })() + + if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { + exports.parser = parser + exports.Parser = parser.Parser + exports.parse = function () { return parser.parse.apply(parser, arguments) } + exports.main = function commonjsMain (args) { + if (!args[1]) { + console.log('Usage: ' + args[0] + ' FILE') + process.exit(1) + } + var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), 'utf8') + return exports.parser.parse(source) + } + if (typeof module !== 'undefined' && _dereq_.main === module) { + exports.main(process.argv.slice(1)) + } + } + }).call(this, _dereq_('1YiZ5S')) + }, {'1YiZ5S': 104, 'fs': 102, 'path': 103}], + 116: [function (_dereq_, module, exports) { /* global window */ -var Logger = _dereq_('../../logger'); -var log = new Logger.Log(); + var Logger = _dereq_('../../logger') + var log = new Logger.Log() -var dagreD3; -//log.debug('setting up dagre-d3'); -if (_dereq_) { - try { - dagreD3 = _dereq_('dagre-d3'); - //log.debug('Got it (dagre-d3)'); - } catch (e) {log.debug('Could not load dagre-d3');} -} - -if (!dagreD3) { - dagreD3 = window.dagreD3; -} + var dagreD3 +// log.debug('setting up dagre-d3'); + if (_dereq_) { + try { + dagreD3 = _dereq_('dagre-d3') + // log.debug('Got it (dagre-d3)'); + } catch (e) { log.debug('Could not load dagre-d3') } + } -module.exports = dagreD3; + if (!dagreD3) { + dagreD3 = window.dagreD3 + } -},{"../../logger":132,"dagre-d3":2}],117:[function(_dereq_,module,exports){ + module.exports = dagreD3 + }, {'../../logger': 132, 'dagre-d3': 2}], + 117: [function (_dereq_, module, exports) { /** * Created by knut on 14-12-11. */ -var graph = _dereq_('./graphDb'); -var flow = _dereq_('./parser/flow'); -var dot = _dereq_('./parser/dot'); -var d3 = _dereq_('../../d3'); -var dagreD3 = _dereq_('./dagre-d3'); -var Logger = _dereq_('../../logger'); -var log = new Logger.Log(); - - -var conf = { -}; -module.exports.setConf = function(cnf){ - var keys = Object.keys(cnf); - var i; - for(i=0;i0){ - classStr = vertice.classes.join(' '); - } + if (vertice.classes.length > 0) { + classStr = vertice.classes.join(' ') + } /** * Variable for storing the extracted style for the vertice * @type {string} */ - var style = ''; + var style = '' // Create a compound style definition from the style definitions found for the node in the graph definition - style = styleFromStyleArr(style, vertice.styles); + style = styleFromStyleArr(style, vertice.styles) // Use vertice id as text in the box if no text is provided by the graph definition - if (typeof vertice.text === 'undefined') { - verticeText = vertice.id; - } - else { - verticeText = vertice.text; - } - - - - var labelTypeStr = ''; - if(conf.htmlLabels) { - labelTypeStr = 'html'; - verticeText = verticeText.replace(/fa:fa[\w\-]+/g,function(s){ - return ''; - }); - - } else { - var svg_label = document.createElementNS('http://www.w3.org/2000/svg', 'text'); - - var rows = verticeText.split(/
/); + if (typeof vertice.text === 'undefined') { + verticeText = vertice.id + } else { + verticeText = vertice.text + } - var j = 0; - for(j=0;j' + }) + } else { + var svg_label = document.createElementNS('http://www.w3.org/2000/svg', 'text') + + var rows = verticeText.split(/
/) + + var j = 0 + for (j = 0; j < rows.length; j++) { + var tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan') + tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve') + tspan.setAttribute('dy', '1em') + tspan.setAttribute('x', '1') + tspan.textContent = rows[j] + svg_label.appendChild(tspan) } - labelTypeStr = 'svg'; - verticeText = svg_label; + labelTypeStr = 'svg' + verticeText = svg_label + // verticeText = verticeText.replace(//g, '\n'); + // labelTypeStr = 'text'; + } - //verticeText = verticeText.replace(//g, '\n'); - //labelTypeStr = 'text'; - } - - var radious = 0; - var _shape = ''; + var radious = 0 + var _shape = '' // Set the shape based parameters - switch(vertice.type){ + switch (vertice.type) { case 'round': - radious = 5; - _shape = 'rect'; - break; + radious = 5 + _shape = 'rect' + break case 'square': - _shape = 'rect'; - break; + _shape = 'rect' + break case 'diamond': - _shape = 'question'; - break; + _shape = 'question' + break case 'odd': - _shape = 'rect_left_inv_arrow'; - break; + _shape = 'rect_left_inv_arrow' + break case 'odd_right': - _shape = 'rect_left_inv_arrow'; - break; + _shape = 'rect_left_inv_arrow' + break case 'circle': - _shape = 'circle'; - break; + _shape = 'circle' + break case 'ellipse': - _shape = 'ellipse'; - break; + _shape = 'ellipse' + break case 'group': - _shape = 'rect'; - verticeText = ''; - break; + _shape = 'rect' + verticeText = '' + break default: - _shape = 'rect'; - } + _shape = 'rect' + } // Add the node - g.setNode(vertice.id, {labelType: labelTypeStr, shape:_shape, label: verticeText, rx: radious, ry: radious, 'class': classStr, style: style, id:vertice.id}); - }); -}; + g.setNode(vertice.id, {labelType: labelTypeStr, shape: _shape, label: verticeText, rx: radious, ry: radious, 'class': classStr, style: style, id: vertice.id}) + }) + } /** * Add edges to graph based on parsed graph defninition * @param {Object} edges The edges to add to the graph * @param {Object} g The graph object */ -exports.addEdges = function (edges, g) { - var cnt=0; - - var defaultStyle; - if(typeof edges.defaultStyle !== 'undefined'){ - defaultStyle = edges.defaultStyle.toString().replace(/,/g , ';'); - } + exports.addEdges = function (edges, g) { + var cnt = 0 + + var defaultStyle + if (typeof edges.defaultStyle !== 'undefined') { + defaultStyle = edges.defaultStyle.toString().replace(/,/g, ';') + } - edges.forEach(function (edge) { - cnt++; - var edgeData = {}; + edges.forEach(function (edge) { + cnt++ + var edgeData = {} // Set link type for rendering - if(edge.type === 'arrow_open'){ - edgeData.arrowhead = 'none'; - } - else{ - edgeData.arrowhead = 'normal'; - } + if (edge.type === 'arrow_open') { + edgeData.arrowhead = 'none' + } else { + edgeData.arrowhead = 'normal' + } - var style = ''; + var style = '' + if (typeof edge.style !== 'undefined') { + edge.style.forEach(function (s) { + style = style + s + ';' + }) + } else { + switch (edge.stroke) { + case 'normal': + style = 'fill:none' + if (typeof defaultStyle !== 'undefined') { + style = defaultStyle + } + break + case 'dotted': + style = 'stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;' + break + case 'thick': + style = 'stroke: #333; stroke-width: 3.5px;fill:none' + break + } + } + edgeData.style = style - if(typeof edge.style !== 'undefined'){ - edge.style.forEach(function(s){ - style = style + s +';'; - }); - } - else{ - switch(edge.stroke){ - case 'normal': - style = 'fill:none'; - if(typeof defaultStyle !== 'undefined'){ - style = defaultStyle; - } - break; - case 'dotted': - style = 'stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;'; - break; - case 'thick': - style = 'stroke: #333; stroke-width: 3.5px;fill:none'; - break; - } - } - edgeData.style = style; - - if (typeof edge.interpolate !== 'undefined') { - edgeData.lineInterpolate = edge.interpolate; - } else { + if (typeof edge.interpolate !== 'undefined') { + edgeData.lineInterpolate = edge.interpolate + } else { if (typeof edges.defaultInterpolate !== 'undefined') { - edgeData.lineInterpolate = edges.defaultInterpolate; + edgeData.lineInterpolate = edges.defaultInterpolate } - } + } - if (typeof edge.text === 'undefined') { + if (typeof edge.text === 'undefined') { if (typeof edge.style !== 'undefined') { - edgeData.arrowheadStyle = 'fill: #333'; + edgeData.arrowheadStyle = 'fill: #333' } - } else { - edgeData.arrowheadStyle = 'fill: #333'; - if(typeof edge.style === 'undefined') { - edgeData.labelpos = 'c'; - if (conf.htmlLabels) { - edgeData.labelType = 'html'; - edgeData.label = ''+edge.text+''; - } else { - edgeData.labelType = 'text'; - edgeData.style = 'stroke: #333; stroke-width: 1.5px;fill:none'; - edgeData.label = edge.text.replace(/
/g, '\n'); - } - } else { - edgeData.label = edge.text.replace(/
/g, '\n'); + } else { + edgeData.arrowheadStyle = 'fill: #333' + if (typeof edge.style === 'undefined') { + edgeData.labelpos = 'c' + if (conf.htmlLabels) { + edgeData.labelType = 'html' + edgeData.label = '' + edge.text + '' + } else { + edgeData.labelType = 'text' + edgeData.style = 'stroke: #333; stroke-width: 1.5px;fill:none' + edgeData.label = edge.text.replace(/
/g, '\n') + } + } else { + edgeData.label = edge.text.replace(/
/g, '\n') } - } + } // Add the edge to the graph - g.setEdge(edge.start, edge.end, edgeData, cnt); - }); -}; + g.setEdge(edge.start, edge.end, edgeData, cnt) + }) + } /** * Returns the all the styles from classDef statements in the graph definition. * @returns {object} classDef styles */ -exports.getClasses = function (text, isDot) { - var parser; - graph.clear(); - if(isDot){ - parser = dot.parser; - - }else{ - parser = flow.parser; - } - parser.yy = graph; + exports.getClasses = function (text, isDot) { + var parser + graph.clear() + if (isDot) { + parser = dot.parser + } else { + parser = flow.parser + } + parser.yy = graph // Parse the graph definition - parser.parse(text); + parser.parse(text) - var classes = graph.getClasses(); + var classes = graph.getClasses() // Add default class if undefined - if(typeof(classes.default) === 'undefined') { - classes.default = {id:'default'}; - //classes.default.styles = ['fill:#ffa','stroke:#666','stroke-width:3px']; - classes.default.styles = []; - classes.default.clusterStyles = ['rx:4px','fill: rgb(255, 255, 222)','rx: 4px','stroke: rgb(170, 170, 51)','stroke-width: 1px']; - classes.default.nodeLabelStyles = ['fill:#000','stroke:none','font-weight:300','font-family:"Helvetica Neue",Helvetica,Arial,sans-serf','font-size:14px']; - classes.default.edgeLabelStyles = ['fill:#000','stroke:none','font-weight:300','font-family:"Helvetica Neue",Helvetica,Arial,sans-serf','font-size:14px']; - } - return classes; -}; + if (typeof (classes.default) === 'undefined') { + classes.default = {id: 'default'} + // classes.default.styles = ['fill:#ffa','stroke:#666','stroke-width:3px']; + classes.default.styles = [] + classes.default.clusterStyles = ['rx:4px', 'fill: rgb(255, 255, 222)', 'rx: 4px', 'stroke: rgb(170, 170, 51)', 'stroke-width: 1px'] + classes.default.nodeLabelStyles = ['fill:#000', 'stroke:none', 'font-weight:300', 'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf', 'font-size:14px'] + classes.default.edgeLabelStyles = ['fill:#000', 'stroke:none', 'font-weight:300', 'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf', 'font-size:14px'] + } + return classes + } /** * Draws a flowchart in the tag with id: id based on the graph definition in text. * @param text * @param id */ -exports.draw = function (text, id,isDot) { - log.debug('Drawing flowchart'); - var parser; - graph.clear(); - if(isDot){ - parser = dot.parser; - - }else{ - parser = flow.parser; - } - parser.yy = graph; + exports.draw = function (text, id, isDot) { + log.debug('Drawing flowchart') + var parser + graph.clear() + if (isDot) { + parser = dot.parser + } else { + parser = flow.parser + } + parser.yy = graph // Parse the graph definition - try{ - - parser.parse(text); - } - catch(err){ - log.debug('Parsing failed'); - } + try { + parser.parse(text) + } catch (err) { + log.debug('Parsing failed') + } // Fetch the default direction, use TD if none was found - var dir; - dir = graph.getDirection(); - if(typeof dir === 'undefined'){ - dir='TD'; - } + var dir + dir = graph.getDirection() + if (typeof dir === 'undefined') { + dir = 'TD' + } // Create the input mermaid.graph - var g = new dagreD3.graphlib.Graph({ - multigraph:true, - compound: true - }) + var g = new dagreD3.graphlib.Graph({ + multigraph: true, + compound: true + }) .setGraph({ - rankdir: dir, - marginx: 20, - marginy: 20 + rankdir: dir, + marginx: 20, + marginy: 20 }) .setDefaultEdgeLabel(function () { - return {}; - }); - - var subG; - var subGraphs = graph.getSubGraphs(); - var i = 0; - for(i=subGraphs.length-1;i>=0;i--){ - subG = subGraphs[i]; - graph.addVertex(subG.id,subG.title,'group',undefined); - } + return {} + }) + + var subG + var subGraphs = graph.getSubGraphs() + var i = 0 + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i] + graph.addVertex(subG.id, subG.title, 'group', undefined) + } // Fetch the verices/nodes and edges/links from the parsed graph definition - var vert = graph.getVertices(); + var vert = graph.getVertices() - //log.debug(vert); - var edges = graph.getEdges(); + // log.debug(vert); + var edges = graph.getEdges() - i = 0; - var j; - for(i=subGraphs.length-1;i>=0;i--){ - subG = subGraphs[i]; + i = 0 + var j + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i] - d3.selectAll('cluster').append('text'); + d3.selectAll('cluster').append('text') - for(j=0;j0){ - id.split(',').forEach(function(id2){ - if(typeof vertices[id2] !== 'undefined'){ - vertices[id2].classes.push(className); + exports.setClass = function (id, className) { + if (id.indexOf(',') > 0) { + id.split(',').forEach(function (id2) { + if (typeof vertices[id2] !== 'undefined') { + vertices[id2].classes.push(className) + } + }) + } else { + if (typeof vertices[id] !== 'undefined') { + vertices[id].classes.push(className) } - }); - }else{ - if(typeof vertices[id] !== 'undefined'){ - vertices[id].classes.push(className); + } } - } -}; -var setTooltip = function(id,tooltip){ - if(typeof tooltip !== 'undefined'){ - tooltips[id]=tooltip; - } -}; + var setTooltip = function (id, tooltip) { + if (typeof tooltip !== 'undefined') { + tooltips[id] = tooltip + } + } -var setClickFun = function(id, functionName){ - if(typeof functionName === 'undefined'){ - return; - } - if (typeof vertices[id] !== 'undefined') { - funs.push(function (element) { - var elem = d3.select(element).select('#'+id); - if (elem !== null) { + var setClickFun = function (id, functionName) { + if (typeof functionName === 'undefined') { + return + } + if (typeof vertices[id] !== 'undefined') { + funs.push(function (element) { + var elem = d3.select(element).select('#' + id) + if (elem !== null) { elem.on('click', function () { - eval(functionName + '(\'' + id + '\')'); // jshint ignore:line - }); - } - }); - } -}; + eval(functionName + '(\'' + id + '\')') // jshint ignore:line + }) + } + }) + } + } -var setLink = function(id, linkStr){ - if(typeof linkStr === 'undefined'){ - return; - } - if (typeof vertices[id] !== 'undefined') { - funs.push(function (element) { - var elem = d3.select(element).select('#'+id); - if (elem !== null) { + var setLink = function (id, linkStr) { + if (typeof linkStr === 'undefined') { + return + } + if (typeof vertices[id] !== 'undefined') { + funs.push(function (element) { + var elem = d3.select(element).select('#' + id) + if (elem !== null) { elem.on('click', function () { - window.open(linkStr,'newTab'); // jshint ignore:line - }); - } - }); - } -}; -exports.getTooltip = function(id){ - return tooltips[id]; -}; + window.open(linkStr, 'newTab') // jshint ignore:line + }) + } + }) + } + } + exports.getTooltip = function (id) { + return tooltips[id] + } /** * Called by parser when a graph definition is found, stores the direction of the chart. * @param dir */ -exports.setClickEvent = function (id,functionName, link,tooltip) { - if(id.indexOf(',')>0){ - id.split(',').forEach(function(id2) { - setTooltip(id2,tooltip); - setClickFun(id2, functionName); - setLink(id2, link); - }); - }else{ - setTooltip(id,tooltip); - setClickFun(id, functionName); - setLink(id, link); - } -}; - -exports.bindFunctions = function(element){ - funs.forEach(function(fun){ - fun(element); - }); -}; -exports.getDirection = function () { - return direction; -}; + exports.setClickEvent = function (id, functionName, link, tooltip) { + if (id.indexOf(',') > 0) { + id.split(',').forEach(function (id2) { + setTooltip(id2, tooltip) + setClickFun(id2, functionName) + setLink(id2, link) + }) + } else { + setTooltip(id, tooltip) + setClickFun(id, functionName) + setLink(id, link) + } + } + + exports.bindFunctions = function (element) { + funs.forEach(function (fun) { + fun(element) + }) + } + exports.getDirection = function () { + return direction + } /** * Retrieval function for fetching the found nodes after parsing has completed. * @returns {{}|*|vertices} */ -exports.getVertices = function () { - return vertices; -}; + exports.getVertices = function () { + return vertices + } /** * Retrieval function for fetching the found links after parsing has completed. * @returns {{}|*|edges} */ -exports.getEdges = function () { - return edges; -}; + exports.getEdges = function () { + return edges + } /** * Retrieval function for fetching the found class definitions after parsing has completed. * @returns {{}|*|classes} */ -exports.getClasses = function () { - return classes; -}; - -var setupToolTips = function(element){ + exports.getClasses = function () { + return classes + } - var tooltipElem = d3.select('.mermaidTooltip'); - if(tooltipElem[0][0] === null){ - tooltipElem = d3.select('body') + var setupToolTips = function (element) { + var tooltipElem = d3.select('.mermaidTooltip') + if (tooltipElem[0][0] === null) { + tooltipElem = d3.select('body') .append('div') .attr('class', 'mermaidTooltip') - .style('opacity', 0); - } + .style('opacity', 0) + } - var svg = d3.select(element).select('svg'); + var svg = d3.select(element).select('svg') - var nodes = svg.selectAll('g.node'); - nodes - .on('mouseover', function() { - var el = d3.select(this); - var title = el.attr('title'); + var nodes = svg.selectAll('g.node') + nodes + .on('mouseover', function () { + var el = d3.select(this) + var title = el.attr('title') // Dont try to draw a tooltip if no data is provided - if(title === null){ - return; - } - var rect = this.getBoundingClientRect(); + if (title === null) { + return + } + var rect = this.getBoundingClientRect() - tooltipElem.transition() + tooltipElem.transition() .duration(200) - .style('opacity', '.9'); - tooltipElem.html(el.attr('title')) - .style('left', (rect.left+(rect.right-rect.left)/2) + 'px') - .style('top', (rect.top-14+document.body.scrollTop) + 'px'); - el.classed('hover',true); - + .style('opacity', '.9') + tooltipElem.html(el.attr('title')) + .style('left', (rect.left + (rect.right - rect.left) / 2) + 'px') + .style('top', (rect.top - 14 + document.body.scrollTop) + 'px') + el.classed('hover', true) }) - .on('mouseout', function() { - tooltipElem.transition() + .on('mouseout', function () { + tooltipElem.transition() .duration(500) - .style('opacity', 0); - var el = d3.select(this); - el.classed('hover',false); - }); -}; -funs.push(setupToolTips); + .style('opacity', 0) + var el = d3.select(this) + el.classed('hover', false) + }) + } + funs.push(setupToolTips) /** * Clears the internal graph db so that a new graph can be parsed. */ -exports.clear = function () { - vertices = {}; - classes = {}; - edges = []; - funs = []; - funs.push(setupToolTips); - subGraphs = []; - subCount = 0; - tooltips = []; -}; + exports.clear = function () { + vertices = {} + classes = {} + edges = [] + funs = [] + funs.push(setupToolTips) + subGraphs = [] + subCount = 0 + tooltips = [] + } /** * * @returns {string} */ -exports.defaultStyle = function () { - return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;'; -}; + exports.defaultStyle = function () { + return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;' + } /** * Clears the internal graph db so that a new graph can be parsed. */ -exports.addSubGraph = function (list, title) { - function uniq(a) { - var prims = {'boolean':{}, 'number':{}, 'string':{}}, objs = []; - - return a.filter(function(item) { - var type = typeof item; - if(item===' '){ - return false; - } - if(type in prims) - return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); - else - return objs.indexOf(item) >= 0 ? false : objs.push(item); - }); - } - - var nodeList = []; - - nodeList = uniq(nodeList.concat.apply(nodeList,list)); + exports.addSubGraph = function (list, title) { + function uniq (a) { + var prims = {'boolean': {}, 'number': {}, 'string': {}}, objs = [] + + return a.filter(function (item) { + var type = typeof item + if (item === ' ') { + return false + } + if (type in prims) { return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true) } else { return objs.indexOf(item) >= 0 ? false : objs.push(item) } + }) + } + var nodeList = [] - var subGraph = {id:'subGraph'+subCount, nodes:nodeList,title:title}; -//log.debug('subGraph:' + subGraph.title + subGraph.id); -//log.debug(subGraph.nodes); - subGraphs.push(subGraph); - subCount = subCount + 1; - return subGraph.id; -}; + nodeList = uniq(nodeList.concat.apply(nodeList, list)) -var getPosForId = function(id){ - var i; - for(i=0;i2000){ - return; - - } - //var nPos = getPosForId(subGraphs[pos].id); - posCrossRef[secCount]=pos; + + var getPosForId = function (id) { + var i + for (i = 0; i < subGraphs.length; i++) { + if (subGraphs[i].id === id) { + // log.debug('Found pos for ',id,' ',i); + return i + } + } + // log.debug('No pos found for ',id,' ',i); + return -1 + } + var secCount = -1 + var posCrossRef = [] + var indexNodes = function (id, pos) { + var nodes = subGraphs[pos].nodes + secCount = secCount + 1 + if (secCount > 2000) { + return + } + // var nPos = getPosForId(subGraphs[pos].id); + posCrossRef[secCount] = pos // Check if match - if(subGraphs[pos].id === id){ - return { - result:true, - count:0 - }; - } - + if (subGraphs[pos].id === id) { + return { + result: true, + count: 0 + } + } - var count = 0; - var posCount = 1; - while(count=0){ - var res = indexNodes(id,childPos); - if(res.result){ + if (childPos >= 0) { + var res = indexNodes(id, childPos) + if (res.result) { return { - result:true, - count:posCount+res.count - }; - }else{ - posCount = posCount + res.count; + result: true, + count: posCount + res.count + } + } else { + posCount = posCount + res.count + } } - } - count = count +1; - } - - return { - result:false, - count:posCount - }; + count = count + 1 + } -}; + return { + result: false, + count: posCount + } + } + exports.getDepthFirstPos = function (pos) { + return posCrossRef[pos] + } + exports.indexNodes = function () { + secCount = -1 + if (subGraphs.length > 0) { + indexNodes('none', subGraphs.length - 1, 0) + } + } + exports.getSubGraphs = function () { + return subGraphs + } -exports.getDepthFirstPos = function (pos) { - return posCrossRef[pos]; -}; -exports.indexNodes = function () { - secCount = -1; - if(subGraphs.length>0){ - indexNodes('none',subGraphs.length-1,0); - } -}; - -exports.getSubGraphs = function () { - return subGraphs; -}; - -exports.parseError = function(err,hash){ - global.mermaidAPI.parseError(err,hash); -}; -}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../d3":109,"../../logger":132}],119:[function(_dereq_,module,exports){ -(function (process){ + exports.parseError = function (err, hash) { + global.mermaidAPI.parseError(err, hash) + } + }).call(this, typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}) + }, {'../../d3': 109, '../../logger': 132}], + 119: [function (_dereq_, module, exports) { + (function (process) { /* parser generated by jison 0.4.17 */ /* Returns a Parser object of the following structure: @@ -51878,7 +51988,6 @@ exports.parseError = function(err,hash){ } } - token location info (@$, _$, etc.): { first_line: n, last_line: n, @@ -51887,7 +51996,6 @@ exports.parseError = function(err,hash){ range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) } - the parseError function receives a 'hash' object with these members for lexer and parser errors: { text: (matched text) token: (the produced terminal token, if any) @@ -51899,677 +52007,676 @@ exports.parseError = function(err,hash){ recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) } */ -var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,5],$V1=[1,6],$V2=[1,12],$V3=[1,13],$V4=[1,14],$V5=[1,15],$V6=[1,16],$V7=[1,17],$V8=[1,18],$V9=[1,19],$Va=[1,20],$Vb=[1,21],$Vc=[1,22],$Vd=[8,16,17,18,19,20,21,22,23,24,25,26],$Ve=[1,37],$Vf=[1,33],$Vg=[1,34],$Vh=[1,35],$Vi=[1,36],$Vj=[8,10,16,17,18,19,20,21,22,23,24,25,26,28,32,37,39,40,45,57,58],$Vk=[10,28],$Vl=[10,28,37,57,58],$Vm=[2,49],$Vn=[1,45],$Vo=[1,48],$Vp=[1,49],$Vq=[1,52],$Vr=[2,65],$Vs=[1,65],$Vt=[1,66],$Vu=[1,67],$Vv=[1,68],$Vw=[1,69],$Vx=[1,70],$Vy=[1,71],$Vz=[1,72],$VA=[1,73],$VB=[8,16,17,18,19,20,21,22,23,24,25,26,47],$VC=[10,28,37]; -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"expressions":3,"graph":4,"EOF":5,"graphStatement":6,"idStatement":7,"{":8,"stmt_list":9,"}":10,"strict":11,"GRAPH":12,"DIGRAPH":13,"textNoTags":14,"textNoTagsToken":15,"ALPHA":16,"NUM":17,"COLON":18,"PLUS":19,"EQUALS":20,"MULT":21,"DOT":22,"BRKT":23,"SPACE":24,"MINUS":25,"keywords":26,"stmt":27,";":28,"node_stmt":29,"edge_stmt":30,"attr_stmt":31,"=":32,"subgraph":33,"attr_list":34,"NODE":35,"EDGE":36,"[":37,"a_list":38,"]":39,",":40,"edgeRHS":41,"node_id":42,"edgeop":43,"port":44,":":45,"compass_pt":46,"SUBGRAPH":47,"n":48,"ne":49,"e":50,"se":51,"s":52,"sw":53,"w":54,"nw":55,"c":56,"ARROW_POINT":57,"ARROW_OPEN":58,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOF",8:"{",10:"}",11:"strict",12:"GRAPH",13:"DIGRAPH",16:"ALPHA",17:"NUM",18:"COLON",19:"PLUS",20:"EQUALS",21:"MULT",22:"DOT",23:"BRKT",24:"SPACE",25:"MINUS",26:"keywords",28:";",32:"=",35:"NODE",36:"EDGE",37:"[",39:"]",40:",",45:":",47:"SUBGRAPH",48:"n",49:"ne",50:"e",51:"se",52:"s",53:"sw",54:"w",55:"nw",56:"c",57:"ARROW_POINT",58:"ARROW_OPEN"}, -productions_: [0,[3,2],[4,5],[4,6],[4,4],[6,1],[6,1],[7,1],[14,1],[14,2],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[9,1],[9,3],[27,1],[27,1],[27,1],[27,3],[27,1],[31,2],[31,2],[31,2],[34,4],[34,3],[34,3],[34,2],[38,5],[38,5],[38,3],[30,3],[30,3],[30,2],[30,2],[41,3],[41,3],[41,2],[41,2],[29,2],[29,1],[42,2],[42,1],[44,4],[44,2],[44,2],[33,5],[33,4],[33,3],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,0],[43,1],[43,1]], -performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { + var parser = (function () { + var o = function (k, v, o, l) { for (o = o || {}, l = k.length; l--; o[k[l]] = v);return o }, $V0 = [1, 5], $V1 = [1, 6], $V2 = [1, 12], $V3 = [1, 13], $V4 = [1, 14], $V5 = [1, 15], $V6 = [1, 16], $V7 = [1, 17], $V8 = [1, 18], $V9 = [1, 19], $Va = [1, 20], $Vb = [1, 21], $Vc = [1, 22], $Vd = [8, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], $Ve = [1, 37], $Vf = [1, 33], $Vg = [1, 34], $Vh = [1, 35], $Vi = [1, 36], $Vj = [8, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 37, 39, 40, 45, 57, 58], $Vk = [10, 28], $Vl = [10, 28, 37, 57, 58], $Vm = [2, 49], $Vn = [1, 45], $Vo = [1, 48], $Vp = [1, 49], $Vq = [1, 52], $Vr = [2, 65], $Vs = [1, 65], $Vt = [1, 66], $Vu = [1, 67], $Vv = [1, 68], $Vw = [1, 69], $Vx = [1, 70], $Vy = [1, 71], $Vz = [1, 72], $VA = [1, 73], $VB = [8, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 47], $VC = [10, 28, 37] + var parser = {trace: function trace () { }, + yy: {}, + symbols_: {'error': 2, 'expressions': 3, 'graph': 4, 'EOF': 5, 'graphStatement': 6, 'idStatement': 7, '{': 8, 'stmt_list': 9, '}': 10, 'strict': 11, 'GRAPH': 12, 'DIGRAPH': 13, 'textNoTags': 14, 'textNoTagsToken': 15, 'ALPHA': 16, 'NUM': 17, 'COLON': 18, 'PLUS': 19, 'EQUALS': 20, 'MULT': 21, 'DOT': 22, 'BRKT': 23, 'SPACE': 24, 'MINUS': 25, 'keywords': 26, 'stmt': 27, ';': 28, 'node_stmt': 29, 'edge_stmt': 30, 'attr_stmt': 31, '=': 32, 'subgraph': 33, 'attr_list': 34, 'NODE': 35, 'EDGE': 36, '[': 37, 'a_list': 38, ']': 39, ',': 40, 'edgeRHS': 41, 'node_id': 42, 'edgeop': 43, 'port': 44, ':': 45, 'compass_pt': 46, 'SUBGRAPH': 47, 'n': 48, 'ne': 49, 'e': 50, 'se': 51, 's': 52, 'sw': 53, 'w': 54, 'nw': 55, 'c': 56, 'ARROW_POINT': 57, 'ARROW_OPEN': 58, '$accept': 0, '$end': 1}, + terminals_: {2: 'error', 5: 'EOF', 8: '{', 10: '}', 11: 'strict', 12: 'GRAPH', 13: 'DIGRAPH', 16: 'ALPHA', 17: 'NUM', 18: 'COLON', 19: 'PLUS', 20: 'EQUALS', 21: 'MULT', 22: 'DOT', 23: 'BRKT', 24: 'SPACE', 25: 'MINUS', 26: 'keywords', 28: ';', 32: '=', 35: 'NODE', 36: 'EDGE', 37: '[', 39: ']', 40: ',', 45: ':', 47: 'SUBGRAPH', 48: 'n', 49: 'ne', 50: 'e', 51: 'se', 52: 's', 53: 'sw', 54: 'w', 55: 'nw', 56: 'c', 57: 'ARROW_POINT', 58: 'ARROW_OPEN'}, + productions_: [0, [3, 2], [4, 5], [4, 6], [4, 4], [6, 1], [6, 1], [7, 1], [14, 1], [14, 2], [15, 1], [15, 1], [15, 1], [15, 1], [15, 1], [15, 1], [15, 1], [15, 1], [15, 1], [15, 1], [15, 1], [9, 1], [9, 3], [27, 1], [27, 1], [27, 1], [27, 3], [27, 1], [31, 2], [31, 2], [31, 2], [34, 4], [34, 3], [34, 3], [34, 2], [38, 5], [38, 5], [38, 3], [30, 3], [30, 3], [30, 2], [30, 2], [41, 3], [41, 3], [41, 2], [41, 2], [29, 2], [29, 1], [42, 2], [42, 1], [44, 4], [44, 2], [44, 2], [33, 5], [33, 4], [33, 3], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 0], [43, 1], [43, 1]], + performAction: function anonymous (yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ -var $0 = $$.length - 1; -switch (yystate) { -case 1: -this.$=$$[$0-1]; -break; -case 2: -this.$=$$[$0-4]; -break; -case 3: -this.$=$$[$0-5]; -break; -case 4: -this.$=$$[$0-3]; -break; -case 8: case 10: case 11: -this.$=$$[$0]; -break; -case 9: -this.$=$$[$0-1]+''+$$[$0]; -break; -case 12: case 13: case 14: case 15: case 16: case 18: case 19: case 20: -this.$ = $$[$0]; -break; -case 17: -this.$ = '
'; -break; -case 39: -this.$='oy'; -break; -case 40: - - yy.addLink($$[$0-1],$$[$0].id,$$[$0].op); - this.$='oy'; -break; -case 42: - - yy.addLink($$[$0-1],$$[$0].id,$$[$0].op); - this.$={op:$$[$0-2],id:$$[$0-1]}; - -break; -case 44: - - this.$={op:$$[$0-1],id:$$[$0]}; - -break; -case 48: -yy.addVertex($$[$0-1]);this.$=$$[$0-1]; -break; -case 49: -yy.addVertex($$[$0]);this.$=$$[$0]; -break; -case 66: -this.$='arrow'; -break; -case 67: -this.$='arrow_open'; -break; -} -}, -table: [{3:1,4:2,6:3,11:[1,4],12:$V0,13:$V1},{1:[3]},{5:[1,7]},{7:8,8:[1,9],14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc},{6:23,12:$V0,13:$V1},o($Vd,[2,5]),o($Vd,[2,6]),{1:[2,1]},{8:[1,24]},{7:30,8:$Ve,9:25,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},o([8,10,28,32,37,39,40,45,57,58],[2,7],{15:38,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc}),o($Vj,[2,8]),o($Vj,[2,10]),o($Vj,[2,11]),o($Vj,[2,12]),o($Vj,[2,13]),o($Vj,[2,14]),o($Vj,[2,15]),o($Vj,[2,16]),o($Vj,[2,17]),o($Vj,[2,18]),o($Vj,[2,19]),o($Vj,[2,20]),{7:39,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc},{7:30,8:$Ve,9:40,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},{10:[1,41]},{10:[2,21],28:[1,42]},o($Vk,[2,23]),o($Vk,[2,24]),o($Vk,[2,25]),o($Vl,$Vm,{44:44,32:[1,43],45:$Vn}),o($Vk,[2,27],{41:46,43:47,57:$Vo,58:$Vp}),o($Vk,[2,47],{43:47,34:50,41:51,37:$Vq,57:$Vo,58:$Vp}),{34:53,37:$Vq},{34:54,37:$Vq},{34:55,37:$Vq},{7:56,8:[1,57],14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc},{7:30,8:$Ve,9:58,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},o($Vj,[2,9]),{8:[1,59]},{10:[1,60]},{5:[2,4]},{7:30,8:$Ve,9:61,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},{7:62,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc},o($Vl,[2,48]),o($Vl,$Vr,{14:10,15:11,7:63,46:64,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,48:$Vs,49:$Vt,50:$Vu,51:$Vv,52:$Vw,53:$Vx,54:$Vy,55:$Vz,56:$VA}),o($Vk,[2,41],{34:74,37:$Vq}),{7:77,8:$Ve,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,33:76,42:75,47:$Vi},o($VB,[2,66]),o($VB,[2,67]),o($Vk,[2,46]),o($Vk,[2,40],{34:78,37:$Vq}),{7:81,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,38:79,39:[1,80]},o($Vk,[2,28]),o($Vk,[2,29]),o($Vk,[2,30]),{8:[1,82]},{7:30,8:$Ve,9:83,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},{10:[1,84]},{7:30,8:$Ve,9:85,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},{5:[2,2]},{10:[2,22]},o($Vk,[2,26]),o($Vl,[2,51],{45:[1,86]}),o($Vl,[2,52]),o($Vl,[2,56]),o($Vl,[2,57]),o($Vl,[2,58]),o($Vl,[2,59]),o($Vl,[2,60]),o($Vl,[2,61]),o($Vl,[2,62]),o($Vl,[2,63]),o($Vl,[2,64]),o($Vk,[2,38]),o($VC,[2,44],{43:47,41:87,57:$Vo,58:$Vp}),o($VC,[2,45],{43:47,41:88,57:$Vo,58:$Vp}),o($Vl,$Vm,{44:44,45:$Vn}),o($Vk,[2,39]),{39:[1,89]},o($Vk,[2,34],{34:90,37:$Vq}),{32:[1,91]},{7:30,8:$Ve,9:92,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},{10:[1,93]},o($Vl,[2,55]),{10:[1,94]},o($Vl,$Vr,{46:95,48:$Vs,49:$Vt,50:$Vu,51:$Vv,52:$Vw,53:$Vx,54:$Vy,55:$Vz,56:$VA}),o($VC,[2,42]),o($VC,[2,43]),o($Vk,[2,33],{34:96,37:$Vq}),o($Vk,[2,32]),{7:97,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc},{10:[1,98]},o($Vl,[2,54]),{5:[2,3]},o($Vl,[2,50]),o($Vk,[2,31]),{28:[1,99],39:[2,37],40:[1,100]},o($Vl,[2,53]),{7:81,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,38:101},{7:81,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,38:102},{39:[2,35]},{39:[2,36]}], -defaultActions: {7:[2,1],41:[2,4],60:[2,2],61:[2,22],94:[2,3],101:[2,35],102:[2,36]}, -parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - function _parseError (msg, hash) { - this.message = msg; - this.hash = hash; - } - _parseError.prototype = Error; - - throw new _parseError(str, hash); - } -}, -parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - _token_stack: + var $0 = $$.length - 1 + switch (yystate) { + case 1: + this.$ = $$[$0 - 1] + break + case 2: + this.$ = $$[$0 - 4] + break + case 3: + this.$ = $$[$0 - 5] + break + case 4: + this.$ = $$[$0 - 3] + break + case 8: case 10: case 11: + this.$ = $$[$0] + break + case 9: + this.$ = $$[$0 - 1] + '' + $$[$0] + break + case 12: case 13: case 14: case 15: case 16: case 18: case 19: case 20: + this.$ = $$[$0] + break + case 17: + this.$ = '
' + break + case 39: + this.$ = 'oy' + break + case 40: + + yy.addLink($$[$0 - 1], $$[$0].id, $$[$0].op) + this.$ = 'oy' + break + case 42: + + yy.addLink($$[$0 - 1], $$[$0].id, $$[$0].op) + this.$ = {op: $$[$0 - 2], id: $$[$0 - 1]} + + break + case 44: + + this.$ = {op: $$[$0 - 1], id: $$[$0]} + + break + case 48: + yy.addVertex($$[$0 - 1]); this.$ = $$[$0 - 1] + break + case 49: + yy.addVertex($$[$0]); this.$ = $$[$0] + break + case 66: + this.$ = 'arrow' + break + case 67: + this.$ = 'arrow_open' + break + } + }, + table: [{3: 1, 4: 2, 6: 3, 11: [1, 4], 12: $V0, 13: $V1}, {1: [3]}, {5: [1, 7]}, {7: 8, 8: [1, 9], 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc}, {6: 23, 12: $V0, 13: $V1}, o($Vd, [2, 5]), o($Vd, [2, 6]), {1: [2, 1]}, {8: [1, 24]}, {7: 30, 8: $Ve, 9: 25, 12: $Vf, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: 26, 29: 27, 30: 28, 31: 29, 33: 31, 35: $Vg, 36: $Vh, 42: 32, 47: $Vi}, o([8, 10, 28, 32, 37, 39, 40, 45, 57, 58], [2, 7], {15: 38, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc}), o($Vj, [2, 8]), o($Vj, [2, 10]), o($Vj, [2, 11]), o($Vj, [2, 12]), o($Vj, [2, 13]), o($Vj, [2, 14]), o($Vj, [2, 15]), o($Vj, [2, 16]), o($Vj, [2, 17]), o($Vj, [2, 18]), o($Vj, [2, 19]), o($Vj, [2, 20]), {7: 39, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc}, {7: 30, 8: $Ve, 9: 40, 12: $Vf, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: 26, 29: 27, 30: 28, 31: 29, 33: 31, 35: $Vg, 36: $Vh, 42: 32, 47: $Vi}, {10: [1, 41]}, {10: [2, 21], 28: [1, 42]}, o($Vk, [2, 23]), o($Vk, [2, 24]), o($Vk, [2, 25]), o($Vl, $Vm, {44: 44, 32: [1, 43], 45: $Vn}), o($Vk, [2, 27], {41: 46, 43: 47, 57: $Vo, 58: $Vp}), o($Vk, [2, 47], {43: 47, 34: 50, 41: 51, 37: $Vq, 57: $Vo, 58: $Vp}), {34: 53, 37: $Vq}, {34: 54, 37: $Vq}, {34: 55, 37: $Vq}, {7: 56, 8: [1, 57], 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc}, {7: 30, 8: $Ve, 9: 58, 12: $Vf, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: 26, 29: 27, 30: 28, 31: 29, 33: 31, 35: $Vg, 36: $Vh, 42: 32, 47: $Vi}, o($Vj, [2, 9]), {8: [1, 59]}, {10: [1, 60]}, {5: [2, 4]}, {7: 30, 8: $Ve, 9: 61, 12: $Vf, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: 26, 29: 27, 30: 28, 31: 29, 33: 31, 35: $Vg, 36: $Vh, 42: 32, 47: $Vi}, {7: 62, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc}, o($Vl, [2, 48]), o($Vl, $Vr, {14: 10, 15: 11, 7: 63, 46: 64, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 48: $Vs, 49: $Vt, 50: $Vu, 51: $Vv, 52: $Vw, 53: $Vx, 54: $Vy, 55: $Vz, 56: $VA}), o($Vk, [2, 41], {34: 74, 37: $Vq}), {7: 77, 8: $Ve, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 33: 76, 42: 75, 47: $Vi}, o($VB, [2, 66]), o($VB, [2, 67]), o($Vk, [2, 46]), o($Vk, [2, 40], {34: 78, 37: $Vq}), {7: 81, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 38: 79, 39: [1, 80]}, o($Vk, [2, 28]), o($Vk, [2, 29]), o($Vk, [2, 30]), {8: [1, 82]}, {7: 30, 8: $Ve, 9: 83, 12: $Vf, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: 26, 29: 27, 30: 28, 31: 29, 33: 31, 35: $Vg, 36: $Vh, 42: 32, 47: $Vi}, {10: [1, 84]}, {7: 30, 8: $Ve, 9: 85, 12: $Vf, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: 26, 29: 27, 30: 28, 31: 29, 33: 31, 35: $Vg, 36: $Vh, 42: 32, 47: $Vi}, {5: [2, 2]}, {10: [2, 22]}, o($Vk, [2, 26]), o($Vl, [2, 51], {45: [1, 86]}), o($Vl, [2, 52]), o($Vl, [2, 56]), o($Vl, [2, 57]), o($Vl, [2, 58]), o($Vl, [2, 59]), o($Vl, [2, 60]), o($Vl, [2, 61]), o($Vl, [2, 62]), o($Vl, [2, 63]), o($Vl, [2, 64]), o($Vk, [2, 38]), o($VC, [2, 44], {43: 47, 41: 87, 57: $Vo, 58: $Vp}), o($VC, [2, 45], {43: 47, 41: 88, 57: $Vo, 58: $Vp}), o($Vl, $Vm, {44: 44, 45: $Vn}), o($Vk, [2, 39]), {39: [1, 89]}, o($Vk, [2, 34], {34: 90, 37: $Vq}), {32: [1, 91]}, {7: 30, 8: $Ve, 9: 92, 12: $Vf, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: 26, 29: 27, 30: 28, 31: 29, 33: 31, 35: $Vg, 36: $Vh, 42: 32, 47: $Vi}, {10: [1, 93]}, o($Vl, [2, 55]), {10: [1, 94]}, o($Vl, $Vr, {46: 95, 48: $Vs, 49: $Vt, 50: $Vu, 51: $Vv, 52: $Vw, 53: $Vx, 54: $Vy, 55: $Vz, 56: $VA}), o($VC, [2, 42]), o($VC, [2, 43]), o($Vk, [2, 33], {34: 96, 37: $Vq}), o($Vk, [2, 32]), {7: 97, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc}, {10: [1, 98]}, o($Vl, [2, 54]), {5: [2, 3]}, o($Vl, [2, 50]), o($Vk, [2, 31]), {28: [1, 99], 39: [2, 37], 40: [1, 100]}, o($Vl, [2, 53]), {7: 81, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 38: 101}, {7: 81, 14: 10, 15: 11, 16: $V2, 17: $V3, 18: $V4, 19: $V5, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: $Vb, 26: $Vc, 38: 102}, {39: [2, 35]}, {39: [2, 36]}], + defaultActions: {7: [2, 1], 41: [2, 4], 60: [2, 2], 61: [2, 22], 94: [2, 3], 101: [2, 35], 102: [2, 36]}, + parseError: function parseError (str, hash) { + if (hash.recoverable) { + this.trace(str) + } else { + function _parseError (msg, hash) { + this.message = msg + this.hash = hash + } + _parseError.prototype = Error + + throw new _parseError(str, hash) + } + }, + parse: function parse (input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1 + var args = lstack.slice.call(arguments, 1) + var lexer = Object.create(this.lexer) + var sharedState = { yy: {} } + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k] + } + } + lexer.setInput(input, sharedState.yy) + sharedState.yy.lexer = lexer + sharedState.yy.parser = this + if (typeof lexer.yylloc === 'undefined') { + lexer.yylloc = {} + } + var yyloc = lexer.yylloc + lstack.push(yyloc) + var ranges = lexer.options && lexer.options.ranges + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError + } else { + this.parseError = Object.getPrototypeOf(this).parseError + } + function popStack (n) { + stack.length = stack.length - 2 * n + vstack.length = vstack.length - n + lstack.length = lstack.length - n + } + _token_stack: var lex = function () { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - }; - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; + var token + token = lexer.lex() || EOF + if (typeof token !== 'number') { + token = self.symbols_[token] || token + } + return token } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } - } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected + while (true) { + state = stack[stack.length - 1] + if (this.defaultActions[state]) { + action = this.defaultActions[state] } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + if (symbol === null || typeof symbol === 'undefined') { + symbol = lex() + } + action = table[state] && table[state][symbol] } - this.parseError(errStr, { + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = '' + expected = [] + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\'') + } + } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'' + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'') + } + this.parseError(errStr, { text: lexer.match, token: this.terminals_[symbol] || symbol, line: lexer.yylineno, loc: yyloc, expected: expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - if (recovering > 0) { - recovering--; + }) } - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -}}; + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol) + } + switch (action[0]) { + case 1: + stack.push(symbol) + vstack.push(lexer.yytext) + lstack.push(lexer.yylloc) + stack.push(action[1]) + symbol = null + if (!preErrorSymbol) { + yyleng = lexer.yyleng + yytext = lexer.yytext + yylineno = lexer.yylineno + yyloc = lexer.yylloc + if (recovering > 0) { + recovering-- + } + } else { + symbol = preErrorSymbol + preErrorSymbol = null + } + break + case 2: + len = this.productions_[action[1]][1] + yyval.$ = vstack[vstack.length - len] + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + } + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ] + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)) + if (typeof r !== 'undefined') { + return r + } + if (len) { + stack = stack.slice(0, -1 * len * 2) + vstack = vstack.slice(0, -1 * len) + lstack = lstack.slice(0, -1 * len) + } + stack.push(this.productions_[action[1]][0]) + vstack.push(yyval.$) + lstack.push(yyval._$) + newState = table[stack[stack.length - 2]][stack[stack.length - 1]] + stack.push(newState) + break + case 3: + return true + } + } + return true + }} /* generated by jison-lex 0.3.4 */ -var lexer = (function(){ -var lexer = ({ + var lexer = (function () { + var lexer = ({ -EOF:1, + EOF: 1, -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, + parseError: function parseError (str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash) + } else { + throw new Error(str) + } + }, // resets the lexer, sets new input -setInput:function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0,0]; - } - this.offset = 0; - return this; - }, + setInput: function (input, yy) { + this.yy = yy || this.yy || {} + this._input = input + this._more = this._backtrack = this.done = false + this.yylineno = this.yyleng = 0 + this.yytext = this.matched = this.match = '' + this.conditionStack = ['INITIAL'] + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + } + if (this.options.ranges) { + this.yylloc.range = [0, 0] + } + this.offset = 0 + return this + }, // consumes and returns one char from the input -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } + input: function () { + var ch = this._input[0] + this.yytext += ch + this.yyleng++ + this.offset++ + this.match += ch + this.matched += ch + var lines = ch.match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno++ + this.yylloc.last_line++ + } else { + this.yylloc.last_column++ + } + if (this.options.ranges) { + this.yylloc.range[1]++ + } - this._input = this._input.slice(1); - return ch; - }, + this._input = this._input.slice(1) + return ch + }, // unshifts one char (or a string) into the input -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) - + oldLines[oldLines.length - lines.length].length - lines[0].length : - this.yylloc.first_column - len - }; + unput: function (ch) { + var len = ch.length + var lines = ch.split(/(?:\r\n?|\n)/g) + + this._input = ch + this._input + this.yytext = this.yytext.substr(0, this.yytext.length - len) + // this.yyleng -= len; + this.offset -= len + var oldLines = this.match.split(/(?:\r\n?|\n)/g) + this.match = this.match.substr(0, this.match.length - 1) + this.matched = this.matched.substr(0, this.matched.length - 1) + + if (lines.length - 1) { + this.yylineno -= lines.length - 1 + } + var r = this.yylloc.range + + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines + ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + + oldLines[oldLines.length - lines.length].length - lines[0].length + : this.yylloc.first_column - len + } - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len] + } + this.yyleng = this.yytext.length + return this + }, // When called from action, caches matched text and appends it on next action -more:function () { - this._more = true; - return this; - }, + more: function () { + this._more = true + return this + }, // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. -reject:function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - - } - return this; - }, + reject: function () { + if (this.options.backtrack_lexer) { + this._backtrack = true + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + return this + }, // retain first n characters of the match -less:function (n) { - this.unput(this.match.slice(n)); - }, + less: function (n) { + this.unput(this.match.slice(n)) + }, // displays already matched input, i.e. for error messages -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, + pastInput: function () { + var past = this.matched.substr(0, this.matched.length - this.match.length) + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, '') + }, // displays upcoming input, i.e. for error messages -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, + upcomingInput: function () { + var next = this.match + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length) + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, '') + }, // displays the character position where the lexing error occurred, i.e. for error messages -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, + showPosition: function () { + var pre = this.pastInput() + var c = new Array(pre.length + 1).join('-') + return pre + this.upcomingInput() + '\n' + c + '^' + }, // test the lexed token: return FALSE when not a match, otherwise return token -test_match:function (match, indexed_rule) { - var token, - lines, - backup; + test_match: function (match, indexed_rule) { + var token, + lines, + backup - if (this.options.backtrack_lexer) { + if (this.options.backtrack_lexer) { // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? - lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : - this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + } + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0) + } + } + + lines = match[0].match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno += lines.length + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines + ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length + : this.yylloc.last_column + match[0].length + } + this.yytext += match[0] + this.match += match[0] + this.matches = match + this.yyleng = this.yytext.length + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng] + } + this._more = false + this._backtrack = false + this._input = this._input.slice(match[0].length) + this.matched += match[0] + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]) + if (this.done && this._input) { + this.done = false + } + if (token) { + return token + } else if (this._backtrack) { // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, + for (var k in backup) { + this[k] = backup[k] + } + return false // rule action called reject() implying the next rule should be tested instead. + } + return false + }, // return next match in input -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - - var token, - match, - tempMatch, - index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } else { + next: function () { + if (this.done) { + return this.EOF + } + if (!this._input) { + this.done = true + } + + var token, + match, + tempMatch, + index + if (!this._more) { + this.yytext = '' + this.match = '' + } + var rules = this._currentRules() + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]) + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch + index = i + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]) + if (token !== false) { + return token + } else if (this._backtrack) { + match = false + continue // rule action called reject() implying a rule MISmatch. + } else { // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; + return false + } + } else if (!this.options.flex) { + break } - } else if (!this.options.flex) { - break; + } } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } + if (match) { + token = this.test_match(match, rules[index]) + if (token !== false) { + return token + } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, + return false + } + if (this._input === '') { + return this.EOF + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + }, // return next match that has a token -lex:function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, + lex: function lex () { + var r = this.next() + if (r) { + return r + } else { + return this.lex() + } + }, // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) -begin:function begin(condition) { - this.conditionStack.push(condition); - }, + begin: function begin (condition) { + this.conditionStack.push(condition) + }, // pop the previously active lexer condition state off the condition stack -popState:function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, + popState: function popState () { + var n = this.conditionStack.length - 1 + if (n > 0) { + return this.conditionStack.pop() + } else { + return this.conditionStack[0] + } + }, // produce the lexer rule set which is active for the currently active lexer condition state -_currentRules:function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, + _currentRules: function _currentRules () { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules + } else { + return this.conditions['INITIAL'].rules + } + }, // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available -topState:function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, + topState: function topState (n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0) + if (n >= 0) { + return this.conditionStack[n] + } else { + return 'INITIAL' + } + }, // alias for begin(condition) -pushState:function pushState(condition) { - this.begin(condition); - }, + pushState: function pushState (condition) { + this.begin(condition) + }, // return the number of states currently on the stack -stateStackSize:function stateStackSize() { - return this.conditionStack.length; - }, -options: {}, -performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { -var YYSTATE=YY_START; -switch($avoiding_name_collisions) { -case 0:return 'STYLE'; -break; -case 1:return 'LINKSTYLE'; -break; -case 2:return 'CLASSDEF'; -break; -case 3:return 'CLASS'; -break; -case 4:return 'CLICK'; -break; -case 5:return 12; -break; -case 6:return 13; -break; -case 7:return 47; -break; -case 8:return 35; -break; -case 9:return 36; -break; -case 10:return 'DIR'; -break; -case 11:return 'DIR'; -break; -case 12:return 'DIR'; -break; -case 13:return 'DIR'; -break; -case 14:return 'DIR'; -break; -case 15:return 'DIR'; -break; -case 16:return 17; -break; -case 17:return 23; -break; -case 18:return 18; -break; -case 19:return 28; -break; -case 20:return 40; -break; -case 21:return 32; -break; -case 22:return 21; -break; -case 23:return 22; -break; -case 24:return 'ARROW_CROSS'; -break; -case 25:return 57; -break; -case 26:return 'ARROW_CIRCLE'; -break; -case 27:return 58; -break; -case 28:return 25; -break; -case 29:return 19; -break; -case 30:return 20; -break; -case 31:return 16; -break; -case 32:return 'PIPE'; -break; -case 33:return 'PS'; -break; -case 34:return 'PE'; -break; -case 35:return 37; -break; -case 36:return 39; -break; -case 37:return 8 -break; -case 38:return 10 -break; -case 39:return 'QUOTE'; -break; -case 40:return 24; -break; -case 41:return 'NEWLINE'; -break; -case 42:return 5; -break; -} -}, -rules: [/^(?:style\b)/,/^(?:linkStyle\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:digraph\b)/,/^(?:subgraph\b)/,/^(?:node\b)/,/^(?:edge\b)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9])/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:=)/,/^(?:\*)/,/^(?:\.)/,/^(?:--[x])/,/^(?:->)/,/^(?:--[o])/,/^(?:--)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[\u0021-\u0027\u002A-\u002E\u003F\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC_])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\s)/,/^(?:\n)/,/^(?:$)/], -conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"inclusive":true}} -}); -return lexer; -})(); -parser.lexer = lexer; -function Parser () { - this.yy = {}; -} -Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})(); - - -if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; -exports.main = function commonjsMain(args) { - if (!args[1]) { - console.log('Usage: '+args[0]+' FILE'); - process.exit(1); - } - var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), "utf8"); - return exports.parser.parse(source); -}; -if (typeof module !== 'undefined' && _dereq_.main === module) { - exports.main(process.argv.slice(1)); -} -} -}).call(this,_dereq_("1YiZ5S")) -},{"1YiZ5S":104,"fs":102,"path":103}],120:[function(_dereq_,module,exports){ -(function (process){ + stateStackSize: function stateStackSize () { + return this.conditionStack.length + }, + options: {}, + performAction: function anonymous (yy, yy_, $avoiding_name_collisions, YY_START) { + var YYSTATE = YY_START + switch ($avoiding_name_collisions) { + case 0:return 'STYLE' + break + case 1:return 'LINKSTYLE' + break + case 2:return 'CLASSDEF' + break + case 3:return 'CLASS' + break + case 4:return 'CLICK' + break + case 5:return 12 + break + case 6:return 13 + break + case 7:return 47 + break + case 8:return 35 + break + case 9:return 36 + break + case 10:return 'DIR' + break + case 11:return 'DIR' + break + case 12:return 'DIR' + break + case 13:return 'DIR' + break + case 14:return 'DIR' + break + case 15:return 'DIR' + break + case 16:return 17 + break + case 17:return 23 + break + case 18:return 18 + break + case 19:return 28 + break + case 20:return 40 + break + case 21:return 32 + break + case 22:return 21 + break + case 23:return 22 + break + case 24:return 'ARROW_CROSS' + break + case 25:return 57 + break + case 26:return 'ARROW_CIRCLE' + break + case 27:return 58 + break + case 28:return 25 + break + case 29:return 19 + break + case 30:return 20 + break + case 31:return 16 + break + case 32:return 'PIPE' + break + case 33:return 'PS' + break + case 34:return 'PE' + break + case 35:return 37 + break + case 36:return 39 + break + case 37:return 8 + break + case 38:return 10 + break + case 39:return 'QUOTE' + break + case 40:return 24 + break + case 41:return 'NEWLINE' + break + case 42:return 5 + break + } + }, + rules: [/^(?:style\b)/, /^(?:linkStyle\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:click\b)/, /^(?:graph\b)/, /^(?:digraph\b)/, /^(?:subgraph\b)/, /^(?:node\b)/, /^(?:edge\b)/, /^(?:LR\b)/, /^(?:RL\b)/, /^(?:TB\b)/, /^(?:BT\b)/, /^(?:TD\b)/, /^(?:BR\b)/, /^(?:[0-9])/, /^(?:#)/, /^(?::)/, /^(?:;)/, /^(?:,)/, /^(?:=)/, /^(?:\*)/, /^(?:\.)/, /^(?:--[x])/, /^(?:->)/, /^(?:--[o])/, /^(?:--)/, /^(?:-)/, /^(?:\+)/, /^(?:=)/, /^(?:[\u0021-\u0027\u002A-\u002E\u003F\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC_])/, /^(?:\|)/, /^(?:\()/, /^(?:\))/, /^(?:\[)/, /^(?:\])/, /^(?:\{)/, /^(?:\})/, /^(?:")/, /^(?:\s)/, /^(?:\n)/, /^(?:$)/], + conditions: {'INITIAL': {'rules': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42], 'inclusive': true}} + }) + return lexer + })() + parser.lexer = lexer + function Parser () { + this.yy = {} + } + Parser.prototype = parser; parser.Parser = Parser + return new Parser() + })() + + if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { + exports.parser = parser + exports.Parser = parser.Parser + exports.parse = function () { return parser.parse.apply(parser, arguments) } + exports.main = function commonjsMain (args) { + if (!args[1]) { + console.log('Usage: ' + args[0] + ' FILE') + process.exit(1) + } + var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), 'utf8') + return exports.parser.parse(source) + } + if (typeof module !== 'undefined' && _dereq_.main === module) { + exports.main(process.argv.slice(1)) + } + } + }).call(this, _dereq_('1YiZ5S')) + }, {'1YiZ5S': 104, 'fs': 102, 'path': 103}], + 120: [function (_dereq_, module, exports) { + (function (process) { /* parser generated by jison 0.4.17 */ /* Returns a Parser object of the following structure: @@ -52622,7 +52729,6 @@ if (typeof module !== 'undefined' && _dereq_.main === module) { } } - token location info (@$, _$, etc.): { first_line: n, last_line: n, @@ -52631,7 +52737,6 @@ if (typeof module !== 'undefined' && _dereq_.main === module) { range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) } - the parseError function receives a 'hash' object with these members for lexer and parser errors: { text: (matched text) token: (the produced terminal token, if any) @@ -52643,1047 +52748,1042 @@ if (typeof module !== 'undefined' && _dereq_.main === module) { recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) } */ -var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,3],$V2=[1,5],$V3=[1,8,9,10,11,13,18,30,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],$V4=[2,2],$V5=[1,12],$V6=[1,13],$V7=[1,14],$V8=[1,15],$V9=[1,31],$Va=[1,33],$Vb=[1,22],$Vc=[1,34],$Vd=[1,24],$Ve=[1,25],$Vf=[1,26],$Vg=[1,27],$Vh=[1,28],$Vi=[1,38],$Vj=[1,40],$Vk=[1,35],$Vl=[1,39],$Vm=[1,45],$Vn=[1,44],$Vo=[1,36],$Vp=[1,37],$Vq=[1,41],$Vr=[1,42],$Vs=[1,43],$Vt=[1,8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],$Vu=[1,53],$Vv=[1,52],$Vw=[1,54],$Vx=[1,72],$Vy=[1,80],$Vz=[1,81],$VA=[1,66],$VB=[1,65],$VC=[1,85],$VD=[1,84],$VE=[1,82],$VF=[1,83],$VG=[1,73],$VH=[1,68],$VI=[1,67],$VJ=[1,63],$VK=[1,75],$VL=[1,76],$VM=[1,77],$VN=[1,78],$VO=[1,79],$VP=[1,70],$VQ=[1,69],$VR=[8,9,11],$VS=[8,9,11,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],$VT=[1,115],$VU=[8,9,10,11,13,15,18,36,38,40,42,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,86,88,89,91,92,94,95,96,97,98],$VV=[8,9,10,11,12,13,15,16,17,18,30,32,36,37,38,39,40,41,42,43,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,84,86,88,89,91,92,94,95,96,97,98],$VW=[1,117],$VX=[1,118],$VY=[8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],$VZ=[8,9,10,11,12,13,15,16,17,18,30,32,37,39,41,43,46,50,51,52,53,54,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,84,86,88,89,91,92,94,95,96,97,98],$V_=[13,18,46,81,86,88,89,91,92,94,95,96,97,98],$V$=[13,18,46,49,65,81,86,88,89,91,92,94,95,96,97,98],$V01=[1,191],$V11=[1,188],$V21=[1,195],$V31=[1,192],$V41=[1,189],$V51=[1,196],$V61=[1,186],$V71=[1,187],$V81=[1,190],$V91=[1,193],$Va1=[1,194],$Vb1=[1,213],$Vc1=[8,9,11,86],$Vd1=[8,9,10,11,46,71,80,81,84,86,88,89,90,91,92]; -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"mermaidDoc":3,"graphConfig":4,"document":5,"line":6,"statement":7,"SEMI":8,"NEWLINE":9,"SPACE":10,"EOF":11,"GRAPH":12,"DIR":13,"FirstStmtSeperator":14,"TAGEND":15,"TAGSTART":16,"UP":17,"DOWN":18,"ending":19,"endToken":20,"spaceList":21,"spaceListNewline":22,"verticeStatement":23,"separator":24,"styleStatement":25,"linkStyleStatement":26,"classDefStatement":27,"classStatement":28,"clickStatement":29,"subgraph":30,"text":31,"end":32,"vertex":33,"link":34,"alphaNum":35,"SQS":36,"SQE":37,"PS":38,"PE":39,"(-":40,"-)":41,"DIAMOND_START":42,"DIAMOND_STOP":43,"alphaNumStatement":44,"alphaNumToken":45,"MINUS":46,"linkStatement":47,"arrowText":48,"TESTSTR":49,"--":50,"ARROW_POINT":51,"ARROW_CIRCLE":52,"ARROW_CROSS":53,"ARROW_OPEN":54,"-.":55,"DOTTED_ARROW_POINT":56,"DOTTED_ARROW_CIRCLE":57,"DOTTED_ARROW_CROSS":58,"DOTTED_ARROW_OPEN":59,"==":60,"THICK_ARROW_POINT":61,"THICK_ARROW_CIRCLE":62,"THICK_ARROW_CROSS":63,"THICK_ARROW_OPEN":64,"PIPE":65,"textToken":66,"STR":67,"commentText":68,"commentToken":69,"keywords":70,"STYLE":71,"LINKSTYLE":72,"CLASSDEF":73,"CLASS":74,"CLICK":75,"textNoTags":76,"textNoTagsToken":77,"DEFAULT":78,"stylesOpt":79,"HEX":80,"NUM":81,"INTERPOLATE":82,"commentStatement":83,"PCT":84,"style":85,"COMMA":86,"styleComponent":87,"ALPHA":88,"COLON":89,"UNIT":90,"BRKT":91,"DOT":92,"graphCodeTokens":93,"PUNCTUATION":94,"UNICODE_TEXT":95,"PLUS":96,"EQUALS":97,"MULT":98,"TAG_START":99,"TAG_END":100,"QUOTE":101,"$accept":0,"$end":1}, -terminals_: {2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"DIR",15:"TAGEND",16:"TAGSTART",17:"UP",18:"DOWN",30:"subgraph",32:"end",36:"SQS",37:"SQE",38:"PS",39:"PE",40:"(-",41:"-)",42:"DIAMOND_START",43:"DIAMOND_STOP",46:"MINUS",49:"TESTSTR",50:"--",51:"ARROW_POINT",52:"ARROW_CIRCLE",53:"ARROW_CROSS",54:"ARROW_OPEN",55:"-.",56:"DOTTED_ARROW_POINT",57:"DOTTED_ARROW_CIRCLE",58:"DOTTED_ARROW_CROSS",59:"DOTTED_ARROW_OPEN",60:"==",61:"THICK_ARROW_POINT",62:"THICK_ARROW_CIRCLE",63:"THICK_ARROW_CROSS",64:"THICK_ARROW_OPEN",65:"PIPE",67:"STR",71:"STYLE",72:"LINKSTYLE",73:"CLASSDEF",74:"CLASS",75:"CLICK",78:"DEFAULT",80:"HEX",81:"NUM",82:"INTERPOLATE",84:"PCT",86:"COMMA",88:"ALPHA",89:"COLON",90:"UNIT",91:"BRKT",92:"DOT",94:"PUNCTUATION",95:"UNICODE_TEXT",96:"PLUS",97:"EQUALS",98:"MULT",99:"TAG_START",100:"TAG_END",101:"QUOTE"}, -productions_: [0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,4],[4,4],[4,4],[4,4],[4,4],[19,2],[19,1],[20,1],[20,1],[20,1],[14,1],[14,1],[14,2],[22,2],[22,2],[22,1],[22,1],[21,2],[21,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,5],[7,4],[24,1],[24,1],[24,1],[23,3],[23,1],[33,4],[33,5],[33,6],[33,7],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,1],[33,2],[35,1],[35,2],[44,1],[44,1],[44,1],[44,1],[34,2],[34,3],[34,3],[34,1],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[48,3],[31,1],[31,2],[31,1],[68,1],[68,2],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[76,1],[76,2],[27,5],[27,5],[28,5],[29,5],[29,7],[29,5],[29,7],[25,5],[25,5],[26,5],[26,5],[26,9],[26,9],[26,7],[26,7],[83,3],[79,1],[79,3],[85,1],[85,2],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[69,1],[69,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[77,1],[77,1],[77,1],[77,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1]], -performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { + var parser = (function () { + var o = function (k, v, o, l) { for (o = o || {}, l = k.length; l--; o[k[l]] = v);return o }, $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 13, 18, 30, 46, 71, 72, 73, 74, 75, 81, 86, 88, 89, 91, 92, 94, 95, 96, 97, 98], $V4 = [2, 2], $V5 = [1, 12], $V6 = [1, 13], $V7 = [1, 14], $V8 = [1, 15], $V9 = [1, 31], $Va = [1, 33], $Vb = [1, 22], $Vc = [1, 34], $Vd = [1, 24], $Ve = [1, 25], $Vf = [1, 26], $Vg = [1, 27], $Vh = [1, 28], $Vi = [1, 38], $Vj = [1, 40], $Vk = [1, 35], $Vl = [1, 39], $Vm = [1, 45], $Vn = [1, 44], $Vo = [1, 36], $Vp = [1, 37], $Vq = [1, 41], $Vr = [1, 42], $Vs = [1, 43], $Vt = [1, 8, 9, 10, 11, 13, 18, 30, 32, 46, 71, 72, 73, 74, 75, 81, 86, 88, 89, 91, 92, 94, 95, 96, 97, 98], $Vu = [1, 53], $Vv = [1, 52], $Vw = [1, 54], $Vx = [1, 72], $Vy = [1, 80], $Vz = [1, 81], $VA = [1, 66], $VB = [1, 65], $VC = [1, 85], $VD = [1, 84], $VE = [1, 82], $VF = [1, 83], $VG = [1, 73], $VH = [1, 68], $VI = [1, 67], $VJ = [1, 63], $VK = [1, 75], $VL = [1, 76], $VM = [1, 77], $VN = [1, 78], $VO = [1, 79], $VP = [1, 70], $VQ = [1, 69], $VR = [8, 9, 11], $VS = [8, 9, 11, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64], $VT = [1, 115], $VU = [8, 9, 10, 11, 13, 15, 18, 36, 38, 40, 42, 46, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 81, 86, 88, 89, 91, 92, 94, 95, 96, 97, 98], $VV = [8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 30, 32, 36, 37, 38, 39, 40, 41, 42, 43, 46, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 71, 72, 73, 74, 75, 78, 81, 84, 86, 88, 89, 91, 92, 94, 95, 96, 97, 98], $VW = [1, 117], $VX = [1, 118], $VY = [8, 9, 10, 11, 13, 18, 30, 32, 46, 71, 72, 73, 74, 75, 81, 86, 88, 89, 91, 92, 94, 95, 96, 97, 98], $VZ = [8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 30, 32, 37, 39, 41, 43, 46, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 71, 72, 73, 74, 75, 78, 81, 84, 86, 88, 89, 91, 92, 94, 95, 96, 97, 98], $V_ = [13, 18, 46, 81, 86, 88, 89, 91, 92, 94, 95, 96, 97, 98], $V$ = [13, 18, 46, 49, 65, 81, 86, 88, 89, 91, 92, 94, 95, 96, 97, 98], $V01 = [1, 191], $V11 = [1, 188], $V21 = [1, 195], $V31 = [1, 192], $V41 = [1, 189], $V51 = [1, 196], $V61 = [1, 186], $V71 = [1, 187], $V81 = [1, 190], $V91 = [1, 193], $Va1 = [1, 194], $Vb1 = [1, 213], $Vc1 = [8, 9, 11, 86], $Vd1 = [8, 9, 10, 11, 46, 71, 80, 81, 84, 86, 88, 89, 90, 91, 92] + var parser = {trace: function trace () { }, + yy: {}, + symbols_: {'error': 2, 'mermaidDoc': 3, 'graphConfig': 4, 'document': 5, 'line': 6, 'statement': 7, 'SEMI': 8, 'NEWLINE': 9, 'SPACE': 10, 'EOF': 11, 'GRAPH': 12, 'DIR': 13, 'FirstStmtSeperator': 14, 'TAGEND': 15, 'TAGSTART': 16, 'UP': 17, 'DOWN': 18, 'ending': 19, 'endToken': 20, 'spaceList': 21, 'spaceListNewline': 22, 'verticeStatement': 23, 'separator': 24, 'styleStatement': 25, 'linkStyleStatement': 26, 'classDefStatement': 27, 'classStatement': 28, 'clickStatement': 29, 'subgraph': 30, 'text': 31, 'end': 32, 'vertex': 33, 'link': 34, 'alphaNum': 35, 'SQS': 36, 'SQE': 37, 'PS': 38, 'PE': 39, '(-': 40, '-)': 41, 'DIAMOND_START': 42, 'DIAMOND_STOP': 43, 'alphaNumStatement': 44, 'alphaNumToken': 45, 'MINUS': 46, 'linkStatement': 47, 'arrowText': 48, 'TESTSTR': 49, '--': 50, 'ARROW_POINT': 51, 'ARROW_CIRCLE': 52, 'ARROW_CROSS': 53, 'ARROW_OPEN': 54, '-.': 55, 'DOTTED_ARROW_POINT': 56, 'DOTTED_ARROW_CIRCLE': 57, 'DOTTED_ARROW_CROSS': 58, 'DOTTED_ARROW_OPEN': 59, '==': 60, 'THICK_ARROW_POINT': 61, 'THICK_ARROW_CIRCLE': 62, 'THICK_ARROW_CROSS': 63, 'THICK_ARROW_OPEN': 64, 'PIPE': 65, 'textToken': 66, 'STR': 67, 'commentText': 68, 'commentToken': 69, 'keywords': 70, 'STYLE': 71, 'LINKSTYLE': 72, 'CLASSDEF': 73, 'CLASS': 74, 'CLICK': 75, 'textNoTags': 76, 'textNoTagsToken': 77, 'DEFAULT': 78, 'stylesOpt': 79, 'HEX': 80, 'NUM': 81, 'INTERPOLATE': 82, 'commentStatement': 83, 'PCT': 84, 'style': 85, 'COMMA': 86, 'styleComponent': 87, 'ALPHA': 88, 'COLON': 89, 'UNIT': 90, 'BRKT': 91, 'DOT': 92, 'graphCodeTokens': 93, 'PUNCTUATION': 94, 'UNICODE_TEXT': 95, 'PLUS': 96, 'EQUALS': 97, 'MULT': 98, 'TAG_START': 99, 'TAG_END': 100, 'QUOTE': 101, '$accept': 0, '$end': 1}, + terminals_: {2: 'error', 8: 'SEMI', 9: 'NEWLINE', 10: 'SPACE', 11: 'EOF', 12: 'GRAPH', 13: 'DIR', 15: 'TAGEND', 16: 'TAGSTART', 17: 'UP', 18: 'DOWN', 30: 'subgraph', 32: 'end', 36: 'SQS', 37: 'SQE', 38: 'PS', 39: 'PE', 40: '(-', 41: '-)', 42: 'DIAMOND_START', 43: 'DIAMOND_STOP', 46: 'MINUS', 49: 'TESTSTR', 50: '--', 51: 'ARROW_POINT', 52: 'ARROW_CIRCLE', 53: 'ARROW_CROSS', 54: 'ARROW_OPEN', 55: '-.', 56: 'DOTTED_ARROW_POINT', 57: 'DOTTED_ARROW_CIRCLE', 58: 'DOTTED_ARROW_CROSS', 59: 'DOTTED_ARROW_OPEN', 60: '==', 61: 'THICK_ARROW_POINT', 62: 'THICK_ARROW_CIRCLE', 63: 'THICK_ARROW_CROSS', 64: 'THICK_ARROW_OPEN', 65: 'PIPE', 67: 'STR', 71: 'STYLE', 72: 'LINKSTYLE', 73: 'CLASSDEF', 74: 'CLASS', 75: 'CLICK', 78: 'DEFAULT', 80: 'HEX', 81: 'NUM', 82: 'INTERPOLATE', 84: 'PCT', 86: 'COMMA', 88: 'ALPHA', 89: 'COLON', 90: 'UNIT', 91: 'BRKT', 92: 'DOT', 94: 'PUNCTUATION', 95: 'UNICODE_TEXT', 96: 'PLUS', 97: 'EQUALS', 98: 'MULT', 99: 'TAG_START', 100: 'TAG_END', 101: 'QUOTE'}, + productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [19, 2], [19, 1], [20, 1], [20, 1], [20, 1], [14, 1], [14, 1], [14, 2], [22, 2], [22, 2], [22, 1], [22, 1], [21, 2], [21, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 5], [7, 4], [24, 1], [24, 1], [24, 1], [23, 3], [23, 1], [33, 4], [33, 5], [33, 6], [33, 7], [33, 4], [33, 5], [33, 4], [33, 5], [33, 4], [33, 5], [33, 4], [33, 5], [33, 1], [33, 2], [35, 1], [35, 2], [44, 1], [44, 1], [44, 1], [44, 1], [34, 2], [34, 3], [34, 3], [34, 1], [34, 3], [34, 3], [34, 3], [34, 3], [34, 3], [34, 3], [34, 3], [34, 3], [34, 3], [34, 3], [34, 3], [34, 3], [47, 1], [47, 1], [47, 1], [47, 1], [47, 1], [47, 1], [47, 1], [47, 1], [47, 1], [47, 1], [47, 1], [47, 1], [48, 3], [31, 1], [31, 2], [31, 1], [68, 1], [68, 2], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [76, 1], [76, 2], [27, 5], [27, 5], [28, 5], [29, 5], [29, 7], [29, 5], [29, 7], [25, 5], [25, 5], [26, 5], [26, 5], [26, 9], [26, 9], [26, 7], [26, 7], [83, 3], [79, 1], [79, 3], [85, 1], [85, 2], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [69, 1], [69, 1], [66, 1], [66, 1], [66, 1], [66, 1], [66, 1], [66, 1], [66, 1], [77, 1], [77, 1], [77, 1], [77, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [93, 1], [93, 1], [93, 1], [93, 1], [93, 1], [93, 1], [93, 1], [93, 1], [93, 1], [93, 1], [93, 1], [93, 1], [93, 1], [93, 1], [93, 1]], + performAction: function anonymous (yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ -var $0 = $$.length - 1; -switch (yystate) { -case 2: - this.$ = []; -break; -case 3: + var $0 = $$.length - 1 + switch (yystate) { + case 2: + this.$ = [] + break + case 3: - if($$[$0] !== []){ - $$[$0-1].push($$[$0]); + if ($$[$0] !== []) { + $$[$0 - 1].push($$[$0]) } - this.$=$$[$0-1]; -break; -case 4: case 57: case 59: case 60: case 92: case 94: case 95: case 108: -this.$=$$[$0]; -break; -case 11: - yy.setDirection($$[$0-1]);this.$ = $$[$0-1]; -break; -case 12: - yy.setDirection("LR");this.$ = $$[$0-1]; -break; -case 13: - yy.setDirection("RL");this.$ = $$[$0-1]; -break; -case 14: - yy.setDirection("BT");this.$ = $$[$0-1]; -break; -case 15: - yy.setDirection("TB");this.$ = $$[$0-1]; -break; -case 30: -this.$=$$[$0-1] -break; -case 31: case 32: case 33: case 34: case 35: -this.$=[]; -break; -case 36: -this.$=yy.addSubGraph($$[$0-1],$$[$0-3]); -break; -case 37: -this.$=yy.addSubGraph($$[$0-1],undefined); -break; -case 41: - yy.addLink($$[$0-2],$$[$0],$$[$0-1]);this.$ = [$$[$0-2],$$[$0]]; -break; -case 42: -this.$ = [$$[$0]]; -break; -case 43: -this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'square'); -break; -case 44: -this.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'square'); -break; -case 45: -this.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'circle'); -break; -case 46: -this.$ = $$[$0-6];yy.addVertex($$[$0-6],$$[$0-3],'circle'); -break; -case 47: -this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'ellipse'); -break; -case 48: -this.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'ellipse'); -break; -case 49: -this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'round'); -break; -case 50: -this.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'round'); -break; -case 51: -this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'diamond'); -break; -case 52: -this.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'diamond'); -break; -case 53: -this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'odd'); -break; -case 54: -this.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'odd'); -break; -case 55: -this.$ = $$[$0];yy.addVertex($$[$0]); -break; -case 56: -this.$ = $$[$0-1];yy.addVertex($$[$0-1]); -break; -case 58: case 93: case 96: case 109: -this.$=$$[$0-1]+''+$$[$0]; -break; -case 61: -this.$='v'; -break; -case 62: -this.$='-'; -break; -case 63: -$$[$0-1].text = $$[$0];this.$ = $$[$0-1]; -break; -case 64: case 65: -$$[$0-2].text = $$[$0-1];this.$ = $$[$0-2]; -break; -case 66: -this.$ = $$[$0]; -break; -case 67: -this.$ = {"type":"arrow","stroke":"normal","text":$$[$0-1]}; -break; -case 68: -this.$ = {"type":"arrow_circle","stroke":"normal","text":$$[$0-1]}; -break; -case 69: -this.$ = {"type":"arrow_cross","stroke":"normal","text":$$[$0-1]}; -break; -case 70: -this.$ = {"type":"arrow_open","stroke":"normal","text":$$[$0-1]}; -break; -case 71: -this.$ = {"type":"arrow","stroke":"dotted","text":$$[$0-1]}; -break; -case 72: -this.$ = {"type":"arrow_circle","stroke":"dotted","text":$$[$0-1]}; -break; -case 73: -this.$ = {"type":"arrow_cross","stroke":"dotted","text":$$[$0-1]}; -break; -case 74: -this.$ = {"type":"arrow_open","stroke":"dotted","text":$$[$0-1]}; -break; -case 75: -this.$ = {"type":"arrow","stroke":"thick","text":$$[$0-1]}; -break; -case 76: -this.$ = {"type":"arrow_circle","stroke":"thick","text":$$[$0-1]}; -break; -case 77: -this.$ = {"type":"arrow_cross","stroke":"thick","text":$$[$0-1]}; -break; -case 78: -this.$ = {"type":"arrow_open","stroke":"thick","text":$$[$0-1]}; -break; -case 79: -this.$ = {"type":"arrow","stroke":"normal"}; -break; -case 80: -this.$ = {"type":"arrow_circle","stroke":"normal"}; -break; -case 81: -this.$ = {"type":"arrow_cross","stroke":"normal"}; -break; -case 82: -this.$ = {"type":"arrow_open","stroke":"normal"}; -break; -case 83: -this.$ = {"type":"arrow","stroke":"dotted"}; -break; -case 84: -this.$ = {"type":"arrow_circle","stroke":"dotted"}; -break; -case 85: -this.$ = {"type":"arrow_cross","stroke":"dotted"}; -break; -case 86: -this.$ = {"type":"arrow_open","stroke":"dotted"}; -break; -case 87: -this.$ = {"type":"arrow","stroke":"thick"}; -break; -case 88: -this.$ = {"type":"arrow_circle","stroke":"thick"}; -break; -case 89: -this.$ = {"type":"arrow_cross","stroke":"thick"}; -break; -case 90: -this.$ = {"type":"arrow_open","stroke":"thick"}; -break; -case 91: -this.$ = $$[$0-1]; -break; -case 110: case 111: -this.$ = $$[$0-4];yy.addClass($$[$0-2],$$[$0]); -break; -case 112: -this.$ = $$[$0-4];yy.setClass($$[$0-2], $$[$0]); -break; -case 113: -this.$ = $$[$0-4];yy.setClickEvent($$[$0-2], $$[$0], undefined, undefined); -break; -case 114: -this.$ = $$[$0-6];yy.setClickEvent($$[$0-4], $$[$0-2], undefined, $$[$0]) ; -break; -case 115: -this.$ = $$[$0-4];yy.setClickEvent($$[$0-2], undefined, $$[$0], undefined); -break; -case 116: -this.$ = $$[$0-6];yy.setClickEvent($$[$0-4], undefined, $$[$0-2], $$[$0] ); -break; -case 117: -this.$ = $$[$0-4];yy.addVertex($$[$0-2],undefined,undefined,$$[$0]); -break; -case 118: case 119: case 120: -this.$ = $$[$0-4];yy.updateLink($$[$0-2],$$[$0]); -break; -case 121: case 122: -this.$ = $$[$0-8];yy.updateLinkInterpolate($$[$0-6],$$[$0-2]);yy.updateLink($$[$0-6],$$[$0]); -break; -case 123: case 124: -this.$ = $$[$0-6];yy.updateLinkInterpolate($$[$0-4],$$[$0]); -break; -case 126: -this.$ = [$$[$0]] -break; -case 127: -$$[$0-2].push($$[$0]);this.$ = $$[$0-2]; -break; -case 129: -this.$ = $$[$0-1] + $$[$0]; -break; -} -}, -table: [{3:1,4:2,9:$V0,10:$V1,12:$V2},{1:[3]},o($V3,$V4,{5:6}),{4:7,9:$V0,10:$V1,12:$V2},{4:8,9:$V0,10:$V1,12:$V2},{10:[1,9]},{1:[2,1],6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,33:23,35:29,44:30,45:32,46:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($V3,[2,9]),o($V3,[2,10]),{13:[1,46],15:[1,47],16:[1,48],17:[1,49],18:[1,50]},o($Vt,[2,3]),o($Vt,[2,4]),o($Vt,[2,5]),o($Vt,[2,6]),o($Vt,[2,7]),o($Vt,[2,8]),{8:$Vu,9:$Vv,11:$Vw,24:51},{8:$Vu,9:$Vv,11:$Vw,24:55},{8:$Vu,9:$Vv,11:$Vw,24:56},{8:$Vu,9:$Vv,11:$Vw,24:57},{8:$Vu,9:$Vv,11:$Vw,24:58},{8:$Vu,9:$Vv,11:$Vw,24:59},{8:$Vu,9:$Vv,10:$Vx,11:$Vw,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,24:61,30:$VE,31:60,32:$VF,45:71,46:$VG,50:$VH,60:$VI,66:62,67:$VJ,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($VR,[2,42],{34:86,47:87,50:[1,88],51:[1,91],52:[1,92],53:[1,93],54:[1,94],55:[1,89],56:[1,95],57:[1,96],58:[1,97],59:[1,98],60:[1,90],61:[1,99],62:[1,100],63:[1,101],64:[1,102]}),{10:[1,103]},{10:[1,104]},{10:[1,105]},{10:[1,106]},{10:[1,107]},o($VS,[2,55],{45:32,21:113,44:114,10:$VT,13:$V9,15:[1,112],18:$Va,36:[1,108],38:[1,109],40:[1,110],42:[1,111],46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs}),o($VU,[2,57]),o($VU,[2,59]),o($VU,[2,60]),o($VU,[2,61]),o($VU,[2,62]),o($VV,[2,154]),o($VV,[2,155]),o($VV,[2,156]),o($VV,[2,157]),o($VV,[2,158]),o($VV,[2,159]),o($VV,[2,160]),o($VV,[2,161]),o($VV,[2,162]),o($VV,[2,163]),o($VV,[2,164]),{8:$VW,9:$VX,10:$VT,14:116,21:119},{8:$VW,9:$VX,10:$VT,14:120,21:119},{8:$VW,9:$VX,10:$VT,14:121,21:119},{8:$VW,9:$VX,10:$VT,14:122,21:119},{8:$VW,9:$VX,10:$VT,14:123,21:119},o($Vt,[2,30]),o($Vt,[2,38]),o($Vt,[2,39]),o($Vt,[2,40]),o($Vt,[2,31]),o($Vt,[2,32]),o($Vt,[2,33]),o($Vt,[2,34]),o($Vt,[2,35]),{8:$Vu,9:$Vv,10:$Vx,11:$Vw,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,24:124,30:$VE,32:$VF,45:71,46:$VG,50:$VH,60:$VI,66:125,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($VY,$V4,{5:126}),o($VZ,[2,92]),o($VZ,[2,94]),o($VZ,[2,143]),o($VZ,[2,144]),o($VZ,[2,145]),o($VZ,[2,146]),o($VZ,[2,147]),o($VZ,[2,148]),o($VZ,[2,149]),o($VZ,[2,150]),o($VZ,[2,151]),o($VZ,[2,152]),o($VZ,[2,153]),o($VZ,[2,97]),o($VZ,[2,98]),o($VZ,[2,99]),o($VZ,[2,100]),o($VZ,[2,101]),o($VZ,[2,102]),o($VZ,[2,103]),o($VZ,[2,104]),o($VZ,[2,105]),o($VZ,[2,106]),o($VZ,[2,107]),{13:$V9,18:$Va,33:127,35:29,44:30,45:32,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($V_,[2,66],{48:128,49:[1,129],65:[1,130]}),{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,31:131,32:$VF,45:71,46:$VG,50:$VH,60:$VI,66:62,67:$VJ,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,31:132,32:$VF,45:71,46:$VG,50:$VH,60:$VI,66:62,67:$VJ,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,31:133,32:$VF,45:71,46:$VG,50:$VH,60:$VI,66:62,67:$VJ,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($V$,[2,79]),o($V$,[2,80]),o($V$,[2,81]),o($V$,[2,82]),o($V$,[2,83]),o($V$,[2,84]),o($V$,[2,85]),o($V$,[2,86]),o($V$,[2,87]),o($V$,[2,88]),o($V$,[2,89]),o($V$,[2,90]),{13:$V9,18:$Va,35:134,44:30,45:32,46:$Vc,80:[1,135],81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{78:[1,136],81:[1,137]},{13:$V9,18:$Va,35:139,44:30,45:32,46:$Vc,78:[1,138],81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{13:$V9,18:$Va,35:140,44:30,45:32,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{13:$V9,18:$Va,35:141,44:30,45:32,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,31:142,32:$VF,45:71,46:$VG,50:$VH,60:$VI,66:62,67:$VJ,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,31:144,32:$VF,38:[1,143],45:71,46:$VG,50:$VH,60:$VI,66:62,67:$VJ,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,31:145,32:$VF,45:71,46:$VG,50:$VH,60:$VI,66:62,67:$VJ,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,31:146,32:$VF,45:71,46:$VG,50:$VH,60:$VI,66:62,67:$VJ,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,31:147,32:$VF,45:71,46:$VG,50:$VH,60:$VI,66:62,67:$VJ,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($VS,[2,56]),o($VU,[2,58]),o($VS,[2,29],{21:148,10:$VT}),o($V3,[2,11]),o($V3,[2,21]),o($V3,[2,22]),{9:[1,149]},o($V3,[2,12]),o($V3,[2,13]),o($V3,[2,14]),o($V3,[2,15]),o($VY,$V4,{5:150}),o($VZ,[2,93]),{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,32:[1,151],33:23,35:29,44:30,45:32,46:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($VR,[2,41]),o($V_,[2,63],{10:[1,152]}),{10:[1,153]},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,31:154,32:$VF,45:71,46:$VG,50:$VH,60:$VI,66:62,67:$VJ,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,32:$VF,45:71,46:$VG,50:$VH,51:[1,155],52:[1,156],53:[1,157],54:[1,158],60:$VI,66:125,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,32:$VF,45:71,46:$VG,50:$VH,56:[1,159],57:[1,160],58:[1,161],59:[1,162],60:$VI,66:125,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,32:$VF,45:71,46:$VG,50:$VH,60:$VI,61:[1,163],62:[1,164],63:[1,165],64:[1,166],66:125,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:[1,167],13:$V9,18:$Va,44:114,45:32,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:[1,168]},{10:[1,169]},{10:[1,170]},{10:[1,171]},{10:[1,172],13:$V9,18:$Va,44:114,45:32,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:[1,173],13:$V9,18:$Va,44:114,45:32,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:[1,174],13:$V9,18:$Va,44:114,45:32,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,32:$VF,37:[1,175],45:71,46:$VG,50:$VH,60:$VI,66:125,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,31:176,32:$VF,45:71,46:$VG,50:$VH,60:$VI,66:62,67:$VJ,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,32:$VF,39:[1,177],45:71,46:$VG,50:$VH,60:$VI,66:125,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,32:$VF,41:[1,178],45:71,46:$VG,50:$VH,60:$VI,66:125,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,32:$VF,43:[1,179],45:71,46:$VG,50:$VH,60:$VI,66:125,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,32:$VF,37:[1,180],45:71,46:$VG,50:$VH,60:$VI,66:125,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($VS,[2,28]),o($V3,[2,23]),{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,32:[1,181],33:23,35:29,44:30,45:32,46:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($Vt,[2,37]),o($V_,[2,65]),o($V_,[2,64]),{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,32:$VF,45:71,46:$VG,50:$VH,60:$VI,65:[1,182],66:125,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($V_,[2,67]),o($V_,[2,68]),o($V_,[2,69]),o($V_,[2,70]),o($V_,[2,71]),o($V_,[2,72]),o($V_,[2,73]),o($V_,[2,74]),o($V_,[2,75]),o($V_,[2,76]),o($V_,[2,77]),o($V_,[2,78]),{10:$V01,46:$V11,71:$V21,79:183,80:$V31,81:$V41,84:$V51,85:184,87:185,88:$V61,89:$V71,90:$V81,91:$V91,92:$Va1},{10:$V01,46:$V11,71:$V21,79:197,80:$V31,81:$V41,84:$V51,85:184,87:185,88:$V61,89:$V71,90:$V81,91:$V91,92:$Va1},{10:$V01,46:$V11,71:$V21,79:198,80:$V31,81:$V41,82:[1,199],84:$V51,85:184,87:185,88:$V61,89:$V71,90:$V81,91:$V91,92:$Va1},{10:$V01,46:$V11,71:$V21,79:200,80:$V31,81:$V41,82:[1,201],84:$V51,85:184,87:185,88:$V61,89:$V71,90:$V81,91:$V91,92:$Va1},{10:$V01,46:$V11,71:$V21,79:202,80:$V31,81:$V41,84:$V51,85:184,87:185,88:$V61,89:$V71,90:$V81,91:$V91,92:$Va1},{10:$V01,46:$V11,71:$V21,79:203,80:$V31,81:$V41,84:$V51,85:184,87:185,88:$V61,89:$V71,90:$V81,91:$V91,92:$Va1},{13:$V9,18:$Va,35:204,44:30,45:32,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{13:$V9,18:$Va,35:205,44:30,45:32,46:$Vc,67:[1,206],81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($VS,[2,43],{21:207,10:$VT}),{10:$Vx,12:$Vy,13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,30:$VE,32:$VF,39:[1,208],45:71,46:$VG,50:$VH,60:$VI,66:125,70:74,71:$VK,72:$VL,73:$VM,74:$VN,75:$VO,77:64,78:$VP,81:$Vi,84:$VQ,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},o($VS,[2,49],{21:209,10:$VT}),o($VS,[2,47],{21:210,10:$VT}),o($VS,[2,51],{21:211,10:$VT}),o($VS,[2,53],{21:212,10:$VT}),o($Vt,[2,36]),o([10,13,18,46,81,86,88,89,91,92,94,95,96,97,98],[2,91]),o($VR,[2,117],{86:$Vb1}),o($Vc1,[2,126],{87:214,10:$V01,46:$V11,71:$V21,80:$V31,81:$V41,84:$V51,88:$V61,89:$V71,90:$V81,91:$V91,92:$Va1}),o($Vd1,[2,128]),o($Vd1,[2,130]),o($Vd1,[2,131]),o($Vd1,[2,132]),o($Vd1,[2,133]),o($Vd1,[2,134]),o($Vd1,[2,135]),o($Vd1,[2,136]),o($Vd1,[2,137]),o($Vd1,[2,138]),o($Vd1,[2,139]),o($Vd1,[2,140]),o($VR,[2,118],{86:$Vb1}),o($VR,[2,119],{86:$Vb1}),{10:[1,215]},o($VR,[2,120],{86:$Vb1}),{10:[1,216]},o($VR,[2,110],{86:$Vb1}),o($VR,[2,111],{86:$Vb1}),o($VR,[2,112],{45:32,44:114,13:$V9,18:$Va,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs}),o($VR,[2,113],{45:32,44:114,10:[1,217],13:$V9,18:$Va,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs}),o($VR,[2,115],{10:[1,218]}),o($VS,[2,44]),{39:[1,219]},o($VS,[2,50]),o($VS,[2,48]),o($VS,[2,52]),o($VS,[2,54]),{10:$V01,46:$V11,71:$V21,80:$V31,81:$V41,84:$V51,85:220,87:185,88:$V61,89:$V71,90:$V81,91:$V91,92:$Va1},o($Vd1,[2,129]),{13:$V9,18:$Va,35:221,44:30,45:32,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{13:$V9,18:$Va,35:222,44:30,45:32,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs},{67:[1,223]},{67:[1,224]},o($VS,[2,45],{21:225,10:$VT}),o($Vc1,[2,127],{87:214,10:$V01,46:$V11,71:$V21,80:$V31,81:$V41,84:$V51,88:$V61,89:$V71,90:$V81,91:$V91,92:$Va1}),o($VR,[2,123],{45:32,44:114,10:[1,226],13:$V9,18:$Va,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs}),o($VR,[2,124],{45:32,44:114,10:[1,227],13:$V9,18:$Va,46:$Vc,81:$Vi,86:$Vj,88:$Vk,89:$Vl,91:$Vm,92:$Vn,94:$Vo,95:$Vp,96:$Vq,97:$Vr,98:$Vs}),o($VR,[2,114]),o($VR,[2,116]),o($VS,[2,46]),{10:$V01,46:$V11,71:$V21,79:228,80:$V31,81:$V41,84:$V51,85:184,87:185,88:$V61,89:$V71,90:$V81,91:$V91,92:$Va1},{10:$V01,46:$V11,71:$V21,79:229,80:$V31,81:$V41,84:$V51,85:184,87:185,88:$V61,89:$V71,90:$V81,91:$V91,92:$Va1},o($VR,[2,121],{86:$Vb1}),o($VR,[2,122],{86:$Vb1})], -defaultActions: {}, -parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - function _parseError (msg, hash) { - this.message = msg; - this.hash = hash; - } - _parseError.prototype = Error; - - throw new _parseError(str, hash); - } -}, -parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - _token_stack: + this.$ = $$[$0 - 1] + break + case 4: case 57: case 59: case 60: case 92: case 94: case 95: case 108: + this.$ = $$[$0] + break + case 11: + yy.setDirection($$[$0 - 1]); this.$ = $$[$0 - 1] + break + case 12: + yy.setDirection('LR'); this.$ = $$[$0 - 1] + break + case 13: + yy.setDirection('RL'); this.$ = $$[$0 - 1] + break + case 14: + yy.setDirection('BT'); this.$ = $$[$0 - 1] + break + case 15: + yy.setDirection('TB'); this.$ = $$[$0 - 1] + break + case 30: + this.$ = $$[$0 - 1] + break + case 31: case 32: case 33: case 34: case 35: + this.$ = [] + break + case 36: + this.$ = yy.addSubGraph($$[$0 - 1], $$[$0 - 3]) + break + case 37: + this.$ = yy.addSubGraph($$[$0 - 1], undefined) + break + case 41: + yy.addLink($$[$0 - 2], $$[$0], $$[$0 - 1]); this.$ = [$$[$0 - 2], $$[$0]] + break + case 42: + this.$ = [$$[$0]] + break + case 43: + this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], 'square') + break + case 44: + this.$ = $$[$0 - 4]; yy.addVertex($$[$0 - 4], $$[$0 - 2], 'square') + break + case 45: + this.$ = $$[$0 - 5]; yy.addVertex($$[$0 - 5], $$[$0 - 2], 'circle') + break + case 46: + this.$ = $$[$0 - 6]; yy.addVertex($$[$0 - 6], $$[$0 - 3], 'circle') + break + case 47: + this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], 'ellipse') + break + case 48: + this.$ = $$[$0 - 4]; yy.addVertex($$[$0 - 4], $$[$0 - 2], 'ellipse') + break + case 49: + this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], 'round') + break + case 50: + this.$ = $$[$0 - 4]; yy.addVertex($$[$0 - 4], $$[$0 - 2], 'round') + break + case 51: + this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], 'diamond') + break + case 52: + this.$ = $$[$0 - 4]; yy.addVertex($$[$0 - 4], $$[$0 - 2], 'diamond') + break + case 53: + this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], 'odd') + break + case 54: + this.$ = $$[$0 - 4]; yy.addVertex($$[$0 - 4], $$[$0 - 2], 'odd') + break + case 55: + this.$ = $$[$0]; yy.addVertex($$[$0]) + break + case 56: + this.$ = $$[$0 - 1]; yy.addVertex($$[$0 - 1]) + break + case 58: case 93: case 96: case 109: + this.$ = $$[$0 - 1] + '' + $$[$0] + break + case 61: + this.$ = 'v' + break + case 62: + this.$ = '-' + break + case 63: + $$[$0 - 1].text = $$[$0]; this.$ = $$[$0 - 1] + break + case 64: case 65: + $$[$0 - 2].text = $$[$0 - 1]; this.$ = $$[$0 - 2] + break + case 66: + this.$ = $$[$0] + break + case 67: + this.$ = {'type': 'arrow', 'stroke': 'normal', 'text': $$[$0 - 1]} + break + case 68: + this.$ = {'type': 'arrow_circle', 'stroke': 'normal', 'text': $$[$0 - 1]} + break + case 69: + this.$ = {'type': 'arrow_cross', 'stroke': 'normal', 'text': $$[$0 - 1]} + break + case 70: + this.$ = {'type': 'arrow_open', 'stroke': 'normal', 'text': $$[$0 - 1]} + break + case 71: + this.$ = {'type': 'arrow', 'stroke': 'dotted', 'text': $$[$0 - 1]} + break + case 72: + this.$ = {'type': 'arrow_circle', 'stroke': 'dotted', 'text': $$[$0 - 1]} + break + case 73: + this.$ = {'type': 'arrow_cross', 'stroke': 'dotted', 'text': $$[$0 - 1]} + break + case 74: + this.$ = {'type': 'arrow_open', 'stroke': 'dotted', 'text': $$[$0 - 1]} + break + case 75: + this.$ = {'type': 'arrow', 'stroke': 'thick', 'text': $$[$0 - 1]} + break + case 76: + this.$ = {'type': 'arrow_circle', 'stroke': 'thick', 'text': $$[$0 - 1]} + break + case 77: + this.$ = {'type': 'arrow_cross', 'stroke': 'thick', 'text': $$[$0 - 1]} + break + case 78: + this.$ = {'type': 'arrow_open', 'stroke': 'thick', 'text': $$[$0 - 1]} + break + case 79: + this.$ = {'type': 'arrow', 'stroke': 'normal'} + break + case 80: + this.$ = {'type': 'arrow_circle', 'stroke': 'normal'} + break + case 81: + this.$ = {'type': 'arrow_cross', 'stroke': 'normal'} + break + case 82: + this.$ = {'type': 'arrow_open', 'stroke': 'normal'} + break + case 83: + this.$ = {'type': 'arrow', 'stroke': 'dotted'} + break + case 84: + this.$ = {'type': 'arrow_circle', 'stroke': 'dotted'} + break + case 85: + this.$ = {'type': 'arrow_cross', 'stroke': 'dotted'} + break + case 86: + this.$ = {'type': 'arrow_open', 'stroke': 'dotted'} + break + case 87: + this.$ = {'type': 'arrow', 'stroke': 'thick'} + break + case 88: + this.$ = {'type': 'arrow_circle', 'stroke': 'thick'} + break + case 89: + this.$ = {'type': 'arrow_cross', 'stroke': 'thick'} + break + case 90: + this.$ = {'type': 'arrow_open', 'stroke': 'thick'} + break + case 91: + this.$ = $$[$0 - 1] + break + case 110: case 111: + this.$ = $$[$0 - 4]; yy.addClass($$[$0 - 2], $$[$0]) + break + case 112: + this.$ = $$[$0 - 4]; yy.setClass($$[$0 - 2], $$[$0]) + break + case 113: + this.$ = $$[$0 - 4]; yy.setClickEvent($$[$0 - 2], $$[$0], undefined, undefined) + break + case 114: + this.$ = $$[$0 - 6]; yy.setClickEvent($$[$0 - 4], $$[$0 - 2], undefined, $$[$0]) + break + case 115: + this.$ = $$[$0 - 4]; yy.setClickEvent($$[$0 - 2], undefined, $$[$0], undefined) + break + case 116: + this.$ = $$[$0 - 6]; yy.setClickEvent($$[$0 - 4], undefined, $$[$0 - 2], $$[$0]) + break + case 117: + this.$ = $$[$0 - 4]; yy.addVertex($$[$0 - 2], undefined, undefined, $$[$0]) + break + case 118: case 119: case 120: + this.$ = $$[$0 - 4]; yy.updateLink($$[$0 - 2], $$[$0]) + break + case 121: case 122: + this.$ = $$[$0 - 8]; yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); yy.updateLink($$[$0 - 6], $$[$0]) + break + case 123: case 124: + this.$ = $$[$0 - 6]; yy.updateLinkInterpolate($$[$0 - 4], $$[$0]) + break + case 126: + this.$ = [$$[$0]] + break + case 127: + $$[$0 - 2].push($$[$0]); this.$ = $$[$0 - 2] + break + case 129: + this.$ = $$[$0 - 1] + $$[$0] + break + } + }, + table: [{3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2}, {1: [3]}, o($V3, $V4, {5: 6}), {4: 7, 9: $V0, 10: $V1, 12: $V2}, {4: 8, 9: $V0, 10: $V1, 12: $V2}, {10: [1, 9]}, {1: [2, 1], 6: 10, 7: 11, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 13: $V9, 18: $Va, 23: 16, 25: 17, 26: 18, 27: 19, 28: 20, 29: 21, 30: $Vb, 33: 23, 35: 29, 44: 30, 45: 32, 46: $Vc, 71: $Vd, 72: $Ve, 73: $Vf, 74: $Vg, 75: $Vh, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($V3, [2, 9]), o($V3, [2, 10]), {13: [1, 46], 15: [1, 47], 16: [1, 48], 17: [1, 49], 18: [1, 50]}, o($Vt, [2, 3]), o($Vt, [2, 4]), o($Vt, [2, 5]), o($Vt, [2, 6]), o($Vt, [2, 7]), o($Vt, [2, 8]), {8: $Vu, 9: $Vv, 11: $Vw, 24: 51}, {8: $Vu, 9: $Vv, 11: $Vw, 24: 55}, {8: $Vu, 9: $Vv, 11: $Vw, 24: 56}, {8: $Vu, 9: $Vv, 11: $Vw, 24: 57}, {8: $Vu, 9: $Vv, 11: $Vw, 24: 58}, {8: $Vu, 9: $Vv, 11: $Vw, 24: 59}, {8: $Vu, 9: $Vv, 10: $Vx, 11: $Vw, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 24: 61, 30: $VE, 31: 60, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 62, 67: $VJ, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($VR, [2, 42], {34: 86, 47: 87, 50: [1, 88], 51: [1, 91], 52: [1, 92], 53: [1, 93], 54: [1, 94], 55: [1, 89], 56: [1, 95], 57: [1, 96], 58: [1, 97], 59: [1, 98], 60: [1, 90], 61: [1, 99], 62: [1, 100], 63: [1, 101], 64: [1, 102]}), {10: [1, 103]}, {10: [1, 104]}, {10: [1, 105]}, {10: [1, 106]}, {10: [1, 107]}, o($VS, [2, 55], {45: 32, 21: 113, 44: 114, 10: $VT, 13: $V9, 15: [1, 112], 18: $Va, 36: [1, 108], 38: [1, 109], 40: [1, 110], 42: [1, 111], 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}), o($VU, [2, 57]), o($VU, [2, 59]), o($VU, [2, 60]), o($VU, [2, 61]), o($VU, [2, 62]), o($VV, [2, 154]), o($VV, [2, 155]), o($VV, [2, 156]), o($VV, [2, 157]), o($VV, [2, 158]), o($VV, [2, 159]), o($VV, [2, 160]), o($VV, [2, 161]), o($VV, [2, 162]), o($VV, [2, 163]), o($VV, [2, 164]), {8: $VW, 9: $VX, 10: $VT, 14: 116, 21: 119}, {8: $VW, 9: $VX, 10: $VT, 14: 120, 21: 119}, {8: $VW, 9: $VX, 10: $VT, 14: 121, 21: 119}, {8: $VW, 9: $VX, 10: $VT, 14: 122, 21: 119}, {8: $VW, 9: $VX, 10: $VT, 14: 123, 21: 119}, o($Vt, [2, 30]), o($Vt, [2, 38]), o($Vt, [2, 39]), o($Vt, [2, 40]), o($Vt, [2, 31]), o($Vt, [2, 32]), o($Vt, [2, 33]), o($Vt, [2, 34]), o($Vt, [2, 35]), {8: $Vu, 9: $Vv, 10: $Vx, 11: $Vw, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 24: 124, 30: $VE, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 125, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($VY, $V4, {5: 126}), o($VZ, [2, 92]), o($VZ, [2, 94]), o($VZ, [2, 143]), o($VZ, [2, 144]), o($VZ, [2, 145]), o($VZ, [2, 146]), o($VZ, [2, 147]), o($VZ, [2, 148]), o($VZ, [2, 149]), o($VZ, [2, 150]), o($VZ, [2, 151]), o($VZ, [2, 152]), o($VZ, [2, 153]), o($VZ, [2, 97]), o($VZ, [2, 98]), o($VZ, [2, 99]), o($VZ, [2, 100]), o($VZ, [2, 101]), o($VZ, [2, 102]), o($VZ, [2, 103]), o($VZ, [2, 104]), o($VZ, [2, 105]), o($VZ, [2, 106]), o($VZ, [2, 107]), {13: $V9, 18: $Va, 33: 127, 35: 29, 44: 30, 45: 32, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($V_, [2, 66], {48: 128, 49: [1, 129], 65: [1, 130]}), {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 31: 131, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 62, 67: $VJ, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 31: 132, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 62, 67: $VJ, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 31: 133, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 62, 67: $VJ, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($V$, [2, 79]), o($V$, [2, 80]), o($V$, [2, 81]), o($V$, [2, 82]), o($V$, [2, 83]), o($V$, [2, 84]), o($V$, [2, 85]), o($V$, [2, 86]), o($V$, [2, 87]), o($V$, [2, 88]), o($V$, [2, 89]), o($V$, [2, 90]), {13: $V9, 18: $Va, 35: 134, 44: 30, 45: 32, 46: $Vc, 80: [1, 135], 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {78: [1, 136], 81: [1, 137]}, {13: $V9, 18: $Va, 35: 139, 44: 30, 45: 32, 46: $Vc, 78: [1, 138], 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {13: $V9, 18: $Va, 35: 140, 44: 30, 45: 32, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {13: $V9, 18: $Va, 35: 141, 44: 30, 45: 32, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 31: 142, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 62, 67: $VJ, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 31: 144, 32: $VF, 38: [1, 143], 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 62, 67: $VJ, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 31: 145, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 62, 67: $VJ, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 31: 146, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 62, 67: $VJ, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 31: 147, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 62, 67: $VJ, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($VS, [2, 56]), o($VU, [2, 58]), o($VS, [2, 29], {21: 148, 10: $VT}), o($V3, [2, 11]), o($V3, [2, 21]), o($V3, [2, 22]), {9: [1, 149]}, o($V3, [2, 12]), o($V3, [2, 13]), o($V3, [2, 14]), o($V3, [2, 15]), o($VY, $V4, {5: 150}), o($VZ, [2, 93]), {6: 10, 7: 11, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 13: $V9, 18: $Va, 23: 16, 25: 17, 26: 18, 27: 19, 28: 20, 29: 21, 30: $Vb, 32: [1, 151], 33: 23, 35: 29, 44: 30, 45: 32, 46: $Vc, 71: $Vd, 72: $Ve, 73: $Vf, 74: $Vg, 75: $Vh, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($VR, [2, 41]), o($V_, [2, 63], {10: [1, 152]}), {10: [1, 153]}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 31: 154, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 62, 67: $VJ, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 32: $VF, 45: 71, 46: $VG, 50: $VH, 51: [1, 155], 52: [1, 156], 53: [1, 157], 54: [1, 158], 60: $VI, 66: 125, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 32: $VF, 45: 71, 46: $VG, 50: $VH, 56: [1, 159], 57: [1, 160], 58: [1, 161], 59: [1, 162], 60: $VI, 66: 125, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 61: [1, 163], 62: [1, 164], 63: [1, 165], 64: [1, 166], 66: 125, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: [1, 167], 13: $V9, 18: $Va, 44: 114, 45: 32, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: [1, 168]}, {10: [1, 169]}, {10: [1, 170]}, {10: [1, 171]}, {10: [1, 172], 13: $V9, 18: $Va, 44: 114, 45: 32, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: [1, 173], 13: $V9, 18: $Va, 44: 114, 45: 32, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: [1, 174], 13: $V9, 18: $Va, 44: 114, 45: 32, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 32: $VF, 37: [1, 175], 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 125, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 31: 176, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 62, 67: $VJ, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 32: $VF, 39: [1, 177], 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 125, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 32: $VF, 41: [1, 178], 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 125, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 32: $VF, 43: [1, 179], 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 125, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 32: $VF, 37: [1, 180], 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 125, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($VS, [2, 28]), o($V3, [2, 23]), {6: 10, 7: 11, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 13: $V9, 18: $Va, 23: 16, 25: 17, 26: 18, 27: 19, 28: 20, 29: 21, 30: $Vb, 32: [1, 181], 33: 23, 35: 29, 44: 30, 45: 32, 46: $Vc, 71: $Vd, 72: $Ve, 73: $Vf, 74: $Vg, 75: $Vh, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($Vt, [2, 37]), o($V_, [2, 65]), o($V_, [2, 64]), {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 32: $VF, 45: 71, 46: $VG, 50: $VH, 60: $VI, 65: [1, 182], 66: 125, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($V_, [2, 67]), o($V_, [2, 68]), o($V_, [2, 69]), o($V_, [2, 70]), o($V_, [2, 71]), o($V_, [2, 72]), o($V_, [2, 73]), o($V_, [2, 74]), o($V_, [2, 75]), o($V_, [2, 76]), o($V_, [2, 77]), o($V_, [2, 78]), {10: $V01, 46: $V11, 71: $V21, 79: 183, 80: $V31, 81: $V41, 84: $V51, 85: 184, 87: 185, 88: $V61, 89: $V71, 90: $V81, 91: $V91, 92: $Va1}, {10: $V01, 46: $V11, 71: $V21, 79: 197, 80: $V31, 81: $V41, 84: $V51, 85: 184, 87: 185, 88: $V61, 89: $V71, 90: $V81, 91: $V91, 92: $Va1}, {10: $V01, 46: $V11, 71: $V21, 79: 198, 80: $V31, 81: $V41, 82: [1, 199], 84: $V51, 85: 184, 87: 185, 88: $V61, 89: $V71, 90: $V81, 91: $V91, 92: $Va1}, {10: $V01, 46: $V11, 71: $V21, 79: 200, 80: $V31, 81: $V41, 82: [1, 201], 84: $V51, 85: 184, 87: 185, 88: $V61, 89: $V71, 90: $V81, 91: $V91, 92: $Va1}, {10: $V01, 46: $V11, 71: $V21, 79: 202, 80: $V31, 81: $V41, 84: $V51, 85: 184, 87: 185, 88: $V61, 89: $V71, 90: $V81, 91: $V91, 92: $Va1}, {10: $V01, 46: $V11, 71: $V21, 79: 203, 80: $V31, 81: $V41, 84: $V51, 85: 184, 87: 185, 88: $V61, 89: $V71, 90: $V81, 91: $V91, 92: $Va1}, {13: $V9, 18: $Va, 35: 204, 44: 30, 45: 32, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {13: $V9, 18: $Va, 35: 205, 44: 30, 45: 32, 46: $Vc, 67: [1, 206], 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($VS, [2, 43], {21: 207, 10: $VT}), {10: $Vx, 12: $Vy, 13: $Vz, 15: $VA, 16: $VB, 17: $VC, 18: $VD, 30: $VE, 32: $VF, 39: [1, 208], 45: 71, 46: $VG, 50: $VH, 60: $VI, 66: 125, 70: 74, 71: $VK, 72: $VL, 73: $VM, 74: $VN, 75: $VO, 77: 64, 78: $VP, 81: $Vi, 84: $VQ, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, o($VS, [2, 49], {21: 209, 10: $VT}), o($VS, [2, 47], {21: 210, 10: $VT}), o($VS, [2, 51], {21: 211, 10: $VT}), o($VS, [2, 53], {21: 212, 10: $VT}), o($Vt, [2, 36]), o([10, 13, 18, 46, 81, 86, 88, 89, 91, 92, 94, 95, 96, 97, 98], [2, 91]), o($VR, [2, 117], {86: $Vb1}), o($Vc1, [2, 126], {87: 214, 10: $V01, 46: $V11, 71: $V21, 80: $V31, 81: $V41, 84: $V51, 88: $V61, 89: $V71, 90: $V81, 91: $V91, 92: $Va1}), o($Vd1, [2, 128]), o($Vd1, [2, 130]), o($Vd1, [2, 131]), o($Vd1, [2, 132]), o($Vd1, [2, 133]), o($Vd1, [2, 134]), o($Vd1, [2, 135]), o($Vd1, [2, 136]), o($Vd1, [2, 137]), o($Vd1, [2, 138]), o($Vd1, [2, 139]), o($Vd1, [2, 140]), o($VR, [2, 118], {86: $Vb1}), o($VR, [2, 119], {86: $Vb1}), {10: [1, 215]}, o($VR, [2, 120], {86: $Vb1}), {10: [1, 216]}, o($VR, [2, 110], {86: $Vb1}), o($VR, [2, 111], {86: $Vb1}), o($VR, [2, 112], {45: 32, 44: 114, 13: $V9, 18: $Va, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}), o($VR, [2, 113], {45: 32, 44: 114, 10: [1, 217], 13: $V9, 18: $Va, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}), o($VR, [2, 115], {10: [1, 218]}), o($VS, [2, 44]), {39: [1, 219]}, o($VS, [2, 50]), o($VS, [2, 48]), o($VS, [2, 52]), o($VS, [2, 54]), {10: $V01, 46: $V11, 71: $V21, 80: $V31, 81: $V41, 84: $V51, 85: 220, 87: 185, 88: $V61, 89: $V71, 90: $V81, 91: $V91, 92: $Va1}, o($Vd1, [2, 129]), {13: $V9, 18: $Va, 35: 221, 44: 30, 45: 32, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {13: $V9, 18: $Va, 35: 222, 44: 30, 45: 32, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}, {67: [1, 223]}, {67: [1, 224]}, o($VS, [2, 45], {21: 225, 10: $VT}), o($Vc1, [2, 127], {87: 214, 10: $V01, 46: $V11, 71: $V21, 80: $V31, 81: $V41, 84: $V51, 88: $V61, 89: $V71, 90: $V81, 91: $V91, 92: $Va1}), o($VR, [2, 123], {45: 32, 44: 114, 10: [1, 226], 13: $V9, 18: $Va, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}), o($VR, [2, 124], {45: 32, 44: 114, 10: [1, 227], 13: $V9, 18: $Va, 46: $Vc, 81: $Vi, 86: $Vj, 88: $Vk, 89: $Vl, 91: $Vm, 92: $Vn, 94: $Vo, 95: $Vp, 96: $Vq, 97: $Vr, 98: $Vs}), o($VR, [2, 114]), o($VR, [2, 116]), o($VS, [2, 46]), {10: $V01, 46: $V11, 71: $V21, 79: 228, 80: $V31, 81: $V41, 84: $V51, 85: 184, 87: 185, 88: $V61, 89: $V71, 90: $V81, 91: $V91, 92: $Va1}, {10: $V01, 46: $V11, 71: $V21, 79: 229, 80: $V31, 81: $V41, 84: $V51, 85: 184, 87: 185, 88: $V61, 89: $V71, 90: $V81, 91: $V91, 92: $Va1}, o($VR, [2, 121], {86: $Vb1}), o($VR, [2, 122], {86: $Vb1})], + defaultActions: {}, + parseError: function parseError (str, hash) { + if (hash.recoverable) { + this.trace(str) + } else { + function _parseError (msg, hash) { + this.message = msg + this.hash = hash + } + _parseError.prototype = Error + + throw new _parseError(str, hash) + } + }, + parse: function parse (input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1 + var args = lstack.slice.call(arguments, 1) + var lexer = Object.create(this.lexer) + var sharedState = { yy: {} } + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k] + } + } + lexer.setInput(input, sharedState.yy) + sharedState.yy.lexer = lexer + sharedState.yy.parser = this + if (typeof lexer.yylloc === 'undefined') { + lexer.yylloc = {} + } + var yyloc = lexer.yylloc + lstack.push(yyloc) + var ranges = lexer.options && lexer.options.ranges + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError + } else { + this.parseError = Object.getPrototypeOf(this).parseError + } + function popStack (n) { + stack.length = stack.length - 2 * n + vstack.length = vstack.length - n + lstack.length = lstack.length - n + } + _token_stack: var lex = function () { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - }; - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; + var token + token = lexer.lex() || EOF + if (typeof token !== 'number') { + token = self.symbols_[token] || token + } + return token } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } - } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected + while (true) { + state = stack[stack.length - 1] + if (this.defaultActions[state]) { + action = this.defaultActions[state] } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + if (symbol === null || typeof symbol === 'undefined') { + symbol = lex() + } + action = table[state] && table[state][symbol] } - this.parseError(errStr, { + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = '' + expected = [] + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\'') + } + } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'' + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'') + } + this.parseError(errStr, { text: lexer.match, token: this.terminals_[symbol] || symbol, line: lexer.yylineno, loc: yyloc, expected: expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - if (recovering > 0) { - recovering--; + }) } - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -}}; + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol) + } + switch (action[0]) { + case 1: + stack.push(symbol) + vstack.push(lexer.yytext) + lstack.push(lexer.yylloc) + stack.push(action[1]) + symbol = null + if (!preErrorSymbol) { + yyleng = lexer.yyleng + yytext = lexer.yytext + yylineno = lexer.yylineno + yyloc = lexer.yylloc + if (recovering > 0) { + recovering-- + } + } else { + symbol = preErrorSymbol + preErrorSymbol = null + } + break + case 2: + len = this.productions_[action[1]][1] + yyval.$ = vstack[vstack.length - len] + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + } + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ] + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)) + if (typeof r !== 'undefined') { + return r + } + if (len) { + stack = stack.slice(0, -1 * len * 2) + vstack = vstack.slice(0, -1 * len) + lstack = lstack.slice(0, -1 * len) + } + stack.push(this.productions_[action[1]][0]) + vstack.push(yyval.$) + lstack.push(yyval._$) + newState = table[stack[stack.length - 2]][stack[stack.length - 1]] + stack.push(newState) + break + case 3: + return true + } + } + return true + }} /* generated by jison-lex 0.3.4 */ -var lexer = (function(){ -var lexer = ({ + var lexer = (function () { + var lexer = ({ -EOF:1, + EOF: 1, -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, + parseError: function parseError (str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash) + } else { + throw new Error(str) + } + }, // resets the lexer, sets new input -setInput:function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0,0]; - } - this.offset = 0; - return this; - }, + setInput: function (input, yy) { + this.yy = yy || this.yy || {} + this._input = input + this._more = this._backtrack = this.done = false + this.yylineno = this.yyleng = 0 + this.yytext = this.matched = this.match = '' + this.conditionStack = ['INITIAL'] + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + } + if (this.options.ranges) { + this.yylloc.range = [0, 0] + } + this.offset = 0 + return this + }, // consumes and returns one char from the input -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } + input: function () { + var ch = this._input[0] + this.yytext += ch + this.yyleng++ + this.offset++ + this.match += ch + this.matched += ch + var lines = ch.match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno++ + this.yylloc.last_line++ + } else { + this.yylloc.last_column++ + } + if (this.options.ranges) { + this.yylloc.range[1]++ + } - this._input = this._input.slice(1); - return ch; - }, + this._input = this._input.slice(1) + return ch + }, // unshifts one char (or a string) into the input -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) - + oldLines[oldLines.length - lines.length].length - lines[0].length : - this.yylloc.first_column - len - }; + unput: function (ch) { + var len = ch.length + var lines = ch.split(/(?:\r\n?|\n)/g) + + this._input = ch + this._input + this.yytext = this.yytext.substr(0, this.yytext.length - len) + // this.yyleng -= len; + this.offset -= len + var oldLines = this.match.split(/(?:\r\n?|\n)/g) + this.match = this.match.substr(0, this.match.length - 1) + this.matched = this.matched.substr(0, this.matched.length - 1) + + if (lines.length - 1) { + this.yylineno -= lines.length - 1 + } + var r = this.yylloc.range + + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines + ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + + oldLines[oldLines.length - lines.length].length - lines[0].length + : this.yylloc.first_column - len + } - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len] + } + this.yyleng = this.yytext.length + return this + }, // When called from action, caches matched text and appends it on next action -more:function () { - this._more = true; - return this; - }, + more: function () { + this._more = true + return this + }, // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. -reject:function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - - } - return this; - }, + reject: function () { + if (this.options.backtrack_lexer) { + this._backtrack = true + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + return this + }, // retain first n characters of the match -less:function (n) { - this.unput(this.match.slice(n)); - }, + less: function (n) { + this.unput(this.match.slice(n)) + }, // displays already matched input, i.e. for error messages -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, + pastInput: function () { + var past = this.matched.substr(0, this.matched.length - this.match.length) + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, '') + }, // displays upcoming input, i.e. for error messages -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, + upcomingInput: function () { + var next = this.match + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length) + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, '') + }, // displays the character position where the lexing error occurred, i.e. for error messages -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, + showPosition: function () { + var pre = this.pastInput() + var c = new Array(pre.length + 1).join('-') + return pre + this.upcomingInput() + '\n' + c + '^' + }, // test the lexed token: return FALSE when not a match, otherwise return token -test_match:function (match, indexed_rule) { - var token, - lines, - backup; + test_match: function (match, indexed_rule) { + var token, + lines, + backup - if (this.options.backtrack_lexer) { + if (this.options.backtrack_lexer) { // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? - lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : - this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + } + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0) + } + } + + lines = match[0].match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno += lines.length + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines + ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length + : this.yylloc.last_column + match[0].length + } + this.yytext += match[0] + this.match += match[0] + this.matches = match + this.yyleng = this.yytext.length + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng] + } + this._more = false + this._backtrack = false + this._input = this._input.slice(match[0].length) + this.matched += match[0] + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]) + if (this.done && this._input) { + this.done = false + } + if (token) { + return token + } else if (this._backtrack) { // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, + for (var k in backup) { + this[k] = backup[k] + } + return false // rule action called reject() implying the next rule should be tested instead. + } + return false + }, // return next match in input -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - - var token, - match, - tempMatch, - index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } else { + next: function () { + if (this.done) { + return this.EOF + } + if (!this._input) { + this.done = true + } + + var token, + match, + tempMatch, + index + if (!this._more) { + this.yytext = '' + this.match = '' + } + var rules = this._currentRules() + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]) + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch + index = i + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]) + if (token !== false) { + return token + } else if (this._backtrack) { + match = false + continue // rule action called reject() implying a rule MISmatch. + } else { // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; + return false + } + } else if (!this.options.flex) { + break } - } else if (!this.options.flex) { - break; + } } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } + if (match) { + token = this.test_match(match, rules[index]) + if (token !== false) { + return token + } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, + return false + } + if (this._input === '') { + return this.EOF + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + }, // return next match that has a token -lex:function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, + lex: function lex () { + var r = this.next() + if (r) { + return r + } else { + return this.lex() + } + }, // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) -begin:function begin(condition) { - this.conditionStack.push(condition); - }, + begin: function begin (condition) { + this.conditionStack.push(condition) + }, // pop the previously active lexer condition state off the condition stack -popState:function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, + popState: function popState () { + var n = this.conditionStack.length - 1 + if (n > 0) { + return this.conditionStack.pop() + } else { + return this.conditionStack[0] + } + }, // produce the lexer rule set which is active for the currently active lexer condition state -_currentRules:function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, + _currentRules: function _currentRules () { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules + } else { + return this.conditions['INITIAL'].rules + } + }, // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available -topState:function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, + topState: function topState (n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0) + if (n >= 0) { + return this.conditionStack[n] + } else { + return 'INITIAL' + } + }, // alias for begin(condition) -pushState:function pushState(condition) { - this.begin(condition); - }, + pushState: function pushState (condition) { + this.begin(condition) + }, // return the number of states currently on the stack -stateStackSize:function stateStackSize() { - return this.conditionStack.length; - }, -options: {}, -performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { -var YYSTATE=YY_START; -switch($avoiding_name_collisions) { -case 0:/* do nothing */ -break; -case 1:this.begin("string"); -break; -case 2:this.popState(); -break; -case 3:return "STR"; -break; -case 4:return 71; -break; -case 5:return 78; -break; -case 6:return 72; -break; -case 7:return 82; -break; -case 8:return 73; -break; -case 9:return 74; -break; -case 10:return 75; -break; -case 11:return 12; -break; -case 12:return 30; -break; -case 13:return 32; -break; -case 14:return 13; -break; -case 15:return 13; -break; -case 16:return 13; -break; -case 17:return 13; -break; -case 18:return 13; -break; -case 19:return 13; -break; -case 20:return 81; -break; -case 21:return 91; -break; -case 22:return 89; -break; -case 23:return 8; -break; -case 24:return 86; -break; -case 25:return 98; -break; -case 26:return 16; -break; -case 27:return 15; -break; -case 28:return 17; -break; -case 29:return 18; -break; -case 30:return 53; -break; -case 31:return 51; -break; -case 32:return 52; -break; -case 33:return 54; -break; -case 34:return 58; -break; -case 35:return 56; -break; -case 36:return 57; -break; -case 37:return 59; -break; -case 38:return 58; -break; -case 39:return 56; -break; -case 40:return 57; -break; -case 41:return 59; -break; -case 42:return 63; -break; -case 43:return 61; -break; -case 44:return 62; -break; -case 45:return 64; -break; -case 46:return 50; -break; -case 47:return 55; -break; -case 48:return 60; -break; -case 49:return 40; -break; -case 50:return 41; -break; -case 51:return 46; -break; -case 52:return 92; -break; -case 53:return 96; -break; -case 54:return 84; -break; -case 55:return 97; -break; -case 56:return 97; -break; -case 57:return 88; -break; -case 58:return 94; -break; -case 59:return 95; -break; -case 60:return 65; -break; -case 61:return 38; -break; -case 62:return 39; -break; -case 63:return 36; -break; -case 64:return 37; -break; -case 65:return 42 -break; -case 66:return 43 -break; -case 67:return 101; -break; -case 68:return 9; -break; -case 69:return 10; -break; -case 70:return 11; -break; -} -}, -rules: [/^(?:%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:v\b)/,/^(?:\s*--[x]\s*)/,/^(?:\s*-->\s*)/,/^(?:\s*--[o]\s*)/,/^(?:\s*---\s*)/,/^(?:\s*-\.-[x]\s*)/,/^(?:\s*-\.->\s*)/,/^(?:\s*-\.-[o]\s*)/,/^(?:\s*-\.-\s*)/,/^(?:\s*.-[x]\s*)/,/^(?:\s*\.->\s*)/,/^(?:\s*\.-[o]\s*)/,/^(?:\s*\.-\s*)/,/^(?:\s*==[x]\s*)/,/^(?:\s*==>\s*)/,/^(?:\s*==[o]\s*)/,/^(?:\s*==[\=]\s*)/,/^(?:\s*--\s*)/,/^(?:\s*-\.\s*)/,/^(?:\s*==\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!"#$%&'*+,-.`?\\_\/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\n+)/,/^(?:\s)/,/^(?:$)/], -conditions: {"string":{"rules":[2,3],"inclusive":false},"INITIAL":{"rules":[0,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70],"inclusive":true}} -}); -return lexer; -})(); -parser.lexer = lexer; -function Parser () { - this.yy = {}; -} -Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})(); - - -if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; -exports.main = function commonjsMain(args) { - if (!args[1]) { - console.log('Usage: '+args[0]+' FILE'); - process.exit(1); - } - var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), "utf8"); - return exports.parser.parse(source); -}; -if (typeof module !== 'undefined' && _dereq_.main === module) { - exports.main(process.argv.slice(1)); -} -} -}).call(this,_dereq_("1YiZ5S")) -},{"1YiZ5S":104,"fs":102,"path":103}],121:[function(_dereq_,module,exports){ -(function (global){ + stateStackSize: function stateStackSize () { + return this.conditionStack.length + }, + options: {}, + performAction: function anonymous (yy, yy_, $avoiding_name_collisions, YY_START) { + var YYSTATE = YY_START + switch ($avoiding_name_collisions) { + case 0:/* do nothing */ + break + case 1:this.begin('string') + break + case 2:this.popState() + break + case 3:return 'STR' + break + case 4:return 71 + break + case 5:return 78 + break + case 6:return 72 + break + case 7:return 82 + break + case 8:return 73 + break + case 9:return 74 + break + case 10:return 75 + break + case 11:return 12 + break + case 12:return 30 + break + case 13:return 32 + break + case 14:return 13 + break + case 15:return 13 + break + case 16:return 13 + break + case 17:return 13 + break + case 18:return 13 + break + case 19:return 13 + break + case 20:return 81 + break + case 21:return 91 + break + case 22:return 89 + break + case 23:return 8 + break + case 24:return 86 + break + case 25:return 98 + break + case 26:return 16 + break + case 27:return 15 + break + case 28:return 17 + break + case 29:return 18 + break + case 30:return 53 + break + case 31:return 51 + break + case 32:return 52 + break + case 33:return 54 + break + case 34:return 58 + break + case 35:return 56 + break + case 36:return 57 + break + case 37:return 59 + break + case 38:return 58 + break + case 39:return 56 + break + case 40:return 57 + break + case 41:return 59 + break + case 42:return 63 + break + case 43:return 61 + break + case 44:return 62 + break + case 45:return 64 + break + case 46:return 50 + break + case 47:return 55 + break + case 48:return 60 + break + case 49:return 40 + break + case 50:return 41 + break + case 51:return 46 + break + case 52:return 92 + break + case 53:return 96 + break + case 54:return 84 + break + case 55:return 97 + break + case 56:return 97 + break + case 57:return 88 + break + case 58:return 94 + break + case 59:return 95 + break + case 60:return 65 + break + case 61:return 38 + break + case 62:return 39 + break + case 63:return 36 + break + case 64:return 37 + break + case 65:return 42 + break + case 66:return 43 + break + case 67:return 101 + break + case 68:return 9 + break + case 69:return 10 + break + case 70:return 11 + break + } + }, + rules: [/^(?:%%[^\n]*)/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:click\b)/, /^(?:graph\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:LR\b)/, /^(?:RL\b)/, /^(?:TB\b)/, /^(?:BT\b)/, /^(?:TD\b)/, /^(?:BR\b)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:v\b)/, /^(?:\s*--[x]\s*)/, /^(?:\s*-->\s*)/, /^(?:\s*--[o]\s*)/, /^(?:\s*---\s*)/, /^(?:\s*-\.-[x]\s*)/, /^(?:\s*-\.->\s*)/, /^(?:\s*-\.-[o]\s*)/, /^(?:\s*-\.-\s*)/, /^(?:\s*.-[x]\s*)/, /^(?:\s*\.->\s*)/, /^(?:\s*\.-[o]\s*)/, /^(?:\s*\.-\s*)/, /^(?:\s*==[x]\s*)/, /^(?:\s*==>\s*)/, /^(?:\s*==[o]\s*)/, /^(?:\s*==[\=]\s*)/, /^(?:\s*--\s*)/, /^(?:\s*-\.\s*)/, /^(?:\s*==\s*)/, /^(?:\(-)/, /^(?:-\))/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:[A-Za-z]+)/, /^(?:[!"#$%&'*+,-.`?\\_\/])/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\()/, /^(?:\))/, /^(?:\[)/, /^(?:\])/, /^(?:\{)/, /^(?:\})/, /^(?:")/, /^(?:\n+)/, /^(?:\s)/, /^(?:$)/], + conditions: {'string': {'rules': [2, 3], 'inclusive': false}, 'INITIAL': {'rules': [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70], 'inclusive': true}} + }) + return lexer + })() + parser.lexer = lexer + function Parser () { + this.yy = {} + } + Parser.prototype = parser; parser.Parser = Parser + return new Parser() + })() + + if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { + exports.parser = parser + exports.Parser = parser.Parser + exports.parse = function () { return parser.parse.apply(parser, arguments) } + exports.main = function commonjsMain (args) { + if (!args[1]) { + console.log('Usage: ' + args[0] + ' FILE') + process.exit(1) + } + var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), 'utf8') + return exports.parser.parse(source) + } + if (typeof module !== 'undefined' && _dereq_.main === module) { + exports.main(process.argv.slice(1)) + } + } + }).call(this, _dereq_('1YiZ5S')) + }, {'1YiZ5S': 104, 'fs': 102, 'path': 103}], + 121: [function (_dereq_, module, exports) { + (function (global) { /** * Created by knut on 15-01-14. */ -var moment = _dereq_('moment'); -var Logger = _dereq_('../../logger'); -var log = new Logger.Log(); - - -var dateFormat = ''; -var title = ''; -var sections = []; -var tasks = []; -var currentSection = ''; - -exports.clear = function(){ - sections = []; - tasks = []; - currentSection = ''; - title = ''; - taskCnt = 0; - lastTask = undefined; - lastTaskID = undefined; - rawTasks = []; -}; - -exports.setDateFormat = function(txt){ - dateFormat = txt; -}; - -exports.getDateFormat = function(){ - return dateFormat; -}; -exports.setTitle = function(txt){ - title = txt; -}; - -exports.getTitle = function(){ - return title; -}; - -exports.addSection = function(txt){ - currentSection = txt; - sections.push(txt); -}; - - -exports.getTasks=function(){ - var allItemsPricessed = compileTasks(); - var maxDepth = 10; - var iterationCount = 0; - while(!allItemsPricessed && (iterationCount < maxDepth)){ - allItemsPricessed = compileTasks(); - iterationCount++; - } + var moment = _dereq_('moment') + var Logger = _dereq_('../../logger') + var log = new Logger.Log() + + var dateFormat = '' + var title = '' + var sections = [] + var tasks = [] + var currentSection = '' + + exports.clear = function () { + sections = [] + tasks = [] + currentSection = '' + title = '' + taskCnt = 0 + lastTask = undefined + lastTaskID = undefined + rawTasks = [] + } + + exports.setDateFormat = function (txt) { + dateFormat = txt + } + + exports.getDateFormat = function () { + return dateFormat + } + exports.setTitle = function (txt) { + title = txt + } + + exports.getTitle = function () { + return title + } + + exports.addSection = function (txt) { + currentSection = txt + sections.push(txt) + } + + exports.getTasks = function () { + var allItemsPricessed = compileTasks() + var maxDepth = 10 + var iterationCount = 0 + while (!allItemsPricessed && (iterationCount < maxDepth)) { + allItemsPricessed = compileTasks() + iterationCount++ + } - tasks = rawTasks; + tasks = rawTasks - //var i; - //for(i=10000;i width of rectangle - if (textWidth > (endX - startX)) { - if (endX + textWidth + 1.5*conf.leftPadding> w) { - return startX + theSidePad - 5; - } else { - return endX + theSidePad + 5; - } + if (textWidth > (endX - startX)) { + if (endX + textWidth + 1.5 * conf.leftPadding > w) { + return startX + theSidePad - 5 } else { - return (endX - startX) / 2 + startX + theSidePad; + return endX + theSidePad + 5 } + } else { + return (endX - startX) / 2 + startX + theSidePad + } }) .attr('y', function (d, i) { - return i * theGap + (conf.barHeight / 2) + (conf.fontSize / 2 - 2) + theTopPad; + return i * theGap + (conf.barHeight / 2) + (conf.fontSize / 2 - 2) + theTopPad }) - //.attr('text-anchor', 'middle') + // .attr('text-anchor', 'middle') .attr('text-height', theBarHeight) .attr('class', function (d) { - var startX = timeScale(d.startTime), - endX = timeScale(d.endTime), - textWidth = this.getBBox().width; - var secNum = 0; - for (var i = 0; i < categories.length; i++) { - if (d.type === categories[i]) { - secNum = (i % conf.numberSectionStyles); - } + var startX = timeScale(d.startTime), + endX = timeScale(d.endTime), + textWidth = this.getBBox().width + var secNum = 0 + for (var i = 0; i < categories.length; i++) { + if (d.type === categories[i]) { + secNum = (i % conf.numberSectionStyles) } + } - var taskType = ''; - if(d.active){ - if (d.crit) { - taskType = 'activeCritText'+secNum; - }else{ - taskType = 'activeText'+secNum; - } + var taskType = '' + if (d.active) { + if (d.crit) { + taskType = 'activeCritText' + secNum + } else { + taskType = 'activeText' + secNum } + } - if (d.done) { - if (d.crit) { - taskType = taskType + ' doneCritText'+secNum; - }else{ - taskType = taskType + ' doneText'+secNum; - } - }else{ - if (d.crit) { - taskType = taskType + ' critText'+secNum; - } + if (d.done) { + if (d.crit) { + taskType = taskType + ' doneCritText' + secNum + } else { + taskType = taskType + ' doneText' + secNum } + } else { + if (d.crit) { + taskType = taskType + ' critText' + secNum + } + } // Check id text width > width of rectangle - if (textWidth > (endX - startX)) { - if (endX + textWidth + 1.5*conf.leftPadding > w) { - return 'taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType; - } else { - return 'taskTextOutsideRight taskTextOutside' + secNum+ ' ' + taskType; - } + if (textWidth > (endX - startX)) { + if (endX + textWidth + 1.5 * conf.leftPadding > w) { + return 'taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType } else { - return 'taskText taskText' + secNum+ ' ' + taskType; + return 'taskTextOutsideRight taskTextOutside' + secNum + ' ' + taskType } - }); - - } - - - function makeGrid(theSidePad, theTopPad, w, h) { + } else { + return 'taskText taskText' + secNum + ' ' + taskType + } + }) + } - var pre = [ + function makeGrid (theSidePad, theTopPad, w, h) { + var pre = [ ['.%L', function (d) { - return d.getMilliseconds(); + return d.getMilliseconds() }], [':%S', function (d) { - return d.getSeconds(); + return d.getSeconds() }], // Within a hour ['h1 %I:%M', function (d) { - return d.getMinutes(); - }]]; - var post = [ + return d.getMinutes() + }]] + var post = [ ['%Y', function () { - return true; - }]]; - - var mid = [ + return true + }]] + + var mid = [ // Within a day ['%I:%M', function (d) { - return d.getHours(); + return d.getHours() }], // Day within a week (not monday) ['%a %d', function (d) { - //return d.getDay() ==1; - return d.getDay() && d.getDate() != 1; + // return d.getDay() ==1; + return d.getDay() && d.getDate() != 1 }], // within a month ['%b %d', function (d) { - return d.getDate() != 1; + return d.getDate() != 1 }], // Month ['%B', function (d) { - return d.getMonth(); + return d.getMonth() }] - ]; - var formatter; - if(typeof conf.axisFormatter !== 'undefined'){ - mid = []; - conf.axisFormatter.forEach(function(item){ - var n = []; - n[0] = item[0]; - n[1] = item[1]; - mid.push(n); - }); - } - formatter = pre.concat(mid).concat(post); - - var xAxis = d3.svg.axis() + ] + var formatter + if (typeof conf.axisFormatter !== 'undefined') { + mid = [] + conf.axisFormatter.forEach(function (item) { + var n = [] + n[0] = item[0] + n[1] = item[1] + mid.push(n) + }) + } + formatter = pre.concat(mid).concat(post) + + var xAxis = d3.svg.axis() .scale(timeScale) .orient('bottom') .tickSize(-h + theTopPad + conf.gridLineStartPadding, 0, 0) .tickFormat(d3.time.format.multi(formatter)) - ; - if(daysInChart >7 && daysInChart<230){ - xAxis = xAxis.ticks(d3.time.monday.range); - } + if (daysInChart > 7 && daysInChart < 230) { + xAxis = xAxis.ticks(d3.time.monday.range) + } - svg.append('g') + svg.append('g') .attr('class', 'grid') .attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')') .call(xAxis) @@ -54280,93 +54343,91 @@ module.exports.draw = function (text, id) { .attr('fill', '#000') .attr('stroke', 'none') .attr('font-size', 10) - .attr('dy', '1em'); - } + .attr('dy', '1em') + } - function vertLabels(theGap, theTopPad) { - var numOccurances = []; - var prevGap = 0; + function vertLabels (theGap, theTopPad) { + var numOccurances = [] + var prevGap = 0 - for (var i = 0; i < categories.length; i++) { - numOccurances[i] = [categories[i], getCount(categories[i], catsUnfiltered)]; - } + for (var i = 0; i < categories.length; i++) { + numOccurances[i] = [categories[i], getCount(categories[i], catsUnfiltered)] + } - svg.append('g') //without doing this, impossible to put grid lines behind text + svg.append('g') // without doing this, impossible to put grid lines behind text .selectAll('text') .data(numOccurances) .enter() .append('text') .text(function (d) { - return d[0]; + return d[0] }) .attr('x', 10) .attr('y', function (d, i) { - if (i > 0) { - for (var j = 0; j < i; j++) { - prevGap += numOccurances[i - 1][1]; + if (i > 0) { + for (var j = 0; j < i; j++) { + prevGap += numOccurances[i - 1][1] // log.debug(prevGap); - return d[1] * theGap / 2 + prevGap * theGap + theTopPad; - } - } else { - return d[1] * theGap / 2 + theTopPad; + return d[1] * theGap / 2 + prevGap * theGap + theTopPad } + } else { + return d[1] * theGap / 2 + theTopPad + } }) .attr('class', function (d) { - for (var i = 0; i < categories.length; i++) { - if (d[0] === categories[i]) { - return 'sectionTitle sectionTitle' + (i % conf.numberSectionStyles); - } + for (var i = 0; i < categories.length; i++) { + if (d[0] === categories[i]) { + return 'sectionTitle sectionTitle' + (i % conf.numberSectionStyles) } - return 'sectionTitle'; - }); - - } + } + return 'sectionTitle' + }) + } - function drawToday(theSidePad, theTopPad, w, h) { - var todayG = svg.append('g') - .attr('class', 'today'); + function drawToday (theSidePad, theTopPad, w, h) { + var todayG = svg.append('g') + .attr('class', 'today') - var today = new Date(); + var today = new Date() - todayG.append('line') + todayG.append('line') .attr('x1', timeScale(today) + theSidePad) .attr('x2', timeScale(today) + theSidePad) .attr('y1', conf.titleTopMargin) - .attr('y2', h-conf.titleTopMargin) + .attr('y2', h - conf.titleTopMargin) .attr('class', 'today') - ; - } + } -//from this stackexchange question: http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript - function checkUnique(arr) { - var hash = {}, result = []; - for (var i = 0, l = arr.length; i < l; ++i) { - if (!hash.hasOwnProperty(arr[i])) { //it works with objects! in FF, at least - hash[arr[i]] = true; - result.push(arr[i]); +// from this stackexchange question: http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript + function checkUnique (arr) { + var hash = {}, result = [] + for (var i = 0, l = arr.length; i < l; ++i) { + if (!hash.hasOwnProperty(arr[i])) { // it works with objects! in FF, at least + hash[arr[i]] = true + result.push(arr[i]) } + } + return result } - return result; - } -//from this stackexchange question: http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array - function getCounts(arr) { - var i = arr.length, // var to loop over - obj = {}; // obj to store results - while (i) { - obj[arr[--i]] = (obj[arr[i]] || 0) + 1; // count occurrences +// from this stackexchange question: http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array + function getCounts (arr) { + var i = arr.length, // var to loop over + obj = {} // obj to store results + while (i) { + obj[arr[--i]] = (obj[arr[i]] || 0) + 1 // count occurrences + } + return obj } - return obj; - } // get specific from everything - function getCount(word, arr) { - return getCounts(arr)[word] || 0; - } -}; - -},{"../../d3":109,"./ganttDb":121,"./parser/gantt":123,"moment":107}],123:[function(_dereq_,module,exports){ -(function (process){ + function getCount (word, arr) { + return getCounts(arr)[word] || 0 + } + } + }, {'../../d3': 109, './ganttDb': 121, './parser/gantt': 123, 'moment': 107}], + 123: [function (_dereq_, module, exports) { + (function (process) { /* parser generated by jison 0.4.17 */ /* Returns a Parser object of the following structure: @@ -54419,7 +54480,6 @@ module.exports.draw = function (text, id) { } } - token location info (@$, _$, etc.): { first_line: n, last_line: n, @@ -54428,7 +54488,6 @@ module.exports.draw = function (text, id) { range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) } - the parseError function receives a 'hash' object with these members for lexer and parser errors: { text: (matched text) token: (the produced terminal token, if any) @@ -54440,852 +54499,847 @@ module.exports.draw = function (text, id) { recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) } */ -var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,11,12,13,14],$V1=[1,9],$V2=[1,10],$V3=[1,11],$V4=[1,12]; -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"start":3,"gantt":4,"document":5,"EOF":6,"line":7,"SPACE":8,"statement":9,"NL":10,"dateFormat":11,"title":12,"section":13,"taskTxt":14,"taskData":15,"$accept":0,"$end":1}, -terminals_: {2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",11:"dateFormat",12:"title",13:"section",14:"taskTxt",15:"taskData"}, -productions_: [0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,1],[9,1],[9,2]], -performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { + var parser = (function () { + var o = function (k, v, o, l) { for (o = o || {}, l = k.length; l--; o[k[l]] = v);return o }, $V0 = [6, 8, 10, 11, 12, 13, 14], $V1 = [1, 9], $V2 = [1, 10], $V3 = [1, 11], $V4 = [1, 12] + var parser = {trace: function trace () { }, + yy: {}, + symbols_: {'error': 2, 'start': 3, 'gantt': 4, 'document': 5, 'EOF': 6, 'line': 7, 'SPACE': 8, 'statement': 9, 'NL': 10, 'dateFormat': 11, 'title': 12, 'section': 13, 'taskTxt': 14, 'taskData': 15, '$accept': 0, '$end': 1}, + terminals_: {2: 'error', 4: 'gantt', 6: 'EOF', 8: 'SPACE', 10: 'NL', 11: 'dateFormat', 12: 'title', 13: 'section', 14: 'taskTxt', 15: 'taskData'}, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 1], [9, 1], [9, 2]], + performAction: function anonymous (yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ -var $0 = $$.length - 1; -switch (yystate) { -case 1: - return $$[$0-1]; -break; -case 2: - this.$ = [] -break; -case 3: -$$[$0-1].push($$[$0]);this.$ = $$[$0-1] -break; -case 4: case 5: - this.$ = $$[$0] -break; -case 6: case 7: - this.$=[]; -break; -case 8: -yy.setDateFormat($$[$0].substr(11));this.$=$$[$0].substr(11); -break; -case 9: -yy.setTitle($$[$0].substr(6));this.$=$$[$0].substr(6); -break; -case 10: -yy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8); -break; -case 11: -yy.addTask($$[$0-1],$$[$0]);this.$='task'; -break; -} -}, -table: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:$V1,12:$V2,13:$V3,14:$V4},o($V0,[2,7],{1:[2,1]}),o($V0,[2,3]),{9:13,11:$V1,12:$V2,13:$V3,14:$V4},o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,8]),o($V0,[2,9]),o($V0,[2,10]),{15:[1,14]},o($V0,[2,4]),o($V0,[2,11])], -defaultActions: {}, -parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - function _parseError (msg, hash) { - this.message = msg; - this.hash = hash; - } - _parseError.prototype = Error; - - throw new _parseError(str, hash); - } -}, -parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - _token_stack: + var $0 = $$.length - 1 + switch (yystate) { + case 1: + return $$[$0 - 1] + break + case 2: + this.$ = [] + break + case 3: + $$[$0 - 1].push($$[$0]); this.$ = $$[$0 - 1] + break + case 4: case 5: + this.$ = $$[$0] + break + case 6: case 7: + this.$ = [] + break + case 8: + yy.setDateFormat($$[$0].substr(11)); this.$ = $$[$0].substr(11) + break + case 9: + yy.setTitle($$[$0].substr(6)); this.$ = $$[$0].substr(6) + break + case 10: + yy.addSection($$[$0].substr(8)); this.$ = $$[$0].substr(8) + break + case 11: + yy.addTask($$[$0 - 1], $$[$0]); this.$ = 'task' + break + } + }, + table: [{3: 1, 4: [1, 2]}, {1: [3]}, o($V0, [2, 2], {5: 3}), {6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: $V1, 12: $V2, 13: $V3, 14: $V4}, o($V0, [2, 7], {1: [2, 1]}), o($V0, [2, 3]), {9: 13, 11: $V1, 12: $V2, 13: $V3, 14: $V4}, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 8]), o($V0, [2, 9]), o($V0, [2, 10]), {15: [1, 14]}, o($V0, [2, 4]), o($V0, [2, 11])], + defaultActions: {}, + parseError: function parseError (str, hash) { + if (hash.recoverable) { + this.trace(str) + } else { + function _parseError (msg, hash) { + this.message = msg + this.hash = hash + } + _parseError.prototype = Error + + throw new _parseError(str, hash) + } + }, + parse: function parse (input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1 + var args = lstack.slice.call(arguments, 1) + var lexer = Object.create(this.lexer) + var sharedState = { yy: {} } + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k] + } + } + lexer.setInput(input, sharedState.yy) + sharedState.yy.lexer = lexer + sharedState.yy.parser = this + if (typeof lexer.yylloc === 'undefined') { + lexer.yylloc = {} + } + var yyloc = lexer.yylloc + lstack.push(yyloc) + var ranges = lexer.options && lexer.options.ranges + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError + } else { + this.parseError = Object.getPrototypeOf(this).parseError + } + function popStack (n) { + stack.length = stack.length - 2 * n + vstack.length = vstack.length - n + lstack.length = lstack.length - n + } + _token_stack: var lex = function () { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - }; - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; + var token + token = lexer.lex() || EOF + if (typeof token !== 'number') { + token = self.symbols_[token] || token + } + return token } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } - } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected + while (true) { + state = stack[stack.length - 1] + if (this.defaultActions[state]) { + action = this.defaultActions[state] } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + if (symbol === null || typeof symbol === 'undefined') { + symbol = lex() + } + action = table[state] && table[state][symbol] } - this.parseError(errStr, { + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = '' + expected = [] + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\'') + } + } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'' + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'') + } + this.parseError(errStr, { text: lexer.match, token: this.terminals_[symbol] || symbol, line: lexer.yylineno, loc: yyloc, expected: expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - if (recovering > 0) { - recovering--; + }) } - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -}}; + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol) + } + switch (action[0]) { + case 1: + stack.push(symbol) + vstack.push(lexer.yytext) + lstack.push(lexer.yylloc) + stack.push(action[1]) + symbol = null + if (!preErrorSymbol) { + yyleng = lexer.yyleng + yytext = lexer.yytext + yylineno = lexer.yylineno + yyloc = lexer.yylloc + if (recovering > 0) { + recovering-- + } + } else { + symbol = preErrorSymbol + preErrorSymbol = null + } + break + case 2: + len = this.productions_[action[1]][1] + yyval.$ = vstack[vstack.length - len] + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + } + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ] + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)) + if (typeof r !== 'undefined') { + return r + } + if (len) { + stack = stack.slice(0, -1 * len * 2) + vstack = vstack.slice(0, -1 * len) + lstack = lstack.slice(0, -1 * len) + } + stack.push(this.productions_[action[1]][0]) + vstack.push(yyval.$) + lstack.push(yyval._$) + newState = table[stack[stack.length - 2]][stack[stack.length - 1]] + stack.push(newState) + break + case 3: + return true + } + } + return true + }} /* generated by jison-lex 0.3.4 */ -var lexer = (function(){ -var lexer = ({ + var lexer = (function () { + var lexer = ({ -EOF:1, + EOF: 1, -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, + parseError: function parseError (str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash) + } else { + throw new Error(str) + } + }, // resets the lexer, sets new input -setInput:function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0,0]; - } - this.offset = 0; - return this; - }, + setInput: function (input, yy) { + this.yy = yy || this.yy || {} + this._input = input + this._more = this._backtrack = this.done = false + this.yylineno = this.yyleng = 0 + this.yytext = this.matched = this.match = '' + this.conditionStack = ['INITIAL'] + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + } + if (this.options.ranges) { + this.yylloc.range = [0, 0] + } + this.offset = 0 + return this + }, // consumes and returns one char from the input -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } + input: function () { + var ch = this._input[0] + this.yytext += ch + this.yyleng++ + this.offset++ + this.match += ch + this.matched += ch + var lines = ch.match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno++ + this.yylloc.last_line++ + } else { + this.yylloc.last_column++ + } + if (this.options.ranges) { + this.yylloc.range[1]++ + } - this._input = this._input.slice(1); - return ch; - }, + this._input = this._input.slice(1) + return ch + }, // unshifts one char (or a string) into the input -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) - + oldLines[oldLines.length - lines.length].length - lines[0].length : - this.yylloc.first_column - len - }; + unput: function (ch) { + var len = ch.length + var lines = ch.split(/(?:\r\n?|\n)/g) + + this._input = ch + this._input + this.yytext = this.yytext.substr(0, this.yytext.length - len) + // this.yyleng -= len; + this.offset -= len + var oldLines = this.match.split(/(?:\r\n?|\n)/g) + this.match = this.match.substr(0, this.match.length - 1) + this.matched = this.matched.substr(0, this.matched.length - 1) + + if (lines.length - 1) { + this.yylineno -= lines.length - 1 + } + var r = this.yylloc.range + + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines + ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + + oldLines[oldLines.length - lines.length].length - lines[0].length + : this.yylloc.first_column - len + } - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len] + } + this.yyleng = this.yytext.length + return this + }, // When called from action, caches matched text and appends it on next action -more:function () { - this._more = true; - return this; - }, + more: function () { + this._more = true + return this + }, // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. -reject:function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - - } - return this; - }, + reject: function () { + if (this.options.backtrack_lexer) { + this._backtrack = true + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + return this + }, // retain first n characters of the match -less:function (n) { - this.unput(this.match.slice(n)); - }, + less: function (n) { + this.unput(this.match.slice(n)) + }, // displays already matched input, i.e. for error messages -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, + pastInput: function () { + var past = this.matched.substr(0, this.matched.length - this.match.length) + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, '') + }, // displays upcoming input, i.e. for error messages -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, + upcomingInput: function () { + var next = this.match + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length) + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, '') + }, // displays the character position where the lexing error occurred, i.e. for error messages -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, + showPosition: function () { + var pre = this.pastInput() + var c = new Array(pre.length + 1).join('-') + return pre + this.upcomingInput() + '\n' + c + '^' + }, // test the lexed token: return FALSE when not a match, otherwise return token -test_match:function (match, indexed_rule) { - var token, - lines, - backup; + test_match: function (match, indexed_rule) { + var token, + lines, + backup - if (this.options.backtrack_lexer) { + if (this.options.backtrack_lexer) { // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? - lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : - this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + } + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0) + } + } + + lines = match[0].match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno += lines.length + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines + ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length + : this.yylloc.last_column + match[0].length + } + this.yytext += match[0] + this.match += match[0] + this.matches = match + this.yyleng = this.yytext.length + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng] + } + this._more = false + this._backtrack = false + this._input = this._input.slice(match[0].length) + this.matched += match[0] + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]) + if (this.done && this._input) { + this.done = false + } + if (token) { + return token + } else if (this._backtrack) { // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, + for (var k in backup) { + this[k] = backup[k] + } + return false // rule action called reject() implying the next rule should be tested instead. + } + return false + }, // return next match in input -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - - var token, - match, - tempMatch, - index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } else { + next: function () { + if (this.done) { + return this.EOF + } + if (!this._input) { + this.done = true + } + + var token, + match, + tempMatch, + index + if (!this._more) { + this.yytext = '' + this.match = '' + } + var rules = this._currentRules() + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]) + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch + index = i + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]) + if (token !== false) { + return token + } else if (this._backtrack) { + match = false + continue // rule action called reject() implying a rule MISmatch. + } else { // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; + return false + } + } else if (!this.options.flex) { + break } - } else if (!this.options.flex) { - break; + } } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } + if (match) { + token = this.test_match(match, rules[index]) + if (token !== false) { + return token + } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, + return false + } + if (this._input === '') { + return this.EOF + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + }, // return next match that has a token -lex:function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); + lex: function lex () { + var r = this.next() + if (r) { + return r + } else { + return this.lex() + } + }, + +// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin (condition) { + this.conditionStack.push(condition) + }, + +// pop the previously active lexer condition state off the condition stack + popState: function popState () { + var n = this.conditionStack.length - 1 + if (n > 0) { + return this.conditionStack.pop() + } else { + return this.conditionStack[0] + } + }, + +// produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules () { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules + } else { + return this.conditions['INITIAL'].rules + } + }, + +// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState (n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0) + if (n >= 0) { + return this.conditionStack[n] + } else { + return 'INITIAL' + } + }, + +// alias for begin(condition) + pushState: function pushState (condition) { + this.begin(condition) + }, + +// return the number of states currently on the stack + stateStackSize: function stateStackSize () { + return this.conditionStack.length + }, + options: {'case-insensitive': true}, + performAction: function anonymous (yy, yy_, $avoiding_name_collisions, YY_START) { + // Pre-lexer code can go here + + var YYSTATE = YY_START + switch ($avoiding_name_collisions) { + case 0:return 10 + break + case 1:/* skip whitespace */ + break + case 2:/* skip comments */ + break + case 3:/* skip comments */ + break + case 4:return 4 + break + case 5:return 11 + break + case 6:return 'date' + break + case 7:return 12 + break + case 8:return 13 + break + case 9:return 14 + break + case 10:return 15 + break + case 11:return ':' + break + case 12:return 6 + break + case 13:return 'INVALID' + break + } + }, + rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:gantt\b)/i, /^(?:dateFormat\s[^#\n;]+)/i, /^(?:\d\d\d\d-\d\d-\d\d\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: {'INITIAL': {'rules': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], 'inclusive': true}} + }) + return lexer + })() + parser.lexer = lexer + function Parser () { + this.yy = {} + } + Parser.prototype = parser; parser.Parser = Parser + return new Parser() + })() + + if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { + exports.parser = parser + exports.Parser = parser.Parser + exports.parse = function () { return parser.parse.apply(parser, arguments) } + exports.main = function commonjsMain (args) { + if (!args[1]) { + console.log('Usage: ' + args[0] + ' FILE') + process.exit(1) + } + var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), 'utf8') + return exports.parser.parse(source) + } + if (typeof module !== 'undefined' && _dereq_.main === module) { + exports.main(process.argv.slice(1)) + } } - }, + }).call(this, _dereq_('1YiZ5S')) + }, {'1YiZ5S': 104, 'fs': 102, 'path': 103}], + 124: [function (_dereq_, module, exports) { + var Logger = _dereq_('../../logger') + var _ = _dereq_('lodash') + +// var log = new Logger.Log(); + var log = new Logger.Log(1) -// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) -begin:function begin(condition) { - this.conditionStack.push(condition); - }, + var commits = {} + var head = null + var branches = { 'master': head } + var curBranch = 'master' + var direction = 'LR' + var seq = 0 -// pop the previously active lexer condition state off the condition stack -popState:function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, + function getRandomInt (min, max) { + return Math.floor(Math.random() * (max - min)) + min + } -// produce the lexer rule set which is active for the currently active lexer condition state -_currentRules:function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; + function getId () { + var pool = '0123456789abcdef' + var id = '' + for (var i = 0; i < 7; i++) { + id += pool[getRandomInt(0, 16)] } - }, + return id + } -// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available -topState:function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; + function isfastforwardable (currentCommit, otherCommit) { + log.debug('Entering isfastforwardable:', currentCommit.id, otherCommit.id) + while (currentCommit.seq <= otherCommit.seq && currentCommit != otherCommit) { + // only if other branch has more commits + if (otherCommit.parent == null) break + if (Array.isArray(otherCommit.parent)) { + log.debug('In merge commit:', otherCommit.parent) + return isfastforwardable(currentCommit, commits[otherCommit.parent[0]]) || + isfastforwardable(currentCommit, commits[otherCommit.parent[1]]) + } else { + otherCommit = commits[otherCommit.parent] + } } - }, + log.debug(currentCommit.id, otherCommit.id) + return currentCommit.id == otherCommit.id + } -// alias for begin(condition) -pushState:function pushState(condition) { - this.begin(condition); - }, + function isReachableFrom (currentCommit, otherCommit) { + var currentSeq = currentCommit.seq + var otherSeq = otherCommit.seq + if (currentSeq > otherSeq) return isfastforwardable(otherCommit, currentCommit) + return false + } -// return the number of states currently on the stack -stateStackSize:function stateStackSize() { - return this.conditionStack.length; - }, -options: {"case-insensitive":true}, -performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { - // Pre-lexer code can go here + exports.setDirection = function (dir) { + direction = dir + } + var options = {} + exports.setOptions = function (rawOptString) { + log.debug('options str', rawOptString) + rawOptString = rawOptString && rawOptString.trim() + rawOptString = rawOptString || '{}' + try { + options = JSON.parse(rawOptString) + } catch (e) { + log.error('error while parsing gitGraph options', e.message) + } + } -var YYSTATE=YY_START; -switch($avoiding_name_collisions) { -case 0:return 10; -break; -case 1:/* skip whitespace */ -break; -case 2:/* skip comments */ -break; -case 3:/* skip comments */ -break; -case 4:return 4; -break; -case 5:return 11; -break; -case 6:return 'date'; -break; -case 7:return 12; -break; -case 8:return 13; -break; -case 9:return 14; -break; -case 10:return 15; -break; -case 11:return ':'; -break; -case 12:return 6; -break; -case 13:return 'INVALID'; -break; -} -}, -rules: [/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i], -conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],"inclusive":true}} -}); -return lexer; -})(); -parser.lexer = lexer; -function Parser () { - this.yy = {}; -} -Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})(); - - -if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; -exports.main = function commonjsMain(args) { - if (!args[1]) { - console.log('Usage: '+args[0]+' FILE'); - process.exit(1); - } - var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), "utf8"); - return exports.parser.parse(source); -}; -if (typeof module !== 'undefined' && _dereq_.main === module) { - exports.main(process.argv.slice(1)); -} -} -}).call(this,_dereq_("1YiZ5S")) -},{"1YiZ5S":104,"fs":102,"path":103}],124:[function(_dereq_,module,exports){ -var Logger = _dereq_('../../logger'); -var _ = _dereq_('lodash'); - -//var log = new Logger.Log(); -var log = new Logger.Log(1); - - -var commits = {}; -var head = null; -var branches = { 'master' : head }; -var curBranch = 'master'; -var direction = 'LR'; -var seq = 0; - -function getRandomInt(min, max) { - return Math.floor(Math.random() * (max - min)) + min; -} - -function getId() { - var pool='0123456789abcdef'; - var id = ''; - for (var i = 0; i < 7; i++) { - id += pool[getRandomInt(0,16)] - } - return id; -} + exports.getOptions = function () { + return options + } + exports.commit = function (msg) { + var commit = { id: getId(), + message: msg, + seq: seq++, + parent: head == null ? null : head.id} + head = commit + commits[commit.id] = commit + branches[curBranch] = commit.id + log.debug('in pushCommit ' + commit.id) + } -function isfastforwardable(currentCommit, otherCommit) { - log.debug('Entering isfastforwardable:', currentCommit.id, otherCommit.id); - while (currentCommit.seq <= otherCommit.seq && currentCommit != otherCommit) { - // only if other branch has more commits - if (otherCommit.parent == null) break; - if (Array.isArray(otherCommit.parent)){ - log.debug('In merge commit:', otherCommit.parent); - return isfastforwardable(currentCommit, commits[otherCommit.parent[0]]) || - isfastforwardable(currentCommit, commits[otherCommit.parent[1]]) - } else { - otherCommit = commits[otherCommit.parent]; + exports.branch = function (name) { + branches[name] = head != null ? head.id : null + log.debug('in createBranch') + } + + exports.merge = function (otherBranch) { + var currentCommit = commits[branches[curBranch]] + var otherCommit = commits[branches[otherBranch]] + if (isReachableFrom(currentCommit, otherCommit)) { + log.debug('Already merged') + return } - } - log.debug(currentCommit.id, otherCommit.id); - return currentCommit.id == otherCommit.id; -} - -function isReachableFrom(currentCommit, otherCommit) { - var currentSeq = currentCommit.seq; - var otherSeq = otherCommit.seq; - if (currentSeq > otherSeq) return isfastforwardable(otherCommit, currentCommit); - return false; -} - -exports.setDirection = function(dir) { - direction = dir; -} -var options = {}; -exports.setOptions = function(rawOptString) { - log.debug('options str', rawOptString); - rawOptString = rawOptString && rawOptString.trim(); - rawOptString = rawOptString || '{}'; - try { - options = JSON.parse(rawOptString) - } catch(e) { - log.error('error while parsing gitGraph options', e.message); - } -} - -exports.getOptions = function() { - return options; -} - -exports.commit = function(msg) { - var commit = { id: getId(), - message: msg, - seq: seq++, - parent: head == null ? null : head.id}; - head = commit; - commits[commit.id] = commit; - branches[curBranch] = commit.id; - log.debug('in pushCommit ' + commit.id); -} - -exports.branch = function(name) { - branches[name] = head != null ? head.id: null; - log.debug('in createBranch'); -} - -exports.merge = function(otherBranch) { - var currentCommit = commits[branches[curBranch]]; - var otherCommit = commits[branches[otherBranch]]; - if (isReachableFrom(currentCommit, otherCommit)) { - log.debug('Already merged'); - return; - } - if (isfastforwardable(currentCommit, otherCommit)){ - branches[curBranch] = branches[otherBranch]; - head = commits[branches[curBranch]]; - } else { + if (isfastforwardable(currentCommit, otherCommit)) { + branches[curBranch] = branches[otherBranch] + head = commits[branches[curBranch]] + } else { // create merge commit - var commit = { + var commit = { id: getId(), message: 'merged branch ' + otherBranch + ' into ' + curBranch, seq: seq++, - parent: [head == null ? null : head.id, branches[otherBranch]] - }; - head = commit; - commits[commit.id] = commit; - branches[curBranch] = commit.id; - } - log.debug(branches); - log.debug('in mergeBranch'); -} - -exports.checkout = function(branch) { - log.debug('in checkout'); - curBranch = branch; - var id = branches[curBranch]; - head = commits[id]; -} - -exports.reset = function(commitRef) { - log.debug('in reset', commitRef); - var ref = commitRef.split(':')[0]; - var parentCount = parseInt(commitRef.split(':')[1]); - var commit = ref == 'HEAD' ? head : commits[branches[ref]]; - log.debug(commit, parentCount); - while (parentCount > 0) { - commit = commits[commit.parent]; - parentCount--; - if (!commit) { - var err = 'Critical error - unique parent commit not found during reset'; - log.error(err); - throw err; + parent: [head == null ? null : head.id, branches[otherBranch]] + } + head = commit + commits[commit.id] = commit + branches[curBranch] = commit.id + } + log.debug(branches) + log.debug('in mergeBranch') + } + + exports.checkout = function (branch) { + log.debug('in checkout') + curBranch = branch + var id = branches[curBranch] + head = commits[id] + } + + exports.reset = function (commitRef) { + log.debug('in reset', commitRef) + var ref = commitRef.split(':')[0] + var parentCount = parseInt(commitRef.split(':')[1]) + var commit = ref == 'HEAD' ? head : commits[branches[ref]] + log.debug(commit, parentCount) + while (parentCount > 0) { + commit = commits[commit.parent] + parentCount-- + if (!commit) { + var err = 'Critical error - unique parent commit not found during reset' + log.error(err) + throw err + } } - } - head = commit; - branches[curBranch] = commit.id; -} - -function upsert(arr, key, newval) { - var match = _.find(arr, key); - if(match){ - var index = _.indexOf(arr, _.find(arr, key)); - arr.splice(index, 1, newval); - } else { - arr.push(newval); - } - //console.log(arr); -} - -function prettyPrintCommitHistory(commitArr) { - var commit = _.maxBy(commitArr, 'seq'); - var line = ''; - _.each(commitArr, function(c) { - if (c == commit) { + head = commit + branches[curBranch] = commit.id + } + + function upsert (arr, key, newval) { + var match = _.find(arr, key) + if (match) { + var index = _.indexOf(arr, _.find(arr, key)) + arr.splice(index, 1, newval) + } else { + arr.push(newval) + } + // console.log(arr); + } + + function prettyPrintCommitHistory (commitArr) { + var commit = _.maxBy(commitArr, 'seq') + var line = '' + _.each(commitArr, function (c) { + if (c == commit) { line += '\t*' + } else { + line += '\t|' + } + }) + var label = [line, commit.id, commit.seq] + _.each(branches, function (v, k) { + if (v == commit.id) label.push(k) + }) + log.debug(label.join(' ')) + if (Array.isArray(commit.parent)) { + // console.log("here", commit.parent); + var newCommit = commits[commit.parent[0]] + upsert(commitArr, commit, newCommit) + commitArr.push(commits[commit.parent[1]]) + // console.log("shoudl have 2", commitArr); + } else if (commit.parent == null) { + return } else { - line +='\t|' - } - }); - var label = [line, commit.id, commit.seq]; - _.each(branches, function(v,k){ - if (v == commit.id) label.push(k); - }); - log.debug(label.join(' ')); - if (Array.isArray(commit.parent)) { - //console.log("here", commit.parent); - var newCommit = commits[commit.parent[0]]; - upsert(commitArr, commit, newCommit); - commitArr.push(commits[commit.parent[1]]); - //console.log("shoudl have 2", commitArr); - } else if(commit.parent == null){ - return; - } else { - var nextCommit = commits[commit.parent]; - upsert(commitArr, commit, nextCommit); - } - commitArr = _.uniqBy(commitArr, 'id'); - prettyPrintCommitHistory(commitArr); - -} - -exports.prettyPrint = function() { - log.debug(commits); - var node = exports.getCommitsArray()[0]; - prettyPrintCommitHistory([node]); -} - -exports.clear = function () { - commits = {}; - head = null; - branches = { 'master' : head }; - curBranch = 'master'; - seq =0; -} - -exports.getBranchesAsObjArray = function() { - var branchArr = _.map(branches, function(v,k) { - return {'name': k, 'commit': commits[v]}; - }); - //return _.orderBy(branchArr, [function(b) { return b.commit.seq}], ['desc']); - return branchArr; -} - -exports.getBranches = function() { return branches; } -exports.getCommits = function() { return commits; } -exports.getCommitsArray = function() { - var commitArr = Object.keys(commits).map(function (key) { - return commits[key]; - }); - _.each(commitArr, function(o) { log.debug(o.id) }); - return _.orderBy(commitArr, ['seq'], ['desc']); - } -exports.getCurrentBranch = function() { return curBranch; } -exports.getDirection = function() { return direction; } -exports.getHead = function() { return head; } - -},{"../../logger":132,"lodash":106}],125:[function(_dereq_,module,exports){ -var db = _dereq_('./gitGraphAst'); -var _ = _dereq_('lodash'); -var gitGraphParser = _dereq_('./parser/gitGraph'); -var d3 = _dereq_('../../d3'); -var Logger = _dereq_('../../logger'); - -var log = new Logger.Log(); -var allCommitsDict = {}; -var branchNum; -var config = { - nodeSpacing: 75, - nodeFillColor: 'yellow', - nodeStrokeWidth: 2, - nodeStrokeColor: 'grey', - lineStrokeWidth: 4, - branchOffset: 50, - lineColor: 'grey', - leftMargin: 50, - branchColors: ['#442f74', '#983351', '#609732', '#AA9A39'], - nodeRadius: 15, - nodeLabel: { - width: 75, - height: 100, - x: -25, - y: 15 - } -} -var apiConfig = {}; -exports.setConf = function(c) { - apiConfig = c; -} + var nextCommit = commits[commit.parent] + upsert(commitArr, commit, nextCommit) + } + commitArr = _.uniqBy(commitArr, 'id') + prettyPrintCommitHistory(commitArr) + } + + exports.prettyPrint = function () { + log.debug(commits) + var node = exports.getCommitsArray()[0] + prettyPrintCommitHistory([node]) + } + + exports.clear = function () { + commits = {} + head = null + branches = { 'master': head } + curBranch = 'master' + seq = 0 + } + exports.getBranchesAsObjArray = function () { + var branchArr = _.map(branches, function (v, k) { + return {'name': k, 'commit': commits[v]} + }) + // return _.orderBy(branchArr, [function(b) { return b.commit.seq}], ['desc']); + return branchArr + } -function svgCreateDefs(svg) { - svg + exports.getBranches = function () { return branches } + exports.getCommits = function () { return commits } + exports.getCommitsArray = function () { + var commitArr = Object.keys(commits).map(function (key) { + return commits[key] + }) + _.each(commitArr, function (o) { log.debug(o.id) }) + return _.orderBy(commitArr, ['seq'], ['desc']) + } + exports.getCurrentBranch = function () { return curBranch } + exports.getDirection = function () { return direction } + exports.getHead = function () { return head } + }, {'../../logger': 132, 'lodash': 106}], + 125: [function (_dereq_, module, exports) { + var db = _dereq_('./gitGraphAst') + var _ = _dereq_('lodash') + var gitGraphParser = _dereq_('./parser/gitGraph') + var d3 = _dereq_('../../d3') + var Logger = _dereq_('../../logger') + + var log = new Logger.Log() + var allCommitsDict = {} + var branchNum + var config = { + nodeSpacing: 75, + nodeFillColor: 'yellow', + nodeStrokeWidth: 2, + nodeStrokeColor: 'grey', + lineStrokeWidth: 4, + branchOffset: 50, + lineColor: 'grey', + leftMargin: 50, + branchColors: ['#442f74', '#983351', '#609732', '#AA9A39'], + nodeRadius: 15, + nodeLabel: { + width: 75, + height: 100, + x: -25, + y: 15 + } + } + var apiConfig = {} + exports.setConf = function (c) { + apiConfig = c + } + + function svgCreateDefs (svg) { + svg .append('defs') .append('g') .attr('id', 'def-commit') .append('circle') .attr('r', config.nodeRadius) .attr('cx', 0) - .attr('cy', 0); - svg.select('#def-commit') + .attr('cy', 0) + svg.select('#def-commit') .append('foreignObject') .attr('width', config.nodeLabel.width) .attr('height', config.nodeLabel.height) @@ -55294,240 +55348,239 @@ function svgCreateDefs(svg) { .attr('class', 'node-label') .attr('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility') .append('xhtml:p') - .html(''); -} - + .html('') + } -function svgDrawLine(svg, points, colorIdx, interpolate) { - interpolate = interpolate || 'basis'; - var color = config.branchColors[colorIdx % config.branchColors.length]; - var lineGen = d3.svg.line() - .x(function(d) { - return Math.round(d.x) + function svgDrawLine (svg, points, colorIdx, interpolate) { + interpolate = interpolate || 'basis' + var color = config.branchColors[colorIdx % config.branchColors.length] + var lineGen = d3.svg.line() + .x(function (d) { + return Math.round(d.x) }) - .y(function(d) { - return Math.round(d.y) + .y(function (d) { + return Math.round(d.y) }) - .interpolate(interpolate); + .interpolate(interpolate) - svg + svg .append('svg:path') .attr('d', lineGen(points)) .style('stroke', color) .style('stroke-width', config.lineStrokeWidth) - .style('fill', 'none'); -} + .style('fill', 'none') + } // Pass in the element and its pre-transform coords -function getElementCoords(element, coords) { - coords = coords || element.node().getBBox(); - var ctm = element.node().getCTM(), - xn = ctm.e + coords.x * ctm.a, - yn = ctm.f + coords.y * ctm.d; - //log.debug(ctm, coords); - return { - left: xn, - top: yn, - width: coords.width, - height: coords.height - }; -} - -function svgDrawLineForCommits(svg, fromId, toId, direction, color) { - log.debug('svgDrawLineForCommits: ', fromId, toId); - var fromBbox = getElementCoords(svg.select('#node-' + fromId + ' circle')); - var toBbox = getElementCoords(svg.select('#node-' + toId + ' circle')); - //log.debug('svgDrawLineForCommits: ', fromBbox, toBbox); - switch (direction) { - case 'LR': + function getElementCoords (element, coords) { + coords = coords || element.node().getBBox() + var ctm = element.node().getCTM(), + xn = ctm.e + coords.x * ctm.a, + yn = ctm.f + coords.y * ctm.d + // log.debug(ctm, coords); + return { + left: xn, + top: yn, + width: coords.width, + height: coords.height + } + } + + function svgDrawLineForCommits (svg, fromId, toId, direction, color) { + log.debug('svgDrawLineForCommits: ', fromId, toId) + var fromBbox = getElementCoords(svg.select('#node-' + fromId + ' circle')) + var toBbox = getElementCoords(svg.select('#node-' + toId + ' circle')) + // log.debug('svgDrawLineForCommits: ', fromBbox, toBbox); + switch (direction) { + case 'LR': // (toBbox) // +-------- // + (fromBbox) if (fromBbox.left - toBbox.left > config.nodeSpacing) { - var lineStart = { x: fromBbox.left - config.nodeSpacing, y: toBbox.top + toBbox.height/2}; - var lineEnd ={ x: toBbox.left + toBbox.width, y: toBbox.top + toBbox.height/2 }; - svgDrawLine(svg, [lineStart , lineEnd], color, 'linear') - svgDrawLine(svg, [ - {x: fromBbox.left, y: fromBbox.top + fromBbox.height/2}, - {x: fromBbox.left - config.nodeSpacing/2, y: fromBbox.top + fromBbox.height/2}, - {x: fromBbox.left - config.nodeSpacing/2, y: lineStart.y}, - lineStart], color); + var lineStart = { x: fromBbox.left - config.nodeSpacing, y: toBbox.top + toBbox.height / 2} + var lineEnd = { x: toBbox.left + toBbox.width, y: toBbox.top + toBbox.height / 2 } + svgDrawLine(svg, [lineStart, lineEnd], color, 'linear') + svgDrawLine(svg, [ + {x: fromBbox.left, y: fromBbox.top + fromBbox.height / 2}, + {x: fromBbox.left - config.nodeSpacing / 2, y: fromBbox.top + fromBbox.height / 2}, + {x: fromBbox.left - config.nodeSpacing / 2, y: lineStart.y}, + lineStart], color) } else { - svgDrawLine(svg, [{ - 'x': fromBbox.left, - 'y': fromBbox.top + fromBbox.height / 2 - }, { - 'x': fromBbox.left - config.nodeSpacing/2, - 'y': fromBbox.top + fromBbox.height / 2 - }, { - 'x': fromBbox.left - config.nodeSpacing/2, - 'y': toBbox.top + toBbox.height / 2 - }, { - 'x': toBbox.left + toBbox.width, - 'y': toBbox.top + toBbox.height / 2 - }], color); - } - break; - case 'BT': + svgDrawLine(svg, [{ + 'x': fromBbox.left, + 'y': fromBbox.top + fromBbox.height / 2 + }, { + 'x': fromBbox.left - config.nodeSpacing / 2, + 'y': fromBbox.top + fromBbox.height / 2 + }, { + 'x': fromBbox.left - config.nodeSpacing / 2, + 'y': toBbox.top + toBbox.height / 2 + }, { + 'x': toBbox.left + toBbox.width, + 'y': toBbox.top + toBbox.height / 2 + }], color) + } + break + case 'BT': // + (fromBbox) // | // | // + (toBbox) if (toBbox.top - fromBbox.top > config.nodeSpacing) { - lineStart = { x: toBbox.left + toBbox.width/2, y: fromBbox.top + fromBbox.height + config.nodeSpacing}; - lineEnd ={ x: toBbox.left + toBbox.width/2, y: toBbox.top }; - svgDrawLine(svg, [lineStart , lineEnd], color, 'linear') - svgDrawLine(svg, [ - {x: fromBbox.left + fromBbox.width/2, y: fromBbox.top + fromBbox.height}, - {x: fromBbox.left + fromBbox.width/2, y: fromBbox.top + fromBbox.height + config.nodeSpacing/2}, - {x: toBbox.left + toBbox.width/2, y: lineStart.y - config.nodeSpacing/2}, - lineStart], color); + lineStart = { x: toBbox.left + toBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing} + lineEnd = { x: toBbox.left + toBbox.width / 2, y: toBbox.top } + svgDrawLine(svg, [lineStart, lineEnd], color, 'linear') + svgDrawLine(svg, [ + {x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height}, + {x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing / 2}, + {x: toBbox.left + toBbox.width / 2, y: lineStart.y - config.nodeSpacing / 2}, + lineStart], color) } else { - svgDrawLine(svg, [{ - 'x': fromBbox.left + fromBbox.width/2, - 'y': fromBbox.top + fromBbox.height - }, { - 'x': fromBbox.left + fromBbox.width/2, - 'y': fromBbox.top + config.nodeSpacing/2 - }, { - 'x': toBbox.left + toBbox.width/2, - 'y': toBbox.top - config.nodeSpacing/2 - }, { - 'x': toBbox.left + toBbox.width/2, - 'y': toBbox.top - }], color); - } - break; - } -} + svgDrawLine(svg, [{ + 'x': fromBbox.left + fromBbox.width / 2, + 'y': fromBbox.top + fromBbox.height + }, { + 'x': fromBbox.left + fromBbox.width / 2, + 'y': fromBbox.top + config.nodeSpacing / 2 + }, { + 'x': toBbox.left + toBbox.width / 2, + 'y': toBbox.top - config.nodeSpacing / 2 + }, { + 'x': toBbox.left + toBbox.width / 2, + 'y': toBbox.top + }], color) + } + break + } + } -function cloneNode(svg, selector) { - return svg.select(selector).node().cloneNode(true); -} + function cloneNode (svg, selector) { + return svg.select(selector).node().cloneNode(true) + } -function renderCommitHistory(svg, commitid, branches, direction) { - var commit; - var numCommits = Object.keys(allCommitsDict).length; - if (_.isString(commitid)) { - do { - commit = allCommitsDict[commitid]; - log.debug('in renderCommitHistory', commit.id, commit.seq); - if (svg.select('#node-' + commitid).size() > 0) { - return; + function renderCommitHistory (svg, commitid, branches, direction) { + var commit + var numCommits = Object.keys(allCommitsDict).length + if (_.isString(commitid)) { + do { + commit = allCommitsDict[commitid] + log.debug('in renderCommitHistory', commit.id, commit.seq) + if (svg.select('#node-' + commitid).size() > 0) { + return } svg - .append(function() { - return cloneNode(svg, '#def-commit'); + .append(function () { + return cloneNode(svg, '#def-commit') }) .attr('class', 'commit') - .attr('id', function() { - return 'node-' + commit.id; + .attr('id', function () { + return 'node-' + commit.id }) - .attr('transform', function() { - switch (direction) { - case 'LR': - return 'translate(' + (commit.seq * config.nodeSpacing + config.leftMargin) + ', ' - + (branchNum * config.branchOffset) + ')'; - case 'BT': - return 'translate(' + (branchNum * config.branchOffset + config.leftMargin) + ', ' - + ((numCommits - commit.seq) * config.nodeSpacing) + ')'; - } + .attr('transform', function () { + switch (direction) { + case 'LR': + return 'translate(' + (commit.seq * config.nodeSpacing + config.leftMargin) + ', ' + + (branchNum * config.branchOffset) + ')' + case 'BT': + return 'translate(' + (branchNum * config.branchOffset + config.leftMargin) + ', ' + + ((numCommits - commit.seq) * config.nodeSpacing) + ')' + } }) .attr('fill', config.nodeFillColor) .attr('stroke', config.nodeStrokeColor) - .attr('stroke-width', config.nodeStrokeWidth); + .attr('stroke-width', config.nodeStrokeWidth) - var branch = _.find(branches, ['commit', commit]); + var branch = _.find(branches, ['commit', commit]) if (branch) { - log.debug('found branch ', branch.name); - svg.select('#node-' + commit.id + ' p') + log.debug('found branch ', branch.name) + svg.select('#node-' + commit.id + ' p') .append('xhtml:span') .attr('class', 'branch-label') - .text(branch.name + ', '); + .text(branch.name + ', ') } svg.select('#node-' + commit.id + ' p') .append('xhtml:span') .attr('class', 'commit-id') - .text(commit.id); + .text(commit.id) if (commit.message !== '' && direction === 'BT') { - svg.select('#node-' + commit.id + ' p') + svg.select('#node-' + commit.id + ' p') .append('xhtml:span') .attr('class', 'commit-msg') - .text( ', ' + commit.message); + .text(', ' + commit.message) } commitid = commit.parent - } while (commitid && allCommitsDict[commitid]); - } + } while (commitid && allCommitsDict[commitid]) + } - if (_.isArray(commitid)) { - log.debug('found merge commmit', commitid); - renderCommitHistory(svg, commitid[0], branches, direction); - branchNum++; - renderCommitHistory(svg, commitid[1], branches, direction); - branchNum--; - } -} - -function renderLines(svg, commit, direction, branchColor) { - branchColor = branchColor || 0; - while (commit.seq > 0 && !commit.lineDrawn) { - if (_.isString(commit.parent)) { - svgDrawLineForCommits(svg, commit.id, commit.parent, direction, branchColor); - commit.lineDrawn = true; - commit = allCommitsDict[commit.parent]; - } else if (_.isArray(commit.parent)) { + if (_.isArray(commitid)) { + log.debug('found merge commmit', commitid) + renderCommitHistory(svg, commitid[0], branches, direction) + branchNum++ + renderCommitHistory(svg, commitid[1], branches, direction) + branchNum-- + } + } + + function renderLines (svg, commit, direction, branchColor) { + branchColor = branchColor || 0 + while (commit.seq > 0 && !commit.lineDrawn) { + if (_.isString(commit.parent)) { + svgDrawLineForCommits(svg, commit.id, commit.parent, direction, branchColor) + commit.lineDrawn = true + commit = allCommitsDict[commit.parent] + } else if (_.isArray(commit.parent)) { svgDrawLineForCommits(svg, commit.id, commit.parent[0], direction, branchColor) svgDrawLineForCommits(svg, commit.id, commit.parent[1], direction, branchColor + 1) - renderLines(svg, allCommitsDict[commit.parent[1]], direction, branchColor + 1); - commit.lineDrawn = true; - commit = allCommitsDict[commit.parent[0]]; + renderLines(svg, allCommitsDict[commit.parent[1]], direction, branchColor + 1) + commit.lineDrawn = true + commit = allCommitsDict[commit.parent[0]] + } } - } -} + } -exports.draw = function(txt, id, ver) { - try { - var parser; - parser = gitGraphParser.parser; - parser.yy = db; + exports.draw = function (txt, id, ver) { + try { + var parser + parser = gitGraphParser.parser + parser.yy = db - log.debug('in gitgraph renderer', txt, id, ver); + log.debug('in gitgraph renderer', txt, id, ver) // Parse the graph definition - parser.parse(txt + '\n'); - - config = _.extend(config, apiConfig, db.getOptions()); - log.debug('effective options', config); - var direction = db.getDirection(); - allCommitsDict = db.getCommits(); - var branches = db.getBranchesAsObjArray(); - if (direction === 'BT') { - config.nodeLabel.x = branches.length * config.branchOffset; - config.nodeLabel.width = '100%'; - config.nodeLabel.y = -1 * 2* config.nodeRadius; - } - var svg = d3.select('#' + id); - svgCreateDefs(svg); - branchNum = 1; - _.each(branches, function(v) { - renderCommitHistory(svg, v.commit.id, branches, direction); - renderLines(svg, v.commit, direction); - branchNum++; - }); - svg.attr('height', function() { - if (direction === 'BT') return Object.keys(allCommitsDict).length * config.nodeSpacing; - return (branches.length + 1) * config.branchOffset; - }); - //svg.attr('width', function() { - //if (direction === 'LR') return Object.keys(allCommitsDict).length * config.nodeSpacing + config.leftMargin; - //return (branches.length + 1) * config.branchOffset; - //}); - } catch (e) { - log.error('Error while rendering gitgraph'); - log.error(e.message); - } -}; - -},{"../../d3":109,"../../logger":132,"./gitGraphAst":124,"./parser/gitGraph":126,"lodash":106}],126:[function(_dereq_,module,exports){ -(function (process){ + parser.parse(txt + '\n') + + config = _.extend(config, apiConfig, db.getOptions()) + log.debug('effective options', config) + var direction = db.getDirection() + allCommitsDict = db.getCommits() + var branches = db.getBranchesAsObjArray() + if (direction === 'BT') { + config.nodeLabel.x = branches.length * config.branchOffset + config.nodeLabel.width = '100%' + config.nodeLabel.y = -1 * 2 * config.nodeRadius + } + var svg = d3.select('#' + id) + svgCreateDefs(svg) + branchNum = 1 + _.each(branches, function (v) { + renderCommitHistory(svg, v.commit.id, branches, direction) + renderLines(svg, v.commit, direction) + branchNum++ + }) + svg.attr('height', function () { + if (direction === 'BT') return Object.keys(allCommitsDict).length * config.nodeSpacing + return (branches.length + 1) * config.branchOffset + }) + // svg.attr('width', function() { + // if (direction === 'LR') return Object.keys(allCommitsDict).length * config.nodeSpacing + config.leftMargin; + // return (branches.length + 1) * config.branchOffset; + // }); + } catch (e) { + log.error('Error while rendering gitgraph') + log.error(e.message) + } + } + }, {'../../d3': 109, '../../logger': 132, './gitGraphAst': 124, './parser/gitGraph': 126, 'lodash': 106}], + 126: [function (_dereq_, module, exports) { + (function (process) { /* parser generated by jison 0.4.17 */ /* Returns a Parser object of the following structure: @@ -55580,7 +55633,6 @@ exports.draw = function(txt, id, ver) { } } - token location info (@$, _$, etc.): { first_line: n, last_line: n, @@ -55589,7 +55641,6 @@ exports.draw = function(txt, id, ver) { range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) } - the parseError function receives a 'hash' object with these members for lexer and parser errors: { text: (matched text) token: (the produced terminal token, if any) @@ -55601,633 +55652,632 @@ exports.draw = function(txt, id, ver) { recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) } */ -var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[2,3],$V1=[1,7],$V2=[7,12,15,17,19,20,21],$V3=[7,11,12,15,17,19,20,21],$V4=[2,20],$V5=[1,32]; -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"start":3,"GG":4,":":5,"document":6,"EOF":7,"DIR":8,"options":9,"body":10,"OPT":11,"NL":12,"line":13,"statement":14,"COMMIT":15,"commit_arg":16,"BRANCH":17,"ID":18,"CHECKOUT":19,"MERGE":20,"RESET":21,"reset_arg":22,"STR":23,"HEAD":24,"reset_parents":25,"CARET":26,"$accept":0,"$end":1}, -terminals_: {2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"}, -productions_: [0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]], -performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { + var parser = (function () { + var o = function (k, v, o, l) { for (o = o || {}, l = k.length; l--; o[k[l]] = v);return o }, $V0 = [2, 3], $V1 = [1, 7], $V2 = [7, 12, 15, 17, 19, 20, 21], $V3 = [7, 11, 12, 15, 17, 19, 20, 21], $V4 = [2, 20], $V5 = [1, 32] + var parser = {trace: function trace () { }, + yy: {}, + symbols_: {'error': 2, 'start': 3, 'GG': 4, ':': 5, 'document': 6, 'EOF': 7, 'DIR': 8, 'options': 9, 'body': 10, 'OPT': 11, 'NL': 12, 'line': 13, 'statement': 14, 'COMMIT': 15, 'commit_arg': 16, 'BRANCH': 17, 'ID': 18, 'CHECKOUT': 19, 'MERGE': 20, 'RESET': 21, 'reset_arg': 22, 'STR': 23, 'HEAD': 24, 'reset_parents': 25, 'CARET': 26, '$accept': 0, '$end': 1}, + terminals_: {2: 'error', 4: 'GG', 5: ':', 7: 'EOF', 8: 'DIR', 11: 'OPT', 12: 'NL', 15: 'COMMIT', 17: 'BRANCH', 18: 'ID', 19: 'CHECKOUT', 20: 'MERGE', 21: 'RESET', 23: 'STR', 24: 'HEAD', 26: 'CARET'}, + productions_: [0, [3, 4], [3, 5], [6, 0], [6, 2], [9, 2], [9, 1], [10, 0], [10, 2], [13, 2], [13, 1], [14, 2], [14, 2], [14, 2], [14, 2], [14, 2], [16, 0], [16, 1], [22, 2], [22, 2], [25, 0], [25, 2]], + performAction: function anonymous (yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ -var $0 = $$.length - 1; -switch (yystate) { -case 1: - return $$[$0-1]; -break; -case 2: -yy.setDirection($$[$0-3]); return $$[$0-1]; -break; -case 4: - yy.setOptions($$[$0-1]); this.$ = $$[$0] -break; -case 5: -$$[$0-1] +=$$[$0]; this.$=$$[$0-1] -break; -case 7: -this.$ = [] -break; -case 8: -$$[$0-1].push($$[$0]); this.$=$$[$0-1]; -break; -case 9: -this.$ =$$[$0-1] -break; -case 11: -yy.commit($$[$0]) -break; -case 12: -yy.branch($$[$0]) -break; -case 13: -yy.checkout($$[$0]) -break; -case 14: -yy.merge($$[$0]) -break; -case 15: -yy.reset($$[$0]) -break; -case 16: -this.$ = "" -break; -case 17: -this.$=$$[$0] -break; -case 18: -this.$ = $$[$0-1]+ ":" + $$[$0] -break; -case 19: -this.$ = $$[$0-1]+ ":" + yy.count; yy.count = 0 -break; -case 20: -yy.count = 0 -break; -case 21: - yy.count += 1 -break; -} -}, -table: [{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:$V0,9:6,12:$V1},{5:[1,8]},{7:[1,9]},o($V2,[2,7],{10:10,11:[1,11]}),o($V3,[2,6]),{6:12,7:$V0,9:6,12:$V1},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},o($V3,[2,5]),{7:[1,21]},o($V2,[2,8]),{12:[1,22]},o($V2,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},o($V2,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:$V4,25:31,26:$V5},{12:$V4,25:33,26:$V5},{12:[2,18]},{12:$V4,25:34,26:$V5},{12:[2,19]},{12:[2,21]}], -defaultActions: {9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]}, -parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - function _parseError (msg, hash) { - this.message = msg; - this.hash = hash; - } - _parseError.prototype = Error; - - throw new _parseError(str, hash); - } -}, -parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - _token_stack: + var $0 = $$.length - 1 + switch (yystate) { + case 1: + return $$[$0 - 1] + break + case 2: + yy.setDirection($$[$0 - 3]); return $$[$0 - 1] + break + case 4: + yy.setOptions($$[$0 - 1]); this.$ = $$[$0] + break + case 5: + $$[$0 - 1] += $$[$0]; this.$ = $$[$0 - 1] + break + case 7: + this.$ = [] + break + case 8: + $$[$0 - 1].push($$[$0]); this.$ = $$[$0 - 1] + break + case 9: + this.$ = $$[$0 - 1] + break + case 11: + yy.commit($$[$0]) + break + case 12: + yy.branch($$[$0]) + break + case 13: + yy.checkout($$[$0]) + break + case 14: + yy.merge($$[$0]) + break + case 15: + yy.reset($$[$0]) + break + case 16: + this.$ = '' + break + case 17: + this.$ = $$[$0] + break + case 18: + this.$ = $$[$0 - 1] + ':' + $$[$0] + break + case 19: + this.$ = $$[$0 - 1] + ':' + yy.count; yy.count = 0 + break + case 20: + yy.count = 0 + break + case 21: + yy.count += 1 + break + } + }, + table: [{3: 1, 4: [1, 2]}, {1: [3]}, {5: [1, 3], 8: [1, 4]}, {6: 5, 7: $V0, 9: 6, 12: $V1}, {5: [1, 8]}, {7: [1, 9]}, o($V2, [2, 7], {10: 10, 11: [1, 11]}), o($V3, [2, 6]), {6: 12, 7: $V0, 9: 6, 12: $V1}, {1: [2, 1]}, {7: [2, 4], 12: [1, 15], 13: 13, 14: 14, 15: [1, 16], 17: [1, 17], 19: [1, 18], 20: [1, 19], 21: [1, 20]}, o($V3, [2, 5]), {7: [1, 21]}, o($V2, [2, 8]), {12: [1, 22]}, o($V2, [2, 10]), {12: [2, 16], 16: 23, 23: [1, 24]}, {18: [1, 25]}, {18: [1, 26]}, {18: [1, 27]}, {18: [1, 30], 22: 28, 24: [1, 29]}, {1: [2, 2]}, o($V2, [2, 9]), {12: [2, 11]}, {12: [2, 17]}, {12: [2, 12]}, {12: [2, 13]}, {12: [2, 14]}, {12: [2, 15]}, {12: $V4, 25: 31, 26: $V5}, {12: $V4, 25: 33, 26: $V5}, {12: [2, 18]}, {12: $V4, 25: 34, 26: $V5}, {12: [2, 19]}, {12: [2, 21]}], + defaultActions: {9: [2, 1], 21: [2, 2], 23: [2, 11], 24: [2, 17], 25: [2, 12], 26: [2, 13], 27: [2, 14], 28: [2, 15], 31: [2, 18], 33: [2, 19], 34: [2, 21]}, + parseError: function parseError (str, hash) { + if (hash.recoverable) { + this.trace(str) + } else { + function _parseError (msg, hash) { + this.message = msg + this.hash = hash + } + _parseError.prototype = Error + + throw new _parseError(str, hash) + } + }, + parse: function parse (input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1 + var args = lstack.slice.call(arguments, 1) + var lexer = Object.create(this.lexer) + var sharedState = { yy: {} } + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k] + } + } + lexer.setInput(input, sharedState.yy) + sharedState.yy.lexer = lexer + sharedState.yy.parser = this + if (typeof lexer.yylloc === 'undefined') { + lexer.yylloc = {} + } + var yyloc = lexer.yylloc + lstack.push(yyloc) + var ranges = lexer.options && lexer.options.ranges + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError + } else { + this.parseError = Object.getPrototypeOf(this).parseError + } + function popStack (n) { + stack.length = stack.length - 2 * n + vstack.length = vstack.length - n + lstack.length = lstack.length - n + } + _token_stack: var lex = function () { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - }; - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; + var token + token = lexer.lex() || EOF + if (typeof token !== 'number') { + token = self.symbols_[token] || token + } + return token } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } - } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected + while (true) { + state = stack[stack.length - 1] + if (this.defaultActions[state]) { + action = this.defaultActions[state] } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + if (symbol === null || typeof symbol === 'undefined') { + symbol = lex() + } + action = table[state] && table[state][symbol] } - this.parseError(errStr, { + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = '' + expected = [] + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\'') + } + } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'' + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'') + } + this.parseError(errStr, { text: lexer.match, token: this.terminals_[symbol] || symbol, line: lexer.yylineno, loc: yyloc, expected: expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - if (recovering > 0) { - recovering--; + }) } - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -}}; + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol) + } + switch (action[0]) { + case 1: + stack.push(symbol) + vstack.push(lexer.yytext) + lstack.push(lexer.yylloc) + stack.push(action[1]) + symbol = null + if (!preErrorSymbol) { + yyleng = lexer.yyleng + yytext = lexer.yytext + yylineno = lexer.yylineno + yyloc = lexer.yylloc + if (recovering > 0) { + recovering-- + } + } else { + symbol = preErrorSymbol + preErrorSymbol = null + } + break + case 2: + len = this.productions_[action[1]][1] + yyval.$ = vstack[vstack.length - len] + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + } + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ] + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)) + if (typeof r !== 'undefined') { + return r + } + if (len) { + stack = stack.slice(0, -1 * len * 2) + vstack = vstack.slice(0, -1 * len) + lstack = lstack.slice(0, -1 * len) + } + stack.push(this.productions_[action[1]][0]) + vstack.push(yyval.$) + lstack.push(yyval._$) + newState = table[stack[stack.length - 2]][stack[stack.length - 1]] + stack.push(newState) + break + case 3: + return true + } + } + return true + }} /* generated by jison-lex 0.3.4 */ -var lexer = (function(){ -var lexer = ({ + var lexer = (function () { + var lexer = ({ -EOF:1, + EOF: 1, -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, + parseError: function parseError (str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash) + } else { + throw new Error(str) + } + }, // resets the lexer, sets new input -setInput:function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0,0]; - } - this.offset = 0; - return this; - }, + setInput: function (input, yy) { + this.yy = yy || this.yy || {} + this._input = input + this._more = this._backtrack = this.done = false + this.yylineno = this.yyleng = 0 + this.yytext = this.matched = this.match = '' + this.conditionStack = ['INITIAL'] + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + } + if (this.options.ranges) { + this.yylloc.range = [0, 0] + } + this.offset = 0 + return this + }, // consumes and returns one char from the input -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } + input: function () { + var ch = this._input[0] + this.yytext += ch + this.yyleng++ + this.offset++ + this.match += ch + this.matched += ch + var lines = ch.match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno++ + this.yylloc.last_line++ + } else { + this.yylloc.last_column++ + } + if (this.options.ranges) { + this.yylloc.range[1]++ + } - this._input = this._input.slice(1); - return ch; - }, + this._input = this._input.slice(1) + return ch + }, // unshifts one char (or a string) into the input -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) - + oldLines[oldLines.length - lines.length].length - lines[0].length : - this.yylloc.first_column - len - }; + unput: function (ch) { + var len = ch.length + var lines = ch.split(/(?:\r\n?|\n)/g) + + this._input = ch + this._input + this.yytext = this.yytext.substr(0, this.yytext.length - len) + // this.yyleng -= len; + this.offset -= len + var oldLines = this.match.split(/(?:\r\n?|\n)/g) + this.match = this.match.substr(0, this.match.length - 1) + this.matched = this.matched.substr(0, this.matched.length - 1) + + if (lines.length - 1) { + this.yylineno -= lines.length - 1 + } + var r = this.yylloc.range + + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines + ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + + oldLines[oldLines.length - lines.length].length - lines[0].length + : this.yylloc.first_column - len + } - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len] + } + this.yyleng = this.yytext.length + return this + }, // When called from action, caches matched text and appends it on next action -more:function () { - this._more = true; - return this; - }, + more: function () { + this._more = true + return this + }, // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. -reject:function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - - } - return this; - }, + reject: function () { + if (this.options.backtrack_lexer) { + this._backtrack = true + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + return this + }, // retain first n characters of the match -less:function (n) { - this.unput(this.match.slice(n)); - }, + less: function (n) { + this.unput(this.match.slice(n)) + }, // displays already matched input, i.e. for error messages -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, + pastInput: function () { + var past = this.matched.substr(0, this.matched.length - this.match.length) + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, '') + }, // displays upcoming input, i.e. for error messages -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, + upcomingInput: function () { + var next = this.match + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length) + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, '') + }, // displays the character position where the lexing error occurred, i.e. for error messages -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, + showPosition: function () { + var pre = this.pastInput() + var c = new Array(pre.length + 1).join('-') + return pre + this.upcomingInput() + '\n' + c + '^' + }, // test the lexed token: return FALSE when not a match, otherwise return token -test_match:function (match, indexed_rule) { - var token, - lines, - backup; + test_match: function (match, indexed_rule) { + var token, + lines, + backup - if (this.options.backtrack_lexer) { + if (this.options.backtrack_lexer) { // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? - lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : - this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + } + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0) + } + } + + lines = match[0].match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno += lines.length + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines + ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length + : this.yylloc.last_column + match[0].length + } + this.yytext += match[0] + this.match += match[0] + this.matches = match + this.yyleng = this.yytext.length + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng] + } + this._more = false + this._backtrack = false + this._input = this._input.slice(match[0].length) + this.matched += match[0] + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]) + if (this.done && this._input) { + this.done = false + } + if (token) { + return token + } else if (this._backtrack) { // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, + for (var k in backup) { + this[k] = backup[k] + } + return false // rule action called reject() implying the next rule should be tested instead. + } + return false + }, // return next match in input -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - - var token, - match, - tempMatch, - index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } else { + next: function () { + if (this.done) { + return this.EOF + } + if (!this._input) { + this.done = true + } + + var token, + match, + tempMatch, + index + if (!this._more) { + this.yytext = '' + this.match = '' + } + var rules = this._currentRules() + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]) + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch + index = i + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]) + if (token !== false) { + return token + } else if (this._backtrack) { + match = false + continue // rule action called reject() implying a rule MISmatch. + } else { // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; + return false + } + } else if (!this.options.flex) { + break } - } else if (!this.options.flex) { - break; + } } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } + if (match) { + token = this.test_match(match, rules[index]) + if (token !== false) { + return token + } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, + return false + } + if (this._input === '') { + return this.EOF + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + }, // return next match that has a token -lex:function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, + lex: function lex () { + var r = this.next() + if (r) { + return r + } else { + return this.lex() + } + }, // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) -begin:function begin(condition) { - this.conditionStack.push(condition); - }, + begin: function begin (condition) { + this.conditionStack.push(condition) + }, // pop the previously active lexer condition state off the condition stack -popState:function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, + popState: function popState () { + var n = this.conditionStack.length - 1 + if (n > 0) { + return this.conditionStack.pop() + } else { + return this.conditionStack[0] + } + }, // produce the lexer rule set which is active for the currently active lexer condition state -_currentRules:function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, + _currentRules: function _currentRules () { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules + } else { + return this.conditions['INITIAL'].rules + } + }, // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available -topState:function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, + topState: function topState (n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0) + if (n >= 0) { + return this.conditionStack[n] + } else { + return 'INITIAL' + } + }, // alias for begin(condition) -pushState:function pushState(condition) { - this.begin(condition); - }, + pushState: function pushState (condition) { + this.begin(condition) + }, // return the number of states currently on the stack -stateStackSize:function stateStackSize() { - return this.conditionStack.length; - }, -options: {"case-insensitive":true}, -performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { -var YYSTATE=YY_START; -switch($avoiding_name_collisions) { -case 0:return 12; -break; -case 1:/* skip all whitespace */ -break; -case 2:/* skip comments */ -break; -case 3:/* skip comments */ -break; -case 4:return 4; -break; -case 5:return 15; -break; -case 6:return 17; -break; -case 7:return 20; -break; -case 8:return 21; -break; -case 9:return 19; -break; -case 10:return 8; -break; -case 11:return 8; -break; -case 12:return 5; -break; -case 13:return 26 -break; -case 14:this.begin("options"); -break; -case 15:this.popState(); -break; -case 16:return 11; -break; -case 17:this.begin("string"); -break; -case 18:this.popState(); -break; -case 19:return 23; -break; -case 20:return 18; -break; -case 21:return 7; -break; -} -}, -rules: [/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][a-zA-Z0-9_]+)/i,/^(?:$)/i], -conditions: {"options":{"rules":[15,16],"inclusive":false},"string":{"rules":[18,19],"inclusive":false},"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],"inclusive":true}} -}); -return lexer; -})(); -parser.lexer = lexer; -function Parser () { - this.yy = {}; -} -Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})(); - - -if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; -exports.main = function commonjsMain(args) { - if (!args[1]) { - console.log('Usage: '+args[0]+' FILE'); - process.exit(1); - } - var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), "utf8"); - return exports.parser.parse(source); -}; -if (typeof module !== 'undefined' && _dereq_.main === module) { - exports.main(process.argv.slice(1)); -} -} -}).call(this,_dereq_("1YiZ5S")) -},{"1YiZ5S":104,"fs":102,"path":103}],127:[function(_dereq_,module,exports){ -(function (process){ + stateStackSize: function stateStackSize () { + return this.conditionStack.length + }, + options: {'case-insensitive': true}, + performAction: function anonymous (yy, yy_, $avoiding_name_collisions, YY_START) { + var YYSTATE = YY_START + switch ($avoiding_name_collisions) { + case 0:return 12 + break + case 1:/* skip all whitespace */ + break + case 2:/* skip comments */ + break + case 3:/* skip comments */ + break + case 4:return 4 + break + case 5:return 15 + break + case 6:return 17 + break + case 7:return 20 + break + case 8:return 21 + break + case 9:return 19 + break + case 10:return 8 + break + case 11:return 8 + break + case 12:return 5 + break + case 13:return 26 + break + case 14:this.begin('options') + break + case 15:this.popState() + break + case 16:return 11 + break + case 17:this.begin('string') + break + case 18:this.popState() + break + case 19:return 23 + break + case 20:return 18 + break + case 21:return 7 + break + } + }, + rules: [/^(?:(\r?\n)+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:gitGraph\b)/i, /^(?:commit\b)/i, /^(?:branch\b)/i, /^(?:merge\b)/i, /^(?:reset\b)/i, /^(?:checkout\b)/i, /^(?:LR\b)/i, /^(?:BT\b)/i, /^(?::)/i, /^(?:\^)/i, /^(?:options\r?\n)/i, /^(?:end\r?\n)/i, /^(?:[^\n]+\r?\n)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[a-zA-Z][a-zA-Z0-9_]+)/i, /^(?:$)/i], + conditions: {'options': {'rules': [15, 16], 'inclusive': false}, 'string': {'rules': [18, 19], 'inclusive': false}, 'INITIAL': {'rules': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 20, 21], 'inclusive': true}} + }) + return lexer + })() + parser.lexer = lexer + function Parser () { + this.yy = {} + } + Parser.prototype = parser; parser.Parser = Parser + return new Parser() + })() + + if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { + exports.parser = parser + exports.Parser = parser.Parser + exports.parse = function () { return parser.parse.apply(parser, arguments) } + exports.main = function commonjsMain (args) { + if (!args[1]) { + console.log('Usage: ' + args[0] + ' FILE') + process.exit(1) + } + var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), 'utf8') + return exports.parser.parse(source) + } + if (typeof module !== 'undefined' && _dereq_.main === module) { + exports.main(process.argv.slice(1)) + } + } + }).call(this, _dereq_('1YiZ5S')) + }, {'1YiZ5S': 104, 'fs': 102, 'path': 103}], + 127: [function (_dereq_, module, exports) { + (function (process) { /* parser generated by jison 0.4.17 */ /* Returns a Parser object of the following structure: @@ -56280,7 +56330,6 @@ if (typeof module !== 'undefined' && _dereq_.main === module) { } } - token location info (@$, _$, etc.): { first_line: n, last_line: n, @@ -56289,7 +56338,6 @@ if (typeof module !== 'undefined' && _dereq_.main === module) { range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) } - the parseError function receives a 'hash' object with these members for lexer and parser errors: { text: (matched text) token: (the produced terminal token, if any) @@ -56301,1044 +56349,1043 @@ if (typeof module !== 'undefined' && _dereq_.main === module) { recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) } */ -var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,3],$V2=[1,4],$V3=[2,4],$V4=[1,9],$V5=[1,11],$V6=[1,12],$V7=[1,14],$V8=[1,15],$V9=[1,17],$Va=[1,18],$Vb=[1,19],$Vc=[1,20],$Vd=[1,22],$Ve=[1,23],$Vf=[1,4,5,10,15,16,18,20,21,22,23,24,25,36],$Vg=[1,31],$Vh=[4,5,10,15,16,18,20,21,22,23,25,36],$Vi=[34,35,36]; -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"start":3,"SPACE":4,"NL":5,"SD":6,"document":7,"line":8,"statement":9,"participant":10,"actor":11,"AS":12,"restOfLine":13,"signal":14,"activate":15,"deactivate":16,"note_statement":17,"title":18,"text2":19,"loop":20,"end":21,"opt":22,"alt":23,"else":24,"note":25,"placement":26,"over":27,"actor_pair":28,"spaceList":29,",":30,"left_of":31,"right_of":32,"signaltype":33,"+":34,"-":35,"ACTOR":36,"SOLID_OPEN_ARROW":37,"DOTTED_OPEN_ARROW":38,"SOLID_ARROW":39,"DOTTED_ARROW":40,"SOLID_CROSS":41,"DOTTED_CROSS":42,"TXT":43,"$accept":0,"$end":1}, -terminals_: {2:"error",4:"SPACE",5:"NL",6:"SD",10:"participant",12:"AS",13:"restOfLine",15:"activate",16:"deactivate",18:"title",20:"loop",21:"end",22:"opt",23:"alt",24:"else",25:"note",27:"over",30:",",31:"left_of",32:"right_of",34:"+",35:"-",36:"ACTOR",37:"SOLID_OPEN_ARROW",38:"DOTTED_OPEN_ARROW",39:"SOLID_ARROW",40:"DOTTED_ARROW",41:"SOLID_CROSS",42:"DOTTED_CROSS",43:"TXT"}, -productions_: [0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,5],[9,3],[9,2],[9,3],[9,3],[9,2],[9,3],[9,4],[9,4],[9,7],[17,4],[17,4],[29,2],[29,1],[28,3],[28,1],[26,1],[26,1],[14,5],[14,5],[14,4],[11,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[19,1]], -performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { + var parser = (function () { + var o = function (k, v, o, l) { for (o = o || {}, l = k.length; l--; o[k[l]] = v);return o }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 12], $V7 = [1, 14], $V8 = [1, 15], $V9 = [1, 17], $Va = [1, 18], $Vb = [1, 19], $Vc = [1, 20], $Vd = [1, 22], $Ve = [1, 23], $Vf = [1, 4, 5, 10, 15, 16, 18, 20, 21, 22, 23, 24, 25, 36], $Vg = [1, 31], $Vh = [4, 5, 10, 15, 16, 18, 20, 21, 22, 23, 25, 36], $Vi = [34, 35, 36] + var parser = {trace: function trace () { }, + yy: {}, + symbols_: {'error': 2, 'start': 3, 'SPACE': 4, 'NL': 5, 'SD': 6, 'document': 7, 'line': 8, 'statement': 9, 'participant': 10, 'actor': 11, 'AS': 12, 'restOfLine': 13, 'signal': 14, 'activate': 15, 'deactivate': 16, 'note_statement': 17, 'title': 18, 'text2': 19, 'loop': 20, 'end': 21, 'opt': 22, 'alt': 23, 'else': 24, 'note': 25, 'placement': 26, 'over': 27, 'actor_pair': 28, 'spaceList': 29, ',': 30, 'left_of': 31, 'right_of': 32, 'signaltype': 33, '+': 34, '-': 35, 'ACTOR': 36, 'SOLID_OPEN_ARROW': 37, 'DOTTED_OPEN_ARROW': 38, 'SOLID_ARROW': 39, 'DOTTED_ARROW': 40, 'SOLID_CROSS': 41, 'DOTTED_CROSS': 42, 'TXT': 43, '$accept': 0, '$end': 1}, + terminals_: {2: 'error', 4: 'SPACE', 5: 'NL', 6: 'SD', 10: 'participant', 12: 'AS', 13: 'restOfLine', 15: 'activate', 16: 'deactivate', 18: 'title', 20: 'loop', 21: 'end', 22: 'opt', 23: 'alt', 24: 'else', 25: 'note', 27: 'over', 30: ',', 31: 'left_of', 32: 'right_of', 34: '+', 35: '-', 36: 'ACTOR', 37: 'SOLID_OPEN_ARROW', 38: 'DOTTED_OPEN_ARROW', 39: 'SOLID_ARROW', 40: 'DOTTED_ARROW', 41: 'SOLID_CROSS', 42: 'DOTTED_CROSS', 43: 'TXT'}, + productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 5], [9, 3], [9, 2], [9, 3], [9, 3], [9, 2], [9, 3], [9, 4], [9, 4], [9, 7], [17, 4], [17, 4], [29, 2], [29, 1], [28, 3], [28, 1], [26, 1], [26, 1], [14, 5], [14, 5], [14, 4], [11, 1], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1], [19, 1]], + performAction: function anonymous (yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ -var $0 = $$.length - 1; -switch (yystate) { -case 3: - yy.apply($$[$0]);return $$[$0]; -break; -case 4: - this.$ = [] -break; -case 5: -$$[$0-1].push($$[$0]);this.$ = $$[$0-1] -break; -case 6: case 7: - this.$ = $$[$0] -break; -case 8: - this.$=[]; -break; -case 9: -$$[$0-3].description=$$[$0-1]; this.$=$$[$0-3]; -break; -case 10: -this.$=$$[$0-1]; -break; -case 12: -this.$={type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1]}; -break; -case 13: -this.$={type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-1]}; -break; -case 15: -this.$=[{type:'setTitle', text:$$[$0-1]}] -break; -case 16: - - $$[$0-1].unshift({type: 'loopStart', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_START}); - $$[$0-1].push({type: 'loopEnd', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_END}); - this.$=$$[$0-1]; -break; -case 17: - - $$[$0-1].unshift({type: 'optStart', optText:$$[$0-2], signalType: yy.LINETYPE.OPT_START}); - $$[$0-1].push({type: 'optEnd', optText:$$[$0-2], signalType: yy.LINETYPE.OPT_END}); - this.$=$$[$0-1]; -break; -case 18: + var $0 = $$.length - 1 + switch (yystate) { + case 3: + yy.apply($$[$0]); return $$[$0] + break + case 4: + this.$ = [] + break + case 5: + $$[$0 - 1].push($$[$0]); this.$ = $$[$0 - 1] + break + case 6: case 7: + this.$ = $$[$0] + break + case 8: + this.$ = [] + break + case 9: + $$[$0 - 3].description = $$[$0 - 1]; this.$ = $$[$0 - 3] + break + case 10: + this.$ = $$[$0 - 1] + break + case 12: + this.$ = {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1]} + break + case 13: + this.$ = {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1]} + break + case 15: + this.$ = [{type: 'setTitle', text: $$[$0 - 1]}] + break + case 16: + + $$[$0 - 1].unshift({type: 'loopStart', loopText: $$[$0 - 2], signalType: yy.LINETYPE.LOOP_START}) + $$[$0 - 1].push({type: 'loopEnd', loopText: $$[$0 - 2], signalType: yy.LINETYPE.LOOP_END}) + this.$ = $$[$0 - 1] + break + case 17: + + $$[$0 - 1].unshift({type: 'optStart', optText: $$[$0 - 2], signalType: yy.LINETYPE.OPT_START}) + $$[$0 - 1].push({type: 'optEnd', optText: $$[$0 - 2], signalType: yy.LINETYPE.OPT_END}) + this.$ = $$[$0 - 1] + break + case 18: // Alt start - $$[$0-4].unshift({type: 'altStart', altText:$$[$0-5], signalType: yy.LINETYPE.ALT_START}); + $$[$0 - 4].unshift({type: 'altStart', altText: $$[$0 - 5], signalType: yy.LINETYPE.ALT_START}) // Content in alt is already in $$[$0-4] // Else - $$[$0-4].push({type: 'else', altText:$$[$0-2], signalType: yy.LINETYPE.ALT_ELSE}); + $$[$0 - 4].push({type: 'else', altText: $$[$0 - 2], signalType: yy.LINETYPE.ALT_ELSE}) // Content in other alt - $$[$0-4] = $$[$0-4].concat($$[$0-1]); + $$[$0 - 4] = $$[$0 - 4].concat($$[$0 - 1]) // End - $$[$0-4].push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END}); + $$[$0 - 4].push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END}) - this.$=$$[$0-4]; -break; -case 19: + this.$ = $$[$0 - 4] + break + case 19: - this.$ = [$$[$0-1], {type:'addNote', placement:$$[$0-2], actor:$$[$0-1].actor, text:$$[$0]}]; -break; -case 20: + this.$ = [$$[$0 - 1], {type: 'addNote', placement: $$[$0 - 2], actor: $$[$0 - 1].actor, text: $$[$0]}] + break + case 20: // Coerce actor_pair into a [to, from, ...] array - $$[$0-2] = [].concat($$[$0-1], $$[$0-1]).slice(0, 2); - $$[$0-2][0] = $$[$0-2][0].actor; - $$[$0-2][1] = $$[$0-2][1].actor; - this.$ = [$$[$0-1], {type:'addNote', placement:yy.PLACEMENT.OVER, actor:$$[$0-2].slice(0, 2), text:$$[$0]}]; -break; -case 23: - this.$ = [$$[$0-2], $$[$0]]; -break; -case 24: - this.$ = $$[$0]; -break; -case 25: - this.$ = yy.PLACEMENT.LEFTOF; -break; -case 26: - this.$ = yy.PLACEMENT.RIGHTOF; -break; -case 27: - this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]}, - {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1]} + $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2) + $$[$0 - 2][0] = $$[$0 - 2][0].actor + $$[$0 - 2][1] = $$[$0 - 2][1].actor + this.$ = [$$[$0 - 1], {type: 'addNote', placement: yy.PLACEMENT.OVER, actor: $$[$0 - 2].slice(0, 2), text: $$[$0]}] + break + case 23: + this.$ = [$$[$0 - 2], $$[$0]] + break + case 24: + this.$ = $$[$0] + break + case 25: + this.$ = yy.PLACEMENT.LEFTOF + break + case 26: + this.$ = yy.PLACEMENT.RIGHTOF + break + case 27: + this.$ = [$$[$0 - 4], $$[$0 - 1], {type: 'addMessage', from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0]}, + {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1]} ] -break; -case 28: - this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]}, - {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-4]} + break + case 28: + this.$ = [$$[$0 - 4], $$[$0 - 1], {type: 'addMessage', from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0]}, + {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 4]} ] -break; -case 29: - this.$ = [$$[$0-3],$$[$0-1],{type: 'addMessage', from:$$[$0-3].actor, to:$$[$0-1].actor, signalType:$$[$0-2], msg:$$[$0]}] -break; -case 30: -this.$={type: 'addActor', actor:$$[$0]} -break; -case 31: - this.$ = yy.LINETYPE.SOLID_OPEN; -break; -case 32: - this.$ = yy.LINETYPE.DOTTED_OPEN; -break; -case 33: - this.$ = yy.LINETYPE.SOLID; -break; -case 34: - this.$ = yy.LINETYPE.DOTTED; -break; -case 35: - this.$ = yy.LINETYPE.SOLID_CROSS; -break; -case 36: - this.$ = yy.LINETYPE.DOTTED_CROSS; -break; -case 37: -this.$ = $$[$0].substring(1).trim().replace(/\\n/gm, "\n"); -break; -} -}, -table: [{3:1,4:$V0,5:$V1,6:$V2},{1:[3]},{3:5,4:$V0,5:$V1,6:$V2},{3:6,4:$V0,5:$V1,6:$V2},o([1,4,5,10,15,16,18,20,22,23,25,36],$V3,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:$V4,5:$V5,8:8,9:10,10:$V6,11:21,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,22:$Vb,23:$Vc,25:$Vd,36:$Ve},o($Vf,[2,5]),{9:24,10:$V6,11:21,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,22:$Vb,23:$Vc,25:$Vd,36:$Ve},o($Vf,[2,7]),o($Vf,[2,8]),{11:25,36:$Ve},{5:[1,26]},{11:27,36:$Ve},{11:28,36:$Ve},{5:[1,29]},{19:30,43:$Vg},{13:[1,32]},{13:[1,33]},{13:[1,34]},{33:35,37:[1,36],38:[1,37],39:[1,38],40:[1,39],41:[1,40],42:[1,41]},{26:42,27:[1,43],31:[1,44],32:[1,45]},o([5,12,30,37,38,39,40,41,42,43],[2,30]),o($Vf,[2,6]),{5:[1,47],12:[1,46]},o($Vf,[2,11]),{5:[1,48]},{5:[1,49]},o($Vf,[2,14]),{5:[1,50]},{5:[2,37]},o($Vh,$V3,{7:51}),o($Vh,$V3,{7:52}),o([4,5,10,15,16,18,20,22,23,24,25,36],$V3,{7:53}),{11:56,34:[1,54],35:[1,55],36:$Ve},o($Vi,[2,31]),o($Vi,[2,32]),o($Vi,[2,33]),o($Vi,[2,34]),o($Vi,[2,35]),o($Vi,[2,36]),{11:57,36:$Ve},{11:59,28:58,36:$Ve},{36:[2,25]},{36:[2,26]},{13:[1,60]},o($Vf,[2,10]),o($Vf,[2,12]),o($Vf,[2,13]),o($Vf,[2,15]),{4:$V4,5:$V5,8:8,9:10,10:$V6,11:21,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[1,61],22:$Vb,23:$Vc,25:$Vd,36:$Ve},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:21,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[1,62],22:$Vb,23:$Vc,25:$Vd,36:$Ve},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:21,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,22:$Vb,23:$Vc,24:[1,63],25:$Vd,36:$Ve},{11:64,36:$Ve},{11:65,36:$Ve},{19:66,43:$Vg},{19:67,43:$Vg},{19:68,43:$Vg},{30:[1,69],43:[2,24]},{5:[1,70]},o($Vf,[2,16]),o($Vf,[2,17]),{13:[1,71]},{19:72,43:$Vg},{19:73,43:$Vg},{5:[2,29]},{5:[2,19]},{5:[2,20]},{11:74,36:$Ve},o($Vf,[2,9]),o($Vh,$V3,{7:75}),{5:[2,27]},{5:[2,28]},{43:[2,23]},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:21,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[1,76],22:$Vb,23:$Vc,25:$Vd,36:$Ve},o($Vf,[2,18])], -defaultActions: {5:[2,1],6:[2,2],31:[2,37],44:[2,25],45:[2,26],66:[2,29],67:[2,19],68:[2,20],72:[2,27],73:[2,28],74:[2,23]}, -parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - function _parseError (msg, hash) { - this.message = msg; - this.hash = hash; - } - _parseError.prototype = Error; - - throw new _parseError(str, hash); - } -}, -parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - _token_stack: + break + case 29: + this.$ = [$$[$0 - 3], $$[$0 - 1], {type: 'addMessage', from: $$[$0 - 3].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0]}] + break + case 30: + this.$ = {type: 'addActor', actor: $$[$0]} + break + case 31: + this.$ = yy.LINETYPE.SOLID_OPEN + break + case 32: + this.$ = yy.LINETYPE.DOTTED_OPEN + break + case 33: + this.$ = yy.LINETYPE.SOLID + break + case 34: + this.$ = yy.LINETYPE.DOTTED + break + case 35: + this.$ = yy.LINETYPE.SOLID_CROSS + break + case 36: + this.$ = yy.LINETYPE.DOTTED_CROSS + break + case 37: + this.$ = $$[$0].substring(1).trim().replace(/\\n/gm, '\n') + break + } + }, + table: [{3: 1, 4: $V0, 5: $V1, 6: $V2}, {1: [3]}, {3: 5, 4: $V0, 5: $V1, 6: $V2}, {3: 6, 4: $V0, 5: $V1, 6: $V2}, o([1, 4, 5, 10, 15, 16, 18, 20, 22, 23, 25, 36], $V3, {7: 7}), {1: [2, 1]}, {1: [2, 2]}, {1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 11: 21, 14: 13, 15: $V7, 16: $V8, 17: 16, 18: $V9, 20: $Va, 22: $Vb, 23: $Vc, 25: $Vd, 36: $Ve}, o($Vf, [2, 5]), {9: 24, 10: $V6, 11: 21, 14: 13, 15: $V7, 16: $V8, 17: 16, 18: $V9, 20: $Va, 22: $Vb, 23: $Vc, 25: $Vd, 36: $Ve}, o($Vf, [2, 7]), o($Vf, [2, 8]), {11: 25, 36: $Ve}, {5: [1, 26]}, {11: 27, 36: $Ve}, {11: 28, 36: $Ve}, {5: [1, 29]}, {19: 30, 43: $Vg}, {13: [1, 32]}, {13: [1, 33]}, {13: [1, 34]}, {33: 35, 37: [1, 36], 38: [1, 37], 39: [1, 38], 40: [1, 39], 41: [1, 40], 42: [1, 41]}, {26: 42, 27: [1, 43], 31: [1, 44], 32: [1, 45]}, o([5, 12, 30, 37, 38, 39, 40, 41, 42, 43], [2, 30]), o($Vf, [2, 6]), {5: [1, 47], 12: [1, 46]}, o($Vf, [2, 11]), {5: [1, 48]}, {5: [1, 49]}, o($Vf, [2, 14]), {5: [1, 50]}, {5: [2, 37]}, o($Vh, $V3, {7: 51}), o($Vh, $V3, {7: 52}), o([4, 5, 10, 15, 16, 18, 20, 22, 23, 24, 25, 36], $V3, {7: 53}), {11: 56, 34: [1, 54], 35: [1, 55], 36: $Ve}, o($Vi, [2, 31]), o($Vi, [2, 32]), o($Vi, [2, 33]), o($Vi, [2, 34]), o($Vi, [2, 35]), o($Vi, [2, 36]), {11: 57, 36: $Ve}, {11: 59, 28: 58, 36: $Ve}, {36: [2, 25]}, {36: [2, 26]}, {13: [1, 60]}, o($Vf, [2, 10]), o($Vf, [2, 12]), o($Vf, [2, 13]), o($Vf, [2, 15]), {4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 11: 21, 14: 13, 15: $V7, 16: $V8, 17: 16, 18: $V9, 20: $Va, 21: [1, 61], 22: $Vb, 23: $Vc, 25: $Vd, 36: $Ve}, {4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 11: 21, 14: 13, 15: $V7, 16: $V8, 17: 16, 18: $V9, 20: $Va, 21: [1, 62], 22: $Vb, 23: $Vc, 25: $Vd, 36: $Ve}, {4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 11: 21, 14: 13, 15: $V7, 16: $V8, 17: 16, 18: $V9, 20: $Va, 22: $Vb, 23: $Vc, 24: [1, 63], 25: $Vd, 36: $Ve}, {11: 64, 36: $Ve}, {11: 65, 36: $Ve}, {19: 66, 43: $Vg}, {19: 67, 43: $Vg}, {19: 68, 43: $Vg}, {30: [1, 69], 43: [2, 24]}, {5: [1, 70]}, o($Vf, [2, 16]), o($Vf, [2, 17]), {13: [1, 71]}, {19: 72, 43: $Vg}, {19: 73, 43: $Vg}, {5: [2, 29]}, {5: [2, 19]}, {5: [2, 20]}, {11: 74, 36: $Ve}, o($Vf, [2, 9]), o($Vh, $V3, {7: 75}), {5: [2, 27]}, {5: [2, 28]}, {43: [2, 23]}, {4: $V4, 5: $V5, 8: 8, 9: 10, 10: $V6, 11: 21, 14: 13, 15: $V7, 16: $V8, 17: 16, 18: $V9, 20: $Va, 21: [1, 76], 22: $Vb, 23: $Vc, 25: $Vd, 36: $Ve}, o($Vf, [2, 18])], + defaultActions: {5: [2, 1], 6: [2, 2], 31: [2, 37], 44: [2, 25], 45: [2, 26], 66: [2, 29], 67: [2, 19], 68: [2, 20], 72: [2, 27], 73: [2, 28], 74: [2, 23]}, + parseError: function parseError (str, hash) { + if (hash.recoverable) { + this.trace(str) + } else { + function _parseError (msg, hash) { + this.message = msg + this.hash = hash + } + _parseError.prototype = Error + + throw new _parseError(str, hash) + } + }, + parse: function parse (input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1 + var args = lstack.slice.call(arguments, 1) + var lexer = Object.create(this.lexer) + var sharedState = { yy: {} } + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k] + } + } + lexer.setInput(input, sharedState.yy) + sharedState.yy.lexer = lexer + sharedState.yy.parser = this + if (typeof lexer.yylloc === 'undefined') { + lexer.yylloc = {} + } + var yyloc = lexer.yylloc + lstack.push(yyloc) + var ranges = lexer.options && lexer.options.ranges + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError + } else { + this.parseError = Object.getPrototypeOf(this).parseError + } + function popStack (n) { + stack.length = stack.length - 2 * n + vstack.length = vstack.length - n + lstack.length = lstack.length - n + } + _token_stack: var lex = function () { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - }; - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; + var token + token = lexer.lex() || EOF + if (typeof token !== 'number') { + token = self.symbols_[token] || token + } + return token } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } - } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected + while (true) { + state = stack[stack.length - 1] + if (this.defaultActions[state]) { + action = this.defaultActions[state] } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + if (symbol === null || typeof symbol === 'undefined') { + symbol = lex() + } + action = table[state] && table[state][symbol] } - this.parseError(errStr, { + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = '' + expected = [] + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\'') + } + } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'' + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'') + } + this.parseError(errStr, { text: lexer.match, token: this.terminals_[symbol] || symbol, line: lexer.yylineno, loc: yyloc, expected: expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - if (recovering > 0) { - recovering--; + }) } - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -}}; + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol) + } + switch (action[0]) { + case 1: + stack.push(symbol) + vstack.push(lexer.yytext) + lstack.push(lexer.yylloc) + stack.push(action[1]) + symbol = null + if (!preErrorSymbol) { + yyleng = lexer.yyleng + yytext = lexer.yytext + yylineno = lexer.yylineno + yyloc = lexer.yylloc + if (recovering > 0) { + recovering-- + } + } else { + symbol = preErrorSymbol + preErrorSymbol = null + } + break + case 2: + len = this.productions_[action[1]][1] + yyval.$ = vstack[vstack.length - len] + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + } + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ] + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)) + if (typeof r !== 'undefined') { + return r + } + if (len) { + stack = stack.slice(0, -1 * len * 2) + vstack = vstack.slice(0, -1 * len) + lstack = lstack.slice(0, -1 * len) + } + stack.push(this.productions_[action[1]][0]) + vstack.push(yyval.$) + lstack.push(yyval._$) + newState = table[stack[stack.length - 2]][stack[stack.length - 1]] + stack.push(newState) + break + case 3: + return true + } + } + return true + }} /* generated by jison-lex 0.3.4 */ -var lexer = (function(){ -var lexer = ({ + var lexer = (function () { + var lexer = ({ -EOF:1, + EOF: 1, -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, + parseError: function parseError (str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash) + } else { + throw new Error(str) + } + }, // resets the lexer, sets new input -setInput:function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0,0]; - } - this.offset = 0; - return this; - }, + setInput: function (input, yy) { + this.yy = yy || this.yy || {} + this._input = input + this._more = this._backtrack = this.done = false + this.yylineno = this.yyleng = 0 + this.yytext = this.matched = this.match = '' + this.conditionStack = ['INITIAL'] + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + } + if (this.options.ranges) { + this.yylloc.range = [0, 0] + } + this.offset = 0 + return this + }, // consumes and returns one char from the input -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } + input: function () { + var ch = this._input[0] + this.yytext += ch + this.yyleng++ + this.offset++ + this.match += ch + this.matched += ch + var lines = ch.match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno++ + this.yylloc.last_line++ + } else { + this.yylloc.last_column++ + } + if (this.options.ranges) { + this.yylloc.range[1]++ + } - this._input = this._input.slice(1); - return ch; - }, + this._input = this._input.slice(1) + return ch + }, // unshifts one char (or a string) into the input -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) - + oldLines[oldLines.length - lines.length].length - lines[0].length : - this.yylloc.first_column - len - }; + unput: function (ch) { + var len = ch.length + var lines = ch.split(/(?:\r\n?|\n)/g) + + this._input = ch + this._input + this.yytext = this.yytext.substr(0, this.yytext.length - len) + // this.yyleng -= len; + this.offset -= len + var oldLines = this.match.split(/(?:\r\n?|\n)/g) + this.match = this.match.substr(0, this.match.length - 1) + this.matched = this.matched.substr(0, this.matched.length - 1) + + if (lines.length - 1) { + this.yylineno -= lines.length - 1 + } + var r = this.yylloc.range + + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines + ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + + oldLines[oldLines.length - lines.length].length - lines[0].length + : this.yylloc.first_column - len + } - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len] + } + this.yyleng = this.yytext.length + return this + }, // When called from action, caches matched text and appends it on next action -more:function () { - this._more = true; - return this; - }, + more: function () { + this._more = true + return this + }, // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. -reject:function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - - } - return this; - }, + reject: function () { + if (this.options.backtrack_lexer) { + this._backtrack = true + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + return this + }, // retain first n characters of the match -less:function (n) { - this.unput(this.match.slice(n)); - }, + less: function (n) { + this.unput(this.match.slice(n)) + }, // displays already matched input, i.e. for error messages -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, + pastInput: function () { + var past = this.matched.substr(0, this.matched.length - this.match.length) + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, '') + }, // displays upcoming input, i.e. for error messages -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, + upcomingInput: function () { + var next = this.match + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length) + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, '') + }, // displays the character position where the lexing error occurred, i.e. for error messages -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, + showPosition: function () { + var pre = this.pastInput() + var c = new Array(pre.length + 1).join('-') + return pre + this.upcomingInput() + '\n' + c + '^' + }, // test the lexed token: return FALSE when not a match, otherwise return token -test_match:function (match, indexed_rule) { - var token, - lines, - backup; + test_match: function (match, indexed_rule) { + var token, + lines, + backup - if (this.options.backtrack_lexer) { + if (this.options.backtrack_lexer) { // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? - lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : - this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + } + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0) + } + } + + lines = match[0].match(/(?:\r\n?|\n).*/g) + if (lines) { + this.yylineno += lines.length + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines + ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length + : this.yylloc.last_column + match[0].length + } + this.yytext += match[0] + this.match += match[0] + this.matches = match + this.yyleng = this.yytext.length + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng] + } + this._more = false + this._backtrack = false + this._input = this._input.slice(match[0].length) + this.matched += match[0] + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]) + if (this.done && this._input) { + this.done = false + } + if (token) { + return token + } else if (this._backtrack) { // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, + for (var k in backup) { + this[k] = backup[k] + } + return false // rule action called reject() implying the next rule should be tested instead. + } + return false + }, // return next match in input -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - - var token, - match, - tempMatch, - index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } else { + next: function () { + if (this.done) { + return this.EOF + } + if (!this._input) { + this.done = true + } + + var token, + match, + tempMatch, + index + if (!this._more) { + this.yytext = '' + this.match = '' + } + var rules = this._currentRules() + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]) + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch + index = i + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]) + if (token !== false) { + return token + } else if (this._backtrack) { + match = false + continue // rule action called reject() implying a rule MISmatch. + } else { // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; + return false + } + } else if (!this.options.flex) { + break } - } else if (!this.options.flex) { - break; + } } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } + if (match) { + token = this.test_match(match, rules[index]) + if (token !== false) { + return token + } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, + return false + } + if (this._input === '') { + return this.EOF + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno + }) + } + }, // return next match that has a token -lex:function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, + lex: function lex () { + var r = this.next() + if (r) { + return r + } else { + return this.lex() + } + }, // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) -begin:function begin(condition) { - this.conditionStack.push(condition); - }, + begin: function begin (condition) { + this.conditionStack.push(condition) + }, // pop the previously active lexer condition state off the condition stack -popState:function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, + popState: function popState () { + var n = this.conditionStack.length - 1 + if (n > 0) { + return this.conditionStack.pop() + } else { + return this.conditionStack[0] + } + }, // produce the lexer rule set which is active for the currently active lexer condition state -_currentRules:function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, + _currentRules: function _currentRules () { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules + } else { + return this.conditions['INITIAL'].rules + } + }, // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available -topState:function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, + topState: function topState (n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0) + if (n >= 0) { + return this.conditionStack[n] + } else { + return 'INITIAL' + } + }, // alias for begin(condition) -pushState:function pushState(condition) { - this.begin(condition); - }, + pushState: function pushState (condition) { + this.begin(condition) + }, // return the number of states currently on the stack -stateStackSize:function stateStackSize() { - return this.conditionStack.length; - }, -options: {"case-insensitive":true}, -performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { -var YYSTATE=YY_START; -switch($avoiding_name_collisions) { -case 0:return 5; -break; -case 1:/* skip all whitespace */ -break; -case 2:/* skip same-line whitespace */ -break; -case 3:/* skip comments */ -break; -case 4:/* skip comments */ -break; -case 5: this.begin('ID'); return 10; -break; -case 6: this.begin('ALIAS'); return 36; -break; -case 7: this.popState(); this.popState(); this.begin('LINE'); return 12; -break; -case 8: this.popState(); this.popState(); return 5; -break; -case 9: this.begin('LINE'); return 20; -break; -case 10: this.begin('LINE'); return 22; -break; -case 11: this.begin('LINE'); return 23; -break; -case 12: this.begin('LINE'); return 24; -break; -case 13: this.popState(); return 13; -break; -case 14:return 21; -break; -case 15:return 31; -break; -case 16:return 32; -break; -case 17:return 27; -break; -case 18:return 25; -break; -case 19: this.begin('ID'); return 15; -break; -case 20: this.begin('ID'); return 16; -break; -case 21:return 18; -break; -case 22:return 6; -break; -case 23:return 30; -break; -case 24:return 5; -break; -case 25: yy_.yytext = yy_.yytext.trim(); return 36; -break; -case 26:return 39; -break; -case 27:return 40; -break; -case 28:return 37; -break; -case 29:return 38; -break; -case 30:return 41; -break; -case 31:return 42; -break; -case 32:return 43; -break; -case 33:return 34; -break; -case 34:return 35; -break; -case 35:return 5; -break; -case 36:return 'INVALID'; -break; -} -}, -rules: [/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i], -conditions: {"LINE":{"rules":[2,3,13],"inclusive":false},"ALIAS":{"rules":[2,3,7,8],"inclusive":false},"ID":{"rules":[2,3,6],"inclusive":false},"INITIAL":{"rules":[0,1,3,4,5,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"inclusive":true}} -}); -return lexer; -})(); -parser.lexer = lexer; -function Parser () { - this.yy = {}; -} -Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})(); - - -if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; -exports.main = function commonjsMain(args) { - if (!args[1]) { - console.log('Usage: '+args[0]+' FILE'); - process.exit(1); - } - var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), "utf8"); - return exports.parser.parse(source); -}; -if (typeof module !== 'undefined' && _dereq_.main === module) { - exports.main(process.argv.slice(1)); -} -} -}).call(this,_dereq_("1YiZ5S")) -},{"1YiZ5S":104,"fs":102,"path":103}],128:[function(_dereq_,module,exports){ -(function (global){ + stateStackSize: function stateStackSize () { + return this.conditionStack.length + }, + options: {'case-insensitive': true}, + performAction: function anonymous (yy, yy_, $avoiding_name_collisions, YY_START) { + var YYSTATE = YY_START + switch ($avoiding_name_collisions) { + case 0:return 5 + break + case 1:/* skip all whitespace */ + break + case 2:/* skip same-line whitespace */ + break + case 3:/* skip comments */ + break + case 4:/* skip comments */ + break + case 5: this.begin('ID'); return 10 + break + case 6: this.begin('ALIAS'); return 36 + break + case 7: this.popState(); this.popState(); this.begin('LINE'); return 12 + break + case 8: this.popState(); this.popState(); return 5 + break + case 9: this.begin('LINE'); return 20 + break + case 10: this.begin('LINE'); return 22 + break + case 11: this.begin('LINE'); return 23 + break + case 12: this.begin('LINE'); return 24 + break + case 13: this.popState(); return 13 + break + case 14:return 21 + break + case 15:return 31 + break + case 16:return 32 + break + case 17:return 27 + break + case 18:return 25 + break + case 19: this.begin('ID'); return 15 + break + case 20: this.begin('ID'); return 16 + break + case 21:return 18 + break + case 22:return 6 + break + case 23:return 30 + break + case 24:return 5 + break + case 25: yy_.yytext = yy_.yytext.trim(); return 36 + break + case 26:return 39 + break + case 27:return 40 + break + case 28:return 37 + break + case 29:return 38 + break + case 30:return 41 + break + case 31:return 42 + break + case 32:return 43 + break + case 33:return 34 + break + case 34:return 35 + break + case 35:return 5 + break + case 36:return 'INVALID' + break + } + }, + rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:participant\b)/i, /^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i, /^(?:as\b)/i, /^(?:(?:))/i, /^(?:loop\b)/i, /^(?:opt\b)/i, /^(?:alt\b)/i, /^(?:else\b)/i, /^(?:[^#\n;]*)/i, /^(?:end\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:activate\b)/i, /^(?:deactivate\b)/i, /^(?:title\b)/i, /^(?:sequenceDiagram\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^\+\->:\n,;]+)/i, /^(?:->>)/i, /^(?:-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?::[^#\n;]+)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i], + conditions: {'LINE': {'rules': [2, 3, 13], 'inclusive': false}, 'ALIAS': {'rules': [2, 3, 7, 8], 'inclusive': false}, 'ID': {'rules': [2, 3, 6], 'inclusive': false}, 'INITIAL': {'rules': [0, 1, 3, 4, 5, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36], 'inclusive': true}} + }) + return lexer + })() + parser.lexer = lexer + function Parser () { + this.yy = {} + } + Parser.prototype = parser; parser.Parser = Parser + return new Parser() + })() + + if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') { + exports.parser = parser + exports.Parser = parser.Parser + exports.parse = function () { return parser.parse.apply(parser, arguments) } + exports.main = function commonjsMain (args) { + if (!args[1]) { + console.log('Usage: ' + args[0] + ' FILE') + process.exit(1) + } + var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), 'utf8') + return exports.parser.parse(source) + } + if (typeof module !== 'undefined' && _dereq_.main === module) { + exports.main(process.argv.slice(1)) + } + } + }).call(this, _dereq_('1YiZ5S')) + }, {'1YiZ5S': 104, 'fs': 102, 'path': 103}], + 128: [function (_dereq_, module, exports) { + (function (global) { /** * Created by knut on 14-11-19. */ -var actors = {}; -var messages = []; -var notes = []; -var title = ''; -var Logger = _dereq_('../../logger'); -var log = new Logger.Log(); - - - -exports.addActor = function(id,name,description){ + var actors = {} + var messages = [] + var notes = [] + var title = '' + var Logger = _dereq_('../../logger') + var log = new Logger.Log() + + exports.addActor = function (id, name, description) { // Don't allow description nulling - var old = actors[id]; - if ( old && name === old.name && description == null ) return; + var old = actors[id] + if (old && name === old.name && description == null) return // Don't allow null descriptions, either - if ( description == null ) description = name; + if (description == null) description = name - actors[id] = {name:name, description:description}; -}; + actors[id] = {name: name, description: description} + } -exports.addMessage = function(idFrom, idTo, message, answer){ - messages.push({from:idFrom, to:idTo, message:message, answer:answer}); -}; + exports.addMessage = function (idFrom, idTo, message, answer) { + messages.push({from: idFrom, to: idTo, message: message, answer: answer}) + } /** * */ -exports.addSignal = function(idFrom, idTo, message, messageType){ - log.debug('Adding message from='+idFrom+' to='+idTo+' message='+message+' type='+messageType); - messages.push({from:idFrom, to:idTo, message:message, type:messageType}); -}; - -exports.getMessages = function(){ - return messages; -}; - -exports.getActors = function(){ - return actors; -}; -exports.getActor = function(id){ - return actors[id]; -}; -exports.getActorKeys = function(){ - return Object.keys(actors); -}; -exports.getTitle = function() { - return title; -} - -exports.clear = function(){ - actors = {}; - messages = []; -}; - -exports.LINETYPE = { - SOLID : 0 , - DOTTED : 1 , - NOTE : 2 , - SOLID_CROSS : 3 , - DOTTED_CROSS : 4 , - SOLID_OPEN : 5 , - DOTTED_OPEN : 6 , - LOOP_START : 10 , - LOOP_END : 11 , - ALT_START : 12 , - ALT_ELSE : 13 , - ALT_END : 14 , - OPT_START : 15 , - OPT_END : 16 , - ACTIVE_START : 17 , - ACTIVE_END : 18 -}; - -exports.ARROWTYPE = { - FILLED : 0, - OPEN : 1 -}; - -exports.PLACEMENT = { - LEFTOF : 0, - RIGHTOF : 1, - OVER : 2 -}; - -exports.addNote = function (actor, placement, message){ - var note = {actor:actor, placement: placement, message:message}; + exports.addSignal = function (idFrom, idTo, message, messageType) { + log.debug('Adding message from=' + idFrom + ' to=' + idTo + ' message=' + message + ' type=' + messageType) + messages.push({from: idFrom, to: idTo, message: message, type: messageType}) + } - // Coerce actor into a [to, from, ...] array - var actors = [].concat(actor, actor); + exports.getMessages = function () { + return messages + } - notes.push(note); - messages.push({from:actors[0], to:actors[1], message:message, type:exports.LINETYPE.NOTE, placement: placement}); -}; + exports.getActors = function () { + return actors + } + exports.getActor = function (id) { + return actors[id] + } + exports.getActorKeys = function () { + return Object.keys(actors) + } + exports.getTitle = function () { + return title + } -exports.setTitle = function(titleText){ - title = titleText; -} + exports.clear = function () { + actors = {} + messages = [] + } + exports.LINETYPE = { + SOLID: 0, + DOTTED: 1, + NOTE: 2, + SOLID_CROSS: 3, + DOTTED_CROSS: 4, + SOLID_OPEN: 5, + DOTTED_OPEN: 6, + LOOP_START: 10, + LOOP_END: 11, + ALT_START: 12, + ALT_ELSE: 13, + ALT_END: 14, + OPT_START: 15, + OPT_END: 16, + ACTIVE_START: 17, + ACTIVE_END: 18 + } -exports.parseError = function(err,hash){ - global.mermaidAPI.parseError(err,hash); -}; + exports.ARROWTYPE = { + FILLED: 0, + OPEN: 1 + } -exports.apply = function(param){ - if(param instanceof Array ){ - param.forEach(function(item){ - exports.apply(item); - }); - } else { - // console.info(param); - switch(param.type){ - case 'addActor': - exports.addActor(param.actor, param.actor, param.description); - break; - case 'activeStart': - exports.addSignal(param.actor, undefined, undefined, param.signalType); - break; - case 'activeEnd': - exports.addSignal(param.actor, undefined, undefined, param.signalType); - break; - case 'addNote': - exports.addNote(param.actor,param.placement, param.text); - break; - case 'addMessage': - exports.addSignal(param.from, param.to, param.msg, param.signalType); - break; - case 'loopStart': - //log.debug('Loop text: ',param.loopText); - exports.addSignal(undefined, undefined, param.loopText, param.signalType); - //yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START); - break; - case 'loopEnd': - exports.addSignal(undefined, undefined, undefined, param.signalType); - break; - case 'optStart': - //log.debug('Loop text: ',param.loopText); - exports.addSignal(undefined, undefined, param.optText, param.signalType); - //yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START); - break; - case 'optEnd': - exports.addSignal(undefined, undefined, undefined, param.signalType); - break; - case 'altStart': - //log.debug('Loop text: ',param.loopText); - exports.addSignal(undefined, undefined, param.altText, param.signalType); - //yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START); - break; - case 'else': - exports.addSignal(undefined, undefined, param.altText, param.signalType); - break; - case 'altEnd': - exports.addSignal(undefined, undefined, undefined, param.signalType); - break; - case 'setTitle': - exports.setTitle(param.text); + exports.PLACEMENT = { + LEFTOF: 0, + RIGHTOF: 1, + OVER: 2 } - } -}; -}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../logger":132}],129:[function(_dereq_,module,exports){ + exports.addNote = function (actor, placement, message) { + var note = {actor: actor, placement: placement, message: message} + + // Coerce actor into a [to, from, ...] array + var actors = [].concat(actor, actor) + + notes.push(note) + messages.push({from: actors[0], to: actors[1], message: message, type: exports.LINETYPE.NOTE, placement: placement}) + } + + exports.setTitle = function (titleText) { + title = titleText + } + + exports.parseError = function (err, hash) { + global.mermaidAPI.parseError(err, hash) + } + + exports.apply = function (param) { + if (param instanceof Array) { + param.forEach(function (item) { + exports.apply(item) + }) + } else { + // console.info(param); + switch (param.type) { + case 'addActor': + exports.addActor(param.actor, param.actor, param.description) + break + case 'activeStart': + exports.addSignal(param.actor, undefined, undefined, param.signalType) + break + case 'activeEnd': + exports.addSignal(param.actor, undefined, undefined, param.signalType) + break + case 'addNote': + exports.addNote(param.actor, param.placement, param.text) + break + case 'addMessage': + exports.addSignal(param.from, param.to, param.msg, param.signalType) + break + case 'loopStart': + // log.debug('Loop text: ',param.loopText); + exports.addSignal(undefined, undefined, param.loopText, param.signalType) + // yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START); + break + case 'loopEnd': + exports.addSignal(undefined, undefined, undefined, param.signalType) + break + case 'optStart': + // log.debug('Loop text: ',param.loopText); + exports.addSignal(undefined, undefined, param.optText, param.signalType) + // yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START); + break + case 'optEnd': + exports.addSignal(undefined, undefined, undefined, param.signalType) + break + case 'altStart': + // log.debug('Loop text: ',param.loopText); + exports.addSignal(undefined, undefined, param.altText, param.signalType) + // yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START); + break + case 'else': + exports.addSignal(undefined, undefined, param.altText, param.signalType) + break + case 'altEnd': + exports.addSignal(undefined, undefined, undefined, param.signalType) + break + case 'setTitle': + exports.setTitle(param.text) + } + } + } + }).call(this, typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}) + }, {'../../logger': 132}], + 129: [function (_dereq_, module, exports) { /** * Created by knut on 14-11-23. */ -var sq = _dereq_('./parser/sequenceDiagram').parser; -sq.yy = _dereq_('./sequenceDb'); -var svgDraw = _dereq_('./svgDraw'); -var d3 = _dereq_('../../d3'); -var Logger = _dereq_('../../logger'); -var log = new Logger.Log(); + var sq = _dereq_('./parser/sequenceDiagram').parser + sq.yy = _dereq_('./sequenceDb') + var svgDraw = _dereq_('./svgDraw') + var d3 = _dereq_('../../d3') + var Logger = _dereq_('../../logger') + var log = new Logger.Log() -var conf = { + var conf = { - diagramMarginX:50, - diagramMarginY:30, + diagramMarginX: 50, + diagramMarginY: 30, // Margin between actors - actorMargin:50, + actorMargin: 50, // Width of actor boxes - width:150, + width: 150, // Height of actor boxes - height:65, + height: 65, // Margin around loop boxes - boxMargin:10, - boxTextMargin:5, - noteMargin:10, + boxMargin: 10, + boxTextMargin: 5, + noteMargin: 10, // Space between messages - messageMargin:35, - //mirror actors under diagram - mirrorActors:false, + messageMargin: 35, + // mirror actors under diagram + mirrorActors: false, // Depending on css styling this might need adjustment // Prolongs the edge of the diagram downwards - bottomMarginAdj:1, + bottomMarginAdj: 1, // width of activation box - activationWidth:10, - - //text placement as: tspan | fo - textPlacement: 'fo', -}; - -exports.bounds = { - data:{ - startx:undefined, - stopx :undefined, - starty:undefined, - stopy :undefined - }, - verticalPos:0, - - sequenceItems: [], - activations: [], - init : function(){ - this.sequenceItems = []; - this.activations = []; - this.data = { - startx:undefined, - stopx :undefined, - starty:undefined, - stopy :undefined - }; - this.verticalPos =0; - }, - updateVal : function (obj,key,val,fun){ - if(typeof obj[key] === 'undefined'){ - obj[key] = val; - }else{ - obj[key] = fun(val,obj[key]); - } - }, - updateBounds:function(startx,starty,stopx,stopy){ - var _self = this; - var cnt = 0; - function updateFn(type) { return function updateItemBounds(item) { - cnt++; - // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems - var n = _self.sequenceItems.length-cnt+1; + activationWidth: 10, - _self.updateVal(item, 'starty',starty - n*conf.boxMargin, Math.min); - _self.updateVal(item, 'stopy' ,stopy + n*conf.boxMargin, Math.max); + // text placement as: tspan | fo + textPlacement: 'fo' + } - _self.updateVal(exports.bounds.data, 'startx', startx - n * conf.boxMargin, Math.min); - _self.updateVal(exports.bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max); + exports.bounds = { + data: { + startx: undefined, + stopx: undefined, + starty: undefined, + stopy: undefined + }, + verticalPos: 0, + + sequenceItems: [], + activations: [], + init: function () { + this.sequenceItems = [] + this.activations = [] + this.data = { + startx: undefined, + stopx: undefined, + starty: undefined, + stopy: undefined + } + this.verticalPos = 0 + }, + updateVal: function (obj, key, val, fun) { + if (typeof obj[key] === 'undefined') { + obj[key] = val + } else { + obj[key] = fun(val, obj[key]) + } + }, + updateBounds: function (startx, starty, stopx, stopy) { + var _self = this + var cnt = 0 + function updateFn (type) { + return function updateItemBounds (item) { + cnt++ + // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems + var n = _self.sequenceItems.length - cnt + 1 - if (!(type == 'activation')) { - _self.updateVal(item, 'startx',startx - n*conf.boxMargin, Math.min); - _self.updateVal(item, 'stopx' ,stopx + n*conf.boxMargin, Math.max); + _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min) + _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max) - _self.updateVal(exports.bounds.data, 'starty', starty - n * conf.boxMargin, Math.min); - _self.updateVal(exports.bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max); - } - }} + _self.updateVal(exports.bounds.data, 'startx', startx - n * conf.boxMargin, Math.min) + _self.updateVal(exports.bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max) - this.sequenceItems.forEach(updateFn()); - this.activations.forEach(updateFn('activation')); - }, - insert:function(startx,starty,stopx,stopy){ + if (!(type == 'activation')) { + _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min) + _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max) - var _startx, _starty, _stopx, _stopy; + _self.updateVal(exports.bounds.data, 'starty', starty - n * conf.boxMargin, Math.min) + _self.updateVal(exports.bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max) + } + } + } - _startx = Math.min(startx,stopx); - _stopx = Math.max(startx,stopx); - _starty = Math.min(starty,stopy); - _stopy = Math.max(starty,stopy); + this.sequenceItems.forEach(updateFn()) + this.activations.forEach(updateFn('activation')) + }, + insert: function (startx, starty, stopx, stopy) { + var _startx, _starty, _stopx, _stopy - this.updateVal(exports.bounds.data,'startx',_startx,Math.min); - this.updateVal(exports.bounds.data,'starty',_starty,Math.min); - this.updateVal(exports.bounds.data,'stopx' ,_stopx ,Math.max); - this.updateVal(exports.bounds.data,'stopy' ,_stopy ,Math.max); + _startx = Math.min(startx, stopx) + _stopx = Math.max(startx, stopx) + _starty = Math.min(starty, stopy) + _stopy = Math.max(starty, stopy) - this.updateBounds(_startx,_starty,_stopx,_stopy); + this.updateVal(exports.bounds.data, 'startx', _startx, Math.min) + this.updateVal(exports.bounds.data, 'starty', _starty, Math.min) + this.updateVal(exports.bounds.data, 'stopx', _stopx, Math.max) + this.updateVal(exports.bounds.data, 'stopy', _stopy, Math.max) - }, - newActivation:function(message, diagram){ - var actorRect = sq.yy.getActors()[message.from.actor]; - var stackedSize = actorActivations(message.from.actor).length; - var x = actorRect.x + conf.width/2 + (stackedSize-1)*conf.activationWidth/2; - this.activations.push({startx:x,starty:this.verticalPos+2,stopx:x+conf.activationWidth,stopy:undefined, + this.updateBounds(_startx, _starty, _stopx, _stopy) + }, + newActivation: function (message, diagram) { + var actorRect = sq.yy.getActors()[message.from.actor] + var stackedSize = actorActivations(message.from.actor).length + var x = actorRect.x + conf.width / 2 + (stackedSize - 1) * conf.activationWidth / 2 + this.activations.push({startx: x, + starty: this.verticalPos + 2, + stopx: x + conf.activationWidth, + stopy: undefined, actor: message.from.actor, anchored: svgDraw.anchorElement(diagram) - }); - }, - endActivation:function(message){ + }) + }, + endActivation: function (message) { // find most recent activation for given actor - var lastActorActivationIdx = this.activations - .map(function(activation) { return activation.actor }) - .lastIndexOf(message.from.actor); - var activation = this.activations.splice(lastActorActivationIdx, 1)[0]; - return activation; - }, - newLoop:function(title){ - this.sequenceItems.push({startx:undefined,starty:this.verticalPos,stopx:undefined,stopy:undefined, title:title}); - }, - endLoop:function(){ - var loop = this.sequenceItems.pop(); - return loop; - }, - addElseToLoop:function(message){ - var loop = this.sequenceItems.pop(); - loop.elsey = exports.bounds.getVerticalPos(); - loop.elseText = message; - this.sequenceItems.push(loop); - }, - bumpVerticalPos:function(bump){ - this.verticalPos = this.verticalPos + bump; - this.data.stopy = this.verticalPos; - }, - getVerticalPos:function(){ - return this.verticalPos; - }, - getBounds:function(){ - return this.data; - } -}; + var lastActorActivationIdx = this.activations + .map(function (activation) { return activation.actor }) + .lastIndexOf(message.from.actor) + var activation = this.activations.splice(lastActorActivationIdx, 1)[0] + return activation + }, + newLoop: function (title) { + this.sequenceItems.push({startx: undefined, starty: this.verticalPos, stopx: undefined, stopy: undefined, title: title}) + }, + endLoop: function () { + var loop = this.sequenceItems.pop() + return loop + }, + addElseToLoop: function (message) { + var loop = this.sequenceItems.pop() + loop.elsey = exports.bounds.getVerticalPos() + loop.elseText = message + this.sequenceItems.push(loop) + }, + bumpVerticalPos: function (bump) { + this.verticalPos = this.verticalPos + bump + this.data.stopy = this.verticalPos + }, + getVerticalPos: function () { + return this.verticalPos + }, + getBounds: function () { + return this.data + } + } /** * Draws an actor in the diagram with the attaced line @@ -57346,43 +57393,42 @@ exports.bounds = { * @param pos The position if the actor in the liost of actors * @param description The text in the box */ -var drawNote = function(elem, startx, verticalPos, msg, forceWidth){ - var rect = svgDraw.getNoteRect(); - rect.x = startx; - rect.y = verticalPos; - rect.width = forceWidth || conf.width; - rect.class = 'note'; - - var g = elem.append('g'); - var rectElem = svgDraw.drawRect(g, rect); - - var textObj = svgDraw.getTextObj(); - textObj.x = startx-4; - textObj.y = verticalPos-13; - textObj.textMargin = conf.noteMargin; - textObj.dy = '1em'; - textObj.text = msg.message; - textObj.class = 'noteText'; - - var textElem = svgDraw.drawText(g,textObj, rect.width-conf.noteMargin); - - var textHeight = textElem[0][0].getBBox().height; - if(!forceWidth && textHeight > conf.width){ - textElem.remove(); - g = elem.append('g'); - - textElem = svgDraw.drawText(g,textObj, 2*rect.width-conf.noteMargin); - textHeight = textElem[0][0].getBBox().height; - rectElem.attr('width',2*rect.width); - exports.bounds.insert(startx, verticalPos, startx + 2*rect.width, verticalPos + 2*conf.noteMargin + textHeight); - }else{ - exports.bounds.insert(startx, verticalPos, startx + rect.width, verticalPos + 2*conf.noteMargin + textHeight); - } - - rectElem.attr('height',textHeight+ 2*conf.noteMargin); - exports.bounds.bumpVerticalPos(textHeight+ 2*conf.noteMargin); -}; + var drawNote = function (elem, startx, verticalPos, msg, forceWidth) { + var rect = svgDraw.getNoteRect() + rect.x = startx + rect.y = verticalPos + rect.width = forceWidth || conf.width + rect.class = 'note' + + var g = elem.append('g') + var rectElem = svgDraw.drawRect(g, rect) + + var textObj = svgDraw.getTextObj() + textObj.x = startx - 4 + textObj.y = verticalPos - 13 + textObj.textMargin = conf.noteMargin + textObj.dy = '1em' + textObj.text = msg.message + textObj.class = 'noteText' + + var textElem = svgDraw.drawText(g, textObj, rect.width - conf.noteMargin) + + var textHeight = textElem[0][0].getBBox().height + if (!forceWidth && textHeight > conf.width) { + textElem.remove() + g = elem.append('g') + + textElem = svgDraw.drawText(g, textObj, 2 * rect.width - conf.noteMargin) + textHeight = textElem[0][0].getBBox().height + rectElem.attr('width', 2 * rect.width) + exports.bounds.insert(startx, verticalPos, startx + 2 * rect.width, verticalPos + 2 * conf.noteMargin + textHeight) + } else { + exports.bounds.insert(startx, verticalPos, startx + rect.width, verticalPos + 2 * conf.noteMargin + textHeight) + } + rectElem.attr('height', textHeight + 2 * conf.noteMargin) + exports.bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin) + } /** * Draws a message @@ -57393,438 +57439,427 @@ var drawNote = function(elem, startx, verticalPos, msg, forceWidth){ * @param txtCenter * @param msg */ -var drawMessage = function(elem, startx, stopx, verticalPos, msg){ - var g = elem.append('g'); - var txtCenter = startx + (stopx-startx)/2; + var drawMessage = function (elem, startx, stopx, verticalPos, msg) { + var g = elem.append('g') + var txtCenter = startx + (stopx - startx) / 2 - var textElem = g.append('text') // text label for the x axis + var textElem = g.append('text') // text label for the x axis .attr('x', txtCenter) .attr('y', verticalPos - 7) .style('text-anchor', 'middle') .attr('class', 'messageText') - .text(msg.message); + .text(msg.message) - var textWidth; + var textWidth - if(typeof textElem[0][0].getBBox !== 'undefined'){ - textWidth = textElem[0][0].getBBox().width; - } - else{ - //textWidth = getBBox(textElem).width; //.getComputedTextLength() - textWidth = textElem[0][0].getBoundingClientRect(); - //textWidth = textElem[0][0].getComputedTextLength(); - } + if (typeof textElem[0][0].getBBox !== 'undefined') { + textWidth = textElem[0][0].getBBox().width + } else { + // textWidth = getBBox(textElem).width; //.getComputedTextLength() + textWidth = textElem[0][0].getBoundingClientRect() + // textWidth = textElem[0][0].getComputedTextLength(); + } - var line; - - if(startx===stopx){ - line = g.append('path') - .attr('d', 'M ' +startx+ ','+verticalPos+' C ' +(startx+60)+ ','+(verticalPos-10)+' ' +(startx+60)+ ',' + - (verticalPos+30)+' ' +startx+ ','+(verticalPos+20)); - - exports.bounds.bumpVerticalPos(30); - var dx = Math.max(textWidth/2,100); - exports.bounds.insert(startx-dx, exports.bounds.getVerticalPos() -10, stopx+dx, exports.bounds.getVerticalPos()); - }else{ - line = g.append('line'); - line.attr('x1', startx); - line.attr('y1', verticalPos); - line.attr('x2', stopx); - line.attr('y2', verticalPos); - exports.bounds.insert(startx, exports.bounds.getVerticalPos() -10, stopx, exports.bounds.getVerticalPos()); - } - //Make an SVG Container - //Draw the line - if (msg.type === sq.yy.LINETYPE.DOTTED || msg.type === sq.yy.LINETYPE.DOTTED_CROSS || msg.type === sq.yy.LINETYPE.DOTTED_OPEN) { - line.style('stroke-dasharray', ('3, 3')); - line.attr('class', 'messageLine1'); - } - else { - line.attr('class', 'messageLine0'); - } + var line - var url = ''; - if(conf.arrowMarkerAbsolute){ - url = window.location.protocol+'//'+window.location.host+window.location.pathname +window.location.search; - url = url.replace(/\(/g,'\\('); - url = url.replace(/\)/g,'\\)'); - } + if (startx === stopx) { + line = g.append('path') + .attr('d', 'M ' + startx + ',' + verticalPos + ' C ' + (startx + 60) + ',' + (verticalPos - 10) + ' ' + (startx + 60) + ',' + + (verticalPos + 30) + ' ' + startx + ',' + (verticalPos + 20)) - line.attr('stroke-width', 2); - line.attr('stroke', 'black'); - line.style('fill', 'none'); // remove any fill colour - if (msg.type === sq.yy.LINETYPE.SOLID || msg.type === sq.yy.LINETYPE.DOTTED){ - line.attr('marker-end', 'url(' + url + '#arrowhead)'); - } + exports.bounds.bumpVerticalPos(30) + var dx = Math.max(textWidth / 2, 100) + exports.bounds.insert(startx - dx, exports.bounds.getVerticalPos() - 10, stopx + dx, exports.bounds.getVerticalPos()) + } else { + line = g.append('line') + line.attr('x1', startx) + line.attr('y1', verticalPos) + line.attr('x2', stopx) + line.attr('y2', verticalPos) + exports.bounds.insert(startx, exports.bounds.getVerticalPos() - 10, stopx, exports.bounds.getVerticalPos()) + } + // Make an SVG Container + // Draw the line + if (msg.type === sq.yy.LINETYPE.DOTTED || msg.type === sq.yy.LINETYPE.DOTTED_CROSS || msg.type === sq.yy.LINETYPE.DOTTED_OPEN) { + line.style('stroke-dasharray', ('3, 3')) + line.attr('class', 'messageLine1') + } else { + line.attr('class', 'messageLine0') + } - if (msg.type === sq.yy.LINETYPE.SOLID_CROSS || msg.type === sq.yy.LINETYPE.DOTTED_CROSS){ - line.attr('marker-end', 'url(' + url + '#crosshead)'); - } + var url = '' + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search + url = url.replace(/\(/g, '\\(') + url = url.replace(/\)/g, '\\)') + } -}; + line.attr('stroke-width', 2) + line.attr('stroke', 'black') + line.style('fill', 'none') // remove any fill colour + if (msg.type === sq.yy.LINETYPE.SOLID || msg.type === sq.yy.LINETYPE.DOTTED) { + line.attr('marker-end', 'url(' + url + '#arrowhead)') + } + if (msg.type === sq.yy.LINETYPE.SOLID_CROSS || msg.type === sq.yy.LINETYPE.DOTTED_CROSS) { + line.attr('marker-end', 'url(' + url + '#crosshead)') + } + } -module.exports.drawActors = function(diagram, actors, actorKeys,verticalPos){ - var i; + module.exports.drawActors = function (diagram, actors, actorKeys, verticalPos) { + var i // Draw the actors - for(i=0;i verticalPos) { + activationData.starty = verticalPos - 6 + verticalPos += 12 + } + svgDraw.drawActivation(diagram, activationData, verticalPos, conf) - function activeEnd(msg, verticalPos) { - var activationData = exports.bounds.endActivation(msg); - if(activationData.starty + 18 > verticalPos) { - activationData.starty = verticalPos - 6; - verticalPos += 12; + exports.bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos) } - svgDraw.drawActivation(diagram, activationData, verticalPos, conf); - - exports.bounds.insert(activationData.startx, verticalPos -10, activationData.stopx, verticalPos); - } - var lastMsg; + var lastMsg // Draw the messages/signals - messages.forEach(function(msg){ - var loopData; + messages.forEach(function (msg) { + var loopData - switch(msg.type){ + switch (msg.type) { case sq.yy.LINETYPE.NOTE: - exports.bounds.bumpVerticalPos(conf.boxMargin); + exports.bounds.bumpVerticalPos(conf.boxMargin) - startx = actors[msg.from].x; - stopx = actors[msg.to].x; + startx = actors[msg.from].x + stopx = actors[msg.to].x - if(msg.placement === sq.yy.PLACEMENT.RIGHTOF){ - drawNote(diagram, startx + (conf.width + conf.actorMargin)/2, exports.bounds.getVerticalPos(), msg); - - }else if(msg.placement === sq.yy.PLACEMENT.LEFTOF){ - drawNote(diagram, startx - (conf.width + conf.actorMargin)/2, exports.bounds.getVerticalPos(), msg); - }else if(msg.to === msg.from) { + if (msg.placement === sq.yy.PLACEMENT.RIGHTOF) { + drawNote(diagram, startx + (conf.width + conf.actorMargin) / 2, exports.bounds.getVerticalPos(), msg) + } else if (msg.placement === sq.yy.PLACEMENT.LEFTOF) { + drawNote(diagram, startx - (conf.width + conf.actorMargin) / 2, exports.bounds.getVerticalPos(), msg) + } else if (msg.to === msg.from) { // Single-actor over - drawNote(diagram, startx, exports.bounds.getVerticalPos(), msg); - }else{ + drawNote(diagram, startx, exports.bounds.getVerticalPos(), msg) + } else { // Multi-actor over - forceWidth = Math.abs(startx - stopx) + conf.actorMargin; - drawNote(diagram, (startx + stopx + conf.width - forceWidth)/2, exports.bounds.getVerticalPos(), msg, - forceWidth); - } - break; + forceWidth = Math.abs(startx - stopx) + conf.actorMargin + drawNote(diagram, (startx + stopx + conf.width - forceWidth) / 2, exports.bounds.getVerticalPos(), msg, + forceWidth) + } + break case sq.yy.LINETYPE.ACTIVE_START: - exports.bounds.newActivation(msg, diagram); - break; + exports.bounds.newActivation(msg, diagram) + break case sq.yy.LINETYPE.ACTIVE_END: - activeEnd(msg, exports.bounds.getVerticalPos()); - break; + activeEnd(msg, exports.bounds.getVerticalPos()) + break case sq.yy.LINETYPE.LOOP_START: - exports.bounds.bumpVerticalPos(conf.boxMargin); - exports.bounds.newLoop(msg.message); - exports.bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin); - break; + exports.bounds.bumpVerticalPos(conf.boxMargin) + exports.bounds.newLoop(msg.message) + exports.bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin) + break case sq.yy.LINETYPE.LOOP_END: - loopData = exports.bounds.endLoop(); + loopData = exports.bounds.endLoop() - svgDraw.drawLoop(diagram, loopData,'loop', conf); - exports.bounds.bumpVerticalPos(conf.boxMargin); - break; + svgDraw.drawLoop(diagram, loopData, 'loop', conf) + exports.bounds.bumpVerticalPos(conf.boxMargin) + break case sq.yy.LINETYPE.OPT_START: - exports.bounds.bumpVerticalPos(conf.boxMargin); - exports.bounds.newLoop(msg.message); - exports.bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin); - break; + exports.bounds.bumpVerticalPos(conf.boxMargin) + exports.bounds.newLoop(msg.message) + exports.bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin) + break case sq.yy.LINETYPE.OPT_END: - loopData = exports.bounds.endLoop(); + loopData = exports.bounds.endLoop() - svgDraw.drawLoop(diagram, loopData, 'opt', conf); - exports.bounds.bumpVerticalPos(conf.boxMargin); - break; + svgDraw.drawLoop(diagram, loopData, 'opt', conf) + exports.bounds.bumpVerticalPos(conf.boxMargin) + break case sq.yy.LINETYPE.ALT_START: - exports.bounds.bumpVerticalPos(conf.boxMargin); - exports.bounds.newLoop(msg.message); - exports.bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin); - break; + exports.bounds.bumpVerticalPos(conf.boxMargin) + exports.bounds.newLoop(msg.message) + exports.bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin) + break case sq.yy.LINETYPE.ALT_ELSE: - //exports.drawLoop(diagram, loopData); - exports.bounds.bumpVerticalPos(conf.boxMargin); - loopData = exports.bounds.addElseToLoop(msg.message); - exports.bounds.bumpVerticalPos(conf.boxMargin); - break; + // exports.drawLoop(diagram, loopData); + exports.bounds.bumpVerticalPos(conf.boxMargin) + loopData = exports.bounds.addElseToLoop(msg.message) + exports.bounds.bumpVerticalPos(conf.boxMargin) + break case sq.yy.LINETYPE.ALT_END: - loopData = exports.bounds.endLoop(); + loopData = exports.bounds.endLoop() - svgDraw.drawLoop(diagram, loopData,'alt', conf); - exports.bounds.bumpVerticalPos(conf.boxMargin); - break; + svgDraw.drawLoop(diagram, loopData, 'alt', conf) + exports.bounds.bumpVerticalPos(conf.boxMargin) + break default: try { - lastMsg = msg; - exports.bounds.bumpVerticalPos(conf.messageMargin); - var fromBounds = actorFlowVerticaBounds(msg.from); - var toBounds = actorFlowVerticaBounds(msg.to); - var fromIdx = fromBounds[0] <= toBounds[0]?1:0; - var toIdx = fromBounds[0] < toBounds[0]?0:1; - startx = fromBounds[fromIdx]; - stopx = toBounds[toIdx]; - - var verticalPos = exports.bounds.getVerticalPos(); - drawMessage(diagram, startx, stopx, verticalPos, msg); - var allBounds = fromBounds.concat(toBounds); - exports.bounds.insert(Math.min.apply(null, allBounds), verticalPos, Math.max.apply(null, allBounds), verticalPos); + lastMsg = msg + exports.bounds.bumpVerticalPos(conf.messageMargin) + var fromBounds = actorFlowVerticaBounds(msg.from) + var toBounds = actorFlowVerticaBounds(msg.to) + var fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0 + var toIdx = fromBounds[0] < toBounds[0] ? 0 : 1 + startx = fromBounds[fromIdx] + stopx = toBounds[toIdx] + + var verticalPos = exports.bounds.getVerticalPos() + drawMessage(diagram, startx, stopx, verticalPos, msg) + var allBounds = fromBounds.concat(toBounds) + exports.bounds.insert(Math.min.apply(null, allBounds), verticalPos, Math.max.apply(null, allBounds), verticalPos) } catch (e) { - console.error('error while drawing message', e); + console.error('error while drawing message', e) } - } - }); - + } + }) - if(conf.mirrorActors){ + if (conf.mirrorActors) { // Draw actors below diagram - exports.bounds.bumpVerticalPos(conf.boxMargin*2); - module.exports.drawActors(diagram, actors, actorKeys, exports.bounds.getVerticalPos()); - } + exports.bounds.bumpVerticalPos(conf.boxMargin * 2) + module.exports.drawActors(diagram, actors, actorKeys, exports.bounds.getVerticalPos()) + } - var box = exports.bounds.getBounds(); + var box = exports.bounds.getBounds() // Adjust line height of actor lines now that the height of the diagram is known - log.debug('For line height fix Querying: #' + id + ' .actor-line'); - var actorLines = d3.selectAll('#' + id + ' .actor-line'); - actorLines.attr('y2',box.stopy); - + log.debug('For line height fix Querying: #' + id + ' .actor-line') + var actorLines = d3.selectAll('#' + id + ' .actor-line') + actorLines.attr('y2', box.stopy) - var height = box.stopy - box.starty + 2*conf.diagramMarginY; + var height = box.stopy - box.starty + 2 * conf.diagramMarginY - if(conf.mirrorActors){ - height = height - conf.boxMargin + conf.bottomMarginAdj; - } + if (conf.mirrorActors) { + height = height - conf.boxMargin + conf.bottomMarginAdj + } - var width = (box.stopx - box.startx) + (2 * conf.diagramMarginX); + var width = (box.stopx - box.startx) + (2 * conf.diagramMarginX) - if(title) { - diagram.append('text') + if (title) { + diagram.append('text') .text(title) - .attr('x', ( ( box.stopx-box.startx) / 2 ) - ( 2 * conf.diagramMarginX ) ) - .attr('y', -25); - } - - if(conf.useMaxWidth) { - diagram.attr('height', '100%'); - diagram.attr('width', '100%'); - diagram.attr('style', 'max-width:' + (width) + 'px;'); - }else{ - diagram.attr('height',height); - diagram.attr('width', width ); - } - var extraVertForTitle = title ? 40 : 0; - diagram.attr('viewBox', (box.startx - conf.diagramMarginX) + ' -' + (conf.diagramMarginY + extraVertForTitle) + ' ' + width + ' ' + (height + extraVertForTitle)); -}; + .attr('x', ((box.stopx - box.startx) / 2) - (2 * conf.diagramMarginX)) + .attr('y', -25) + } -},{"../../d3":109,"../../logger":132,"./parser/sequenceDiagram":127,"./sequenceDb":128,"./svgDraw":130}],130:[function(_dereq_,module,exports){ + if (conf.useMaxWidth) { + diagram.attr('height', '100%') + diagram.attr('width', '100%') + diagram.attr('style', 'max-width:' + (width) + 'px;') + } else { + diagram.attr('height', height) + diagram.attr('width', width) + } + var extraVertForTitle = title ? 40 : 0 + diagram.attr('viewBox', (box.startx - conf.diagramMarginX) + ' -' + (conf.diagramMarginY + extraVertForTitle) + ' ' + width + ' ' + (height + extraVertForTitle)) + } + }, {'../../d3': 109, '../../logger': 132, './parser/sequenceDiagram': 127, './sequenceDb': 128, './svgDraw': 130}], + 130: [function (_dereq_, module, exports) { /** * Created by knut on 14-12-20. */ -//var log = require('../../logger').create(); -exports.drawRect = function(elem , rectData){ - var rectElem = elem.append('rect'); - rectElem.attr('x', rectData.x); - rectElem.attr('y', rectData.y); - rectElem.attr('fill', rectData.fill); - rectElem.attr('stroke', rectData.stroke); - rectElem.attr('width', rectData.width); - rectElem.attr('height', rectData.height); - rectElem.attr('rx', rectData.rx); - rectElem.attr('ry', rectData.ry); - - if(typeof rectData.class !== 'undefined'){ - rectElem.attr('class', rectData.class); - } +// var log = require('../../logger').create(); + exports.drawRect = function (elem, rectData) { + var rectElem = elem.append('rect') + rectElem.attr('x', rectData.x) + rectElem.attr('y', rectData.y) + rectElem.attr('fill', rectData.fill) + rectElem.attr('stroke', rectData.stroke) + rectElem.attr('width', rectData.width) + rectElem.attr('height', rectData.height) + rectElem.attr('rx', rectData.rx) + rectElem.attr('ry', rectData.ry) + + if (typeof rectData.class !== 'undefined') { + rectElem.attr('class', rectData.class) + } - return rectElem; -}; + return rectElem + } -exports.drawText = function(elem, textData, width) { + exports.drawText = function (elem, textData, width) { // Remove and ignore br:s - var nText = textData.text.replace(//ig,' '); - - var textElem = elem.append('text'); - textElem.attr('x', textData.x); - textElem.attr('y', textData.y); - textElem.style('text-anchor', textData.anchor); - textElem.attr('fill', textData.fill); - if (typeof textData.class !== 'undefined') { - textElem.attr('class', textData.class); - } + var nText = textData.text.replace(//ig, ' ') + + var textElem = elem.append('text') + textElem.attr('x', textData.x) + textElem.attr('y', textData.y) + textElem.style('text-anchor', textData.anchor) + textElem.attr('fill', textData.fill) + if (typeof textData.class !== 'undefined') { + textElem.attr('class', textData.class) + } /* textData.text.split(//ig).forEach(function(rowText){ var span = textElem.append('tspan'); span.attr('x', textData.x +textData.textMargin); span.attr('dy', textData.dy); span.text(rowText); - });*/ - - - var span = textElem.append('tspan'); - //span.attr('x', textData.x); - span.attr('x', textData.x+textData.textMargin*2); - //span.attr('dy', textData.dy); - span.text(nText); - if(typeof textElem.textwrap !== 'undefined'){ - - textElem.textwrap({ + }); */ + + var span = textElem.append('tspan') + // span.attr('x', textData.x); + span.attr('x', textData.x + textData.textMargin * 2) + // span.attr('dy', textData.dy); + span.text(nText) + if (typeof textElem.textwrap !== 'undefined') { + textElem.textwrap({ x: textData.x, // bounding box is 300 pixels from the left y: textData.y, // bounding box is 400 pixels from the top width: width, // bounding box is 500 pixels across height: 1800 // bounding box is 600 pixels tall - }, textData.textMargin); - } + }, textData.textMargin) + } + + return textElem + } + + exports.drawLabel = function (elem, txtObject) { + var rectData = exports.getNoteRect() + rectData.x = txtObject.x + rectData.y = txtObject.y + rectData.width = 50 + rectData.height = 20 + rectData.fill = '#526e52' + rectData.stroke = 'none' + rectData.class = 'labelBox' + // rectData.color = 'white'; - return textElem; -}; - -exports.drawLabel = function(elem , txtObject){ - var rectData = exports.getNoteRect(); - rectData.x = txtObject.x; - rectData.y = txtObject.y; - rectData.width = 50; - rectData.height = 20; - rectData.fill = '#526e52'; - rectData.stroke = 'none'; - rectData.class = 'labelBox'; - //rectData.color = 'white'; - - exports.drawRect(elem, rectData); - - txtObject.y = txtObject.y + txtObject.labelMargin; - txtObject.x = txtObject.x + 0.5*txtObject.labelMargin; - txtObject.fill = 'white'; - exports.drawText(elem, txtObject); - - //return textElem; -}; -var actorCnt = -1; + exports.drawRect(elem, rectData) + + txtObject.y = txtObject.y + txtObject.labelMargin + txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin + txtObject.fill = 'white' + exports.drawText(elem, txtObject) + + // return textElem; + } + var actorCnt = -1 /** * Draws an actor in the diagram with the attaced line * @param center - The center of the the actor * @param pos The position if the actor in the liost of actors * @param description The text in the box */ -exports.drawActor = function(elem, left, verticalPos, description,conf){ - var center = left + (conf.width/2); - var g = elem.append('g'); - if(verticalPos === 0) { - actorCnt++; - g.append('line') - .attr('id', 'actor'+actorCnt) + exports.drawActor = function (elem, left, verticalPos, description, conf) { + var center = left + (conf.width / 2) + var g = elem.append('g') + if (verticalPos === 0) { + actorCnt++ + g.append('line') + .attr('id', 'actor' + actorCnt) .attr('x1', center) .attr('y1', 5) .attr('x2', center) .attr('y2', 2000) .attr('class', 'actor-line') .attr('stroke-width', '0.5px') - .attr('stroke', '#999'); - } + .attr('stroke', '#999') + } + + var rect = exports.getNoteRect() + rect.x = left + rect.y = verticalPos + rect.fill = '#eaeaea' + rect.width = conf.width + rect.height = conf.height + rect.class = 'actor' + rect.rx = 3 + rect.ry = 3 + exports.drawRect(g, rect) + + _drawTextCandidateFunc(conf)( + description, g, rect.x, rect.y, rect.width, rect.height) + } - var rect = exports.getNoteRect(); - rect.x = left; - rect.y = verticalPos; - rect.fill = '#eaeaea'; - rect.width = conf.width; - rect.height = conf.height; - rect.class = 'actor'; - rect.rx = 3; - rect.ry = 3; - exports.drawRect(g, rect); - - _drawTextCandidateFunc(conf)( - description, g, rect.x, rect.y, rect.width, rect.height); -}; - -exports.anchorElement = function(elem) { - return elem.append('g'); -}; + exports.anchorElement = function (elem) { + return elem.append('g') + } /** * Draws an actor in the diagram with the attaced line * @param elem - element to append activation rect * @param bounds - activation box bounds * @param verticalPos - precise y cooridnate of bottom activation box edge */ -exports.drawActivation = function(elem,bounds,verticalPos){ - var rect = exports.getNoteRect(); - var g = bounds.anchored; - rect.x = bounds.startx; - rect.y = bounds.starty; - rect.fill = '#f4f4f4'; - rect.width = bounds.stopx - bounds.startx; - rect.height = verticalPos - bounds.starty; - exports.drawRect(g, rect); -}; + exports.drawActivation = function (elem, bounds, verticalPos) { + var rect = exports.getNoteRect() + var g = bounds.anchored + rect.x = bounds.startx + rect.y = bounds.starty + rect.fill = '#f4f4f4' + rect.width = bounds.stopx - bounds.startx + rect.height = verticalPos - bounds.starty + exports.drawRect(g, rect) + } /** * Draws an actor in the diagram with the attaced line @@ -57832,57 +57867,57 @@ exports.drawActivation = function(elem,bounds,verticalPos){ * @param pos The position if the actor in the list of actors * @param description The text in the box */ -exports.drawLoop = function(elem,bounds,labelText, conf){ - var g = elem.append('g'); - var drawLoopLine = function(startx,starty,stopx,stopy){ - g.append('line') + exports.drawLoop = function (elem, bounds, labelText, conf) { + var g = elem.append('g') + var drawLoopLine = function (startx, starty, stopx, stopy) { + g.append('line') .attr('x1', startx) .attr('y1', starty) - .attr('x2', stopx ) - .attr('y2', stopy ) + .attr('x2', stopx) + .attr('y2', stopy) .attr('stroke-width', 2) .attr('stroke', '#526e52') - .attr('class','loopLine'); - }; - drawLoopLine(bounds.startx, bounds.starty, bounds.stopx , bounds.starty); - drawLoopLine(bounds.stopx , bounds.starty, bounds.stopx , bounds.stopy ); - drawLoopLine(bounds.startx, bounds.stopy , bounds.stopx , bounds.stopy ); - drawLoopLine(bounds.startx, bounds.starty, bounds.startx, bounds.stopy ); - if(typeof bounds.elsey !== 'undefined'){ - drawLoopLine(bounds.startx, bounds.elsey, bounds.stopx, bounds.elsey ); - } + .attr('class', 'loopLine') + } + drawLoopLine(bounds.startx, bounds.starty, bounds.stopx, bounds.starty) + drawLoopLine(bounds.stopx, bounds.starty, bounds.stopx, bounds.stopy) + drawLoopLine(bounds.startx, bounds.stopy, bounds.stopx, bounds.stopy) + drawLoopLine(bounds.startx, bounds.starty, bounds.startx, bounds.stopy) + if (typeof bounds.elsey !== 'undefined') { + drawLoopLine(bounds.startx, bounds.elsey, bounds.stopx, bounds.elsey) + } - var txt = exports.getTextObj(); - txt.text = labelText; - txt.x = bounds.startx; - txt.y = bounds.starty; - txt.labelMargin = 1.5 * 10; // This is the small box that says "loop" - txt.class = 'labelText'; // Its size & position are fixed. - txt.fill = 'white'; - - exports.drawLabel(g,txt); - - txt = exports.getTextObj(); - txt.text = '[ ' + bounds.title + ' ]'; - txt.x = bounds.startx + (bounds.stopx - bounds.startx)/2; - txt.y = bounds.starty + 1.5 * conf.boxMargin; - txt.anchor = 'middle'; - txt.class = 'loopText'; - - exports.drawText(g,txt); - - if(typeof bounds.elseText !== 'undefined') { - txt.text = '[ ' + bounds.elseText + ' ]'; - txt.y = bounds.elsey + 1.5 * conf.boxMargin; - exports.drawText(g, txt); - } -}; + var txt = exports.getTextObj() + txt.text = labelText + txt.x = bounds.startx + txt.y = bounds.starty + txt.labelMargin = 1.5 * 10 // This is the small box that says "loop" + txt.class = 'labelText' // Its size & position are fixed. + txt.fill = 'white' + + exports.drawLabel(g, txt) + + txt = exports.getTextObj() + txt.text = '[ ' + bounds.title + ' ]' + txt.x = bounds.startx + (bounds.stopx - bounds.startx) / 2 + txt.y = bounds.starty + 1.5 * conf.boxMargin + txt.anchor = 'middle' + txt.class = 'loopText' + + exports.drawText(g, txt) + + if (typeof bounds.elseText !== 'undefined') { + txt.text = '[ ' + bounds.elseText + ' ]' + txt.y = bounds.elsey + 1.5 * conf.boxMargin + exports.drawText(g, txt) + } + } /** * Setup arrow head and define the marker. The result is appended to the svg. */ -exports.insertArrowHead = function(elem){ - elem.append('defs').append('marker') + exports.insertArrowHead = function (elem) { + elem.append('defs').append('marker') .attr('id', 'arrowhead') .attr('refX', 5) .attr('refY', 2) @@ -57890,114 +57925,113 @@ exports.insertArrowHead = function(elem){ .attr('markerHeight', 4) .attr('orient', 'auto') .append('path') - .attr('d', 'M 0,0 V 4 L6,2 Z'); //this is actual shape for arrowhead -}; + .attr('d', 'M 0,0 V 4 L6,2 Z') // this is actual shape for arrowhead + } /** * Setup arrow head and define the marker. The result is appended to the svg. */ -exports.insertArrowCrossHead = function(elem){ - var defs = elem.append('defs'); - var marker = defs.append('marker') + exports.insertArrowCrossHead = function (elem) { + var defs = elem.append('defs') + var marker = defs.append('marker') .attr('id', 'crosshead') .attr('markerWidth', 15) .attr('markerHeight', 8) .attr('orient', 'auto') .attr('refX', 16) - .attr('refY', 4); + .attr('refY', 4) // The arrow - marker.append('path') - .attr('fill','black') - .attr('stroke','#000000') + marker.append('path') + .attr('fill', 'black') + .attr('stroke', '#000000') .style('stroke-dasharray', ('0, 0')) - .attr('stroke-width','1px') - .attr('d', 'M 9,2 V 6 L16,4 Z'); + .attr('stroke-width', '1px') + .attr('d', 'M 9,2 V 6 L16,4 Z') // The cross - marker.append('path') - .attr('fill','none') - .attr('stroke','#000000') + marker.append('path') + .attr('fill', 'none') + .attr('stroke', '#000000') .style('stroke-dasharray', ('0, 0')) - .attr('stroke-width','1px') + .attr('stroke-width', '1px') .attr('d', 'M 0,1 L 6,7 M 6,1 L 0,7') - ; //this is actual shape for arrowhead - -}; - -exports.getTextObj = function(){ - var txt = { - x: 0, - y: 0, - 'fill':'black', - 'text-anchor': 'start', - style: '#666', - width: 100, - height: 100, - textMargin:0, - rx: 0, - ry: 0 - }; - return txt; -}; - -exports.getNoteRect = function(){ - var rect = { - x : 0, - y : 0, - fill : '#EDF2AE', - stroke : '#666', - width : 100, - anchor : 'start', - height : 100, - rx : 0, - ry : 0 - }; - return rect; -}; - -var _drawTextCandidateFunc = (function() { - var byText = function(content, g, x, y, width, height) { - var center = x + width / 2; - g.append('text') + // this is actual shape for arrowhead + } + + exports.getTextObj = function () { + var txt = { + x: 0, + y: 0, + 'fill': 'black', + 'text-anchor': 'start', + style: '#666', + width: 100, + height: 100, + textMargin: 0, + rx: 0, + ry: 0 + } + return txt + } + + exports.getNoteRect = function () { + var rect = { + x: 0, + y: 0, + fill: '#EDF2AE', + stroke: '#666', + width: 100, + anchor: 'start', + height: 100, + rx: 0, + ry: 0 + } + return rect + } + + var _drawTextCandidateFunc = (function () { + var byText = function (content, g, x, y, width, height) { + var center = x + width / 2 + g.append('text') .attr('x', center).attr('y', y + height / 2 + 5) .attr('class', 'actor').style('text-anchor', 'middle') - .text(content); - }; - var byFo = function(content, g, x, y, width, height) { - var s = g.append('switch'); - var f = s.append("foreignObject") + .text(content) + } + var byFo = function (content, g, x, y, width, height) { + var s = g.append('switch') + var f = s.append('foreignObject') .attr('x', x).attr('y', y) - .attr('width', width).attr('height', height); + .attr('width', width).attr('height', height) - f.append('div').style('display', 'table') + f.append('div').style('display', 'table') .style('height', '100%').style('width', '100%') .append('div').style('display', 'table-cell') .style('text-align', 'center').style('vertical-align', 'middle') .text(content) - byText(content, s, x, y, width, height); - }; - return function(conf) { - return conf.textPlacement==='fo' ? byFo : byText; - }; -})(); - -},{}],131:[function(_dereq_,module,exports){ -(function (global){ + byText(content, s, x, y, width, height) + } + return function (conf) { + return conf.textPlacement === 'fo' ? byFo : byText + } + })() + }, {}], + 131: [function (_dereq_, module, exports) { + (function (global) { /** * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid functionality and to render * the diagrams to svg code. */ -var Logger = _dereq_('./logger'); + var Logger = _dereq_('./logger') -var log = new Logger.Log(); -var mermaidAPI = _dereq_('./mermaidAPI'); -var nextId = 0; + var log = new Logger.Log() + var mermaidAPI = _dereq_('./mermaidAPI') + var nextId = 0 -var he = _dereq_('he'); + var he = _dereq_('he') -module.exports.mermaidAPI = mermaidAPI; + module.exports.mermaidAPI = mermaidAPI /** * ## init * Function that goes through the document to find the chart definitions in there and render them. @@ -58019,133 +58053,128 @@ module.exports.mermaidAPI = mermaidAPI; * Renders the mermaid diagrams * @param nodes a css selector or an array of nodes */ -var init = function () { - var conf= mermaidAPI.getConfig(); - log.debug('Starting rendering diagrams'); - var nodes; - if(arguments.length >= 2){ + var init = function () { + var conf = mermaidAPI.getConfig() + log.debug('Starting rendering diagrams') + var nodes + if (arguments.length >= 2) { /*! sequence config was passed as #1 */ - if(typeof arguments[0] !== 'undefined'){ - global.mermaid.sequenceConfig = arguments[0]; - } + if (typeof arguments[0] !== 'undefined') { + global.mermaid.sequenceConfig = arguments[0] + } - nodes = arguments[1]; - } - else{ - nodes = arguments[0]; - } + nodes = arguments[1] + } else { + nodes = arguments[0] + } // if last argument is a function this is the callback function - var callback; - if(typeof arguments[arguments.length-1] === 'function'){ - callback = arguments[arguments.length-1]; - log.debug('Callback function found'); - }else{ - if(typeof conf.mermaid !== 'undefined'){ - if(typeof conf.mermaid.callback === 'function'){ - callback = conf.mermaid.callback; - log.debug('Callback function found'); - }else{ - log.debug('No Callback function found'); + var callback + if (typeof arguments[arguments.length - 1] === 'function') { + callback = arguments[arguments.length - 1] + log.debug('Callback function found') + } else { + if (typeof conf.mermaid !== 'undefined') { + if (typeof conf.mermaid.callback === 'function') { + callback = conf.mermaid.callback + log.debug('Callback function found') + } else { + log.debug('No Callback function found') + } } - } - } - nodes = nodes === undefined ? document.querySelectorAll('.mermaid') + } + nodes = nodes === undefined ? document.querySelectorAll('.mermaid') : typeof nodes === 'string' ? document.querySelectorAll(nodes) : nodes instanceof Node ? [nodes] - : nodes; // Last case - sequence config was passed pick next - - var i; - - if(typeof mermaid_config !== 'undefined'){ - mermaidAPI.initialize(global.mermaid_config); - } - log.debug('Start On Load before: '+global.mermaid.startOnLoad); - if(typeof global.mermaid.startOnLoad !== 'undefined'){ - log.debug('Start On Load inner: '+global.mermaid.startOnLoad); - mermaidAPI.initialize({startOnLoad:global.mermaid.startOnLoad}); + : nodes // Last case - sequence config was passed pick next - } + var i + if (typeof mermaid_config !== 'undefined') { + mermaidAPI.initialize(global.mermaid_config) + } + log.debug('Start On Load before: ' + global.mermaid.startOnLoad) + if (typeof global.mermaid.startOnLoad !== 'undefined') { + log.debug('Start On Load inner: ' + global.mermaid.startOnLoad) + mermaidAPI.initialize({startOnLoad: global.mermaid.startOnLoad}) + } - if(typeof global.mermaid.ganttConfig !== 'undefined'){ - mermaidAPI.initialize({gantt:global.mermaid.ganttConfig}); - } + if (typeof global.mermaid.ganttConfig !== 'undefined') { + mermaidAPI.initialize({gantt: global.mermaid.ganttConfig}) + } - var txt; - var insertSvg = function(svgCode, bindFunctions){ - element.innerHTML = svgCode; - if(typeof callback !== 'undefined'){ - callback(id); - } - bindFunctions(element); - }; + var txt + var insertSvg = function (svgCode, bindFunctions) { + element.innerHTML = svgCode + if (typeof callback !== 'undefined') { + callback(id) + } + bindFunctions(element) + } - for (i = 0; i < nodes.length; i++) { - var element = nodes[i]; + for (i = 0; i < nodes.length; i++) { + var element = nodes[i] /*! Check if previously processed */ - if(!element.getAttribute('data-processed')) { - element.setAttribute('data-processed', true); - } else { - continue; - } + if (!element.getAttribute('data-processed')) { + element.setAttribute('data-processed', true) + } else { + continue + } - var id = 'mermaidChart' + nextId++; + var id = 'mermaidChart' + nextId++ // Fetch the graph definition including tags - txt = element.innerHTML; + txt = element.innerHTML - //console.warn('delivererd from the browser: '); - //console.warn(txt); + // console.warn('delivererd from the browser: '); + // console.warn(txt); // transforms the html to pure text - txt = he.decode(txt).trim(); - //console.warn('he decode: '); - //console.warn(txt); + txt = he.decode(txt).trim() + // console.warn('he decode: '); + // console.warn(txt); - mermaidAPI.render(id,txt,insertSvg, element); - } -}; + mermaidAPI.render(id, txt, insertSvg, element) + } + } -exports.init = init; -exports.parse = mermaidAPI.parse; + exports.init = init + exports.parse = mermaidAPI.parse /** * ## version * Function returning version information * @returns {string} A string containing the version info */ -exports.version = function(){ - return 'v'+_dereq_('../package.json').version; -}; + exports.version = function () { + return 'v' + _dereq_('../package.json').version + } /** * ## initialize * This function overrides the default configuration. * @param config */ -exports.initialize = function(config){ - log.debug('Initializing mermaid'); - if(typeof config.mermaid !== 'undefined') { - if (typeof config.mermaid.startOnLoad !== 'undefined') { - global.mermaid.startOnLoad = config.mermaid.startOnLoad; - } - if (typeof config.mermaid.htmlLabels !== 'undefined') { - global.mermaid.htmlLabels = config.mermaid.htmlLabels; + exports.initialize = function (config) { + log.debug('Initializing mermaid') + if (typeof config.mermaid !== 'undefined') { + if (typeof config.mermaid.startOnLoad !== 'undefined') { + global.mermaid.startOnLoad = config.mermaid.startOnLoad + } + if (typeof config.mermaid.htmlLabels !== 'undefined') { + global.mermaid.htmlLabels = config.mermaid.htmlLabels + } + } + mermaidAPI.initialize(config) } - } - mermaidAPI.initialize(config); -}; - -var equals = function (val, variable){ - if(typeof variable === 'undefined'){ - return false; - } - else{ - return (val === variable); - } -}; + var equals = function (val, variable) { + if (typeof variable === 'undefined') { + return false + } else { + return (val === variable) + } + } /** * Global mermaid object. Contains the functions: @@ -58156,102 +58185,96 @@ var equals = function (val, variable){ * * parseError * * render */ -global.mermaid = { - startOnLoad: true, - htmlLabels: true, - - init: function() { - init.apply(null, arguments); - }, - initialize: function(config) { - exports.initialize(config); - }, - version: function() { - return mermaidAPI.version(); - }, - parse: function(text) { - return mermaidAPI.parse(text); - }, - parseError: function(err) { - log.debug('Mermaid Syntax error:'); - log.debug(err); - }, - render:function(id, text,callback, element){ - return mermaidAPI.render(id, text,callback, element); - } -}; + global.mermaid = { + startOnLoad: true, + htmlLabels: true, + + init: function () { + init.apply(null, arguments) + }, + initialize: function (config) { + exports.initialize(config) + }, + version: function () { + return mermaidAPI.version() + }, + parse: function (text) { + return mermaidAPI.parse(text) + }, + parseError: function (err) { + log.debug('Mermaid Syntax error:') + log.debug(err) + }, + render: function (id, text, callback, element) { + return mermaidAPI.render(id, text, callback, element) + } + } /** * ## parseError * This function overrides the default configuration. * @param config */ -exports.parseError = global.mermaid.parseError; + exports.parseError = global.mermaid.parseError /** * ##contentLoaded * Callback function that is called when page is loaded. This functions fetches configuration for mermaid rendering and * calls init for rendering the mermaid diagrams on the page. */ -exports.contentLoaded = function(){ - var config; + exports.contentLoaded = function () { + var config // Check state of start config mermaid namespace - if (typeof mermaid_config !== 'undefined') { - if (equals(false, global.mermaid_config.htmlLabels)) { - global.mermaid.htmlLabels = false; - } - } + if (typeof mermaid_config !== 'undefined') { + if (equals(false, global.mermaid_config.htmlLabels)) { + global.mermaid.htmlLabels = false + } + } - if(global.mermaid.startOnLoad) { + if (global.mermaid.startOnLoad) { // For backwards compatability reasons also check mermaid_config variable - if (typeof global.mermaid_config !== 'undefined') { + if (typeof global.mermaid_config !== 'undefined') { // Check if property startOnLoad is set - if (equals(true, global.mermaid_config.startOnLoad)) { - global.mermaid.init(); - } - } - else { + if (equals(true, global.mermaid_config.startOnLoad)) { + global.mermaid.init() + } + } else { // No config found, do check API config - config = mermaidAPI.getConfig(); - if(config.startOnLoad){ - global.mermaid.init(); + config = mermaidAPI.getConfig() + if (config.startOnLoad) { + global.mermaid.init() + } } - } - }else{ - //if(typeof global.mermaid === 'undefined' ){ - if(typeof global.mermaid.startOnLoad === 'undefined' ){ - log.debug('In start, no config'); - config = mermaidAPI.getConfig(); - if(config.startOnLoad){ - global.mermaid.init(); - } - //}else{ + } else { + // if(typeof global.mermaid === 'undefined' ){ + if (typeof global.mermaid.startOnLoad === 'undefined') { + log.debug('In start, no config') + config = mermaidAPI.getConfig() + if (config.startOnLoad) { + global.mermaid.init() + } + // }else{ // - //} - + // } + } + } } - } - -}; - - - -if(typeof document !== 'undefined'){ + if (typeof document !== 'undefined') { /*! * Wait for document loaded before starting the execution */ - window.addEventListener('load', function(){ - exports.contentLoaded(); - }, false); -} + window.addEventListener('load', function () { + exports.contentLoaded() + }, false) + } // // Your actual module // return module.exports; -//})); - -}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../package.json":108,"./logger":132,"./mermaidAPI":133,"he":105}],132:[function(_dereq_,module,exports){ +// })); + }).call(this, typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}) + }, {'../package.json': 108, './logger': 132, './mermaidAPI': 133, 'he': 105}], + 132: [function (_dereq_, module, exports) { /** * #logger * logger = require('logger').create() @@ -58264,109 +58287,108 @@ if(typeof document !== 'undefined'){ * => [2011-3-3T20:24:4.810 error (5021)] booom */ -const LEVELS = { - debug: 1, - info: 2, - warn: 3, - error: 4, - fatal: 5, - default: 5 -}; - -var defaultLevel = LEVELS.error; - -exports.setLogLevel = function (level) { - defaultLevel = level; -}; - -function formatTime(timestamp) { - var hh = timestamp.getUTCHours(); - var mm = timestamp.getUTCMinutes(); - var ss = timestamp.getSeconds(); - var ms = timestamp.getMilliseconds(); + const LEVELS = { + debug: 1, + info: 2, + warn: 3, + error: 4, + fatal: 5, + default: 5 + } + + var defaultLevel = LEVELS.error + + exports.setLogLevel = function (level) { + defaultLevel = level + } + + function formatTime (timestamp) { + var hh = timestamp.getUTCHours() + var mm = timestamp.getUTCMinutes() + var ss = timestamp.getSeconds() + var ms = timestamp.getMilliseconds() // If you were building a timestamp instead of a duration, you would uncomment the following line to get 12-hour (not 24) time // if (hh > 12) {hh = hh % 12;} // These lines ensure you have two-digits - if (hh < 10) { - hh = '0' + hh; - } - if (mm < 10) { - mm = '0' + mm; - } - if (ss < 10) { - ss = '0' + ss; - } - if (ms < 100) { - ms = '0' + ms; - } - if (ms < 10) { - ms = '00' + ms; - } + if (hh < 10) { + hh = '0' + hh + } + if (mm < 10) { + mm = '0' + mm + } + if (ss < 10) { + ss = '0' + ss + } + if (ms < 100) { + ms = '0' + ms + } + if (ms < 10) { + ms = '00' + ms + } // This formats your string to HH:MM:SS - var t = hh + ':' + mm + ':' + ss + ' (' + ms + ')'; - return t; -} - - -function Log(level) { - this.level = level; - - this.log = function() { - var args = Array.prototype.slice.call(arguments); - var level = args.shift(); - var logLevel = this.level; - if(typeof logLevel === 'undefined'){ - logLevel = defaultLevel; - } - if (logLevel <= level) { - if (typeof console !== 'undefined') { //eslint-disable-line no-console - if (typeof console.log !== 'undefined') { //eslint-disable-line no-console - //return console.log('[' + formatTime(new Date()) + '] ' , str); //eslint-disable-line no-console - args.unshift('[' + formatTime(new Date()) + '] '); - console.log.apply(console, args.map(function(a){ - if (typeof a === "object") return JSON.stringify(a, null, 2); - return a; - })); - } - } - } - }; - - this.trace = function(str) { - var args = Array.prototype.slice.call(arguments); - args.unshift(LEVELS.trace); - this.log.apply(this, args); - }; - - this.debug = function(str) { - var args = Array.prototype.slice.call(arguments); - args.unshift(LEVELS.debug); - this.log.apply(this, args); - }; - - this.info = function(str) { - var args = Array.prototype.slice.call(arguments); - args.unshift(LEVELS.info); - this.log.apply(this, args); - }; - - this.warn = function(str) { - var args = Array.prototype.slice.call(arguments); - args.unshift(LEVELS.warn); - this.log.apply(this, args); - }; - - this.error = function(str) { - var args = Array.prototype.slice.call(arguments); - args.unshift(LEVELS.error); - this.log.apply(this, args); - }; -} - -exports.Log = Log; - -},{}],133:[function(_dereq_,module,exports){ -(function (global){ + var t = hh + ':' + mm + ':' + ss + ' (' + ms + ')' + return t + } + + function Log (level) { + this.level = level + + this.log = function () { + var args = Array.prototype.slice.call(arguments) + var level = args.shift() + var logLevel = this.level + if (typeof logLevel === 'undefined') { + logLevel = defaultLevel + } + if (logLevel <= level) { + if (typeof console !== 'undefined') { // eslint-disable-line no-console + if (typeof console.log !== 'undefined') { // eslint-disable-line no-console + // return console.log('[' + formatTime(new Date()) + '] ' , str); //eslint-disable-line no-console + args.unshift('[' + formatTime(new Date()) + '] ') + console.log.apply(console, args.map(function (a) { + if (typeof a === 'object') return JSON.stringify(a, null, 2) + return a + })) + } + } + } + } + + this.trace = function (str) { + var args = Array.prototype.slice.call(arguments) + args.unshift(LEVELS.trace) + this.log.apply(this, args) + } + + this.debug = function (str) { + var args = Array.prototype.slice.call(arguments) + args.unshift(LEVELS.debug) + this.log.apply(this, args) + } + + this.info = function (str) { + var args = Array.prototype.slice.call(arguments) + args.unshift(LEVELS.info) + this.log.apply(this, args) + } + + this.warn = function (str) { + var args = Array.prototype.slice.call(arguments) + args.unshift(LEVELS.warn) + this.log.apply(this, args) + } + + this.error = function (str) { + var args = Array.prototype.slice.call(arguments) + args.unshift(LEVELS.error) + this.log.apply(this, args) + } + } + + exports.Log = Log + }, {}], + 133: [function (_dereq_, module, exports) { + (function (global) { /** * --- * title: mermaidAPI @@ -58380,34 +58402,34 @@ exports.Log = Log; * returns a svg element for the graph. It is is then up to the user of the API to make use of the svg, either insert it * somewhere in the page or something completely different. */ -var Logger = _dereq_('./logger'); -var log = new Logger.Log(); - -var graph = _dereq_('./diagrams/flowchart/graphDb'); -var utils = _dereq_('./utils'); -var flowRenderer = _dereq_('./diagrams/flowchart/flowRenderer'); -var seq = _dereq_('./diagrams/sequenceDiagram/sequenceRenderer'); -var info = _dereq_('./diagrams/example/exampleRenderer'); -var infoParser = _dereq_('./diagrams/example/parser/example'); -var flowParser = _dereq_('./diagrams/flowchart/parser/flow'); -var dotParser = _dereq_('./diagrams/flowchart/parser/dot'); -var sequenceParser = _dereq_('./diagrams/sequenceDiagram/parser/sequenceDiagram'); -var sequenceDb = _dereq_('./diagrams/sequenceDiagram/sequenceDb'); -var infoDb = _dereq_('./diagrams/example/exampleDb'); -var gantt = _dereq_('./diagrams/gantt/ganttRenderer'); -var ganttParser = _dereq_('./diagrams/gantt/parser/gantt'); -var ganttDb = _dereq_('./diagrams/gantt/ganttDb'); -var classParser = _dereq_('./diagrams/classDiagram/parser/classDiagram'); -var classRenderer = _dereq_('./diagrams/classDiagram/classRenderer'); -var classDb = _dereq_('./diagrams/classDiagram/classDb'); -var gitGraphParser = _dereq_('./diagrams/gitGraph/parser/gitGraph'); -var gitGraphRenderer = _dereq_('./diagrams/gitGraph/gitGraphRenderer'); -var gitGraphAst = _dereq_('./diagrams/gitGraph/gitGraphAst'); -var d3 = _dereq_('./d3'); - -SVGElement.prototype.getTransformToElement = SVGElement.prototype.getTransformToElement || function(toElement) { - return toElement.getScreenCTM().inverse().multiply(this.getScreenCTM()); - }; + var Logger = _dereq_('./logger') + var log = new Logger.Log() + + var graph = _dereq_('./diagrams/flowchart/graphDb') + var utils = _dereq_('./utils') + var flowRenderer = _dereq_('./diagrams/flowchart/flowRenderer') + var seq = _dereq_('./diagrams/sequenceDiagram/sequenceRenderer') + var info = _dereq_('./diagrams/example/exampleRenderer') + var infoParser = _dereq_('./diagrams/example/parser/example') + var flowParser = _dereq_('./diagrams/flowchart/parser/flow') + var dotParser = _dereq_('./diagrams/flowchart/parser/dot') + var sequenceParser = _dereq_('./diagrams/sequenceDiagram/parser/sequenceDiagram') + var sequenceDb = _dereq_('./diagrams/sequenceDiagram/sequenceDb') + var infoDb = _dereq_('./diagrams/example/exampleDb') + var gantt = _dereq_('./diagrams/gantt/ganttRenderer') + var ganttParser = _dereq_('./diagrams/gantt/parser/gantt') + var ganttDb = _dereq_('./diagrams/gantt/ganttDb') + var classParser = _dereq_('./diagrams/classDiagram/parser/classDiagram') + var classRenderer = _dereq_('./diagrams/classDiagram/classRenderer') + var classDb = _dereq_('./diagrams/classDiagram/classDb') + var gitGraphParser = _dereq_('./diagrams/gitGraph/parser/gitGraph') + var gitGraphRenderer = _dereq_('./diagrams/gitGraph/gitGraphRenderer') + var gitGraphAst = _dereq_('./diagrams/gitGraph/gitGraphAst') + var d3 = _dereq_('./d3') + + SVGElement.prototype.getTransformToElement = SVGElement.prototype.getTransformToElement || function (toElement) { + return toElement.getScreenCTM().inverse().multiply(this.getScreenCTM()) + } /** * ## Configuration * These are the default options which can be overridden with the initialization call as in the example below: @@ -58419,7 +58441,7 @@ SVGElement.prototype.getTransformToElement = SVGElement.prototype.getTransformTo * }); * ``` */ -var config = { + var config = { /** * logLevel , decides the amount of logging to be used. * * debug: 1 @@ -58428,192 +58450,191 @@ var config = { * * error: 4 * * fatal: 5 */ - logLevel: 5, + logLevel: 5, /** * **cloneCssStyles** - This options controls whether or not the css rules should be copied into the generated svg */ - cloneCssStyles: true, + cloneCssStyles: true, /** * **startOnLoad** - This options controls whether or mermaid starts when the page loads */ - startOnLoad: true, + startOnLoad: true, /** * **arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute paths or * an anchor, #. This matters if you are using base tag settings. */ - arrowMarkerAbsolute: false, + arrowMarkerAbsolute: false, /** * ### flowchart * *The object containing configurations specific for flowcharts* */ - flowchart:{ + flowchart: { /** * **htmlLabels** - Flag for setting whether or not a html tag should be used for rendering labels * on the edges */ - htmlLabels:true, + htmlLabels: true, /** * **useMaxWidth** - Flag for setting whether or not a all available width should be used for * the diagram. */ - useMaxWidth:true - }, + useMaxWidth: true + }, /** * ### sequenceDiagram * The object containing configurations specific for sequence diagrams */ - sequenceDiagram:{ + sequenceDiagram: { /** * **diagramMarginX** - margin to the right and left of the sequence diagram */ - diagramMarginX:50, + diagramMarginX: 50, /** * **diagramMarginY** - margin to the over and under the sequence diagram */ - diagramMarginY:10, + diagramMarginY: 10, /** * **actorMargin** - Margin between actors */ - actorMargin:50, + actorMargin: 50, /** * **width** - Width of actor boxes */ - width:150, + width: 150, /** * **height** - Height of actor boxes */ - height:65, + height: 65, /** * **boxMargin** - Margin around loop boxes */ - boxMargin:10, + boxMargin: 10, /** * **boxTextMargin** - margin around the text in loop/alt/opt boxes */ - boxTextMargin:5, + boxTextMargin: 5, /** * **noteMargin** - margin around notes */ - noteMargin:10, + noteMargin: 10, /** * **messageMargin** - Space between messages */ - messageMargin:35, + messageMargin: 35, /** * **mirrorActors** - mirror actors under diagram */ - mirrorActors:true, + mirrorActors: true, /** * **bottomMarginAdj** - Depending on css styling this might need adjustment. * Prolongs the edge of the diagram downwards */ - bottomMarginAdj:1, + bottomMarginAdj: 1, /** * **useMaxWidth** - when this flag is set the height and width is set to 100% and is then scaling with the * available space if not the absolute space required is used */ - useMaxWidth:true - }, + useMaxWidth: true + }, /** ### gantt * The object containing configurations specific for gantt diagrams* */ - gantt:{ + gantt: { /** * **titleTopMargin** - margin top for the text over the gantt diagram */ - titleTopMargin: 25, + titleTopMargin: 25, /** * **barHeight** - the height of the bars in the graph */ - barHeight: 20, + barHeight: 20, /** * **barGap** - the margin between the different activities in the gantt diagram */ - barGap: 4, + barGap: 4, /** * **topPadding** - margin between title and gantt diagram and between axis and gantt diagram. */ - topPadding: 50, + topPadding: 50, /** * **leftPadding** - the space allocated for the section name to the left of the activities. */ - leftPadding: 75, + leftPadding: 75, /** * **gridLineStartPadding** - Vertical starting position of the grid lines */ - gridLineStartPadding: 35, + gridLineStartPadding: 35, /** * **fontSize** - font size ... */ - fontSize: 11, + fontSize: 11, /** * **fontFamily** - font family ... */ - fontFamily: '"Open-Sans", "sans-serif"', + fontFamily: '"Open-Sans", "sans-serif"', /** * **numberSectionStyles** - the number of alternating section styles */ - numberSectionStyles:3, + numberSectionStyles: 3, /** * **axisFormatter** - formatting of the axis, this might need adjustment to match your locale and preferences */ - axisFormatter: [ + axisFormatter: [ // Within a day - ['%I:%M', function (d) { - return d.getHours(); - }], + ['%I:%M', function (d) { + return d.getHours() + }], // Monday a week - ['w. %U', function (d) { - return d.getDay() == 1; - }], + ['w. %U', function (d) { + return d.getDay() == 1 + }], // Day within a week (not monday) - ['%a %d', function (d) { - return d.getDay() && d.getDate() != 1; - }], + ['%a %d', function (d) { + return d.getDay() && d.getDate() != 1 + }], // within a month - ['%b %d', function (d) { - return d.getDate() != 1; - }], + ['%b %d', function (d) { + return d.getDate() != 1 + }], // Month - ['%m-%y', function (d) { - return d.getMonth(); - }] - ] - }, - classDiagram:{}, - gitGraph: {}, - info:{} -}; - -Logger.setLogLevel(config.logLevel); + ['%m-%y', function (d) { + return d.getMonth() + }] + ] + }, + classDiagram: {}, + gitGraph: {}, + info: {} + } + Logger.setLogLevel(config.logLevel) /** * ## parse @@ -58621,104 +58642,100 @@ Logger.setLogLevel(config.logLevel); * thrown and * @param text */ -var parse = function(text){ - var graphType = utils.detectType(text); - var parser; - - switch(graphType){ - case 'gitGraph': - parser = gitGraphParser; - parser.parser.yy = gitGraphAst; - break; - case 'graph': - parser = flowParser; - parser.parser.yy = graph; - break; - case 'dotGraph': - parser = dotParser; - parser.parser.yy = graph; - break; - case 'sequenceDiagram': - parser = sequenceParser; - parser.parser.yy = sequenceDb; - break; - case 'info': - parser = infoParser; - parser.parser.yy = infoDb; - break; - case 'gantt': - parser = ganttParser; - parser.parser.yy = ganttDb; - break; - case 'classDiagram': - parser = classParser; - parser.parser.yy = classDb; - break; - } + var parse = function (text) { + var graphType = utils.detectType(text) + var parser + + switch (graphType) { + case 'gitGraph': + parser = gitGraphParser + parser.parser.yy = gitGraphAst + break + case 'graph': + parser = flowParser + parser.parser.yy = graph + break + case 'dotGraph': + parser = dotParser + parser.parser.yy = graph + break + case 'sequenceDiagram': + parser = sequenceParser + parser.parser.yy = sequenceDb + break + case 'info': + parser = infoParser + parser.parser.yy = infoDb + break + case 'gantt': + parser = ganttParser + parser.parser.yy = ganttDb + break + case 'classDiagram': + parser = classParser + parser.parser.yy = classDb + break + } - try{ - parser.parse(text); - return true; - } - catch(err){ - return false; - } -}; -exports.parse = parse; + try { + parser.parse(text) + return true + } catch (err) { + return false + } + } + exports.parse = parse /** * ## version * Function returning version information * @returns {string} A string containing the version info */ -exports.version = function(){ - return _dereq_('../package.json').version; -}; - -exports.encodeEntities = function(text){ - var txt = text; - - txt = txt.replace(/style.*:\S*#.*;/g,function(s){ - var innerTxt = s.substring(0,s.length-1); - return innerTxt; - }); - txt = txt.replace(/classDef.*:\S*#.*;/g,function(s){ - var innerTxt = s.substring(0,s.length-1); - return innerTxt; - }); - - txt = txt.replace(/#\w+\;/g,function(s){ - var innerTxt = s.substring(1,s.length-1); - - var isInt = /^\+?\d+$/.test(innerTxt); - if(isInt){ - return 'fl°°'+innerTxt+'¶ß'; - }else{ - return 'fl°'+innerTxt+'¶ß'; + exports.version = function () { + return _dereq_('../package.json').version } - }); + exports.encodeEntities = function (text) { + var txt = text + + txt = txt.replace(/style.*:\S*#.*;/g, function (s) { + var innerTxt = s.substring(0, s.length - 1) + return innerTxt + }) + txt = txt.replace(/classDef.*:\S*#.*;/g, function (s) { + var innerTxt = s.substring(0, s.length - 1) + return innerTxt + }) - return txt; -}; + txt = txt.replace(/#\w+\;/g, function (s) { + var innerTxt = s.substring(1, s.length - 1) -exports.decodeEntities = function(text){ - var txt = text; + var isInt = /^\+?\d+$/.test(innerTxt) + if (isInt) { + return 'fl°°' + innerTxt + '¶ß' + } else { + return 'fl°' + innerTxt + '¶ß' + } + }) - txt = txt.replace(/\fl\°\°/g,function(){ - return '&#'; - }); - txt = txt.replace(/\fl\°/g,function(){ - return '&'; - }); - txt = txt.replace(/¶ß/g,function(){ - return ';'; - }); + return txt + } + exports.decodeEntities = function (text) { + var txt = text + txt = txt.replace(/\fl\°\°/g, function () { + return '&#' + }) + txt = txt.replace(/\fl\°/g, function () { + return '&' + }) + txt = txt.replace(/¶ß/g, function () { + return ';' + }) - return txt; -}; + return txt + } /** * ##render * Function that renders an svg with a graph from a chart definition. Usage example below. @@ -58742,211 +58759,203 @@ exports.decodeEntities = function(text){ * provided a hidden div will be inserted in the body of the page instead. The element will be removed when rendering is * completed. */ -var render = function(id, txt, cb, container){ - - if(typeof container !== 'undefined'){ - d3.select(container).append('div') - .attr('id', 'd'+id) + var render = function (id, txt, cb, container) { + if (typeof container !== 'undefined') { + d3.select(container).append('div') + .attr('id', 'd' + id) .append('svg') .attr('id', id) - .attr('width','100%') - .attr('xmlns','http://www.w3.org/2000/svg') - .append('g'); - } - else{ - d3.select('body').append('div') - .attr('id', 'd'+id) + .attr('width', '100%') + .attr('xmlns', 'http://www.w3.org/2000/svg') + .append('g') + } else { + d3.select('body').append('div') + .attr('id', 'd' + id) .append('svg') .attr('id', id) - .attr('width','100%') - .attr('xmlns','http://www.w3.org/2000/svg') - .append('g'); - } + .attr('width', '100%') + .attr('xmlns', 'http://www.w3.org/2000/svg') + .append('g') + } - window.txt = txt; - txt = exports.encodeEntities(txt); - //console.warn('mermaid encode: '); - //console.warn(txt); - - var element = d3.select('#d'+id).node(); - var graphType = utils.detectType(txt); - var classes = {}; - switch(graphType){ - case 'gitGraph': - config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute; - gitGraphRenderer.setConf(config.gitGraph); - gitGraphRenderer.draw(txt, id, false); - //if(config.cloneCssStyles){ - //classes = gitGraphRenderer.getClasses(txt, false); - //utils.cloneCssStyles(element.firstChild, classes); - //} - break; - case 'graph': - config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute; - flowRenderer.setConf(config.flowchart); - flowRenderer.draw(txt, id, false); - if(config.cloneCssStyles){ - classes = flowRenderer.getClasses(txt, false); - utils.cloneCssStyles(element.firstChild, classes); - } - break; - case 'dotGraph': - config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute; - flowRenderer.setConf(config.flowchart); - flowRenderer.draw(txt, id, true); - if(config.cloneCssStyles) { - classes = flowRenderer.getClasses(txt, true); - utils.cloneCssStyles(element.firstChild, classes); - } - break; - case 'sequenceDiagram': - config.sequenceDiagram.arrowMarkerAbsolute = config.arrowMarkerAbsolute; - seq.setConf(config.sequenceDiagram); - seq.draw(txt,id); - if(config.cloneCssStyles) { - utils.cloneCssStyles(element.firstChild, []); - } - break; - case 'gantt': - config.gantt.arrowMarkerAbsolute = config.arrowMarkerAbsolute; - gantt.setConf(config.gantt); - gantt.draw(txt,id); - if(config.cloneCssStyles) { - utils.cloneCssStyles(element.firstChild, []); - } - break; - case 'classDiagram': - config.classDiagram.arrowMarkerAbsolute = config.arrowMarkerAbsolute; - classRenderer.setConf(config.classDiagram); - classRenderer.draw(txt,id); - if(config.cloneCssStyles) { - utils.cloneCssStyles(element.firstChild, []); - } - break; - case 'info': - config.info.arrowMarkerAbsolute = config.arrowMarkerAbsolute; - info.draw(txt,id,exports.version()); - if(config.cloneCssStyles) { - utils.cloneCssStyles(element.firstChild, []); - } - break; - } + window.txt = txt + txt = exports.encodeEntities(txt) + // console.warn('mermaid encode: '); + // console.warn(txt); + + var element = d3.select('#d' + id).node() + var graphType = utils.detectType(txt) + var classes = {} + switch (graphType) { + case 'gitGraph': + config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute + gitGraphRenderer.setConf(config.gitGraph) + gitGraphRenderer.draw(txt, id, false) + // if(config.cloneCssStyles){ + // classes = gitGraphRenderer.getClasses(txt, false); + // utils.cloneCssStyles(element.firstChild, classes); + // } + break + case 'graph': + config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute + flowRenderer.setConf(config.flowchart) + flowRenderer.draw(txt, id, false) + if (config.cloneCssStyles) { + classes = flowRenderer.getClasses(txt, false) + utils.cloneCssStyles(element.firstChild, classes) + } + break + case 'dotGraph': + config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute + flowRenderer.setConf(config.flowchart) + flowRenderer.draw(txt, id, true) + if (config.cloneCssStyles) { + classes = flowRenderer.getClasses(txt, true) + utils.cloneCssStyles(element.firstChild, classes) + } + break + case 'sequenceDiagram': + config.sequenceDiagram.arrowMarkerAbsolute = config.arrowMarkerAbsolute + seq.setConf(config.sequenceDiagram) + seq.draw(txt, id) + if (config.cloneCssStyles) { + utils.cloneCssStyles(element.firstChild, []) + } + break + case 'gantt': + config.gantt.arrowMarkerAbsolute = config.arrowMarkerAbsolute + gantt.setConf(config.gantt) + gantt.draw(txt, id) + if (config.cloneCssStyles) { + utils.cloneCssStyles(element.firstChild, []) + } + break + case 'classDiagram': + config.classDiagram.arrowMarkerAbsolute = config.arrowMarkerAbsolute + classRenderer.setConf(config.classDiagram) + classRenderer.draw(txt, id) + if (config.cloneCssStyles) { + utils.cloneCssStyles(element.firstChild, []) + } + break + case 'info': + config.info.arrowMarkerAbsolute = config.arrowMarkerAbsolute + info.draw(txt, id, exports.version()) + if (config.cloneCssStyles) { + utils.cloneCssStyles(element.firstChild, []) + } + break + } - d3.select('#d'+id).selectAll('foreignobject div').attr('xmlns','http://www.w3.org/1999/xhtml'); + d3.select('#d' + id).selectAll('foreignobject div').attr('xmlns', 'http://www.w3.org/1999/xhtml') - var url = ''; - if(config.arrowMarkerAbsolute){ - url = window.location.protocol+'//'+window.location.host+window.location.pathname +window.location.search; - url = url.replace(/\(/g,'\\('); - url = url.replace(/\)/g,'\\)'); - } + var url = '' + if (config.arrowMarkerAbsolute) { + url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search + url = url.replace(/\(/g, '\\(') + url = url.replace(/\)/g, '\\)') + } // Fix for when the base tag is used - var svgCode = d3.select('#d'+id).node().innerHTML.replace(/url\(#arrowhead/g,'url('+url +'#arrowhead','g'); - - svgCode = exports.decodeEntities(svgCode); - - //console.warn('mermaid decode: '); - //console.warn(svgCode); - //var he = require('he'); - //svgCode = he.decode(svgCode); - if(typeof cb !== 'undefined'){ - cb(svgCode,graph.bindFunctions); - }else{ - log.warn('CB = undefined!'); - } + var svgCode = d3.select('#d' + id).node().innerHTML.replace(/url\(#arrowhead/g, 'url(' + url + '#arrowhead', 'g') - var node = d3.select('#d'+id).node(); - if(node !== null && typeof node.remove === 'function'){ - d3.select('#d'+id).node().remove(); - } + svgCode = exports.decodeEntities(svgCode) + + // console.warn('mermaid decode: '); + // console.warn(svgCode); + // var he = require('he'); + // svgCode = he.decode(svgCode); + if (typeof cb !== 'undefined') { + cb(svgCode, graph.bindFunctions) + } else { + log.warn('CB = undefined!') + } - return svgCode; -}; + var node = d3.select('#d' + id).node() + if (node !== null && typeof node.remove === 'function') { + d3.select('#d' + id).node().remove() + } -exports.render = function (id, text, cb, containerElement) { - try{ - if(arguments.length === 1){ - text = id; - id = 'mermaidId0'; + return svgCode } - if (typeof document === 'undefined') { + exports.render = function (id, text, cb, containerElement) { + try { + if (arguments.length === 1) { + text = id + id = 'mermaidId0' + } + + if (typeof document === 'undefined') { // Todo handle rendering serverside using phantomjs - } - else { + } else { // In browser - return render(id, text, cb, containerElement); + return render(id, text, cb, containerElement) + } + } catch (e) { + log.warn(e) + } } - }catch(e){ - log.warn(e); - } -}; - - -var setConf = function(cnf){ + var setConf = function (cnf) { // Top level initially mermaid, gflow, sequenceDiagram and gantt - var lvl1Keys = Object.keys(cnf); - var i; - for(i=0;i 0) { - usedStyles += rule.selectorText + ' { ' + rule.style.cssText + '}\n'; - } - } + var rules = sheets[i].cssRules + if (rules !== null) { + for (var j = 0; j < rules.length; j++) { + rule = rules[j] + if (typeof (rule.style) !== 'undefined') { + var elems + elems = svg.querySelectorAll(rule.selectorText) + if (elems.length > 0) { + usedStyles += rule.selectorText + ' { ' + rule.style.cssText + '}\n' } + } } + } + } catch (err) { + if (typeof (rule) !== 'undefined') { + log.warn('Invalid CSS selector "' + rule.selectorText + '"', err) + } } - catch (err) { - if (typeof(rule) !== 'undefined') { - log.warn('Invalid CSS selector "' + rule.selectorText + '"', err); - } - } + } } - } - var defaultStyles = ''; - var embeddedStyles = ''; + var defaultStyles = '' + var embeddedStyles = '' - for (var className in classes) { - if (classes.hasOwnProperty(className) && typeof(className) != 'undefined') { + for (var className in classes) { + if (classes.hasOwnProperty(className) && typeof (className) !== 'undefined') { if (className === 'default') { - if (classes.default.styles instanceof Array) { - defaultStyles += '#' + svg.id.trim() + ' .node' + '>rect { ' + classes[className].styles.join('; ') + '; }\n'; - } - if (classes.default.nodeLabelStyles instanceof Array) { - defaultStyles += '#' + svg.id.trim() + ' .node text ' + ' { ' + classes[className].nodeLabelStyles.join('; ') + '; }\n'; - } - if (classes.default.edgeLabelStyles instanceof Array) { - defaultStyles += '#' + svg.id.trim() + ' .edgeLabel text ' + ' { ' + classes[className].edgeLabelStyles.join('; ') + '; }\n'; - } - if (classes.default.clusterStyles instanceof Array) { - defaultStyles += '#' + svg.id.trim() + ' .cluster rect ' + ' { ' + classes[className].clusterStyles.join('; ') + '; }\n'; - } + if (classes.default.styles instanceof Array) { + defaultStyles += '#' + svg.id.trim() + ' .node' + '>rect { ' + classes[className].styles.join('; ') + '; }\n' + } + if (classes.default.nodeLabelStyles instanceof Array) { + defaultStyles += '#' + svg.id.trim() + ' .node text ' + ' { ' + classes[className].nodeLabelStyles.join('; ') + '; }\n' + } + if (classes.default.edgeLabelStyles instanceof Array) { + defaultStyles += '#' + svg.id.trim() + ' .edgeLabel text ' + ' { ' + classes[className].edgeLabelStyles.join('; ') + '; }\n' + } + if (classes.default.clusterStyles instanceof Array) { + defaultStyles += '#' + svg.id.trim() + ' .cluster rect ' + ' { ' + classes[className].clusterStyles.join('; ') + '; }\n' + } } else { - if (classes[className].styles instanceof Array) { - embeddedStyles += '#' + svg.id.trim() + ' .' + className + '>rect, .' + className + '>polygon, .' + className + '>ellipse { ' + classes[className].styles.join('; ') + '; }\n'; - } + if (classes[className].styles instanceof Array) { + embeddedStyles += '#' + svg.id.trim() + ' .' + className + '>rect, .' + className + '>polygon, .' + className + '>ellipse { ' + classes[className].styles.join('; ') + '; }\n' + } } + } } - } - if (usedStyles !== '' || defaultStyles !== '' || embeddedStyles !== '') { - var s = document.createElement('style'); - s.setAttribute('type', 'text/css'); - s.setAttribute('title', 'mermaid-svg-internal-css'); - s.innerHTML = '/* */\n' + svg.insertBefore(s, svg.firstChild) } - s.innerHTML += '/* ]]> */\n'; - svg.insertBefore(s, svg.firstChild); - } -}; - -exports.cloneCssStyles = cloneCssStyles; + } -},{"./logger":132}]},{},[131]) + exports.cloneCssStyles = cloneCssStyles + }, {'./logger': 132}]}, {}, [131]) (131) -}); \ No newline at end of file +})) diff --git a/docs/site/javascripts/all.js b/docs/site/javascripts/all.js index ba3a4f9107..96b2fe9b42 100644 --- a/docs/site/javascripts/all.js +++ b/docs/site/javascripts/all.js @@ -1,4 +1,4 @@ -!function(){if("ontouchstart"in window){var t,e,n,r,i,o,a={};t=function(t,e){return Math.abs(t[0]-e[0])>5||Math.abs(t[1]-e[1])>5},e=function(t){this.startXY=[t.touches[0].clientX,t.touches[0].clientY],this.threshold=!1},n=function(e){return this.threshold?!1:void(this.threshold=t(this.startXY,[e.touches[0].clientX,e.touches[0].clientY]))},r=function(e){if(!this.threshold&&!t(this.startXY,[e.changedTouches[0].clientX,e.changedTouches[0].clientY])){var n=e.changedTouches[0],r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),r.simulated=!0,e.target.dispatchEvent(r)}},i=function(t){var e=Date.now(),n=e-a.time,r=t.clientX,i=t.clientY,s=[Math.abs(a.x-r),Math.abs(a.y-i)],u=o(t.target,"A")||t.target,c=u.nodeName,l="A"===c,h=window.navigator.standalone&&l&&t.target.getAttribute("href");return a.time=e,a.x=r,a.y=i,(!t.simulated&&(500>n||1500>n&&s[0]<50&&s[1]<50)||h)&&(t.preventDefault(),t.stopPropagation(),!h)?!1:(h&&(window.location=u.getAttribute("href")),void(u&&u.classList&&(u.classList.add("energize-focus"),window.setTimeout(function(){u.classList.remove("energize-focus")},150))))},o=function(t,e){for(var n=t;n!==document.body;){if(!n||n.nodeName===e)return n;n=n.parentNode}return null},document.addEventListener("touchstart",e,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",r,!1),document.addEventListener("click",i,!0)}}(),/* +!(function () { if ('ontouchstart' in window) { var t, e, n, r, i, o, a = {}; t = function (t, e) { return Math.abs(t[0] - e[0]) > 5 || Math.abs(t[1] - e[1]) > 5 }, e = function (t) { this.startXY = [t.touches[0].clientX, t.touches[0].clientY], this.threshold = !1 }, n = function (e) { return this.threshold ? !1 : void (this.threshold = t(this.startXY, [e.touches[0].clientX, e.touches[0].clientY])) }, r = function (e) { if (!this.threshold && !t(this.startXY, [e.changedTouches[0].clientX, e.changedTouches[0].clientY])) { var n = e.changedTouches[0], r = document.createEvent('MouseEvents'); r.initMouseEvent('click', !0, !0, window, 0, n.screenX, n.screenY, n.clientX, n.clientY, !1, !1, !1, !1, 0, null), r.simulated = !0, e.target.dispatchEvent(r) } }, i = function (t) { var e = Date.now(), n = e - a.time, r = t.clientX, i = t.clientY, s = [Math.abs(a.x - r), Math.abs(a.y - i)], u = o(t.target, 'A') || t.target, c = u.nodeName, l = c === 'A', h = window.navigator.standalone && l && t.target.getAttribute('href'); return a.time = e, a.x = r, a.y = i, (!t.simulated && (n < 500 || n < 1500 && s[0] < 50 && s[1] < 50) || h) && (t.preventDefault(), t.stopPropagation(), !h) ? !1 : (h && (window.location = u.getAttribute('href')), void (u && u.classList && (u.classList.add('energize-focus'), window.setTimeout(function () { u.classList.remove('energize-focus') }, 150)))) }, o = function (t, e) { for (var n = t; n !== document.body;) { if (!n || n.nodeName === e) return n; n = n.parentNode } return null }, document.addEventListener('touchstart', e, !1), document.addEventListener('touchmove', n, !1), document.addEventListener('touchend', r, !1), document.addEventListener('click', i, !0) } }()), /* Copyright 2008-2013 Concur Technologies, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -13,63 +13,65 @@ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -function(t){"use strict";function e(e){if(e&&""!==e){$(".lang-selector a").removeClass("active"),$(".lang-selector a[data-language-name='"+e+"']").addClass("active");for(var n=0;n=1){var t=n(location.search).language;if(t)return t;if(-1!=jQuery.inArray(location.search.substr(1),u))return location.search.substr(1)}return!1}function o(t){var e=n(location.search);return e.language?(e.language=t,r(e)):t}function a(t){if(history){var e=window.location.hash;e&&(e=e.replace(/^#+/,"")),history.pushState({},"","?"+o(t)+"#"+e),localStorage.setItem("language",t)}}function s(t){var n=localStorage.getItem("language");u=t;var r=i();r?(e(r),localStorage.setItem("language",r)):e(null!==n&&-1!=jQuery.inArray(n,u)?n:u[0])}var u=[];t.setupLanguages=s,t.activateLanguage=e,$(function(){$(".lang-selector a").on("click",function(){var t=$(this).data("language-name");return a(t),e(t),!1}),window.onpopstate=function(){e(i())}})}(window),/** +(function (t) { 'use strict'; function e (e) { if (e && e !== '') { $('.lang-selector a').removeClass('active'), $(".lang-selector a[data-language-name='" + e + "']").addClass('active'); for (var n = 0; n < u.length; n++)$('.highlight.' + u[n]).hide(); $('.highlight.' + e).show(), t.toc.calculateHeights(), $(window.location.hash).get(0) && $(window.location.hash).get(0).scrollIntoView(!0) } } function n (t) { return typeof t !== 'string' ? {} : (t = t.trim().replace(/^(\?|#|&)/, ''), t ? t.split('&').reduce(function (t, e) { var n = e.replace(/\+/g, ' ').split('='), r = n[0], i = n[1]; return r = decodeURIComponent(r), i = void 0 === i ? null : decodeURIComponent(i), t.hasOwnProperty(r) ? Array.isArray(t[r]) ? t[r].push(i) : t[r] = [t[r], i] : t[r] = i, t }, {}) : {}) } function r (t) { return t ? Object.keys(t).sort().map(function (e) { var n = t[e]; return Array.isArray(n) ? n.sort().map(function (t) { return encodeURIComponent(e) + '=' + encodeURIComponent(t) }).join('&') : encodeURIComponent(e) + '=' + encodeURIComponent(n) }).join('&') : '' } function i () { if (location.search.length >= 1) { var t = n(location.search).language; if (t) return t; if (jQuery.inArray(location.search.substr(1), u) != -1) return location.search.substr(1) } return !1 } function o (t) { var e = n(location.search); return e.language ? (e.language = t, r(e)) : t } function a (t) { if (history) { var e = window.location.hash; e && (e = e.replace(/^#+/, '')), history.pushState({}, '', '?' + o(t) + '#' + e), localStorage.setItem('language', t) } } function s (t) { var n = localStorage.getItem('language'); u = t; var r = i(); r ? (e(r), localStorage.setItem('language', r)) : e(n !== null && jQuery.inArray(n, u) != -1 ? n : u[0]) } var u = []; t.setupLanguages = s, t.activateLanguage = e, $(function () { $('.lang-selector a').on('click', function () { var t = $(this).data('language-name'); return a(t), e(t), !1 }), window.onpopstate = function () { e(i()) } }) }(window)), /** * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.7 * Copyright (C) 2014 Oliver Nightingale * MIT Licensed * @license */ -function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.5.7",/*! +(function () { + var t = function (e) { var n = new t.Index(); return n.pipeline.add(t.trimmer, t.stopWordFilter, t.stemmer), e && e.call(n, n), n }; t.version = '0.5.7', /*! * lunr.utils * Copyright (C) 2014 Oliver Nightingale */ -t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),/*! +t.utils = {}, t.utils.warn = (function (t) { return function (e) { t.console && console.warn && console.warn(e) } }(this)), /*! * lunr.EventEmitter * Copyright (C) 2014 Oliver Nightingale */ -t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},/*! +t.EventEmitter = function () { this.events = {} }, t.EventEmitter.prototype.addListener = function () { var t = Array.prototype.slice.call(arguments), e = t.pop(), n = t; if (typeof e !== 'function') throw new TypeError('last argument must be a function'); n.forEach(function (t) { this.hasHandler(t) || (this.events[t] = []), this.events[t].push(e) }, this) }, t.EventEmitter.prototype.removeListener = function (t, e) { if (this.hasHandler(t)) { var n = this.events[t].indexOf(e); this.events[t].splice(n, 1), this.events[t].length || delete this.events[t] } }, t.EventEmitter.prototype.emit = function (t) { if (this.hasHandler(t)) { var e = Array.prototype.slice.call(arguments, 1); this.events[t].forEach(function (t) { t.apply(void 0, e) }) } }, t.EventEmitter.prototype.hasHandler = function (t) { return t in this.events }, /*! * lunr.tokenizer * Copyright (C) 2014 Oliver Nightingale */ -t.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(t){return t.toLowerCase()});for(var e=t.toString().replace(/^\s+/,""),n=e.length-1;n>=0;n--)if(/\S/.test(e.charAt(n))){e=e.substring(0,n+1);break}return e.split(/(?:\s+|\-)/).filter(function(t){return!!t}).map(function(t){return t.toLowerCase()})},/*! +t.tokenizer = function (t) { if (!arguments.length || t == null || void 0 == t) return []; if (Array.isArray(t)) return t.map(function (t) { return t.toLowerCase() }); for (var e = t.toString().replace(/^\s+/, ''), n = e.length - 1; n >= 0; n--) if (/\S/.test(e.charAt(n))) { e = e.substring(0, n + 1); break } return e.split(/(?:\s+|\-)/).filter(function (t) { return !!t }).map(function (t) { return t.toLowerCase() }) }, /*! * lunr.Pipeline * Copyright (C) 2014 Oliver Nightingale */ -t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var r=t.Pipeline.registeredFunctions[e];if(!r)throw new Error("Cannot load un-registered function: "+e);n.add(r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e)+1;this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,r=this._stack.length,i=0;n>i;i++){for(var o=t[i],a=0;r>a&&(o=this._stack[a](o,i,t),void 0!==o);a++);void 0!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},/*! +t.Pipeline = function () { this._stack = [] }, t.Pipeline.registeredFunctions = {}, t.Pipeline.registerFunction = function (e, n) { n in this.registeredFunctions && t.utils.warn('Overwriting existing registered function: ' + n), e.label = n, t.Pipeline.registeredFunctions[e.label] = e }, t.Pipeline.warnIfFunctionNotRegistered = function (e) { var n = e.label && e.label in this.registeredFunctions; n || t.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', e) }, t.Pipeline.load = function (e) { var n = new t.Pipeline(); return e.forEach(function (e) { var r = t.Pipeline.registeredFunctions[e]; if (!r) throw new Error('Cannot load un-registered function: ' + e); n.add(r) }), n }, t.Pipeline.prototype.add = function () { var e = Array.prototype.slice.call(arguments); e.forEach(function (e) { t.Pipeline.warnIfFunctionNotRegistered(e), this._stack.push(e) }, this) }, t.Pipeline.prototype.after = function (e, n) { t.Pipeline.warnIfFunctionNotRegistered(n); var r = this._stack.indexOf(e) + 1; this._stack.splice(r, 0, n) }, t.Pipeline.prototype.before = function (e, n) { t.Pipeline.warnIfFunctionNotRegistered(n); var r = this._stack.indexOf(e); this._stack.splice(r, 0, n) }, t.Pipeline.prototype.remove = function (t) { var e = this._stack.indexOf(t); this._stack.splice(e, 1) }, t.Pipeline.prototype.run = function (t) { for (var e = [], n = t.length, r = this._stack.length, i = 0; n > i; i++) { for (var o = t[i], a = 0; r > a && (o = this._stack[a](o, i, t), void 0 !== o); a++);void 0 !== o && e.push(o) } return e }, t.Pipeline.prototype.reset = function () { this._stack = [] }, t.Pipeline.prototype.toJSON = function () { return this._stack.map(function (e) { return t.Pipeline.warnIfFunctionNotRegistered(e), e.label }) }, /*! * lunr.Vector * Copyright (C) 2014 Oliver Nightingale */ -t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){var r=this.list;if(!r)return this.list=new t.Vector.Node(e,n,r),this.length++;for(var i=r,o=r.next;void 0!=o;){if(en.idx?n=n.next:(r+=e.val*n.val,e=e.next,n=n.next);return r},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},/*! +t.Vector = function () { this._magnitude = null, this.list = void 0, this.length = 0 }, t.Vector.Node = function (t, e, n) { this.idx = t, this.val = e, this.next = n }, t.Vector.prototype.insert = function (e, n) { var r = this.list; if (!r) return this.list = new t.Vector.Node(e, n, r), this.length++; for (var i = r, o = r.next; void 0 != o;) { if (e < o.idx) return i.next = new t.Vector.Node(e, n, o), this.length++; i = o, o = o.next } return i.next = new t.Vector.Node(e, n, o), this.length++ }, t.Vector.prototype.magnitude = function () { if (this._magniture) return this._magnitude; for (var t, e = this.list, n = 0; e;)t = e.val, n += t * t, e = e.next; return this._magnitude = Math.sqrt(n) }, t.Vector.prototype.dot = function (t) { for (var e = this.list, n = t.list, r = 0; e && n;)e.idx < n.idx ? e = e.next : e.idx > n.idx ? n = n.next : (r += e.val * n.val, e = e.next, n = n.next); return r }, t.Vector.prototype.similarity = function (t) { return this.dot(t) / (this.magnitude() * t.magnitude()) }, /*! * lunr.SortedSet * Copyright (C) 2014 Oliver Nightingale */ -t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(t){~this.indexOf(t)||this.elements.splice(this.locationFor(t),0,t)},this),this.length=this.elements.length},t.SortedSet.prototype.toArray=function(){return this.elements.slice()},t.SortedSet.prototype.map=function(t,e){return this.elements.map(t,e)},t.SortedSet.prototype.forEach=function(t,e){return this.elements.forEach(t,e)},t.SortedSet.prototype.indexOf=function(t,e,n){var e=e||0,n=n||this.elements.length,r=n-e,i=e+Math.floor(r/2),o=this.elements[i];return 1>=r?o===t?i:-1:t>o?this.indexOf(t,i,n):o>t?this.indexOf(t,e,i):o===t?i:void 0},t.SortedSet.prototype.locationFor=function(t,e,n){var e=e||0,n=n||this.elements.length,r=n-e,i=e+Math.floor(r/2),o=this.elements[i];if(1>=r){if(o>t)return i;if(t>o)return i+1}return t>o?this.locationFor(t,i,n):o>t?this.locationFor(t,e,i):void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,r=0,i=0,o=this.length,a=e.length,s=this.elements,u=e.elements;;){if(r>o-1||i>a-1)break;s[r]!==u[i]?s[r]u[i]&&i++:(n.add(s[r]),r++,i++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,r;return this.length>=t.length?(e=this,n=t):(e=t,n=this),r=e.clone(),r.add.apply(r,n.toArray()),r},t.SortedSet.prototype.toJSON=function(){return this.toArray()},/*! +t.SortedSet = function () { this.length = 0, this.elements = [] }, t.SortedSet.load = function (t) { var e = new this(); return e.elements = t, e.length = t.length, e }, t.SortedSet.prototype.add = function () { Array.prototype.slice.call(arguments).forEach(function (t) { ~this.indexOf(t) || this.elements.splice(this.locationFor(t), 0, t) }, this), this.length = this.elements.length }, t.SortedSet.prototype.toArray = function () { return this.elements.slice() }, t.SortedSet.prototype.map = function (t, e) { return this.elements.map(t, e) }, t.SortedSet.prototype.forEach = function (t, e) { return this.elements.forEach(t, e) }, t.SortedSet.prototype.indexOf = function (t, e, n) { var e = e || 0, n = n || this.elements.length, r = n - e, i = e + Math.floor(r / 2), o = this.elements[i]; return r <= 1 ? o === t ? i : -1 : t > o ? this.indexOf(t, i, n) : o > t ? this.indexOf(t, e, i) : o === t ? i : void 0 }, t.SortedSet.prototype.locationFor = function (t, e, n) { var e = e || 0, n = n || this.elements.length, r = n - e, i = e + Math.floor(r / 2), o = this.elements[i]; if (r <= 1) { if (o > t) return i; if (t > o) return i + 1 } return t > o ? this.locationFor(t, i, n) : o > t ? this.locationFor(t, e, i) : void 0 }, t.SortedSet.prototype.intersect = function (e) { for (var n = new t.SortedSet(), r = 0, i = 0, o = this.length, a = e.length, s = this.elements, u = e.elements; ;) { if (r > o - 1 || i > a - 1) break; s[r] !== u[i] ? s[r] < u[i] ? r++ : s[r] > u[i] && i++ : (n.add(s[r]), r++, i++) } return n }, t.SortedSet.prototype.clone = function () { var e = new t.SortedSet(); return e.elements = this.toArray(), e.length = e.elements.length, e }, t.SortedSet.prototype.union = function (t) { var e, n, r; return this.length >= t.length ? (e = this, n = t) : (e = t, n = this), r = e.clone(), r.add.apply(r, n.toArray()), r }, t.SortedSet.prototype.toJSON = function () { return this.toArray() }, /*! * lunr.Index * Copyright (C) 2014 Oliver Nightingale */ -t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var r={},i=new t.SortedSet,o=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n.name]));r[n.name]=o,t.SortedSet.prototype.add.apply(i,o)},this),this.documentStore.set(o,i),t.SortedSet.prototype.add.apply(this.corpusTokens,i.toArray());for(var a=0;a0&&(r=1+Math.log(this.tokenStore.length/n)),this._idfCache[e]=r},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),r=new t.Vector,i=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),a=n.some(function(t){return this.tokenStore.has(t)},this);if(!a)return[];n.forEach(function(e,n,a){var s=1/a.length*this._fields.length*o,u=this,c=this.tokenStore.expand(e).reduce(function(n,i){var o=u.corpusTokens.indexOf(i),a=u.idf(i),c=1,l=new t.SortedSet;if(i!==e){var h=Math.max(3,i.length-e.length);c=1/Math.log(h)}return o>-1&&r.insert(o,s*a*c),Object.keys(u.tokenStore.get(i)).forEach(function(t){l.add(t)}),n.union(l)},new t.SortedSet);i.push(c)},this);var s=i.reduce(function(t,e){return t.intersect(e)});return s.map(function(t){return{ref:t,score:r.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),r=n.length,i=new t.Vector,o=0;r>o;o++){var a=n.elements[o],s=this.tokenStore.get(a)[e].tf,u=this.idf(a);i.insert(this.corpusTokens.indexOf(a),s*u)}return i},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},/*! +t.Index = function () { this._fields = [], this._ref = 'id', this.pipeline = new t.Pipeline(), this.documentStore = new t.Store(), this.tokenStore = new t.TokenStore(), this.corpusTokens = new t.SortedSet(), this.eventEmitter = new t.EventEmitter(), this._idfCache = {}, this.on('add', 'remove', 'update', function () { this._idfCache = {} }.bind(this)) }, t.Index.prototype.on = function () { var t = Array.prototype.slice.call(arguments); return this.eventEmitter.addListener.apply(this.eventEmitter, t) }, t.Index.prototype.off = function (t, e) { return this.eventEmitter.removeListener(t, e) }, t.Index.load = function (e) { e.version !== t.version && t.utils.warn('version mismatch: current ' + t.version + ' importing ' + e.version); var n = new this(); return n._fields = e.fields, n._ref = e.ref, n.documentStore = t.Store.load(e.documentStore), n.tokenStore = t.TokenStore.load(e.tokenStore), n.corpusTokens = t.SortedSet.load(e.corpusTokens), n.pipeline = t.Pipeline.load(e.pipeline), n }, t.Index.prototype.field = function (t, e) { var e = e || {}, n = {name: t, boost: e.boost || 1}; return this._fields.push(n), this }, t.Index.prototype.ref = function (t) { return this._ref = t, this }, t.Index.prototype.add = function (e, n) { var r = {}, i = new t.SortedSet(), o = e[this._ref], n = void 0 === n ? !0 : n; this._fields.forEach(function (n) { var o = this.pipeline.run(t.tokenizer(e[n.name])); r[n.name] = o, t.SortedSet.prototype.add.apply(i, o) }, this), this.documentStore.set(o, i), t.SortedSet.prototype.add.apply(this.corpusTokens, i.toArray()); for (var a = 0; a < i.length; a++) { var s = i.elements[a], u = this._fields.reduce(function (t, e) { var n = r[e.name].length; if (!n) return t; var i = r[e.name].filter(function (t) { return t === s }).length; return t + i / n * e.boost }, 0); this.tokenStore.add(s, {ref: o, tf: u}) }n && this.eventEmitter.emit('add', e, this) }, t.Index.prototype.remove = function (t, e) { var n = t[this._ref], e = void 0 === e ? !0 : e; if (this.documentStore.has(n)) { var r = this.documentStore.get(n); this.documentStore.remove(n), r.forEach(function (t) { this.tokenStore.remove(t, n) }, this), e && this.eventEmitter.emit('remove', t, this) } }, t.Index.prototype.update = function (t, e) { var e = void 0 === e ? !0 : e; this.remove(t, !1), this.add(t, !1), e && this.eventEmitter.emit('update', t, this) }, t.Index.prototype.idf = function (t) { var e = '@' + t; if (Object.prototype.hasOwnProperty.call(this._idfCache, e)) return this._idfCache[e]; var n = this.tokenStore.count(t), r = 1; return n > 0 && (r = 1 + Math.log(this.tokenStore.length / n)), this._idfCache[e] = r }, t.Index.prototype.search = function (e) { var n = this.pipeline.run(t.tokenizer(e)), r = new t.Vector(), i = [], o = this._fields.reduce(function (t, e) { return t + e.boost }, 0), a = n.some(function (t) { return this.tokenStore.has(t) }, this); if (!a) return []; n.forEach(function (e, n, a) { var s = 1 / a.length * this._fields.length * o, u = this, c = this.tokenStore.expand(e).reduce(function (n, i) { var o = u.corpusTokens.indexOf(i), a = u.idf(i), c = 1, l = new t.SortedSet(); if (i !== e) { var h = Math.max(3, i.length - e.length); c = 1 / Math.log(h) } return o > -1 && r.insert(o, s * a * c), Object.keys(u.tokenStore.get(i)).forEach(function (t) { l.add(t) }), n.union(l) }, new t.SortedSet()); i.push(c) }, this); var s = i.reduce(function (t, e) { return t.intersect(e) }); return s.map(function (t) { return {ref: t, score: r.similarity(this.documentVector(t))} }, this).sort(function (t, e) { return e.score - t.score }) }, t.Index.prototype.documentVector = function (e) { for (var n = this.documentStore.get(e), r = n.length, i = new t.Vector(), o = 0; r > o; o++) { var a = n.elements[o], s = this.tokenStore.get(a)[e].tf, u = this.idf(a); i.insert(this.corpusTokens.indexOf(a), s * u) } return i }, t.Index.prototype.toJSON = function () { return {version: t.version, fields: this._fields, ref: this._ref, documentStore: this.documentStore.toJSON(), tokenStore: this.tokenStore.toJSON(), corpusTokens: this.corpusTokens.toJSON(), pipeline: this.pipeline.toJSON()} }, t.Index.prototype.use = function (t) { var e = Array.prototype.slice.call(arguments, 1); e.unshift(this), t.apply(this, e) }, /*! * lunr.Store * Copyright (C) 2014 Oliver Nightingale */ -t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,r){return n[r]=t.SortedSet.load(e.store[r]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},/*! +t.Store = function () { this.store = {}, this.length = 0 }, t.Store.load = function (e) { var n = new this(); return n.length = e.length, n.store = Object.keys(e.store).reduce(function (n, r) { return n[r] = t.SortedSet.load(e.store[r]), n }, {}), n }, t.Store.prototype.set = function (t, e) { this.has(t) || this.length++, this.store[t] = e }, t.Store.prototype.get = function (t) { return this.store[t] }, t.Store.prototype.has = function (t) { return t in this.store }, t.Store.prototype.remove = function (t) { this.has(t) && (delete this.store[t], this.length--) }, t.Store.prototype.toJSON = function () { return {store: this.store, length: this.length} }, /*! * lunr.stemmer * Copyright (C) 2014 Oliver Nightingale * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt */ -t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",r="[aeiouy]",i=n+"[^aeiouy]*",o=r+"[aeiou]*",a="^("+i+")?"+o+i,s="^("+i+")?"+o+i+"("+o+")?$",u="^("+i+")?"+o+i+o+i,c="^("+i+")?"+r,l=new RegExp(a),h=new RegExp(u),f=new RegExp(s),d=new RegExp(c),p=/^(.+?)(ss|i)es$/,g=/^(.+?)([^s])s$/,m=/^(.+?)eed$/,y=/^(.+?)(ed|ing)$/,v=/.$/,b=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+i+r+"[^aeiouwxy]$"),w=/^(.+?[^aeiou])y$/,E=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,A=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,k=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,D=/^(.+?)(s|t)(ion)$/,S=/^(.+?)e$/,C=/ll$/,M=new RegExp("^"+i+r+"[^aeiouwxy]$"),T=function(n){var r,i,o,a,s,u,c;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),a=p,s=g,a.test(n)?n=n.replace(a,"$1$2"):s.test(n)&&(n=n.replace(s,"$1$2")),a=m,s=y,a.test(n)){var T=a.exec(n);a=l,a.test(T[1])&&(a=v,n=n.replace(a,""))}else if(s.test(n)){var T=s.exec(n);r=T[1],s=d,s.test(r)&&(n=r,s=b,u=_,c=x,s.test(n)?n+="e":u.test(n)?(a=v,n=n.replace(a,"")):c.test(n)&&(n+="e"))}if(a=w,a.test(n)){var T=a.exec(n);r=T[1],n=r+"i"}if(a=E,a.test(n)){var T=a.exec(n);r=T[1],i=T[2],a=l,a.test(r)&&(n=r+t[i])}if(a=A,a.test(n)){var T=a.exec(n);r=T[1],i=T[2],a=l,a.test(r)&&(n=r+e[i])}if(a=k,s=D,a.test(n)){var T=a.exec(n);r=T[1],a=h,a.test(r)&&(n=r)}else if(s.test(n)){var T=s.exec(n);r=T[1]+T[2],s=h,s.test(r)&&(n=r)}if(a=S,a.test(n)){var T=a.exec(n);r=T[1],a=h,s=f,u=M,(a.test(r)||s.test(r)&&!u.test(r))&&(n=r)}return a=C,s=h,a.test(n)&&s.test(n)&&(a=v,n=n.replace(a,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),/*! +t.stemmer = (function () { var t = {ational: 'ate', tional: 'tion', enci: 'ence', anci: 'ance', izer: 'ize', bli: 'ble', alli: 'al', entli: 'ent', eli: 'e', ousli: 'ous', ization: 'ize', ation: 'ate', ator: 'ate', alism: 'al', iveness: 'ive', fulness: 'ful', ousness: 'ous', aliti: 'al', iviti: 'ive', biliti: 'ble', logi: 'log'}, e = {icate: 'ic', ative: '', alize: 'al', iciti: 'ic', ical: 'ic', ful: '', ness: ''}, n = '[^aeiou]', r = '[aeiouy]', i = n + '[^aeiouy]*', o = r + '[aeiou]*', a = '^(' + i + ')?' + o + i, s = '^(' + i + ')?' + o + i + '(' + o + ')?$', u = '^(' + i + ')?' + o + i + o + i, c = '^(' + i + ')?' + r, l = new RegExp(a), h = new RegExp(u), f = new RegExp(s), d = new RegExp(c), p = /^(.+?)(ss|i)es$/, g = /^(.+?)([^s])s$/, m = /^(.+?)eed$/, y = /^(.+?)(ed|ing)$/, v = /.$/, b = /(at|bl|iz)$/, _ = new RegExp('([^aeiouylsz])\\1$'), x = new RegExp('^' + i + r + '[^aeiouwxy]$'), w = /^(.+?[^aeiou])y$/, E = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/, A = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/, k = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/, D = /^(.+?)(s|t)(ion)$/, S = /^(.+?)e$/, C = /ll$/, M = new RegExp('^' + i + r + '[^aeiouwxy]$'), T = function (n) { var r, i, o, a, s, u, c; if (n.length < 3) return n; if (o = n.substr(0, 1), o == 'y' && (n = o.toUpperCase() + n.substr(1)), a = p, s = g, a.test(n) ? n = n.replace(a, '$1$2') : s.test(n) && (n = n.replace(s, '$1$2')), a = m, s = y, a.test(n)) { var T = a.exec(n); a = l, a.test(T[1]) && (a = v, n = n.replace(a, '')) } else if (s.test(n)) { var T = s.exec(n); r = T[1], s = d, s.test(r) && (n = r, s = b, u = _, c = x, s.test(n) ? n += 'e' : u.test(n) ? (a = v, n = n.replace(a, '')) : c.test(n) && (n += 'e')) } if (a = w, a.test(n)) { var T = a.exec(n); r = T[1], n = r + 'i' } if (a = E, a.test(n)) { var T = a.exec(n); r = T[1], i = T[2], a = l, a.test(r) && (n = r + t[i]) } if (a = A, a.test(n)) { var T = a.exec(n); r = T[1], i = T[2], a = l, a.test(r) && (n = r + e[i]) } if (a = k, s = D, a.test(n)) { var T = a.exec(n); r = T[1], a = h, a.test(r) && (n = r) } else if (s.test(n)) { var T = s.exec(n); r = T[1] + T[2], s = h, s.test(r) && (n = r) } if (a = S, a.test(n)) { var T = a.exec(n); r = T[1], a = h, s = f, u = M, (a.test(r) || s.test(r) && !u.test(r)) && (n = r) } return a = C, s = h, a.test(n) && s.test(n) && (a = v, n = n.replace(a, '')), o == 'y' && (n = o.toLowerCase() + n.substr(1)), n }; return T }()), t.Pipeline.registerFunction(t.stemmer, 'stemmer'), /*! * lunr.stopWordFilter * Copyright (C) 2014 Oliver Nightingale */ -t.stopWordFilter=function(e){return-1===t.stopWordFilter.stopWords.indexOf(e)?e:void 0},t.stopWordFilter.stopWords=new t.SortedSet,t.stopWordFilter.stopWords.length=119,t.stopWordFilter.stopWords.elements=["","a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"],t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),/*! +t.stopWordFilter = function (e) { return t.stopWordFilter.stopWords.indexOf(e) === -1 ? e : void 0 }, t.stopWordFilter.stopWords = new t.SortedSet(), t.stopWordFilter.stopWords.length = 119, t.stopWordFilter.stopWords.elements = ['', 'a', 'able', 'about', 'across', 'after', 'all', 'almost', 'also', 'am', 'among', 'an', 'and', 'any', 'are', 'as', 'at', 'be', 'because', 'been', 'but', 'by', 'can', 'cannot', 'could', 'dear', 'did', 'do', 'does', 'either', 'else', 'ever', 'every', 'for', 'from', 'get', 'got', 'had', 'has', 'have', 'he', 'her', 'hers', 'him', 'his', 'how', 'however', 'i', 'if', 'in', 'into', 'is', 'it', 'its', 'just', 'least', 'let', 'like', 'likely', 'may', 'me', 'might', 'most', 'must', 'my', 'neither', 'no', 'nor', 'not', 'of', 'off', 'often', 'on', 'only', 'or', 'other', 'our', 'own', 'rather', 'said', 'say', 'says', 'she', 'should', 'since', 'so', 'some', 'than', 'that', 'the', 'their', 'them', 'then', 'there', 'these', 'they', 'this', 'tis', 'to', 'too', 'twas', 'us', 'wants', 'was', 'we', 'were', 'what', 'when', 'where', 'which', 'while', 'who', 'whom', 'why', 'will', 'with', 'would', 'yet', 'you', 'your'], t.Pipeline.registerFunction(t.stopWordFilter, 'stopWordFilter'), /*! * lunr.trimmer * Copyright (C) 2014 Oliver Nightingale */ -t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),/*! +t.trimmer = function (t) { return t.replace(/^\W+/, '').replace(/\W+$/, '') }, t.Pipeline.registerFunction(t.trimmer, 'trimmer'), /*! * lunr.stemmer * Copyright (C) 2014 Oliver Nightingale * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt */ -t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,r=t[0],i=t.slice(1);return r in n||(n[r]={docs:{}}),0===i.length?(n[r].docs[e.ref]=e,void(this.length+=1)):this.add(i,e,n[r])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n1e-4});e.length?(a.empty(),$.each(e,function(t,e){var n=document.getElementById(e.ref);a.append("
  • "+$(n).text()+"
  • ")}),r.call(this)):(a.html("
  • "),$(".search-results li").text('No Results Found for "'+this.value+'"'))}else i(),a.removeClass("visible")}function r(){this.value&&o.highlight(this.value,s)}function i(){o.unhighlight(s)}var o,a,s={element:"span",className:"search-highlight"},u=new lunr.Index;u.ref("id"),u.field("title",{boost:10}),u.field("body"),u.pipeline.add(lunr.trimmer,lunr.stopWordFilter),$(t),$(e)}(),/*! jQuery UI - v1.11.3 - 2015-02-12 +jQuery.extend({highlight: function (t, e, n, r) { if (t.nodeType === 3) { var i = t.data.match(e); if (i) { var o = document.createElement(n || 'span'); o.className = r || 'highlight'; var a = t.splitText(i.index); a.splitText(i[0].length); var s = a.cloneNode(!0); return o.appendChild(s), a.parentNode.replaceChild(o, a), 1 } } else if (t.nodeType === 1 && t.childNodes && !/(script|style)/i.test(t.tagName) && (t.tagName !== n.toUpperCase() || t.className !== r)) for (var u = 0; u < t.childNodes.length; u++)u += jQuery.highlight(t.childNodes[u], e, n, r); return 0 }}), jQuery.fn.unhighlight = function (t) { var e = {className: 'highlight', element: 'span'}; return jQuery.extend(e, t), this.find(e.element + '.' + e.className).each(function () { var t = this.parentNode; t.replaceChild(this.firstChild, this), t.normalize() }).end() }, jQuery.fn.highlight = function (t, e) { var n = {className: 'highlight', element: 'span', caseSensitive: !1, wordsOnly: !1}; if (jQuery.extend(n, e), t.constructor === String && (t = [t]), t = jQuery.grep(t, function (t) { return t != '' }), t = jQuery.map(t, function (t) { return t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') }), t.length == 0) return this; var r = n.caseSensitive ? '' : 'i', i = '(' + t.join('|') + ')'; n.wordsOnly && (i = '\\b' + i + '\\b'); var o = new RegExp(i, r); return this.each(function () { jQuery.highlight(this, o, n.element, n.className) }) }, (function () { 'use strict'; function t () { $('h1, h2').each(function () { var t = $(this), e = t.nextUntil('h1, h2'); u.add({id: t.prop('id'), title: t.text(), body: e.text()}) }) } function e () { o = $('.content'), a = $('.search-results'), $('#input-search').on('keyup', n) } function n (t) { if (i(), a.addClass('visible'), t.keyCode === 27 && (this.value = ''), this.value) { var e = u.search(this.value).filter(function (t) { return t.score > 1e-4 }); e.length ? (a.empty(), $.each(e, function (t, e) { var n = document.getElementById(e.ref); a.append("
  • " + $(n).text() + '
  • ') }), r.call(this)) : (a.html('
  • '), $('.search-results li').text('No Results Found for "' + this.value + '"')) } else i(), a.removeClass('visible') } function r () { this.value && o.highlight(this.value, s) } function i () { o.unhighlight(s) } var o, a, s = {element: 'span', className: 'search-highlight'}, u = new lunr.Index(); u.ref('id'), u.field('title', {boost: 10}), u.field('body'), u.pipeline.add(lunr.trimmer, lunr.stopWordFilter), $(t), $(e) }()), /*! jQuery UI - v1.11.3 - 2015-02-12 * http://jqueryui.com * Includes: widget.js * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ -function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t){/*! +(function (t) { typeof define === 'function' && define.amd ? define(['jquery'], t) : t(jQuery) }(function (t) { /*! * jQuery UI Widget 1.11.3 * http://jqueryui.com * @@ -127,7 +129,8 @@ function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery) * * http://api.jqueryui.com/jQuery.widget/ */ -var e=0,n=Array.prototype.slice;t.cleanData=function(e){return function(n){var r,i,o;for(o=0;null!=(i=n[o]);o++)try{r=t._data(i,"events"),r&&r.remove&&t(i).triggerHandler("remove")}catch(a){}e(n)}}(t.cleanData),t.widget=function(e,n,r){var i,o,a,s,u={},c=e.split(".")[0];return e=e.split(".")[1],i=c+"-"+e,r||(r=n,n=t.Widget),t.expr[":"][i.toLowerCase()]=function(e){return!!t.data(e,i)},t[c]=t[c]||{},o=t[c][e],a=t[c][e]=function(t,e){return this._createWidget?void(arguments.length&&this._createWidget(t,e)):new a(t,e)},t.extend(a,o,{version:r.version,_proto:t.extend({},r),_childConstructors:[]}),s=new n,s.options=t.widget.extend({},s.options),t.each(r,function(e,r){return t.isFunction(r)?void(u[e]=function(){var t=function(){return n.prototype[e].apply(this,arguments)},i=function(t){return n.prototype[e].apply(this,t)};return function(){var e,n=this._super,o=this._superApply;return this._super=t,this._superApply=i,e=r.apply(this,arguments),this._super=n,this._superApply=o,e}}()):void(u[e]=r)}),a.prototype=t.widget.extend(s,{widgetEventPrefix:o?s.widgetEventPrefix||e:e},u,{constructor:a,namespace:c,widgetName:e,widgetFullName:i}),o?(t.each(o._childConstructors,function(e,n){var r=n.prototype;t.widget(r.namespace+"."+r.widgetName,a,n._proto)}),delete o._childConstructors):n._childConstructors.push(a),t.widget.bridge(e,a),a},t.widget.extend=function(e){for(var r,i,o=n.call(arguments,1),a=0,s=o.length;s>a;a++)for(r in o[a])i=o[a][r],o[a].hasOwnProperty(r)&&void 0!==i&&(e[r]=t.isPlainObject(i)?t.isPlainObject(e[r])?t.widget.extend({},e[r],i):t.widget.extend({},i):i);return e},t.widget.bridge=function(e,r){var i=r.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,s=n.call(arguments,1),u=this;return a?this.each(function(){var n,r=t.data(this,i);return"instance"===o?(u=r,!1):r?t.isFunction(r[o])&&"_"!==o.charAt(0)?(n=r[o].apply(r,s),n!==r&&void 0!==n?(u=n&&n.jquery?u.pushStack(n.get()):n,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; attempted to call method '"+o+"'")}):(s.length&&(o=t.widget.extend.apply(null,[o].concat(s))),this.each(function(){var e=t.data(this,i);e?(e.option(o||{}),e._init&&e._init()):t.data(this,i,new r(o,this))})),u}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{disabled:!1,create:null},_createWidget:function(n,r){r=t(r||this.defaultElement||this)[0],this.element=t(r),this.uuid=e++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),r!==this&&(t.data(r,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===r&&this.destroy()}}),this.document=t(r.style?r.ownerDocument:r.document||r),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),n),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(e,n){var r,i,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},r=e.split("."),e=r.shift(),r.length){for(i=a[e]=t.widget.extend({},this.options[e]),o=0;o a; a++) for (r in o[a])i = o[a][r], o[a].hasOwnProperty(r) && void 0 !== i && (e[r] = t.isPlainObject(i) ? t.isPlainObject(e[r]) ? t.widget.extend({}, e[r], i) : t.widget.extend({}, i) : i); return e }, t.widget.bridge = function (e, r) { var i = r.prototype.widgetFullName || e; t.fn[e] = function (o) { var a = typeof o === 'string', s = n.call(arguments, 1), u = this; return a ? this.each(function () { var n, r = t.data(this, i); return o === 'instance' ? (u = r, !1) : r ? t.isFunction(r[o]) && o.charAt(0) !== '_' ? (n = r[o].apply(r, s), n !== r && void 0 !== n ? (u = n && n.jquery ? u.pushStack(n.get()) : n, !1) : void 0) : t.error("no such method '" + o + "' for " + e + ' widget instance') : t.error('cannot call methods on ' + e + " prior to initialization; attempted to call method '" + o + "'") }) : (s.length && (o = t.widget.extend.apply(null, [o].concat(s))), this.each(function () { var e = t.data(this, i); e ? (e.option(o || {}), e._init && e._init()) : t.data(this, i, new r(o, this)) })), u } }, t.Widget = function () {}, t.Widget._childConstructors = [], t.Widget.prototype = {widgetName: 'widget', widgetEventPrefix: '', defaultElement: '
    ', options: {disabled: !1, create: null}, _createWidget: function (n, r) { r = t(r || this.defaultElement || this)[0], this.element = t(r), this.uuid = e++, this.eventNamespace = '.' + this.widgetName + this.uuid, this.bindings = t(), this.hoverable = t(), this.focusable = t(), r !== this && (t.data(r, this.widgetFullName, this), this._on(!0, this.element, {remove: function (t) { t.target === r && this.destroy() }}), this.document = t(r.style ? r.ownerDocument : r.document || r), this.window = t(this.document[0].defaultView || this.document[0].parentWindow)), this.options = t.widget.extend({}, this.options, this._getCreateOptions(), n), this._create(), this._trigger('create', null, this._getCreateEventData()), this._init() }, _getCreateOptions: t.noop, _getCreateEventData: t.noop, _create: t.noop, _init: t.noop, destroy: function () { this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr('aria-disabled').removeClass(this.widgetFullName + '-disabled ui-state-disabled'), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass('ui-state-hover'), this.focusable.removeClass('ui-state-focus') }, _destroy: t.noop, widget: function () { return this.element }, option: function (e, n) { var r, i, o, a = e; if (arguments.length === 0) return t.widget.extend({}, this.options); if (typeof e === 'string') if (a = {}, r = e.split('.'), e = r.shift(), r.length) { for (i = a[e] = t.widget.extend({}, this.options[e]), o = 0; o < r.length - 1; o++)i[r[o]] = i[r[o]] || {}, i = i[r[o]]; if (e = r.pop(), arguments.length === 1) return void 0 === i[e] ? null : i[e]; i[e] = n } else { if (arguments.length === 1) return void 0 === this.options[e] ? null : this.options[e]; a[e] = n } return this._setOptions(a), this }, _setOptions: function (t) { var e; for (e in t) this._setOption(e, t[e]); return this }, _setOption: function (t, e) { return this.options[t] = e, t === 'disabled' && (this.widget().toggleClass(this.widgetFullName + '-disabled', !!e), e && (this.hoverable.removeClass('ui-state-hover'), this.focusable.removeClass('ui-state-focus'))), this }, enable: function () { return this._setOptions({disabled: !1}) }, disable: function () { return this._setOptions({disabled: !0}) }, _on: function (e, n, r) { var i, o = this; typeof e !== 'boolean' && (r = n, n = e, e = !1), r ? (n = i = t(n), this.bindings = this.bindings.add(n)) : (r = n, n = this.element, i = this.widget()), t.each(r, function (r, a) { function s () { return e || o.options.disabled !== !0 && !t(this).hasClass('ui-state-disabled') ? (typeof a === 'string' ? o[a] : a).apply(o, arguments) : void 0 } typeof a !== 'string' && (s.guid = a.guid = a.guid || s.guid || t.guid++); var u = r.match(/^([\w:-]*)\s*(.*)$/), c = u[1] + o.eventNamespace, l = u[2]; l ? i.delegate(l, c, s) : n.bind(c, s) }) }, _off: function (e, n) { n = (n || '').split(' ').join(this.eventNamespace + ' ') + this.eventNamespace, e.unbind(n).undelegate(n), this.bindings = t(this.bindings.not(e).get()), this.focusable = t(this.focusable.not(e).get()), this.hoverable = t(this.hoverable.not(e).get()) }, _delay: function (t, e) { function n () { return (typeof t === 'string' ? r[t] : t).apply(r, arguments) } var r = this; return setTimeout(n, e || 0) }, _hoverable: function (e) { this.hoverable = this.hoverable.add(e), this._on(e, {mouseenter: function (e) { t(e.currentTarget).addClass('ui-state-hover') }, mouseleave: function (e) { t(e.currentTarget).removeClass('ui-state-hover') }}) }, _focusable: function (e) { this.focusable = this.focusable.add(e), this._on(e, {focusin: function (e) { t(e.currentTarget).addClass('ui-state-focus') }, focusout: function (e) { t(e.currentTarget).removeClass('ui-state-focus') }}) }, _trigger: function (e, n, r) { var i, o, a = this.options[e]; if (r = r || {}, n = t.Event(n), n.type = (e === this.widgetEventPrefix ? e : this.widgetEventPrefix + e).toLowerCase(), n.target = this.element[0], o = n.originalEvent) for (i in o)i in n || (n[i] = o[i]); return this.element.trigger(n, r), !(t.isFunction(a) && a.apply(this.element[0], [n].concat(r)) === !1 || n.isDefaultPrevented()) }}, t.each({show: 'fadeIn', hide: 'fadeOut'}, function (e, n) { t.Widget.prototype['_' + e] = function (r, i, o) { typeof i === 'string' && (i = {effect: i}); var a, s = i ? i === !0 || typeof i === 'number' ? n : i.effect || n : e; i = i || {}, typeof i === 'number' && (i = {duration: i}), a = !t.isEmptyObject(i), i.complete = o, i.delay && r.delay(i.delay), a && t.effects && t.effects.effect[s] ? r[e](i) : s !== e && r[s] ? r[s](i.duration, i.easing, o) : r.queue(function (n) { t(this)[e](), o && o.call(r[0]), n() }) } }); t.widget +})), /* jquery Tocify - v1.8.0 - 2013-09-16 * http://www.gregfranko.com/jquery.tocify.js/ * Copyright (c) 2013 Greg Franko; Licensed MIT * Modified lightly by Robert Lord to fix a bug I found, @@ -135,9 +138,9 @@ var e=0,n=Array.prototype.slice;t.cleanData=function(e){return function(n){var r * also because I want height caching, since the * height lookup for h1s and h2s was causing serious * lag spikes below 30 fps */ -function(t){"use strict";t(window.jQuery,window,document)}(function(t,e,n,r){"use strict";var i="tocify",o="tocify-focus",a="tocify-hover",s="tocify-hide",u="tocify-header",c="."+u,l="tocify-subheader",h="."+l,f="tocify-item",d="."+f,p="tocify-extend-page",g="."+p;t.widget("toc.tocify",{version:"1.8.0",options:{context:"body",ignoreSelector:null,selectors:"h1, h2, h3",showAndHide:!0,showEffect:"slideDown",showEffectSpeed:"medium",hideEffect:"slideUp",hideEffectSpeed:"medium",smoothScroll:!0,smoothScrollSpeed:"medium",scrollTo:0,showAndHideOnScroll:!0,highlightOnScroll:!0,highlightOffset:40,theme:"bootstrap",extendPage:!0,extendPageOffset:100,history:!0,scrollHistory:!1,hashGenerator:"compact",highlightDefault:!0},_create:function(){var n=this;n.tocifyWrapper=t(".tocify-wrapper"),n.extendPageScroll=!0,n.items=[],n._generateToc(),n.cachedHeights=[],n.cachedAnchors=[],n._addCSSClasses(),n.webkit=function(){for(var t in e)if(t&&-1!==t.toLowerCase().indexOf("webkit"))return!0;return!1}(),n._setEventHandlers(),t(e).load(function(){n._setActiveElement(!0),t("html, body").promise().done(function(){setTimeout(function(){n.extendPageScroll=!1},0)})})},_generateToc:function(){var e,n,r=this,o=r.options.ignoreSelector;return e=t(this.options.context).find(-1!==this.options.selectors.indexOf(",")?this.options.selectors.replace(/ /g,"").substr(0,this.options.selectors.indexOf(",")):this.options.selectors.replace(/ /g,"")),e.length?(r.element.addClass(i),void e.each(function(e){t(this).is(o)||(n=t("