diff --git a/.travis.yml b/.travis.yml index f164e6aa..da1d0feb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,25 +1,31 @@ -sudo: false -dist: xenial -language: python +language: generic +dist: bionic +jobs: + include: + - name: "Python 3.6" + before_install: + - pyenv global 3.6.9 + - name: "Python 3.7" + before_install: + - pyenv global 3.7.5 + - name: "Python 3.8" + before_install: + - pyenv global 3.8.0 cache: - pip: true - directories: - - node_modules -python: - - 3.6 - - 3.7 - - 3.8 + directories: + - $HOME/.cache/pip + - node_modules env: - - DJANGO_SETTINGS_MODULE="babybuddy.settings.travis" + - DJANGO_SETTINGS_MODULE="babybuddy.settings.travis" install: - - rm -rf ~/.nvm && git clone https://github.com/creationix/nvm.git ~/.nvm && (cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`) && source ~/.nvm/nvm.sh && nvm install 8 - - npm install -g gulp-cli && npm install - - pip install pipenv && pipenv install --dev + - nvm use 10 + - npm install -g gulp-cli && npm install + - pip install pipenv && pipenv install --dev before_script: - - gulp lint + - gulp lint script: - - gulp coverage + - gulp coverage after_success: - - pipenv run coveralls + - pipenv run coveralls notifications: - email: false + email: false diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6fa867ad..6a75597b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -81,6 +81,7 @@ newly translated strings. Once the translation is complete, commit the new files and changes to a fork and [create a pull request](#pull-request-process) for review. + For more information on the Django translation process, see Django's documentation section: [Translation](https://docs.djangoproject.com/en/3.0/topics/i18n/translation/). @@ -89,7 +90,7 @@ documentation section: [Translation](https://docs.djangoproject.com/en/3.0/topic ### Requirements - Python 3.6+, pip, pipenv -- NodeJS 8.x+ and NPM 5.x+ +- NodeJS 10.x+ and NPM 6.x+ - Gulp ### Installation diff --git a/package-lock.json b/package-lock.json index 0dfd73a6..fae2865b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,29 +15,30 @@ } }, "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.3" } }, "@babel/core": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", - "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz", + "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.7", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.7", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helpers": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", "json5": "^2.1.0", "lodash": "^4.17.13", "resolve": "^1.3.2", @@ -72,12 +73,12 @@ } }, "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", "dev": true, "requires": { - "@babel/types": "^7.7.4", + "@babel/types": "^7.8.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -92,49 +93,49 @@ } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" } }, "@babel/helpers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", - "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.3.tgz", + "integrity": "sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==", "dev": true, "requires": { - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -143,43 +144,43 @@ } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/runtime": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz", - "integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.3.tgz", + "integrity": "sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w==", "dev": true, "requires": { "regenerator-runtime": "^0.13.2" } }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -203,9 +204,9 @@ } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -294,16 +295,6 @@ "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", "dev": true }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, "@nodelib/fs.scandir": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", @@ -363,6 +354,16 @@ "@turf/meta": "6.x" } }, + "@turf/bbox": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.0.1.tgz", + "integrity": "sha512-EGgaRLettBG25Iyx7VyUINsPpVj1x3nFQFiGS3ER8KCI1MximzNLsam3eXRabqQDjyAKyAE1bJ4EZEpGvspQxw==", + "dev": true, + "requires": { + "@turf/helpers": "6.x", + "@turf/meta": "6.x" + } + }, "@turf/centroid": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-6.0.2.tgz", @@ -417,12 +418,24 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "dev": true + }, "@types/node": { "version": "12.12.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.7.tgz", "integrity": "sha512-E6Zn0rffhgd130zbCbAr/JdXfXkoOUFAKNs/rF8qnafSJ8KYaA/j3oz7dcwal+lYjLA7xvdd5J4wdYpCTlP8+w==", "dev": true }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -533,15 +546,23 @@ } }, "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", + "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "dependencies": { + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + } } }, "align-text": { @@ -843,12 +864,6 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -940,17 +955,17 @@ "dev": true }, "autoprefixer": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.3.tgz", - "integrity": "sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q==", + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", + "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", "dev": true, "requires": { - "browserslist": "^4.8.0", - "caniuse-lite": "^1.0.30001012", + "browserslist": "^4.8.3", + "caniuse-lite": "^1.0.30001020", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.23", + "postcss": "^7.0.26", "postcss-value-parser": "^4.0.2" }, "dependencies": { @@ -974,9 +989,9 @@ "dev": true }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", "dev": true }, "bach": { @@ -1209,14 +1224,14 @@ } }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.5.tgz", + "integrity": "sha512-4LMHuicxkabIB+n9874jZX/az1IaZ5a+EUuvD7KFOu9x/Bd5YHyO0DIz2ls/Kl8g0ItS4X/ilEgf4T1Br0lgSg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001022", + "electron-to-chromium": "^1.3.338", + "node-releases": "^1.1.46" } }, "buble": { @@ -1304,12 +1319,6 @@ "unset-value": "^1.0.0" } }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1341,9 +1350,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001018", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001018.tgz", - "integrity": "sha512-GTHI7xdD2EX/U9UgNCEdekriT81N6ZwipsTGKAI1hrv3VEC96BvS5RVoc9Odlf9ftS92oxgflAGbYLi8UjIiVA==", + "version": "1.0.30001022", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001022.tgz", + "integrity": "sha512-FjwPPtt/I07KyLPkBQ0g7/XuZg6oUkYBVnPHNj3VHJbOjmmJ/GdSo/GUY6MwINEQvjhP6WZVbX8Tvms8xh0D5A==", "dev": true }, "canvas-fit": { @@ -1416,27 +1425,27 @@ } }, "character-entities": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz", - "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true }, "character-entities-html4": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz", - "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", "dev": true }, "character-entities-legacy": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz", - "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true }, "character-reference-invalid": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz", - "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true }, "chokidar": { @@ -1600,9 +1609,9 @@ "dev": true }, "collapse-white-space": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz", - "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", "dev": true }, "collection-map": { @@ -1718,9 +1727,9 @@ } }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" @@ -2500,6 +2509,15 @@ "is-obj": "^1.0.0" } }, + "dotignore": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", + "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "double-bits": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/double-bits/-/double-bits-1.1.1.tgz", @@ -2586,9 +2604,9 @@ } }, "earcut": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.1.tgz", - "integrity": "sha512-5jIMi2RB3HtGPHcYd9Yyl0cczo84y+48lgKPxMijliNQaKAHEZJbdzLmKmdxG/mCdS/YD9DQ1gihL8mxzR0F9w==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.2.tgz", + "integrity": "sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ==", "dev": true }, "ecc-jsbn": { @@ -2611,9 +2629,9 @@ } }, "electron-to-chromium": { - "version": "1.3.323", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.323.tgz", - "integrity": "sha512-c7pOUGnqNv6otzwcedViWOTGMEUG70PkhrTzVtc20Txh9nDC4s8zWvocJl7q+OpoC0ACXtxud8PX2y8zk/RZiw==", + "version": "1.3.340", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz", + "integrity": "sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww==", "dev": true }, "element-size": { @@ -2662,9 +2680,9 @@ } }, "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", @@ -2756,12 +2774,12 @@ "dev": true }, "escodegen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.1.tgz", - "integrity": "sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.13.0.tgz", + "integrity": "sha512-eYk2dCkxR07DsHA/X2hRBj0CFAZeri/LyDMc0C8JT1Hqi6JnVpMhJ7XFITbb0+yZS3lVkaPL2oCkZ3AVmeVbMw==", "dev": true, "requires": { - "esprima": "^3.1.3", + "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", @@ -2778,9 +2796,9 @@ } }, "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "estraverse": { @@ -3007,12 +3025,6 @@ "time-stamp": "^1.0.0" } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, "fast-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.0.tgz", @@ -3977,6 +3989,12 @@ "globule": "^1.0.0" } }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, "geojson-vt": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", @@ -4230,9 +4248,9 @@ } }, "gl-plot3d": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gl-plot3d/-/gl-plot3d-2.3.0.tgz", - "integrity": "sha512-qg269QiLpaw16d2D5Gz9fa8vsLcA8kbX/cv1u9S7BsH6jD9qGYxsY8iWJ8ea9/68WhPS5En2kUavkXINkmHsOQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/gl-plot3d/-/gl-plot3d-2.4.0.tgz", + "integrity": "sha512-ZPs7gvWaCqK99GXoB0XJTMTLpChB/CiDUt3MthIawVlFhknSJLNPAJSbUU3f4pWzKCbbGtVARQr/i6XdM3MnKA==", "dev": true, "requires": { "3d-view": "^2.0.0", @@ -4565,12 +4583,6 @@ "unique-stream": "^2.0.2" } }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, "glob-watcher": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", @@ -4660,9 +4672,9 @@ "dev": true }, "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.0.tgz", + "integrity": "sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg==", "dev": true, "requires": { "glob": "~7.1.1", @@ -5152,14 +5164,13 @@ } }, "gulp-stylelint": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/gulp-stylelint/-/gulp-stylelint-11.0.0.tgz", - "integrity": "sha512-Hk2DungSqeWIye5hgmB36IMN9oIIsOBieAaQZw0HAVuIljDGcfH6ng0wmJf3G418jv6KCdgpTZb0EIN1L5KXEw==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/gulp-stylelint/-/gulp-stylelint-13.0.0.tgz", + "integrity": "sha512-qFWBXnYDsGy6ttzqptctMZjJhhGc0FdFE+UNPlj/5fTyuUo5mfxcc7pzN4hIJnvB79BO1WikLtdtXuC/G2AhGA==", "dev": true, "requires": { "chalk": "^3.0.0", "fancy-log": "^1.3.3", - "mkdirp": "^0.5.1", "plugin-error": "^1.0.1", "source-map": "^0.7.3", "strip-ansi": "^6.0.0", @@ -5301,22 +5312,14 @@ "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - } } }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -5454,9 +5457,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -6249,21 +6252,12 @@ } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + "p-locate": "^4.1.0" } }, "lodash": { @@ -6351,9 +6345,9 @@ } }, "magic-string": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.5.tgz", - "integrity": "sha512-vIO/BOm9odBHBAGwv0gZPLJeO9IpwliiIc0uPeAW93rrFMJ/R3M665IAEfOU/IW3kD4S9AtEn76lfTn1Yif+9A==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.6.tgz", + "integrity": "sha512-3a5LOMSGoCTH5rbqobC2HuDNRtE2glHZ8J7pK+QZYppyWA36yuNpsX994rIY2nCuyP7CZYy7lQq/X2jygiZ89g==", "dev": true, "requires": { "sourcemap-codec": "^1.4.4" @@ -6473,9 +6467,9 @@ } }, "markdown-escapes": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", - "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", "dev": true }, "markdown-table": { @@ -6558,9 +6552,9 @@ "dev": true }, "mathml-tag-names": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz", - "integrity": "sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true }, "matrix-camera-controller": { @@ -6644,20 +6638,26 @@ } }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", "dev": true }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": "1.43.0" } }, + "min-indent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz", + "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -6674,9 +6674,9 @@ "dev": true }, "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.0.2.tgz", + "integrity": "sha512-seq4hpWkYSUh1y7NXxzucwAN9yVlBc3Upgdjz8vLCP97jG8kaOmzYrVH/m7tQ1NYD1wdtZbSLfdy4zFmRWuc/w==", "dev": true, "requires": { "arrify": "^1.0.1", @@ -6816,8 +6816,7 @@ "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true + "dev": true }, "nanomatch": { "version": "1.2.13", @@ -6839,9 +6838,9 @@ } }, "ndarray": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.18.tgz", - "integrity": "sha1-tg06cyJOxVXQ+qeXEeUCRI/T95M=", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz", + "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==", "dev": true, "requires": { "iota-array": "^1.0.0", @@ -6985,9 +6984,9 @@ } }, "node-releases": { - "version": "1.1.44", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz", - "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==", + "version": "1.1.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.47.tgz", + "integrity": "sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA==", "dev": true, "requires": { "semver": "^6.3.0" @@ -7002,9 +7001,9 @@ } }, "node-sass": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", - "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz", + "integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==", "dev": true, "requires": { "async-foreach": "^0.1.3", @@ -7014,7 +7013,7 @@ "get-stdin": "^4.0.1", "glob": "^7.0.3", "in-publish": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.15", "meow": "^3.7.0", "mkdirp": "^0.5.1", "nan": "^2.13.2", @@ -7045,12 +7044,6 @@ "supports-color": "^2.0.0" } }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -7358,21 +7351,21 @@ } }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.2.0" } }, "p-map": { @@ -7385,9 +7378,9 @@ } }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "pad-left": { @@ -7657,14 +7650,15 @@ } }, "plotly.js": { - "version": "1.51.3", - "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-1.51.3.tgz", - "integrity": "sha512-1HsGdm+TPkJzxNvC3Whwh2U97FGrwCVDJ+W6s202qV5hJ0GQjqokPxGZalnjZDBLm0E1QAdQmiXBRVl10Pw+0A==", + "version": "1.52.1", + "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-1.52.1.tgz", + "integrity": "sha512-GLNwAu20zwRZrfjrSRUZHXyDulDRh1yfPBV5SLqy5AdGefb6CK2QCBbMcGlhV2P14oJwQ8vd1wqTZVZE9xQ9Rw==", "dev": true, "requires": { "@plotly/d3-sankey": "0.7.2", "@plotly/d3-sankey-circular": "0.33.1", "@turf/area": "^6.0.1", + "@turf/bbox": "^6.0.1", "@turf/centroid": "^6.0.2", "alpha-shape": "^1.0.0", "canvas-fit": "^1.5.0", @@ -7685,7 +7679,7 @@ "gl-heatmap2d": "^1.0.5", "gl-line3d": "^1.1.11", "gl-mat4": "^1.2.0", - "gl-mesh3d": "^2.1.3", + "gl-mesh3d": "^2.2.0", "gl-plot2d": "^1.4.2", "gl-plot3d": "^2.3.0", "gl-pointcloud2d": "^1.0.2", @@ -7833,9 +7827,9 @@ } }, "popper.js": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.0.tgz", - "integrity": "sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", "dev": true }, "posix-character-classes": { @@ -7904,9 +7898,9 @@ } }, "postcss-jsx": { - "version": "0.36.3", - "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.3.tgz", - "integrity": "sha512-yV8Ndo6KzU8eho5mCn7LoLUGPkXrRXRjhMpX4AaYJ9wLJPv099xbtpbRQ8FrPnzVxb/cuMebbPR7LweSt+hTfA==", + "version": "0.36.4", + "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.4.tgz", + "integrity": "sha512-jwO/7qWUvYuWYnpOb0+4bIIgJt7003pgU3P6nETBLaOyBXuTD55ho21xnals5nBrlpTIFodyd3/jBi6UO3dHvA==", "dev": true, "requires": { "@babel/core": ">=7.2.2" @@ -8052,9 +8046,9 @@ "dev": true }, "protocol-buffers-schema": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz", - "integrity": "sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz", + "integrity": "sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA==", "dev": true }, "pseudomap": { @@ -8064,9 +8058,9 @@ "dev": true }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", "dev": true }, "pump": { @@ -8152,9 +8146,9 @@ } }, "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, "quickselect": { @@ -8806,12 +8800,28 @@ "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "robust-compress": { @@ -9312,9 +9322,9 @@ "dev": true }, "sourcemap-codec": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.7.tgz", - "integrity": "sha512-RuN23NzhAOuUtaivhcrjXx1OPXsFeH9m5sI373/U7+tGLKihjUyboZAzOadytMjnqHp1f45RGk1IzDKCpDpSYA==", + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, "sparkles": { @@ -9755,12 +9765,12 @@ "dev": true }, "stylelint": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-12.0.1.tgz", - "integrity": "sha512-1mn39pqZiC/e8KUPoRMc1WMM83Upb2ILaSGxkCvKxALHutEOs2txcPQocJiXdO4Zx4FY4prGqjlkwrbthAxqig==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.0.0.tgz", + "integrity": "sha512-6sjgOJbM3iLhnUtmRO0J1vvxie9VnhIZX/2fCehjylv9Gl9u0ytehGCTm9Lhw2p1F8yaNZn5UprvhCB8C3g/Tg==", "dev": true, "requires": { - "autoprefixer": "^9.7.1", + "autoprefixer": "^9.7.3", "balanced-match": "^1.0.0", "chalk": "^3.0.0", "cosmiconfig": "^6.0.0", @@ -9769,7 +9779,7 @@ "file-entry-cache": "^5.0.1", "get-stdin": "^7.0.0", "global-modules": "^2.0.0", - "globby": "^9.2.0", + "globby": "^11.0.0", "globjoin": "^0.1.4", "html-tags": "^3.1.0", "ignore": "^5.1.4", @@ -9780,10 +9790,10 @@ "lodash": "^4.17.15", "log-symbols": "^3.0.0", "mathml-tag-names": "^2.1.1", - "meow": "^5.0.0", + "meow": "^6.0.0", "micromatch": "^4.0.2", "normalize-selector": "^0.2.0", - "postcss": "^7.0.21", + "postcss": "^7.0.26", "postcss-html": "^0.36.0", "postcss-jsx": "^0.36.3", "postcss-less": "^3.1.4", @@ -9810,12 +9820,6 @@ "write-file-atomic": "^3.0.1" }, "dependencies": { - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -9832,30 +9836,30 @@ "color-convert": "^2.0.1" } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "fill-range": "^7.0.1" } }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.1.1.tgz", + "integrity": "sha512-kEPCddRFChEzO0d6w61yh0WbBiSv9gBnfZWGfXRYPlGqIdIGef6HMR6pgqVSEWCYkrp8B0AtEpEXNY+Jx0xk1A==", "dev": true, "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" } }, "chalk": { @@ -9892,50 +9896,17 @@ "ms": "^2.1.1" } }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", + "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", "dev": true, "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2" } }, "fill-range": { @@ -9948,12 +9919,13 @@ } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "get-stdin": { @@ -9962,18 +9934,13 @@ "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", "dev": true }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "is-glob": "^4.0.1" } }, "global-modules": { @@ -9997,33 +9964,17 @@ } }, "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz", + "integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" } }, "has-flag": { @@ -10033,9 +9984,9 @@ "dev": true }, "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, "is-fullwidth-code-point": { @@ -10050,47 +10001,29 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", "dev": true }, "meow": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", - "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.0.0.tgz", + "integrity": "sha512-x4rYsjigPBDAxY+BGuK83YLhUIqui5wYyZoqb6QJCUOs+0fiYq+i/NV4Jt8OgIfObZFxG9iTyvLDu4UTohGTFw==", "dev": true, "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0", - "yargs-parser": "^10.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.1.1", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.0.0", + "minimist-options": "^4.0.1", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.0", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.8.1", + "yargs-parser": "^16.1.0" } }, "micromatch": { @@ -10101,17 +10034,6 @@ "requires": { "braces": "^3.0.1", "picomatch": "^2.0.5" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - } } }, "ms": { @@ -10120,68 +10042,75 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", "dev": true, "requires": { - "pify": "^3.0.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true } } }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" } }, "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" } }, "string-width": { @@ -10204,17 +10133,14 @@ "ansi-regex": "^5.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } }, "supports-color": { "version": "7.1.0", @@ -10235,18 +10161,19 @@ } }, "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", "dev": true }, "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", + "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -10460,13 +10387,14 @@ } }, "tape": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.12.1.tgz", - "integrity": "sha512-xoK2ariLmdGxqyXhhxfIZlr0czNB8hNJeVQmHN4D7ZyBn30GUoa4q2oM4cX8jNhnj1mtILXn1ugbfxc0tTDKtA==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.0.tgz", + "integrity": "sha512-J/hvA+GJnuWJ0Sj8Z0dmu3JgMNU+MmusvkCT7+SN4/2TklW18FNCp/UuHIEhPZwHfy4sXfKYgC7kypKg4umbOw==", "dev": true, "requires": { "deep-equal": "~1.1.1", "defined": "~1.0.0", + "dotignore": "~0.1.2", "for-each": "~0.3.3", "function-bind": "~1.1.1", "glob": "~7.1.6", @@ -10475,7 +10403,7 @@ "is-regex": "~1.0.5", "minimist": "~1.2.0", "object-inspect": "~1.7.0", - "resolve": "~1.14.1", + "resolve": "~1.14.2", "resumer": "~0.0.0", "string.prototype.trim": "~1.2.1", "through": "~2.3.8" @@ -10502,9 +10430,9 @@ "dev": true }, "resolve": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz", - "integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", + "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -10850,6 +10778,12 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "type-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz", @@ -10863,9 +10797,9 @@ "dev": true }, "typedarray-pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/typedarray-pool/-/typedarray-pool-1.1.0.tgz", - "integrity": "sha1-0RT0hIAUifU+yrXoCIqiMET0mNk=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typedarray-pool/-/typedarray-pool-1.2.0.tgz", + "integrity": "sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==", "dev": true, "requires": { "bit-twiddle": "^1.0.0", @@ -11213,9 +11147,9 @@ } }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, "v8-compile-cache": { diff --git a/package.json b/package.json index 13d5d173..fe748979 100644 --- a/package.json +++ b/package.json @@ -17,14 +17,14 @@ "gulp-sass": "^4.0.2", "gulp-sass-glob": "^1.1.0", "gulp-spawn": "^0.4.5", - "gulp-stylelint": "^11.0.0", + "gulp-stylelint": "^13.0.0", "gulp-uglify": "^3.0.2", "jquery": "^3.4.1", "moment": "^2.24.0", - "plotly.js": "^1.51.3", - "popper.js": "^1.16.0", + "plotly.js": "^1.52.1", + "popper.js": "^1.16.1", "pump": "^3.0.0", - "stylelint": "^12.0.1", + "stylelint": "^13.0.0", "stylelint-config-recommended-scss": "^4.1.0", "stylelint-order": "^4.0.0", "stylelint-scss": "^3.13.0", diff --git a/static/babybuddy/js/graph.8129e325fb11.js.gz b/static/babybuddy/js/graph.8129e325fb11.js.gz deleted file mode 100644 index c12d6bce..00000000 Binary files a/static/babybuddy/js/graph.8129e325fb11.js.gz and /dev/null differ diff --git a/static/babybuddy/js/graph.8129e325fb11.js b/static/babybuddy/js/graph.8b669d614c06.js similarity index 96% rename from static/babybuddy/js/graph.8129e325fb11.js rename to static/babybuddy/js/graph.8b669d614c06.js index 161e3669..9f3ffac5 100644 --- a/static/babybuddy/js/graph.8129e325fb11.js +++ b/static/babybuddy/js/graph.8b669d614c06.js @@ -1,6 +1,6 @@ /** -* plotly.js (cartesian) v1.51.3 -* Copyright 2012-2019, Plotly, Inc. +* plotly.js (cartesian) v1.52.1 +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * Licensed under the MIT license */ @@ -74,7 +74,7 @@ for(var selector in rules) { },{"../src/lib":169}],2:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -87,7 +87,7 @@ module.exports = _dereq_('../src/traces/bar'); },{"../src/traces/bar":276}],3:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -98,9 +98,9 @@ module.exports = _dereq_('../src/traces/bar'); module.exports = _dereq_('../src/traces/box'); -},{"../src/traces/box":290}],4:[function(_dereq_,module,exports){ +},{"../src/traces/box":291}],4:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -111,9 +111,9 @@ module.exports = _dereq_('../src/traces/box'); module.exports = _dereq_('../src/traces/contour'); -},{"../src/traces/contour":310}],5:[function(_dereq_,module,exports){ +},{"../src/traces/contour":311}],5:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -126,7 +126,7 @@ module.exports = _dereq_('../src/core'); },{"../src/core":151}],6:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -137,9 +137,9 @@ module.exports = _dereq_('../src/core'); module.exports = _dereq_('../src/traces/heatmap'); -},{"../src/traces/heatmap":326}],7:[function(_dereq_,module,exports){ +},{"../src/traces/heatmap":327}],7:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -150,9 +150,9 @@ module.exports = _dereq_('../src/traces/heatmap'); module.exports = _dereq_('../src/traces/histogram'); -},{"../src/traces/histogram":344}],8:[function(_dereq_,module,exports){ +},{"../src/traces/histogram":345}],8:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -163,9 +163,9 @@ module.exports = _dereq_('../src/traces/histogram'); module.exports = _dereq_('../src/traces/histogram2d'); -},{"../src/traces/histogram2d":350}],9:[function(_dereq_,module,exports){ +},{"../src/traces/histogram2d":351}],9:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -176,9 +176,9 @@ module.exports = _dereq_('../src/traces/histogram2d'); module.exports = _dereq_('../src/traces/histogram2dcontour'); -},{"../src/traces/histogram2dcontour":354}],10:[function(_dereq_,module,exports){ +},{"../src/traces/histogram2dcontour":355}],10:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -189,9 +189,9 @@ module.exports = _dereq_('../src/traces/histogram2dcontour'); module.exports = _dereq_('../src/traces/image'); -},{"../src/traces/image":361}],11:[function(_dereq_,module,exports){ +},{"../src/traces/image":362}],11:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -220,7 +220,7 @@ module.exports = Plotly; },{"./bar":2,"./box":3,"./contour":4,"./core":5,"./heatmap":6,"./histogram":7,"./histogram2d":8,"./histogram2dcontour":9,"./image":10,"./pie":12,"./scatterternary":13,"./violin":14}],12:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -231,9 +231,9 @@ module.exports = Plotly; module.exports = _dereq_('../src/traces/pie'); -},{"../src/traces/pie":370}],13:[function(_dereq_,module,exports){ +},{"../src/traces/pie":371}],13:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -244,9 +244,9 @@ module.exports = _dereq_('../src/traces/pie'); module.exports = _dereq_('../src/traces/scatterternary'); -},{"../src/traces/scatterternary":410}],14:[function(_dereq_,module,exports){ +},{"../src/traces/scatterternary":411}],14:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -257,7 +257,7 @@ module.exports = _dereq_('../src/traces/scatterternary'); module.exports = _dereq_('../src/traces/violin'); -},{"../src/traces/violin":418}],15:[function(_dereq_,module,exports){ +},{"../src/traces/violin":419}],15:[function(_dereq_,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -14679,7 +14679,7 @@ else { },{}],35:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -14750,7 +14750,7 @@ module.exports = [ },{}],36:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15105,7 +15105,7 @@ module.exports = templatedArray('annotation', { },{"../../plot_api/plot_template":203,"../../plots/cartesian/constants":219,"../../plots/font_attributes":239,"./arrow_paths":35}],37:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15194,7 +15194,7 @@ function calcAxisExpansion(ann, ax) { },{"../../lib":169,"../../plots/cartesian/axes":213,"./draw":42}],38:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15332,7 +15332,7 @@ function clickData2r(d, ax) { },{"../../lib":169,"../../plot_api/plot_template":203,"../../registry":258}],39:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15411,7 +15411,7 @@ module.exports = function handleAnnotationCommonDefaults(annIn, annOut, fullLayo },{"../../lib":169,"../color":51}],40:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15474,7 +15474,7 @@ module.exports = function convertCoords(gd, ax, newType, doExtra) { },{"../../lib/to_log_range":192,"fast-isnumeric":18}],41:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15581,7 +15581,7 @@ function handleAnnotationDefaults(annIn, annOut, fullLayout) { },{"../../lib":169,"../../plots/array_container_defaults":209,"../../plots/cartesian/axes":213,"./attributes":36,"./common_defaults":39}],42:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16281,7 +16281,7 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { },{"../../lib":169,"../../lib/setcursor":188,"../../lib/svg_text_utils":190,"../../plot_api/plot_template":203,"../../plots/cartesian/axes":213,"../../plots/plots":245,"../../registry":258,"../color":51,"../dragelement":69,"../drawing":72,"../fx":89,"./draw_arrow_head":43,"d3":16}],43:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16432,7 +16432,7 @@ module.exports = function drawArrowHead(el3, ends, options) { },{"../color":51,"./arrow_paths":35,"d3":16}],44:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16466,7 +16466,7 @@ module.exports = { },{"../../plots/cartesian/include_components":223,"./attributes":36,"./calc_autorange":37,"./click":38,"./convert_coords":40,"./defaults":41,"./draw":42}],45:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16554,7 +16554,7 @@ module.exports = overrideAll(templatedArray('annotation', { },{"../../plot_api/edit_types":196,"../../plot_api/plot_template":203,"../annotations/attributes":36}],46:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16619,7 +16619,7 @@ function mockAnnAxes(ann, scene) { },{"../../lib":169,"../../plots/cartesian/axes":213}],47:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16695,7 +16695,7 @@ function handleAnnotationDefaults(annIn, annOut, sceneLayout, opts) { },{"../../lib":169,"../../plots/array_container_defaults":209,"../../plots/cartesian/axes":213,"../annotations/common_defaults":39,"./attributes":45}],48:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16747,7 +16747,7 @@ module.exports = function draw(scene) { },{"../../plots/gl3d/project":242,"../annotations/draw":42}],49:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16795,7 +16795,7 @@ function includeGL3D(layoutIn, layoutOut) { },{"../../lib":169,"../../registry":258,"./attributes":45,"./convert":46,"./defaults":47,"./draw":48}],50:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16835,7 +16835,7 @@ exports.lightFraction = 100 * (0xe - 0x4) / (0xf - 0x4); },{}],51:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17009,7 +17009,7 @@ function cleanOne(val) { },{"./attributes":50,"fast-isnumeric":18,"tinycolor2":34}],52:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17188,7 +17188,7 @@ module.exports = overrideAll({ },{"../../lib/extend":164,"../../plot_api/edit_types":196,"../../plots/cartesian/layout_attributes":225,"../../plots/font_attributes":239}],53:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17216,7 +17216,7 @@ module.exports = { },{}],54:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17282,7 +17282,7 @@ module.exports = function colorbarDefaults(containerIn, containerOut, layout) { },{"../../lib":169,"../../plot_api/plot_template":203,"../../plots/cartesian/tick_label_defaults":232,"../../plots/cartesian/tick_mark_defaults":233,"../../plots/cartesian/tick_value_defaults":234,"./attributes":52}],55:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18008,7 +18008,7 @@ module.exports = { },{"../../constants/alignment":145,"../../lib":169,"../../lib/extend":164,"../../lib/setcursor":188,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../plots/cartesian/axis_defaults":215,"../../plots/cartesian/layout_attributes":225,"../../plots/cartesian/position_defaults":228,"../../plots/plots":245,"../../registry":258,"../color":51,"../colorscale/helpers":62,"../dragelement":69,"../drawing":72,"../titles":138,"./constants":53,"d3":16,"tinycolor2":34}],56:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18027,7 +18027,7 @@ module.exports = function hasColorbar(container) { },{"../../lib":169}],57:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18049,7 +18049,7 @@ module.exports = { },{"./attributes":52,"./defaults":54,"./draw":55,"./has_colorbar":56}],58:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18257,7 +18257,7 @@ module.exports = function colorScaleAttrs(context, opts) { },{"../../lib/regex":184,"../colorbar/attributes":52,"./scales.js":66}],59:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18336,7 +18336,7 @@ module.exports = function calc(gd, trace, opts) { },{"../../lib":169,"./helpers":62,"fast-isnumeric":18}],60:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18413,7 +18413,7 @@ module.exports = function crossTraceDefaults(fullData, fullLayout) { },{"../../lib":169,"./helpers":62}],61:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18529,13 +18529,16 @@ module.exports = function colorScaleDefaults(parentContIn, parentContOut, layout if(prefix && inTrace) showScaleDflt = hasColorbar(containerIn); var showScale = coerce(prefix + 'showscale', showScaleDflt); - if(showScale) colorbarDefaults(containerIn, containerOut, layout); + if(showScale) { + if(prefix && template) containerOut._template = template; + colorbarDefaults(containerIn, containerOut, layout); + } } }; },{"../../lib":169,"../../registry":258,"../colorbar/defaults":54,"../colorbar/has_colorbar":56,"./scales":66,"fast-isnumeric":18}],62:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18775,7 +18778,7 @@ module.exports = { },{"../../lib":169,"../color":51,"./scales":66,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],63:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18817,7 +18820,7 @@ module.exports = { },{"./attributes":58,"./calc":59,"./cross_trace_defaults":60,"./defaults":61,"./helpers":62,"./layout_attributes":64,"./layout_defaults":65,"./scales":66}],64:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18878,7 +18881,7 @@ module.exports = { },{"../../lib/extend":164,"./attributes":58,"./scales":66}],65:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18929,7 +18932,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) { },{"../../lib":169,"../../plot_api/plot_template":203,"./defaults":61,"./layout_attributes":64}],66:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19133,7 +19136,7 @@ module.exports = { },{"tinycolor2":34}],67:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19166,7 +19169,7 @@ module.exports = function align(v, dv, v0, v1, anchor) { },{}],68:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19204,7 +19207,7 @@ module.exports = function getCursor(x, y, xanchor, yanchor) { },{"../../lib":169}],69:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19496,7 +19499,7 @@ function pointerOffset(e) { },{"../../lib":169,"../../plots/cartesian/constants":219,"./align":67,"./cursor":68,"./unhover":70,"has-hover":20,"has-passive-events":21,"mouse-event-offset":24}],70:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19551,7 +19554,7 @@ unhover.raw = function raw(gd, evt) { },{"../../lib/dom":162,"../../lib/events":163,"../../lib/throttle":191,"../fx/constants":84}],71:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19576,7 +19579,7 @@ exports.dash = { },{}],72:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19794,21 +19797,31 @@ drawing.symbolList = []; Object.keys(SYMBOLDEFS).forEach(function(k) { var symDef = SYMBOLDEFS[k]; - drawing.symbolList = drawing.symbolList.concat( - [symDef.n, k, symDef.n + 100, k + '-open']); - drawing.symbolNames[symDef.n] = k; - drawing.symbolFuncs[symDef.n] = symDef.f; + var n = symDef.n; + drawing.symbolList.push( + n, + k, + n + 100, + k + '-open' + ); + drawing.symbolNames[n] = k; + drawing.symbolFuncs[n] = symDef.f; + if(symDef.needLine) { - drawing.symbolNeedLines[symDef.n] = true; + drawing.symbolNeedLines[n] = true; } if(symDef.noDot) { - drawing.symbolNoDot[symDef.n] = true; + drawing.symbolNoDot[n] = true; } else { - drawing.symbolList = drawing.symbolList.concat( - [symDef.n + 200, k + '-dot', symDef.n + 300, k + '-open-dot']); + drawing.symbolList.push( + n + 200, + k + '-dot', + n + 300, + k + '-open-dot' + ); } if(symDef.noFill) { - drawing.symbolNoFill[symDef.n] = true; + drawing.symbolNoFill[n] = true; } }); @@ -19830,8 +19843,9 @@ drawing.symbolNumber = function(v) { v = drawing.symbolNames.indexOf(v); if(v >= 0) { v += vbase; } } - if((v % 100 >= MAXSYMBOL) || v >= 400) { return 0; } - return Math.floor(Math.max(v, 0)); + + return (v % 100 >= MAXSYMBOL || v >= 400) ? + 0 : Math.floor(Math.max(v, 0)); }; function makePointPath(symbolNumber, r) { @@ -19877,9 +19891,10 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) { } } - var fullID = 'g' + gd._fullLayout._uid + '-' + gradientID; + var fullLayout = gd._fullLayout; + var fullID = 'g' + fullLayout._uid + '-' + gradientID; - var gradient = gd._fullLayout._defs.select('.gradients') + var gradient = fullLayout._defs.select('.gradients') .selectAll('#' + fullID) .data([type + colorStops.join(';')], Lib.identity); @@ -19910,6 +19925,13 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) { sel.style(prop, getFullUrl(fullID, gd)) .style(prop + '-opacity', null); + + var className2query = function(s) { + return '.' + s.attr('class').replace(/\s/g, '.'); + }; + var k = className2query(d3.select(sel.node().parentNode)) + + '>' + className2query(sel); + fullLayout._gradientUrlQueryParts[k] = 1; }; /* @@ -19920,8 +19942,14 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) { * The upside of this is arbitrary points can share gradient defs */ drawing.initGradients = function(gd) { - var gradientsGroup = Lib.ensureSingle(gd._fullLayout._defs, 'g', 'gradients'); + var fullLayout = gd._fullLayout; + + var gradientsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'gradients'); gradientsGroup.selectAll('linearGradient,radialGradient').remove(); + + // initialize stash of query parts filled in Drawing.gradient, + // used to fix URL strings during image exports + fullLayout._gradientUrlQueryParts = {}; }; @@ -20737,9 +20765,9 @@ drawing.setTextPointsScale = function(selection, xScale, yScale) { }); }; -},{"../../components/fx/helpers":86,"../../constants/alignment":145,"../../constants/interactions":148,"../../constants/xmlns_namespaces":150,"../../lib":169,"../../lib/svg_text_utils":190,"../../registry":258,"../../traces/scatter/make_bubble_size_func":394,"../../traces/scatter/subtypes":401,"../color":51,"../colorscale":63,"./symbol_defs":73,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],73:[function(_dereq_,module,exports){ +},{"../../components/fx/helpers":86,"../../constants/alignment":145,"../../constants/interactions":148,"../../constants/xmlns_namespaces":150,"../../lib":169,"../../lib/svg_text_utils":190,"../../registry":258,"../../traces/scatter/make_bubble_size_func":395,"../../traces/scatter/subtypes":402,"../color":51,"../colorscale":63,"./symbol_defs":73,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],73:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21227,7 +21255,7 @@ module.exports = { },{"d3":16}],74:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21342,7 +21370,7 @@ module.exports = { },{}],75:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21428,7 +21456,7 @@ function calcOneAxis(calcTrace, trace, axis, coord) { },{"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"./compute_error":76,"fast-isnumeric":18}],76:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21529,7 +21557,7 @@ function makeComputeErrorValue(type, value) { },{}],77:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21604,7 +21632,7 @@ module.exports = function(traceIn, traceOut, defaultColor, opts) { },{"../../lib":169,"../../plot_api/plot_template":203,"../../registry":258,"./attributes":74,"fast-isnumeric":18}],78:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21673,7 +21701,7 @@ function hoverInfo(calcPoint, trace, hoverPoint) { },{"../../lib":169,"../../plot_api/edit_types":196,"./attributes":74,"./calc":75,"./compute_error":76,"./defaults":77,"./plot":79,"./style":80}],79:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21843,9 +21871,9 @@ function errorCoords(d, xa, ya) { return out; } -},{"../../traces/scatter/subtypes":401,"../drawing":72,"d3":16,"fast-isnumeric":18}],80:[function(_dereq_,module,exports){ +},{"../../traces/scatter/subtypes":402,"../drawing":72,"d3":16,"fast-isnumeric":18}],80:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21882,7 +21910,7 @@ module.exports = function style(traces) { },{"../color":51,"d3":16}],81:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21918,7 +21946,7 @@ module.exports = { },{"../../lib/extend":164,"../../plots/font_attributes":239,"./layout_attributes":90}],82:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21977,7 +22005,7 @@ function paste(traceAttr, cd, cdAttr, fn) { },{"../../lib":169,"../../registry":258}],83:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22014,7 +22042,7 @@ module.exports = function click(gd, evt, subplot) { },{"../../registry":258,"./hover":87}],84:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22046,7 +22074,7 @@ module.exports = { },{}],85:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22072,7 +22100,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout },{"../../lib":169,"./attributes":81,"./hoverlabel_defaults":88}],86:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22314,7 +22342,7 @@ function getPointData(val, pointNumber) { },{"../../lib":169}],87:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24000,7 +24028,7 @@ function plainText(s, len) { },{"../../lib":169,"../../lib/events":163,"../../lib/override_cursor":180,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../registry":258,"../color":51,"../dragelement":69,"../drawing":72,"./constants":84,"./helpers":86,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],88:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24023,7 +24051,7 @@ module.exports = function handleHoverLabelDefaults(contIn, contOut, coerce, opts },{"../../lib":169}],89:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24102,7 +24130,7 @@ function castHoverinfo(trace, fullLayout, ptNumber) { },{"../../lib":169,"../dragelement":69,"./attributes":81,"./calc":82,"./click":83,"./constants":84,"./defaults":85,"./helpers":86,"./hover":87,"./layout_attributes":90,"./layout_defaults":91,"./layout_global_defaults":92,"d3":16}],90:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24205,7 +24233,7 @@ module.exports = { },{"../../plots/font_attributes":239,"./constants":84}],91:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24279,7 +24307,7 @@ function isHoriz(fullData, fullLayout) { },{"../../lib":169,"./layout_attributes":90}],92:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24302,7 +24330,7 @@ module.exports = function supplyLayoutGlobalDefaults(layoutIn, layoutOut) { },{"../../lib":169,"./hoverlabel_defaults":88,"./layout_attributes":90}],93:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24676,7 +24704,7 @@ module.exports = { },{"../../lib":169,"../../lib/regex":184,"../../plot_api/plot_template":203,"../../plots/cartesian/constants":219,"../../plots/domain":238}],94:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24811,7 +24839,7 @@ module.exports = templatedArray('image', { },{"../../plot_api/plot_template":203,"../../plots/cartesian/constants":219}],95:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24892,7 +24920,7 @@ module.exports = function convertCoords(gd, ax, newType, doExtra) { },{"../../lib/to_log_range":192,"fast-isnumeric":18}],96:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24957,7 +24985,7 @@ function imageDefaults(imageIn, imageOut, fullLayout) { },{"../../lib":169,"../../plots/array_container_defaults":209,"../../plots/cartesian/axes":213,"./attributes":94}],97:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25182,7 +25210,7 @@ module.exports = function draw(gd) { },{"../../constants/xmlns_namespaces":150,"../../plots/cartesian/axes":213,"../drawing":72,"d3":16}],98:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25206,7 +25234,7 @@ module.exports = { },{"../../plots/cartesian/include_components":223,"./attributes":94,"./convert_coords":95,"./defaults":96,"./draw":97}],99:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25340,12 +25368,34 @@ module.exports = { editType: 'legend', }, + title: { + text: { + valType: 'string', + dflt: '', + + editType: 'legend', + + }, + font: fontAttrs({ + editType: 'legend', + + }), + side: { + valType: 'enumerated', + values: ['top', 'left', 'top left'], + + editType: 'legend', + + }, + editType: 'legend', + }, + editType: 'legend' }; },{"../../plots/font_attributes":239,"../color/attributes":50}],100:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25361,6 +25411,8 @@ module.exports = { scrollBarMargin: 4, scrollBarEnterAttrs: {rx: 20, ry: 3, width: 0, height: 0}, + // number of px between legend title and (left) side of legend (always in x direction and from inner border) + titlePad: 2, // number of px between legend symbol and legend text (always in x direction) textGap: 40, // number of px between each legend item (x and/or y direction) @@ -25369,7 +25421,7 @@ module.exports = { },{}],101:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25403,7 +25455,14 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { // *would* be shown by default, toward the two traces you need to // ensure the legend is shown by default, because this can still help // disambiguate. - if(trace.showlegend || trace._dfltShowLegend) { + if(trace.showlegend || ( + trace._dfltShowLegend && !( + trace._module && + trace._module.attributes && + trace._module.attributes.showlegend && + trace._module.attributes.showlegend.dflt === false + ) + )) { legendTraceCount++; if(trace.showlegend) { legendReallyHasATrace = true; @@ -25486,11 +25545,17 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { coerce('yanchor', defaultYAnchor); coerce('valign'); Lib.noneOrAll(containerIn, containerOut, ['x', 'y']); + + var titleText = coerce('title.text'); + if(titleText) { + coerce('title.side', orientation === 'h' ? 'left' : 'top'); + Lib.coerceFont(coerce, 'title.font', layoutOut.font); + } }; },{"../../lib":169,"../../plot_api/plot_template":203,"../../plots/layout_attributes":243,"../../registry":258,"./attributes":99,"./helpers":105}],102:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25556,6 +25621,19 @@ module.exports = function draw(gd) { var scrollBox = Lib.ensureSingle(legend, 'g', 'scrollbox'); + var title = opts.title; + opts._titleWidth = 0; + opts._titleHeight = 0; + if(title.text) { + var titleEl = Lib.ensureSingle(scrollBox, 'text', 'legendtitletext'); + titleEl.attr('text-anchor', 'start') + .classed('user-select-none', true) + .call(Drawing.font, title.font) + .text(title.text); + + textLayout(titleEl, scrollBox, gd); // handle mathjax or multi-line text and compute title height + } + var scrollBar = Lib.ensureSingle(legend, 'rect', 'scrollbar', function(s) { s.attr(constants.scrollBarEnterAttrs) .call(Color.fill, constants.scrollBarColor); @@ -25612,7 +25690,7 @@ module.exports = function draw(gd) { } // Set size and position of all the elements that make up a legend: - // legend, background and border, scroll box and scroll bar + // legend, background and border, scroll box and scroll bar as well as title Drawing.setTranslate(legend, lx, ly); // to be safe, remove previous listeners @@ -25861,23 +25939,17 @@ function drawTexts(g, gd) { textEl.attr('text-anchor', 'start') .classed('user-select-none', true) - .call(Drawing.font, fullLayout.legend.font) + .call(Drawing.font, opts.font) .text(isEditable ? ensureLength(name, maxNameLength) : name); svgTextUtils.positionText(textEl, constants.textGap, 0); - function textLayout(s) { - svgTextUtils.convertToTspans(s, gd, function() { - computeTextDimensions(g, gd); - }); - } - if(isEditable) { textEl.call(svgTextUtils.makeEditable, {gd: gd, text: name}) - .call(textLayout) + .call(textLayout, g, gd) .on('edit', function(newName) { this.text(ensureLength(newName, maxNameLength)) - .call(textLayout); + .call(textLayout, g, gd); var fullInput = legendItem.trace._fullInput || {}; var update = {}; @@ -25898,7 +25970,7 @@ function drawTexts(g, gd) { return Registry.call('_guiRestyle', gd, update, traceIndex); }); } else { - textLayout(textEl); + textLayout(textEl, g, gd); } } @@ -25951,18 +26023,24 @@ function setupTraceToggle(g, gd) { }); } +function textLayout(s, g, gd) { + svgTextUtils.convertToTspans(s, gd, function() { + computeTextDimensions(g, gd); + }); +} + function computeTextDimensions(g, gd) { var legendItem = g.data()[0][0]; - - if(!legendItem.trace.showlegend) { + if(legendItem && !legendItem.trace.showlegend) { g.remove(); return; } var mathjaxGroup = g.select('g[class*=math-group]'); var mathjaxNode = mathjaxGroup.node(); + var bw = gd._fullLayout.legend.borderwidth; var opts = gd._fullLayout.legend; - var lineHeight = opts.font.size * LINE_SPACING; + var lineHeight = (legendItem ? opts : opts.title).font.size * LINE_SPACING; var height, width; if(mathjaxNode) { @@ -25971,24 +26049,56 @@ function computeTextDimensions(g, gd) { height = mathjaxBB.height; width = mathjaxBB.width; - Drawing.setTranslate(mathjaxGroup, 0, (height / 4)); + if(legendItem) { + Drawing.setTranslate(mathjaxGroup, 0, height * 0.25); + } else { // case of title + Drawing.setTranslate(mathjaxGroup, bw, height * 0.75 + bw); + } } else { - var text = g.select('.legendtext'); - var textLines = svgTextUtils.lineCount(text); - var textNode = text.node(); + var textEl = g.select(legendItem ? + '.legendtext' : '.legendtitletext' + ); + var textLines = svgTextUtils.lineCount(textEl); + var textNode = textEl.node(); height = lineHeight * textLines; width = textNode ? Drawing.bBox(textNode).width : 0; // approximation to height offset to center the font // to avoid getBoundingClientRect - var textY = lineHeight * (0.3 + (1 - textLines) / 2); - svgTextUtils.positionText(text, constants.textGap, textY); + var textY = lineHeight * ((textLines - 1) / 2 - 0.3); + if(legendItem) { + svgTextUtils.positionText(textEl, constants.textGap, -textY); + } else { // case of title + svgTextUtils.positionText(textEl, constants.titlePad + bw, lineHeight + bw); + } } - legendItem.lineHeight = lineHeight; - legendItem.height = Math.max(height, 16) + 3; - legendItem.width = width; + if(legendItem) { + legendItem.lineHeight = lineHeight; + legendItem.height = Math.max(height, 16) + 3; + legendItem.width = width; + } else { // case of title + opts._titleWidth = width; + opts._titleHeight = height; + } +} + +function getTitleSize(opts) { + var w = 0; + var h = 0; + + var side = opts.title.side; + if(side) { + if(side.indexOf('left') !== -1) { + w = opts._titleWidth; + } + if(side.indexOf('top') !== -1) { + h = opts._titleHeight; + } + } + + return [w, h]; } /* @@ -26005,6 +26115,7 @@ function computeLegendDimensions(gd, groups, traces) { var fullLayout = gd._fullLayout; var opts = fullLayout.legend; var gs = fullLayout._size; + var isVertical = helpers.isVertical(opts); var isGrouped = helpers.isGrouped(opts); @@ -26028,11 +26139,15 @@ function computeLegendDimensions(gd, groups, traces) { var toggleRectWidth = 0; opts._width = 0; opts._height = 0; + var titleSize = getTitleSize(opts); if(isVertical) { traces.each(function(d) { var h = d[0].height; - Drawing.setTranslate(this, bw, itemGap + bw + opts._height + h / 2); + Drawing.setTranslate(this, + bw + titleSize[0], + bw + titleSize[1] + opts._height + h / 2 + itemGap + ); opts._height += h; opts._width = Math.max(opts._width, d[0].width); }); @@ -26082,7 +26197,10 @@ function computeLegendDimensions(gd, groups, traces) { var offsetY = 0; d3.select(this).selectAll('g.traces').each(function(d) { var h = d[0].height; - Drawing.setTranslate(this, 0, itemGap + bw + h / 2 + offsetY); + Drawing.setTranslate(this, + titleSize[0], + titleSize[1] + bw + itemGap + h / 2 + offsetY + ); offsetY += h; maxWidthInGroup = Math.max(maxWidthInGroup, textGap + d[0].width); }); @@ -26125,7 +26243,10 @@ function computeLegendDimensions(gd, groups, traces) { maxItemHeightInRow = 0; } - Drawing.setTranslate(this, bw + offsetX, itemGap + bw + h / 2 + offsetY); + Drawing.setTranslate(this, + titleSize[0] + bw + offsetX, + titleSize[1] + bw + offsetY + h / 2 + itemGap + ); rowWidth = offsetX + w + itemGap; offsetX += next; @@ -26142,8 +26263,19 @@ function computeLegendDimensions(gd, groups, traces) { } } - opts._width = Math.ceil(opts._width); - opts._height = Math.ceil(opts._height); + opts._width = Math.ceil( + Math.max( + opts._width + titleSize[0], + opts._titleWidth + 2 * (bw + constants.titlePad) + ) + ); + + opts._height = Math.ceil( + Math.max( + opts._height + titleSize[1], + opts._titleHeight + 2 * (bw + constants.itemGap) + ) + ); opts._effHeight = Math.min(opts._height, opts._maxHeight); @@ -26188,7 +26320,7 @@ function getYanchor(opts) { },{"../../constants/alignment":145,"../../lib":169,"../../lib/events":163,"../../lib/svg_text_utils":190,"../../plots/plots":245,"../../registry":258,"../color":51,"../dragelement":69,"../drawing":72,"./constants":100,"./get_legend_data":103,"./handle_click":104,"./helpers":105,"./style":107,"d3":16}],103:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26296,7 +26428,7 @@ module.exports = function getLegendData(calcdata, opts) { },{"../../registry":258,"./helpers":105}],104:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26462,11 +26594,12 @@ module.exports = function handleClick(g, gd, numClicks) { } else if(mode === 'toggleothers') { // Compute the clicked index. expandedIndex does what we want for expanded traces // but also culls hidden traces. That means we have some work to do. - var isClicked, isInGroup, otherState; + var isClicked, isInGroup, notInLegend, otherState; var isIsolated = true; for(i = 0; i < fullData.length; i++) { isClicked = fullData[i] === fullTrace; - if(isClicked) continue; + notInLegend = fullData[i].showlegend !== true; + if(isClicked || notInLegend) continue; isInGroup = (hasLegendgroup && fullData[i].legendgroup === legendgroup); @@ -26491,8 +26624,10 @@ module.exports = function handleClick(g, gd, numClicks) { case true: otherState = isIsolated ? true : 'legendonly'; isClicked = fullData[i] === fullTrace; + // N.B. consider traces that have a set legendgroup as toggleable + notInLegend = (fullData[i].showlegend !== true && !fullData[i].legendgroup); isInGroup = isClicked || (hasLegendgroup && fullData[i].legendgroup === legendgroup); - setVisibility(fullData[i], isInGroup ? true : otherState); + setVisibility(fullData[i], (isInGroup || notInLegend) ? true : otherState); break; } } @@ -26532,7 +26667,7 @@ module.exports = function handleClick(g, gd, numClicks) { },{"../../lib":169,"../../registry":258}],105:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26556,7 +26691,7 @@ exports.isReversed = function isReversed(legendLayout) { },{}],106:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26580,7 +26715,7 @@ module.exports = { },{"./attributes":99,"./defaults":101,"./draw":102,"./style":107}],107:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26665,6 +26800,7 @@ module.exports = function style(s, gd) { .enter().append('g') .classed('legendpoints', true); }) + .each(styleSpatial) .each(styleWaterfalls) .each(styleFunnels) .each(styleBars) @@ -27062,15 +27198,139 @@ module.exports = function style(s, gd) { stylePie(pts, d0Mod, tMod); } } + + function styleSpatial(d) { // i.e. maninly traces having z and colorscale + var trace = d[0].trace; + + var useGradient; + var ptsData = []; + if(trace.visible) { + switch(trace.type) { + case 'histogram2d' : + case 'heatmap' : + ptsData = [ + ['M-15,-2V4H15V-2Z'] // similar to contour + ]; + useGradient = true; + break; + case 'choropleth' : + case 'choroplethmapbox' : + ptsData = [ + ['M-6,-6V6H6V-6Z'] + ]; + useGradient = true; + break; + case 'densitymapbox' : + ptsData = [ + ['M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0'] + ]; + useGradient = 'radial'; + break; + case 'cone' : + ptsData = [ + ['M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z'], + ['M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z'], + ['M-6,-2 A2,2 0 0,0 -6,2 L6,0Z'] + ]; + useGradient = false; + break; + case 'streamtube' : + ptsData = [ + ['M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z'], + ['M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z'], + ['M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z'] + ]; + useGradient = false; + break; + case 'surface' : + ptsData = [ + ['M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z'], + ['M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z'] + ]; + useGradient = true; + break; + case 'mesh3d' : + ptsData = [ + ['M-6,6H0L-6,-6Z'], + ['M6,6H0L6,-6Z'], + ['M-6,-6H6L0,6Z'] + ]; + useGradient = false; + break; + case 'volume' : + ptsData = [ + ['M-6,6H0L-6,-6Z'], + ['M6,6H0L6,-6Z'], + ['M-6,-6H6L0,6Z'] + ]; + useGradient = true; + break; + case 'isosurface': + ptsData = [ + ['M-6,6H0L-6,-6Z'], + ['M6,6H0L6,-6Z'], + ['M-6,-6 A12,24 0 0,0 6,-6 L0,6Z'] + ]; + useGradient = false; + break; + } + } + + var pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legend3dandfriends') + .data(ptsData); + pts.enter().append('path').classed('legend3dandfriends', true) + .attr('transform', 'translate(20,0)') + .style('stroke-miterlimit', 1); + pts.exit().remove(); + + pts.each(function(dd, i) { + var pt = d3.select(this); + + var cOpts = extractOpts(trace); + var colorscale = cOpts.colorscale; + var reversescale = cOpts.reversescale; + var fillGradient = function(s) { + if(s.size()) { + var gradientID = 'legendfill-' + trace.uid; + Drawing.gradient(s, gd, gradientID, + getGradientDirection(reversescale, useGradient === 'radial'), + colorscale, 'fill'); + } + }; + + var fillColor; + if(!colorscale) { + var color = trace.vertexcolor || trace.facecolor || trace.color; + fillColor = Lib.isArrayOrTypedArray(color) ? (color[i] || color[0]) : color; + } else { + if(!useGradient) { + var len = colorscale.length; + fillColor = + i === 0 ? colorscale[reversescale ? len - 1 : 0][1] : // minimum + i === 1 ? colorscale[reversescale ? 0 : len - 1][1] : // maximum + colorscale[Math.floor((len - 1) / 2)][1]; // middle + } + } + + pt.attr('d', dd[0]); + if(fillColor) { + pt.call(Color.fill, fillColor); + } else { + pt.call(fillGradient); + } + }); + } }; -function getGradientDirection(reversescale) { - return reversescale ? 'horizontal' : 'horizontalreversed'; +function getGradientDirection(reversescale, isRadial) { + var str = isRadial ? 'radial' : 'horizontal'; + return str + (reversescale ? '' : 'reversed'); } -},{"../../lib":169,"../../registry":258,"../../traces/pie/helpers":369,"../../traces/pie/style_one":375,"../../traces/scatter/subtypes":401,"../color":51,"../colorscale/helpers":62,"../drawing":72,"d3":16}],108:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258,"../../traces/pie/helpers":370,"../../traces/pie/style_one":376,"../../traces/scatter/subtypes":402,"../color":51,"../colorscale/helpers":62,"../drawing":72,"d3":16}],108:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27374,7 +27634,7 @@ function handleDrag3d(gd, ev) { var button = ev.currentTarget; var attr = button.getAttribute('data-attr'); var val = button.getAttribute('data-val') || true; - var sceneIds = gd._fullLayout._subplots.gl3d; + var sceneIds = gd._fullLayout._subplots.gl3d || []; var layoutUpdate = {}; var parts = attr.split('.'); @@ -27539,7 +27799,7 @@ function handleGeo(gd, ev) { var attr = button.getAttribute('data-attr'); var val = button.getAttribute('data-val') || true; var fullLayout = gd._fullLayout; - var geoIds = fullLayout._subplots.geo; + var geoIds = fullLayout._subplots.geo || []; for(var i = 0; i < geoIds.length; i++) { var id = geoIds[i]; @@ -27550,10 +27810,12 @@ function handleGeo(gd, ev) { var newScale = (val === 'in') ? 2 * scale : 0.5 * scale; Registry.call('_guiRelayout', gd, id + '.projection.scale', newScale); - } else if(attr === 'reset') { - resetView(gd, 'geo'); } } + + if(attr === 'reset') { + resetView(gd, 'geo'); + } } modeBarButtons.hoverClosestGl2d = { @@ -27689,6 +27951,42 @@ modeBarButtons.resetViewMapbox = { } }; +modeBarButtons.zoomInMapbox = { + name: 'zoomInMapbox', + title: function(gd) { return _(gd, 'Zoom in'); }, + attr: 'zoom', + val: 'in', + icon: Icons.zoom_plus, + click: handleMapboxZoom +}; + +modeBarButtons.zoomOutMapbox = { + name: 'zoomOutMapbox', + title: function(gd) { return _(gd, 'Zoom out'); }, + attr: 'zoom', + val: 'out', + icon: Icons.zoom_minus, + click: handleMapboxZoom +}; + +function handleMapboxZoom(gd, ev) { + var button = ev.currentTarget; + var val = button.getAttribute('data-val'); + var fullLayout = gd._fullLayout; + var subplotIds = fullLayout._subplots.mapbox || []; + var scalar = 1.05; + var aObj = {}; + + for(var i = 0; i < subplotIds.length; i++) { + var id = subplotIds[i]; + var current = fullLayout[id].zoom; + var next = (val === 'in') ? scalar * current : current / scalar; + aObj[id + '.zoom'] = next; + } + + Registry.call('_guiRelayout', gd, aObj); +} + function resetView(gd, subplotType) { var fullLayout = gd._fullLayout; var subplotIds = fullLayout._subplots[subplotType] || []; @@ -27711,7 +28009,7 @@ function resetView(gd, subplotType) { },{"../../fonts/ploticon":153,"../../lib":169,"../../plots/cartesian/axis_ids":216,"../../plots/plots":245,"../../registry":258}],109:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27725,7 +28023,7 @@ exports.manage = _dereq_('./manage'); },{"./manage":110}],110:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27852,6 +28150,7 @@ function getButtonGroups(gd) { hoverGroup = ['hoverClosest3d']; resetGroup = ['resetCameraDefault3d', 'resetCameraLastSave3d']; } else if(hasMapbox) { + zoomGroup = ['zoomInMapbox', 'zoomOutMapbox']; hoverGroup = ['toggleHover']; resetGroup = ['resetViewMapbox']; } else if(hasGL2D) { @@ -27988,9 +28287,9 @@ function fillCustomButton(customButtons) { return customButtons; } -},{"../../plots/cartesian/axis_ids":216,"../../registry":258,"../../traces/scatter/subtypes":401,"./buttons":108,"./modebar":111}],111:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axis_ids":216,"../../registry":258,"../../traces/scatter/subtypes":402,"./buttons":108,"./modebar":111}],111:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28336,7 +28635,7 @@ module.exports = createModeBar; },{"../../fonts/ploticon":153,"../../lib":169,"d3":16,"fast-isnumeric":18}],112:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28472,7 +28771,7 @@ module.exports = { },{"../../plot_api/plot_template":203,"../../plots/font_attributes":239,"../color/attributes":50}],113:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28501,7 +28800,7 @@ module.exports = { },{}],114:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28593,7 +28892,7 @@ function getPosDflt(containerOut, layout, counterAxes) { },{"../../lib":169,"../../plot_api/plot_template":203,"../../plots/array_container_defaults":209,"../color":51,"./attributes":112,"./constants":113}],115:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28850,7 +29149,7 @@ function reposition(gd, buttons, opts, axName, selector) { },{"../../constants/alignment":145,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/cartesian/axis_ids":216,"../../plots/plots":245,"../../registry":258,"../color":51,"../drawing":72,"./constants":113,"./get_update_object":116,"d3":16}],116:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28904,7 +29203,7 @@ function getXRange(axisLayout, buttonLayout) { },{"d3":16}],117:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28931,7 +29230,7 @@ module.exports = { },{"./attributes":112,"./defaults":114,"./draw":115}],118:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29005,7 +29304,7 @@ module.exports = { },{"../color/attributes":50}],119:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29039,7 +29338,7 @@ module.exports = function calcAutorange(gd) { },{"../../plots/cartesian/autorange":212,"../../plots/cartesian/axis_ids":216,"./constants":120}],120:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29095,7 +29394,7 @@ module.exports = { },{}],121:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29181,7 +29480,7 @@ module.exports = function handleDefaults(layoutIn, layoutOut, axName) { },{"../../lib":169,"../../plot_api/plot_template":203,"../../plots/cartesian/axis_ids":216,"./attributes":118,"./oppaxis_attributes":125}],122:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29757,7 +30056,7 @@ function drawGrabbers(rangeSlider, gd, axisOpts, opts) { },{"../../lib":169,"../../lib/setcursor":188,"../../plots/cartesian":224,"../../plots/cartesian/axis_ids":216,"../../plots/plots":245,"../../registry":258,"../color":51,"../dragelement":69,"../drawing":72,"../titles":138,"./constants":120,"d3":16}],123:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29832,7 +30131,7 @@ exports.autoMarginOpts = function(gd, ax) { },{"../../constants/alignment":145,"../../lib/svg_text_utils":190,"../../plots/cartesian/axis_ids":216,"./constants":120}],124:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29871,7 +30170,7 @@ module.exports = { },{"../../lib":169,"./attributes":118,"./calc_autorange":119,"./defaults":121,"./draw":122,"./helpers":123,"./oppaxis_attributes":125}],125:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29909,7 +30208,7 @@ module.exports = { },{}],126:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30043,9 +30342,9 @@ module.exports = templatedArray('shape', { editType: 'arraydraw' }); -},{"../../lib/extend":164,"../../plot_api/plot_template":203,"../../traces/scatter/attributes":377,"../annotations/attributes":36,"../drawing/attributes":71}],127:[function(_dereq_,module,exports){ +},{"../../lib/extend":164,"../../plot_api/plot_template":203,"../../traces/scatter/attributes":378,"../annotations/attributes":36,"../drawing/attributes":71}],127:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30162,7 +30461,7 @@ function shapeBounds(ax, v0, v1, path, paramsToUse) { },{"../../lib":169,"../../plots/cartesian/axes":213,"./constants":128,"./helpers":131}],128:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30226,7 +30525,7 @@ module.exports = { },{}],129:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30349,7 +30648,7 @@ function handleShapeDefaults(shapeIn, shapeOut, fullLayout) { },{"../../lib":169,"../../plots/array_container_defaults":209,"../../plots/cartesian/axes":213,"./attributes":126,"./helpers":131}],130:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30966,7 +31265,7 @@ function movePath(pathIn, moveX, moveY) { },{"../../lib":169,"../../lib/setcursor":188,"../../plot_api/plot_template":203,"../../plots/cartesian/axes":213,"../../registry":258,"../color":51,"../dragelement":69,"../drawing":72,"./constants":128,"./helpers":131}],131:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31087,7 +31386,7 @@ exports.roundPositionForSharpStrokeRendering = function(pos, strokeWidth) { },{"../../lib":169,"./constants":128}],132:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31114,7 +31413,7 @@ module.exports = { },{"../../plots/cartesian/include_components":223,"./attributes":126,"./calc_autorange":127,"./defaults":129,"./draw":130}],133:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31357,7 +31656,7 @@ module.exports = overrideAll(templatedArray('slider', { },{"../../lib/extend":164,"../../plot_api/edit_types":196,"../../plot_api/plot_template":203,"../../plots/animation_attributes":208,"../../plots/font_attributes":239,"../../plots/pad_attributes":244,"./constants":134}],134:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31451,7 +31750,7 @@ module.exports = { },{}],135:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31566,7 +31865,7 @@ function stepDefaults(valueIn, valueOut) { },{"../../lib":169,"../../plots/array_container_defaults":209,"./attributes":133,"./constants":134}],136:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32198,7 +32497,7 @@ function drawRail(sliderGroup, sliderOpts) { },{"../../constants/alignment":145,"../../lib":169,"../../lib/svg_text_utils":190,"../../plot_api/plot_template":203,"../../plots/plots":245,"../color":51,"../drawing":72,"./constants":134,"d3":16}],137:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32221,7 +32520,7 @@ module.exports = { },{"./attributes":133,"./constants":134,"./defaults":135,"./draw":136}],138:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32488,7 +32787,7 @@ module.exports = { },{"../../constants/alignment":145,"../../constants/interactions":148,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/plots":245,"../../registry":258,"../color":51,"../drawing":72,"d3":16,"fast-isnumeric":18}],139:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32657,7 +32956,7 @@ module.exports = overrideAll(templatedArray('updatemenu', { },{"../../lib/extend":164,"../../plot_api/edit_types":196,"../../plot_api/plot_template":203,"../../plots/font_attributes":239,"../../plots/pad_attributes":244,"../color/attributes":50}],140:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32738,7 +33037,7 @@ module.exports = { },{}],141:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32821,7 +33120,7 @@ function buttonDefaults(buttonIn, buttonOut) { },{"../../lib":169,"../../plots/array_container_defaults":209,"./attributes":139,"./constants":140}],142:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33476,7 +33775,7 @@ function removeAllButtons(gButton, newMenuIndexAttr) { arguments[4][137][0].apply(exports,arguments) },{"./attributes":139,"./constants":140,"./defaults":141,"./draw":142,"dup":137}],144:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33941,7 +34240,7 @@ ScrollBox.prototype.setTranslate = function setTranslate(translateX, translateY) },{"../../lib":169,"../color":51,"../drawing":72,"d3":16}],145:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34006,7 +34305,7 @@ module.exports = { },{}],146:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34022,7 +34321,7 @@ module.exports = { },{}],147:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34060,7 +34359,7 @@ module.exports = { },{}],148:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34083,7 +34382,7 @@ module.exports = { },{}],149:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34148,7 +34447,7 @@ module.exports = { },{}],150:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34172,7 +34471,7 @@ exports.svgAttrs = { },{}],151:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34182,7 +34481,7 @@ exports.svgAttrs = { 'use strict'; // package version injected by `npm run preprocess` -exports.version = '1.51.3'; +exports.version = '1.52.1'; // inject promise polyfill _dereq_('es6-promise').polyfill(); @@ -34238,6 +34537,12 @@ register([ _dereq_('./locale-en-us') ]); +// locales that are present in the window should be loaded +if(window.PlotlyLocales && Array.isArray(window.PlotlyLocales)) { + register(window.PlotlyLocales); + delete window.PlotlyLocales; +} + // plot icons exports.Icons = _dereq_('./fonts/ploticon'); @@ -34251,9 +34556,9 @@ exports.Queue = _dereq_('./lib/queue'); // export d3 used in the bundle exports.d3 = _dereq_('d3'); -},{"../build/plotcss":1,"./components/annotations":44,"./components/annotations3d":49,"./components/colorbar":57,"./components/colorscale":63,"./components/errorbars":78,"./components/fx":89,"./components/grid":93,"./components/images":98,"./components/legend":106,"./components/rangeselector":117,"./components/rangeslider":124,"./components/shapes":132,"./components/sliders":137,"./components/updatemenus":143,"./fonts/mathjax_config":152,"./fonts/ploticon":153,"./lib/queue":183,"./locale-en":194,"./locale-en-us":193,"./plot_api":198,"./plot_api/plot_schema":202,"./plots/plots":245,"./registry":258,"./snapshot":263,"./traces/scatter":389,"d3":16,"es6-promise":17}],152:[function(_dereq_,module,exports){ +},{"../build/plotcss":1,"./components/annotations":44,"./components/annotations3d":49,"./components/colorbar":57,"./components/colorscale":63,"./components/errorbars":78,"./components/fx":89,"./components/grid":93,"./components/images":98,"./components/legend":106,"./components/rangeselector":117,"./components/rangeslider":124,"./components/shapes":132,"./components/sliders":137,"./components/updatemenus":143,"./fonts/mathjax_config":152,"./fonts/ploticon":153,"./lib/queue":183,"./locale-en":194,"./locale-en-us":193,"./plot_api":198,"./plot_api/plot_schema":202,"./plots/plots":245,"./registry":258,"./snapshot":263,"./traces/scatter":390,"d3":16,"es6-promise":17}],152:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34284,7 +34589,7 @@ module.exports = function() { },{}],153:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34428,7 +34733,7 @@ module.exports = { },{}],154:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34492,7 +34797,7 @@ exports.isBottomAnchor = function isBottomAnchor(opts) { },{}],155:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34733,7 +35038,7 @@ module.exports = { },{"./mod":176}],156:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34890,7 +35195,7 @@ function _rowLength(z, fn, len0) { },{}],157:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34923,7 +35228,7 @@ module.exports = function cleanNumber(v) { },{"../constants/numerical":149,"fast-isnumeric":18}],158:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34951,7 +35256,7 @@ module.exports = function clearGlCanvases(gd) { },{}],159:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34974,7 +35279,7 @@ module.exports = function clearResponsive(gd) { },{}],160:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35438,7 +35743,7 @@ exports.validate = validate; },{"../components/colorscale/scales":66,"../constants/interactions":148,"../plots/attributes":210,"./array":156,"./mod":176,"./nested_property":177,"./regex":184,"fast-isnumeric":18,"tinycolor2":34}],161:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36024,7 +36329,7 @@ exports.findExactDates = function(data, calendar) { },{"../constants/numerical":149,"../registry":258,"./loggers":173,"./mod":176,"d3":16,"fast-isnumeric":18}],162:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36127,7 +36432,7 @@ module.exports = { },{"./loggers":173,"d3":16}],163:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36300,7 +36605,7 @@ module.exports = Events; },{"events":15}],164:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36414,7 +36719,7 @@ function _extend(inputs, isDeep, keepAllKeys, noArrayCopies) { },{"./is_plain_object.js":170}],165:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36465,7 +36770,7 @@ module.exports = function filterUnique(array) { },{}],166:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36513,7 +36818,7 @@ function isCalcData(cont) { },{}],167:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36757,7 +37062,7 @@ exports.findPointOnPath = function findPointOnPath(path, val, coord, opts) { },{"./mod":176}],168:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36773,7 +37078,7 @@ module.exports = function identity(d) { return d; }; },{}],169:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37358,7 +37663,9 @@ lib.tagSelected = function(calcTrace, trace, ptNumber2cdIndex) { for(var i = 0; i < selectedpoints.length; i++) { var ptIndex = selectedpoints[i]; - if(lib.isIndex(ptIndex)) { + if(lib.isIndex(ptIndex) || + (lib.isArrayOrTypedArray(ptIndex) && lib.isIndex(ptIndex[0]) && lib.isIndex(ptIndex[1])) + ) { var ptNumber = ptIndex2ptNumber ? ptIndex2ptNumber[ptIndex] : ptIndex; var cdIndex = ptNumber2cdIndex ? ptNumber2cdIndex[ptNumber] : ptNumber; @@ -37956,38 +38263,59 @@ lib.isHidden = function(gd) { return !display || display === 'none'; }; -lib.getTextTransform = function(opts) { - var textX = opts.textX; - var textY = opts.textY; - var targetX = opts.targetX; - var targetY = opts.targetY; - var scale = opts.scale; - var rotate = opts.rotate; +/** Return transform text for bar bar-like rectangles and pie-like slices + * @param {object} transform + * - targetX: desired position on the x-axis + * - targetY: desired position on the y-axis + * - textX: text middle position on the x-axis + * - textY: text middle position on the y-axis + * - anchorX: (optional) text anchor position on the x-axis (computed from textX), zero for middle anchor + * - anchorY: (optional) text anchor position on the y-axis (computed from textY), zero for middle anchor + * - scale: (optional) scale applied after translate + * - rotate: (optional) rotation applied after scale + * - noCenter: when defined no extra arguments needed in rotation + */ +lib.getTextTransform = function(transform) { + var noCenter = transform.noCenter; + var textX = transform.textX; + var textY = transform.textY; + var targetX = transform.targetX; + var targetY = transform.targetY; + var anchorX = transform.anchorX || 0; + var anchorY = transform.anchorY || 0; + var rotate = transform.rotate; + var scale = transform.scale; + if(!scale) scale = 0; + else if(scale > 1) scale = 1; - var transformScale; - var transformRotate; - var transformTranslate; + return ( + 'translate(' + + (targetX - scale * (textX + anchorX)) + ',' + + (targetY - scale * (textY + anchorY)) + + ')' + + (scale < 1 ? + 'scale(' + scale + ')' : '' + ) + + (rotate ? + 'rotate(' + rotate + + (noCenter ? '' : ' ' + textX + ' ' + textY) + + ')' : '' + ) + ); +}; - if(scale < 1) transformScale = 'scale(' + scale + ') '; - else { - scale = 1; - transformScale = ''; - } - - transformRotate = (rotate) ? - 'rotate(' + rotate + ' ' + textX + ' ' + textY + ') ' : ''; - - // Note that scaling also affects the center of the text box - var translateX = (targetX - scale * textX); - var translateY = (targetY - scale * textY); - transformTranslate = 'translate(' + translateX + ' ' + translateY + ')'; - - return transformTranslate + transformScale + transformRotate; +lib.ensureUniformFontSize = function(gd, baseFont) { + var out = lib.extendFlat({}, baseFont); + out.size = Math.max( + baseFont.size, + gd._fullLayout.uniformtext.minsize || 0 + ); + return out; }; },{"../constants/numerical":149,"./anchor_utils":154,"./angles":155,"./array":156,"./clean_number":157,"./clear_responsive":159,"./coerce":160,"./dates":161,"./dom":162,"./extend":164,"./filter_unique":165,"./filter_visible":166,"./geometry2d":167,"./identity":168,"./is_plain_object":170,"./keyed_container":171,"./localize":172,"./loggers":173,"./make_trace_groups":174,"./matrix":175,"./mod":176,"./nested_property":177,"./noop":178,"./notifier":179,"./push_unique":182,"./regex":184,"./relative_attr":185,"./relink_private":186,"./search":187,"./stats":189,"./throttle":191,"./to_log_range":192,"d3":16,"fast-isnumeric":18}],170:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38015,7 +38343,7 @@ module.exports = function isPlainObject(obj) { },{}],171:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38208,7 +38536,7 @@ module.exports = function keyedContainer(baseObj, path, keyName, valueName) { },{"./nested_property":177}],172:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38264,7 +38592,7 @@ module.exports = function localize(gd, s) { },{"../registry":258}],173:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38277,6 +38605,8 @@ module.exports = function localize(gd, s) { var dfltConfig = _dereq_('../plot_api/plot_config').dfltConfig; +var notifier = _dereq_('./notifier'); + var loggers = module.exports = {}; /** @@ -38286,39 +38616,63 @@ var loggers = module.exports = {}; */ loggers.log = function() { + var i; + if(dfltConfig.logging > 1) { var messages = ['LOG:']; - - for(var i = 0; i < arguments.length; i++) { + for(i = 0; i < arguments.length; i++) { messages.push(arguments[i]); } - apply(console.trace || console.log, messages); } + + if(dfltConfig.notifyOnLogging > 1) { + var lines = []; + for(i = 0; i < arguments.length; i++) { + lines.push(arguments[i]); + } + notifier(lines.join('
'), 'long'); + } }; loggers.warn = function() { + var i; + if(dfltConfig.logging > 0) { var messages = ['WARN:']; - - for(var i = 0; i < arguments.length; i++) { + for(i = 0; i < arguments.length; i++) { messages.push(arguments[i]); } - apply(console.trace || console.log, messages); } + + if(dfltConfig.notifyOnLogging > 0) { + var lines = []; + for(i = 0; i < arguments.length; i++) { + lines.push(arguments[i]); + } + notifier(lines.join('
'), 'stick'); + } }; loggers.error = function() { + var i; + if(dfltConfig.logging > 0) { var messages = ['ERROR:']; - - for(var i = 0; i < arguments.length; i++) { + for(i = 0; i < arguments.length; i++) { messages.push(arguments[i]); } - apply(console.error, messages); } + + if(dfltConfig.notifyOnLogging > 0) { + var lines = []; + for(i = 0; i < arguments.length; i++) { + lines.push(arguments[i]); + } + notifier(lines.join('
'), 'stick'); + } }; /* @@ -38346,9 +38700,9 @@ function apply(f, args) { } } -},{"../plot_api/plot_config":201}],174:[function(_dereq_,module,exports){ +},{"../plot_api/plot_config":201,"./notifier":179}],174:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38391,7 +38745,7 @@ module.exports = function makeTraceGroups(traceLayer, cdModule, cls) { },{"d3":16}],175:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38498,7 +38852,7 @@ exports.apply2DTransform2 = function(transform) { },{}],176:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38533,7 +38887,7 @@ module.exports = { },{}],177:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38779,7 +39133,7 @@ function badContainer(container, propStr, propParts) { },{"./array":156,"fast-isnumeric":18}],178:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38795,7 +39149,7 @@ module.exports = function noop() {}; },{}],179:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38866,18 +39220,24 @@ module.exports = function(text, displayLength) { p.append('span').text(lines[i]); } - note.transition() - .duration(700) - .style('opacity', 1) - .transition() - .delay(ts) - .call(killNote); + if(displayLength === 'stick') { + note.transition() + .duration(350) + .style('opacity', 1); + } else { + note.transition() + .duration(700) + .style('opacity', 1) + .transition() + .delay(ts) + .call(killNote); + } }); }; },{"d3":16,"fast-isnumeric":18}],180:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38925,7 +39285,7 @@ module.exports = function overrideCursor(el3, csr) { },{"./setcursor":188}],181:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39177,7 +39537,7 @@ polygon.filter = function filter(pts, tolerance) { },{"../constants/numerical":149,"./matrix":175}],182:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39215,7 +39575,7 @@ module.exports = function pushUnique(array, item) { },{}],183:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39423,7 +39783,7 @@ module.exports = queue; },{"../lib":169,"../plot_api/plot_config":201}],184:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39453,7 +39813,7 @@ exports.counter = function(head, tail, openEnded, matchBeginning) { },{}],185:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39506,7 +39866,7 @@ module.exports = function(baseAttr, relativeAttr) { },{}],186:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39564,7 +39924,7 @@ module.exports = function relinkPrivateKeys(toContainer, fromContainer) { },{"./array":156,"./is_plain_object":170}],187:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39751,7 +40111,7 @@ exports.findIndexOfMin = function(arr, fn) { },{"./identity":168,"./loggers":173,"fast-isnumeric":18}],188:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39774,7 +40134,7 @@ module.exports = function setCursor(el3, csr) { },{}],189:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39884,7 +40244,7 @@ exports.interp = function(arr, n) { },{"./array":156,"fast-isnumeric":18}],190:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40700,7 +41060,7 @@ exports.makeEditable = function(context, options) { },{"../constants/alignment":145,"../constants/xmlns_namespaces":150,"../lib":169,"d3":16}],191:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40803,7 +41163,7 @@ function _clearTimeout(cache) { },{}],192:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40831,7 +41191,7 @@ module.exports = function toLogRange(val, range) { },{"fast-isnumeric":18}],193:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40853,7 +41213,7 @@ module.exports = { },{}],194:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40896,7 +41256,7 @@ module.exports = { },{}],195:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40954,7 +41314,7 @@ module.exports = function containerArrayMatch(astr) { },{"../registry":258}],196:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -41079,7 +41439,7 @@ function overrideOne(attr, editTypeOverride, overrideContainers, key) { },{"../lib":169}],197:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -41771,7 +42131,7 @@ exports.clearAxisTypes = function(gd, traces, layoutUpdate) { },{"../components/color":51,"../lib":169,"../plots/cartesian/axis_ids":216,"../plots/plots":245,"../registry":258,"fast-isnumeric":18,"gl-mat4/fromQuat":19}],198:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -41814,7 +42174,7 @@ exports.validateTemplate = templateApi.validateTemplate; },{"../snapshot/download":260,"./plot_api":200,"./template_api":205,"./to_image":206,"./validate":207}],199:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -42027,7 +42387,7 @@ exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, },{"../lib/is_plain_object":170,"../lib/loggers":173,"../lib/noop":178,"../lib/search":187,"../registry":258,"./container_array_match":195}],200:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -44470,7 +44830,7 @@ var layoutUIControlPatterns = [ {pattern: /(hover|drag)mode$/, attr: 'modebar.uirevision'}, {pattern: /^(scene\d*)\.camera/}, - {pattern: /^(geo\d*)\.(projection|center)/}, + {pattern: /^(geo\d*)\.(projection|center|fitbounds)/}, {pattern: /^(ternary\d*\.[abc]axis)\.(min|title\.text)$/}, {pattern: /^(polar\d*\.radialaxis)\.((auto)?range|angle|title\.text)/}, {pattern: /^(polar\d*\.angularaxis)\.rotation/}, @@ -45889,7 +46249,7 @@ exports._storeDirectGUIEdit = _storeDirectGUIEdit; },{"../components/color":51,"../components/drawing":72,"../constants/xmlns_namespaces":150,"../lib":169,"../lib/events":163,"../lib/queue":183,"../lib/svg_text_utils":190,"../plots/cartesian/axes":213,"../plots/cartesian/constants":219,"../plots/cartesian/graph_interact":222,"../plots/cartesian/select":230,"../plots/plots":245,"../plots/polar/legacy":248,"../registry":258,"./edit_types":196,"./helpers":197,"./manage_arrays":199,"./plot_config":201,"./plot_schema":202,"./subroutines":204,"d3":16,"fast-isnumeric":18,"has-hover":20}],201:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -46138,11 +46498,21 @@ var configAttributes = { }, logging: { - valType: 'boolean', + valType: 'integer', + min: 0, + max: 2, dflt: 1, }, + notifyOnLogging: { + valType: 'integer', + min: 0, + max: 2, + dflt: 0, + + }, + queueLength: { valType: 'integer', min: 0, @@ -46194,7 +46564,7 @@ module.exports = { },{}],202:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -46905,7 +47275,7 @@ function insertAttrs(baseAttrs, newAttrs, astr) { },{"../lib":169,"../plots/animation_attributes":208,"../plots/attributes":210,"../plots/frame_attributes":240,"../plots/layout_attributes":243,"../plots/polar/legacy/area_attributes":246,"../plots/polar/legacy/axis_attributes":247,"../registry":258,"./edit_types":196,"./plot_config":201}],203:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47217,7 +47587,7 @@ exports.arrayEditor = function(parentIn, containerStr, itemOut) { },{"../lib":169,"../plots/attributes":210}],204:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47957,7 +48327,7 @@ exports.drawMarginPushers = function(gd) { },{"../components/color":51,"../components/drawing":72,"../components/modebar":109,"../components/titles":138,"../constants/alignment":145,"../lib":169,"../lib/clear_gl_canvases":158,"../plots/cartesian/autorange":212,"../plots/cartesian/axes":213,"../plots/cartesian/constraints":220,"../plots/plots":245,"../registry":258,"d3":16}],205:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -48419,7 +48789,7 @@ function format(opts) { },{"../lib":169,"../plots/attributes":210,"../plots/plots":245,"./plot_config":201,"./plot_schema":202,"./plot_template":203}],206:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -48622,7 +48992,7 @@ module.exports = toImage; },{"../lib":169,"../snapshot/helpers":262,"../snapshot/svgtoimg":264,"../snapshot/tosvg":266,"./plot_api":200,"fast-isnumeric":18}],207:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49049,7 +49419,7 @@ function convertPathToAttributeString(path) { },{"../lib":169,"../plots/plots":245,"./plot_config":201,"./plot_schema":202}],208:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49161,7 +49531,7 @@ module.exports = { },{}],209:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49256,7 +49626,7 @@ module.exports = function handleArrayContainerDefaults(parentObjIn, parentObjOut },{"../lib":169,"../plot_api/plot_template":203}],210:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49397,7 +49767,7 @@ module.exports = { },{"../components/fx/attributes":81}],211:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49426,7 +49796,7 @@ module.exports = { },{}],212:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49925,7 +50295,7 @@ function greaterOrEqual(v0, v1) { return v0 >= v1; } },{"../../constants/numerical":149,"../../lib":169,"../../registry":258,"fast-isnumeric":18}],213:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53022,7 +53392,7 @@ function isAngular(ax) { },{"../../components/color":51,"../../components/drawing":72,"../../components/titles":138,"../../constants/alignment":145,"../../constants/numerical":149,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/plots":245,"../../registry":258,"./autorange":212,"./axis_autotype":214,"./axis_ids":216,"./clean_ticks":218,"./layout_attributes":225,"./set_convert":231,"d3":16,"fast-isnumeric":18}],214:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53117,7 +53487,7 @@ function multiCategory(a) { },{"../../constants/numerical":149,"../../lib":169,"fast-isnumeric":18}],215:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53240,7 +53610,7 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce, },{"../../lib":169,"../../registry":258,"./category_order_defaults":217,"./layout_attributes":225,"./line_grid_defaults":227,"./set_convert":231,"./tick_label_defaults":232,"./tick_mark_defaults":233,"./tick_value_defaults":234}],216:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53367,7 +53737,7 @@ exports.getAxisGroup = function getAxisGroup(fullLayout, axId) { },{"../../registry":258,"./constants":219}],217:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53461,7 +53831,7 @@ module.exports = function handleCategoryOrderDefaults(containerIn, containerOut, },{}],218:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53549,7 +53919,7 @@ exports.tick0 = function(tick0, axType, calendar, dtick) { },{"../../constants/numerical":149,"../../lib":169,"fast-isnumeric":18}],219:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53639,7 +54009,7 @@ module.exports = { },{"../../lib/regex":184}],220:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54025,7 +54395,7 @@ function updateDomain(ax, factor) { },{"../../constants/alignment":145,"../../constants/numerical":149,"../../lib":169,"./autorange":212,"./axis_ids":216,"./scale_zoom":229}],221:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55265,7 +55635,7 @@ module.exports = { },{"../../components/color":51,"../../components/dragelement":69,"../../components/drawing":72,"../../components/fx":89,"../../constants/alignment":145,"../../lib":169,"../../lib/clear_gl_canvases":158,"../../lib/setcursor":188,"../../lib/svg_text_utils":190,"../../plot_api/subroutines":204,"../../registry":258,"../plots":245,"./axes":213,"./axis_ids":216,"./constants":219,"./scale_zoom":229,"./select":230,"d3":16,"has-passive-events":21,"tinycolor2":34}],222:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55433,7 +55803,7 @@ exports.updateFx = function(gd) { },{"../../components/dragelement":69,"../../components/fx":89,"../../lib/setcursor":188,"./constants":219,"./dragbox":221,"d3":16}],223:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55508,7 +55878,7 @@ module.exports = function makeIncludeComponents(containerArrayName) { },{"../../lib":169,"../../registry":258}],224:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56125,7 +56495,7 @@ exports.updateFx = _dereq_('./graph_interact').updateFx; },{"../../components/drawing":72,"../../constants/xmlns_namespaces":150,"../../lib":169,"../../registry":258,"../get_data":241,"../plots":245,"./attributes":211,"./axis_ids":216,"./constants":219,"./graph_interact":222,"./layout_attributes":225,"./layout_defaults":226,"./transition_axes":235,"d3":16}],225:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56726,7 +57096,7 @@ module.exports = { },{"../../components/color/attributes":50,"../../components/drawing/attributes":71,"../../constants/docs":146,"../../lib/extend":164,"../../plot_api/plot_template":203,"../font_attributes":239,"./constants":219}],226:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57106,7 +57476,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { },{"../../components/color":51,"../../lib":169,"../../plot_api/plot_template":203,"../../registry":258,"../layout_attributes":243,"./axis_defaults":215,"./axis_ids":216,"./constraints":220,"./layout_attributes":225,"./position_defaults":228,"./type_defaults":236}],227:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57171,7 +57541,7 @@ module.exports = function handleLineGridDefaults(containerIn, containerOut, coer },{"../../components/color/attributes":50,"../../lib":169,"tinycolor2":34}],228:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57259,7 +57629,7 @@ module.exports = function handlePositionDefaults(containerIn, containerOut, coer },{"../../lib":169,"fast-isnumeric":18}],229:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57287,7 +57657,7 @@ module.exports = function scaleZoom(ax, factor, centerFraction) { },{"../../constants/alignment":145}],230:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -58092,7 +58462,7 @@ module.exports = { },{"../../components/color":51,"../../components/fx":89,"../../components/fx/helpers":86,"../../lib":169,"../../lib/clear_gl_canvases":158,"../../lib/polygon":181,"../../lib/throttle":191,"../../plot_api/subroutines":204,"../../registry":258,"./axis_ids":216,"./constants":219,"polybooljs":25}],231:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -58762,7 +59132,7 @@ module.exports = function setConvert(ax, fullLayout) { },{"../../constants/numerical":149,"../../lib":169,"./axis_ids":216,"./constants":219,"d3":16,"fast-isnumeric":18}],232:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -58881,7 +59251,7 @@ function tickformatstopDefaults(valueIn, valueOut) { },{"../../lib":169,"../array_container_defaults":209,"./layout_attributes":225}],233:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -58914,7 +59284,7 @@ module.exports = function handleTickDefaults(containerIn, containerOut, coerce, },{"../../lib":169,"./layout_attributes":225}],234:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -58956,7 +59326,7 @@ module.exports = function handleTickValueDefaults(containerIn, containerOut, coe },{"./clean_ticks":218}],235:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59169,7 +59539,7 @@ module.exports = function transitionAxes(gd, edits, transitionOpts, makeOnComple },{"../../components/drawing":72,"../../lib":169,"../../registry":258,"./axes":213,"d3":16}],236:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59210,6 +59580,7 @@ function setAutoType(ax, data) { var id = ax._id; var axLetter = id.charAt(0); + var i; // support 3d if(id.indexOf('scene') !== -1) id = axLetter; @@ -59220,7 +59591,8 @@ function setAutoType(ax, data) { // first check for histograms, as the count direction // should always default to a linear axis if(d0.type === 'histogram' && - axLetter === {v: 'y', h: 'x'}[d0.orientation || 'v']) { + axLetter === {v: 'y', h: 'x'}[d0.orientation || 'v'] + ) { ax.type = 'linear'; return; } @@ -59228,7 +59600,13 @@ function setAutoType(ax, data) { var calAttr = axLetter + 'calendar'; var calendar = d0[calAttr]; var opts = {noMultiCategory: !traceIs(d0, 'cartesian') || traceIs(d0, 'noMultiCategory')}; - var i; + + // To not confuse 2D x/y used for per-box sample points for multicategory coordinates + if(d0.type === 'box' && d0._hasPreCompStats && + axLetter === {h: 'x', v: 'y'}[d0.orientation || 'v'] + ) { + opts.noMultiCategory = true; + } // check all boxes on this x axis to see // if they're dates, numbers, or categories @@ -59298,7 +59676,7 @@ function isBoxWithoutPositionCoords(trace, axLetter) { },{"../../registry":258,"./axis_autotype":214}],237:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59725,7 +60103,7 @@ function crawl(attrs, callback, path, depth) { },{"../lib":169,"../registry":258}],238:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59837,7 +60215,7 @@ exports.defaults = function(containerOut, layout, coerce, dfltDomains) { },{"../lib/extend":164}],239:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59902,7 +60280,7 @@ module.exports = function(opts) { },{}],240:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59948,7 +60326,7 @@ module.exports = { },{}],241:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -60077,7 +60455,7 @@ exports.getSubplotData = function getSubplotData(data, type, subplotId) { },{"../registry":258,"./cartesian/constants":219}],242:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -60111,7 +60489,7 @@ module.exports = project; },{}],243:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -60202,6 +60580,25 @@ module.exports = { }), editType: 'layoutstyle' }, + uniformtext: { + mode: { + valType: 'enumerated', + values: [false, 'hide', 'show'], + dflt: false, + + editType: 'plot', + + }, + minsize: { + valType: 'number', + min: 0, + dflt: 0, + + editType: 'plot', + + }, + editType: 'plot' + }, autosize: { valType: 'boolean', @@ -60415,7 +60812,7 @@ module.exports = { },{"../components/color/attributes":50,"../lib/extend":164,"./animation_attributes":208,"./font_attributes":239,"./pad_attributes":244}],244:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -60470,7 +60867,7 @@ module.exports = function(opts) { },{}],245:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61772,9 +62169,14 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac coerce('meta'); if(Registry.traceIs(traceOut, 'showLegend')) { - traceOut._dfltShowLegend = true; - coerce('showlegend'); + Lib.coerce(traceIn, traceOut, + _module.attributes.showlegend ? _module.attributes : plots.attributes, + 'showlegend' + ); + coerce('legendgroup'); + + traceOut._dfltShowLegend = true; } else { traceOut._dfltShowLegend = false; } @@ -61938,6 +62340,11 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) { coerce('title.pad.b'); coerce('title.pad.l'); + var uniformtextMode = coerce('uniformtext.mode'); + if(uniformtextMode) { + coerce('uniformtext.minsize'); + } + // Make sure that autosize is defaulted to *true* // on layouts with no set width and height for backward compatibly, // in particular https://plot.ly/javascript/responsive-fluid-layout/ @@ -63736,7 +64143,7 @@ plots.cleanBasePlot = function(desiredType, newFullData, newFullLayout, oldFullD },{"../components/color":51,"../constants/numerical":149,"../lib":169,"../plot_api/plot_schema":202,"../plot_api/plot_template":203,"../plots/get_data":241,"../registry":258,"./animation_attributes":208,"./attributes":210,"./cartesian/axis_ids":216,"./command":237,"./font_attributes":239,"./frame_attributes":240,"./layout_attributes":243,"d3":16,"fast-isnumeric":18}],246:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63778,9 +64185,9 @@ module.exports = { } }; -},{"../../../lib/extend":164,"../../../traces/scatter/attributes":377}],247:[function(_dereq_,module,exports){ +},{"../../../lib/extend":164,"../../../traces/scatter/attributes":378}],247:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63902,7 +64309,7 @@ module.exports = overrideAll({ },{"../../../lib/extend":164,"../../../plot_api/edit_types":196,"../../cartesian/layout_attributes":225}],248:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63917,7 +64324,7 @@ Polar.manager = _dereq_('./micropolar_manager'); },{"./micropolar":249,"./micropolar_manager":250}],249:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65337,7 +65744,7 @@ var µ = module.exports = { version: '0.2.2' }; },{"../../../constants/alignment":145,"../../../lib":169,"d3":16}],250:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65423,7 +65830,7 @@ manager.fillLayout = function(_gd) { },{"../../../components/color":51,"../../../lib":169,"./micropolar":249,"./undo_manager":251,"d3":16}],251:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65489,7 +65896,7 @@ module.exports = function UndoManager() { },{}],252:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65574,7 +65981,7 @@ module.exports = function handleSubplotDefaults(layoutIn, layoutOut, fullData, o },{"../lib":169,"../plot_api/plot_template":203,"./domain":238}],253:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65657,7 +66064,7 @@ exports.texttemplateAttrs = function(opts, extra) { },{"../constants/docs":146}],254:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65741,7 +66148,7 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) },{"../../lib":169,"../../plots/get_data":241,"./layout_attributes":255,"./layout_defaults":256,"./ternary":257}],255:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65848,7 +66255,7 @@ attrs.aaxis.uirevision = attrs.baxis.uirevision = attrs.caxis.uirevision = { },{"../../components/color/attributes":50,"../../lib/extend":164,"../../plot_api/edit_types":196,"../cartesian/layout_attributes":225,"../domain":238}],256:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65980,7 +66387,7 @@ function handleAxisDefaults(containerIn, containerOut, options, ternaryLayoutOut },{"../../components/color":51,"../../lib":169,"../../plot_api/plot_template":203,"../cartesian/line_grid_defaults":227,"../cartesian/tick_label_defaults":232,"../cartesian/tick_mark_defaults":233,"../cartesian/tick_value_defaults":234,"../subplot_defaults":252,"./layout_attributes":255}],257:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66737,7 +67144,7 @@ function removeZoombox(gd) { },{"../../components/color":51,"../../components/dragelement":69,"../../components/drawing":72,"../../components/fx":89,"../../components/titles":138,"../../lib":169,"../../lib/extend":164,"../../registry":258,"../cartesian/axes":213,"../cartesian/constants":219,"../cartesian/select":230,"../cartesian/set_convert":231,"../plots":245,"d3":16,"tinycolor2":34}],258:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67203,7 +67610,7 @@ function getTraceType(traceType) { },{"./lib/dom":162,"./lib/extend":164,"./lib/is_plain_object":170,"./lib/loggers":173,"./lib/noop":178,"./lib/push_unique":182,"./plots/attributes":210,"./plots/layout_attributes":243}],259:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67376,7 +67783,7 @@ module.exports = function clonePlot(graphObj, options) { },{"../lib":169,"../registry":258}],260:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67446,7 +67853,7 @@ module.exports = downloadImage; },{"../lib":169,"../plot_api/to_image":206,"./filesaver":261,"./helpers":262}],261:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67526,7 +67933,7 @@ module.exports = fileSaver; },{"../lib":169,"./helpers":262}],262:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67603,7 +68010,7 @@ exports.MSG_IE_BAD_FORMAT = 'Sorry IE does not support downloading from canvas. },{"../registry":258}],263:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67629,7 +68036,7 @@ module.exports = Snapshot; },{"./cloneplot":259,"./download":260,"./helpers":262,"./svgtoimg":264,"./toimage":265,"./tosvg":266}],264:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67756,7 +68163,7 @@ module.exports = svgToImg; },{"../lib":169,"./helpers":262,"events":15}],265:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67833,7 +68240,7 @@ module.exports = toImage; },{"../lib":169,"../registry":258,"./cloneplot":259,"./helpers":262,"./svgtoimg":264,"./tosvg":266,"events":15}],266:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67949,21 +68356,29 @@ module.exports = function toSVG(gd, format, scale) { } }); - svg.selectAll('.point, .scatterpts, .legendfill>path, .legendlines>path, .cbfill').each(function() { - var pt = d3.select(this); - // similar to font family styles above, - // we must remove " after the SVG DOM has been serialized - var fill = this.style.fill; - if(fill && fill.indexOf('url(') !== -1) { - pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB)); - } + if(fullLayout._gradientUrlQueryParts) { + var queryParts = []; + for(var k in fullLayout._gradientUrlQueryParts) queryParts.push(k); - var stroke = this.style.stroke; - if(stroke && stroke.indexOf('url(') !== -1) { - pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB)); + if(queryParts.length) { + svg.selectAll(queryParts.join(',')).each(function() { + var pt = d3.select(this); + + // similar to font family styles above, + // we must remove " after the SVG DOM has been serialized + var fill = this.style.fill; + if(fill && fill.indexOf('url(') !== -1) { + pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB)); + } + + var stroke = this.style.stroke; + if(stroke && stroke.indexOf('url(') !== -1) { + pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB)); + } + }); } - }); + } if(format === 'pdf' || format === 'eps') { // these formats make the extra line MathJax adds around symbols look super thick in some cases @@ -68014,7 +68429,7 @@ module.exports = function toSVG(gd, format, scale) { },{"../components/color":51,"../components/drawing":72,"../constants/xmlns_namespaces":150,"../lib":169,"d3":16}],267:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68047,7 +68462,7 @@ module.exports = function arraysToCalcdata(cd, trace) { },{"../../lib":169}],268:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68254,9 +68669,9 @@ module.exports = { } }; -},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../../plots/font_attributes":239,"../../plots/template_attributes":253,"../scatter/attributes":377,"./constants":270}],269:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../../plots/font_attributes":239,"../../plots/template_attributes":253,"../scatter/attributes":378,"./constants":270}],269:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68319,9 +68734,9 @@ module.exports = function calc(gd, trace) { return cd; }; -},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"../../plots/cartesian/axes":213,"../scatter/calc_selection":379,"./arrays_to_calcdata":267}],270:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"../../plots/cartesian/axes":213,"../scatter/calc_selection":380,"./arrays_to_calcdata":267}],270:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68343,7 +68758,7 @@ module.exports = { },{}],271:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69111,7 +69526,7 @@ module.exports = { },{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"../../plots/cartesian/axis_ids":216,"../../registry":258,"./sieve.js":281,"fast-isnumeric":18}],272:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69239,6 +69654,7 @@ function handleText(traceIn, traceOut, layout, coerce, textposition, opts) { var moduleHasCliponaxis = !(opts.moduleHasCliponaxis === false); var moduleHasTextangle = !(opts.moduleHasTextangle === false); var moduleHasInsideanchor = !(opts.moduleHasInsideanchor === false); + var hasPathbar = !!opts.hasPathbar; var hasBoth = Array.isArray(textposition) || textposition === 'auto'; var hasInside = hasBoth || textposition === 'inside'; @@ -69259,8 +69675,15 @@ function handleText(traceIn, traceOut, layout, coerce, textposition, opts) { } coerceFont(coerce, 'insidetextfont', insideTextFontDefault); - if(hasOutside) coerceFont(coerce, 'outsidetextfont', dfltFont); + if(hasPathbar) { + var pathbarTextFontDefault = Lib.extendFlat({}, dfltFont); + if(isColorInheritedFromLayoutFont) { + delete pathbarTextFontDefault.color; + } + coerceFont(coerce, 'pathbar.textfont', pathbarTextFontDefault); + } + if(hasOutside) coerceFont(coerce, 'outsidetextfont', dfltFont); if(moduleHasSelected) coerce('selected.textfont.color'); if(moduleHasUnselected) coerce('unselected.textfont.color'); @@ -69283,9 +69706,9 @@ module.exports = { handleText: handleText }; -},{"../../components/color":51,"../../lib":169,"../../plots/cartesian/axis_ids":216,"../../registry":258,"../scatter/xy_defaults":403,"./attributes":268,"./style_defaults":283}],273:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":169,"../../plots/cartesian/axis_ids":216,"../../registry":258,"../scatter/xy_defaults":404,"./attributes":268,"./style_defaults":283}],273:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69314,7 +69737,7 @@ module.exports = function eventData(out, pt, trace) { },{}],274:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69392,7 +69815,7 @@ exports.getLineWidth = function(trace, di) { },{"../../lib":169,"fast-isnumeric":18,"tinycolor2":34}],275:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69577,7 +70000,7 @@ module.exports = { },{"../../components/color":51,"../../components/fx":89,"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"./helpers":274}],276:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69613,9 +70036,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"../scatter/marker_colorbar":395,"./arrays_to_calcdata":267,"./attributes":268,"./calc":269,"./cross_trace_calc":271,"./defaults":272,"./event_data":273,"./hover":275,"./layout_attributes":277,"./layout_defaults":278,"./plot":279,"./select":280,"./style":282}],277:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../scatter/marker_colorbar":396,"./arrays_to_calcdata":267,"./attributes":268,"./calc":269,"./cross_trace_calc":271,"./defaults":272,"./event_data":273,"./hover":275,"./layout_attributes":277,"./layout_defaults":278,"./plot":279,"./select":280,"./style":282}],277:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69663,7 +70086,7 @@ module.exports = { },{}],278:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69723,7 +70146,7 @@ module.exports = function(layoutIn, layoutOut, fullData) { },{"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"./layout_attributes":277}],279:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69743,6 +70166,10 @@ var Drawing = _dereq_('../../components/drawing'); var Registry = _dereq_('../../registry'); var tickText = _dereq_('../../plots/cartesian/axes').tickText; +var uniformText = _dereq_('./uniform_text'); +var recordMinTextSize = uniformText.recordMinTextSize; +var clearMinTextSize = uniformText.clearMinTextSize; + var style = _dereq_('./style'); var helpers = _dereq_('./helpers'); var constants = _dereq_('./constants'); @@ -69782,8 +70209,8 @@ function getXY(di, xa, ya, isHorizontal) { return isHorizontal ? [s, p] : [p, s]; } -function transition(selection, opts, makeOnCompleteCallback) { - if(hasTransition(opts)) { +function transition(selection, fullLayout, opts, makeOnCompleteCallback) { + if(!fullLayout.uniformtext.mode && hasTransition(opts)) { var onComplete; if(makeOnCompleteCallback) { onComplete = makeOnCompleteCallback(); @@ -69815,6 +70242,9 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) gap: fullLayout.bargap, groupgap: fullLayout.bargroupgap }; + + // don't clear bar when this is called from waterfall or funnel + clearMinTextSize('bar', fullLayout); } var bartraces = Lib.makeTraceGroups(traceLayer, cdModule, 'trace bars').each(function(cd) { @@ -69933,13 +70363,13 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) y1 = fixpx(y1, y0); } - var sel = transition(Lib.ensureSingle(bar, 'path'), opts, makeOnCompleteCallback); + var sel = transition(Lib.ensureSingle(bar, 'path'), fullLayout, opts, makeOnCompleteCallback); sel .style('vector-effect', 'non-scaling-stroke') .attr('d', 'M' + x0 + ',' + y0 + 'V' + y1 + 'H' + x1 + 'V' + y0 + 'Z') .call(Drawing.setClipUrl, plotinfo.layerClipId, gd); - if(hasTransition(opts)) { + if(!fullLayout.uniformtext.mode && hasTransition(opts)) { var styleFns = Drawing.makePointStyleFns(trace); Drawing.singlePointStyle(di, sel, trace, styleFns, gd); } @@ -69961,14 +70391,14 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) Registry.getComponentMethod('errorbars', 'plot')(gd, bartraces, plotinfo, opts); } -function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, makeOnCompleteCallback) { +function appendBarText(gd, plotinfo, bar, cd, i, x0, x1, y0, y1, opts, makeOnCompleteCallback) { var xa = plotinfo.xaxis; var ya = plotinfo.yaxis; var fullLayout = gd._fullLayout; var textPosition; - function appendTextNode(bar, text, textFont) { + function appendTextNode(bar, text, font) { var textSelection = Lib.ensureSingle(bar, 'text') .text(text) .attr({ @@ -69978,17 +70408,17 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma // tex and regular text together 'data-notex': 1 }) - .call(Drawing.font, textFont) + .call(Drawing.font, font) .call(svgTextUtils.convertToTspans, gd); return textSelection; } // get trace attributes - var trace = calcTrace[0].trace; + var trace = cd[0].trace; var isHorizontal = (trace.orientation === 'h'); - var text = getText(fullLayout, calcTrace, i, xa, ya); + var text = getText(fullLayout, cd, i, xa, ya); textPosition = getTextPosition(trace, i); // compute text position @@ -69996,7 +70426,7 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma opts.mode === 'stack' || opts.mode === 'relative'; - var calcBar = calcTrace[i]; + var calcBar = cd[i]; var isOutmostBar = !inStackOrRelativeMode || calcBar._outmost; if(!text || @@ -70009,7 +70439,7 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma } var layoutFont = fullLayout.font; - var barColor = style.getBarColor(calcTrace[i], trace); + var barColor = style.getBarColor(cd[i], trace); var insideTextFont = style.getInsideTextFont(trace, i, layoutFont, barColor); var outsideTextFont = style.getOutsideTextFont(trace, i, layoutFont); @@ -70042,6 +70472,7 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma var textBB; var textWidth; var textHeight; + var font; if(textPosition === 'outside') { if(!isOutmostBar && !calcBar.hasB) textPosition = 'inside'; @@ -70051,7 +70482,10 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma if(isOutmostBar) { // draw text using insideTextFont and check if it fits inside bar textPosition = 'inside'; - textSelection = appendTextNode(bar, text, insideTextFont); + + font = Lib.ensureUniformFontSize(gd, insideTextFont); + + textSelection = appendTextNode(bar, text, font); textBB = Drawing.bBox(textSelection.node()), textWidth = textBB.width, @@ -70081,9 +70515,9 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma } if(!textSelection) { - textSelection = appendTextNode(bar, text, - (textPosition === 'outside') ? - outsideTextFont : insideTextFont); + font = Lib.ensureUniformFontSize(gd, (textPosition === 'outside') ? outsideTextFont : insideTextFont); + + textSelection = appendTextNode(bar, text, font); var currentTransform = textSelection.attr('transform'); textSelection.attr('transform', ''); @@ -70098,6 +70532,8 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma } } + var angle = trace.textangle; + // compute text transform var transform, constrained; if(textPosition === 'outside') { @@ -70105,42 +70541,64 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma trace.constraintext === 'both' || trace.constraintext === 'outside'; - transform = Lib.getTextTransform(toMoveOutsideBar(x0, x1, y0, y1, textBB, { + transform = toMoveOutsideBar(x0, x1, y0, y1, textBB, { isHorizontal: isHorizontal, constrained: constrained, - angle: trace.textangle - })); + angle: angle + }); } else { constrained = trace.constraintext === 'both' || trace.constraintext === 'inside'; - transform = Lib.getTextTransform(toMoveInsideBar(x0, x1, y0, y1, textBB, { + transform = toMoveInsideBar(x0, x1, y0, y1, textBB, { isHorizontal: isHorizontal, constrained: constrained, - angle: trace.textangle, + angle: angle, anchor: trace.insidetextanchor - })); + }); } - transition(textSelection, opts, makeOnCompleteCallback).attr('transform', transform); + transform.fontSize = font.size; + recordMinTextSize(trace.type, transform, fullLayout); + calcBar.transform = transform; + + transition(textSelection, fullLayout, opts, makeOnCompleteCallback) + .attr('transform', Lib.getTextTransform(transform)); } function getRotateFromAngle(angle) { return (angle === 'auto') ? 0 : angle; } +function getRotatedTextSize(textBB, rotate) { + var a = Math.PI / 180 * rotate; + var absSin = Math.abs(Math.sin(a)); + var absCos = Math.abs(Math.cos(a)); + + return { + x: textBB.width * absCos + textBB.height * absSin, + y: textBB.width * absSin + textBB.height * absCos + }; +} + function toMoveInsideBar(x0, x1, y0, y1, textBB, opts) { var isHorizontal = !!opts.isHorizontal; var constrained = !!opts.constrained; var angle = opts.angle || 0; - var anchor = opts.anchor || 0; + var anchor = opts.anchor || 'end'; + var isEnd = anchor === 'end'; + var isStart = anchor === 'start'; + var leftToRight = opts.leftToRight || 0; // left: -1, center: 0, right: 1 + var toRight = (leftToRight + 1) / 2; + var toLeft = 1 - toRight; var textWidth = textBB.width; var textHeight = textBB.height; var lx = Math.abs(x1 - x0); var ly = Math.abs(y1 - y0); + // compute remaining space var textpad = ( lx > (2 * TEXTPAD) && ly > (2 * TEXTPAD) @@ -70149,67 +70607,70 @@ function toMoveInsideBar(x0, x1, y0, y1, textBB, opts) { lx -= 2 * textpad; ly -= 2 * textpad; - var autoRotate = (angle === 'auto'); - var isAutoRotated = false; - if(autoRotate && + var rotate = getRotateFromAngle(angle); + if((angle === 'auto') && !(textWidth <= lx && textHeight <= ly) && (textWidth > lx || textHeight > ly) && ( !(textWidth > ly || textHeight > lx) || ((textWidth < textHeight) !== (lx < ly)) )) { - isAutoRotated = true; + rotate += 90; } - if(isAutoRotated) { - // don't rotate yet only swap bar width with height - var tmp = ly; - ly = lx; - lx = tmp; + var t = getRotatedTextSize(textBB, rotate); + + var scale = 1; + if(constrained) { + scale = Math.min( + 1, + lx / t.x, + ly / t.y + ); } - var rotate = getRotateFromAngle(angle); - var absSin = Math.abs(Math.sin(Math.PI / 180 * rotate)); - var absCos = Math.abs(Math.cos(Math.PI / 180 * rotate)); - - // compute and apply text padding - var dx = Math.max(lx * absCos, ly * absSin); - var dy = Math.max(lx * absSin, ly * absCos); - - var scale = (constrained) ? - Math.min(dx / textWidth, dy / textHeight) : - Math.max(absCos, absSin); - - scale = Math.min(1, scale); - // compute text and target positions - var targetX = (x0 + x1) / 2; + var textX = ( + textBB.left * toLeft + + textBB.right * toRight + ); + var textY = (textBB.top + textBB.bottom) / 2; + var targetX = ( + (x0 + TEXTPAD) * toLeft + + (x1 - TEXTPAD) * toRight + ); var targetY = (y0 + y1) / 2; - - if(anchor !== 'middle') { // case of 'start' or 'end' - var targetWidth = scale * (isHorizontal !== isAutoRotated ? textHeight : textWidth); - var targetHeight = scale * (isHorizontal !== isAutoRotated ? textWidth : textHeight); - textpad += 0.5 * (targetWidth * absSin + targetHeight * absCos); + var anchorX = 0; + var anchorY = 0; + if(isStart || isEnd) { + var extrapad = (isHorizontal ? t.x : t.y) / 2; + var dir = isHorizontal ? dirSign(x0, x1) : dirSign(y0, y1); if(isHorizontal) { - textpad *= dirSign(x0, x1); - targetX = (anchor === 'start') ? x0 + textpad : x1 - textpad; + if(isStart) { + targetX = x0 + dir * textpad; + anchorX = -dir * extrapad; + } else { + targetX = x1 - dir * textpad; + anchorX = dir * extrapad; + } } else { - textpad *= dirSign(y0, y1); - targetY = (anchor === 'start') ? y0 + textpad : y1 - textpad; + if(isStart) { + targetY = y0 + dir * textpad; + anchorY = -dir * extrapad; + } else { + targetY = y1 - dir * textpad; + anchorY = dir * extrapad; + } } } - var textX = (textBB.left + textBB.right) / 2; - var textY = (textBB.top + textBB.bottom) / 2; - - // lastly apply auto rotation - if(isAutoRotated) rotate += 90; - return { textX: textX, textY: textY, targetX: targetX, targetY: targetY, + anchorX: anchorX, + anchorY: anchorY, scale: scale, rotate: rotate }; @@ -70243,45 +70704,47 @@ function toMoveOutsideBar(x0, x1, y0, y1, textBB, opts) { } var rotate = getRotateFromAngle(angle); - var absSin = Math.abs(Math.sin(Math.PI / 180 * rotate)); - var absCos = Math.abs(Math.cos(Math.PI / 180 * rotate)); + var t = getRotatedTextSize(textBB, rotate); // compute text and target positions - var targetWidth = scale * (isHorizontal ? textHeight : textWidth); - var targetHeight = scale * (isHorizontal ? textWidth : textHeight); - textpad += 0.5 * (targetWidth * absSin + targetHeight * absCos); - - var targetX = (x0 + x1) / 2; - var targetY = (y0 + y1) / 2; - - if(isHorizontal) { - targetX = x1 - textpad * dirSign(x1, x0); - } else { - targetY = y1 + textpad * dirSign(y0, y1); - } - + var extrapad = (isHorizontal ? t.x : t.y) / 2; var textX = (textBB.left + textBB.right) / 2; var textY = (textBB.top + textBB.bottom) / 2; + var targetX = (x0 + x1) / 2; + var targetY = (y0 + y1) / 2; + var anchorX = 0; + var anchorY = 0; + + var dir = isHorizontal ? dirSign(x1, x0) : dirSign(y0, y1); + if(isHorizontal) { + targetX = x1 - dir * textpad; + anchorX = dir * extrapad; + } else { + targetY = y1 + dir * textpad; + anchorY = -dir * extrapad; + } return { textX: textX, textY: textY, targetX: targetX, targetY: targetY, + anchorX: anchorX, + anchorY: anchorY, scale: scale, rotate: rotate }; } -function getText(fullLayout, calcTrace, index, xa, ya) { - var trace = calcTrace[0].trace; +function getText(fullLayout, cd, index, xa, ya) { + var trace = cd[0].trace; var texttemplate = trace.texttemplate; var value; if(texttemplate) { - value = calcTexttemplate(fullLayout, calcTrace, index, xa, ya); + value = calcTexttemplate(fullLayout, cd, index, xa, ya); } else if(trace.textinfo) { - value = calcTextinfo(calcTrace, index, xa, ya); + value = calcTextinfo(cd, index, xa, ya); } else { value = helpers.getValue(trace.text, index); } @@ -70294,8 +70757,8 @@ function getTextPosition(trace, index) { return helpers.coerceEnumerated(attributeTextPosition, value); } -function calcTexttemplate(fullLayout, calcTrace, index, xa, ya) { - var trace = calcTrace[0].trace; +function calcTexttemplate(fullLayout, cd, index, xa, ya) { + var trace = cd[0].trace; var texttemplate = Lib.castOption(trace, index, 'texttemplate'); if(!texttemplate) return ''; var isWaterfall = (trace.type === 'waterfall'); @@ -70323,7 +70786,7 @@ function calcTexttemplate(fullLayout, calcTrace, index, xa, ya) { return tickText(vAxis, +v, true).text; } - var cdi = calcTrace[index]; + var cdi = cd[index]; var obj = {}; obj.label = cdi.p; @@ -70364,8 +70827,8 @@ function calcTexttemplate(fullLayout, calcTrace, index, xa, ya) { return Lib.texttemplateString(texttemplate, obj, fullLayout._d3locale, pt, obj, trace._meta || {}); } -function calcTextinfo(calcTrace, index, xa, ya) { - var trace = calcTrace[0].trace; +function calcTextinfo(cd, index, xa, ya) { + var trace = cd[0].trace; var isHorizontal = (trace.orientation === 'h'); var isWaterfall = (trace.type === 'waterfall'); var isFunnel = (trace.type === 'funnel'); @@ -70381,7 +70844,7 @@ function calcTextinfo(calcTrace, index, xa, ya) { } var textinfo = trace.textinfo; - var cdi = calcTrace[index]; + var cdi = cd[index]; var parts = textinfo.split('+'); var text = []; @@ -70390,7 +70853,7 @@ function calcTextinfo(calcTrace, index, xa, ya) { var hasFlag = function(flag) { return parts.indexOf(flag) !== -1; }; if(hasFlag('label')) { - text.push(formatLabel(calcTrace[index].p)); + text.push(formatLabel(cd[index].p)); } if(hasFlag('text')) { @@ -70440,13 +70903,12 @@ function calcTextinfo(calcTrace, index, xa, ya) { module.exports = { plot: plot, - toMoveInsideBar: toMoveInsideBar, - toMoveOutsideBar: toMoveOutsideBar + toMoveInsideBar: toMoveInsideBar }; -},{"../../components/color":51,"../../components/drawing":72,"../../components/fx/helpers":86,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../registry":258,"./attributes":268,"./constants":270,"./helpers":274,"./style":282,"d3":16,"fast-isnumeric":18}],280:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../components/fx/helpers":86,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../registry":258,"./attributes":268,"./constants":270,"./helpers":274,"./style":282,"./uniform_text":284,"d3":16,"fast-isnumeric":18}],280:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70510,7 +70972,7 @@ function getCentroid(d, xa, ya, isHorizontal, isFunnel) { },{}],281:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70621,7 +71083,7 @@ Sieve.prototype.getLabel = function getLabel(position, value) { },{"../../constants/numerical":149,"../../lib":169}],282:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70636,6 +71098,7 @@ var Drawing = _dereq_('../../components/drawing'); var Lib = _dereq_('../../lib'); var Registry = _dereq_('../../registry'); +var resizeText = _dereq_('./uniform_text').resizeText; var attributes = _dereq_('./attributes'); var attributeTextFont = attributes.textfont; var attributeInsideTextFont = attributes.insidetextfont; @@ -70644,6 +71107,8 @@ var helpers = _dereq_('./helpers'); function style(gd) { var s = d3.select(gd).selectAll('g.barlayer').selectAll('g.trace'); + resizeText(gd, s, 'bar'); + var barcount = s.size(); var fullLayout = gd._fullLayout; @@ -70679,7 +71144,8 @@ function stylePoints(sel, trace, gd) { function styleTextPoints(sel, trace, gd) { sel.selectAll('text').each(function(d) { var tx = d3.select(this); - var font = determineFont(tx, d, trace, gd); + var font = Lib.ensureUniformFontSize(gd, determineFont(tx, d, trace, gd)); + Drawing.font(tx, font); }); } @@ -70706,7 +71172,7 @@ function styleTextInSelectionMode(txs, trace, gd) { var font; if(d.selected) { - font = Lib.extendFlat({}, determineFont(tx, d, trace, gd)); + font = Lib.ensureUniformFontSize(gd, determineFont(tx, d, trace, gd)); var selectedFontColor = trace.selected.textfont && trace.selected.textfont.color; if(selectedFontColor) { @@ -70793,12 +71259,13 @@ module.exports = { styleOnSelect: styleOnSelect, getInsideTextFont: getInsideTextFont, getOutsideTextFont: getOutsideTextFont, - getBarColor: getBarColor + getBarColor: getBarColor, + resizeText: resizeText }; -},{"../../components/color":51,"../../components/drawing":72,"../../lib":169,"../../registry":258,"./attributes":268,"./helpers":274,"d3":16}],283:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../lib":169,"../../registry":258,"./attributes":268,"./helpers":274,"./uniform_text":284,"d3":16}],283:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70836,7 +71303,93 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, default },{"../../components/color":51,"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62}],284:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var d3 = _dereq_('d3'); +var Lib = _dereq_('../../lib'); + +function resizeText(gd, gTrace, traceType) { + var fullLayout = gd._fullLayout; + var minSize = fullLayout['_' + traceType + 'Text_minsize']; + if(minSize) { + var shouldHide = fullLayout.uniformtext.mode === 'hide'; + + var selector; + switch(traceType) { + case 'funnelarea' : + case 'pie' : + case 'sunburst' : + selector = 'g.slice'; + break; + case 'treemap' : + selector = 'g.slice, g.pathbar'; + break; + default : + selector = 'g.points > g.point'; + } + + gTrace.selectAll(selector).each(function(d) { + var transform = d.transform; + if(transform) { + transform.scale = (shouldHide && transform.hide) ? 0 : minSize / transform.fontSize; + + var el = d3.select(this).select('text'); + el.attr('transform', Lib.getTextTransform(transform)); + } + }); + } +} + +function recordMinTextSize( + traceType, // in + transform, // inout + fullLayout // inout +) { + if(fullLayout.uniformtext.mode) { + var minKey = getMinKey(traceType); + var minSize = fullLayout.uniformtext.minsize; + var size = transform.scale * transform.fontSize; + + transform.hide = size < minSize; + + fullLayout[minKey] = fullLayout[minKey] || Infinity; + if(!transform.hide) { + fullLayout[minKey] = Math.min( + fullLayout[minKey], + Math.max(size, minSize) + ); + } + } +} + +function clearMinTextSize( + traceType, // in + fullLayout // inout +) { + var minKey = getMinKey(traceType); + fullLayout[minKey] = undefined; +} + +function getMinKey(traceType) { + return '_' + traceType + 'Text_minsize'; +} + +module.exports = { + recordMinTextSize: recordMinTextSize, + clearMinTextSize: clearMinTextSize, + resizeText: resizeText +}; + +},{"../../lib":169,"d3":16}],285:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70877,30 +71430,58 @@ module.exports = { editType: 'calc+clearAxisTypes', }, + + dx: { + valType: 'number', + + editType: 'calc', + + }, + dy: { + valType: 'number', + + editType: 'calc', + + }, + name: { valType: 'string', editType: 'calc+clearAxisTypes', }, - text: extendFlat({}, scatterAttrs.text, { + + q1: { + valType: 'data_array', - }), - hovertext: extendFlat({}, scatterAttrs.hovertext, { + editType: 'calc+clearAxisTypes', - }), - hovertemplate: hovertemplateAttrs({ + }, + median: { + valType: 'data_array', - }), - whiskerwidth: { - valType: 'number', - min: 0, - max: 1, - dflt: 0.5, + editType: 'calc+clearAxisTypes', + + }, + q3: { + valType: 'data_array', + + editType: 'calc+clearAxisTypes', + + }, + lowerfence: { + valType: 'data_array', editType: 'calc', }, + upperfence: { + valType: 'data_array', + + editType: 'calc', + + }, + notched: { valType: 'boolean', @@ -70916,18 +71497,21 @@ module.exports = { editType: 'calc', }, - boxpoints: { - valType: 'enumerated', - values: ['all', 'outliers', 'suspectedoutliers', false], - dflt: 'outliers', + notchspan: { + valType: 'data_array', editType: 'calc', }, - boxmean: { + + // TODO + // maybe add + // - loweroutlierbound / upperoutlierbound + // - lowersuspectedoutlierbound / uppersuspectedoutlierbound + + boxpoints: { valType: 'enumerated', - values: [true, 'sd', false], - dflt: false, + values: ['all', 'outliers', 'suspectedoutliers', false], editType: 'calc', @@ -70948,6 +71532,27 @@ module.exports = { editType: 'calc', }, + + boxmean: { + valType: 'enumerated', + values: [true, 'sd', false], + + editType: 'calc', + + }, + mean: { + valType: 'data_array', + + editType: 'calc', + + }, + sd: { + valType: 'data_array', + + editType: 'calc', + + }, + orientation: { valType: 'enumerated', values: ['v', 'h'], @@ -70956,6 +71561,15 @@ module.exports = { }, + quartilemethod: { + valType: 'enumerated', + values: ['linear', 'exclusive', 'inclusive'], + dflt: 'linear', + + editType: 'calc', + + }, + width: { valType: 'number', min: 0, @@ -71006,6 +71620,7 @@ module.exports = { }, editType: 'plot' }, + line: { color: { valType: 'color', @@ -71023,8 +71638,19 @@ module.exports = { }, editType: 'plot' }, + fillcolor: scatterAttrs.fillcolor, + whiskerwidth: { + valType: 'number', + min: 0, + max: 1, + dflt: 0.5, + + editType: 'calc', + + }, + offsetgroup: barAttrs.offsetgroup, alignmentgroup: barAttrs.alignmentgroup, @@ -71036,6 +71662,17 @@ module.exports = { marker: scatterAttrs.unselected.marker, editType: 'style' }, + + text: extendFlat({}, scatterAttrs.text, { + + }), + hovertext: extendFlat({}, scatterAttrs.hovertext, { + + }), + hovertemplate: hovertemplateAttrs({ + + }), + hoveron: { valType: 'flaglist', flags: ['boxes', 'points'], @@ -71046,9 +71683,9 @@ module.exports = { } }; -},{"../../components/color/attributes":50,"../../lib/extend":164,"../../plots/template_attributes":253,"../bar/attributes":268,"../scatter/attributes":377}],285:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../lib/extend":164,"../../plots/template_attributes":253,"../bar/attributes":268,"../scatter/attributes":378}],286:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71059,11 +71696,12 @@ module.exports = { var isNumeric = _dereq_('fast-isnumeric'); -var Lib = _dereq_('../../lib'); -var _ = Lib._; var Axes = _dereq_('../../plots/cartesian/axes'); +var Lib = _dereq_('../../lib'); + +var BADNUM = _dereq_('../../constants/numerical').BADNUM; +var _ = Lib._; -// outlier definition based on http://www.physics.csbsju.edu/stats/box2.html module.exports = function calc(gd, trace) { var fullLayout = gd._fullLayout; var xa = Axes.getFromId(gd, trace.xaxis || 'x'); @@ -71073,7 +71711,7 @@ module.exports = function calc(gd, trace) { // N.B. violin reuses same Box.calc var numKey = trace.type === 'violin' ? '_numViolins' : '_numBoxes'; - var i; + var i, j; var valAxis, valLetter; var posAxis, posLetter; @@ -71089,108 +71727,238 @@ module.exports = function calc(gd, trace) { posLetter = 'x'; } - var val = valAxis.makeCalcdata(trace, valLetter); - var pos = getPos(trace, posLetter, posAxis, val, fullLayout[numKey]); - - var dv = Lib.distinctVals(pos); + var posArray = getPos(trace, posLetter, posAxis, fullLayout[numKey]); + var dv = Lib.distinctVals(posArray); var posDistinct = dv.vals; var dPos = dv.minDiff / 2; - var posBins = makeBins(posDistinct, dPos); - - var pLen = posDistinct.length; - var ptsPerBin = initNestedArray(pLen); - - // bin pts info per position bins - for(i = 0; i < trace._length; i++) { - var v = val[i]; - if(!isNumeric(v)) continue; - - var n = Lib.findBin(pos[i], posBins); - if(n >= 0 && n < pLen) { - var pt = {v: v, i: i}; - arraysToCalcdata(pt, trace, i); - ptsPerBin[n].push(pt); - } - } + // item in trace calcdata var cdi; + // array of {v: v, i, i} sample pts + var pts; + // values of the `pts` array of objects + var boxVals; + // length of sample + var N; + // single sample point + var pt; + // single sample value + var v; + + // filter function for outlier pts + // outlier definition based on http://www.physics.csbsju.edu/stats/box2.html var ptFilterFn = (trace.boxpoints || trace.points) === 'all' ? Lib.identity : function(pt) { return (pt.v < cdi.lf || pt.v > cdi.uf); }; - var minLowerNotch = Infinity; - var maxUpperNotch = -Infinity; + if(trace._hasPreCompStats) { + var valArrayRaw = trace[valLetter]; + var d2c = function(k) { return valAxis.d2c((trace[k] || [])[i]); }; + var minVal = Infinity; + var maxVal = -Infinity; - // build calcdata trace items, one item per distinct position - for(i = 0; i < pLen; i++) { - if(ptsPerBin[i].length > 0) { - var pts = ptsPerBin[i].sort(sortByVal); - var boxVals = pts.map(extractVal); - var bvLen = boxVals.length; + for(i = 0; i < trace._length; i++) { + var posi = posArray[i]; + if(!isNumeric(posi)) continue; cdi = {}; - cdi.pos = posDistinct[i]; - cdi.pts = pts; + cdi.pos = cdi[posLetter] = posi; - // Sort categories by values - cdi[posLetter] = cdi.pos; - cdi[valLetter] = cdi.pts.map(function(pt) { return pt.v; }); + cdi.q1 = d2c('q1'); + cdi.med = d2c('median'); + cdi.q3 = d2c('q3'); - cdi.min = boxVals[0]; - cdi.max = boxVals[bvLen - 1]; - cdi.mean = Lib.mean(boxVals, bvLen); - cdi.sd = Lib.stdev(boxVals, bvLen, cdi.mean); + pts = []; + if(valArrayRaw && Lib.isArrayOrTypedArray(valArrayRaw[i])) { + for(j = 0; j < valArrayRaw[i].length; j++) { + v = valAxis.d2c(valArrayRaw[i][j]); + if(v !== BADNUM) { + pt = {v: v, i: [i, j]}; + arraysToCalcdata(pt, trace, [i, j]); + pts.push(pt); + } + } + } + cdi.pts = pts.sort(sortByVal); + boxVals = cdi[valLetter] = pts.map(extractVal); + N = boxVals.length; - // first quartile - cdi.q1 = Lib.interp(boxVals, 0.25); - // median - cdi.med = Lib.interp(boxVals, 0.5); - // third quartile - cdi.q3 = Lib.interp(boxVals, 0.75); + if(cdi.med !== BADNUM && cdi.q1 !== BADNUM && cdi.q3 !== BADNUM && + cdi.med >= cdi.q1 && cdi.q3 >= cdi.med + ) { + var lf = d2c('lowerfence'); + cdi.lf = (lf !== BADNUM && lf <= cdi.q1) ? + lf : + computeLowerFence(cdi, boxVals, N); - // lower and upper fences - last point inside - // 1.5 interquartile ranges from quartiles - cdi.lf = Math.min( - cdi.q1, - boxVals[Math.min( - Lib.findBin(2.5 * cdi.q1 - 1.5 * cdi.q3, boxVals, true) + 1, - bvLen - 1 - )] - ); - cdi.uf = Math.max( - cdi.q3, - boxVals[Math.max( - Lib.findBin(2.5 * cdi.q3 - 1.5 * cdi.q1, boxVals), - 0 - )] - ); + var uf = d2c('upperfence'); + cdi.uf = (uf !== BADNUM && uf >= cdi.q3) ? + uf : + computeUpperFence(cdi, boxVals, N); - // lower and upper outliers - 3 IQR out (don't clip to max/min, - // this is only for discriminating suspected & far outliers) - cdi.lo = 4 * cdi.q1 - 3 * cdi.q3; - cdi.uo = 4 * cdi.q3 - 3 * cdi.q1; + var mean = d2c('mean'); + cdi.mean = (mean !== BADNUM) ? + mean : + (N ? Lib.mean(boxVals, N) : (cdi.q1 + cdi.q3) / 2); - // lower and upper notches ~95% Confidence Intervals for median - var iqr = cdi.q3 - cdi.q1; - var mci = 1.57 * iqr / Math.sqrt(bvLen); - cdi.ln = cdi.med - mci; - cdi.un = cdi.med + mci; - minLowerNotch = Math.min(minLowerNotch, cdi.ln); - maxUpperNotch = Math.max(maxUpperNotch, cdi.un); + var sd = d2c('sd'); + cdi.sd = (mean !== BADNUM && sd >= 0) ? + sd : + (N ? Lib.stdev(boxVals, N, cdi.mean) : (cdi.q3 - cdi.q1)); + + cdi.lo = computeLowerOutlierBound(cdi); + cdi.uo = computeUpperOutlierBound(cdi); + + var ns = d2c('notchspan'); + ns = (ns !== BADNUM && ns > 0) ? ns : computeNotchSpan(cdi, N); + cdi.ln = cdi.med - ns; + cdi.un = cdi.med + ns; + + var imin = cdi.lf; + var imax = cdi.uf; + if(trace.boxpoints && boxVals.length) { + imin = Math.min(imin, boxVals[0]); + imax = Math.max(imax, boxVals[N - 1]); + } + if(trace.notched) { + imin = Math.min(imin, cdi.ln); + imax = Math.max(imax, cdi.un); + } + cdi.min = imin; + cdi.max = imax; + } else { + Lib.warn([ + 'Invalid input - make sure that q1 <= median <= q3', + 'q1 = ' + cdi.q1, + 'median = ' + cdi.med, + 'q3 = ' + cdi.q3 + ].join('\n')); + + var v0; + if(cdi.med !== BADNUM) { + v0 = cdi.med; + } else if(cdi.q1 !== BADNUM) { + if(cdi.q3 !== BADNUM) v0 = (cdi.q1 + cdi.q3) / 2; + else v0 = cdi.q1; + } else if(cdi.q3 !== BADNUM) { + v0 = cdi.q3; + } else { + v0 = 0; + } + + // draw box as line segment + cdi.med = v0; + cdi.q1 = cdi.q3 = v0; + cdi.lf = cdi.uf = v0; + cdi.mean = cdi.sd = v0; + cdi.ln = cdi.un = v0; + cdi.min = cdi.max = v0; + } + + minVal = Math.min(minVal, cdi.min); + maxVal = Math.max(maxVal, cdi.max); cdi.pts2 = pts.filter(ptFilterFn); cd.push(cdi); } + + trace._extremes[valAxis._id] = Axes.findExtremes(valAxis, + [minVal, maxVal], + {padded: true} + ); + } else { + var valArray = valAxis.makeCalcdata(trace, valLetter); + var posBins = makeBins(posDistinct, dPos); + var pLen = posDistinct.length; + var ptsPerBin = initNestedArray(pLen); + + // bin pts info per position bins + for(i = 0; i < trace._length; i++) { + v = valArray[i]; + if(!isNumeric(v)) continue; + + var n = Lib.findBin(posArray[i], posBins); + if(n >= 0 && n < pLen) { + pt = {v: v, i: i}; + arraysToCalcdata(pt, trace, i); + ptsPerBin[n].push(pt); + } + } + + var minLowerNotch = Infinity; + var maxUpperNotch = -Infinity; + + var quartilemethod = trace.quartilemethod; + var usesExclusive = quartilemethod === 'exclusive'; + var usesInclusive = quartilemethod === 'inclusive'; + + // build calcdata trace items, one item per distinct position + for(i = 0; i < pLen; i++) { + if(ptsPerBin[i].length > 0) { + cdi = {}; + cdi.pos = cdi[posLetter] = posDistinct[i]; + + pts = cdi.pts = ptsPerBin[i].sort(sortByVal); + boxVals = cdi[valLetter] = pts.map(extractVal); + N = boxVals.length; + + cdi.min = boxVals[0]; + cdi.max = boxVals[N - 1]; + cdi.mean = Lib.mean(boxVals, N); + cdi.sd = Lib.stdev(boxVals, N, cdi.mean); + cdi.med = Lib.interp(boxVals, 0.5); + + if((N % 2) && (usesExclusive || usesInclusive)) { + var lower; + var upper; + + if(usesExclusive) { + // do NOT include the median in either half + lower = boxVals.slice(0, N / 2); + upper = boxVals.slice(N / 2 + 1); + } else if(usesInclusive) { + // include the median in either half + lower = boxVals.slice(0, N / 2 + 1); + upper = boxVals.slice(N / 2); + } + + cdi.q1 = Lib.interp(lower, 0.5); + cdi.q3 = Lib.interp(upper, 0.5); + } else { + cdi.q1 = Lib.interp(boxVals, 0.25); + cdi.q3 = Lib.interp(boxVals, 0.75); + } + + // lower and upper fences + cdi.lf = computeLowerFence(cdi, boxVals, N); + cdi.uf = computeUpperFence(cdi, boxVals, N); + + // lower and upper outliers bounds + cdi.lo = computeLowerOutlierBound(cdi); + cdi.uo = computeUpperOutlierBound(cdi); + + // lower and upper notches + var mci = computeNotchSpan(cdi, N); + cdi.ln = cdi.med - mci; + cdi.un = cdi.med + mci; + minLowerNotch = Math.min(minLowerNotch, cdi.ln); + maxUpperNotch = Math.max(maxUpperNotch, cdi.un); + + cdi.pts2 = pts.filter(ptFilterFn); + + cd.push(cdi); + } + } + + trace._extremes[valAxis._id] = Axes.findExtremes(valAxis, + trace.notched ? valArray.concat([minLowerNotch, maxUpperNotch]) : valArray, + {padded: true} + ); } calcSelection(cd, trace); - trace._extremes[valAxis._id] = Axes.findExtremes(valAxis, - trace.notched ? val.concat([minLowerNotch, maxUpperNotch]) : val, - {padded: true} - ); - if(cd.length > 0) { cd[0].t = { num: fullLayout[numKey], @@ -71221,14 +71989,17 @@ module.exports = function calc(gd, trace) { // so if you want one box // per trace, set x0 (y0) to the x (y) value or category for this trace // (or set x (y) to a constant array matching y (x)) -function getPos(trace, posLetter, posAxis, val, num) { - if(posLetter in trace) { +function getPos(trace, posLetter, posAxis, num) { + var hasPosArray = posLetter in trace; + var hasPos0 = posLetter + '0' in trace; + var hasPosStep = 'd' + posLetter in trace; + + if(hasPosArray || (hasPos0 && hasPosStep)) { return posAxis.makeCalcdata(trace, posLetter); } var pos0; - - if(posLetter + '0' in trace) { + if(hasPos0) { pos0 = trace[posLetter + '0']; } else if('name' in trace && ( posAxis.type === 'category' || ( @@ -71248,7 +72019,11 @@ function getPos(trace, posLetter, posAxis, val, num) { posAxis.r2c_just_indices(pos0) : posAxis.d2c(pos0, 0, trace[posLetter + 'calendar']); - return val.map(function() { return pos0c; }); + var len = trace._length; + var out = new Array(len); + for(var i = 0; i < len; i++) out[i] = pos0c; + + return out; } function makeBins(x, dx) { @@ -71271,15 +72046,21 @@ function initNestedArray(len) { return arr; } -function arraysToCalcdata(pt, trace, i) { - var trace2calc = { - text: 'tx', - hovertext: 'htx' - }; +var TRACE_TO_CALC = { + text: 'tx', + hovertext: 'htx' +}; - for(var k in trace2calc) { - if(Array.isArray(trace[k])) { - pt[trace2calc[k]] = trace[k][i]; +function arraysToCalcdata(pt, trace, ptNumber) { + for(var k in TRACE_TO_CALC) { + if(Lib.isArrayOrTypedArray(trace[k])) { + if(Array.isArray(ptNumber)) { + if(Lib.isArrayOrTypedArray(trace[k][ptNumber[0]])) { + pt[TRACE_TO_CALC[k]] = trace[k][ptNumber[0]][ptNumber[1]]; + } + } else { + pt[TRACE_TO_CALC[k]] = trace[k][ptNumber]; + } } } } @@ -71303,9 +72084,51 @@ function sortByVal(a, b) { return a.v - b.v; } function extractVal(o) { return o.v; } -},{"../../lib":169,"../../plots/cartesian/axes":213,"fast-isnumeric":18}],286:[function(_dereq_,module,exports){ +// last point below 1.5 * IQR +function computeLowerFence(cdi, boxVals, N) { + if(N === 0) return cdi.q1; + return Math.min( + cdi.q1, + boxVals[Math.min( + Lib.findBin(2.5 * cdi.q1 - 1.5 * cdi.q3, boxVals, true) + 1, + N - 1 + )] + ); +} + +// last point above 1.5 * IQR +function computeUpperFence(cdi, boxVals, N) { + if(N === 0) return cdi.q3; + return Math.max( + cdi.q3, + boxVals[Math.max( + Lib.findBin(2.5 * cdi.q3 - 1.5 * cdi.q1, boxVals), + 0 + )] + ); +} + +// 3 IQR below (don't clip to max/min, +// this is only for discriminating suspected & far outliers) +function computeLowerOutlierBound(cdi) { + return 4 * cdi.q1 - 3 * cdi.q3; +} + +// 3 IQR above (don't clip to max/min, +// this is only for discriminating suspected & far outliers) +function computeUpperOutlierBound(cdi) { + return 4 * cdi.q3 - 3 * cdi.q1; +} + +// 95% confidence intervals for median +function computeNotchSpan(cdi, N) { + if(N === 0) return 0; + return 1.57 * (cdi.q3 - cdi.q1) / Math.sqrt(N); +} + +},{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"fast-isnumeric":18}],287:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71532,9 +72355,9 @@ module.exports = { setPositionOffset: setPositionOffset }; -},{"../../lib":169,"../../plots/cartesian/axes":213,"../../plots/cartesian/axis_ids":216}],287:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213,"../../plots/cartesian/axis_ids":216}],288:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71547,6 +72370,7 @@ var Lib = _dereq_('../../lib'); var Registry = _dereq_('../../registry'); var Color = _dereq_('../../components/color'); var handleGroupingDefaults = _dereq_('../bar/defaults').handleGroupingDefaults; +var autoType = _dereq_('../../plots/cartesian/axis_autotype'); var attributes = _dereq_('./attributes'); function supplyDefaults(traceIn, traceOut, defaultColor, layout) { @@ -71557,49 +72381,208 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { handleSampleDefaults(traceIn, traceOut, coerce, layout); if(traceOut.visible === false) return; + var hasPreCompStats = traceOut._hasPreCompStats; + + if(hasPreCompStats) { + coerce('lowerfence'); + coerce('upperfence'); + } + coerce('line.color', (traceIn.marker || {}).color || defaultColor); coerce('line.width'); coerce('fillcolor', Color.addOpacity(traceOut.line.color, 0.5)); - coerce('whiskerwidth'); - coerce('boxmean'); - coerce('width'); + var boxmeanDflt = false; + if(hasPreCompStats) { + var mean = coerce('mean'); + var sd = coerce('sd'); + if(mean && mean.length) { + boxmeanDflt = true; + if(sd && sd.length) boxmeanDflt = 'sd'; + } + } + coerce('boxmean', boxmeanDflt); - var notched = coerce('notched', traceIn.notchwidth !== undefined); + coerce('whiskerwidth'); + coerce('width'); + coerce('quartilemethod'); + + var notchedDflt = false; + if(hasPreCompStats) { + var notchspan = coerce('notchspan'); + if(notchspan && notchspan.length) { + notchedDflt = true; + } + } else if(Lib.validate(traceIn.notchwidth, attributes.notchwidth)) { + notchedDflt = true; + } + var notched = coerce('notched', notchedDflt); if(notched) coerce('notchwidth'); handlePointsDefaults(traceIn, traceOut, coerce, {prefix: 'box'}); } function handleSampleDefaults(traceIn, traceOut, coerce, layout) { + function getDims(arr) { + var dims = 0; + if(arr && arr.length) { + dims += 1; + if(Lib.isArrayOrTypedArray(arr[0]) && arr[0].length) { + dims += 1; + } + } + return dims; + } + + function valid(astr) { + return Lib.validate(traceIn[astr], attributes[astr]); + } + var y = coerce('y'); var x = coerce('x'); - var hasX = x && x.length; + + var sLen; + if(traceOut.type === 'box') { + var q1 = coerce('q1'); + var median = coerce('median'); + var q3 = coerce('q3'); + + traceOut._hasPreCompStats = ( + q1 && q1.length && + median && median.length && + q3 && q3.length + ); + sLen = Math.min( + Lib.minRowLength(q1), + Lib.minRowLength(median), + Lib.minRowLength(q3) + ); + } + + var yDims = getDims(y); + var xDims = getDims(x); + var yLen = yDims && Lib.minRowLength(y); + var xLen = xDims && Lib.minRowLength(x); var defaultOrientation, len; + if(traceOut._hasPreCompStats) { + switch(String(xDims) + String(yDims)) { + // no x / no y + case '00': + var setInX = valid('x0') || valid('dx'); + var setInY = valid('y0') || valid('dy'); - if(y && y.length) { - defaultOrientation = 'v'; - if(hasX) { - len = Math.min(Lib.minRowLength(x), Lib.minRowLength(y)); - } else { - coerce('x0'); - len = Lib.minRowLength(y); + if(setInY && !setInX) { + defaultOrientation = 'h'; + } else { + defaultOrientation = 'v'; + } + + len = sLen; + break; + // just x + case '10': + defaultOrientation = 'v'; + len = Math.min(sLen, xLen); + break; + case '20': + defaultOrientation = 'h'; + len = Math.min(sLen, x.length); + break; + // just y + case '01': + defaultOrientation = 'h'; + len = Math.min(sLen, yLen); + break; + case '02': + defaultOrientation = 'v'; + len = Math.min(sLen, y.length); + break; + // both + case '12': + defaultOrientation = 'v'; + len = Math.min(sLen, xLen, y.length); + break; + case '21': + defaultOrientation = 'h'; + len = Math.min(sLen, x.length, yLen); + break; + case '11': + // this one is ill-defined + len = 0; + break; + case '22': + var hasCategories = false; + var i; + for(i = 0; i < x.length; i++) { + if(autoType(x[i]) === 'category') { + hasCategories = true; + break; + } + } + + if(hasCategories) { + defaultOrientation = 'v'; + len = Math.min(sLen, xLen, y.length); + } else { + for(i = 0; i < y.length; i++) { + if(autoType(y[i]) === 'category') { + hasCategories = true; + break; + } + } + + if(hasCategories) { + defaultOrientation = 'h'; + len = Math.min(sLen, x.length, yLen); + } else { + defaultOrientation = 'v'; + len = Math.min(sLen, xLen, y.length); + } + } + break; } - } else if(hasX) { + } else if(yDims > 0) { + defaultOrientation = 'v'; + if(xDims > 0) { + len = Math.min(xLen, yLen); + } else { + len = Math.min(yLen); + } + } else if(xDims > 0) { defaultOrientation = 'h'; - coerce('y0'); - len = Lib.minRowLength(x); + len = Math.min(xLen); } else { + len = 0; + } + + if(!len) { traceOut.visible = false; return; } traceOut._length = len; + var orientation = coerce('orientation', defaultOrientation); + + // these are just used for positioning, they never define the sample + if(traceOut._hasPreCompStats) { + if(orientation === 'v' && xDims === 0) { + coerce('x0', 0); + coerce('dx', 1); + } else if(orientation === 'h' && yDims === 0) { + coerce('y0', 0); + coerce('dy', 1); + } + } else { + if(orientation === 'v' && xDims === 0) { + coerce('x0'); + } else if(orientation === 'h' && yDims === 0) { + coerce('y0'); + } + } + var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults'); handleCalendarDefaults(traceIn, traceOut, ['x', 'y'], layout); - - coerce('orientation', defaultOrientation); } function handlePointsDefaults(traceIn, traceOut, coerce, opts) { @@ -71608,14 +72591,18 @@ function handlePointsDefaults(traceIn, traceOut, coerce, opts) { var outlierColorDflt = Lib.coerce2(traceIn, traceOut, attributes, 'marker.outliercolor'); var lineoutliercolor = coerce('marker.line.outliercolor'); - var points = coerce( - prefix + 'points', - (outlierColorDflt || lineoutliercolor) ? 'suspectedoutliers' : undefined - ); + var modeDflt = 'outliers'; + if(traceOut._hasPreCompStats) { + modeDflt = 'all'; + } else if(outlierColorDflt || lineoutliercolor) { + modeDflt = 'suspectedoutliers'; + } - if(points) { - coerce('jitter', points === 'all' ? 0.3 : 0); - coerce('pointpos', points === 'all' ? -1.5 : 0); + var mode = coerce(prefix + 'points', modeDflt); + + if(mode) { + coerce('jitter', mode === 'all' ? 0.3 : 0); + coerce('pointpos', mode === 'all' ? -1.5 : 0); coerce('marker.symbol'); coerce('marker.opacity'); @@ -71624,7 +72611,7 @@ function handlePointsDefaults(traceIn, traceOut, coerce, opts) { coerce('marker.line.color'); coerce('marker.line.width'); - if(points === 'suspectedoutliers') { + if(mode === 'suspectedoutliers') { coerce('marker.line.outliercolor', traceOut.marker.color); coerce('marker.line.outlierwidth'); } @@ -71676,9 +72663,9 @@ module.exports = { handlePointsDefaults: handlePointsDefaults }; -},{"../../components/color":51,"../../lib":169,"../../registry":258,"../bar/defaults":272,"./attributes":284}],288:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":169,"../../plots/cartesian/axis_autotype":214,"../../registry":258,"../bar/defaults":272,"./attributes":285}],289:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71701,9 +72688,9 @@ module.exports = function eventData(out, pt) { return out; }; -},{}],289:[function(_dereq_,module,exports){ +},{}],290:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71986,9 +72973,9 @@ module.exports = { hoverOnPoints: hoverOnPoints }; -},{"../../components/color":51,"../../components/fx":89,"../../lib":169,"../../plots/cartesian/axes":213}],290:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":89,"../../lib":169,"../../plots/cartesian/axes":213}],291:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72021,9 +73008,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"./attributes":284,"./calc":285,"./cross_trace_calc":286,"./defaults":287,"./event_data":288,"./hover":289,"./layout_attributes":291,"./layout_defaults":292,"./plot":293,"./select":294,"./style":295}],291:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":285,"./calc":286,"./cross_trace_calc":287,"./defaults":288,"./event_data":289,"./hover":290,"./layout_attributes":292,"./layout_defaults":293,"./plot":294,"./select":295,"./style":296}],292:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72062,9 +73049,9 @@ module.exports = { } }; -},{}],292:[function(_dereq_,module,exports){ +},{}],293:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72108,9 +73095,9 @@ module.exports = { _supply: _supply }; -},{"../../lib":169,"../../registry":258,"./layout_attributes":291}],293:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258,"./layout_attributes":292}],294:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72432,9 +73419,9 @@ module.exports = { plotBoxMean: plotBoxMean }; -},{"../../components/drawing":72,"../../lib":169,"d3":16}],294:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":169,"d3":16}],295:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72481,9 +73468,9 @@ module.exports = function selectPoints(searchInfo, selectionTester) { return selection; }; -},{}],295:[function(_dereq_,module,exports){ +},{}],296:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72555,9 +73542,9 @@ module.exports = { styleOnSelect: styleOnSelect }; -},{"../../components/color":51,"../../components/drawing":72,"d3":16}],296:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"d3":16}],297:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72742,9 +73729,9 @@ module.exports = extendFlat({ }) ); -},{"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../constants/docs":146,"../../constants/filter_ops":147,"../../lib/extend":164,"../../plots/font_attributes":239,"../heatmap/attributes":318,"../scatter/attributes":377}],297:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../constants/docs":146,"../../constants/filter_ops":147,"../../lib/extend":164,"../../plots/font_attributes":239,"../heatmap/attributes":319,"../scatter/attributes":378}],298:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72795,9 +73782,9 @@ module.exports = function calc(gd, trace) { return cd; }; -},{"../../components/colorscale":63,"../heatmap/calc":319,"./end_plus":307,"./set_contours":315}],298:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"../heatmap/calc":320,"./end_plus":308,"./set_contours":316}],299:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72885,9 +73872,9 @@ module.exports = function(pathinfo, contours) { } }; -},{}],299:[function(_dereq_,module,exports){ +},{}],300:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72896,7 +73883,7 @@ module.exports = function(pathinfo, contours) { 'use strict'; -var extractOpts = _dereq_('../../components/colorscale').extractOpts; +var Colorscale = _dereq_('../../components/colorscale'); var makeColorMap = _dereq_('./make_color_map'); var endPlus = _dereq_('./end_plus'); @@ -72908,8 +73895,10 @@ function calc(gd, trace, opts) { var colorMap = makeColorMap(trace, {isColorbar: true}); if(coloring === 'heatmap') { - var cOpts = extractOpts(trace); - opts._fillgradient = trace.colorscale; + var cOpts = Colorscale.extractOpts(trace); + opts._fillgradient = cOpts.reversescale ? + Colorscale.flipScale(cOpts.colorscale) : + cOpts.colorscale; opts._zrange = [cOpts.min, cOpts.max]; } else if(coloring === 'fill') { opts._fillcolor = colorMap; @@ -72934,9 +73923,9 @@ module.exports = { calc: calc }; -},{"../../components/colorscale":63,"./end_plus":307,"./make_color_map":312}],300:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"./end_plus":308,"./make_color_map":313}],301:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73012,9 +74001,9 @@ module.exports = { } }; -},{}],301:[function(_dereq_,module,exports){ +},{}],302:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73106,9 +74095,9 @@ function handleConstraintValueDefaults(coerce, contours) { } } -},{"../../components/color":51,"../../constants/filter_ops":147,"./label_defaults":311,"fast-isnumeric":18}],302:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../constants/filter_ops":147,"./label_defaults":312,"fast-isnumeric":18}],303:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73185,9 +74174,9 @@ function makeInequalitySettings(operation) { }; } -},{"../../constants/filter_ops":147,"fast-isnumeric":18}],303:[function(_dereq_,module,exports){ +},{"../../constants/filter_ops":147,"fast-isnumeric":18}],304:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73214,9 +74203,9 @@ module.exports = function handleContourDefaults(traceIn, traceOut, coerce, coerc if(autoContour || !contourSize) coerce('ncontours'); }; -},{}],304:[function(_dereq_,module,exports){ +},{}],305:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73314,9 +74303,9 @@ function copyPathinfo(pi) { }); } -},{"../../lib":169}],305:[function(_dereq_,module,exports){ +},{"../../lib":169}],306:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73365,9 +74354,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout } }; -},{"../../lib":169,"../heatmap/xyz_defaults":332,"./attributes":296,"./constraint_defaults":301,"./contours_defaults":303,"./style_defaults":317}],306:[function(_dereq_,module,exports){ +},{"../../lib":169,"../heatmap/xyz_defaults":333,"./attributes":297,"./constraint_defaults":302,"./contours_defaults":304,"./style_defaults":318}],307:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73429,9 +74418,9 @@ module.exports = function emptyPathinfo(contours, plotinfo, cd0) { return pathinfo; }; -},{"../../lib":169,"./constraint_mapping":302,"./end_plus":307}],307:[function(_dereq_,module,exports){ +},{"../../lib":169,"./constraint_mapping":303,"./end_plus":308}],308:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73449,9 +74438,9 @@ module.exports = function endPlus(contours) { return contours.end + contours.size / 1e6; }; -},{}],308:[function(_dereq_,module,exports){ +},{}],309:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73743,9 +74732,9 @@ function getInterpPx(pi, loc, step) { } } -},{"../../lib":169,"./constants":300}],309:[function(_dereq_,module,exports){ +},{"../../lib":169,"./constants":301}],310:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73778,9 +74767,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return hoverData; }; -},{"../../components/color":51,"../heatmap/hover":325}],310:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../heatmap/hover":326}],311:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73807,9 +74796,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"./attributes":296,"./calc":297,"./colorbar":299,"./defaults":305,"./hover":309,"./plot":314,"./style":316}],311:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":297,"./calc":298,"./colorbar":300,"./defaults":306,"./hover":310,"./plot":315,"./style":317}],312:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73837,9 +74826,9 @@ module.exports = function handleLabelDefaults(coerce, layout, lineColor, opts) { if(opts.hasHover !== false) coerce('zhoverformat'); }; -},{"../../lib":169}],312:[function(_dereq_,module,exports){ +},{"../../lib":169}],313:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73921,9 +74910,9 @@ module.exports = function makeColorMap(trace) { ); }; -},{"../../components/colorscale":63,"./end_plus":307,"d3":16}],313:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"./end_plus":308,"d3":16}],314:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74013,9 +75002,9 @@ function getMarchingIndex(val, corners) { return (mi === 15) ? 0 : mi; } -},{"./constants":300}],314:[function(_dereq_,module,exports){ +},{"./constants":301}],315:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74697,9 +75686,9 @@ function makeClipMask(cd0) { return z; } -},{"../../components/colorscale":63,"../../components/drawing":72,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../plots/cartesian/set_convert":231,"../heatmap/plot":329,"./close_boundaries":298,"./constants":300,"./convert_to_constraints":304,"./empty_pathinfo":306,"./find_all_paths":308,"./make_crossings":313,"d3":16}],315:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"../../components/drawing":72,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../plots/cartesian/set_convert":231,"../heatmap/plot":330,"./close_boundaries":299,"./constants":301,"./convert_to_constraints":305,"./empty_pathinfo":307,"./find_all_paths":309,"./make_crossings":314,"d3":16}],316:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74801,9 +75790,9 @@ function autoContours(start, end, ncontours) { return dummyAx; } -},{"../../lib":169,"../../plots/cartesian/axes":213}],316:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213}],317:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74882,9 +75871,9 @@ module.exports = function style(gd) { heatmapStyle(gd); }; -},{"../../components/drawing":72,"../heatmap/style":330,"./make_color_map":312,"d3":16}],317:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../heatmap/style":331,"./make_color_map":313,"d3":16}],318:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74927,9 +75916,9 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, layout, handleLabelDefaults(coerce, layout, lineColor, opts); }; -},{"../../components/colorscale/defaults":61,"./label_defaults":311}],318:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"./label_defaults":312}],319:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74939,6 +75928,7 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, layout, 'use strict'; var scatterAttrs = _dereq_('../scatter/attributes'); +var baseAttrs = _dereq_('../../plots/attributes'); var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs; var colorScaleAttrs = _dereq_('../../components/colorscale/attributes'); var FORMAT_LINK = _dereq_('../../constants/docs').FORMAT_LINK; @@ -75033,16 +76023,17 @@ module.exports = extendFlat({ editType: 'none', }, - hovertemplate: hovertemplateAttrs() + hovertemplate: hovertemplateAttrs(), + showlegend: extendFlat({}, baseAttrs.showlegend, {dflt: false}) }, { transforms: undefined }, colorScaleAttrs('', {cLetter: 'z', autoColorDflt: false}) ); -},{"../../components/colorscale/attributes":58,"../../constants/docs":146,"../../lib/extend":164,"../../plots/template_attributes":253,"../scatter/attributes":377}],319:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../constants/docs":146,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"../scatter/attributes":378}],320:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75200,9 +76191,9 @@ module.exports = function calc(gd, trace) { return [cd0]; }; -},{"../../components/colorscale/calc":59,"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"../histogram2d/calc":347,"./clean_2d_array":320,"./convert_column_xyz":322,"./find_empties":324,"./interp2d":327,"./make_bound_array":328}],320:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"../histogram2d/calc":348,"./clean_2d_array":321,"./convert_column_xyz":323,"./find_empties":325,"./interp2d":328,"./make_bound_array":329}],321:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75277,9 +76268,9 @@ module.exports = function clean2dArray(zOld, trace, xa, ya) { return zNew; }; -},{"../../constants/numerical":149,"../../lib":169,"fast-isnumeric":18}],321:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":169,"fast-isnumeric":18}],322:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75293,9 +76284,9 @@ module.exports = { max: 'zmax' }; -},{}],322:[function(_dereq_,module,exports){ +},{}],323:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75337,6 +76328,8 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name, hovertext = Lib.init2dArray(col2vals.length, col1vals.length); } + var after2before = Lib.init2dArray(col2vals.length, col1vals.length); + for(i = 0; i < colLen; i++) { if(col1[i] !== BADNUM && col2[i] !== BADNUM) { var i1 = Lib.findBin(col1[i] + col1dv.minDiff / 2, col1vals); @@ -75347,6 +76340,7 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name, var arrayVar = trace[arrayVarName]; var newArray = newArrays[j]; newArray[i2][i1] = arrayVar[i]; + after2before[i2][i1] = i; } if(hasColumnText) text[i2][i1] = textCol[i]; @@ -75369,11 +76363,13 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name, if(ax2 && ax2.type === 'category') { trace['_' + var2Name + 'CategoryMap'] = col2vals.map(function(v) { return ax2._categories[v];}); } + + trace._after2before = after2before; }; -},{"../../constants/numerical":149,"../../lib":169}],323:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":169}],324:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75414,9 +76410,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: '', cLetter: 'z'}); }; -},{"../../components/colorscale/defaults":61,"../../lib":169,"./attributes":318,"./style_defaults":331,"./xyz_defaults":332}],324:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../lib":169,"./attributes":319,"./style_defaults":332,"./xyz_defaults":333}],325:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75519,9 +76515,9 @@ module.exports = function findEmpties(z) { return empties.sort(function(a, b) { return b[2] - a[2]; }); }; -},{"../../lib":169}],325:[function(_dereq_,module,exports){ +},{"../../lib":169}],326:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75634,7 +76630,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay var zLabel = Axes.tickText(dummyAx, zVal, 'hover').text; return [Lib.extendFlat(pointData, { - index: [ny, nx], + index: trace._after2before ? trace._after2before[ny][nx] : [ny, nx], // never let a 2D override 1D type as closest point distance: pointData.maxHoverDistance, spikeDistance: pointData.maxSpikeDistance, @@ -75650,9 +76646,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay })]; }; -},{"../../components/colorscale":63,"../../components/fx":89,"../../lib":169,"../../plots/cartesian/axes":213}],326:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"../../components/fx":89,"../../lib":169,"../../plots/cartesian/axes":213}],327:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75673,15 +76669,15 @@ module.exports = { moduleType: 'trace', name: 'heatmap', basePlotModule: _dereq_('../../plots/cartesian'), - categories: ['cartesian', 'svg', '2dMap'], + categories: ['cartesian', 'svg', '2dMap', 'showLegend'], meta: { } }; -},{"../../plots/cartesian":224,"./attributes":318,"./calc":319,"./colorbar":321,"./defaults":323,"./hover":325,"./plot":329,"./style":330}],327:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":319,"./calc":320,"./colorbar":322,"./defaults":324,"./hover":326,"./plot":330,"./style":331}],328:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75812,9 +76808,9 @@ function iterateInterp2d(z, emptyPoints, overshoot) { return maxFractionalChange; } -},{"../../lib":169}],328:[function(_dereq_,module,exports){ +},{"../../lib":169}],329:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75900,9 +76896,9 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, return arrayOut; }; -},{"../../lib":169,"../../registry":258}],329:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258}],330:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76305,9 +77301,9 @@ function putColor(pixels, pxIndex, c) { pixels[pxIndex + 3] = Math.round(c[3] * 255); } -},{"../../components/colorscale":63,"../../constants/xmlns_namespaces":150,"../../lib":169,"../../registry":258,"d3":16,"tinycolor2":34}],330:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"../../constants/xmlns_namespaces":150,"../../lib":169,"../../registry":258,"d3":16,"tinycolor2":34}],331:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76326,9 +77322,9 @@ module.exports = function style(gd) { }); }; -},{"d3":16}],331:[function(_dereq_,module,exports){ +},{"d3":16}],332:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76349,9 +77345,9 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce) { coerce('zhoverformat'); }; -},{}],332:[function(_dereq_,module,exports){ +},{}],333:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76446,9 +77442,9 @@ function isValidZ(z) { return (allRowsAreArrays && oneRowIsFilled && hasOneNumber); } -},{"../../lib":169,"../../registry":258,"fast-isnumeric":18}],333:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258,"fast-isnumeric":18}],334:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76587,9 +77583,9 @@ module.exports = { } }; -},{"../../lib/extend":164,"../../plots/template_attributes":253,"../bar/attributes":268,"./bin_attributes":335,"./constants":339}],334:[function(_dereq_,module,exports){ +},{"../../lib/extend":164,"../../plots/template_attributes":253,"../bar/attributes":268,"./bin_attributes":336,"./constants":340}],335:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76612,9 +77608,9 @@ module.exports = function doAvg(size, counts) { return total; }; -},{}],335:[function(_dereq_,module,exports){ +},{}],336:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76647,9 +77643,9 @@ module.exports = function makeBinAttrs(axLetter, match) { }; }; -},{}],336:[function(_dereq_,module,exports){ +},{}],337:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76721,9 +77717,9 @@ module.exports = { } }; -},{"fast-isnumeric":18}],337:[function(_dereq_,module,exports){ +},{"fast-isnumeric":18}],338:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76897,9 +77893,9 @@ function dateParts(v, pa, calendar) { return parts; } -},{"../../constants/numerical":149,"../../plots/cartesian/axes":213}],338:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../plots/cartesian/axes":213}],339:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77454,9 +78450,9 @@ module.exports = { calcAllAutoBins: calcAllAutoBins }; -},{"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"../bar/arrays_to_calcdata":267,"./average":334,"./bin_functions":336,"./bin_label_vals":337,"./norm_functions":345,"fast-isnumeric":18}],339:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"../bar/arrays_to_calcdata":267,"./average":335,"./bin_functions":337,"./bin_label_vals":338,"./norm_functions":346,"fast-isnumeric":18}],340:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77470,9 +78466,9 @@ module.exports = { eventDataKeys: ['binNumber'] }; -},{}],340:[function(_dereq_,module,exports){ +},{}],341:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77528,7 +78524,7 @@ module.exports = function crossTraceDefaults(fullData, fullLayout) { if(!groupName) groupName = fallbackGroupName; var axType = getAxisType(traceOut, binDir); - var calendar = traceOut[binDir + 'calendar']; + var calendar = traceOut[binDir + 'calendar'] || ''; var binOpts = allBinOpts[groupName]; var needsNewItem = true; @@ -77748,9 +78744,9 @@ module.exports = function crossTraceDefaults(fullData, fullLayout) { } }; -},{"../../lib":169,"../../plots/cartesian/axis_ids":216,"../../registry":258,"../bar/defaults":272}],341:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axis_ids":216,"../../registry":258,"../bar/defaults":272}],342:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77822,9 +78818,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'}); }; -},{"../../components/color":51,"../../lib":169,"../../registry":258,"../bar/style_defaults":283,"./attributes":333}],342:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":169,"../../registry":258,"../bar/style_defaults":283,"./attributes":334}],343:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77871,9 +78867,9 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) { return out; }; -},{}],343:[function(_dereq_,module,exports){ +},{}],344:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77906,9 +78902,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { return pts; }; -},{"../../plots/cartesian/axes":213,"../bar/hover":275}],344:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":213,"../bar/hover":275}],345:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77956,9 +78952,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"../bar/cross_trace_calc":271,"../bar/layout_attributes":277,"../bar/layout_defaults":278,"../bar/plot":279,"../bar/select":280,"../bar/style":282,"../scatter/marker_colorbar":395,"./attributes":333,"./calc":338,"./cross_trace_defaults":340,"./defaults":341,"./event_data":342,"./hover":343}],345:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../bar/cross_trace_calc":271,"../bar/layout_attributes":277,"../bar/layout_defaults":278,"../bar/plot":279,"../bar/select":280,"../bar/style":282,"../scatter/marker_colorbar":396,"./attributes":334,"./calc":339,"./cross_trace_defaults":341,"./defaults":342,"./event_data":343,"./hover":344}],346:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77991,9 +78987,9 @@ module.exports = { } }; -},{}],346:[function(_dereq_,module,exports){ +},{}],347:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78005,6 +79001,7 @@ module.exports = { var histogramAttrs = _dereq_('../histogram/attributes'); var makeBinAttrs = _dereq_('../histogram/bin_attributes'); var heatmapAttrs = _dereq_('../heatmap/attributes'); +var baseAttrs = _dereq_('../../plots/attributes'); var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs; var colorScaleAttrs = _dereq_('../../components/colorscale/attributes'); @@ -78052,14 +79049,15 @@ module.exports = extendFlat( ygap: heatmapAttrs.ygap, zsmooth: heatmapAttrs.zsmooth, zhoverformat: heatmapAttrs.zhoverformat, - hovertemplate: hovertemplateAttrs({}, {keys: 'z'}) + hovertemplate: hovertemplateAttrs({}, {keys: 'z'}), + showlegend: extendFlat({}, baseAttrs.showlegend, {dflt: false}) }, colorScaleAttrs('', {cLetter: 'z', autoColorDflt: false}) ); -},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../../plots/template_attributes":253,"../heatmap/attributes":318,"../histogram/attributes":333,"../histogram/bin_attributes":335}],347:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"../heatmap/attributes":319,"../histogram/attributes":334,"../histogram/bin_attributes":336}],348:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78276,9 +79274,9 @@ function getRanges(edges, uniqueVals, gapLow, gapHigh, ax, calendar) { return out; } -},{"../../lib":169,"../../plots/cartesian/axes":213,"../histogram/average":334,"../histogram/bin_functions":336,"../histogram/bin_label_vals":337,"../histogram/calc":338,"../histogram/norm_functions":345}],348:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213,"../histogram/average":335,"../histogram/bin_functions":337,"../histogram/bin_label_vals":338,"../histogram/calc":339,"../histogram/norm_functions":346}],349:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78309,9 +79307,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('hovertemplate'); }; -},{"../../components/colorscale/defaults":61,"../../lib":169,"../heatmap/style_defaults":331,"./attributes":346,"./sample_defaults":351}],349:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../lib":169,"../heatmap/style_defaults":332,"./attributes":347,"./sample_defaults":352}],350:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78343,9 +79341,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return pts; }; -},{"../../plots/cartesian/axes":213,"../heatmap/hover":325}],350:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":213,"../heatmap/hover":326}],351:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78355,7 +79353,6 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay 'use strict'; module.exports = { - attributes: _dereq_('./attributes'), supplyDefaults: _dereq_('./defaults'), crossTraceDefaults: _dereq_('../histogram/cross_trace_defaults'), @@ -78370,16 +79367,16 @@ module.exports = { moduleType: 'trace', name: 'histogram2d', basePlotModule: _dereq_('../../plots/cartesian'), - categories: ['cartesian', 'svg', '2dMap', 'histogram'], + categories: ['cartesian', 'svg', '2dMap', 'histogram', 'showLegend'], meta: { } }; -},{"../../plots/cartesian":224,"../heatmap/calc":319,"../heatmap/colorbar":321,"../heatmap/plot":329,"../heatmap/style":330,"../histogram/cross_trace_defaults":340,"../histogram/event_data":342,"./attributes":346,"./defaults":348,"./hover":349}],351:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../heatmap/calc":320,"../heatmap/colorbar":322,"../heatmap/plot":330,"../heatmap/style":331,"../histogram/cross_trace_defaults":341,"../histogram/event_data":343,"./attributes":347,"./defaults":349,"./hover":350}],352:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78422,9 +79419,9 @@ module.exports = function handleSampleDefaults(traceIn, traceOut, coerce, layout coerce('autobiny'); }; -},{"../../lib":169,"../../registry":258}],352:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258}],353:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78480,9 +79477,9 @@ module.exports = extendFlat({ }) ); -},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../contour/attributes":296,"../histogram2d/attributes":346}],353:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../contour/attributes":297,"../histogram2d/attributes":347}],354:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78517,9 +79514,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('hovertemplate'); }; -},{"../../lib":169,"../contour/contours_defaults":303,"../contour/style_defaults":317,"../histogram2d/sample_defaults":351,"./attributes":352}],354:[function(_dereq_,module,exports){ +},{"../../lib":169,"../contour/contours_defaults":304,"../contour/style_defaults":318,"../histogram2d/sample_defaults":352,"./attributes":353}],355:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78549,9 +79546,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"../contour/calc":297,"../contour/colorbar":299,"../contour/hover":309,"../contour/plot":314,"../contour/style":316,"../histogram/cross_trace_defaults":340,"./attributes":352,"./defaults":353}],355:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../contour/calc":298,"../contour/colorbar":300,"../contour/hover":310,"../contour/plot":315,"../contour/style":317,"../histogram/cross_trace_defaults":341,"./attributes":353,"./defaults":354}],356:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78661,9 +79658,9 @@ module.exports = extendFlat({ transforms: undefined }); -},{"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"./constants":357}],356:[function(_dereq_,module,exports){ +},{"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"./constants":358}],357:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78749,9 +79746,9 @@ function makeScaler(trace) { }; } -},{"../../lib":169,"../../plots/cartesian/axes":213,"./constants":357,"fast-isnumeric":18}],357:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213,"./constants":358,"fast-isnumeric":18}],358:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78799,9 +79796,9 @@ module.exports = { } }; -},{}],358:[function(_dereq_,module,exports){ +},{}],359:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78840,9 +79837,9 @@ module.exports = function supplyDefaults(traceIn, traceOut) { traceOut._length = null; }; -},{"../../lib":169,"./attributes":355,"./constants":357}],359:[function(_dereq_,module,exports){ +},{"../../lib":169,"./attributes":356,"./constants":358}],360:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78861,9 +79858,9 @@ module.exports = function eventData(out, pt) { return out; }; -},{}],360:[function(_dereq_,module,exports){ +},{}],361:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78953,9 +79950,9 @@ module.exports = function hoverPoints(pointData, xval, yval) { })]; }; -},{"../../components/fx":89,"../../lib":169,"./constants":357}],361:[function(_dereq_,module,exports){ +},{"../../components/fx":89,"../../lib":169,"./constants":358}],362:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78983,9 +79980,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"./attributes":355,"./calc":356,"./defaults":358,"./event_data":359,"./hover":360,"./plot":362,"./style":363}],362:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":356,"./calc":357,"./defaults":359,"./event_data":360,"./hover":361,"./plot":363,"./style":364}],363:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79114,9 +80111,9 @@ module.exports = function plot(gd, plotinfo, cdimage, imageLayer) { }); }; -},{"../../constants/xmlns_namespaces":150,"../../lib":169,"./constants":357,"d3":16}],363:[function(_dereq_,module,exports){ +},{"../../constants/xmlns_namespaces":150,"../../lib":169,"./constants":358,"d3":16}],364:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79134,9 +80131,9 @@ module.exports = function style(gd) { }); }; -},{"d3":16}],364:[function(_dereq_,module,exports){ +},{"d3":16}],365:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79275,6 +80272,14 @@ module.exports = { textfont: extendFlat({}, textFontAttrs, { }), + insidetextorientation: { + valType: 'enumerated', + + values: ['horizontal', 'radial', 'tangential', 'auto'], + dflt: 'auto', + editType: 'plot', + + }, insidetextfont: extendFlat({}, textFontAttrs, { }), @@ -79397,9 +80402,9 @@ module.exports = { } }; -},{"../../components/color/attributes":50,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/domain":238,"../../plots/font_attributes":239,"../../plots/template_attributes":253}],365:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/domain":238,"../../plots/font_attributes":239,"../../plots/template_attributes":253}],366:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79420,9 +80425,9 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) plots.cleanBasePlot(exports.name, newFullData, newFullLayout, oldFullData, oldFullLayout); }; -},{"../../plots/plots":245}],366:[function(_dereq_,module,exports){ +},{"../../plots/plots":245}],367:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79432,7 +80437,6 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) 'use strict'; var isNumeric = _dereq_('fast-isnumeric'); -var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray; var tinycolor = _dereq_('tinycolor2'); var Color = _dereq_('../../components/color'); @@ -79448,26 +80452,26 @@ function calc(gd, trace) { var labels = trace.labels; var colors = trace.marker.colors || []; var vals = trace.values; - var hasVals = isArrayOrTypedArray(vals) && vals.length; + var len = trace._length; + var hasValues = trace._hasValues && len; var i, pt; if(trace.dlabel) { - labels = new Array(vals.length); - for(i = 0; i < vals.length; i++) { + labels = new Array(len); + for(i = 0; i < len; i++) { labels[i] = String(trace.label0 + i * trace.dlabel); } } var allThisTraceLabels = {}; var pullColor = makePullColorFn(fullLayout['_' + trace.type + 'colormap']); - var seriesLen = (hasVals ? vals : labels).length; var vTotal = 0; var isAggregated = false; - for(i = 0; i < seriesLen; i++) { + for(i = 0; i < len; i++) { var v, label, hidden; - if(hasVals) { + if(hasValues) { v = vals[i]; if(!isNumeric(v)) continue; v = +v; @@ -79604,9 +80608,9 @@ module.exports = { generateExtendedColors: generateExtendedColors }; -},{"../../components/color":51,"../../lib":169,"fast-isnumeric":18,"tinycolor2":34}],367:[function(_dereq_,module,exports){ +},{"../../components/color":51,"fast-isnumeric":18,"tinycolor2":34}],368:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79615,26 +80619,57 @@ module.exports = { 'use strict'; +var isNumeric = _dereq_('fast-isnumeric'); var Lib = _dereq_('../../lib'); var attributes = _dereq_('./attributes'); var handleDomainDefaults = _dereq_('../../plots/domain').defaults; var handleText = _dereq_('../bar/defaults').handleText; -module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { +function handleLabelsAndValues(labels, values) { + var hasLabels = Array.isArray(labels); + var hasValues = Lib.isArrayOrTypedArray(values); + var len = Math.min( + hasLabels ? labels.length : Infinity, + hasValues ? values.length : Infinity + ); + + if(!isFinite(len)) len = 0; + + if(len && hasValues) { + var hasPositive; + for(var i = 0; i < len; i++) { + var v = values[i]; + if(isNumeric(v) && v > 0) { + hasPositive = true; + break; + } + } + if(!hasPositive) len = 0; + } + + return { + hasLabels: hasLabels, + hasValues: hasValues, + len: len + }; +} + +function supplyDefaults(traceIn, traceOut, defaultColor, layout) { function coerce(attr, dflt) { return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); } - var len; - var vals = coerce('values'); - var hasVals = Lib.isArrayOrTypedArray(vals); var labels = coerce('labels'); - if(Array.isArray(labels)) { - len = labels.length; - if(hasVals) len = Math.min(len, vals.length); - } else if(hasVals) { - len = vals.length; + var values = coerce('values'); + var res = handleLabelsAndValues(labels, values); + var len = res.len; + traceOut._hasLabels = res.hasLabels; + traceOut._hasValues = res.hasValues; + + if(!traceOut._hasLabels && + traceOut._hasValues + ) { coerce('label0'); coerce('dlabel'); } @@ -79677,6 +80712,10 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(hasOutside) { coerce('automargin'); } + + if(textposition === 'inside' || textposition === 'auto' || Array.isArray(textposition)) { + coerce('insidetextorientation'); + } } handleDomainDefaults(traceOut, layout, coerce); @@ -79693,11 +80732,16 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('direction'); coerce('rotation'); coerce('pull'); +} + +module.exports = { + handleLabelsAndValues: handleLabelsAndValues, + supplyDefaults: supplyDefaults }; -},{"../../lib":169,"../../plots/domain":238,"../bar/defaults":272,"./attributes":364}],368:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/domain":238,"../bar/defaults":272,"./attributes":365,"fast-isnumeric":18}],369:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79744,9 +80788,9 @@ module.exports = function eventData(pt, trace) { return out; }; -},{"../../components/fx/helpers":86}],369:[function(_dereq_,module,exports){ +},{"../../components/fx/helpers":86}],370:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79786,9 +80830,9 @@ exports.castOption = function castOption(item, indices) { else if(item) return item; }; -},{"../../lib":169}],370:[function(_dereq_,module,exports){ +},{"../../lib":169}],371:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79799,7 +80843,7 @@ exports.castOption = function castOption(item, indices) { module.exports = { attributes: _dereq_('./attributes'), - supplyDefaults: _dereq_('./defaults'), + supplyDefaults: _dereq_('./defaults').supplyDefaults, supplyLayoutDefaults: _dereq_('./layout_defaults'), layoutAttributes: _dereq_('./layout_attributes'), @@ -79819,9 +80863,9 @@ module.exports = { } }; -},{"./attributes":364,"./base_plot":365,"./calc":366,"./defaults":367,"./layout_attributes":371,"./layout_defaults":372,"./plot":373,"./style":374,"./style_one":375}],371:[function(_dereq_,module,exports){ +},{"./attributes":365,"./base_plot":366,"./calc":367,"./defaults":368,"./layout_attributes":372,"./layout_defaults":373,"./plot":374,"./style":375,"./style_one":376}],372:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79852,9 +80896,9 @@ module.exports = { } }; -},{}],372:[function(_dereq_,module,exports){ +},{}],373:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79877,9 +80921,9 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) { coerce('extendpiecolors'); }; -},{"../../lib":169,"./layout_attributes":371}],373:[function(_dereq_,module,exports){ +},{"../../lib":169,"./layout_attributes":372}],374:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79896,6 +80940,9 @@ var Color = _dereq_('../../components/color'); var Drawing = _dereq_('../../components/drawing'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); +var uniformText = _dereq_('../bar/uniform_text'); +var recordMinTextSize = uniformText.recordMinTextSize; +var clearMinTextSize = uniformText.clearMinTextSize; var helpers = _dereq_('./helpers'); var eventData = _dereq_('./event_data'); @@ -79905,6 +80952,8 @@ function plot(gd, cdModule) { var fullLayout = gd._fullLayout; var gs = fullLayout._size; + clearMinTextSize('pie', fullLayout); + prerenderTitles(cdModule, gd); layoutAreas(cdModule, gs); @@ -79932,7 +80981,7 @@ function plot(gd, cdModule) { ]; var hasOutsideText = false; - slices.each(function(pt) { + slices.each(function(pt, i) { if(pt.hidden) { d3.select(this).selectAll('path,g').remove(); return; @@ -80024,15 +81073,18 @@ function plot(gd, cdModule) { s.attr('data-notex', 1); }); + var font = Lib.ensureUniformFontSize(gd, textPosition === 'outside' ? + determineOutsideTextFont(trace, pt, fullLayout.font) : + determineInsideTextFont(trace, pt, fullLayout.font) + ); + sliceText.text(pt.text) .attr({ 'class': 'slicetext', transform: '', 'text-anchor': 'middle' }) - .call(Drawing.font, textPosition === 'outside' ? - determineOutsideTextFont(trace, pt, gd._fullLayout.font) : - determineInsideTextFont(trace, pt, gd._fullLayout.font)) + .call(Drawing.font, font) .call(svgTextUtils.convertToTspans, gd); // position the text relative to the slice @@ -80044,36 +81096,37 @@ function plot(gd, cdModule) { } else { transform = transformInsideText(textBB, pt, cd0); if(textPosition === 'auto' && transform.scale < 1) { - sliceText.call(Drawing.font, trace.outsidetextfont); - if(trace.outsidetextfont.family !== trace.insidetextfont.family || - trace.outsidetextfont.size !== trace.insidetextfont.size) { - textBB = Drawing.bBox(sliceText.node()); - } + var newFont = Lib.ensureUniformFontSize(gd, trace.outsidetextfont); + + sliceText.call(Drawing.font, newFont); + textBB = Drawing.bBox(sliceText.node()); + transform = transformOutsideText(textBB, pt); } } - var translateX = cx + pt.pxmid[0] * transform.rCenter + (transform.x || 0); - var translateY = cy + pt.pxmid[1] * transform.rCenter + (transform.y || 0); + var textPosAngle = transform.textPosAngle; + var textXY = textPosAngle === undefined ? pt.pxmid : getCoords(cd0.r, textPosAngle); + transform.targetX = cx + textXY[0] * transform.rCenter + (transform.x || 0); + transform.targetY = cy + textXY[1] * transform.rCenter + (transform.y || 0); + computeTransform(transform, textBB); // save some stuff to use later ensure no labels overlap if(transform.outside) { - pt.yLabelMin = translateY - textBB.height / 2; - pt.yLabelMid = translateY; - pt.yLabelMax = translateY + textBB.height / 2; + var targetY = transform.targetY; + pt.yLabelMin = targetY - textBB.height / 2; + pt.yLabelMid = targetY; + pt.yLabelMax = targetY + textBB.height / 2; pt.labelExtraX = 0; pt.labelExtraY = 0; hasOutsideText = true; } - sliceText.attr('transform', - 'translate(' + translateX + ',' + translateY + ')' + - (transform.scale < 1 ? ('scale(' + transform.scale + ')') : '') + - (transform.rotate ? ('rotate(' + transform.rotate + ')') : '') + - 'translate(' + - (-(textBB.left + textBB.right) / 2) + ',' + - (-(textBB.top + textBB.bottom) / 2) + - ')'); + transform.fontSize = font.size; + recordMinTextSize(trace.type, transform, fullLayout); + cd[i].transform = transform; + + sliceText.attr('transform', Lib.getTextTransform(transform)); }); }); @@ -80178,8 +81231,10 @@ function plotTextLines(slices, trace) { // first move the text to its new location var sliceText = sliceTop.select('g.slicetext text'); - sliceText.attr('transform', 'translate(' + pt.labelExtraX + ',' + pt.labelExtraY + ')' + - sliceText.attr('transform')); + pt.transform.targetX += pt.labelExtraX; + pt.transform.targetY += pt.labelExtraY; + + sliceText.attr('transform', Lib.getTextTransform(pt.transform)); // then add a line to the new location var lineStartX = pt.cxFinal + pt.pxmid[0]; @@ -80429,59 +81484,150 @@ function prerenderTitles(cdModule, gd) { function transformInsideText(textBB, pt, cd0) { var textDiameter = Math.sqrt(textBB.width * textBB.width + textBB.height * textBB.height); - var textAspect = textBB.width / textBB.height; var halfAngle = pt.halfangle; + var midAngle = pt.midangle; var ring = pt.ring; var rInscribed = pt.rInscribed; var r = cd0.r || pt.rpx1; + var orientation = cd0.trace.insidetextorientation; + var isHorizontal = orientation === 'horizontal'; + var isTangential = orientation === 'tangential'; + var isRadial = orientation === 'radial'; + var isAuto = orientation === 'auto'; + var isCircle = (ring === 1) && (Math.abs(pt.startangle - pt.stopangle) === Math.PI * 2); + var allTransforms = []; + var newT; - // max size text can be inserted inside without rotating it - // this inscribes the text rectangle in a circle, which is then inscribed - // in the slice, so it will be an underestimate, which some day we may want - // to improve so this case can get more use - var transform = { - scale: rInscribed * r * 2 / textDiameter, + if(!isAuto) { + // max size if text is placed (horizontally) at the top or bottom of the arc - // and the center position and rotation in this case - rCenter: 1 - rInscribed, - rotate: 0 - }; + var considerCrossing = function(angle, key) { + if(isCrossing(pt, angle)) { + var dStart = Math.abs(angle - pt.startangle); + var dStop = Math.abs(angle - pt.stopangle); - if(transform.scale >= 1) return transform; + var closestEdge = dStart < dStop ? dStart : dStop; + if(key === 'tan') { + newT = calcTanTransform(textBB, r, ring, closestEdge, 0); + } else { // case of 'rad' + newT = calcRadTransform(textBB, r, ring, closestEdge, Math.PI / 2); + } + newT.textPosAngle = angle; + + allTransforms.push(newT); + } + }; + + // to cover all cases with trace.rotation added + var i; + if(isHorizontal || isTangential) { + // top + for(i = 4; i >= -4; i -= 2) considerCrossing(Math.PI * i, 'tan'); + // bottom + for(i = 4; i >= -4; i -= 2) considerCrossing(Math.PI * (i + 1), 'tan'); + } + if(isHorizontal || isRadial) { + // left + for(i = 4; i >= -4; i -= 2) considerCrossing(Math.PI * (i + 1.5), 'rad'); + // right + for(i = 4; i >= -4; i -= 2) considerCrossing(Math.PI * (i + 0.5), 'rad'); + } + } + + if(isCircle || isAuto || isHorizontal) { + // max size text can be inserted inside without rotating it + // this inscribes the text rectangle in a circle, which is then inscribed + // in the slice, so it will be an underestimate, which some day we may want + // to improve so this case can get more use + newT = { + scale: rInscribed * r * 2 / textDiameter, + + // and the center position and rotation in this case + rCenter: 1 - rInscribed, + rotate: 0 + }; + + newT.textPosAngle = (pt.startangle + pt.stopangle) / 2; + if(newT.scale >= 1) return newT; + + allTransforms.push(newT); + } + + if(isAuto || isRadial) { + newT = calcRadTransform(textBB, r, ring, halfAngle, midAngle); + newT.textPosAngle = (pt.startangle + pt.stopangle) / 2; + allTransforms.push(newT); + } + + if(isAuto || isTangential) { + newT = calcTanTransform(textBB, r, ring, halfAngle, midAngle); + newT.textPosAngle = (pt.startangle + pt.stopangle) / 2; + allTransforms.push(newT); + } + + var id = 0; + var maxScale = 0; + for(var k = 0; k < allTransforms.length; k++) { + var s = allTransforms[k].scale; + if(maxScale < s) { + maxScale = s; + id = k; + } + + if(!isAuto && maxScale >= 1) { + // respect test order for non-auto options + break; + } + } + return allTransforms[id]; +} + +function isCrossing(pt, angle) { + var start = pt.startangle; + var stop = pt.stopangle; + return ( + (start > angle && angle > stop) || + (start < angle && angle < stop) + ); +} + +function calcRadTransform(textBB, r, ring, halfAngle, midAngle) { // max size if text is rotated radially - var Qr = textAspect + 1 / (2 * Math.tan(halfAngle)); - var maxHalfHeightRotRadial = r * Math.min( - 1 / (Math.sqrt(Qr * Qr + 0.5) + Qr), - ring / (Math.sqrt(textAspect * textAspect + ring / 2) + textAspect) - ); - var radialTransform = { - scale: maxHalfHeightRotRadial * 2 / textBB.height, - rCenter: Math.cos(maxHalfHeightRotRadial / r) - - maxHalfHeightRotRadial * textAspect / r, - rotate: (180 / Math.PI * pt.midangle + 720) % 180 - 90 + var a = textBB.width / textBB.height; + var s = calcMaxHalfSize(a, halfAngle, r, ring); + return { + scale: s * 2 / textBB.height, + rCenter: calcRCenter(a, s / r), + rotate: calcRotate(midAngle) }; +} +function calcTanTransform(textBB, r, ring, halfAngle, midAngle) { // max size if text is rotated tangentially - var aspectInv = 1 / textAspect; - var Qt = aspectInv + 1 / (2 * Math.tan(halfAngle)); - var maxHalfWidthTangential = r * Math.min( - 1 / (Math.sqrt(Qt * Qt + 0.5) + Qt), - ring / (Math.sqrt(aspectInv * aspectInv + ring / 2) + aspectInv) - ); - var tangentialTransform = { - scale: maxHalfWidthTangential * 2 / textBB.width, - rCenter: Math.cos(maxHalfWidthTangential / r) - - maxHalfWidthTangential / textAspect / r, - rotate: (180 / Math.PI * pt.midangle + 810) % 180 - 90 + var a = textBB.height / textBB.width; + var s = calcMaxHalfSize(a, halfAngle, r, ring); + return { + scale: s * 2 / textBB.width, + rCenter: calcRCenter(a, s / r), + rotate: calcRotate(midAngle + Math.PI / 2) }; - // if we need a rotated transform, pick the biggest one - // even if both are bigger than 1 - var rotatedTransform = tangentialTransform.scale > radialTransform.scale ? - tangentialTransform : radialTransform; +} - if(transform.scale < 1 && rotatedTransform.scale > transform.scale) return rotatedTransform; - return transform; +function calcRCenter(a, b) { + return Math.cos(b) - a * b; +} + +function calcRotate(t) { + return (180 / Math.PI * t + 720) % 180 - 90; +} + +function calcMaxHalfSize(a, halfAngle, r, ring) { + var q = a + 1 / (2 * Math.tan(halfAngle)); + return r * Math.min( + 1 / (Math.sqrt(q * q + 0.5) + q), + ring / (Math.sqrt(a * a + ring / 2) + a) + ); } function getInscribedRadiusFraction(pt, cd0) { @@ -80801,6 +81947,7 @@ function groupScale(cdModule, scaleGroups) { function setCoords(cd) { var cd0 = cd[0]; + var r = cd0.r; var trace = cd0.trace; var currentAngle = trace.rotation * Math.PI / 180; var angleFactor = 2 * Math.PI / cd0.vTotal; @@ -80821,11 +81968,7 @@ function setCoords(cd) { lastPt = 'px0'; } - function getCoords(angle) { - return [cd0.r * Math.sin(angle), -cd0.r * Math.cos(angle)]; - } - - currentCoords = getCoords(currentAngle); + currentCoords = getCoords(r, currentAngle); for(i = 0; i < cd.length; i++) { cdi = cd[i]; @@ -80833,12 +81976,13 @@ function setCoords(cd) { cdi[firstPt] = currentCoords; + cdi.startangle = currentAngle; currentAngle += angleFactor * cdi.v / 2; - cdi.pxmid = getCoords(currentAngle); + cdi.pxmid = getCoords(r, currentAngle); cdi.midangle = currentAngle; - currentAngle += angleFactor * cdi.v / 2; - currentCoords = getCoords(currentAngle); + currentCoords = getCoords(r, currentAngle); + cdi.stopangle = currentAngle; cdi[lastPt] = currentCoords; @@ -80850,6 +81994,10 @@ function setCoords(cd) { } } +function getCoords(r, angle) { + return [r * Math.sin(angle), -r * Math.cos(angle)]; +} + function formatSliceLabel(gd, pt, cd0) { var fullLayout = gd._fullLayout; var trace = cd0.trace; @@ -80904,6 +82052,25 @@ function formatSliceLabel(gd, pt, cd0) { } } } + +function computeTransform( + transform, // inout + textBB // in +) { + var rotate = transform.rotate; + var scale = transform.scale; + if(scale > 1) scale = 1; + + var a = rotate * Math.PI / 180; + var cosA = Math.cos(a); + var sinA = Math.sin(a); + var midX = (textBB.left + textBB.right) / 2; + var midY = (textBB.top + textBB.bottom) / 2; + transform.textX = midX * cosA - midY * sinA; + transform.textY = midX * sinA + midY * cosA; + transform.noCenter = true; +} + module.exports = { plot: plot, formatSliceLabel: formatSliceLabel, @@ -80913,11 +82080,12 @@ module.exports = { prerenderTitles: prerenderTitles, layoutAreas: layoutAreas, attachFxHandlers: attachFxHandlers, + computeTransform: computeTransform }; -},{"../../components/color":51,"../../components/drawing":72,"../../components/fx":89,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/plots":245,"./event_data":368,"./helpers":369,"d3":16}],374:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../components/fx":89,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/plots":245,"../bar/uniform_text":284,"./event_data":369,"./helpers":370,"d3":16}],375:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -80929,9 +82097,13 @@ module.exports = { var d3 = _dereq_('d3'); var styleOne = _dereq_('./style_one'); +var resizeText = _dereq_('../bar/uniform_text').resizeText; module.exports = function style(gd) { - gd._fullLayout._pielayer.selectAll('.trace').each(function(cd) { + var s = gd._fullLayout._pielayer.selectAll('.trace'); + resizeText(gd, s, 'pie'); + + s.each(function(cd) { var cd0 = cd[0]; var trace = cd0.trace; var traceSelection = d3.select(this); @@ -80944,9 +82116,9 @@ module.exports = function style(gd) { }); }; -},{"./style_one":375,"d3":16}],375:[function(_dereq_,module,exports){ +},{"../bar/uniform_text":284,"./style_one":376,"d3":16}],376:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -80968,9 +82140,9 @@ module.exports = function styleOne(s, pt, trace) { .call(Color.stroke, lineColor); }; -},{"../../components/color":51,"./helpers":369}],376:[function(_dereq_,module,exports){ +},{"../../components/color":51,"./helpers":370}],377:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81020,9 +82192,9 @@ module.exports = function arraysToCalcdata(cd, trace) { } }; -},{"../../lib":169}],377:[function(_dereq_,module,exports){ +},{"../../lib":169}],378:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81434,9 +82606,9 @@ module.exports = { } }; -},{"../../components/colorscale/attributes":58,"../../components/drawing":72,"../../components/drawing/attributes":71,"../../lib/extend":164,"../../plots/font_attributes":239,"../../plots/template_attributes":253,"./constants":381}],378:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../components/drawing":72,"../../components/drawing/attributes":71,"../../lib/extend":164,"../../plots/font_attributes":239,"../../plots/template_attributes":253,"./constants":382}],379:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81719,9 +82891,9 @@ module.exports = { getStackOpts: getStackOpts }; -},{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"./arrays_to_calcdata":376,"./calc_selection":379,"./colorscale_calc":380,"./subtypes":401,"fast-isnumeric":18}],379:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"./arrays_to_calcdata":377,"./calc_selection":380,"./colorscale_calc":381,"./subtypes":402,"fast-isnumeric":18}],380:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81738,9 +82910,9 @@ module.exports = function calcSelection(cd, trace) { } }; -},{"../../lib":169}],380:[function(_dereq_,module,exports){ +},{"../../lib":169}],381:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81781,9 +82953,9 @@ module.exports = function calcMarkerColorscale(gd, trace) { } }; -},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"./subtypes":401}],381:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"./subtypes":402}],382:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81810,9 +82982,9 @@ module.exports = { eventDataKeys: [] }; -},{}],382:[function(_dereq_,module,exports){ +},{}],383:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81991,9 +83163,9 @@ function getInterp(calcTrace, index, position, posAttr) { return pt0.s + (pt1.s - pt0.s) * (position - pt0[posAttr]) / (pt1[posAttr] - pt0[posAttr]); } -},{"./calc":378}],383:[function(_dereq_,module,exports){ +},{"./calc":379}],384:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82030,9 +83202,9 @@ module.exports = function crossTraceDefaults(fullData) { } }; -},{}],384:[function(_dereq_,module,exports){ +},{}],385:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82120,9 +83292,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout Lib.coerceSelectionMarkerOpacity(traceOut, coerce); }; -},{"../../lib":169,"../../registry":258,"./attributes":377,"./constants":381,"./fillcolor_defaults":385,"./line_defaults":390,"./line_shape_defaults":392,"./marker_defaults":396,"./stack_defaults":399,"./subtypes":401,"./text_defaults":402,"./xy_defaults":403}],385:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258,"./attributes":378,"./constants":382,"./fillcolor_defaults":386,"./line_defaults":391,"./line_shape_defaults":393,"./marker_defaults":397,"./stack_defaults":400,"./subtypes":402,"./text_defaults":403,"./xy_defaults":404}],386:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82157,9 +83329,9 @@ module.exports = function fillColorDefaults(traceIn, traceOut, defaultColor, coe )); }; -},{"../../components/color":51,"../../lib":169}],386:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":169}],387:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82183,9 +83355,9 @@ module.exports = function formatLabels(cdi, trace, fullLayout) { return labels; }; -},{"../../plots/cartesian/axes":213}],387:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":213}],388:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82232,9 +83404,9 @@ module.exports = function getTraceColor(trace, di) { } }; -},{"../../components/color":51,"./subtypes":401}],388:[function(_dereq_,module,exports){ +},{"../../components/color":51,"./subtypes":402}],389:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82427,9 +83599,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { } }; -},{"../../components/color":51,"../../components/fx":89,"../../lib":169,"../../registry":258,"./get_trace_color":387}],389:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":89,"../../lib":169,"../../registry":258,"./get_trace_color":388}],390:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82473,9 +83645,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"./arrays_to_calcdata":376,"./attributes":377,"./calc":378,"./cross_trace_calc":382,"./cross_trace_defaults":383,"./defaults":384,"./format_labels":386,"./hover":388,"./marker_colorbar":395,"./plot":397,"./select":398,"./style":400,"./subtypes":401}],390:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./arrays_to_calcdata":377,"./attributes":378,"./calc":379,"./cross_trace_calc":383,"./cross_trace_defaults":384,"./defaults":385,"./format_labels":387,"./hover":389,"./marker_colorbar":396,"./plot":398,"./select":399,"./style":401,"./subtypes":402}],391:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82504,9 +83676,9 @@ module.exports = function lineDefaults(traceIn, traceOut, defaultColor, layout, if(!(opts || {}).noDash) coerce('line.dash'); }; -},{"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"../../lib":169}],391:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"../../lib":169}],392:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82965,9 +84137,9 @@ module.exports = function linePoints(d, opts) { return segments; }; -},{"../../constants/numerical":149,"../../lib":169,"./constants":381}],392:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":169,"./constants":382}],393:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82984,9 +84156,9 @@ module.exports = function handleLineShapeDefaults(traceIn, traceOut, coerce) { if(shape === 'spline') coerce('line.smoothing'); }; -},{}],393:[function(_dereq_,module,exports){ +},{}],394:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83074,9 +84246,9 @@ module.exports = function linkTraces(gd, plotinfo, cdscatter) { return cdscatterSorted; }; -},{}],394:[function(_dereq_,module,exports){ +},{}],395:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83116,9 +84288,9 @@ module.exports = function makeBubbleSizeFn(trace) { }; }; -},{"fast-isnumeric":18}],395:[function(_dereq_,module,exports){ +},{"fast-isnumeric":18}],396:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83134,9 +84306,9 @@ module.exports = { max: 'cmax' }; -},{}],396:[function(_dereq_,module,exports){ +},{}],397:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83215,9 +84387,9 @@ module.exports = function markerDefaults(traceIn, traceOut, defaultColor, layout } }; -},{"../../components/color":51,"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"./subtypes":401}],397:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"./subtypes":402}],398:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83776,9 +84948,9 @@ function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) { }); } -},{"../../components/drawing":72,"../../lib":169,"../../lib/polygon":181,"../../registry":258,"./line_points":391,"./link_traces":393,"./subtypes":401,"d3":16}],398:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":169,"../../lib/polygon":181,"../../registry":258,"./line_points":392,"./link_traces":394,"./subtypes":402,"d3":16}],399:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83830,9 +85002,9 @@ module.exports = function selectPoints(searchInfo, selectionTester) { return selection; }; -},{"./subtypes":401}],399:[function(_dereq_,module,exports){ +},{"./subtypes":402}],400:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83935,9 +85107,9 @@ module.exports = function handleStackDefaults(traceIn, traceOut, layout, coerce) } }; -},{}],400:[function(_dereq_,module,exports){ +},{}],401:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84006,9 +85178,9 @@ module.exports = { styleOnSelect: styleOnSelect }; -},{"../../components/drawing":72,"../../registry":258,"d3":16}],401:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../registry":258,"d3":16}],402:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84045,9 +85217,9 @@ module.exports = { } }; -},{"../../lib":169}],402:[function(_dereq_,module,exports){ +},{"../../lib":169}],403:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84075,9 +85247,9 @@ module.exports = function(traceIn, traceOut, layout, coerce, opts) { } }; -},{"../../lib":169}],403:[function(_dereq_,module,exports){ +},{"../../lib":169}],404:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84119,9 +85291,9 @@ module.exports = function handleXYDefaults(traceIn, traceOut, layout, coerce) { return len; }; -},{"../../lib":169,"../../registry":258}],404:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258}],405:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84227,9 +85399,9 @@ module.exports = { hovertemplate: hovertemplateAttrs(), }; -},{"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"../scatter/attributes":377}],405:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"../scatter/attributes":378}],406:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84308,9 +85480,9 @@ module.exports = function calc(gd, trace) { return cd; }; -},{"../scatter/arrays_to_calcdata":376,"../scatter/calc":378,"../scatter/calc_selection":379,"../scatter/colorscale_calc":380,"fast-isnumeric":18}],406:[function(_dereq_,module,exports){ +},{"../scatter/arrays_to_calcdata":377,"../scatter/calc":379,"../scatter/calc_selection":380,"../scatter/colorscale_calc":381,"fast-isnumeric":18}],407:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84412,9 +85584,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout Lib.coerceSelectionMarkerOpacity(traceOut, coerce); }; -},{"../../lib":169,"../scatter/constants":381,"../scatter/fillcolor_defaults":385,"../scatter/line_defaults":390,"../scatter/line_shape_defaults":392,"../scatter/marker_defaults":396,"../scatter/subtypes":401,"../scatter/text_defaults":402,"./attributes":404}],407:[function(_dereq_,module,exports){ +},{"../../lib":169,"../scatter/constants":382,"../scatter/fillcolor_defaults":386,"../scatter/line_defaults":391,"../scatter/line_shape_defaults":393,"../scatter/marker_defaults":397,"../scatter/subtypes":402,"../scatter/text_defaults":403,"./attributes":405}],408:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84444,9 +85616,9 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) { return out; }; -},{}],408:[function(_dereq_,module,exports){ +},{}],409:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84468,9 +85640,9 @@ module.exports = function formatLabels(cdi, trace, fullLayout) { return labels; }; -},{"../../plots/cartesian/axes":213}],409:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":213}],410:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84542,9 +85714,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { return scatterPointData; }; -},{"../scatter/hover":388}],410:[function(_dereq_,module,exports){ +},{"../scatter/hover":389}],411:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84576,9 +85748,9 @@ module.exports = { } }; -},{"../../plots/ternary":254,"../scatter/marker_colorbar":395,"../scatter/select":398,"../scatter/style":400,"./attributes":404,"./calc":405,"./defaults":406,"./event_data":407,"./format_labels":408,"./hover":409,"./plot":411}],411:[function(_dereq_,module,exports){ +},{"../../plots/ternary":254,"../scatter/marker_colorbar":396,"../scatter/select":399,"../scatter/style":401,"./attributes":405,"./calc":406,"./defaults":407,"./event_data":408,"./format_labels":409,"./hover":410,"./plot":412}],412:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84609,9 +85781,9 @@ module.exports = function plot(gd, ternary, moduleCalcData) { scatterPlot(gd, plotinfo, moduleCalcData, scatterLayer); }; -},{"../scatter/plot":397}],412:[function(_dereq_,module,exports){ +},{"../scatter/plot":398}],413:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84808,9 +85980,9 @@ module.exports = { } }; -},{"../../lib/extend":164,"../box/attributes":284}],413:[function(_dereq_,module,exports){ +},{"../../lib/extend":164,"../box/attributes":285}],414:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84984,9 +86156,9 @@ function calcSpan(trace, cdi, valAxis, bandwidth) { return spanOut; } -},{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"../box/calc":285,"./helpers":416}],414:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"../box/calc":286,"./helpers":417}],415:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85027,9 +86199,9 @@ module.exports = function crossTraceCalc(gd, plotinfo) { } }; -},{"../box/cross_trace_calc":286}],415:[function(_dereq_,module,exports){ +},{"../box/cross_trace_calc":287}],416:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85088,9 +86260,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(!meanLineVisible) traceOut.meanline = {visible: false}; }; -},{"../../components/color":51,"../../lib":169,"../box/defaults":287,"./attributes":412}],416:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":169,"../box/defaults":288,"./attributes":413}],417:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85161,9 +86333,9 @@ exports.getKdeValue = function(calcItem, trace, valueDist) { exports.extractVal = function(o) { return o.v; }; -},{"../../lib":169}],417:[function(_dereq_,module,exports){ +},{"../../lib":169}],418:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85273,9 +86445,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return closeData; }; -},{"../../lib":169,"../../plots/cartesian/axes":213,"../box/hover":289,"./helpers":416}],418:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213,"../box/hover":290,"./helpers":417}],419:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85307,9 +86479,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"../box/defaults":287,"../box/select":294,"../scatter/style":400,"./attributes":412,"./calc":413,"./cross_trace_calc":414,"./defaults":415,"./hover":417,"./layout_attributes":419,"./layout_defaults":420,"./plot":421,"./style":422}],419:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../box/defaults":288,"../box/select":295,"../scatter/style":401,"./attributes":413,"./calc":414,"./cross_trace_calc":415,"./defaults":416,"./hover":418,"./layout_attributes":420,"./layout_defaults":421,"./plot":422,"./style":423}],420:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85333,9 +86505,9 @@ module.exports = { }) }; -},{"../../lib":169,"../box/layout_attributes":291}],420:[function(_dereq_,module,exports){ +},{"../../lib":169,"../box/layout_attributes":292}],421:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85355,9 +86527,9 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { boxLayoutDefaults._supply(layoutIn, layoutOut, fullData, coerce, 'violin'); }; -},{"../../lib":169,"../box/layout_defaults":292,"./layout_attributes":419}],421:[function(_dereq_,module,exports){ +},{"../../lib":169,"../box/layout_defaults":293,"./layout_attributes":420}],422:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85545,9 +86717,9 @@ module.exports = function plot(gd, plotinfo, cdViolins, violinLayer) { }); }; -},{"../../components/drawing":72,"../../lib":169,"../box/plot":293,"../scatter/line_points":391,"./helpers":416,"d3":16}],422:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":169,"../box/plot":294,"../scatter/line_points":392,"./helpers":417,"d3":16}],423:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85600,11 +86772,11 @@ module.exports = function style(gd) { }); }; -},{"../../components/color":51,"../scatter/style":400,"d3":16}]},{},[11])(11) +},{"../../components/color":51,"../scatter/style":401,"d3":16}]},{},[11])(11) }); -Plotly.register({moduleType:"locale",name:"de",dictionary:{Autoscale:"Automatische Skalierung","Box Select":"Rechteckauswahl","Click to enter Colorscale title":"Klicken, um den Farbskalatitel einzugeben","Click to enter Component A title":"Klicken, um den Titel der Komponente A einzugeben","Click to enter Component B title":"Klicken, um den Titel der Komponente B einzugeben","Click to enter Component C title":"Klicken, um den Titel der Komponente C einzugeben","Click to enter Plot title":"Klicken, um den Titel des Graphen einzugeben","Click to enter X axis title":"Klicken, um den Titel der X-Achse einzugeben","Click to enter Y axis title":"Klicken, um den Titel der Y-Achse einzugeben","Compare data on hover":"\xdcber die Daten fahren, um sie zu vergleichen","Double-click on legend to isolate one trace":"Daten isolieren durch Doppelklick in der Legende","Double-click to zoom back out":"Herauszoomen durch Doppelklick","Download plot as a png":"Graphen als PNG herunterladen","Download plot":"Graphen herunterladen","Edit in Chart Studio":"Im Chart Studio bearbeiten","IE only supports svg. Changing format to svg.":"IE unterst\xfctzt nur SVG-Dateien. Format wird zu SVG gewechselt.","Lasso Select":"Lassoauswahl","Orbital rotation":"Orbitalrotation",Pan:"Verschieben","Produced with Plotly":"Erstellt mit Plotly",Reset:"Zur\xfccksetzen","Reset axes":"Achsen zur\xfccksetzen","Reset camera to default":"Kamera auf Standard zur\xfccksetzen","Reset camera to last save":"Kamera auf letzte Speicherung zur\xfccksetzen","Reset view":"Ansicht zur\xfccksetzen","Reset views":"Ansichten zur\xfccksetzen","Show closest data on hover":"Zeige n\xe4heste Daten beim \xdcberfahren","Snapshot succeeded":"Snapshot erfolgreich","Sorry, there was a problem downloading your snapshot!":"Es gab ein Problem beim Herunterladen des Snapshots","Taking snapshot - this may take a few seconds":"Erstelle einen Snapshot - dies kann einige Sekunden dauern",Zoom:"Zoom","Zoom in":"Hineinzoomen","Zoom out":"Herauszoomen","close:":"Schluss:",trace:"Datenspur","lat:":"Lat.:","lon:":"Lon.:","q1:":"q1:","q3:":"q3:","source:":"Quelle:","target:":"Ziel:","lower fence:":"Untere Schranke:","upper fence:":"Obere Schranke:","max:":"Max.:","mean \xb1 \u03c3:":"Mittelwert \xb1 \u03c3:","mean:":"Mittelwert:","median:":"Median:","min:":"Min.:","Turntable rotation":"Drehscheibenorbit","Toggle Spike Lines":"Bezugslinien an-/abschalten","open:":"Er\xf6ffnung:","high:":"H\xf6chstkurs:","low:":"Tiefstkurs:","Toggle show closest data on hover":"Anzeige der n\xe4hesten Daten an-/abschalten","incoming flow count:":"Anzahl eingehender Verbindungen:","outgoing flow count:":"Anzahl ausgehender Verbindungen:","kde:":"Dichte:"},format:{days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],shortDays:["So","Mo","Di","Mi","Do","Fr","Sa"],months:["Januar","Februar","M\xe4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],shortMonths:["Jan","Feb","M\xe4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],date:"%d.%m.%Y",decimal:",",thousands:"."}}); -Plotly.register({moduleType:"locale",name:"es",dictionary:{Autoscale:"Autoescalar","Box Select":"Seleccionar Caja","Click to enter Colorscale title":"Introducir el t\xedtulo de la Escala de Color","Click to enter Component A title":"Introducir el t\xedtulo del Componente A","Click to enter Component B title":"Introducir el t\xedtulo del Componente B","Click to enter Component C title":"Introducir el t\xedtulo del Componente C","Click to enter Plot title":"Introducir el t\xedtulo de la Gr\xe1fica","Click to enter X axis title":"Introducir el t\xedtulo del eje X","Click to enter Y axis title":"Introducir el t\xedtulo del eje Y","Click to enter radial axis title":"Introducir el t\xedtulo del eje radial","Compare data on hover":"Comparar datos al pasar por encima","Double-click on legend to isolate one trace":"Haga doble-clic en la leyenda para aislar una traza","Double-click to zoom back out":"Haga doble-clic para restaurar la escala","Download plot as a png":"Descargar gr\xe1fica como png","Download plot":"Descargar gr\xe1fica","Edit in Chart Studio":"Editar en Chart Studio","IE only supports svg. Changing format to svg.":"IE solo soporta svg. Cambiando formato a svg.","Lasso Select":"Seleccionar con lazo","Orbital rotation":"Rotaci\xf3n esf\xe9rica",Pan:"Modo Panor\xe1mica","Produced with Plotly":"Hecho con Plotly",Reset:"Reiniciar","Reset axes":"Reiniciar ejes","Reset camera to default":"Restaurar c\xe1mara predeterminada","Reset camera to last save":"Restaurar anterior c\xe1mara","Reset view":"Restaurar vista","Reset views":"Restaurar vistas","Show closest data on hover":"Mostrar el dato m\xe1s cercano al pasar por encima","Snapshot succeeded":"La captura de la instant\xe1nea finaliz\xf3 correctamente","Sorry, there was a problem downloading your snapshot!":"\xa1La descarga de la instant\xe1nea fall\xf3!","Taking snapshot - this may take a few seconds":"Capturando una instant\xe1nea - podr\xeda tardar unos segundos","Toggle Spike Lines":"Mostrar/Ocultar Gu\xedas","Toggle show closest data on hover":"Activar/Desactivar mostrar el dato m\xe1s cercano al pasar por encima","Turntable rotation":"Rotaci\xf3n plana",Zoom:"Modo Ampliar/Reducir","Zoom in":"Ampliar","Zoom out":"Reducir","close:":"cierre:","high:":"alza:","incoming flow count:":"flujo de entrada:","kde:":"edp:","lat:":"lat:","lon:":"lon:","low:":"baja:","lower fence:":"l\xedmite inferior:","max:":"m\xe1x:","mean \xb1 \u03c3:":"media \xb1 \u03c3:","mean:":"media:","median:":"mediana:","min:":"m\xedn:","new text":"nuevo texto","open:":"apertura:","outgoing flow count:":"flujo de salida:","q1:":"q1:","q3:":"q3:","source:":"fuente:","target:":"destino:",trace:"traza","upper fence:":"l\xedmite superior:"},format:{days:["Domingo","Lunes","Martes","Mi\xe9rcoles","Jueves","Viernes","S\xe1bado"],shortDays:["Dom","Lun","Mar","Mi\xe9","Jue","Vie","S\xe1b"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],shortMonths:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],date:"%d/%m/%Y",decimal:",",thousands:" "}}); -Plotly.register({moduleType:"locale",name:"fr",dictionary:{Autoscale:"\xc9chelle automatique","Box Select":"S\xe9lection rectangulaire","Click to enter Colorscale title":"Ajouter un titre \xe0 l'\xe9chelle de couleurs","Click to enter Component A title":"Ajouter un titre \xe0 la composante A","Click to enter Component B title":"Ajouter un titre \xe0 la composante B","Click to enter Component C title":"Ajouter un titre \xe0 la composante C","Click to enter Plot title":"Ajouter un titre au graphique","Click to enter X axis title":"Ajouter un titre \xe0 l'axe des x","Click to enter Y axis title":"Ajouter un titre \xe0 l'axe des y","Click to enter radial axis title":"Ajouter un titre \xe0 l'axe radial","Compare data on hover":"Comparaison entre donn\xe9es en survol","Double-click on legend to isolate one trace":"Double-cliquer sur la l\xe9gende pour isoler une s\xe9rie","Double-click to zoom back out":"Double-cliquer pour d\xe9zoomer","Download plot as a png":"T\xe9l\xe9charger le graphique en fichier PNG","Download plot":"T\xe9l\xe9charger le graphique","Edit in Chart Studio":"\xc9diter le graphique sur plot.ly","IE only supports svg. Changing format to svg.":"IE ne permet que les conversions en SVG. Conversion en SVG en cours.","Lasso Select":"S\xe9lection lasso","Orbital rotation":"Rotation orbitale",Pan:"Translation","Produced with Plotly":"G\xe9n\xe9r\xe9 avec Plotly",Reset:"R\xe9initialiser","Reset axes":"R\xe9initialiser les axes","Reset camera to default":"R\xe9gler la cam\xe9ra \xe0 sa valeur d\xe9faut","Reset camera to last save":"R\xe9gler la cam\xe9ra \xe0 sa valeur sauvegard\xe9e","Reset view":"R\xe9initialiser","Reset views":"R\xe9initialiser","Show closest data on hover":"Donn\xe9es les plus proches en survol","Snapshot succeeded":"Conversion r\xe9ussie","Sorry, there was a problem downloading your snapshot!":"D\xe9sol\xe9, un probl\xe8me est survenu lors du t\xe9l\xe9chargement de votre graphique","Taking snapshot - this may take a few seconds":"Conversion en cours, ceci peut prendre quelques secondes",Zoom:"Zoom","Zoom in":"Zoom int\xe9rieur","Zoom out":"Zoom ext\xe9rieur","close:":"fermeture :",trace:"s\xe9rie","lat:":"lat. :","lon:":"lon. :","q1:":"q1 :","q3:":"q3 :","source:":"source :","target:":"embouchure :","lower fence:":"cl\xf4ture sup\xe9rieure :","upper fence:":"cl\xf4ture inf\xe9rieure :","max:":"max. :","mean \xb1 \u03c3:":"moyenne \xb1 \u03c3 :","mean:":"moyenne :","median:":"m\xe9diane :","min:":"min. :","new text":"nouveau texte","Turntable rotation":"Rotation planaire","Toggle Spike Lines":"Activer/d\xe9sactiver les pics","open:":"ouverture :","high:":"haut :","low:":"bas :","Toggle show closest data on hover":"Activer/d\xe9sactiver le survol","incoming flow count:":"flux entrant :","outgoing flow count:":"flux sortant :","kde:":"est. par noyau :"},format:{days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],shortDays:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],months:["Janvier","F\xe9vrier","Mars","Avril","Mai","Juin","Juillet","Ao\xfbt","Septembre","Octobre","Novembre","D\xe9cembre"],shortMonths:["Jan","F\xe9v","Mar","Avr","Mai","Jun","Jul","Ao\xfb","Sep","Oct","Nov","D\xe9c"],date:"%d/%m/%Y",decimal:",",thousands:" ",year:"%Y",month:"%b %Y",dayMonth:"%-d %b",dayMonthYear:"%-d %b %Y"}}); -Plotly.register({moduleType:"locale",name:"sv",dictionary:{Autoscale:"Autoskala","Box Select":"V\xe4lj rektangel","Click to enter Colorscale title":"Klicka f\xf6r att ange titel p\xe5 f\xe4rgskala","Click to enter Component A title":"Klicka f\xf6r att ange titel p\xe5 komponent A","Click to enter Component B title":"Klicka f\xf6r att ange titel p\xe5 komponent B","Click to enter Component C title":"Klicka f\xf6r att ange titel p\xe5 komponent C","Click to enter Plot title":"Klicka f\xf6r att ange titel p\xe5 diagram","Click to enter X axis title":"Klicka f\xf6r att ange titel p\xe5 x-axel","Click to enter Y axis title":"Klicka f\xf6r att ange titel p\xe5 y-axel","Click to enter radial axis title":"Klicka f\xf6r att ange titel p\xe5 radiell axel","Compare data on hover":"J\xe4mf\xf6r data n\xe4r muspekaren h\xe5lls \xf6ver","Double-click on legend to isolate one trace":"Dubbelklicka p\xe5 f\xf6rklaringen f\xf6r att visa endast en serie","Double-click to zoom back out":"Dubbelklicka f\xf6r att zooma ut igen","Download plot":"Ladda ner diagram","Download plot as a png":"Ladda ner diagram som png","Edit in Chart Studio":"Editera i Chart Studio","IE only supports svg. Changing format to svg.":"IE st\xf6der enbart svg. Byter format till svg.","Lasso Select":"V\xe4lj lasso","Orbital rotation":"Orbital rotation",Pan:"Panorera","Produced with Plotly":"Skapad med Plotly",Reset:"\xc5terst\xe4ll","Reset axes":"\xc5terst\xe4ll axlar","Reset camera to default":"\xc5terst\xe4ll kamera till standard","Reset camera to last save":"\xc5terst\xe4ll kamera till senast sparad","Reset view":"\xc5terst\xe4ll vy","Reset views":"\xc5terst\xe4ll vyer","Show closest data on hover":"Visa n\xe4rmaste v\xe4rde n\xe4r muspekaren h\xe5lls \xf6ver","Snapshot succeeded":"Bild skapad","Sorry, there was a problem downloading your snapshot!":"Tyv\xe4rr gick n\xe5got fel vid nedladdning av bild","Taking snapshot - this may take a few seconds":"Skapar bild - detta kan ta n\xe5gra sekunder","Toggle Spike Lines":"Aktivera/Inaktivera topplinjer","Toggle show closest data on hover":"Aktivera/Inaktivera visa n\xe4rmaste v\xe4rde n\xe4r muspekaren h\xe5lls \xf6ver","Turntable rotation":"Platt rotation",Zoom:"Zooma","Zoom in":"Zooma in","Zoom out":"Zooma ut","close:":"st\xe4ngning:","concentration:":"koncentration:","high:":"h\xf6g:","incoming flow count:":"inkommande fl\xf6de summering:","kde:":"kde:","lat:":"lat:","lon:":"lon:","low:":"l\xe5g:","lower fence:":"undre gr\xe4ns:","max:":"max:","mean \xb1 \u03c3:":"medel \xb1 \u03c3:","mean:":"medel:","median:":"median:","min:":"min:","new text":"ny text","open:":"\xf6ppning:","outgoing flow count:":"utg\xe5ende fl\xf6de summering:","q1:":"q1:","q3:":"q3:","source:":"k\xe4lla:","target:":"m\xe5l:",trace:"serie","upper fence:":"\xf6vre gr\xe4ns:"},format:{days:["S\xf6ndag","M\xe5ndag","Tisdag","Onsdag","Torsdag","Fredag","L\xf6rdag"],shortDays:["S\xf6n","M\xe5n","Tis","Ons","Tor","Fre","L\xf6r"],months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],shortMonths:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],date:"%Y-%m-%d"}}); -Plotly.register({moduleType:"locale",name:"tr",dictionary:{},format:{days:["Pazar","Pazartesi","Sal\u0131","\xc7ar\u015famba","Per\u015fembe","Cuma","Cumartesi"],shortDays:["Pz","Pt","Sa","\xc7a","Pe","Cu","Ct"],months:["Ocak","\u015eubat","Mart","Nisan","May\u0131s","Haziran","Temmuz","A\u011fustos","Eyl\xfcl","Ekim","Kas\u0131m","Aral\u0131k"],shortMonths:["Oca","\u015eub","Mar","Nis","May","Haz","Tem","A\u011fu","Eyl","Eki","Kas","Ara"],date:"%d.%m.%Y"}}); \ No newline at end of file +var locale={moduleType:"locale",name:"de",dictionary:{Autoscale:"Automatische Skalierung","Box Select":"Rechteckauswahl","Click to enter Colorscale title":"Klicken, um den Farbskalatitel einzugeben","Click to enter Component A title":"Klicken, um den Titel der Komponente A einzugeben","Click to enter Component B title":"Klicken, um den Titel der Komponente B einzugeben","Click to enter Component C title":"Klicken, um den Titel der Komponente C einzugeben","Click to enter Plot title":"Klicken, um den Titel des Graphen einzugeben","Click to enter X axis title":"Klicken, um den Titel der X-Achse einzugeben","Click to enter Y axis title":"Klicken, um den Titel der Y-Achse einzugeben","Compare data on hover":"\xdcber die Daten fahren, um sie zu vergleichen","Double-click on legend to isolate one trace":"Daten isolieren durch Doppelklick in der Legende","Double-click to zoom back out":"Herauszoomen durch Doppelklick","Download plot as a png":"Graphen als PNG herunterladen","Download plot":"Graphen herunterladen","Edit in Chart Studio":"Im Chart Studio bearbeiten","IE only supports svg. Changing format to svg.":"IE unterst\xfctzt nur SVG-Dateien. Format wird zu SVG gewechselt.","Lasso Select":"Lassoauswahl","Orbital rotation":"Orbitalrotation",Pan:"Verschieben","Produced with Plotly":"Erstellt mit Plotly",Reset:"Zur\xfccksetzen","Reset axes":"Achsen zur\xfccksetzen","Reset camera to default":"Kamera auf Standard zur\xfccksetzen","Reset camera to last save":"Kamera auf letzte Speicherung zur\xfccksetzen","Reset view":"Ansicht zur\xfccksetzen","Reset views":"Ansichten zur\xfccksetzen","Show closest data on hover":"Zeige n\xe4heste Daten beim \xdcberfahren","Snapshot succeeded":"Snapshot erfolgreich","Sorry, there was a problem downloading your snapshot!":"Es gab ein Problem beim Herunterladen des Snapshots","Taking snapshot - this may take a few seconds":"Erstelle einen Snapshot - dies kann einige Sekunden dauern",Zoom:"Zoom","Zoom in":"Hineinzoomen","Zoom out":"Herauszoomen","close:":"Schluss:",trace:"Datenspur","lat:":"Lat.:","lon:":"Lon.:","q1:":"q1:","q3:":"q3:","source:":"Quelle:","target:":"Ziel:","lower fence:":"Untere Schranke:","upper fence:":"Obere Schranke:","max:":"Max.:","mean \xb1 \u03c3:":"Mittelwert \xb1 \u03c3:","mean:":"Mittelwert:","median:":"Median:","min:":"Min.:","Turntable rotation":"Drehscheibenorbit","Toggle Spike Lines":"Bezugslinien an-/abschalten","open:":"Er\xf6ffnung:","high:":"H\xf6chstkurs:","low:":"Tiefstkurs:","Toggle show closest data on hover":"Anzeige der n\xe4hesten Daten an-/abschalten","incoming flow count:":"Anzahl eingehender Verbindungen:","outgoing flow count:":"Anzahl ausgehender Verbindungen:","kde:":"Dichte:"},format:{days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],shortDays:["So","Mo","Di","Mi","Do","Fr","Sa"],months:["Januar","Februar","M\xe4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],shortMonths:["Jan","Feb","M\xe4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],date:"%d.%m.%Y",decimal:",",thousands:"."}};"undefined"==typeof Plotly?(window.PlotlyLocales=window.PlotlyLocales||[],window.PlotlyLocales.push(locale)):Plotly.register(locale); +var locale={moduleType:"locale",name:"es",dictionary:{Autoscale:"Autoescalar","Box Select":"Seleccionar Caja","Click to enter Colorscale title":"Introducir el t\xedtulo de la Escala de Color","Click to enter Component A title":"Introducir el t\xedtulo del Componente A","Click to enter Component B title":"Introducir el t\xedtulo del Componente B","Click to enter Component C title":"Introducir el t\xedtulo del Componente C","Click to enter Plot title":"Introducir el t\xedtulo de la Gr\xe1fica","Click to enter X axis title":"Introducir el t\xedtulo del eje X","Click to enter Y axis title":"Introducir el t\xedtulo del eje Y","Click to enter radial axis title":"Introducir el t\xedtulo del eje radial","Compare data on hover":"Comparar datos al pasar por encima","Double-click on legend to isolate one trace":"Haga doble-clic en la leyenda para aislar una traza","Double-click to zoom back out":"Haga doble-clic para restaurar la escala","Download plot as a png":"Descargar gr\xe1fica como png","Download plot":"Descargar gr\xe1fica","Edit in Chart Studio":"Editar en Chart Studio","IE only supports svg. Changing format to svg.":"IE solo soporta svg. Cambiando formato a svg.","Lasso Select":"Seleccionar con lazo","Orbital rotation":"Rotaci\xf3n esf\xe9rica",Pan:"Modo Panor\xe1mica","Produced with Plotly":"Hecho con Plotly",Reset:"Reiniciar","Reset axes":"Reiniciar ejes","Reset camera to default":"Restaurar c\xe1mara predeterminada","Reset camera to last save":"Restaurar anterior c\xe1mara","Reset view":"Restaurar vista","Reset views":"Restaurar vistas","Show closest data on hover":"Mostrar el dato m\xe1s cercano al pasar por encima","Snapshot succeeded":"La captura de la instant\xe1nea finaliz\xf3 correctamente","Sorry, there was a problem downloading your snapshot!":"\xa1La descarga de la instant\xe1nea fall\xf3!","Taking snapshot - this may take a few seconds":"Capturando una instant\xe1nea - podr\xeda tardar unos segundos","Toggle Spike Lines":"Mostrar/Ocultar Gu\xedas","Toggle show closest data on hover":"Activar/Desactivar mostrar el dato m\xe1s cercano al pasar por encima","Turntable rotation":"Rotaci\xf3n plana",Zoom:"Modo Ampliar/Reducir","Zoom in":"Ampliar","Zoom out":"Reducir","close:":"cierre:","high:":"alza:","incoming flow count:":"flujo de entrada:","kde:":"edp:","lat:":"lat:","lon:":"lon:","low:":"baja:","lower fence:":"l\xedmite inferior:","max:":"m\xe1x:","mean \xb1 \u03c3:":"media \xb1 \u03c3:","mean:":"media:","median:":"mediana:","min:":"m\xedn:","new text":"nuevo texto","open:":"apertura:","outgoing flow count:":"flujo de salida:","q1:":"q1:","q3:":"q3:","source:":"fuente:","target:":"destino:",trace:"traza","upper fence:":"l\xedmite superior:"},format:{days:["Domingo","Lunes","Martes","Mi\xe9rcoles","Jueves","Viernes","S\xe1bado"],shortDays:["Dom","Lun","Mar","Mi\xe9","Jue","Vie","S\xe1b"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],shortMonths:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],date:"%d/%m/%Y",decimal:",",thousands:" "}};"undefined"==typeof Plotly?(window.PlotlyLocales=window.PlotlyLocales||[],window.PlotlyLocales.push(locale)):Plotly.register(locale); +var locale={moduleType:"locale",name:"fr",dictionary:{Autoscale:"\xc9chelle automatique","Box Select":"S\xe9lection rectangulaire","Click to enter Colorscale title":"Ajouter un titre \xe0 l'\xe9chelle de couleurs","Click to enter Component A title":"Ajouter un titre \xe0 la composante A","Click to enter Component B title":"Ajouter un titre \xe0 la composante B","Click to enter Component C title":"Ajouter un titre \xe0 la composante C","Click to enter Plot title":"Ajouter un titre au graphique","Click to enter X axis title":"Ajouter un titre \xe0 l'axe des x","Click to enter Y axis title":"Ajouter un titre \xe0 l'axe des y","Click to enter radial axis title":"Ajouter un titre \xe0 l'axe radial","Compare data on hover":"Comparaison entre donn\xe9es en survol","Double-click on legend to isolate one trace":"Double-cliquer sur la l\xe9gende pour isoler une s\xe9rie","Double-click to zoom back out":"Double-cliquer pour d\xe9zoomer","Download plot as a png":"T\xe9l\xe9charger le graphique en fichier PNG","Download plot":"T\xe9l\xe9charger le graphique","Edit in Chart Studio":"\xc9diter le graphique sur plot.ly","IE only supports svg. Changing format to svg.":"IE ne permet que les conversions en SVG. Conversion en SVG en cours.","Lasso Select":"S\xe9lection lasso","Orbital rotation":"Rotation orbitale",Pan:"Translation","Produced with Plotly":"G\xe9n\xe9r\xe9 avec Plotly",Reset:"R\xe9initialiser","Reset axes":"R\xe9initialiser les axes","Reset camera to default":"R\xe9gler la cam\xe9ra \xe0 sa valeur d\xe9faut","Reset camera to last save":"R\xe9gler la cam\xe9ra \xe0 sa valeur sauvegard\xe9e","Reset view":"R\xe9initialiser","Reset views":"R\xe9initialiser","Show closest data on hover":"Donn\xe9es les plus proches en survol","Snapshot succeeded":"Conversion r\xe9ussie","Sorry, there was a problem downloading your snapshot!":"D\xe9sol\xe9, un probl\xe8me est survenu lors du t\xe9l\xe9chargement de votre graphique","Taking snapshot - this may take a few seconds":"Conversion en cours, ceci peut prendre quelques secondes",Zoom:"Zoom","Zoom in":"Zoom int\xe9rieur","Zoom out":"Zoom ext\xe9rieur","close:":"fermeture :",trace:"s\xe9rie","lat:":"lat. :","lon:":"lon. :","q1:":"q1 :","q3:":"q3 :","source:":"source :","target:":"embouchure :","lower fence:":"cl\xf4ture sup\xe9rieure :","upper fence:":"cl\xf4ture inf\xe9rieure :","max:":"max. :","mean \xb1 \u03c3:":"moyenne \xb1 \u03c3 :","mean:":"moyenne :","median:":"m\xe9diane :","min:":"min. :","new text":"nouveau texte","Turntable rotation":"Rotation planaire","Toggle Spike Lines":"Activer/d\xe9sactiver les pics","open:":"ouverture :","high:":"haut :","low:":"bas :","Toggle show closest data on hover":"Activer/d\xe9sactiver le survol","incoming flow count:":"flux entrant :","outgoing flow count:":"flux sortant :","kde:":"est. par noyau :"},format:{days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],shortDays:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],months:["Janvier","F\xe9vrier","Mars","Avril","Mai","Juin","Juillet","Ao\xfbt","Septembre","Octobre","Novembre","D\xe9cembre"],shortMonths:["Jan","F\xe9v","Mar","Avr","Mai","Jun","Jul","Ao\xfb","Sep","Oct","Nov","D\xe9c"],date:"%d/%m/%Y",decimal:",",thousands:" ",year:"%Y",month:"%b %Y",dayMonth:"%-d %b",dayMonthYear:"%-d %b %Y"}};"undefined"==typeof Plotly?(window.PlotlyLocales=window.PlotlyLocales||[],window.PlotlyLocales.push(locale)):Plotly.register(locale); +var locale={moduleType:"locale",name:"sv",dictionary:{Autoscale:"Autoskala","Box Select":"V\xe4lj rektangel","Click to enter Colorscale title":"Klicka f\xf6r att ange titel p\xe5 f\xe4rgskala","Click to enter Component A title":"Klicka f\xf6r att ange titel p\xe5 komponent A","Click to enter Component B title":"Klicka f\xf6r att ange titel p\xe5 komponent B","Click to enter Component C title":"Klicka f\xf6r att ange titel p\xe5 komponent C","Click to enter Plot title":"Klicka f\xf6r att ange titel p\xe5 diagram","Click to enter X axis title":"Klicka f\xf6r att ange titel p\xe5 x-axel","Click to enter Y axis title":"Klicka f\xf6r att ange titel p\xe5 y-axel","Click to enter radial axis title":"Klicka f\xf6r att ange titel p\xe5 radiell axel","Compare data on hover":"J\xe4mf\xf6r data n\xe4r muspekaren h\xe5lls \xf6ver","Double-click on legend to isolate one trace":"Dubbelklicka p\xe5 f\xf6rklaringen f\xf6r att visa endast en serie","Double-click to zoom back out":"Dubbelklicka f\xf6r att zooma ut igen","Download plot":"Ladda ner diagram","Download plot as a png":"Ladda ner diagram som png","Edit in Chart Studio":"Editera i Chart Studio","IE only supports svg. Changing format to svg.":"IE st\xf6der enbart svg. Byter format till svg.","Lasso Select":"V\xe4lj lasso","Orbital rotation":"Orbital rotation",Pan:"Panorera","Produced with Plotly":"Skapad med Plotly",Reset:"\xc5terst\xe4ll","Reset axes":"\xc5terst\xe4ll axlar","Reset camera to default":"\xc5terst\xe4ll kamera till standard","Reset camera to last save":"\xc5terst\xe4ll kamera till senast sparad","Reset view":"\xc5terst\xe4ll vy","Reset views":"\xc5terst\xe4ll vyer","Show closest data on hover":"Visa n\xe4rmaste v\xe4rde n\xe4r muspekaren h\xe5lls \xf6ver","Snapshot succeeded":"Bild skapad","Sorry, there was a problem downloading your snapshot!":"Tyv\xe4rr gick n\xe5got fel vid nedladdning av bild","Taking snapshot - this may take a few seconds":"Skapar bild - detta kan ta n\xe5gra sekunder","Toggle Spike Lines":"Aktivera/Inaktivera topplinjer","Toggle show closest data on hover":"Aktivera/Inaktivera visa n\xe4rmaste v\xe4rde n\xe4r muspekaren h\xe5lls \xf6ver","Turntable rotation":"Platt rotation",Zoom:"Zooma","Zoom in":"Zooma in","Zoom out":"Zooma ut","close:":"st\xe4ngning:","concentration:":"koncentration:","high:":"h\xf6g:","incoming flow count:":"inkommande fl\xf6de summering:","kde:":"kde:","lat:":"lat:","lon:":"lon:","low:":"l\xe5g:","lower fence:":"undre gr\xe4ns:","max:":"max:","mean \xb1 \u03c3:":"medel \xb1 \u03c3:","mean:":"medel:","median:":"median:","min:":"min:","new text":"ny text","open:":"\xf6ppning:","outgoing flow count:":"utg\xe5ende fl\xf6de summering:","q1:":"q1:","q3:":"q3:","source:":"k\xe4lla:","target:":"m\xe5l:",trace:"serie","upper fence:":"\xf6vre gr\xe4ns:"},format:{days:["S\xf6ndag","M\xe5ndag","Tisdag","Onsdag","Torsdag","Fredag","L\xf6rdag"],shortDays:["S\xf6n","M\xe5n","Tis","Ons","Tor","Fre","L\xf6r"],months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],shortMonths:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],date:"%Y-%m-%d"}};"undefined"==typeof Plotly?(window.PlotlyLocales=window.PlotlyLocales||[],window.PlotlyLocales.push(locale)):Plotly.register(locale); +var locale={moduleType:"locale",name:"tr",dictionary:{},format:{days:["Pazar","Pazartesi","Sal\u0131","\xc7ar\u015famba","Per\u015fembe","Cuma","Cumartesi"],shortDays:["Pz","Pt","Sa","\xc7a","Pe","Cu","Ct"],months:["Ocak","\u015eubat","Mart","Nisan","May\u0131s","Haziran","Temmuz","A\u011fustos","Eyl\xfcl","Ekim","Kas\u0131m","Aral\u0131k"],shortMonths:["Oca","\u015eub","Mar","Nis","May","Haz","Tem","A\u011fu","Eyl","Eki","Kas","Ara"],date:"%d.%m.%Y"}};"undefined"==typeof Plotly?(window.PlotlyLocales=window.PlotlyLocales||[],window.PlotlyLocales.push(locale)):Plotly.register(locale); \ No newline at end of file diff --git a/static/babybuddy/js/graph.8b669d614c06.js.gz b/static/babybuddy/js/graph.8b669d614c06.js.gz new file mode 100644 index 00000000..95f0e5d1 Binary files /dev/null and b/static/babybuddy/js/graph.8b669d614c06.js.gz differ diff --git a/static/babybuddy/js/graph.js b/static/babybuddy/js/graph.js index 161e3669..9f3ffac5 100644 --- a/static/babybuddy/js/graph.js +++ b/static/babybuddy/js/graph.js @@ -1,6 +1,6 @@ /** -* plotly.js (cartesian) v1.51.3 -* Copyright 2012-2019, Plotly, Inc. +* plotly.js (cartesian) v1.52.1 +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * Licensed under the MIT license */ @@ -74,7 +74,7 @@ for(var selector in rules) { },{"../src/lib":169}],2:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -87,7 +87,7 @@ module.exports = _dereq_('../src/traces/bar'); },{"../src/traces/bar":276}],3:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -98,9 +98,9 @@ module.exports = _dereq_('../src/traces/bar'); module.exports = _dereq_('../src/traces/box'); -},{"../src/traces/box":290}],4:[function(_dereq_,module,exports){ +},{"../src/traces/box":291}],4:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -111,9 +111,9 @@ module.exports = _dereq_('../src/traces/box'); module.exports = _dereq_('../src/traces/contour'); -},{"../src/traces/contour":310}],5:[function(_dereq_,module,exports){ +},{"../src/traces/contour":311}],5:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -126,7 +126,7 @@ module.exports = _dereq_('../src/core'); },{"../src/core":151}],6:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -137,9 +137,9 @@ module.exports = _dereq_('../src/core'); module.exports = _dereq_('../src/traces/heatmap'); -},{"../src/traces/heatmap":326}],7:[function(_dereq_,module,exports){ +},{"../src/traces/heatmap":327}],7:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -150,9 +150,9 @@ module.exports = _dereq_('../src/traces/heatmap'); module.exports = _dereq_('../src/traces/histogram'); -},{"../src/traces/histogram":344}],8:[function(_dereq_,module,exports){ +},{"../src/traces/histogram":345}],8:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -163,9 +163,9 @@ module.exports = _dereq_('../src/traces/histogram'); module.exports = _dereq_('../src/traces/histogram2d'); -},{"../src/traces/histogram2d":350}],9:[function(_dereq_,module,exports){ +},{"../src/traces/histogram2d":351}],9:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -176,9 +176,9 @@ module.exports = _dereq_('../src/traces/histogram2d'); module.exports = _dereq_('../src/traces/histogram2dcontour'); -},{"../src/traces/histogram2dcontour":354}],10:[function(_dereq_,module,exports){ +},{"../src/traces/histogram2dcontour":355}],10:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -189,9 +189,9 @@ module.exports = _dereq_('../src/traces/histogram2dcontour'); module.exports = _dereq_('../src/traces/image'); -},{"../src/traces/image":361}],11:[function(_dereq_,module,exports){ +},{"../src/traces/image":362}],11:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -220,7 +220,7 @@ module.exports = Plotly; },{"./bar":2,"./box":3,"./contour":4,"./core":5,"./heatmap":6,"./histogram":7,"./histogram2d":8,"./histogram2dcontour":9,"./image":10,"./pie":12,"./scatterternary":13,"./violin":14}],12:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -231,9 +231,9 @@ module.exports = Plotly; module.exports = _dereq_('../src/traces/pie'); -},{"../src/traces/pie":370}],13:[function(_dereq_,module,exports){ +},{"../src/traces/pie":371}],13:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -244,9 +244,9 @@ module.exports = _dereq_('../src/traces/pie'); module.exports = _dereq_('../src/traces/scatterternary'); -},{"../src/traces/scatterternary":410}],14:[function(_dereq_,module,exports){ +},{"../src/traces/scatterternary":411}],14:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -257,7 +257,7 @@ module.exports = _dereq_('../src/traces/scatterternary'); module.exports = _dereq_('../src/traces/violin'); -},{"../src/traces/violin":418}],15:[function(_dereq_,module,exports){ +},{"../src/traces/violin":419}],15:[function(_dereq_,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -14679,7 +14679,7 @@ else { },{}],35:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -14750,7 +14750,7 @@ module.exports = [ },{}],36:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15105,7 +15105,7 @@ module.exports = templatedArray('annotation', { },{"../../plot_api/plot_template":203,"../../plots/cartesian/constants":219,"../../plots/font_attributes":239,"./arrow_paths":35}],37:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15194,7 +15194,7 @@ function calcAxisExpansion(ann, ax) { },{"../../lib":169,"../../plots/cartesian/axes":213,"./draw":42}],38:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15332,7 +15332,7 @@ function clickData2r(d, ax) { },{"../../lib":169,"../../plot_api/plot_template":203,"../../registry":258}],39:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15411,7 +15411,7 @@ module.exports = function handleAnnotationCommonDefaults(annIn, annOut, fullLayo },{"../../lib":169,"../color":51}],40:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15474,7 +15474,7 @@ module.exports = function convertCoords(gd, ax, newType, doExtra) { },{"../../lib/to_log_range":192,"fast-isnumeric":18}],41:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -15581,7 +15581,7 @@ function handleAnnotationDefaults(annIn, annOut, fullLayout) { },{"../../lib":169,"../../plots/array_container_defaults":209,"../../plots/cartesian/axes":213,"./attributes":36,"./common_defaults":39}],42:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16281,7 +16281,7 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { },{"../../lib":169,"../../lib/setcursor":188,"../../lib/svg_text_utils":190,"../../plot_api/plot_template":203,"../../plots/cartesian/axes":213,"../../plots/plots":245,"../../registry":258,"../color":51,"../dragelement":69,"../drawing":72,"../fx":89,"./draw_arrow_head":43,"d3":16}],43:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16432,7 +16432,7 @@ module.exports = function drawArrowHead(el3, ends, options) { },{"../color":51,"./arrow_paths":35,"d3":16}],44:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16466,7 +16466,7 @@ module.exports = { },{"../../plots/cartesian/include_components":223,"./attributes":36,"./calc_autorange":37,"./click":38,"./convert_coords":40,"./defaults":41,"./draw":42}],45:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16554,7 +16554,7 @@ module.exports = overrideAll(templatedArray('annotation', { },{"../../plot_api/edit_types":196,"../../plot_api/plot_template":203,"../annotations/attributes":36}],46:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16619,7 +16619,7 @@ function mockAnnAxes(ann, scene) { },{"../../lib":169,"../../plots/cartesian/axes":213}],47:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16695,7 +16695,7 @@ function handleAnnotationDefaults(annIn, annOut, sceneLayout, opts) { },{"../../lib":169,"../../plots/array_container_defaults":209,"../../plots/cartesian/axes":213,"../annotations/common_defaults":39,"./attributes":45}],48:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16747,7 +16747,7 @@ module.exports = function draw(scene) { },{"../../plots/gl3d/project":242,"../annotations/draw":42}],49:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16795,7 +16795,7 @@ function includeGL3D(layoutIn, layoutOut) { },{"../../lib":169,"../../registry":258,"./attributes":45,"./convert":46,"./defaults":47,"./draw":48}],50:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -16835,7 +16835,7 @@ exports.lightFraction = 100 * (0xe - 0x4) / (0xf - 0x4); },{}],51:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17009,7 +17009,7 @@ function cleanOne(val) { },{"./attributes":50,"fast-isnumeric":18,"tinycolor2":34}],52:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17188,7 +17188,7 @@ module.exports = overrideAll({ },{"../../lib/extend":164,"../../plot_api/edit_types":196,"../../plots/cartesian/layout_attributes":225,"../../plots/font_attributes":239}],53:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17216,7 +17216,7 @@ module.exports = { },{}],54:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -17282,7 +17282,7 @@ module.exports = function colorbarDefaults(containerIn, containerOut, layout) { },{"../../lib":169,"../../plot_api/plot_template":203,"../../plots/cartesian/tick_label_defaults":232,"../../plots/cartesian/tick_mark_defaults":233,"../../plots/cartesian/tick_value_defaults":234,"./attributes":52}],55:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18008,7 +18008,7 @@ module.exports = { },{"../../constants/alignment":145,"../../lib":169,"../../lib/extend":164,"../../lib/setcursor":188,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../plots/cartesian/axis_defaults":215,"../../plots/cartesian/layout_attributes":225,"../../plots/cartesian/position_defaults":228,"../../plots/plots":245,"../../registry":258,"../color":51,"../colorscale/helpers":62,"../dragelement":69,"../drawing":72,"../titles":138,"./constants":53,"d3":16,"tinycolor2":34}],56:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18027,7 +18027,7 @@ module.exports = function hasColorbar(container) { },{"../../lib":169}],57:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18049,7 +18049,7 @@ module.exports = { },{"./attributes":52,"./defaults":54,"./draw":55,"./has_colorbar":56}],58:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18257,7 +18257,7 @@ module.exports = function colorScaleAttrs(context, opts) { },{"../../lib/regex":184,"../colorbar/attributes":52,"./scales.js":66}],59:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18336,7 +18336,7 @@ module.exports = function calc(gd, trace, opts) { },{"../../lib":169,"./helpers":62,"fast-isnumeric":18}],60:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18413,7 +18413,7 @@ module.exports = function crossTraceDefaults(fullData, fullLayout) { },{"../../lib":169,"./helpers":62}],61:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18529,13 +18529,16 @@ module.exports = function colorScaleDefaults(parentContIn, parentContOut, layout if(prefix && inTrace) showScaleDflt = hasColorbar(containerIn); var showScale = coerce(prefix + 'showscale', showScaleDflt); - if(showScale) colorbarDefaults(containerIn, containerOut, layout); + if(showScale) { + if(prefix && template) containerOut._template = template; + colorbarDefaults(containerIn, containerOut, layout); + } } }; },{"../../lib":169,"../../registry":258,"../colorbar/defaults":54,"../colorbar/has_colorbar":56,"./scales":66,"fast-isnumeric":18}],62:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18775,7 +18778,7 @@ module.exports = { },{"../../lib":169,"../color":51,"./scales":66,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],63:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18817,7 +18820,7 @@ module.exports = { },{"./attributes":58,"./calc":59,"./cross_trace_defaults":60,"./defaults":61,"./helpers":62,"./layout_attributes":64,"./layout_defaults":65,"./scales":66}],64:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18878,7 +18881,7 @@ module.exports = { },{"../../lib/extend":164,"./attributes":58,"./scales":66}],65:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -18929,7 +18932,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) { },{"../../lib":169,"../../plot_api/plot_template":203,"./defaults":61,"./layout_attributes":64}],66:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19133,7 +19136,7 @@ module.exports = { },{"tinycolor2":34}],67:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19166,7 +19169,7 @@ module.exports = function align(v, dv, v0, v1, anchor) { },{}],68:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19204,7 +19207,7 @@ module.exports = function getCursor(x, y, xanchor, yanchor) { },{"../../lib":169}],69:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19496,7 +19499,7 @@ function pointerOffset(e) { },{"../../lib":169,"../../plots/cartesian/constants":219,"./align":67,"./cursor":68,"./unhover":70,"has-hover":20,"has-passive-events":21,"mouse-event-offset":24}],70:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19551,7 +19554,7 @@ unhover.raw = function raw(gd, evt) { },{"../../lib/dom":162,"../../lib/events":163,"../../lib/throttle":191,"../fx/constants":84}],71:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19576,7 +19579,7 @@ exports.dash = { },{}],72:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -19794,21 +19797,31 @@ drawing.symbolList = []; Object.keys(SYMBOLDEFS).forEach(function(k) { var symDef = SYMBOLDEFS[k]; - drawing.symbolList = drawing.symbolList.concat( - [symDef.n, k, symDef.n + 100, k + '-open']); - drawing.symbolNames[symDef.n] = k; - drawing.symbolFuncs[symDef.n] = symDef.f; + var n = symDef.n; + drawing.symbolList.push( + n, + k, + n + 100, + k + '-open' + ); + drawing.symbolNames[n] = k; + drawing.symbolFuncs[n] = symDef.f; + if(symDef.needLine) { - drawing.symbolNeedLines[symDef.n] = true; + drawing.symbolNeedLines[n] = true; } if(symDef.noDot) { - drawing.symbolNoDot[symDef.n] = true; + drawing.symbolNoDot[n] = true; } else { - drawing.symbolList = drawing.symbolList.concat( - [symDef.n + 200, k + '-dot', symDef.n + 300, k + '-open-dot']); + drawing.symbolList.push( + n + 200, + k + '-dot', + n + 300, + k + '-open-dot' + ); } if(symDef.noFill) { - drawing.symbolNoFill[symDef.n] = true; + drawing.symbolNoFill[n] = true; } }); @@ -19830,8 +19843,9 @@ drawing.symbolNumber = function(v) { v = drawing.symbolNames.indexOf(v); if(v >= 0) { v += vbase; } } - if((v % 100 >= MAXSYMBOL) || v >= 400) { return 0; } - return Math.floor(Math.max(v, 0)); + + return (v % 100 >= MAXSYMBOL || v >= 400) ? + 0 : Math.floor(Math.max(v, 0)); }; function makePointPath(symbolNumber, r) { @@ -19877,9 +19891,10 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) { } } - var fullID = 'g' + gd._fullLayout._uid + '-' + gradientID; + var fullLayout = gd._fullLayout; + var fullID = 'g' + fullLayout._uid + '-' + gradientID; - var gradient = gd._fullLayout._defs.select('.gradients') + var gradient = fullLayout._defs.select('.gradients') .selectAll('#' + fullID) .data([type + colorStops.join(';')], Lib.identity); @@ -19910,6 +19925,13 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) { sel.style(prop, getFullUrl(fullID, gd)) .style(prop + '-opacity', null); + + var className2query = function(s) { + return '.' + s.attr('class').replace(/\s/g, '.'); + }; + var k = className2query(d3.select(sel.node().parentNode)) + + '>' + className2query(sel); + fullLayout._gradientUrlQueryParts[k] = 1; }; /* @@ -19920,8 +19942,14 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) { * The upside of this is arbitrary points can share gradient defs */ drawing.initGradients = function(gd) { - var gradientsGroup = Lib.ensureSingle(gd._fullLayout._defs, 'g', 'gradients'); + var fullLayout = gd._fullLayout; + + var gradientsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'gradients'); gradientsGroup.selectAll('linearGradient,radialGradient').remove(); + + // initialize stash of query parts filled in Drawing.gradient, + // used to fix URL strings during image exports + fullLayout._gradientUrlQueryParts = {}; }; @@ -20737,9 +20765,9 @@ drawing.setTextPointsScale = function(selection, xScale, yScale) { }); }; -},{"../../components/fx/helpers":86,"../../constants/alignment":145,"../../constants/interactions":148,"../../constants/xmlns_namespaces":150,"../../lib":169,"../../lib/svg_text_utils":190,"../../registry":258,"../../traces/scatter/make_bubble_size_func":394,"../../traces/scatter/subtypes":401,"../color":51,"../colorscale":63,"./symbol_defs":73,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],73:[function(_dereq_,module,exports){ +},{"../../components/fx/helpers":86,"../../constants/alignment":145,"../../constants/interactions":148,"../../constants/xmlns_namespaces":150,"../../lib":169,"../../lib/svg_text_utils":190,"../../registry":258,"../../traces/scatter/make_bubble_size_func":395,"../../traces/scatter/subtypes":402,"../color":51,"../colorscale":63,"./symbol_defs":73,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],73:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21227,7 +21255,7 @@ module.exports = { },{"d3":16}],74:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21342,7 +21370,7 @@ module.exports = { },{}],75:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21428,7 +21456,7 @@ function calcOneAxis(calcTrace, trace, axis, coord) { },{"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"./compute_error":76,"fast-isnumeric":18}],76:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21529,7 +21557,7 @@ function makeComputeErrorValue(type, value) { },{}],77:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21604,7 +21632,7 @@ module.exports = function(traceIn, traceOut, defaultColor, opts) { },{"../../lib":169,"../../plot_api/plot_template":203,"../../registry":258,"./attributes":74,"fast-isnumeric":18}],78:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21673,7 +21701,7 @@ function hoverInfo(calcPoint, trace, hoverPoint) { },{"../../lib":169,"../../plot_api/edit_types":196,"./attributes":74,"./calc":75,"./compute_error":76,"./defaults":77,"./plot":79,"./style":80}],79:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21843,9 +21871,9 @@ function errorCoords(d, xa, ya) { return out; } -},{"../../traces/scatter/subtypes":401,"../drawing":72,"d3":16,"fast-isnumeric":18}],80:[function(_dereq_,module,exports){ +},{"../../traces/scatter/subtypes":402,"../drawing":72,"d3":16,"fast-isnumeric":18}],80:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21882,7 +21910,7 @@ module.exports = function style(traces) { },{"../color":51,"d3":16}],81:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21918,7 +21946,7 @@ module.exports = { },{"../../lib/extend":164,"../../plots/font_attributes":239,"./layout_attributes":90}],82:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -21977,7 +22005,7 @@ function paste(traceAttr, cd, cdAttr, fn) { },{"../../lib":169,"../../registry":258}],83:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22014,7 +22042,7 @@ module.exports = function click(gd, evt, subplot) { },{"../../registry":258,"./hover":87}],84:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22046,7 +22074,7 @@ module.exports = { },{}],85:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22072,7 +22100,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout },{"../../lib":169,"./attributes":81,"./hoverlabel_defaults":88}],86:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -22314,7 +22342,7 @@ function getPointData(val, pointNumber) { },{"../../lib":169}],87:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24000,7 +24028,7 @@ function plainText(s, len) { },{"../../lib":169,"../../lib/events":163,"../../lib/override_cursor":180,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../registry":258,"../color":51,"../dragelement":69,"../drawing":72,"./constants":84,"./helpers":86,"d3":16,"fast-isnumeric":18,"tinycolor2":34}],88:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24023,7 +24051,7 @@ module.exports = function handleHoverLabelDefaults(contIn, contOut, coerce, opts },{"../../lib":169}],89:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24102,7 +24130,7 @@ function castHoverinfo(trace, fullLayout, ptNumber) { },{"../../lib":169,"../dragelement":69,"./attributes":81,"./calc":82,"./click":83,"./constants":84,"./defaults":85,"./helpers":86,"./hover":87,"./layout_attributes":90,"./layout_defaults":91,"./layout_global_defaults":92,"d3":16}],90:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24205,7 +24233,7 @@ module.exports = { },{"../../plots/font_attributes":239,"./constants":84}],91:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24279,7 +24307,7 @@ function isHoriz(fullData, fullLayout) { },{"../../lib":169,"./layout_attributes":90}],92:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24302,7 +24330,7 @@ module.exports = function supplyLayoutGlobalDefaults(layoutIn, layoutOut) { },{"../../lib":169,"./hoverlabel_defaults":88,"./layout_attributes":90}],93:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24676,7 +24704,7 @@ module.exports = { },{"../../lib":169,"../../lib/regex":184,"../../plot_api/plot_template":203,"../../plots/cartesian/constants":219,"../../plots/domain":238}],94:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24811,7 +24839,7 @@ module.exports = templatedArray('image', { },{"../../plot_api/plot_template":203,"../../plots/cartesian/constants":219}],95:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24892,7 +24920,7 @@ module.exports = function convertCoords(gd, ax, newType, doExtra) { },{"../../lib/to_log_range":192,"fast-isnumeric":18}],96:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -24957,7 +24985,7 @@ function imageDefaults(imageIn, imageOut, fullLayout) { },{"../../lib":169,"../../plots/array_container_defaults":209,"../../plots/cartesian/axes":213,"./attributes":94}],97:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25182,7 +25210,7 @@ module.exports = function draw(gd) { },{"../../constants/xmlns_namespaces":150,"../../plots/cartesian/axes":213,"../drawing":72,"d3":16}],98:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25206,7 +25234,7 @@ module.exports = { },{"../../plots/cartesian/include_components":223,"./attributes":94,"./convert_coords":95,"./defaults":96,"./draw":97}],99:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25340,12 +25368,34 @@ module.exports = { editType: 'legend', }, + title: { + text: { + valType: 'string', + dflt: '', + + editType: 'legend', + + }, + font: fontAttrs({ + editType: 'legend', + + }), + side: { + valType: 'enumerated', + values: ['top', 'left', 'top left'], + + editType: 'legend', + + }, + editType: 'legend', + }, + editType: 'legend' }; },{"../../plots/font_attributes":239,"../color/attributes":50}],100:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25361,6 +25411,8 @@ module.exports = { scrollBarMargin: 4, scrollBarEnterAttrs: {rx: 20, ry: 3, width: 0, height: 0}, + // number of px between legend title and (left) side of legend (always in x direction and from inner border) + titlePad: 2, // number of px between legend symbol and legend text (always in x direction) textGap: 40, // number of px between each legend item (x and/or y direction) @@ -25369,7 +25421,7 @@ module.exports = { },{}],101:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25403,7 +25455,14 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { // *would* be shown by default, toward the two traces you need to // ensure the legend is shown by default, because this can still help // disambiguate. - if(trace.showlegend || trace._dfltShowLegend) { + if(trace.showlegend || ( + trace._dfltShowLegend && !( + trace._module && + trace._module.attributes && + trace._module.attributes.showlegend && + trace._module.attributes.showlegend.dflt === false + ) + )) { legendTraceCount++; if(trace.showlegend) { legendReallyHasATrace = true; @@ -25486,11 +25545,17 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) { coerce('yanchor', defaultYAnchor); coerce('valign'); Lib.noneOrAll(containerIn, containerOut, ['x', 'y']); + + var titleText = coerce('title.text'); + if(titleText) { + coerce('title.side', orientation === 'h' ? 'left' : 'top'); + Lib.coerceFont(coerce, 'title.font', layoutOut.font); + } }; },{"../../lib":169,"../../plot_api/plot_template":203,"../../plots/layout_attributes":243,"../../registry":258,"./attributes":99,"./helpers":105}],102:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -25556,6 +25621,19 @@ module.exports = function draw(gd) { var scrollBox = Lib.ensureSingle(legend, 'g', 'scrollbox'); + var title = opts.title; + opts._titleWidth = 0; + opts._titleHeight = 0; + if(title.text) { + var titleEl = Lib.ensureSingle(scrollBox, 'text', 'legendtitletext'); + titleEl.attr('text-anchor', 'start') + .classed('user-select-none', true) + .call(Drawing.font, title.font) + .text(title.text); + + textLayout(titleEl, scrollBox, gd); // handle mathjax or multi-line text and compute title height + } + var scrollBar = Lib.ensureSingle(legend, 'rect', 'scrollbar', function(s) { s.attr(constants.scrollBarEnterAttrs) .call(Color.fill, constants.scrollBarColor); @@ -25612,7 +25690,7 @@ module.exports = function draw(gd) { } // Set size and position of all the elements that make up a legend: - // legend, background and border, scroll box and scroll bar + // legend, background and border, scroll box and scroll bar as well as title Drawing.setTranslate(legend, lx, ly); // to be safe, remove previous listeners @@ -25861,23 +25939,17 @@ function drawTexts(g, gd) { textEl.attr('text-anchor', 'start') .classed('user-select-none', true) - .call(Drawing.font, fullLayout.legend.font) + .call(Drawing.font, opts.font) .text(isEditable ? ensureLength(name, maxNameLength) : name); svgTextUtils.positionText(textEl, constants.textGap, 0); - function textLayout(s) { - svgTextUtils.convertToTspans(s, gd, function() { - computeTextDimensions(g, gd); - }); - } - if(isEditable) { textEl.call(svgTextUtils.makeEditable, {gd: gd, text: name}) - .call(textLayout) + .call(textLayout, g, gd) .on('edit', function(newName) { this.text(ensureLength(newName, maxNameLength)) - .call(textLayout); + .call(textLayout, g, gd); var fullInput = legendItem.trace._fullInput || {}; var update = {}; @@ -25898,7 +25970,7 @@ function drawTexts(g, gd) { return Registry.call('_guiRestyle', gd, update, traceIndex); }); } else { - textLayout(textEl); + textLayout(textEl, g, gd); } } @@ -25951,18 +26023,24 @@ function setupTraceToggle(g, gd) { }); } +function textLayout(s, g, gd) { + svgTextUtils.convertToTspans(s, gd, function() { + computeTextDimensions(g, gd); + }); +} + function computeTextDimensions(g, gd) { var legendItem = g.data()[0][0]; - - if(!legendItem.trace.showlegend) { + if(legendItem && !legendItem.trace.showlegend) { g.remove(); return; } var mathjaxGroup = g.select('g[class*=math-group]'); var mathjaxNode = mathjaxGroup.node(); + var bw = gd._fullLayout.legend.borderwidth; var opts = gd._fullLayout.legend; - var lineHeight = opts.font.size * LINE_SPACING; + var lineHeight = (legendItem ? opts : opts.title).font.size * LINE_SPACING; var height, width; if(mathjaxNode) { @@ -25971,24 +26049,56 @@ function computeTextDimensions(g, gd) { height = mathjaxBB.height; width = mathjaxBB.width; - Drawing.setTranslate(mathjaxGroup, 0, (height / 4)); + if(legendItem) { + Drawing.setTranslate(mathjaxGroup, 0, height * 0.25); + } else { // case of title + Drawing.setTranslate(mathjaxGroup, bw, height * 0.75 + bw); + } } else { - var text = g.select('.legendtext'); - var textLines = svgTextUtils.lineCount(text); - var textNode = text.node(); + var textEl = g.select(legendItem ? + '.legendtext' : '.legendtitletext' + ); + var textLines = svgTextUtils.lineCount(textEl); + var textNode = textEl.node(); height = lineHeight * textLines; width = textNode ? Drawing.bBox(textNode).width : 0; // approximation to height offset to center the font // to avoid getBoundingClientRect - var textY = lineHeight * (0.3 + (1 - textLines) / 2); - svgTextUtils.positionText(text, constants.textGap, textY); + var textY = lineHeight * ((textLines - 1) / 2 - 0.3); + if(legendItem) { + svgTextUtils.positionText(textEl, constants.textGap, -textY); + } else { // case of title + svgTextUtils.positionText(textEl, constants.titlePad + bw, lineHeight + bw); + } } - legendItem.lineHeight = lineHeight; - legendItem.height = Math.max(height, 16) + 3; - legendItem.width = width; + if(legendItem) { + legendItem.lineHeight = lineHeight; + legendItem.height = Math.max(height, 16) + 3; + legendItem.width = width; + } else { // case of title + opts._titleWidth = width; + opts._titleHeight = height; + } +} + +function getTitleSize(opts) { + var w = 0; + var h = 0; + + var side = opts.title.side; + if(side) { + if(side.indexOf('left') !== -1) { + w = opts._titleWidth; + } + if(side.indexOf('top') !== -1) { + h = opts._titleHeight; + } + } + + return [w, h]; } /* @@ -26005,6 +26115,7 @@ function computeLegendDimensions(gd, groups, traces) { var fullLayout = gd._fullLayout; var opts = fullLayout.legend; var gs = fullLayout._size; + var isVertical = helpers.isVertical(opts); var isGrouped = helpers.isGrouped(opts); @@ -26028,11 +26139,15 @@ function computeLegendDimensions(gd, groups, traces) { var toggleRectWidth = 0; opts._width = 0; opts._height = 0; + var titleSize = getTitleSize(opts); if(isVertical) { traces.each(function(d) { var h = d[0].height; - Drawing.setTranslate(this, bw, itemGap + bw + opts._height + h / 2); + Drawing.setTranslate(this, + bw + titleSize[0], + bw + titleSize[1] + opts._height + h / 2 + itemGap + ); opts._height += h; opts._width = Math.max(opts._width, d[0].width); }); @@ -26082,7 +26197,10 @@ function computeLegendDimensions(gd, groups, traces) { var offsetY = 0; d3.select(this).selectAll('g.traces').each(function(d) { var h = d[0].height; - Drawing.setTranslate(this, 0, itemGap + bw + h / 2 + offsetY); + Drawing.setTranslate(this, + titleSize[0], + titleSize[1] + bw + itemGap + h / 2 + offsetY + ); offsetY += h; maxWidthInGroup = Math.max(maxWidthInGroup, textGap + d[0].width); }); @@ -26125,7 +26243,10 @@ function computeLegendDimensions(gd, groups, traces) { maxItemHeightInRow = 0; } - Drawing.setTranslate(this, bw + offsetX, itemGap + bw + h / 2 + offsetY); + Drawing.setTranslate(this, + titleSize[0] + bw + offsetX, + titleSize[1] + bw + offsetY + h / 2 + itemGap + ); rowWidth = offsetX + w + itemGap; offsetX += next; @@ -26142,8 +26263,19 @@ function computeLegendDimensions(gd, groups, traces) { } } - opts._width = Math.ceil(opts._width); - opts._height = Math.ceil(opts._height); + opts._width = Math.ceil( + Math.max( + opts._width + titleSize[0], + opts._titleWidth + 2 * (bw + constants.titlePad) + ) + ); + + opts._height = Math.ceil( + Math.max( + opts._height + titleSize[1], + opts._titleHeight + 2 * (bw + constants.itemGap) + ) + ); opts._effHeight = Math.min(opts._height, opts._maxHeight); @@ -26188,7 +26320,7 @@ function getYanchor(opts) { },{"../../constants/alignment":145,"../../lib":169,"../../lib/events":163,"../../lib/svg_text_utils":190,"../../plots/plots":245,"../../registry":258,"../color":51,"../dragelement":69,"../drawing":72,"./constants":100,"./get_legend_data":103,"./handle_click":104,"./helpers":105,"./style":107,"d3":16}],103:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26296,7 +26428,7 @@ module.exports = function getLegendData(calcdata, opts) { },{"../../registry":258,"./helpers":105}],104:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26462,11 +26594,12 @@ module.exports = function handleClick(g, gd, numClicks) { } else if(mode === 'toggleothers') { // Compute the clicked index. expandedIndex does what we want for expanded traces // but also culls hidden traces. That means we have some work to do. - var isClicked, isInGroup, otherState; + var isClicked, isInGroup, notInLegend, otherState; var isIsolated = true; for(i = 0; i < fullData.length; i++) { isClicked = fullData[i] === fullTrace; - if(isClicked) continue; + notInLegend = fullData[i].showlegend !== true; + if(isClicked || notInLegend) continue; isInGroup = (hasLegendgroup && fullData[i].legendgroup === legendgroup); @@ -26491,8 +26624,10 @@ module.exports = function handleClick(g, gd, numClicks) { case true: otherState = isIsolated ? true : 'legendonly'; isClicked = fullData[i] === fullTrace; + // N.B. consider traces that have a set legendgroup as toggleable + notInLegend = (fullData[i].showlegend !== true && !fullData[i].legendgroup); isInGroup = isClicked || (hasLegendgroup && fullData[i].legendgroup === legendgroup); - setVisibility(fullData[i], isInGroup ? true : otherState); + setVisibility(fullData[i], (isInGroup || notInLegend) ? true : otherState); break; } } @@ -26532,7 +26667,7 @@ module.exports = function handleClick(g, gd, numClicks) { },{"../../lib":169,"../../registry":258}],105:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26556,7 +26691,7 @@ exports.isReversed = function isReversed(legendLayout) { },{}],106:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26580,7 +26715,7 @@ module.exports = { },{"./attributes":99,"./defaults":101,"./draw":102,"./style":107}],107:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -26665,6 +26800,7 @@ module.exports = function style(s, gd) { .enter().append('g') .classed('legendpoints', true); }) + .each(styleSpatial) .each(styleWaterfalls) .each(styleFunnels) .each(styleBars) @@ -27062,15 +27198,139 @@ module.exports = function style(s, gd) { stylePie(pts, d0Mod, tMod); } } + + function styleSpatial(d) { // i.e. maninly traces having z and colorscale + var trace = d[0].trace; + + var useGradient; + var ptsData = []; + if(trace.visible) { + switch(trace.type) { + case 'histogram2d' : + case 'heatmap' : + ptsData = [ + ['M-15,-2V4H15V-2Z'] // similar to contour + ]; + useGradient = true; + break; + case 'choropleth' : + case 'choroplethmapbox' : + ptsData = [ + ['M-6,-6V6H6V-6Z'] + ]; + useGradient = true; + break; + case 'densitymapbox' : + ptsData = [ + ['M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0'] + ]; + useGradient = 'radial'; + break; + case 'cone' : + ptsData = [ + ['M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z'], + ['M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z'], + ['M-6,-2 A2,2 0 0,0 -6,2 L6,0Z'] + ]; + useGradient = false; + break; + case 'streamtube' : + ptsData = [ + ['M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z'], + ['M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z'], + ['M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z'] + ]; + useGradient = false; + break; + case 'surface' : + ptsData = [ + ['M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z'], + ['M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z'] + ]; + useGradient = true; + break; + case 'mesh3d' : + ptsData = [ + ['M-6,6H0L-6,-6Z'], + ['M6,6H0L6,-6Z'], + ['M-6,-6H6L0,6Z'] + ]; + useGradient = false; + break; + case 'volume' : + ptsData = [ + ['M-6,6H0L-6,-6Z'], + ['M6,6H0L6,-6Z'], + ['M-6,-6H6L0,6Z'] + ]; + useGradient = true; + break; + case 'isosurface': + ptsData = [ + ['M-6,6H0L-6,-6Z'], + ['M6,6H0L6,-6Z'], + ['M-6,-6 A12,24 0 0,0 6,-6 L0,6Z'] + ]; + useGradient = false; + break; + } + } + + var pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legend3dandfriends') + .data(ptsData); + pts.enter().append('path').classed('legend3dandfriends', true) + .attr('transform', 'translate(20,0)') + .style('stroke-miterlimit', 1); + pts.exit().remove(); + + pts.each(function(dd, i) { + var pt = d3.select(this); + + var cOpts = extractOpts(trace); + var colorscale = cOpts.colorscale; + var reversescale = cOpts.reversescale; + var fillGradient = function(s) { + if(s.size()) { + var gradientID = 'legendfill-' + trace.uid; + Drawing.gradient(s, gd, gradientID, + getGradientDirection(reversescale, useGradient === 'radial'), + colorscale, 'fill'); + } + }; + + var fillColor; + if(!colorscale) { + var color = trace.vertexcolor || trace.facecolor || trace.color; + fillColor = Lib.isArrayOrTypedArray(color) ? (color[i] || color[0]) : color; + } else { + if(!useGradient) { + var len = colorscale.length; + fillColor = + i === 0 ? colorscale[reversescale ? len - 1 : 0][1] : // minimum + i === 1 ? colorscale[reversescale ? 0 : len - 1][1] : // maximum + colorscale[Math.floor((len - 1) / 2)][1]; // middle + } + } + + pt.attr('d', dd[0]); + if(fillColor) { + pt.call(Color.fill, fillColor); + } else { + pt.call(fillGradient); + } + }); + } }; -function getGradientDirection(reversescale) { - return reversescale ? 'horizontal' : 'horizontalreversed'; +function getGradientDirection(reversescale, isRadial) { + var str = isRadial ? 'radial' : 'horizontal'; + return str + (reversescale ? '' : 'reversed'); } -},{"../../lib":169,"../../registry":258,"../../traces/pie/helpers":369,"../../traces/pie/style_one":375,"../../traces/scatter/subtypes":401,"../color":51,"../colorscale/helpers":62,"../drawing":72,"d3":16}],108:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258,"../../traces/pie/helpers":370,"../../traces/pie/style_one":376,"../../traces/scatter/subtypes":402,"../color":51,"../colorscale/helpers":62,"../drawing":72,"d3":16}],108:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27374,7 +27634,7 @@ function handleDrag3d(gd, ev) { var button = ev.currentTarget; var attr = button.getAttribute('data-attr'); var val = button.getAttribute('data-val') || true; - var sceneIds = gd._fullLayout._subplots.gl3d; + var sceneIds = gd._fullLayout._subplots.gl3d || []; var layoutUpdate = {}; var parts = attr.split('.'); @@ -27539,7 +27799,7 @@ function handleGeo(gd, ev) { var attr = button.getAttribute('data-attr'); var val = button.getAttribute('data-val') || true; var fullLayout = gd._fullLayout; - var geoIds = fullLayout._subplots.geo; + var geoIds = fullLayout._subplots.geo || []; for(var i = 0; i < geoIds.length; i++) { var id = geoIds[i]; @@ -27550,10 +27810,12 @@ function handleGeo(gd, ev) { var newScale = (val === 'in') ? 2 * scale : 0.5 * scale; Registry.call('_guiRelayout', gd, id + '.projection.scale', newScale); - } else if(attr === 'reset') { - resetView(gd, 'geo'); } } + + if(attr === 'reset') { + resetView(gd, 'geo'); + } } modeBarButtons.hoverClosestGl2d = { @@ -27689,6 +27951,42 @@ modeBarButtons.resetViewMapbox = { } }; +modeBarButtons.zoomInMapbox = { + name: 'zoomInMapbox', + title: function(gd) { return _(gd, 'Zoom in'); }, + attr: 'zoom', + val: 'in', + icon: Icons.zoom_plus, + click: handleMapboxZoom +}; + +modeBarButtons.zoomOutMapbox = { + name: 'zoomOutMapbox', + title: function(gd) { return _(gd, 'Zoom out'); }, + attr: 'zoom', + val: 'out', + icon: Icons.zoom_minus, + click: handleMapboxZoom +}; + +function handleMapboxZoom(gd, ev) { + var button = ev.currentTarget; + var val = button.getAttribute('data-val'); + var fullLayout = gd._fullLayout; + var subplotIds = fullLayout._subplots.mapbox || []; + var scalar = 1.05; + var aObj = {}; + + for(var i = 0; i < subplotIds.length; i++) { + var id = subplotIds[i]; + var current = fullLayout[id].zoom; + var next = (val === 'in') ? scalar * current : current / scalar; + aObj[id + '.zoom'] = next; + } + + Registry.call('_guiRelayout', gd, aObj); +} + function resetView(gd, subplotType) { var fullLayout = gd._fullLayout; var subplotIds = fullLayout._subplots[subplotType] || []; @@ -27711,7 +28009,7 @@ function resetView(gd, subplotType) { },{"../../fonts/ploticon":153,"../../lib":169,"../../plots/cartesian/axis_ids":216,"../../plots/plots":245,"../../registry":258}],109:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27725,7 +28023,7 @@ exports.manage = _dereq_('./manage'); },{"./manage":110}],110:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -27852,6 +28150,7 @@ function getButtonGroups(gd) { hoverGroup = ['hoverClosest3d']; resetGroup = ['resetCameraDefault3d', 'resetCameraLastSave3d']; } else if(hasMapbox) { + zoomGroup = ['zoomInMapbox', 'zoomOutMapbox']; hoverGroup = ['toggleHover']; resetGroup = ['resetViewMapbox']; } else if(hasGL2D) { @@ -27988,9 +28287,9 @@ function fillCustomButton(customButtons) { return customButtons; } -},{"../../plots/cartesian/axis_ids":216,"../../registry":258,"../../traces/scatter/subtypes":401,"./buttons":108,"./modebar":111}],111:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axis_ids":216,"../../registry":258,"../../traces/scatter/subtypes":402,"./buttons":108,"./modebar":111}],111:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28336,7 +28635,7 @@ module.exports = createModeBar; },{"../../fonts/ploticon":153,"../../lib":169,"d3":16,"fast-isnumeric":18}],112:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28472,7 +28771,7 @@ module.exports = { },{"../../plot_api/plot_template":203,"../../plots/font_attributes":239,"../color/attributes":50}],113:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28501,7 +28800,7 @@ module.exports = { },{}],114:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28593,7 +28892,7 @@ function getPosDflt(containerOut, layout, counterAxes) { },{"../../lib":169,"../../plot_api/plot_template":203,"../../plots/array_container_defaults":209,"../color":51,"./attributes":112,"./constants":113}],115:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28850,7 +29149,7 @@ function reposition(gd, buttons, opts, axName, selector) { },{"../../constants/alignment":145,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/cartesian/axis_ids":216,"../../plots/plots":245,"../../registry":258,"../color":51,"../drawing":72,"./constants":113,"./get_update_object":116,"d3":16}],116:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28904,7 +29203,7 @@ function getXRange(axisLayout, buttonLayout) { },{"d3":16}],117:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -28931,7 +29230,7 @@ module.exports = { },{"./attributes":112,"./defaults":114,"./draw":115}],118:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29005,7 +29304,7 @@ module.exports = { },{"../color/attributes":50}],119:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29039,7 +29338,7 @@ module.exports = function calcAutorange(gd) { },{"../../plots/cartesian/autorange":212,"../../plots/cartesian/axis_ids":216,"./constants":120}],120:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29095,7 +29394,7 @@ module.exports = { },{}],121:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29181,7 +29480,7 @@ module.exports = function handleDefaults(layoutIn, layoutOut, axName) { },{"../../lib":169,"../../plot_api/plot_template":203,"../../plots/cartesian/axis_ids":216,"./attributes":118,"./oppaxis_attributes":125}],122:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29757,7 +30056,7 @@ function drawGrabbers(rangeSlider, gd, axisOpts, opts) { },{"../../lib":169,"../../lib/setcursor":188,"../../plots/cartesian":224,"../../plots/cartesian/axis_ids":216,"../../plots/plots":245,"../../registry":258,"../color":51,"../dragelement":69,"../drawing":72,"../titles":138,"./constants":120,"d3":16}],123:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29832,7 +30131,7 @@ exports.autoMarginOpts = function(gd, ax) { },{"../../constants/alignment":145,"../../lib/svg_text_utils":190,"../../plots/cartesian/axis_ids":216,"./constants":120}],124:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29871,7 +30170,7 @@ module.exports = { },{"../../lib":169,"./attributes":118,"./calc_autorange":119,"./defaults":121,"./draw":122,"./helpers":123,"./oppaxis_attributes":125}],125:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -29909,7 +30208,7 @@ module.exports = { },{}],126:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30043,9 +30342,9 @@ module.exports = templatedArray('shape', { editType: 'arraydraw' }); -},{"../../lib/extend":164,"../../plot_api/plot_template":203,"../../traces/scatter/attributes":377,"../annotations/attributes":36,"../drawing/attributes":71}],127:[function(_dereq_,module,exports){ +},{"../../lib/extend":164,"../../plot_api/plot_template":203,"../../traces/scatter/attributes":378,"../annotations/attributes":36,"../drawing/attributes":71}],127:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30162,7 +30461,7 @@ function shapeBounds(ax, v0, v1, path, paramsToUse) { },{"../../lib":169,"../../plots/cartesian/axes":213,"./constants":128,"./helpers":131}],128:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30226,7 +30525,7 @@ module.exports = { },{}],129:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30349,7 +30648,7 @@ function handleShapeDefaults(shapeIn, shapeOut, fullLayout) { },{"../../lib":169,"../../plots/array_container_defaults":209,"../../plots/cartesian/axes":213,"./attributes":126,"./helpers":131}],130:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -30966,7 +31265,7 @@ function movePath(pathIn, moveX, moveY) { },{"../../lib":169,"../../lib/setcursor":188,"../../plot_api/plot_template":203,"../../plots/cartesian/axes":213,"../../registry":258,"../color":51,"../dragelement":69,"../drawing":72,"./constants":128,"./helpers":131}],131:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31087,7 +31386,7 @@ exports.roundPositionForSharpStrokeRendering = function(pos, strokeWidth) { },{"../../lib":169,"./constants":128}],132:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31114,7 +31413,7 @@ module.exports = { },{"../../plots/cartesian/include_components":223,"./attributes":126,"./calc_autorange":127,"./defaults":129,"./draw":130}],133:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31357,7 +31656,7 @@ module.exports = overrideAll(templatedArray('slider', { },{"../../lib/extend":164,"../../plot_api/edit_types":196,"../../plot_api/plot_template":203,"../../plots/animation_attributes":208,"../../plots/font_attributes":239,"../../plots/pad_attributes":244,"./constants":134}],134:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31451,7 +31750,7 @@ module.exports = { },{}],135:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -31566,7 +31865,7 @@ function stepDefaults(valueIn, valueOut) { },{"../../lib":169,"../../plots/array_container_defaults":209,"./attributes":133,"./constants":134}],136:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32198,7 +32497,7 @@ function drawRail(sliderGroup, sliderOpts) { },{"../../constants/alignment":145,"../../lib":169,"../../lib/svg_text_utils":190,"../../plot_api/plot_template":203,"../../plots/plots":245,"../color":51,"../drawing":72,"./constants":134,"d3":16}],137:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32221,7 +32520,7 @@ module.exports = { },{"./attributes":133,"./constants":134,"./defaults":135,"./draw":136}],138:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32488,7 +32787,7 @@ module.exports = { },{"../../constants/alignment":145,"../../constants/interactions":148,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/plots":245,"../../registry":258,"../color":51,"../drawing":72,"d3":16,"fast-isnumeric":18}],139:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32657,7 +32956,7 @@ module.exports = overrideAll(templatedArray('updatemenu', { },{"../../lib/extend":164,"../../plot_api/edit_types":196,"../../plot_api/plot_template":203,"../../plots/font_attributes":239,"../../plots/pad_attributes":244,"../color/attributes":50}],140:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32738,7 +33037,7 @@ module.exports = { },{}],141:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -32821,7 +33120,7 @@ function buttonDefaults(buttonIn, buttonOut) { },{"../../lib":169,"../../plots/array_container_defaults":209,"./attributes":139,"./constants":140}],142:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33476,7 +33775,7 @@ function removeAllButtons(gButton, newMenuIndexAttr) { arguments[4][137][0].apply(exports,arguments) },{"./attributes":139,"./constants":140,"./defaults":141,"./draw":142,"dup":137}],144:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -33941,7 +34240,7 @@ ScrollBox.prototype.setTranslate = function setTranslate(translateX, translateY) },{"../../lib":169,"../color":51,"../drawing":72,"d3":16}],145:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34006,7 +34305,7 @@ module.exports = { },{}],146:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34022,7 +34321,7 @@ module.exports = { },{}],147:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34060,7 +34359,7 @@ module.exports = { },{}],148:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34083,7 +34382,7 @@ module.exports = { },{}],149:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34148,7 +34447,7 @@ module.exports = { },{}],150:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34172,7 +34471,7 @@ exports.svgAttrs = { },{}],151:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34182,7 +34481,7 @@ exports.svgAttrs = { 'use strict'; // package version injected by `npm run preprocess` -exports.version = '1.51.3'; +exports.version = '1.52.1'; // inject promise polyfill _dereq_('es6-promise').polyfill(); @@ -34238,6 +34537,12 @@ register([ _dereq_('./locale-en-us') ]); +// locales that are present in the window should be loaded +if(window.PlotlyLocales && Array.isArray(window.PlotlyLocales)) { + register(window.PlotlyLocales); + delete window.PlotlyLocales; +} + // plot icons exports.Icons = _dereq_('./fonts/ploticon'); @@ -34251,9 +34556,9 @@ exports.Queue = _dereq_('./lib/queue'); // export d3 used in the bundle exports.d3 = _dereq_('d3'); -},{"../build/plotcss":1,"./components/annotations":44,"./components/annotations3d":49,"./components/colorbar":57,"./components/colorscale":63,"./components/errorbars":78,"./components/fx":89,"./components/grid":93,"./components/images":98,"./components/legend":106,"./components/rangeselector":117,"./components/rangeslider":124,"./components/shapes":132,"./components/sliders":137,"./components/updatemenus":143,"./fonts/mathjax_config":152,"./fonts/ploticon":153,"./lib/queue":183,"./locale-en":194,"./locale-en-us":193,"./plot_api":198,"./plot_api/plot_schema":202,"./plots/plots":245,"./registry":258,"./snapshot":263,"./traces/scatter":389,"d3":16,"es6-promise":17}],152:[function(_dereq_,module,exports){ +},{"../build/plotcss":1,"./components/annotations":44,"./components/annotations3d":49,"./components/colorbar":57,"./components/colorscale":63,"./components/errorbars":78,"./components/fx":89,"./components/grid":93,"./components/images":98,"./components/legend":106,"./components/rangeselector":117,"./components/rangeslider":124,"./components/shapes":132,"./components/sliders":137,"./components/updatemenus":143,"./fonts/mathjax_config":152,"./fonts/ploticon":153,"./lib/queue":183,"./locale-en":194,"./locale-en-us":193,"./plot_api":198,"./plot_api/plot_schema":202,"./plots/plots":245,"./registry":258,"./snapshot":263,"./traces/scatter":390,"d3":16,"es6-promise":17}],152:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34284,7 +34589,7 @@ module.exports = function() { },{}],153:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34428,7 +34733,7 @@ module.exports = { },{}],154:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34492,7 +34797,7 @@ exports.isBottomAnchor = function isBottomAnchor(opts) { },{}],155:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34733,7 +35038,7 @@ module.exports = { },{"./mod":176}],156:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34890,7 +35195,7 @@ function _rowLength(z, fn, len0) { },{}],157:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34923,7 +35228,7 @@ module.exports = function cleanNumber(v) { },{"../constants/numerical":149,"fast-isnumeric":18}],158:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34951,7 +35256,7 @@ module.exports = function clearGlCanvases(gd) { },{}],159:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -34974,7 +35279,7 @@ module.exports = function clearResponsive(gd) { },{}],160:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -35438,7 +35743,7 @@ exports.validate = validate; },{"../components/colorscale/scales":66,"../constants/interactions":148,"../plots/attributes":210,"./array":156,"./mod":176,"./nested_property":177,"./regex":184,"fast-isnumeric":18,"tinycolor2":34}],161:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36024,7 +36329,7 @@ exports.findExactDates = function(data, calendar) { },{"../constants/numerical":149,"../registry":258,"./loggers":173,"./mod":176,"d3":16,"fast-isnumeric":18}],162:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36127,7 +36432,7 @@ module.exports = { },{"./loggers":173,"d3":16}],163:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36300,7 +36605,7 @@ module.exports = Events; },{"events":15}],164:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36414,7 +36719,7 @@ function _extend(inputs, isDeep, keepAllKeys, noArrayCopies) { },{"./is_plain_object.js":170}],165:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36465,7 +36770,7 @@ module.exports = function filterUnique(array) { },{}],166:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36513,7 +36818,7 @@ function isCalcData(cont) { },{}],167:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36757,7 +37062,7 @@ exports.findPointOnPath = function findPointOnPath(path, val, coord, opts) { },{"./mod":176}],168:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -36773,7 +37078,7 @@ module.exports = function identity(d) { return d; }; },{}],169:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -37358,7 +37663,9 @@ lib.tagSelected = function(calcTrace, trace, ptNumber2cdIndex) { for(var i = 0; i < selectedpoints.length; i++) { var ptIndex = selectedpoints[i]; - if(lib.isIndex(ptIndex)) { + if(lib.isIndex(ptIndex) || + (lib.isArrayOrTypedArray(ptIndex) && lib.isIndex(ptIndex[0]) && lib.isIndex(ptIndex[1])) + ) { var ptNumber = ptIndex2ptNumber ? ptIndex2ptNumber[ptIndex] : ptIndex; var cdIndex = ptNumber2cdIndex ? ptNumber2cdIndex[ptNumber] : ptNumber; @@ -37956,38 +38263,59 @@ lib.isHidden = function(gd) { return !display || display === 'none'; }; -lib.getTextTransform = function(opts) { - var textX = opts.textX; - var textY = opts.textY; - var targetX = opts.targetX; - var targetY = opts.targetY; - var scale = opts.scale; - var rotate = opts.rotate; +/** Return transform text for bar bar-like rectangles and pie-like slices + * @param {object} transform + * - targetX: desired position on the x-axis + * - targetY: desired position on the y-axis + * - textX: text middle position on the x-axis + * - textY: text middle position on the y-axis + * - anchorX: (optional) text anchor position on the x-axis (computed from textX), zero for middle anchor + * - anchorY: (optional) text anchor position on the y-axis (computed from textY), zero for middle anchor + * - scale: (optional) scale applied after translate + * - rotate: (optional) rotation applied after scale + * - noCenter: when defined no extra arguments needed in rotation + */ +lib.getTextTransform = function(transform) { + var noCenter = transform.noCenter; + var textX = transform.textX; + var textY = transform.textY; + var targetX = transform.targetX; + var targetY = transform.targetY; + var anchorX = transform.anchorX || 0; + var anchorY = transform.anchorY || 0; + var rotate = transform.rotate; + var scale = transform.scale; + if(!scale) scale = 0; + else if(scale > 1) scale = 1; - var transformScale; - var transformRotate; - var transformTranslate; + return ( + 'translate(' + + (targetX - scale * (textX + anchorX)) + ',' + + (targetY - scale * (textY + anchorY)) + + ')' + + (scale < 1 ? + 'scale(' + scale + ')' : '' + ) + + (rotate ? + 'rotate(' + rotate + + (noCenter ? '' : ' ' + textX + ' ' + textY) + + ')' : '' + ) + ); +}; - if(scale < 1) transformScale = 'scale(' + scale + ') '; - else { - scale = 1; - transformScale = ''; - } - - transformRotate = (rotate) ? - 'rotate(' + rotate + ' ' + textX + ' ' + textY + ') ' : ''; - - // Note that scaling also affects the center of the text box - var translateX = (targetX - scale * textX); - var translateY = (targetY - scale * textY); - transformTranslate = 'translate(' + translateX + ' ' + translateY + ')'; - - return transformTranslate + transformScale + transformRotate; +lib.ensureUniformFontSize = function(gd, baseFont) { + var out = lib.extendFlat({}, baseFont); + out.size = Math.max( + baseFont.size, + gd._fullLayout.uniformtext.minsize || 0 + ); + return out; }; },{"../constants/numerical":149,"./anchor_utils":154,"./angles":155,"./array":156,"./clean_number":157,"./clear_responsive":159,"./coerce":160,"./dates":161,"./dom":162,"./extend":164,"./filter_unique":165,"./filter_visible":166,"./geometry2d":167,"./identity":168,"./is_plain_object":170,"./keyed_container":171,"./localize":172,"./loggers":173,"./make_trace_groups":174,"./matrix":175,"./mod":176,"./nested_property":177,"./noop":178,"./notifier":179,"./push_unique":182,"./regex":184,"./relative_attr":185,"./relink_private":186,"./search":187,"./stats":189,"./throttle":191,"./to_log_range":192,"d3":16,"fast-isnumeric":18}],170:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38015,7 +38343,7 @@ module.exports = function isPlainObject(obj) { },{}],171:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38208,7 +38536,7 @@ module.exports = function keyedContainer(baseObj, path, keyName, valueName) { },{"./nested_property":177}],172:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38264,7 +38592,7 @@ module.exports = function localize(gd, s) { },{"../registry":258}],173:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38277,6 +38605,8 @@ module.exports = function localize(gd, s) { var dfltConfig = _dereq_('../plot_api/plot_config').dfltConfig; +var notifier = _dereq_('./notifier'); + var loggers = module.exports = {}; /** @@ -38286,39 +38616,63 @@ var loggers = module.exports = {}; */ loggers.log = function() { + var i; + if(dfltConfig.logging > 1) { var messages = ['LOG:']; - - for(var i = 0; i < arguments.length; i++) { + for(i = 0; i < arguments.length; i++) { messages.push(arguments[i]); } - apply(console.trace || console.log, messages); } + + if(dfltConfig.notifyOnLogging > 1) { + var lines = []; + for(i = 0; i < arguments.length; i++) { + lines.push(arguments[i]); + } + notifier(lines.join('
'), 'long'); + } }; loggers.warn = function() { + var i; + if(dfltConfig.logging > 0) { var messages = ['WARN:']; - - for(var i = 0; i < arguments.length; i++) { + for(i = 0; i < arguments.length; i++) { messages.push(arguments[i]); } - apply(console.trace || console.log, messages); } + + if(dfltConfig.notifyOnLogging > 0) { + var lines = []; + for(i = 0; i < arguments.length; i++) { + lines.push(arguments[i]); + } + notifier(lines.join('
'), 'stick'); + } }; loggers.error = function() { + var i; + if(dfltConfig.logging > 0) { var messages = ['ERROR:']; - - for(var i = 0; i < arguments.length; i++) { + for(i = 0; i < arguments.length; i++) { messages.push(arguments[i]); } - apply(console.error, messages); } + + if(dfltConfig.notifyOnLogging > 0) { + var lines = []; + for(i = 0; i < arguments.length; i++) { + lines.push(arguments[i]); + } + notifier(lines.join('
'), 'stick'); + } }; /* @@ -38346,9 +38700,9 @@ function apply(f, args) { } } -},{"../plot_api/plot_config":201}],174:[function(_dereq_,module,exports){ +},{"../plot_api/plot_config":201,"./notifier":179}],174:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38391,7 +38745,7 @@ module.exports = function makeTraceGroups(traceLayer, cdModule, cls) { },{"d3":16}],175:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38498,7 +38852,7 @@ exports.apply2DTransform2 = function(transform) { },{}],176:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38533,7 +38887,7 @@ module.exports = { },{}],177:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38779,7 +39133,7 @@ function badContainer(container, propStr, propParts) { },{"./array":156,"fast-isnumeric":18}],178:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38795,7 +39149,7 @@ module.exports = function noop() {}; },{}],179:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38866,18 +39220,24 @@ module.exports = function(text, displayLength) { p.append('span').text(lines[i]); } - note.transition() - .duration(700) - .style('opacity', 1) - .transition() - .delay(ts) - .call(killNote); + if(displayLength === 'stick') { + note.transition() + .duration(350) + .style('opacity', 1); + } else { + note.transition() + .duration(700) + .style('opacity', 1) + .transition() + .delay(ts) + .call(killNote); + } }); }; },{"d3":16,"fast-isnumeric":18}],180:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -38925,7 +39285,7 @@ module.exports = function overrideCursor(el3, csr) { },{"./setcursor":188}],181:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39177,7 +39537,7 @@ polygon.filter = function filter(pts, tolerance) { },{"../constants/numerical":149,"./matrix":175}],182:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39215,7 +39575,7 @@ module.exports = function pushUnique(array, item) { },{}],183:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39423,7 +39783,7 @@ module.exports = queue; },{"../lib":169,"../plot_api/plot_config":201}],184:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39453,7 +39813,7 @@ exports.counter = function(head, tail, openEnded, matchBeginning) { },{}],185:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39506,7 +39866,7 @@ module.exports = function(baseAttr, relativeAttr) { },{}],186:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39564,7 +39924,7 @@ module.exports = function relinkPrivateKeys(toContainer, fromContainer) { },{"./array":156,"./is_plain_object":170}],187:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39751,7 +40111,7 @@ exports.findIndexOfMin = function(arr, fn) { },{"./identity":168,"./loggers":173,"fast-isnumeric":18}],188:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39774,7 +40134,7 @@ module.exports = function setCursor(el3, csr) { },{}],189:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -39884,7 +40244,7 @@ exports.interp = function(arr, n) { },{"./array":156,"fast-isnumeric":18}],190:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40700,7 +41060,7 @@ exports.makeEditable = function(context, options) { },{"../constants/alignment":145,"../constants/xmlns_namespaces":150,"../lib":169,"d3":16}],191:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40803,7 +41163,7 @@ function _clearTimeout(cache) { },{}],192:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40831,7 +41191,7 @@ module.exports = function toLogRange(val, range) { },{"fast-isnumeric":18}],193:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40853,7 +41213,7 @@ module.exports = { },{}],194:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40896,7 +41256,7 @@ module.exports = { },{}],195:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -40954,7 +41314,7 @@ module.exports = function containerArrayMatch(astr) { },{"../registry":258}],196:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -41079,7 +41439,7 @@ function overrideOne(attr, editTypeOverride, overrideContainers, key) { },{"../lib":169}],197:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -41771,7 +42131,7 @@ exports.clearAxisTypes = function(gd, traces, layoutUpdate) { },{"../components/color":51,"../lib":169,"../plots/cartesian/axis_ids":216,"../plots/plots":245,"../registry":258,"fast-isnumeric":18,"gl-mat4/fromQuat":19}],198:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -41814,7 +42174,7 @@ exports.validateTemplate = templateApi.validateTemplate; },{"../snapshot/download":260,"./plot_api":200,"./template_api":205,"./to_image":206,"./validate":207}],199:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -42027,7 +42387,7 @@ exports.applyContainerArrayChanges = function applyContainerArrayChanges(gd, np, },{"../lib/is_plain_object":170,"../lib/loggers":173,"../lib/noop":178,"../lib/search":187,"../registry":258,"./container_array_match":195}],200:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -44470,7 +44830,7 @@ var layoutUIControlPatterns = [ {pattern: /(hover|drag)mode$/, attr: 'modebar.uirevision'}, {pattern: /^(scene\d*)\.camera/}, - {pattern: /^(geo\d*)\.(projection|center)/}, + {pattern: /^(geo\d*)\.(projection|center|fitbounds)/}, {pattern: /^(ternary\d*\.[abc]axis)\.(min|title\.text)$/}, {pattern: /^(polar\d*\.radialaxis)\.((auto)?range|angle|title\.text)/}, {pattern: /^(polar\d*\.angularaxis)\.rotation/}, @@ -45889,7 +46249,7 @@ exports._storeDirectGUIEdit = _storeDirectGUIEdit; },{"../components/color":51,"../components/drawing":72,"../constants/xmlns_namespaces":150,"../lib":169,"../lib/events":163,"../lib/queue":183,"../lib/svg_text_utils":190,"../plots/cartesian/axes":213,"../plots/cartesian/constants":219,"../plots/cartesian/graph_interact":222,"../plots/cartesian/select":230,"../plots/plots":245,"../plots/polar/legacy":248,"../registry":258,"./edit_types":196,"./helpers":197,"./manage_arrays":199,"./plot_config":201,"./plot_schema":202,"./subroutines":204,"d3":16,"fast-isnumeric":18,"has-hover":20}],201:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -46138,11 +46498,21 @@ var configAttributes = { }, logging: { - valType: 'boolean', + valType: 'integer', + min: 0, + max: 2, dflt: 1, }, + notifyOnLogging: { + valType: 'integer', + min: 0, + max: 2, + dflt: 0, + + }, + queueLength: { valType: 'integer', min: 0, @@ -46194,7 +46564,7 @@ module.exports = { },{}],202:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -46905,7 +47275,7 @@ function insertAttrs(baseAttrs, newAttrs, astr) { },{"../lib":169,"../plots/animation_attributes":208,"../plots/attributes":210,"../plots/frame_attributes":240,"../plots/layout_attributes":243,"../plots/polar/legacy/area_attributes":246,"../plots/polar/legacy/axis_attributes":247,"../registry":258,"./edit_types":196,"./plot_config":201}],203:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47217,7 +47587,7 @@ exports.arrayEditor = function(parentIn, containerStr, itemOut) { },{"../lib":169,"../plots/attributes":210}],204:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -47957,7 +48327,7 @@ exports.drawMarginPushers = function(gd) { },{"../components/color":51,"../components/drawing":72,"../components/modebar":109,"../components/titles":138,"../constants/alignment":145,"../lib":169,"../lib/clear_gl_canvases":158,"../plots/cartesian/autorange":212,"../plots/cartesian/axes":213,"../plots/cartesian/constraints":220,"../plots/plots":245,"../registry":258,"d3":16}],205:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -48419,7 +48789,7 @@ function format(opts) { },{"../lib":169,"../plots/attributes":210,"../plots/plots":245,"./plot_config":201,"./plot_schema":202,"./plot_template":203}],206:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -48622,7 +48992,7 @@ module.exports = toImage; },{"../lib":169,"../snapshot/helpers":262,"../snapshot/svgtoimg":264,"../snapshot/tosvg":266,"./plot_api":200,"fast-isnumeric":18}],207:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49049,7 +49419,7 @@ function convertPathToAttributeString(path) { },{"../lib":169,"../plots/plots":245,"./plot_config":201,"./plot_schema":202}],208:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49161,7 +49531,7 @@ module.exports = { },{}],209:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49256,7 +49626,7 @@ module.exports = function handleArrayContainerDefaults(parentObjIn, parentObjOut },{"../lib":169,"../plot_api/plot_template":203}],210:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49397,7 +49767,7 @@ module.exports = { },{"../components/fx/attributes":81}],211:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49426,7 +49796,7 @@ module.exports = { },{}],212:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -49925,7 +50295,7 @@ function greaterOrEqual(v0, v1) { return v0 >= v1; } },{"../../constants/numerical":149,"../../lib":169,"../../registry":258,"fast-isnumeric":18}],213:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53022,7 +53392,7 @@ function isAngular(ax) { },{"../../components/color":51,"../../components/drawing":72,"../../components/titles":138,"../../constants/alignment":145,"../../constants/numerical":149,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/plots":245,"../../registry":258,"./autorange":212,"./axis_autotype":214,"./axis_ids":216,"./clean_ticks":218,"./layout_attributes":225,"./set_convert":231,"d3":16,"fast-isnumeric":18}],214:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53117,7 +53487,7 @@ function multiCategory(a) { },{"../../constants/numerical":149,"../../lib":169,"fast-isnumeric":18}],215:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53240,7 +53610,7 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce, },{"../../lib":169,"../../registry":258,"./category_order_defaults":217,"./layout_attributes":225,"./line_grid_defaults":227,"./set_convert":231,"./tick_label_defaults":232,"./tick_mark_defaults":233,"./tick_value_defaults":234}],216:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53367,7 +53737,7 @@ exports.getAxisGroup = function getAxisGroup(fullLayout, axId) { },{"../../registry":258,"./constants":219}],217:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53461,7 +53831,7 @@ module.exports = function handleCategoryOrderDefaults(containerIn, containerOut, },{}],218:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53549,7 +53919,7 @@ exports.tick0 = function(tick0, axType, calendar, dtick) { },{"../../constants/numerical":149,"../../lib":169,"fast-isnumeric":18}],219:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -53639,7 +54009,7 @@ module.exports = { },{"../../lib/regex":184}],220:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -54025,7 +54395,7 @@ function updateDomain(ax, factor) { },{"../../constants/alignment":145,"../../constants/numerical":149,"../../lib":169,"./autorange":212,"./axis_ids":216,"./scale_zoom":229}],221:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55265,7 +55635,7 @@ module.exports = { },{"../../components/color":51,"../../components/dragelement":69,"../../components/drawing":72,"../../components/fx":89,"../../constants/alignment":145,"../../lib":169,"../../lib/clear_gl_canvases":158,"../../lib/setcursor":188,"../../lib/svg_text_utils":190,"../../plot_api/subroutines":204,"../../registry":258,"../plots":245,"./axes":213,"./axis_ids":216,"./constants":219,"./scale_zoom":229,"./select":230,"d3":16,"has-passive-events":21,"tinycolor2":34}],222:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55433,7 +55803,7 @@ exports.updateFx = function(gd) { },{"../../components/dragelement":69,"../../components/fx":89,"../../lib/setcursor":188,"./constants":219,"./dragbox":221,"d3":16}],223:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -55508,7 +55878,7 @@ module.exports = function makeIncludeComponents(containerArrayName) { },{"../../lib":169,"../../registry":258}],224:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56125,7 +56495,7 @@ exports.updateFx = _dereq_('./graph_interact').updateFx; },{"../../components/drawing":72,"../../constants/xmlns_namespaces":150,"../../lib":169,"../../registry":258,"../get_data":241,"../plots":245,"./attributes":211,"./axis_ids":216,"./constants":219,"./graph_interact":222,"./layout_attributes":225,"./layout_defaults":226,"./transition_axes":235,"d3":16}],225:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -56726,7 +57096,7 @@ module.exports = { },{"../../components/color/attributes":50,"../../components/drawing/attributes":71,"../../constants/docs":146,"../../lib/extend":164,"../../plot_api/plot_template":203,"../font_attributes":239,"./constants":219}],226:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57106,7 +57476,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { },{"../../components/color":51,"../../lib":169,"../../plot_api/plot_template":203,"../../registry":258,"../layout_attributes":243,"./axis_defaults":215,"./axis_ids":216,"./constraints":220,"./layout_attributes":225,"./position_defaults":228,"./type_defaults":236}],227:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57171,7 +57541,7 @@ module.exports = function handleLineGridDefaults(containerIn, containerOut, coer },{"../../components/color/attributes":50,"../../lib":169,"tinycolor2":34}],228:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57259,7 +57629,7 @@ module.exports = function handlePositionDefaults(containerIn, containerOut, coer },{"../../lib":169,"fast-isnumeric":18}],229:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -57287,7 +57657,7 @@ module.exports = function scaleZoom(ax, factor, centerFraction) { },{"../../constants/alignment":145}],230:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -58092,7 +58462,7 @@ module.exports = { },{"../../components/color":51,"../../components/fx":89,"../../components/fx/helpers":86,"../../lib":169,"../../lib/clear_gl_canvases":158,"../../lib/polygon":181,"../../lib/throttle":191,"../../plot_api/subroutines":204,"../../registry":258,"./axis_ids":216,"./constants":219,"polybooljs":25}],231:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -58762,7 +59132,7 @@ module.exports = function setConvert(ax, fullLayout) { },{"../../constants/numerical":149,"../../lib":169,"./axis_ids":216,"./constants":219,"d3":16,"fast-isnumeric":18}],232:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -58881,7 +59251,7 @@ function tickformatstopDefaults(valueIn, valueOut) { },{"../../lib":169,"../array_container_defaults":209,"./layout_attributes":225}],233:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -58914,7 +59284,7 @@ module.exports = function handleTickDefaults(containerIn, containerOut, coerce, },{"../../lib":169,"./layout_attributes":225}],234:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -58956,7 +59326,7 @@ module.exports = function handleTickValueDefaults(containerIn, containerOut, coe },{"./clean_ticks":218}],235:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59169,7 +59539,7 @@ module.exports = function transitionAxes(gd, edits, transitionOpts, makeOnComple },{"../../components/drawing":72,"../../lib":169,"../../registry":258,"./axes":213,"d3":16}],236:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59210,6 +59580,7 @@ function setAutoType(ax, data) { var id = ax._id; var axLetter = id.charAt(0); + var i; // support 3d if(id.indexOf('scene') !== -1) id = axLetter; @@ -59220,7 +59591,8 @@ function setAutoType(ax, data) { // first check for histograms, as the count direction // should always default to a linear axis if(d0.type === 'histogram' && - axLetter === {v: 'y', h: 'x'}[d0.orientation || 'v']) { + axLetter === {v: 'y', h: 'x'}[d0.orientation || 'v'] + ) { ax.type = 'linear'; return; } @@ -59228,7 +59600,13 @@ function setAutoType(ax, data) { var calAttr = axLetter + 'calendar'; var calendar = d0[calAttr]; var opts = {noMultiCategory: !traceIs(d0, 'cartesian') || traceIs(d0, 'noMultiCategory')}; - var i; + + // To not confuse 2D x/y used for per-box sample points for multicategory coordinates + if(d0.type === 'box' && d0._hasPreCompStats && + axLetter === {h: 'x', v: 'y'}[d0.orientation || 'v'] + ) { + opts.noMultiCategory = true; + } // check all boxes on this x axis to see // if they're dates, numbers, or categories @@ -59298,7 +59676,7 @@ function isBoxWithoutPositionCoords(trace, axLetter) { },{"../../registry":258,"./axis_autotype":214}],237:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59725,7 +60103,7 @@ function crawl(attrs, callback, path, depth) { },{"../lib":169,"../registry":258}],238:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59837,7 +60215,7 @@ exports.defaults = function(containerOut, layout, coerce, dfltDomains) { },{"../lib/extend":164}],239:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59902,7 +60280,7 @@ module.exports = function(opts) { },{}],240:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -59948,7 +60326,7 @@ module.exports = { },{}],241:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -60077,7 +60455,7 @@ exports.getSubplotData = function getSubplotData(data, type, subplotId) { },{"../registry":258,"./cartesian/constants":219}],242:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -60111,7 +60489,7 @@ module.exports = project; },{}],243:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -60202,6 +60580,25 @@ module.exports = { }), editType: 'layoutstyle' }, + uniformtext: { + mode: { + valType: 'enumerated', + values: [false, 'hide', 'show'], + dflt: false, + + editType: 'plot', + + }, + minsize: { + valType: 'number', + min: 0, + dflt: 0, + + editType: 'plot', + + }, + editType: 'plot' + }, autosize: { valType: 'boolean', @@ -60415,7 +60812,7 @@ module.exports = { },{"../components/color/attributes":50,"../lib/extend":164,"./animation_attributes":208,"./font_attributes":239,"./pad_attributes":244}],244:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -60470,7 +60867,7 @@ module.exports = function(opts) { },{}],245:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -61772,9 +62169,14 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac coerce('meta'); if(Registry.traceIs(traceOut, 'showLegend')) { - traceOut._dfltShowLegend = true; - coerce('showlegend'); + Lib.coerce(traceIn, traceOut, + _module.attributes.showlegend ? _module.attributes : plots.attributes, + 'showlegend' + ); + coerce('legendgroup'); + + traceOut._dfltShowLegend = true; } else { traceOut._dfltShowLegend = false; } @@ -61938,6 +62340,11 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) { coerce('title.pad.b'); coerce('title.pad.l'); + var uniformtextMode = coerce('uniformtext.mode'); + if(uniformtextMode) { + coerce('uniformtext.minsize'); + } + // Make sure that autosize is defaulted to *true* // on layouts with no set width and height for backward compatibly, // in particular https://plot.ly/javascript/responsive-fluid-layout/ @@ -63736,7 +64143,7 @@ plots.cleanBasePlot = function(desiredType, newFullData, newFullLayout, oldFullD },{"../components/color":51,"../constants/numerical":149,"../lib":169,"../plot_api/plot_schema":202,"../plot_api/plot_template":203,"../plots/get_data":241,"../registry":258,"./animation_attributes":208,"./attributes":210,"./cartesian/axis_ids":216,"./command":237,"./font_attributes":239,"./frame_attributes":240,"./layout_attributes":243,"d3":16,"fast-isnumeric":18}],246:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63778,9 +64185,9 @@ module.exports = { } }; -},{"../../../lib/extend":164,"../../../traces/scatter/attributes":377}],247:[function(_dereq_,module,exports){ +},{"../../../lib/extend":164,"../../../traces/scatter/attributes":378}],247:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63902,7 +64309,7 @@ module.exports = overrideAll({ },{"../../../lib/extend":164,"../../../plot_api/edit_types":196,"../../cartesian/layout_attributes":225}],248:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -63917,7 +64324,7 @@ Polar.manager = _dereq_('./micropolar_manager'); },{"./micropolar":249,"./micropolar_manager":250}],249:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65337,7 +65744,7 @@ var µ = module.exports = { version: '0.2.2' }; },{"../../../constants/alignment":145,"../../../lib":169,"d3":16}],250:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65423,7 +65830,7 @@ manager.fillLayout = function(_gd) { },{"../../../components/color":51,"../../../lib":169,"./micropolar":249,"./undo_manager":251,"d3":16}],251:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65489,7 +65896,7 @@ module.exports = function UndoManager() { },{}],252:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65574,7 +65981,7 @@ module.exports = function handleSubplotDefaults(layoutIn, layoutOut, fullData, o },{"../lib":169,"../plot_api/plot_template":203,"./domain":238}],253:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65657,7 +66064,7 @@ exports.texttemplateAttrs = function(opts, extra) { },{"../constants/docs":146}],254:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65741,7 +66148,7 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) },{"../../lib":169,"../../plots/get_data":241,"./layout_attributes":255,"./layout_defaults":256,"./ternary":257}],255:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65848,7 +66255,7 @@ attrs.aaxis.uirevision = attrs.baxis.uirevision = attrs.caxis.uirevision = { },{"../../components/color/attributes":50,"../../lib/extend":164,"../../plot_api/edit_types":196,"../cartesian/layout_attributes":225,"../domain":238}],256:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -65980,7 +66387,7 @@ function handleAxisDefaults(containerIn, containerOut, options, ternaryLayoutOut },{"../../components/color":51,"../../lib":169,"../../plot_api/plot_template":203,"../cartesian/line_grid_defaults":227,"../cartesian/tick_label_defaults":232,"../cartesian/tick_mark_defaults":233,"../cartesian/tick_value_defaults":234,"../subplot_defaults":252,"./layout_attributes":255}],257:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -66737,7 +67144,7 @@ function removeZoombox(gd) { },{"../../components/color":51,"../../components/dragelement":69,"../../components/drawing":72,"../../components/fx":89,"../../components/titles":138,"../../lib":169,"../../lib/extend":164,"../../registry":258,"../cartesian/axes":213,"../cartesian/constants":219,"../cartesian/select":230,"../cartesian/set_convert":231,"../plots":245,"d3":16,"tinycolor2":34}],258:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67203,7 +67610,7 @@ function getTraceType(traceType) { },{"./lib/dom":162,"./lib/extend":164,"./lib/is_plain_object":170,"./lib/loggers":173,"./lib/noop":178,"./lib/push_unique":182,"./plots/attributes":210,"./plots/layout_attributes":243}],259:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67376,7 +67783,7 @@ module.exports = function clonePlot(graphObj, options) { },{"../lib":169,"../registry":258}],260:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67446,7 +67853,7 @@ module.exports = downloadImage; },{"../lib":169,"../plot_api/to_image":206,"./filesaver":261,"./helpers":262}],261:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67526,7 +67933,7 @@ module.exports = fileSaver; },{"../lib":169,"./helpers":262}],262:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67603,7 +68010,7 @@ exports.MSG_IE_BAD_FORMAT = 'Sorry IE does not support downloading from canvas. },{"../registry":258}],263:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67629,7 +68036,7 @@ module.exports = Snapshot; },{"./cloneplot":259,"./download":260,"./helpers":262,"./svgtoimg":264,"./toimage":265,"./tosvg":266}],264:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67756,7 +68163,7 @@ module.exports = svgToImg; },{"../lib":169,"./helpers":262,"events":15}],265:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67833,7 +68240,7 @@ module.exports = toImage; },{"../lib":169,"../registry":258,"./cloneplot":259,"./helpers":262,"./svgtoimg":264,"./tosvg":266,"events":15}],266:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -67949,21 +68356,29 @@ module.exports = function toSVG(gd, format, scale) { } }); - svg.selectAll('.point, .scatterpts, .legendfill>path, .legendlines>path, .cbfill').each(function() { - var pt = d3.select(this); - // similar to font family styles above, - // we must remove " after the SVG DOM has been serialized - var fill = this.style.fill; - if(fill && fill.indexOf('url(') !== -1) { - pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB)); - } + if(fullLayout._gradientUrlQueryParts) { + var queryParts = []; + for(var k in fullLayout._gradientUrlQueryParts) queryParts.push(k); - var stroke = this.style.stroke; - if(stroke && stroke.indexOf('url(') !== -1) { - pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB)); + if(queryParts.length) { + svg.selectAll(queryParts.join(',')).each(function() { + var pt = d3.select(this); + + // similar to font family styles above, + // we must remove " after the SVG DOM has been serialized + var fill = this.style.fill; + if(fill && fill.indexOf('url(') !== -1) { + pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB)); + } + + var stroke = this.style.stroke; + if(stroke && stroke.indexOf('url(') !== -1) { + pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB)); + } + }); } - }); + } if(format === 'pdf' || format === 'eps') { // these formats make the extra line MathJax adds around symbols look super thick in some cases @@ -68014,7 +68429,7 @@ module.exports = function toSVG(gd, format, scale) { },{"../components/color":51,"../components/drawing":72,"../constants/xmlns_namespaces":150,"../lib":169,"d3":16}],267:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68047,7 +68462,7 @@ module.exports = function arraysToCalcdata(cd, trace) { },{"../../lib":169}],268:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68254,9 +68669,9 @@ module.exports = { } }; -},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../../plots/font_attributes":239,"../../plots/template_attributes":253,"../scatter/attributes":377,"./constants":270}],269:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../../plots/font_attributes":239,"../../plots/template_attributes":253,"../scatter/attributes":378,"./constants":270}],269:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68319,9 +68734,9 @@ module.exports = function calc(gd, trace) { return cd; }; -},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"../../plots/cartesian/axes":213,"../scatter/calc_selection":379,"./arrays_to_calcdata":267}],270:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"../../plots/cartesian/axes":213,"../scatter/calc_selection":380,"./arrays_to_calcdata":267}],270:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -68343,7 +68758,7 @@ module.exports = { },{}],271:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69111,7 +69526,7 @@ module.exports = { },{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"../../plots/cartesian/axis_ids":216,"../../registry":258,"./sieve.js":281,"fast-isnumeric":18}],272:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69239,6 +69654,7 @@ function handleText(traceIn, traceOut, layout, coerce, textposition, opts) { var moduleHasCliponaxis = !(opts.moduleHasCliponaxis === false); var moduleHasTextangle = !(opts.moduleHasTextangle === false); var moduleHasInsideanchor = !(opts.moduleHasInsideanchor === false); + var hasPathbar = !!opts.hasPathbar; var hasBoth = Array.isArray(textposition) || textposition === 'auto'; var hasInside = hasBoth || textposition === 'inside'; @@ -69259,8 +69675,15 @@ function handleText(traceIn, traceOut, layout, coerce, textposition, opts) { } coerceFont(coerce, 'insidetextfont', insideTextFontDefault); - if(hasOutside) coerceFont(coerce, 'outsidetextfont', dfltFont); + if(hasPathbar) { + var pathbarTextFontDefault = Lib.extendFlat({}, dfltFont); + if(isColorInheritedFromLayoutFont) { + delete pathbarTextFontDefault.color; + } + coerceFont(coerce, 'pathbar.textfont', pathbarTextFontDefault); + } + if(hasOutside) coerceFont(coerce, 'outsidetextfont', dfltFont); if(moduleHasSelected) coerce('selected.textfont.color'); if(moduleHasUnselected) coerce('unselected.textfont.color'); @@ -69283,9 +69706,9 @@ module.exports = { handleText: handleText }; -},{"../../components/color":51,"../../lib":169,"../../plots/cartesian/axis_ids":216,"../../registry":258,"../scatter/xy_defaults":403,"./attributes":268,"./style_defaults":283}],273:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":169,"../../plots/cartesian/axis_ids":216,"../../registry":258,"../scatter/xy_defaults":404,"./attributes":268,"./style_defaults":283}],273:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69314,7 +69737,7 @@ module.exports = function eventData(out, pt, trace) { },{}],274:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69392,7 +69815,7 @@ exports.getLineWidth = function(trace, di) { },{"../../lib":169,"fast-isnumeric":18,"tinycolor2":34}],275:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69577,7 +70000,7 @@ module.exports = { },{"../../components/color":51,"../../components/fx":89,"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"./helpers":274}],276:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69613,9 +70036,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"../scatter/marker_colorbar":395,"./arrays_to_calcdata":267,"./attributes":268,"./calc":269,"./cross_trace_calc":271,"./defaults":272,"./event_data":273,"./hover":275,"./layout_attributes":277,"./layout_defaults":278,"./plot":279,"./select":280,"./style":282}],277:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../scatter/marker_colorbar":396,"./arrays_to_calcdata":267,"./attributes":268,"./calc":269,"./cross_trace_calc":271,"./defaults":272,"./event_data":273,"./hover":275,"./layout_attributes":277,"./layout_defaults":278,"./plot":279,"./select":280,"./style":282}],277:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69663,7 +70086,7 @@ module.exports = { },{}],278:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69723,7 +70146,7 @@ module.exports = function(layoutIn, layoutOut, fullData) { },{"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"./layout_attributes":277}],279:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -69743,6 +70166,10 @@ var Drawing = _dereq_('../../components/drawing'); var Registry = _dereq_('../../registry'); var tickText = _dereq_('../../plots/cartesian/axes').tickText; +var uniformText = _dereq_('./uniform_text'); +var recordMinTextSize = uniformText.recordMinTextSize; +var clearMinTextSize = uniformText.clearMinTextSize; + var style = _dereq_('./style'); var helpers = _dereq_('./helpers'); var constants = _dereq_('./constants'); @@ -69782,8 +70209,8 @@ function getXY(di, xa, ya, isHorizontal) { return isHorizontal ? [s, p] : [p, s]; } -function transition(selection, opts, makeOnCompleteCallback) { - if(hasTransition(opts)) { +function transition(selection, fullLayout, opts, makeOnCompleteCallback) { + if(!fullLayout.uniformtext.mode && hasTransition(opts)) { var onComplete; if(makeOnCompleteCallback) { onComplete = makeOnCompleteCallback(); @@ -69815,6 +70242,9 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) gap: fullLayout.bargap, groupgap: fullLayout.bargroupgap }; + + // don't clear bar when this is called from waterfall or funnel + clearMinTextSize('bar', fullLayout); } var bartraces = Lib.makeTraceGroups(traceLayer, cdModule, 'trace bars').each(function(cd) { @@ -69933,13 +70363,13 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) y1 = fixpx(y1, y0); } - var sel = transition(Lib.ensureSingle(bar, 'path'), opts, makeOnCompleteCallback); + var sel = transition(Lib.ensureSingle(bar, 'path'), fullLayout, opts, makeOnCompleteCallback); sel .style('vector-effect', 'non-scaling-stroke') .attr('d', 'M' + x0 + ',' + y0 + 'V' + y1 + 'H' + x1 + 'V' + y0 + 'Z') .call(Drawing.setClipUrl, plotinfo.layerClipId, gd); - if(hasTransition(opts)) { + if(!fullLayout.uniformtext.mode && hasTransition(opts)) { var styleFns = Drawing.makePointStyleFns(trace); Drawing.singlePointStyle(di, sel, trace, styleFns, gd); } @@ -69961,14 +70391,14 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) Registry.getComponentMethod('errorbars', 'plot')(gd, bartraces, plotinfo, opts); } -function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, makeOnCompleteCallback) { +function appendBarText(gd, plotinfo, bar, cd, i, x0, x1, y0, y1, opts, makeOnCompleteCallback) { var xa = plotinfo.xaxis; var ya = plotinfo.yaxis; var fullLayout = gd._fullLayout; var textPosition; - function appendTextNode(bar, text, textFont) { + function appendTextNode(bar, text, font) { var textSelection = Lib.ensureSingle(bar, 'text') .text(text) .attr({ @@ -69978,17 +70408,17 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma // tex and regular text together 'data-notex': 1 }) - .call(Drawing.font, textFont) + .call(Drawing.font, font) .call(svgTextUtils.convertToTspans, gd); return textSelection; } // get trace attributes - var trace = calcTrace[0].trace; + var trace = cd[0].trace; var isHorizontal = (trace.orientation === 'h'); - var text = getText(fullLayout, calcTrace, i, xa, ya); + var text = getText(fullLayout, cd, i, xa, ya); textPosition = getTextPosition(trace, i); // compute text position @@ -69996,7 +70426,7 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma opts.mode === 'stack' || opts.mode === 'relative'; - var calcBar = calcTrace[i]; + var calcBar = cd[i]; var isOutmostBar = !inStackOrRelativeMode || calcBar._outmost; if(!text || @@ -70009,7 +70439,7 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma } var layoutFont = fullLayout.font; - var barColor = style.getBarColor(calcTrace[i], trace); + var barColor = style.getBarColor(cd[i], trace); var insideTextFont = style.getInsideTextFont(trace, i, layoutFont, barColor); var outsideTextFont = style.getOutsideTextFont(trace, i, layoutFont); @@ -70042,6 +70472,7 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma var textBB; var textWidth; var textHeight; + var font; if(textPosition === 'outside') { if(!isOutmostBar && !calcBar.hasB) textPosition = 'inside'; @@ -70051,7 +70482,10 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma if(isOutmostBar) { // draw text using insideTextFont and check if it fits inside bar textPosition = 'inside'; - textSelection = appendTextNode(bar, text, insideTextFont); + + font = Lib.ensureUniformFontSize(gd, insideTextFont); + + textSelection = appendTextNode(bar, text, font); textBB = Drawing.bBox(textSelection.node()), textWidth = textBB.width, @@ -70081,9 +70515,9 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma } if(!textSelection) { - textSelection = appendTextNode(bar, text, - (textPosition === 'outside') ? - outsideTextFont : insideTextFont); + font = Lib.ensureUniformFontSize(gd, (textPosition === 'outside') ? outsideTextFont : insideTextFont); + + textSelection = appendTextNode(bar, text, font); var currentTransform = textSelection.attr('transform'); textSelection.attr('transform', ''); @@ -70098,6 +70532,8 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma } } + var angle = trace.textangle; + // compute text transform var transform, constrained; if(textPosition === 'outside') { @@ -70105,42 +70541,64 @@ function appendBarText(gd, plotinfo, bar, calcTrace, i, x0, x1, y0, y1, opts, ma trace.constraintext === 'both' || trace.constraintext === 'outside'; - transform = Lib.getTextTransform(toMoveOutsideBar(x0, x1, y0, y1, textBB, { + transform = toMoveOutsideBar(x0, x1, y0, y1, textBB, { isHorizontal: isHorizontal, constrained: constrained, - angle: trace.textangle - })); + angle: angle + }); } else { constrained = trace.constraintext === 'both' || trace.constraintext === 'inside'; - transform = Lib.getTextTransform(toMoveInsideBar(x0, x1, y0, y1, textBB, { + transform = toMoveInsideBar(x0, x1, y0, y1, textBB, { isHorizontal: isHorizontal, constrained: constrained, - angle: trace.textangle, + angle: angle, anchor: trace.insidetextanchor - })); + }); } - transition(textSelection, opts, makeOnCompleteCallback).attr('transform', transform); + transform.fontSize = font.size; + recordMinTextSize(trace.type, transform, fullLayout); + calcBar.transform = transform; + + transition(textSelection, fullLayout, opts, makeOnCompleteCallback) + .attr('transform', Lib.getTextTransform(transform)); } function getRotateFromAngle(angle) { return (angle === 'auto') ? 0 : angle; } +function getRotatedTextSize(textBB, rotate) { + var a = Math.PI / 180 * rotate; + var absSin = Math.abs(Math.sin(a)); + var absCos = Math.abs(Math.cos(a)); + + return { + x: textBB.width * absCos + textBB.height * absSin, + y: textBB.width * absSin + textBB.height * absCos + }; +} + function toMoveInsideBar(x0, x1, y0, y1, textBB, opts) { var isHorizontal = !!opts.isHorizontal; var constrained = !!opts.constrained; var angle = opts.angle || 0; - var anchor = opts.anchor || 0; + var anchor = opts.anchor || 'end'; + var isEnd = anchor === 'end'; + var isStart = anchor === 'start'; + var leftToRight = opts.leftToRight || 0; // left: -1, center: 0, right: 1 + var toRight = (leftToRight + 1) / 2; + var toLeft = 1 - toRight; var textWidth = textBB.width; var textHeight = textBB.height; var lx = Math.abs(x1 - x0); var ly = Math.abs(y1 - y0); + // compute remaining space var textpad = ( lx > (2 * TEXTPAD) && ly > (2 * TEXTPAD) @@ -70149,67 +70607,70 @@ function toMoveInsideBar(x0, x1, y0, y1, textBB, opts) { lx -= 2 * textpad; ly -= 2 * textpad; - var autoRotate = (angle === 'auto'); - var isAutoRotated = false; - if(autoRotate && + var rotate = getRotateFromAngle(angle); + if((angle === 'auto') && !(textWidth <= lx && textHeight <= ly) && (textWidth > lx || textHeight > ly) && ( !(textWidth > ly || textHeight > lx) || ((textWidth < textHeight) !== (lx < ly)) )) { - isAutoRotated = true; + rotate += 90; } - if(isAutoRotated) { - // don't rotate yet only swap bar width with height - var tmp = ly; - ly = lx; - lx = tmp; + var t = getRotatedTextSize(textBB, rotate); + + var scale = 1; + if(constrained) { + scale = Math.min( + 1, + lx / t.x, + ly / t.y + ); } - var rotate = getRotateFromAngle(angle); - var absSin = Math.abs(Math.sin(Math.PI / 180 * rotate)); - var absCos = Math.abs(Math.cos(Math.PI / 180 * rotate)); - - // compute and apply text padding - var dx = Math.max(lx * absCos, ly * absSin); - var dy = Math.max(lx * absSin, ly * absCos); - - var scale = (constrained) ? - Math.min(dx / textWidth, dy / textHeight) : - Math.max(absCos, absSin); - - scale = Math.min(1, scale); - // compute text and target positions - var targetX = (x0 + x1) / 2; + var textX = ( + textBB.left * toLeft + + textBB.right * toRight + ); + var textY = (textBB.top + textBB.bottom) / 2; + var targetX = ( + (x0 + TEXTPAD) * toLeft + + (x1 - TEXTPAD) * toRight + ); var targetY = (y0 + y1) / 2; - - if(anchor !== 'middle') { // case of 'start' or 'end' - var targetWidth = scale * (isHorizontal !== isAutoRotated ? textHeight : textWidth); - var targetHeight = scale * (isHorizontal !== isAutoRotated ? textWidth : textHeight); - textpad += 0.5 * (targetWidth * absSin + targetHeight * absCos); + var anchorX = 0; + var anchorY = 0; + if(isStart || isEnd) { + var extrapad = (isHorizontal ? t.x : t.y) / 2; + var dir = isHorizontal ? dirSign(x0, x1) : dirSign(y0, y1); if(isHorizontal) { - textpad *= dirSign(x0, x1); - targetX = (anchor === 'start') ? x0 + textpad : x1 - textpad; + if(isStart) { + targetX = x0 + dir * textpad; + anchorX = -dir * extrapad; + } else { + targetX = x1 - dir * textpad; + anchorX = dir * extrapad; + } } else { - textpad *= dirSign(y0, y1); - targetY = (anchor === 'start') ? y0 + textpad : y1 - textpad; + if(isStart) { + targetY = y0 + dir * textpad; + anchorY = -dir * extrapad; + } else { + targetY = y1 - dir * textpad; + anchorY = dir * extrapad; + } } } - var textX = (textBB.left + textBB.right) / 2; - var textY = (textBB.top + textBB.bottom) / 2; - - // lastly apply auto rotation - if(isAutoRotated) rotate += 90; - return { textX: textX, textY: textY, targetX: targetX, targetY: targetY, + anchorX: anchorX, + anchorY: anchorY, scale: scale, rotate: rotate }; @@ -70243,45 +70704,47 @@ function toMoveOutsideBar(x0, x1, y0, y1, textBB, opts) { } var rotate = getRotateFromAngle(angle); - var absSin = Math.abs(Math.sin(Math.PI / 180 * rotate)); - var absCos = Math.abs(Math.cos(Math.PI / 180 * rotate)); + var t = getRotatedTextSize(textBB, rotate); // compute text and target positions - var targetWidth = scale * (isHorizontal ? textHeight : textWidth); - var targetHeight = scale * (isHorizontal ? textWidth : textHeight); - textpad += 0.5 * (targetWidth * absSin + targetHeight * absCos); - - var targetX = (x0 + x1) / 2; - var targetY = (y0 + y1) / 2; - - if(isHorizontal) { - targetX = x1 - textpad * dirSign(x1, x0); - } else { - targetY = y1 + textpad * dirSign(y0, y1); - } - + var extrapad = (isHorizontal ? t.x : t.y) / 2; var textX = (textBB.left + textBB.right) / 2; var textY = (textBB.top + textBB.bottom) / 2; + var targetX = (x0 + x1) / 2; + var targetY = (y0 + y1) / 2; + var anchorX = 0; + var anchorY = 0; + + var dir = isHorizontal ? dirSign(x1, x0) : dirSign(y0, y1); + if(isHorizontal) { + targetX = x1 - dir * textpad; + anchorX = dir * extrapad; + } else { + targetY = y1 + dir * textpad; + anchorY = -dir * extrapad; + } return { textX: textX, textY: textY, targetX: targetX, targetY: targetY, + anchorX: anchorX, + anchorY: anchorY, scale: scale, rotate: rotate }; } -function getText(fullLayout, calcTrace, index, xa, ya) { - var trace = calcTrace[0].trace; +function getText(fullLayout, cd, index, xa, ya) { + var trace = cd[0].trace; var texttemplate = trace.texttemplate; var value; if(texttemplate) { - value = calcTexttemplate(fullLayout, calcTrace, index, xa, ya); + value = calcTexttemplate(fullLayout, cd, index, xa, ya); } else if(trace.textinfo) { - value = calcTextinfo(calcTrace, index, xa, ya); + value = calcTextinfo(cd, index, xa, ya); } else { value = helpers.getValue(trace.text, index); } @@ -70294,8 +70757,8 @@ function getTextPosition(trace, index) { return helpers.coerceEnumerated(attributeTextPosition, value); } -function calcTexttemplate(fullLayout, calcTrace, index, xa, ya) { - var trace = calcTrace[0].trace; +function calcTexttemplate(fullLayout, cd, index, xa, ya) { + var trace = cd[0].trace; var texttemplate = Lib.castOption(trace, index, 'texttemplate'); if(!texttemplate) return ''; var isWaterfall = (trace.type === 'waterfall'); @@ -70323,7 +70786,7 @@ function calcTexttemplate(fullLayout, calcTrace, index, xa, ya) { return tickText(vAxis, +v, true).text; } - var cdi = calcTrace[index]; + var cdi = cd[index]; var obj = {}; obj.label = cdi.p; @@ -70364,8 +70827,8 @@ function calcTexttemplate(fullLayout, calcTrace, index, xa, ya) { return Lib.texttemplateString(texttemplate, obj, fullLayout._d3locale, pt, obj, trace._meta || {}); } -function calcTextinfo(calcTrace, index, xa, ya) { - var trace = calcTrace[0].trace; +function calcTextinfo(cd, index, xa, ya) { + var trace = cd[0].trace; var isHorizontal = (trace.orientation === 'h'); var isWaterfall = (trace.type === 'waterfall'); var isFunnel = (trace.type === 'funnel'); @@ -70381,7 +70844,7 @@ function calcTextinfo(calcTrace, index, xa, ya) { } var textinfo = trace.textinfo; - var cdi = calcTrace[index]; + var cdi = cd[index]; var parts = textinfo.split('+'); var text = []; @@ -70390,7 +70853,7 @@ function calcTextinfo(calcTrace, index, xa, ya) { var hasFlag = function(flag) { return parts.indexOf(flag) !== -1; }; if(hasFlag('label')) { - text.push(formatLabel(calcTrace[index].p)); + text.push(formatLabel(cd[index].p)); } if(hasFlag('text')) { @@ -70440,13 +70903,12 @@ function calcTextinfo(calcTrace, index, xa, ya) { module.exports = { plot: plot, - toMoveInsideBar: toMoveInsideBar, - toMoveOutsideBar: toMoveOutsideBar + toMoveInsideBar: toMoveInsideBar }; -},{"../../components/color":51,"../../components/drawing":72,"../../components/fx/helpers":86,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../registry":258,"./attributes":268,"./constants":270,"./helpers":274,"./style":282,"d3":16,"fast-isnumeric":18}],280:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../components/fx/helpers":86,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../registry":258,"./attributes":268,"./constants":270,"./helpers":274,"./style":282,"./uniform_text":284,"d3":16,"fast-isnumeric":18}],280:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70510,7 +70972,7 @@ function getCentroid(d, xa, ya, isHorizontal, isFunnel) { },{}],281:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70621,7 +71083,7 @@ Sieve.prototype.getLabel = function getLabel(position, value) { },{"../../constants/numerical":149,"../../lib":169}],282:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70636,6 +71098,7 @@ var Drawing = _dereq_('../../components/drawing'); var Lib = _dereq_('../../lib'); var Registry = _dereq_('../../registry'); +var resizeText = _dereq_('./uniform_text').resizeText; var attributes = _dereq_('./attributes'); var attributeTextFont = attributes.textfont; var attributeInsideTextFont = attributes.insidetextfont; @@ -70644,6 +71107,8 @@ var helpers = _dereq_('./helpers'); function style(gd) { var s = d3.select(gd).selectAll('g.barlayer').selectAll('g.trace'); + resizeText(gd, s, 'bar'); + var barcount = s.size(); var fullLayout = gd._fullLayout; @@ -70679,7 +71144,8 @@ function stylePoints(sel, trace, gd) { function styleTextPoints(sel, trace, gd) { sel.selectAll('text').each(function(d) { var tx = d3.select(this); - var font = determineFont(tx, d, trace, gd); + var font = Lib.ensureUniformFontSize(gd, determineFont(tx, d, trace, gd)); + Drawing.font(tx, font); }); } @@ -70706,7 +71172,7 @@ function styleTextInSelectionMode(txs, trace, gd) { var font; if(d.selected) { - font = Lib.extendFlat({}, determineFont(tx, d, trace, gd)); + font = Lib.ensureUniformFontSize(gd, determineFont(tx, d, trace, gd)); var selectedFontColor = trace.selected.textfont && trace.selected.textfont.color; if(selectedFontColor) { @@ -70793,12 +71259,13 @@ module.exports = { styleOnSelect: styleOnSelect, getInsideTextFont: getInsideTextFont, getOutsideTextFont: getOutsideTextFont, - getBarColor: getBarColor + getBarColor: getBarColor, + resizeText: resizeText }; -},{"../../components/color":51,"../../components/drawing":72,"../../lib":169,"../../registry":258,"./attributes":268,"./helpers":274,"d3":16}],283:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../lib":169,"../../registry":258,"./attributes":268,"./helpers":274,"./uniform_text":284,"d3":16}],283:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70836,7 +71303,93 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, default },{"../../components/color":51,"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62}],284:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var d3 = _dereq_('d3'); +var Lib = _dereq_('../../lib'); + +function resizeText(gd, gTrace, traceType) { + var fullLayout = gd._fullLayout; + var minSize = fullLayout['_' + traceType + 'Text_minsize']; + if(minSize) { + var shouldHide = fullLayout.uniformtext.mode === 'hide'; + + var selector; + switch(traceType) { + case 'funnelarea' : + case 'pie' : + case 'sunburst' : + selector = 'g.slice'; + break; + case 'treemap' : + selector = 'g.slice, g.pathbar'; + break; + default : + selector = 'g.points > g.point'; + } + + gTrace.selectAll(selector).each(function(d) { + var transform = d.transform; + if(transform) { + transform.scale = (shouldHide && transform.hide) ? 0 : minSize / transform.fontSize; + + var el = d3.select(this).select('text'); + el.attr('transform', Lib.getTextTransform(transform)); + } + }); + } +} + +function recordMinTextSize( + traceType, // in + transform, // inout + fullLayout // inout +) { + if(fullLayout.uniformtext.mode) { + var minKey = getMinKey(traceType); + var minSize = fullLayout.uniformtext.minsize; + var size = transform.scale * transform.fontSize; + + transform.hide = size < minSize; + + fullLayout[minKey] = fullLayout[minKey] || Infinity; + if(!transform.hide) { + fullLayout[minKey] = Math.min( + fullLayout[minKey], + Math.max(size, minSize) + ); + } + } +} + +function clearMinTextSize( + traceType, // in + fullLayout // inout +) { + var minKey = getMinKey(traceType); + fullLayout[minKey] = undefined; +} + +function getMinKey(traceType) { + return '_' + traceType + 'Text_minsize'; +} + +module.exports = { + recordMinTextSize: recordMinTextSize, + clearMinTextSize: clearMinTextSize, + resizeText: resizeText +}; + +},{"../../lib":169,"d3":16}],285:[function(_dereq_,module,exports){ +/** +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -70877,30 +71430,58 @@ module.exports = { editType: 'calc+clearAxisTypes', }, + + dx: { + valType: 'number', + + editType: 'calc', + + }, + dy: { + valType: 'number', + + editType: 'calc', + + }, + name: { valType: 'string', editType: 'calc+clearAxisTypes', }, - text: extendFlat({}, scatterAttrs.text, { + + q1: { + valType: 'data_array', - }), - hovertext: extendFlat({}, scatterAttrs.hovertext, { + editType: 'calc+clearAxisTypes', - }), - hovertemplate: hovertemplateAttrs({ + }, + median: { + valType: 'data_array', - }), - whiskerwidth: { - valType: 'number', - min: 0, - max: 1, - dflt: 0.5, + editType: 'calc+clearAxisTypes', + + }, + q3: { + valType: 'data_array', + + editType: 'calc+clearAxisTypes', + + }, + lowerfence: { + valType: 'data_array', editType: 'calc', }, + upperfence: { + valType: 'data_array', + + editType: 'calc', + + }, + notched: { valType: 'boolean', @@ -70916,18 +71497,21 @@ module.exports = { editType: 'calc', }, - boxpoints: { - valType: 'enumerated', - values: ['all', 'outliers', 'suspectedoutliers', false], - dflt: 'outliers', + notchspan: { + valType: 'data_array', editType: 'calc', }, - boxmean: { + + // TODO + // maybe add + // - loweroutlierbound / upperoutlierbound + // - lowersuspectedoutlierbound / uppersuspectedoutlierbound + + boxpoints: { valType: 'enumerated', - values: [true, 'sd', false], - dflt: false, + values: ['all', 'outliers', 'suspectedoutliers', false], editType: 'calc', @@ -70948,6 +71532,27 @@ module.exports = { editType: 'calc', }, + + boxmean: { + valType: 'enumerated', + values: [true, 'sd', false], + + editType: 'calc', + + }, + mean: { + valType: 'data_array', + + editType: 'calc', + + }, + sd: { + valType: 'data_array', + + editType: 'calc', + + }, + orientation: { valType: 'enumerated', values: ['v', 'h'], @@ -70956,6 +71561,15 @@ module.exports = { }, + quartilemethod: { + valType: 'enumerated', + values: ['linear', 'exclusive', 'inclusive'], + dflt: 'linear', + + editType: 'calc', + + }, + width: { valType: 'number', min: 0, @@ -71006,6 +71620,7 @@ module.exports = { }, editType: 'plot' }, + line: { color: { valType: 'color', @@ -71023,8 +71638,19 @@ module.exports = { }, editType: 'plot' }, + fillcolor: scatterAttrs.fillcolor, + whiskerwidth: { + valType: 'number', + min: 0, + max: 1, + dflt: 0.5, + + editType: 'calc', + + }, + offsetgroup: barAttrs.offsetgroup, alignmentgroup: barAttrs.alignmentgroup, @@ -71036,6 +71662,17 @@ module.exports = { marker: scatterAttrs.unselected.marker, editType: 'style' }, + + text: extendFlat({}, scatterAttrs.text, { + + }), + hovertext: extendFlat({}, scatterAttrs.hovertext, { + + }), + hovertemplate: hovertemplateAttrs({ + + }), + hoveron: { valType: 'flaglist', flags: ['boxes', 'points'], @@ -71046,9 +71683,9 @@ module.exports = { } }; -},{"../../components/color/attributes":50,"../../lib/extend":164,"../../plots/template_attributes":253,"../bar/attributes":268,"../scatter/attributes":377}],285:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../lib/extend":164,"../../plots/template_attributes":253,"../bar/attributes":268,"../scatter/attributes":378}],286:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71059,11 +71696,12 @@ module.exports = { var isNumeric = _dereq_('fast-isnumeric'); -var Lib = _dereq_('../../lib'); -var _ = Lib._; var Axes = _dereq_('../../plots/cartesian/axes'); +var Lib = _dereq_('../../lib'); + +var BADNUM = _dereq_('../../constants/numerical').BADNUM; +var _ = Lib._; -// outlier definition based on http://www.physics.csbsju.edu/stats/box2.html module.exports = function calc(gd, trace) { var fullLayout = gd._fullLayout; var xa = Axes.getFromId(gd, trace.xaxis || 'x'); @@ -71073,7 +71711,7 @@ module.exports = function calc(gd, trace) { // N.B. violin reuses same Box.calc var numKey = trace.type === 'violin' ? '_numViolins' : '_numBoxes'; - var i; + var i, j; var valAxis, valLetter; var posAxis, posLetter; @@ -71089,108 +71727,238 @@ module.exports = function calc(gd, trace) { posLetter = 'x'; } - var val = valAxis.makeCalcdata(trace, valLetter); - var pos = getPos(trace, posLetter, posAxis, val, fullLayout[numKey]); - - var dv = Lib.distinctVals(pos); + var posArray = getPos(trace, posLetter, posAxis, fullLayout[numKey]); + var dv = Lib.distinctVals(posArray); var posDistinct = dv.vals; var dPos = dv.minDiff / 2; - var posBins = makeBins(posDistinct, dPos); - - var pLen = posDistinct.length; - var ptsPerBin = initNestedArray(pLen); - - // bin pts info per position bins - for(i = 0; i < trace._length; i++) { - var v = val[i]; - if(!isNumeric(v)) continue; - - var n = Lib.findBin(pos[i], posBins); - if(n >= 0 && n < pLen) { - var pt = {v: v, i: i}; - arraysToCalcdata(pt, trace, i); - ptsPerBin[n].push(pt); - } - } + // item in trace calcdata var cdi; + // array of {v: v, i, i} sample pts + var pts; + // values of the `pts` array of objects + var boxVals; + // length of sample + var N; + // single sample point + var pt; + // single sample value + var v; + + // filter function for outlier pts + // outlier definition based on http://www.physics.csbsju.edu/stats/box2.html var ptFilterFn = (trace.boxpoints || trace.points) === 'all' ? Lib.identity : function(pt) { return (pt.v < cdi.lf || pt.v > cdi.uf); }; - var minLowerNotch = Infinity; - var maxUpperNotch = -Infinity; + if(trace._hasPreCompStats) { + var valArrayRaw = trace[valLetter]; + var d2c = function(k) { return valAxis.d2c((trace[k] || [])[i]); }; + var minVal = Infinity; + var maxVal = -Infinity; - // build calcdata trace items, one item per distinct position - for(i = 0; i < pLen; i++) { - if(ptsPerBin[i].length > 0) { - var pts = ptsPerBin[i].sort(sortByVal); - var boxVals = pts.map(extractVal); - var bvLen = boxVals.length; + for(i = 0; i < trace._length; i++) { + var posi = posArray[i]; + if(!isNumeric(posi)) continue; cdi = {}; - cdi.pos = posDistinct[i]; - cdi.pts = pts; + cdi.pos = cdi[posLetter] = posi; - // Sort categories by values - cdi[posLetter] = cdi.pos; - cdi[valLetter] = cdi.pts.map(function(pt) { return pt.v; }); + cdi.q1 = d2c('q1'); + cdi.med = d2c('median'); + cdi.q3 = d2c('q3'); - cdi.min = boxVals[0]; - cdi.max = boxVals[bvLen - 1]; - cdi.mean = Lib.mean(boxVals, bvLen); - cdi.sd = Lib.stdev(boxVals, bvLen, cdi.mean); + pts = []; + if(valArrayRaw && Lib.isArrayOrTypedArray(valArrayRaw[i])) { + for(j = 0; j < valArrayRaw[i].length; j++) { + v = valAxis.d2c(valArrayRaw[i][j]); + if(v !== BADNUM) { + pt = {v: v, i: [i, j]}; + arraysToCalcdata(pt, trace, [i, j]); + pts.push(pt); + } + } + } + cdi.pts = pts.sort(sortByVal); + boxVals = cdi[valLetter] = pts.map(extractVal); + N = boxVals.length; - // first quartile - cdi.q1 = Lib.interp(boxVals, 0.25); - // median - cdi.med = Lib.interp(boxVals, 0.5); - // third quartile - cdi.q3 = Lib.interp(boxVals, 0.75); + if(cdi.med !== BADNUM && cdi.q1 !== BADNUM && cdi.q3 !== BADNUM && + cdi.med >= cdi.q1 && cdi.q3 >= cdi.med + ) { + var lf = d2c('lowerfence'); + cdi.lf = (lf !== BADNUM && lf <= cdi.q1) ? + lf : + computeLowerFence(cdi, boxVals, N); - // lower and upper fences - last point inside - // 1.5 interquartile ranges from quartiles - cdi.lf = Math.min( - cdi.q1, - boxVals[Math.min( - Lib.findBin(2.5 * cdi.q1 - 1.5 * cdi.q3, boxVals, true) + 1, - bvLen - 1 - )] - ); - cdi.uf = Math.max( - cdi.q3, - boxVals[Math.max( - Lib.findBin(2.5 * cdi.q3 - 1.5 * cdi.q1, boxVals), - 0 - )] - ); + var uf = d2c('upperfence'); + cdi.uf = (uf !== BADNUM && uf >= cdi.q3) ? + uf : + computeUpperFence(cdi, boxVals, N); - // lower and upper outliers - 3 IQR out (don't clip to max/min, - // this is only for discriminating suspected & far outliers) - cdi.lo = 4 * cdi.q1 - 3 * cdi.q3; - cdi.uo = 4 * cdi.q3 - 3 * cdi.q1; + var mean = d2c('mean'); + cdi.mean = (mean !== BADNUM) ? + mean : + (N ? Lib.mean(boxVals, N) : (cdi.q1 + cdi.q3) / 2); - // lower and upper notches ~95% Confidence Intervals for median - var iqr = cdi.q3 - cdi.q1; - var mci = 1.57 * iqr / Math.sqrt(bvLen); - cdi.ln = cdi.med - mci; - cdi.un = cdi.med + mci; - minLowerNotch = Math.min(minLowerNotch, cdi.ln); - maxUpperNotch = Math.max(maxUpperNotch, cdi.un); + var sd = d2c('sd'); + cdi.sd = (mean !== BADNUM && sd >= 0) ? + sd : + (N ? Lib.stdev(boxVals, N, cdi.mean) : (cdi.q3 - cdi.q1)); + + cdi.lo = computeLowerOutlierBound(cdi); + cdi.uo = computeUpperOutlierBound(cdi); + + var ns = d2c('notchspan'); + ns = (ns !== BADNUM && ns > 0) ? ns : computeNotchSpan(cdi, N); + cdi.ln = cdi.med - ns; + cdi.un = cdi.med + ns; + + var imin = cdi.lf; + var imax = cdi.uf; + if(trace.boxpoints && boxVals.length) { + imin = Math.min(imin, boxVals[0]); + imax = Math.max(imax, boxVals[N - 1]); + } + if(trace.notched) { + imin = Math.min(imin, cdi.ln); + imax = Math.max(imax, cdi.un); + } + cdi.min = imin; + cdi.max = imax; + } else { + Lib.warn([ + 'Invalid input - make sure that q1 <= median <= q3', + 'q1 = ' + cdi.q1, + 'median = ' + cdi.med, + 'q3 = ' + cdi.q3 + ].join('\n')); + + var v0; + if(cdi.med !== BADNUM) { + v0 = cdi.med; + } else if(cdi.q1 !== BADNUM) { + if(cdi.q3 !== BADNUM) v0 = (cdi.q1 + cdi.q3) / 2; + else v0 = cdi.q1; + } else if(cdi.q3 !== BADNUM) { + v0 = cdi.q3; + } else { + v0 = 0; + } + + // draw box as line segment + cdi.med = v0; + cdi.q1 = cdi.q3 = v0; + cdi.lf = cdi.uf = v0; + cdi.mean = cdi.sd = v0; + cdi.ln = cdi.un = v0; + cdi.min = cdi.max = v0; + } + + minVal = Math.min(minVal, cdi.min); + maxVal = Math.max(maxVal, cdi.max); cdi.pts2 = pts.filter(ptFilterFn); cd.push(cdi); } + + trace._extremes[valAxis._id] = Axes.findExtremes(valAxis, + [minVal, maxVal], + {padded: true} + ); + } else { + var valArray = valAxis.makeCalcdata(trace, valLetter); + var posBins = makeBins(posDistinct, dPos); + var pLen = posDistinct.length; + var ptsPerBin = initNestedArray(pLen); + + // bin pts info per position bins + for(i = 0; i < trace._length; i++) { + v = valArray[i]; + if(!isNumeric(v)) continue; + + var n = Lib.findBin(posArray[i], posBins); + if(n >= 0 && n < pLen) { + pt = {v: v, i: i}; + arraysToCalcdata(pt, trace, i); + ptsPerBin[n].push(pt); + } + } + + var minLowerNotch = Infinity; + var maxUpperNotch = -Infinity; + + var quartilemethod = trace.quartilemethod; + var usesExclusive = quartilemethod === 'exclusive'; + var usesInclusive = quartilemethod === 'inclusive'; + + // build calcdata trace items, one item per distinct position + for(i = 0; i < pLen; i++) { + if(ptsPerBin[i].length > 0) { + cdi = {}; + cdi.pos = cdi[posLetter] = posDistinct[i]; + + pts = cdi.pts = ptsPerBin[i].sort(sortByVal); + boxVals = cdi[valLetter] = pts.map(extractVal); + N = boxVals.length; + + cdi.min = boxVals[0]; + cdi.max = boxVals[N - 1]; + cdi.mean = Lib.mean(boxVals, N); + cdi.sd = Lib.stdev(boxVals, N, cdi.mean); + cdi.med = Lib.interp(boxVals, 0.5); + + if((N % 2) && (usesExclusive || usesInclusive)) { + var lower; + var upper; + + if(usesExclusive) { + // do NOT include the median in either half + lower = boxVals.slice(0, N / 2); + upper = boxVals.slice(N / 2 + 1); + } else if(usesInclusive) { + // include the median in either half + lower = boxVals.slice(0, N / 2 + 1); + upper = boxVals.slice(N / 2); + } + + cdi.q1 = Lib.interp(lower, 0.5); + cdi.q3 = Lib.interp(upper, 0.5); + } else { + cdi.q1 = Lib.interp(boxVals, 0.25); + cdi.q3 = Lib.interp(boxVals, 0.75); + } + + // lower and upper fences + cdi.lf = computeLowerFence(cdi, boxVals, N); + cdi.uf = computeUpperFence(cdi, boxVals, N); + + // lower and upper outliers bounds + cdi.lo = computeLowerOutlierBound(cdi); + cdi.uo = computeUpperOutlierBound(cdi); + + // lower and upper notches + var mci = computeNotchSpan(cdi, N); + cdi.ln = cdi.med - mci; + cdi.un = cdi.med + mci; + minLowerNotch = Math.min(minLowerNotch, cdi.ln); + maxUpperNotch = Math.max(maxUpperNotch, cdi.un); + + cdi.pts2 = pts.filter(ptFilterFn); + + cd.push(cdi); + } + } + + trace._extremes[valAxis._id] = Axes.findExtremes(valAxis, + trace.notched ? valArray.concat([minLowerNotch, maxUpperNotch]) : valArray, + {padded: true} + ); } calcSelection(cd, trace); - trace._extremes[valAxis._id] = Axes.findExtremes(valAxis, - trace.notched ? val.concat([minLowerNotch, maxUpperNotch]) : val, - {padded: true} - ); - if(cd.length > 0) { cd[0].t = { num: fullLayout[numKey], @@ -71221,14 +71989,17 @@ module.exports = function calc(gd, trace) { // so if you want one box // per trace, set x0 (y0) to the x (y) value or category for this trace // (or set x (y) to a constant array matching y (x)) -function getPos(trace, posLetter, posAxis, val, num) { - if(posLetter in trace) { +function getPos(trace, posLetter, posAxis, num) { + var hasPosArray = posLetter in trace; + var hasPos0 = posLetter + '0' in trace; + var hasPosStep = 'd' + posLetter in trace; + + if(hasPosArray || (hasPos0 && hasPosStep)) { return posAxis.makeCalcdata(trace, posLetter); } var pos0; - - if(posLetter + '0' in trace) { + if(hasPos0) { pos0 = trace[posLetter + '0']; } else if('name' in trace && ( posAxis.type === 'category' || ( @@ -71248,7 +72019,11 @@ function getPos(trace, posLetter, posAxis, val, num) { posAxis.r2c_just_indices(pos0) : posAxis.d2c(pos0, 0, trace[posLetter + 'calendar']); - return val.map(function() { return pos0c; }); + var len = trace._length; + var out = new Array(len); + for(var i = 0; i < len; i++) out[i] = pos0c; + + return out; } function makeBins(x, dx) { @@ -71271,15 +72046,21 @@ function initNestedArray(len) { return arr; } -function arraysToCalcdata(pt, trace, i) { - var trace2calc = { - text: 'tx', - hovertext: 'htx' - }; +var TRACE_TO_CALC = { + text: 'tx', + hovertext: 'htx' +}; - for(var k in trace2calc) { - if(Array.isArray(trace[k])) { - pt[trace2calc[k]] = trace[k][i]; +function arraysToCalcdata(pt, trace, ptNumber) { + for(var k in TRACE_TO_CALC) { + if(Lib.isArrayOrTypedArray(trace[k])) { + if(Array.isArray(ptNumber)) { + if(Lib.isArrayOrTypedArray(trace[k][ptNumber[0]])) { + pt[TRACE_TO_CALC[k]] = trace[k][ptNumber[0]][ptNumber[1]]; + } + } else { + pt[TRACE_TO_CALC[k]] = trace[k][ptNumber]; + } } } } @@ -71303,9 +72084,51 @@ function sortByVal(a, b) { return a.v - b.v; } function extractVal(o) { return o.v; } -},{"../../lib":169,"../../plots/cartesian/axes":213,"fast-isnumeric":18}],286:[function(_dereq_,module,exports){ +// last point below 1.5 * IQR +function computeLowerFence(cdi, boxVals, N) { + if(N === 0) return cdi.q1; + return Math.min( + cdi.q1, + boxVals[Math.min( + Lib.findBin(2.5 * cdi.q1 - 1.5 * cdi.q3, boxVals, true) + 1, + N - 1 + )] + ); +} + +// last point above 1.5 * IQR +function computeUpperFence(cdi, boxVals, N) { + if(N === 0) return cdi.q3; + return Math.max( + cdi.q3, + boxVals[Math.max( + Lib.findBin(2.5 * cdi.q3 - 1.5 * cdi.q1, boxVals), + 0 + )] + ); +} + +// 3 IQR below (don't clip to max/min, +// this is only for discriminating suspected & far outliers) +function computeLowerOutlierBound(cdi) { + return 4 * cdi.q1 - 3 * cdi.q3; +} + +// 3 IQR above (don't clip to max/min, +// this is only for discriminating suspected & far outliers) +function computeUpperOutlierBound(cdi) { + return 4 * cdi.q3 - 3 * cdi.q1; +} + +// 95% confidence intervals for median +function computeNotchSpan(cdi, N) { + if(N === 0) return 0; + return 1.57 * (cdi.q3 - cdi.q1) / Math.sqrt(N); +} + +},{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"fast-isnumeric":18}],287:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71532,9 +72355,9 @@ module.exports = { setPositionOffset: setPositionOffset }; -},{"../../lib":169,"../../plots/cartesian/axes":213,"../../plots/cartesian/axis_ids":216}],287:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213,"../../plots/cartesian/axis_ids":216}],288:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71547,6 +72370,7 @@ var Lib = _dereq_('../../lib'); var Registry = _dereq_('../../registry'); var Color = _dereq_('../../components/color'); var handleGroupingDefaults = _dereq_('../bar/defaults').handleGroupingDefaults; +var autoType = _dereq_('../../plots/cartesian/axis_autotype'); var attributes = _dereq_('./attributes'); function supplyDefaults(traceIn, traceOut, defaultColor, layout) { @@ -71557,49 +72381,208 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { handleSampleDefaults(traceIn, traceOut, coerce, layout); if(traceOut.visible === false) return; + var hasPreCompStats = traceOut._hasPreCompStats; + + if(hasPreCompStats) { + coerce('lowerfence'); + coerce('upperfence'); + } + coerce('line.color', (traceIn.marker || {}).color || defaultColor); coerce('line.width'); coerce('fillcolor', Color.addOpacity(traceOut.line.color, 0.5)); - coerce('whiskerwidth'); - coerce('boxmean'); - coerce('width'); + var boxmeanDflt = false; + if(hasPreCompStats) { + var mean = coerce('mean'); + var sd = coerce('sd'); + if(mean && mean.length) { + boxmeanDflt = true; + if(sd && sd.length) boxmeanDflt = 'sd'; + } + } + coerce('boxmean', boxmeanDflt); - var notched = coerce('notched', traceIn.notchwidth !== undefined); + coerce('whiskerwidth'); + coerce('width'); + coerce('quartilemethod'); + + var notchedDflt = false; + if(hasPreCompStats) { + var notchspan = coerce('notchspan'); + if(notchspan && notchspan.length) { + notchedDflt = true; + } + } else if(Lib.validate(traceIn.notchwidth, attributes.notchwidth)) { + notchedDflt = true; + } + var notched = coerce('notched', notchedDflt); if(notched) coerce('notchwidth'); handlePointsDefaults(traceIn, traceOut, coerce, {prefix: 'box'}); } function handleSampleDefaults(traceIn, traceOut, coerce, layout) { + function getDims(arr) { + var dims = 0; + if(arr && arr.length) { + dims += 1; + if(Lib.isArrayOrTypedArray(arr[0]) && arr[0].length) { + dims += 1; + } + } + return dims; + } + + function valid(astr) { + return Lib.validate(traceIn[astr], attributes[astr]); + } + var y = coerce('y'); var x = coerce('x'); - var hasX = x && x.length; + + var sLen; + if(traceOut.type === 'box') { + var q1 = coerce('q1'); + var median = coerce('median'); + var q3 = coerce('q3'); + + traceOut._hasPreCompStats = ( + q1 && q1.length && + median && median.length && + q3 && q3.length + ); + sLen = Math.min( + Lib.minRowLength(q1), + Lib.minRowLength(median), + Lib.minRowLength(q3) + ); + } + + var yDims = getDims(y); + var xDims = getDims(x); + var yLen = yDims && Lib.minRowLength(y); + var xLen = xDims && Lib.minRowLength(x); var defaultOrientation, len; + if(traceOut._hasPreCompStats) { + switch(String(xDims) + String(yDims)) { + // no x / no y + case '00': + var setInX = valid('x0') || valid('dx'); + var setInY = valid('y0') || valid('dy'); - if(y && y.length) { - defaultOrientation = 'v'; - if(hasX) { - len = Math.min(Lib.minRowLength(x), Lib.minRowLength(y)); - } else { - coerce('x0'); - len = Lib.minRowLength(y); + if(setInY && !setInX) { + defaultOrientation = 'h'; + } else { + defaultOrientation = 'v'; + } + + len = sLen; + break; + // just x + case '10': + defaultOrientation = 'v'; + len = Math.min(sLen, xLen); + break; + case '20': + defaultOrientation = 'h'; + len = Math.min(sLen, x.length); + break; + // just y + case '01': + defaultOrientation = 'h'; + len = Math.min(sLen, yLen); + break; + case '02': + defaultOrientation = 'v'; + len = Math.min(sLen, y.length); + break; + // both + case '12': + defaultOrientation = 'v'; + len = Math.min(sLen, xLen, y.length); + break; + case '21': + defaultOrientation = 'h'; + len = Math.min(sLen, x.length, yLen); + break; + case '11': + // this one is ill-defined + len = 0; + break; + case '22': + var hasCategories = false; + var i; + for(i = 0; i < x.length; i++) { + if(autoType(x[i]) === 'category') { + hasCategories = true; + break; + } + } + + if(hasCategories) { + defaultOrientation = 'v'; + len = Math.min(sLen, xLen, y.length); + } else { + for(i = 0; i < y.length; i++) { + if(autoType(y[i]) === 'category') { + hasCategories = true; + break; + } + } + + if(hasCategories) { + defaultOrientation = 'h'; + len = Math.min(sLen, x.length, yLen); + } else { + defaultOrientation = 'v'; + len = Math.min(sLen, xLen, y.length); + } + } + break; } - } else if(hasX) { + } else if(yDims > 0) { + defaultOrientation = 'v'; + if(xDims > 0) { + len = Math.min(xLen, yLen); + } else { + len = Math.min(yLen); + } + } else if(xDims > 0) { defaultOrientation = 'h'; - coerce('y0'); - len = Lib.minRowLength(x); + len = Math.min(xLen); } else { + len = 0; + } + + if(!len) { traceOut.visible = false; return; } traceOut._length = len; + var orientation = coerce('orientation', defaultOrientation); + + // these are just used for positioning, they never define the sample + if(traceOut._hasPreCompStats) { + if(orientation === 'v' && xDims === 0) { + coerce('x0', 0); + coerce('dx', 1); + } else if(orientation === 'h' && yDims === 0) { + coerce('y0', 0); + coerce('dy', 1); + } + } else { + if(orientation === 'v' && xDims === 0) { + coerce('x0'); + } else if(orientation === 'h' && yDims === 0) { + coerce('y0'); + } + } + var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults'); handleCalendarDefaults(traceIn, traceOut, ['x', 'y'], layout); - - coerce('orientation', defaultOrientation); } function handlePointsDefaults(traceIn, traceOut, coerce, opts) { @@ -71608,14 +72591,18 @@ function handlePointsDefaults(traceIn, traceOut, coerce, opts) { var outlierColorDflt = Lib.coerce2(traceIn, traceOut, attributes, 'marker.outliercolor'); var lineoutliercolor = coerce('marker.line.outliercolor'); - var points = coerce( - prefix + 'points', - (outlierColorDflt || lineoutliercolor) ? 'suspectedoutliers' : undefined - ); + var modeDflt = 'outliers'; + if(traceOut._hasPreCompStats) { + modeDflt = 'all'; + } else if(outlierColorDflt || lineoutliercolor) { + modeDflt = 'suspectedoutliers'; + } - if(points) { - coerce('jitter', points === 'all' ? 0.3 : 0); - coerce('pointpos', points === 'all' ? -1.5 : 0); + var mode = coerce(prefix + 'points', modeDflt); + + if(mode) { + coerce('jitter', mode === 'all' ? 0.3 : 0); + coerce('pointpos', mode === 'all' ? -1.5 : 0); coerce('marker.symbol'); coerce('marker.opacity'); @@ -71624,7 +72611,7 @@ function handlePointsDefaults(traceIn, traceOut, coerce, opts) { coerce('marker.line.color'); coerce('marker.line.width'); - if(points === 'suspectedoutliers') { + if(mode === 'suspectedoutliers') { coerce('marker.line.outliercolor', traceOut.marker.color); coerce('marker.line.outlierwidth'); } @@ -71676,9 +72663,9 @@ module.exports = { handlePointsDefaults: handlePointsDefaults }; -},{"../../components/color":51,"../../lib":169,"../../registry":258,"../bar/defaults":272,"./attributes":284}],288:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":169,"../../plots/cartesian/axis_autotype":214,"../../registry":258,"../bar/defaults":272,"./attributes":285}],289:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71701,9 +72688,9 @@ module.exports = function eventData(out, pt) { return out; }; -},{}],289:[function(_dereq_,module,exports){ +},{}],290:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -71986,9 +72973,9 @@ module.exports = { hoverOnPoints: hoverOnPoints }; -},{"../../components/color":51,"../../components/fx":89,"../../lib":169,"../../plots/cartesian/axes":213}],290:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":89,"../../lib":169,"../../plots/cartesian/axes":213}],291:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72021,9 +73008,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"./attributes":284,"./calc":285,"./cross_trace_calc":286,"./defaults":287,"./event_data":288,"./hover":289,"./layout_attributes":291,"./layout_defaults":292,"./plot":293,"./select":294,"./style":295}],291:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":285,"./calc":286,"./cross_trace_calc":287,"./defaults":288,"./event_data":289,"./hover":290,"./layout_attributes":292,"./layout_defaults":293,"./plot":294,"./select":295,"./style":296}],292:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72062,9 +73049,9 @@ module.exports = { } }; -},{}],292:[function(_dereq_,module,exports){ +},{}],293:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72108,9 +73095,9 @@ module.exports = { _supply: _supply }; -},{"../../lib":169,"../../registry":258,"./layout_attributes":291}],293:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258,"./layout_attributes":292}],294:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72432,9 +73419,9 @@ module.exports = { plotBoxMean: plotBoxMean }; -},{"../../components/drawing":72,"../../lib":169,"d3":16}],294:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":169,"d3":16}],295:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72481,9 +73468,9 @@ module.exports = function selectPoints(searchInfo, selectionTester) { return selection; }; -},{}],295:[function(_dereq_,module,exports){ +},{}],296:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72555,9 +73542,9 @@ module.exports = { styleOnSelect: styleOnSelect }; -},{"../../components/color":51,"../../components/drawing":72,"d3":16}],296:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"d3":16}],297:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72742,9 +73729,9 @@ module.exports = extendFlat({ }) ); -},{"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../constants/docs":146,"../../constants/filter_ops":147,"../../lib/extend":164,"../../plots/font_attributes":239,"../heatmap/attributes":318,"../scatter/attributes":377}],297:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../constants/docs":146,"../../constants/filter_ops":147,"../../lib/extend":164,"../../plots/font_attributes":239,"../heatmap/attributes":319,"../scatter/attributes":378}],298:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72795,9 +73782,9 @@ module.exports = function calc(gd, trace) { return cd; }; -},{"../../components/colorscale":63,"../heatmap/calc":319,"./end_plus":307,"./set_contours":315}],298:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"../heatmap/calc":320,"./end_plus":308,"./set_contours":316}],299:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72885,9 +73872,9 @@ module.exports = function(pathinfo, contours) { } }; -},{}],299:[function(_dereq_,module,exports){ +},{}],300:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -72896,7 +73883,7 @@ module.exports = function(pathinfo, contours) { 'use strict'; -var extractOpts = _dereq_('../../components/colorscale').extractOpts; +var Colorscale = _dereq_('../../components/colorscale'); var makeColorMap = _dereq_('./make_color_map'); var endPlus = _dereq_('./end_plus'); @@ -72908,8 +73895,10 @@ function calc(gd, trace, opts) { var colorMap = makeColorMap(trace, {isColorbar: true}); if(coloring === 'heatmap') { - var cOpts = extractOpts(trace); - opts._fillgradient = trace.colorscale; + var cOpts = Colorscale.extractOpts(trace); + opts._fillgradient = cOpts.reversescale ? + Colorscale.flipScale(cOpts.colorscale) : + cOpts.colorscale; opts._zrange = [cOpts.min, cOpts.max]; } else if(coloring === 'fill') { opts._fillcolor = colorMap; @@ -72934,9 +73923,9 @@ module.exports = { calc: calc }; -},{"../../components/colorscale":63,"./end_plus":307,"./make_color_map":312}],300:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"./end_plus":308,"./make_color_map":313}],301:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73012,9 +74001,9 @@ module.exports = { } }; -},{}],301:[function(_dereq_,module,exports){ +},{}],302:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73106,9 +74095,9 @@ function handleConstraintValueDefaults(coerce, contours) { } } -},{"../../components/color":51,"../../constants/filter_ops":147,"./label_defaults":311,"fast-isnumeric":18}],302:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../constants/filter_ops":147,"./label_defaults":312,"fast-isnumeric":18}],303:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73185,9 +74174,9 @@ function makeInequalitySettings(operation) { }; } -},{"../../constants/filter_ops":147,"fast-isnumeric":18}],303:[function(_dereq_,module,exports){ +},{"../../constants/filter_ops":147,"fast-isnumeric":18}],304:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73214,9 +74203,9 @@ module.exports = function handleContourDefaults(traceIn, traceOut, coerce, coerc if(autoContour || !contourSize) coerce('ncontours'); }; -},{}],304:[function(_dereq_,module,exports){ +},{}],305:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73314,9 +74303,9 @@ function copyPathinfo(pi) { }); } -},{"../../lib":169}],305:[function(_dereq_,module,exports){ +},{"../../lib":169}],306:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73365,9 +74354,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout } }; -},{"../../lib":169,"../heatmap/xyz_defaults":332,"./attributes":296,"./constraint_defaults":301,"./contours_defaults":303,"./style_defaults":317}],306:[function(_dereq_,module,exports){ +},{"../../lib":169,"../heatmap/xyz_defaults":333,"./attributes":297,"./constraint_defaults":302,"./contours_defaults":304,"./style_defaults":318}],307:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73429,9 +74418,9 @@ module.exports = function emptyPathinfo(contours, plotinfo, cd0) { return pathinfo; }; -},{"../../lib":169,"./constraint_mapping":302,"./end_plus":307}],307:[function(_dereq_,module,exports){ +},{"../../lib":169,"./constraint_mapping":303,"./end_plus":308}],308:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73449,9 +74438,9 @@ module.exports = function endPlus(contours) { return contours.end + contours.size / 1e6; }; -},{}],308:[function(_dereq_,module,exports){ +},{}],309:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73743,9 +74732,9 @@ function getInterpPx(pi, loc, step) { } } -},{"../../lib":169,"./constants":300}],309:[function(_dereq_,module,exports){ +},{"../../lib":169,"./constants":301}],310:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73778,9 +74767,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return hoverData; }; -},{"../../components/color":51,"../heatmap/hover":325}],310:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../heatmap/hover":326}],311:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73807,9 +74796,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"./attributes":296,"./calc":297,"./colorbar":299,"./defaults":305,"./hover":309,"./plot":314,"./style":316}],311:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":297,"./calc":298,"./colorbar":300,"./defaults":306,"./hover":310,"./plot":315,"./style":317}],312:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73837,9 +74826,9 @@ module.exports = function handleLabelDefaults(coerce, layout, lineColor, opts) { if(opts.hasHover !== false) coerce('zhoverformat'); }; -},{"../../lib":169}],312:[function(_dereq_,module,exports){ +},{"../../lib":169}],313:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -73921,9 +74910,9 @@ module.exports = function makeColorMap(trace) { ); }; -},{"../../components/colorscale":63,"./end_plus":307,"d3":16}],313:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"./end_plus":308,"d3":16}],314:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74013,9 +75002,9 @@ function getMarchingIndex(val, corners) { return (mi === 15) ? 0 : mi; } -},{"./constants":300}],314:[function(_dereq_,module,exports){ +},{"./constants":301}],315:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74697,9 +75686,9 @@ function makeClipMask(cd0) { return z; } -},{"../../components/colorscale":63,"../../components/drawing":72,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../plots/cartesian/set_convert":231,"../heatmap/plot":329,"./close_boundaries":298,"./constants":300,"./convert_to_constraints":304,"./empty_pathinfo":306,"./find_all_paths":308,"./make_crossings":313,"d3":16}],315:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"../../components/drawing":72,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/cartesian/axes":213,"../../plots/cartesian/set_convert":231,"../heatmap/plot":330,"./close_boundaries":299,"./constants":301,"./convert_to_constraints":305,"./empty_pathinfo":307,"./find_all_paths":309,"./make_crossings":314,"d3":16}],316:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74801,9 +75790,9 @@ function autoContours(start, end, ncontours) { return dummyAx; } -},{"../../lib":169,"../../plots/cartesian/axes":213}],316:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213}],317:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74882,9 +75871,9 @@ module.exports = function style(gd) { heatmapStyle(gd); }; -},{"../../components/drawing":72,"../heatmap/style":330,"./make_color_map":312,"d3":16}],317:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../heatmap/style":331,"./make_color_map":313,"d3":16}],318:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74927,9 +75916,9 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, layout, handleLabelDefaults(coerce, layout, lineColor, opts); }; -},{"../../components/colorscale/defaults":61,"./label_defaults":311}],318:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"./label_defaults":312}],319:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -74939,6 +75928,7 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, layout, 'use strict'; var scatterAttrs = _dereq_('../scatter/attributes'); +var baseAttrs = _dereq_('../../plots/attributes'); var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs; var colorScaleAttrs = _dereq_('../../components/colorscale/attributes'); var FORMAT_LINK = _dereq_('../../constants/docs').FORMAT_LINK; @@ -75033,16 +76023,17 @@ module.exports = extendFlat({ editType: 'none', }, - hovertemplate: hovertemplateAttrs() + hovertemplate: hovertemplateAttrs(), + showlegend: extendFlat({}, baseAttrs.showlegend, {dflt: false}) }, { transforms: undefined }, colorScaleAttrs('', {cLetter: 'z', autoColorDflt: false}) ); -},{"../../components/colorscale/attributes":58,"../../constants/docs":146,"../../lib/extend":164,"../../plots/template_attributes":253,"../scatter/attributes":377}],319:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../constants/docs":146,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"../scatter/attributes":378}],320:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75200,9 +76191,9 @@ module.exports = function calc(gd, trace) { return [cd0]; }; -},{"../../components/colorscale/calc":59,"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"../histogram2d/calc":347,"./clean_2d_array":320,"./convert_column_xyz":322,"./find_empties":324,"./interp2d":327,"./make_bound_array":328}],320:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"../histogram2d/calc":348,"./clean_2d_array":321,"./convert_column_xyz":323,"./find_empties":325,"./interp2d":328,"./make_bound_array":329}],321:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75277,9 +76268,9 @@ module.exports = function clean2dArray(zOld, trace, xa, ya) { return zNew; }; -},{"../../constants/numerical":149,"../../lib":169,"fast-isnumeric":18}],321:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":169,"fast-isnumeric":18}],322:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75293,9 +76284,9 @@ module.exports = { max: 'zmax' }; -},{}],322:[function(_dereq_,module,exports){ +},{}],323:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75337,6 +76328,8 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name, hovertext = Lib.init2dArray(col2vals.length, col1vals.length); } + var after2before = Lib.init2dArray(col2vals.length, col1vals.length); + for(i = 0; i < colLen; i++) { if(col1[i] !== BADNUM && col2[i] !== BADNUM) { var i1 = Lib.findBin(col1[i] + col1dv.minDiff / 2, col1vals); @@ -75347,6 +76340,7 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name, var arrayVar = trace[arrayVarName]; var newArray = newArrays[j]; newArray[i2][i1] = arrayVar[i]; + after2before[i2][i1] = i; } if(hasColumnText) text[i2][i1] = textCol[i]; @@ -75369,11 +76363,13 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name, if(ax2 && ax2.type === 'category') { trace['_' + var2Name + 'CategoryMap'] = col2vals.map(function(v) { return ax2._categories[v];}); } + + trace._after2before = after2before; }; -},{"../../constants/numerical":149,"../../lib":169}],323:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":169}],324:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75414,9 +76410,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: '', cLetter: 'z'}); }; -},{"../../components/colorscale/defaults":61,"../../lib":169,"./attributes":318,"./style_defaults":331,"./xyz_defaults":332}],324:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../lib":169,"./attributes":319,"./style_defaults":332,"./xyz_defaults":333}],325:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75519,9 +76515,9 @@ module.exports = function findEmpties(z) { return empties.sort(function(a, b) { return b[2] - a[2]; }); }; -},{"../../lib":169}],325:[function(_dereq_,module,exports){ +},{"../../lib":169}],326:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75634,7 +76630,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay var zLabel = Axes.tickText(dummyAx, zVal, 'hover').text; return [Lib.extendFlat(pointData, { - index: [ny, nx], + index: trace._after2before ? trace._after2before[ny][nx] : [ny, nx], // never let a 2D override 1D type as closest point distance: pointData.maxHoverDistance, spikeDistance: pointData.maxSpikeDistance, @@ -75650,9 +76646,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay })]; }; -},{"../../components/colorscale":63,"../../components/fx":89,"../../lib":169,"../../plots/cartesian/axes":213}],326:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"../../components/fx":89,"../../lib":169,"../../plots/cartesian/axes":213}],327:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75673,15 +76669,15 @@ module.exports = { moduleType: 'trace', name: 'heatmap', basePlotModule: _dereq_('../../plots/cartesian'), - categories: ['cartesian', 'svg', '2dMap'], + categories: ['cartesian', 'svg', '2dMap', 'showLegend'], meta: { } }; -},{"../../plots/cartesian":224,"./attributes":318,"./calc":319,"./colorbar":321,"./defaults":323,"./hover":325,"./plot":329,"./style":330}],327:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":319,"./calc":320,"./colorbar":322,"./defaults":324,"./hover":326,"./plot":330,"./style":331}],328:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75812,9 +76808,9 @@ function iterateInterp2d(z, emptyPoints, overshoot) { return maxFractionalChange; } -},{"../../lib":169}],328:[function(_dereq_,module,exports){ +},{"../../lib":169}],329:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -75900,9 +76896,9 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, return arrayOut; }; -},{"../../lib":169,"../../registry":258}],329:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258}],330:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76305,9 +77301,9 @@ function putColor(pixels, pxIndex, c) { pixels[pxIndex + 3] = Math.round(c[3] * 255); } -},{"../../components/colorscale":63,"../../constants/xmlns_namespaces":150,"../../lib":169,"../../registry":258,"d3":16,"tinycolor2":34}],330:[function(_dereq_,module,exports){ +},{"../../components/colorscale":63,"../../constants/xmlns_namespaces":150,"../../lib":169,"../../registry":258,"d3":16,"tinycolor2":34}],331:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76326,9 +77322,9 @@ module.exports = function style(gd) { }); }; -},{"d3":16}],331:[function(_dereq_,module,exports){ +},{"d3":16}],332:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76349,9 +77345,9 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce) { coerce('zhoverformat'); }; -},{}],332:[function(_dereq_,module,exports){ +},{}],333:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76446,9 +77442,9 @@ function isValidZ(z) { return (allRowsAreArrays && oneRowIsFilled && hasOneNumber); } -},{"../../lib":169,"../../registry":258,"fast-isnumeric":18}],333:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258,"fast-isnumeric":18}],334:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76587,9 +77583,9 @@ module.exports = { } }; -},{"../../lib/extend":164,"../../plots/template_attributes":253,"../bar/attributes":268,"./bin_attributes":335,"./constants":339}],334:[function(_dereq_,module,exports){ +},{"../../lib/extend":164,"../../plots/template_attributes":253,"../bar/attributes":268,"./bin_attributes":336,"./constants":340}],335:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76612,9 +77608,9 @@ module.exports = function doAvg(size, counts) { return total; }; -},{}],335:[function(_dereq_,module,exports){ +},{}],336:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76647,9 +77643,9 @@ module.exports = function makeBinAttrs(axLetter, match) { }; }; -},{}],336:[function(_dereq_,module,exports){ +},{}],337:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76721,9 +77717,9 @@ module.exports = { } }; -},{"fast-isnumeric":18}],337:[function(_dereq_,module,exports){ +},{"fast-isnumeric":18}],338:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -76897,9 +77893,9 @@ function dateParts(v, pa, calendar) { return parts; } -},{"../../constants/numerical":149,"../../plots/cartesian/axes":213}],338:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../plots/cartesian/axes":213}],339:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77454,9 +78450,9 @@ module.exports = { calcAllAutoBins: calcAllAutoBins }; -},{"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"../bar/arrays_to_calcdata":267,"./average":334,"./bin_functions":336,"./bin_label_vals":337,"./norm_functions":345,"fast-isnumeric":18}],339:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213,"../../registry":258,"../bar/arrays_to_calcdata":267,"./average":335,"./bin_functions":337,"./bin_label_vals":338,"./norm_functions":346,"fast-isnumeric":18}],340:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77470,9 +78466,9 @@ module.exports = { eventDataKeys: ['binNumber'] }; -},{}],340:[function(_dereq_,module,exports){ +},{}],341:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77528,7 +78524,7 @@ module.exports = function crossTraceDefaults(fullData, fullLayout) { if(!groupName) groupName = fallbackGroupName; var axType = getAxisType(traceOut, binDir); - var calendar = traceOut[binDir + 'calendar']; + var calendar = traceOut[binDir + 'calendar'] || ''; var binOpts = allBinOpts[groupName]; var needsNewItem = true; @@ -77748,9 +78744,9 @@ module.exports = function crossTraceDefaults(fullData, fullLayout) { } }; -},{"../../lib":169,"../../plots/cartesian/axis_ids":216,"../../registry":258,"../bar/defaults":272}],341:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axis_ids":216,"../../registry":258,"../bar/defaults":272}],342:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77822,9 +78818,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'}); }; -},{"../../components/color":51,"../../lib":169,"../../registry":258,"../bar/style_defaults":283,"./attributes":333}],342:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":169,"../../registry":258,"../bar/style_defaults":283,"./attributes":334}],343:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77871,9 +78867,9 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) { return out; }; -},{}],343:[function(_dereq_,module,exports){ +},{}],344:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77906,9 +78902,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { return pts; }; -},{"../../plots/cartesian/axes":213,"../bar/hover":275}],344:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":213,"../bar/hover":275}],345:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77956,9 +78952,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"../bar/cross_trace_calc":271,"../bar/layout_attributes":277,"../bar/layout_defaults":278,"../bar/plot":279,"../bar/select":280,"../bar/style":282,"../scatter/marker_colorbar":395,"./attributes":333,"./calc":338,"./cross_trace_defaults":340,"./defaults":341,"./event_data":342,"./hover":343}],345:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../bar/cross_trace_calc":271,"../bar/layout_attributes":277,"../bar/layout_defaults":278,"../bar/plot":279,"../bar/select":280,"../bar/style":282,"../scatter/marker_colorbar":396,"./attributes":334,"./calc":339,"./cross_trace_defaults":341,"./defaults":342,"./event_data":343,"./hover":344}],346:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -77991,9 +78987,9 @@ module.exports = { } }; -},{}],346:[function(_dereq_,module,exports){ +},{}],347:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78005,6 +79001,7 @@ module.exports = { var histogramAttrs = _dereq_('../histogram/attributes'); var makeBinAttrs = _dereq_('../histogram/bin_attributes'); var heatmapAttrs = _dereq_('../heatmap/attributes'); +var baseAttrs = _dereq_('../../plots/attributes'); var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs; var colorScaleAttrs = _dereq_('../../components/colorscale/attributes'); @@ -78052,14 +79049,15 @@ module.exports = extendFlat( ygap: heatmapAttrs.ygap, zsmooth: heatmapAttrs.zsmooth, zhoverformat: heatmapAttrs.zhoverformat, - hovertemplate: hovertemplateAttrs({}, {keys: 'z'}) + hovertemplate: hovertemplateAttrs({}, {keys: 'z'}), + showlegend: extendFlat({}, baseAttrs.showlegend, {dflt: false}) }, colorScaleAttrs('', {cLetter: 'z', autoColorDflt: false}) ); -},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../../plots/template_attributes":253,"../heatmap/attributes":318,"../histogram/attributes":333,"../histogram/bin_attributes":335}],347:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"../heatmap/attributes":319,"../histogram/attributes":334,"../histogram/bin_attributes":336}],348:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78276,9 +79274,9 @@ function getRanges(edges, uniqueVals, gapLow, gapHigh, ax, calendar) { return out; } -},{"../../lib":169,"../../plots/cartesian/axes":213,"../histogram/average":334,"../histogram/bin_functions":336,"../histogram/bin_label_vals":337,"../histogram/calc":338,"../histogram/norm_functions":345}],348:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213,"../histogram/average":335,"../histogram/bin_functions":337,"../histogram/bin_label_vals":338,"../histogram/calc":339,"../histogram/norm_functions":346}],349:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78309,9 +79307,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('hovertemplate'); }; -},{"../../components/colorscale/defaults":61,"../../lib":169,"../heatmap/style_defaults":331,"./attributes":346,"./sample_defaults":351}],349:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../lib":169,"../heatmap/style_defaults":332,"./attributes":347,"./sample_defaults":352}],350:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78343,9 +79341,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return pts; }; -},{"../../plots/cartesian/axes":213,"../heatmap/hover":325}],350:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":213,"../heatmap/hover":326}],351:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78355,7 +79353,6 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay 'use strict'; module.exports = { - attributes: _dereq_('./attributes'), supplyDefaults: _dereq_('./defaults'), crossTraceDefaults: _dereq_('../histogram/cross_trace_defaults'), @@ -78370,16 +79367,16 @@ module.exports = { moduleType: 'trace', name: 'histogram2d', basePlotModule: _dereq_('../../plots/cartesian'), - categories: ['cartesian', 'svg', '2dMap', 'histogram'], + categories: ['cartesian', 'svg', '2dMap', 'histogram', 'showLegend'], meta: { } }; -},{"../../plots/cartesian":224,"../heatmap/calc":319,"../heatmap/colorbar":321,"../heatmap/plot":329,"../heatmap/style":330,"../histogram/cross_trace_defaults":340,"../histogram/event_data":342,"./attributes":346,"./defaults":348,"./hover":349}],351:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../heatmap/calc":320,"../heatmap/colorbar":322,"../heatmap/plot":330,"../heatmap/style":331,"../histogram/cross_trace_defaults":341,"../histogram/event_data":343,"./attributes":347,"./defaults":349,"./hover":350}],352:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78422,9 +79419,9 @@ module.exports = function handleSampleDefaults(traceIn, traceOut, coerce, layout coerce('autobiny'); }; -},{"../../lib":169,"../../registry":258}],352:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258}],353:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78480,9 +79477,9 @@ module.exports = extendFlat({ }) ); -},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../contour/attributes":296,"../histogram2d/attributes":346}],353:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../lib/extend":164,"../contour/attributes":297,"../histogram2d/attributes":347}],354:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78517,9 +79514,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('hovertemplate'); }; -},{"../../lib":169,"../contour/contours_defaults":303,"../contour/style_defaults":317,"../histogram2d/sample_defaults":351,"./attributes":352}],354:[function(_dereq_,module,exports){ +},{"../../lib":169,"../contour/contours_defaults":304,"../contour/style_defaults":318,"../histogram2d/sample_defaults":352,"./attributes":353}],355:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78549,9 +79546,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"../contour/calc":297,"../contour/colorbar":299,"../contour/hover":309,"../contour/plot":314,"../contour/style":316,"../histogram/cross_trace_defaults":340,"./attributes":352,"./defaults":353}],355:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../contour/calc":298,"../contour/colorbar":300,"../contour/hover":310,"../contour/plot":315,"../contour/style":317,"../histogram/cross_trace_defaults":341,"./attributes":353,"./defaults":354}],356:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78661,9 +79658,9 @@ module.exports = extendFlat({ transforms: undefined }); -},{"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"./constants":357}],356:[function(_dereq_,module,exports){ +},{"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"./constants":358}],357:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78749,9 +79746,9 @@ function makeScaler(trace) { }; } -},{"../../lib":169,"../../plots/cartesian/axes":213,"./constants":357,"fast-isnumeric":18}],357:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213,"./constants":358,"fast-isnumeric":18}],358:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78799,9 +79796,9 @@ module.exports = { } }; -},{}],358:[function(_dereq_,module,exports){ +},{}],359:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78840,9 +79837,9 @@ module.exports = function supplyDefaults(traceIn, traceOut) { traceOut._length = null; }; -},{"../../lib":169,"./attributes":355,"./constants":357}],359:[function(_dereq_,module,exports){ +},{"../../lib":169,"./attributes":356,"./constants":358}],360:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78861,9 +79858,9 @@ module.exports = function eventData(out, pt) { return out; }; -},{}],360:[function(_dereq_,module,exports){ +},{}],361:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78953,9 +79950,9 @@ module.exports = function hoverPoints(pointData, xval, yval) { })]; }; -},{"../../components/fx":89,"../../lib":169,"./constants":357}],361:[function(_dereq_,module,exports){ +},{"../../components/fx":89,"../../lib":169,"./constants":358}],362:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -78983,9 +79980,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"./attributes":355,"./calc":356,"./defaults":358,"./event_data":359,"./hover":360,"./plot":362,"./style":363}],362:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./attributes":356,"./calc":357,"./defaults":359,"./event_data":360,"./hover":361,"./plot":363,"./style":364}],363:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79114,9 +80111,9 @@ module.exports = function plot(gd, plotinfo, cdimage, imageLayer) { }); }; -},{"../../constants/xmlns_namespaces":150,"../../lib":169,"./constants":357,"d3":16}],363:[function(_dereq_,module,exports){ +},{"../../constants/xmlns_namespaces":150,"../../lib":169,"./constants":358,"d3":16}],364:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79134,9 +80131,9 @@ module.exports = function style(gd) { }); }; -},{"d3":16}],364:[function(_dereq_,module,exports){ +},{"d3":16}],365:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79275,6 +80272,14 @@ module.exports = { textfont: extendFlat({}, textFontAttrs, { }), + insidetextorientation: { + valType: 'enumerated', + + values: ['horizontal', 'radial', 'tangential', 'auto'], + dflt: 'auto', + editType: 'plot', + + }, insidetextfont: extendFlat({}, textFontAttrs, { }), @@ -79397,9 +80402,9 @@ module.exports = { } }; -},{"../../components/color/attributes":50,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/domain":238,"../../plots/font_attributes":239,"../../plots/template_attributes":253}],365:[function(_dereq_,module,exports){ +},{"../../components/color/attributes":50,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/domain":238,"../../plots/font_attributes":239,"../../plots/template_attributes":253}],366:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79420,9 +80425,9 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) plots.cleanBasePlot(exports.name, newFullData, newFullLayout, oldFullData, oldFullLayout); }; -},{"../../plots/plots":245}],366:[function(_dereq_,module,exports){ +},{"../../plots/plots":245}],367:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79432,7 +80437,6 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) 'use strict'; var isNumeric = _dereq_('fast-isnumeric'); -var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray; var tinycolor = _dereq_('tinycolor2'); var Color = _dereq_('../../components/color'); @@ -79448,26 +80452,26 @@ function calc(gd, trace) { var labels = trace.labels; var colors = trace.marker.colors || []; var vals = trace.values; - var hasVals = isArrayOrTypedArray(vals) && vals.length; + var len = trace._length; + var hasValues = trace._hasValues && len; var i, pt; if(trace.dlabel) { - labels = new Array(vals.length); - for(i = 0; i < vals.length; i++) { + labels = new Array(len); + for(i = 0; i < len; i++) { labels[i] = String(trace.label0 + i * trace.dlabel); } } var allThisTraceLabels = {}; var pullColor = makePullColorFn(fullLayout['_' + trace.type + 'colormap']); - var seriesLen = (hasVals ? vals : labels).length; var vTotal = 0; var isAggregated = false; - for(i = 0; i < seriesLen; i++) { + for(i = 0; i < len; i++) { var v, label, hidden; - if(hasVals) { + if(hasValues) { v = vals[i]; if(!isNumeric(v)) continue; v = +v; @@ -79604,9 +80608,9 @@ module.exports = { generateExtendedColors: generateExtendedColors }; -},{"../../components/color":51,"../../lib":169,"fast-isnumeric":18,"tinycolor2":34}],367:[function(_dereq_,module,exports){ +},{"../../components/color":51,"fast-isnumeric":18,"tinycolor2":34}],368:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79615,26 +80619,57 @@ module.exports = { 'use strict'; +var isNumeric = _dereq_('fast-isnumeric'); var Lib = _dereq_('../../lib'); var attributes = _dereq_('./attributes'); var handleDomainDefaults = _dereq_('../../plots/domain').defaults; var handleText = _dereq_('../bar/defaults').handleText; -module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { +function handleLabelsAndValues(labels, values) { + var hasLabels = Array.isArray(labels); + var hasValues = Lib.isArrayOrTypedArray(values); + var len = Math.min( + hasLabels ? labels.length : Infinity, + hasValues ? values.length : Infinity + ); + + if(!isFinite(len)) len = 0; + + if(len && hasValues) { + var hasPositive; + for(var i = 0; i < len; i++) { + var v = values[i]; + if(isNumeric(v) && v > 0) { + hasPositive = true; + break; + } + } + if(!hasPositive) len = 0; + } + + return { + hasLabels: hasLabels, + hasValues: hasValues, + len: len + }; +} + +function supplyDefaults(traceIn, traceOut, defaultColor, layout) { function coerce(attr, dflt) { return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); } - var len; - var vals = coerce('values'); - var hasVals = Lib.isArrayOrTypedArray(vals); var labels = coerce('labels'); - if(Array.isArray(labels)) { - len = labels.length; - if(hasVals) len = Math.min(len, vals.length); - } else if(hasVals) { - len = vals.length; + var values = coerce('values'); + var res = handleLabelsAndValues(labels, values); + var len = res.len; + traceOut._hasLabels = res.hasLabels; + traceOut._hasValues = res.hasValues; + + if(!traceOut._hasLabels && + traceOut._hasValues + ) { coerce('label0'); coerce('dlabel'); } @@ -79677,6 +80712,10 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(hasOutside) { coerce('automargin'); } + + if(textposition === 'inside' || textposition === 'auto' || Array.isArray(textposition)) { + coerce('insidetextorientation'); + } } handleDomainDefaults(traceOut, layout, coerce); @@ -79693,11 +80732,16 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('direction'); coerce('rotation'); coerce('pull'); +} + +module.exports = { + handleLabelsAndValues: handleLabelsAndValues, + supplyDefaults: supplyDefaults }; -},{"../../lib":169,"../../plots/domain":238,"../bar/defaults":272,"./attributes":364}],368:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/domain":238,"../bar/defaults":272,"./attributes":365,"fast-isnumeric":18}],369:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79744,9 +80788,9 @@ module.exports = function eventData(pt, trace) { return out; }; -},{"../../components/fx/helpers":86}],369:[function(_dereq_,module,exports){ +},{"../../components/fx/helpers":86}],370:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79786,9 +80830,9 @@ exports.castOption = function castOption(item, indices) { else if(item) return item; }; -},{"../../lib":169}],370:[function(_dereq_,module,exports){ +},{"../../lib":169}],371:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79799,7 +80843,7 @@ exports.castOption = function castOption(item, indices) { module.exports = { attributes: _dereq_('./attributes'), - supplyDefaults: _dereq_('./defaults'), + supplyDefaults: _dereq_('./defaults').supplyDefaults, supplyLayoutDefaults: _dereq_('./layout_defaults'), layoutAttributes: _dereq_('./layout_attributes'), @@ -79819,9 +80863,9 @@ module.exports = { } }; -},{"./attributes":364,"./base_plot":365,"./calc":366,"./defaults":367,"./layout_attributes":371,"./layout_defaults":372,"./plot":373,"./style":374,"./style_one":375}],371:[function(_dereq_,module,exports){ +},{"./attributes":365,"./base_plot":366,"./calc":367,"./defaults":368,"./layout_attributes":372,"./layout_defaults":373,"./plot":374,"./style":375,"./style_one":376}],372:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79852,9 +80896,9 @@ module.exports = { } }; -},{}],372:[function(_dereq_,module,exports){ +},{}],373:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79877,9 +80921,9 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) { coerce('extendpiecolors'); }; -},{"../../lib":169,"./layout_attributes":371}],373:[function(_dereq_,module,exports){ +},{"../../lib":169,"./layout_attributes":372}],374:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -79896,6 +80940,9 @@ var Color = _dereq_('../../components/color'); var Drawing = _dereq_('../../components/drawing'); var Lib = _dereq_('../../lib'); var svgTextUtils = _dereq_('../../lib/svg_text_utils'); +var uniformText = _dereq_('../bar/uniform_text'); +var recordMinTextSize = uniformText.recordMinTextSize; +var clearMinTextSize = uniformText.clearMinTextSize; var helpers = _dereq_('./helpers'); var eventData = _dereq_('./event_data'); @@ -79905,6 +80952,8 @@ function plot(gd, cdModule) { var fullLayout = gd._fullLayout; var gs = fullLayout._size; + clearMinTextSize('pie', fullLayout); + prerenderTitles(cdModule, gd); layoutAreas(cdModule, gs); @@ -79932,7 +80981,7 @@ function plot(gd, cdModule) { ]; var hasOutsideText = false; - slices.each(function(pt) { + slices.each(function(pt, i) { if(pt.hidden) { d3.select(this).selectAll('path,g').remove(); return; @@ -80024,15 +81073,18 @@ function plot(gd, cdModule) { s.attr('data-notex', 1); }); + var font = Lib.ensureUniformFontSize(gd, textPosition === 'outside' ? + determineOutsideTextFont(trace, pt, fullLayout.font) : + determineInsideTextFont(trace, pt, fullLayout.font) + ); + sliceText.text(pt.text) .attr({ 'class': 'slicetext', transform: '', 'text-anchor': 'middle' }) - .call(Drawing.font, textPosition === 'outside' ? - determineOutsideTextFont(trace, pt, gd._fullLayout.font) : - determineInsideTextFont(trace, pt, gd._fullLayout.font)) + .call(Drawing.font, font) .call(svgTextUtils.convertToTspans, gd); // position the text relative to the slice @@ -80044,36 +81096,37 @@ function plot(gd, cdModule) { } else { transform = transformInsideText(textBB, pt, cd0); if(textPosition === 'auto' && transform.scale < 1) { - sliceText.call(Drawing.font, trace.outsidetextfont); - if(trace.outsidetextfont.family !== trace.insidetextfont.family || - trace.outsidetextfont.size !== trace.insidetextfont.size) { - textBB = Drawing.bBox(sliceText.node()); - } + var newFont = Lib.ensureUniformFontSize(gd, trace.outsidetextfont); + + sliceText.call(Drawing.font, newFont); + textBB = Drawing.bBox(sliceText.node()); + transform = transformOutsideText(textBB, pt); } } - var translateX = cx + pt.pxmid[0] * transform.rCenter + (transform.x || 0); - var translateY = cy + pt.pxmid[1] * transform.rCenter + (transform.y || 0); + var textPosAngle = transform.textPosAngle; + var textXY = textPosAngle === undefined ? pt.pxmid : getCoords(cd0.r, textPosAngle); + transform.targetX = cx + textXY[0] * transform.rCenter + (transform.x || 0); + transform.targetY = cy + textXY[1] * transform.rCenter + (transform.y || 0); + computeTransform(transform, textBB); // save some stuff to use later ensure no labels overlap if(transform.outside) { - pt.yLabelMin = translateY - textBB.height / 2; - pt.yLabelMid = translateY; - pt.yLabelMax = translateY + textBB.height / 2; + var targetY = transform.targetY; + pt.yLabelMin = targetY - textBB.height / 2; + pt.yLabelMid = targetY; + pt.yLabelMax = targetY + textBB.height / 2; pt.labelExtraX = 0; pt.labelExtraY = 0; hasOutsideText = true; } - sliceText.attr('transform', - 'translate(' + translateX + ',' + translateY + ')' + - (transform.scale < 1 ? ('scale(' + transform.scale + ')') : '') + - (transform.rotate ? ('rotate(' + transform.rotate + ')') : '') + - 'translate(' + - (-(textBB.left + textBB.right) / 2) + ',' + - (-(textBB.top + textBB.bottom) / 2) + - ')'); + transform.fontSize = font.size; + recordMinTextSize(trace.type, transform, fullLayout); + cd[i].transform = transform; + + sliceText.attr('transform', Lib.getTextTransform(transform)); }); }); @@ -80178,8 +81231,10 @@ function plotTextLines(slices, trace) { // first move the text to its new location var sliceText = sliceTop.select('g.slicetext text'); - sliceText.attr('transform', 'translate(' + pt.labelExtraX + ',' + pt.labelExtraY + ')' + - sliceText.attr('transform')); + pt.transform.targetX += pt.labelExtraX; + pt.transform.targetY += pt.labelExtraY; + + sliceText.attr('transform', Lib.getTextTransform(pt.transform)); // then add a line to the new location var lineStartX = pt.cxFinal + pt.pxmid[0]; @@ -80429,59 +81484,150 @@ function prerenderTitles(cdModule, gd) { function transformInsideText(textBB, pt, cd0) { var textDiameter = Math.sqrt(textBB.width * textBB.width + textBB.height * textBB.height); - var textAspect = textBB.width / textBB.height; var halfAngle = pt.halfangle; + var midAngle = pt.midangle; var ring = pt.ring; var rInscribed = pt.rInscribed; var r = cd0.r || pt.rpx1; + var orientation = cd0.trace.insidetextorientation; + var isHorizontal = orientation === 'horizontal'; + var isTangential = orientation === 'tangential'; + var isRadial = orientation === 'radial'; + var isAuto = orientation === 'auto'; + var isCircle = (ring === 1) && (Math.abs(pt.startangle - pt.stopangle) === Math.PI * 2); + var allTransforms = []; + var newT; - // max size text can be inserted inside without rotating it - // this inscribes the text rectangle in a circle, which is then inscribed - // in the slice, so it will be an underestimate, which some day we may want - // to improve so this case can get more use - var transform = { - scale: rInscribed * r * 2 / textDiameter, + if(!isAuto) { + // max size if text is placed (horizontally) at the top or bottom of the arc - // and the center position and rotation in this case - rCenter: 1 - rInscribed, - rotate: 0 - }; + var considerCrossing = function(angle, key) { + if(isCrossing(pt, angle)) { + var dStart = Math.abs(angle - pt.startangle); + var dStop = Math.abs(angle - pt.stopangle); - if(transform.scale >= 1) return transform; + var closestEdge = dStart < dStop ? dStart : dStop; + if(key === 'tan') { + newT = calcTanTransform(textBB, r, ring, closestEdge, 0); + } else { // case of 'rad' + newT = calcRadTransform(textBB, r, ring, closestEdge, Math.PI / 2); + } + newT.textPosAngle = angle; + + allTransforms.push(newT); + } + }; + + // to cover all cases with trace.rotation added + var i; + if(isHorizontal || isTangential) { + // top + for(i = 4; i >= -4; i -= 2) considerCrossing(Math.PI * i, 'tan'); + // bottom + for(i = 4; i >= -4; i -= 2) considerCrossing(Math.PI * (i + 1), 'tan'); + } + if(isHorizontal || isRadial) { + // left + for(i = 4; i >= -4; i -= 2) considerCrossing(Math.PI * (i + 1.5), 'rad'); + // right + for(i = 4; i >= -4; i -= 2) considerCrossing(Math.PI * (i + 0.5), 'rad'); + } + } + + if(isCircle || isAuto || isHorizontal) { + // max size text can be inserted inside without rotating it + // this inscribes the text rectangle in a circle, which is then inscribed + // in the slice, so it will be an underestimate, which some day we may want + // to improve so this case can get more use + newT = { + scale: rInscribed * r * 2 / textDiameter, + + // and the center position and rotation in this case + rCenter: 1 - rInscribed, + rotate: 0 + }; + + newT.textPosAngle = (pt.startangle + pt.stopangle) / 2; + if(newT.scale >= 1) return newT; + + allTransforms.push(newT); + } + + if(isAuto || isRadial) { + newT = calcRadTransform(textBB, r, ring, halfAngle, midAngle); + newT.textPosAngle = (pt.startangle + pt.stopangle) / 2; + allTransforms.push(newT); + } + + if(isAuto || isTangential) { + newT = calcTanTransform(textBB, r, ring, halfAngle, midAngle); + newT.textPosAngle = (pt.startangle + pt.stopangle) / 2; + allTransforms.push(newT); + } + + var id = 0; + var maxScale = 0; + for(var k = 0; k < allTransforms.length; k++) { + var s = allTransforms[k].scale; + if(maxScale < s) { + maxScale = s; + id = k; + } + + if(!isAuto && maxScale >= 1) { + // respect test order for non-auto options + break; + } + } + return allTransforms[id]; +} + +function isCrossing(pt, angle) { + var start = pt.startangle; + var stop = pt.stopangle; + return ( + (start > angle && angle > stop) || + (start < angle && angle < stop) + ); +} + +function calcRadTransform(textBB, r, ring, halfAngle, midAngle) { // max size if text is rotated radially - var Qr = textAspect + 1 / (2 * Math.tan(halfAngle)); - var maxHalfHeightRotRadial = r * Math.min( - 1 / (Math.sqrt(Qr * Qr + 0.5) + Qr), - ring / (Math.sqrt(textAspect * textAspect + ring / 2) + textAspect) - ); - var radialTransform = { - scale: maxHalfHeightRotRadial * 2 / textBB.height, - rCenter: Math.cos(maxHalfHeightRotRadial / r) - - maxHalfHeightRotRadial * textAspect / r, - rotate: (180 / Math.PI * pt.midangle + 720) % 180 - 90 + var a = textBB.width / textBB.height; + var s = calcMaxHalfSize(a, halfAngle, r, ring); + return { + scale: s * 2 / textBB.height, + rCenter: calcRCenter(a, s / r), + rotate: calcRotate(midAngle) }; +} +function calcTanTransform(textBB, r, ring, halfAngle, midAngle) { // max size if text is rotated tangentially - var aspectInv = 1 / textAspect; - var Qt = aspectInv + 1 / (2 * Math.tan(halfAngle)); - var maxHalfWidthTangential = r * Math.min( - 1 / (Math.sqrt(Qt * Qt + 0.5) + Qt), - ring / (Math.sqrt(aspectInv * aspectInv + ring / 2) + aspectInv) - ); - var tangentialTransform = { - scale: maxHalfWidthTangential * 2 / textBB.width, - rCenter: Math.cos(maxHalfWidthTangential / r) - - maxHalfWidthTangential / textAspect / r, - rotate: (180 / Math.PI * pt.midangle + 810) % 180 - 90 + var a = textBB.height / textBB.width; + var s = calcMaxHalfSize(a, halfAngle, r, ring); + return { + scale: s * 2 / textBB.width, + rCenter: calcRCenter(a, s / r), + rotate: calcRotate(midAngle + Math.PI / 2) }; - // if we need a rotated transform, pick the biggest one - // even if both are bigger than 1 - var rotatedTransform = tangentialTransform.scale > radialTransform.scale ? - tangentialTransform : radialTransform; +} - if(transform.scale < 1 && rotatedTransform.scale > transform.scale) return rotatedTransform; - return transform; +function calcRCenter(a, b) { + return Math.cos(b) - a * b; +} + +function calcRotate(t) { + return (180 / Math.PI * t + 720) % 180 - 90; +} + +function calcMaxHalfSize(a, halfAngle, r, ring) { + var q = a + 1 / (2 * Math.tan(halfAngle)); + return r * Math.min( + 1 / (Math.sqrt(q * q + 0.5) + q), + ring / (Math.sqrt(a * a + ring / 2) + a) + ); } function getInscribedRadiusFraction(pt, cd0) { @@ -80801,6 +81947,7 @@ function groupScale(cdModule, scaleGroups) { function setCoords(cd) { var cd0 = cd[0]; + var r = cd0.r; var trace = cd0.trace; var currentAngle = trace.rotation * Math.PI / 180; var angleFactor = 2 * Math.PI / cd0.vTotal; @@ -80821,11 +81968,7 @@ function setCoords(cd) { lastPt = 'px0'; } - function getCoords(angle) { - return [cd0.r * Math.sin(angle), -cd0.r * Math.cos(angle)]; - } - - currentCoords = getCoords(currentAngle); + currentCoords = getCoords(r, currentAngle); for(i = 0; i < cd.length; i++) { cdi = cd[i]; @@ -80833,12 +81976,13 @@ function setCoords(cd) { cdi[firstPt] = currentCoords; + cdi.startangle = currentAngle; currentAngle += angleFactor * cdi.v / 2; - cdi.pxmid = getCoords(currentAngle); + cdi.pxmid = getCoords(r, currentAngle); cdi.midangle = currentAngle; - currentAngle += angleFactor * cdi.v / 2; - currentCoords = getCoords(currentAngle); + currentCoords = getCoords(r, currentAngle); + cdi.stopangle = currentAngle; cdi[lastPt] = currentCoords; @@ -80850,6 +81994,10 @@ function setCoords(cd) { } } +function getCoords(r, angle) { + return [r * Math.sin(angle), -r * Math.cos(angle)]; +} + function formatSliceLabel(gd, pt, cd0) { var fullLayout = gd._fullLayout; var trace = cd0.trace; @@ -80904,6 +82052,25 @@ function formatSliceLabel(gd, pt, cd0) { } } } + +function computeTransform( + transform, // inout + textBB // in +) { + var rotate = transform.rotate; + var scale = transform.scale; + if(scale > 1) scale = 1; + + var a = rotate * Math.PI / 180; + var cosA = Math.cos(a); + var sinA = Math.sin(a); + var midX = (textBB.left + textBB.right) / 2; + var midY = (textBB.top + textBB.bottom) / 2; + transform.textX = midX * cosA - midY * sinA; + transform.textY = midX * sinA + midY * cosA; + transform.noCenter = true; +} + module.exports = { plot: plot, formatSliceLabel: formatSliceLabel, @@ -80913,11 +82080,12 @@ module.exports = { prerenderTitles: prerenderTitles, layoutAreas: layoutAreas, attachFxHandlers: attachFxHandlers, + computeTransform: computeTransform }; -},{"../../components/color":51,"../../components/drawing":72,"../../components/fx":89,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/plots":245,"./event_data":368,"./helpers":369,"d3":16}],374:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/drawing":72,"../../components/fx":89,"../../lib":169,"../../lib/svg_text_utils":190,"../../plots/plots":245,"../bar/uniform_text":284,"./event_data":369,"./helpers":370,"d3":16}],375:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -80929,9 +82097,13 @@ module.exports = { var d3 = _dereq_('d3'); var styleOne = _dereq_('./style_one'); +var resizeText = _dereq_('../bar/uniform_text').resizeText; module.exports = function style(gd) { - gd._fullLayout._pielayer.selectAll('.trace').each(function(cd) { + var s = gd._fullLayout._pielayer.selectAll('.trace'); + resizeText(gd, s, 'pie'); + + s.each(function(cd) { var cd0 = cd[0]; var trace = cd0.trace; var traceSelection = d3.select(this); @@ -80944,9 +82116,9 @@ module.exports = function style(gd) { }); }; -},{"./style_one":375,"d3":16}],375:[function(_dereq_,module,exports){ +},{"../bar/uniform_text":284,"./style_one":376,"d3":16}],376:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -80968,9 +82140,9 @@ module.exports = function styleOne(s, pt, trace) { .call(Color.stroke, lineColor); }; -},{"../../components/color":51,"./helpers":369}],376:[function(_dereq_,module,exports){ +},{"../../components/color":51,"./helpers":370}],377:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81020,9 +82192,9 @@ module.exports = function arraysToCalcdata(cd, trace) { } }; -},{"../../lib":169}],377:[function(_dereq_,module,exports){ +},{"../../lib":169}],378:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81434,9 +82606,9 @@ module.exports = { } }; -},{"../../components/colorscale/attributes":58,"../../components/drawing":72,"../../components/drawing/attributes":71,"../../lib/extend":164,"../../plots/font_attributes":239,"../../plots/template_attributes":253,"./constants":381}],378:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../components/drawing":72,"../../components/drawing/attributes":71,"../../lib/extend":164,"../../plots/font_attributes":239,"../../plots/template_attributes":253,"./constants":382}],379:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81719,9 +82891,9 @@ module.exports = { getStackOpts: getStackOpts }; -},{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"./arrays_to_calcdata":376,"./calc_selection":379,"./colorscale_calc":380,"./subtypes":401,"fast-isnumeric":18}],379:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"./arrays_to_calcdata":377,"./calc_selection":380,"./colorscale_calc":381,"./subtypes":402,"fast-isnumeric":18}],380:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81738,9 +82910,9 @@ module.exports = function calcSelection(cd, trace) { } }; -},{"../../lib":169}],380:[function(_dereq_,module,exports){ +},{"../../lib":169}],381:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81781,9 +82953,9 @@ module.exports = function calcMarkerColorscale(gd, trace) { } }; -},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"./subtypes":401}],381:[function(_dereq_,module,exports){ +},{"../../components/colorscale/calc":59,"../../components/colorscale/helpers":62,"./subtypes":402}],382:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81810,9 +82982,9 @@ module.exports = { eventDataKeys: [] }; -},{}],382:[function(_dereq_,module,exports){ +},{}],383:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -81991,9 +83163,9 @@ function getInterp(calcTrace, index, position, posAttr) { return pt0.s + (pt1.s - pt0.s) * (position - pt0[posAttr]) / (pt1[posAttr] - pt0[posAttr]); } -},{"./calc":378}],383:[function(_dereq_,module,exports){ +},{"./calc":379}],384:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82030,9 +83202,9 @@ module.exports = function crossTraceDefaults(fullData) { } }; -},{}],384:[function(_dereq_,module,exports){ +},{}],385:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82120,9 +83292,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout Lib.coerceSelectionMarkerOpacity(traceOut, coerce); }; -},{"../../lib":169,"../../registry":258,"./attributes":377,"./constants":381,"./fillcolor_defaults":385,"./line_defaults":390,"./line_shape_defaults":392,"./marker_defaults":396,"./stack_defaults":399,"./subtypes":401,"./text_defaults":402,"./xy_defaults":403}],385:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258,"./attributes":378,"./constants":382,"./fillcolor_defaults":386,"./line_defaults":391,"./line_shape_defaults":393,"./marker_defaults":397,"./stack_defaults":400,"./subtypes":402,"./text_defaults":403,"./xy_defaults":404}],386:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82157,9 +83329,9 @@ module.exports = function fillColorDefaults(traceIn, traceOut, defaultColor, coe )); }; -},{"../../components/color":51,"../../lib":169}],386:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":169}],387:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82183,9 +83355,9 @@ module.exports = function formatLabels(cdi, trace, fullLayout) { return labels; }; -},{"../../plots/cartesian/axes":213}],387:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":213}],388:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82232,9 +83404,9 @@ module.exports = function getTraceColor(trace, di) { } }; -},{"../../components/color":51,"./subtypes":401}],388:[function(_dereq_,module,exports){ +},{"../../components/color":51,"./subtypes":402}],389:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82427,9 +83599,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { } }; -},{"../../components/color":51,"../../components/fx":89,"../../lib":169,"../../registry":258,"./get_trace_color":387}],389:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/fx":89,"../../lib":169,"../../registry":258,"./get_trace_color":388}],390:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82473,9 +83645,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"./arrays_to_calcdata":376,"./attributes":377,"./calc":378,"./cross_trace_calc":382,"./cross_trace_defaults":383,"./defaults":384,"./format_labels":386,"./hover":388,"./marker_colorbar":395,"./plot":397,"./select":398,"./style":400,"./subtypes":401}],390:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"./arrays_to_calcdata":377,"./attributes":378,"./calc":379,"./cross_trace_calc":383,"./cross_trace_defaults":384,"./defaults":385,"./format_labels":387,"./hover":389,"./marker_colorbar":396,"./plot":398,"./select":399,"./style":401,"./subtypes":402}],391:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82504,9 +83676,9 @@ module.exports = function lineDefaults(traceIn, traceOut, defaultColor, layout, if(!(opts || {}).noDash) coerce('line.dash'); }; -},{"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"../../lib":169}],391:[function(_dereq_,module,exports){ +},{"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"../../lib":169}],392:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82965,9 +84137,9 @@ module.exports = function linePoints(d, opts) { return segments; }; -},{"../../constants/numerical":149,"../../lib":169,"./constants":381}],392:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":169,"./constants":382}],393:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -82984,9 +84156,9 @@ module.exports = function handleLineShapeDefaults(traceIn, traceOut, coerce) { if(shape === 'spline') coerce('line.smoothing'); }; -},{}],393:[function(_dereq_,module,exports){ +},{}],394:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83074,9 +84246,9 @@ module.exports = function linkTraces(gd, plotinfo, cdscatter) { return cdscatterSorted; }; -},{}],394:[function(_dereq_,module,exports){ +},{}],395:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83116,9 +84288,9 @@ module.exports = function makeBubbleSizeFn(trace) { }; }; -},{"fast-isnumeric":18}],395:[function(_dereq_,module,exports){ +},{"fast-isnumeric":18}],396:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83134,9 +84306,9 @@ module.exports = { max: 'cmax' }; -},{}],396:[function(_dereq_,module,exports){ +},{}],397:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83215,9 +84387,9 @@ module.exports = function markerDefaults(traceIn, traceOut, defaultColor, layout } }; -},{"../../components/color":51,"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"./subtypes":401}],397:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../components/colorscale/defaults":61,"../../components/colorscale/helpers":62,"./subtypes":402}],398:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83776,9 +84948,9 @@ function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) { }); } -},{"../../components/drawing":72,"../../lib":169,"../../lib/polygon":181,"../../registry":258,"./line_points":391,"./link_traces":393,"./subtypes":401,"d3":16}],398:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":169,"../../lib/polygon":181,"../../registry":258,"./line_points":392,"./link_traces":394,"./subtypes":402,"d3":16}],399:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83830,9 +85002,9 @@ module.exports = function selectPoints(searchInfo, selectionTester) { return selection; }; -},{"./subtypes":401}],399:[function(_dereq_,module,exports){ +},{"./subtypes":402}],400:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -83935,9 +85107,9 @@ module.exports = function handleStackDefaults(traceIn, traceOut, layout, coerce) } }; -},{}],400:[function(_dereq_,module,exports){ +},{}],401:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84006,9 +85178,9 @@ module.exports = { styleOnSelect: styleOnSelect }; -},{"../../components/drawing":72,"../../registry":258,"d3":16}],401:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../registry":258,"d3":16}],402:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84045,9 +85217,9 @@ module.exports = { } }; -},{"../../lib":169}],402:[function(_dereq_,module,exports){ +},{"../../lib":169}],403:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84075,9 +85247,9 @@ module.exports = function(traceIn, traceOut, layout, coerce, opts) { } }; -},{"../../lib":169}],403:[function(_dereq_,module,exports){ +},{"../../lib":169}],404:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84119,9 +85291,9 @@ module.exports = function handleXYDefaults(traceIn, traceOut, layout, coerce) { return len; }; -},{"../../lib":169,"../../registry":258}],404:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../registry":258}],405:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84227,9 +85399,9 @@ module.exports = { hovertemplate: hovertemplateAttrs(), }; -},{"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"../scatter/attributes":377}],405:[function(_dereq_,module,exports){ +},{"../../components/colorscale/attributes":58,"../../components/drawing/attributes":71,"../../lib/extend":164,"../../plots/attributes":210,"../../plots/template_attributes":253,"../scatter/attributes":378}],406:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84308,9 +85480,9 @@ module.exports = function calc(gd, trace) { return cd; }; -},{"../scatter/arrays_to_calcdata":376,"../scatter/calc":378,"../scatter/calc_selection":379,"../scatter/colorscale_calc":380,"fast-isnumeric":18}],406:[function(_dereq_,module,exports){ +},{"../scatter/arrays_to_calcdata":377,"../scatter/calc":379,"../scatter/calc_selection":380,"../scatter/colorscale_calc":381,"fast-isnumeric":18}],407:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84412,9 +85584,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout Lib.coerceSelectionMarkerOpacity(traceOut, coerce); }; -},{"../../lib":169,"../scatter/constants":381,"../scatter/fillcolor_defaults":385,"../scatter/line_defaults":390,"../scatter/line_shape_defaults":392,"../scatter/marker_defaults":396,"../scatter/subtypes":401,"../scatter/text_defaults":402,"./attributes":404}],407:[function(_dereq_,module,exports){ +},{"../../lib":169,"../scatter/constants":382,"../scatter/fillcolor_defaults":386,"../scatter/line_defaults":391,"../scatter/line_shape_defaults":393,"../scatter/marker_defaults":397,"../scatter/subtypes":402,"../scatter/text_defaults":403,"./attributes":405}],408:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84444,9 +85616,9 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) { return out; }; -},{}],408:[function(_dereq_,module,exports){ +},{}],409:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84468,9 +85640,9 @@ module.exports = function formatLabels(cdi, trace, fullLayout) { return labels; }; -},{"../../plots/cartesian/axes":213}],409:[function(_dereq_,module,exports){ +},{"../../plots/cartesian/axes":213}],410:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84542,9 +85714,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { return scatterPointData; }; -},{"../scatter/hover":388}],410:[function(_dereq_,module,exports){ +},{"../scatter/hover":389}],411:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84576,9 +85748,9 @@ module.exports = { } }; -},{"../../plots/ternary":254,"../scatter/marker_colorbar":395,"../scatter/select":398,"../scatter/style":400,"./attributes":404,"./calc":405,"./defaults":406,"./event_data":407,"./format_labels":408,"./hover":409,"./plot":411}],411:[function(_dereq_,module,exports){ +},{"../../plots/ternary":254,"../scatter/marker_colorbar":396,"../scatter/select":399,"../scatter/style":401,"./attributes":405,"./calc":406,"./defaults":407,"./event_data":408,"./format_labels":409,"./hover":410,"./plot":412}],412:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84609,9 +85781,9 @@ module.exports = function plot(gd, ternary, moduleCalcData) { scatterPlot(gd, plotinfo, moduleCalcData, scatterLayer); }; -},{"../scatter/plot":397}],412:[function(_dereq_,module,exports){ +},{"../scatter/plot":398}],413:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84808,9 +85980,9 @@ module.exports = { } }; -},{"../../lib/extend":164,"../box/attributes":284}],413:[function(_dereq_,module,exports){ +},{"../../lib/extend":164,"../box/attributes":285}],414:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -84984,9 +86156,9 @@ function calcSpan(trace, cdi, valAxis, bandwidth) { return spanOut; } -},{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"../box/calc":285,"./helpers":416}],414:[function(_dereq_,module,exports){ +},{"../../constants/numerical":149,"../../lib":169,"../../plots/cartesian/axes":213,"../box/calc":286,"./helpers":417}],415:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85027,9 +86199,9 @@ module.exports = function crossTraceCalc(gd, plotinfo) { } }; -},{"../box/cross_trace_calc":286}],415:[function(_dereq_,module,exports){ +},{"../box/cross_trace_calc":287}],416:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85088,9 +86260,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(!meanLineVisible) traceOut.meanline = {visible: false}; }; -},{"../../components/color":51,"../../lib":169,"../box/defaults":287,"./attributes":412}],416:[function(_dereq_,module,exports){ +},{"../../components/color":51,"../../lib":169,"../box/defaults":288,"./attributes":413}],417:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85161,9 +86333,9 @@ exports.getKdeValue = function(calcItem, trace, valueDist) { exports.extractVal = function(o) { return o.v; }; -},{"../../lib":169}],417:[function(_dereq_,module,exports){ +},{"../../lib":169}],418:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85273,9 +86445,9 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay return closeData; }; -},{"../../lib":169,"../../plots/cartesian/axes":213,"../box/hover":289,"./helpers":416}],418:[function(_dereq_,module,exports){ +},{"../../lib":169,"../../plots/cartesian/axes":213,"../box/hover":290,"./helpers":417}],419:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85307,9 +86479,9 @@ module.exports = { } }; -},{"../../plots/cartesian":224,"../box/defaults":287,"../box/select":294,"../scatter/style":400,"./attributes":412,"./calc":413,"./cross_trace_calc":414,"./defaults":415,"./hover":417,"./layout_attributes":419,"./layout_defaults":420,"./plot":421,"./style":422}],419:[function(_dereq_,module,exports){ +},{"../../plots/cartesian":224,"../box/defaults":288,"../box/select":295,"../scatter/style":401,"./attributes":413,"./calc":414,"./cross_trace_calc":415,"./defaults":416,"./hover":418,"./layout_attributes":420,"./layout_defaults":421,"./plot":422,"./style":423}],420:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85333,9 +86505,9 @@ module.exports = { }) }; -},{"../../lib":169,"../box/layout_attributes":291}],420:[function(_dereq_,module,exports){ +},{"../../lib":169,"../box/layout_attributes":292}],421:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85355,9 +86527,9 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { boxLayoutDefaults._supply(layoutIn, layoutOut, fullData, coerce, 'violin'); }; -},{"../../lib":169,"../box/layout_defaults":292,"./layout_attributes":419}],421:[function(_dereq_,module,exports){ +},{"../../lib":169,"../box/layout_defaults":293,"./layout_attributes":420}],422:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85545,9 +86717,9 @@ module.exports = function plot(gd, plotinfo, cdViolins, violinLayer) { }); }; -},{"../../components/drawing":72,"../../lib":169,"../box/plot":293,"../scatter/line_points":391,"./helpers":416,"d3":16}],422:[function(_dereq_,module,exports){ +},{"../../components/drawing":72,"../../lib":169,"../box/plot":294,"../scatter/line_points":392,"./helpers":417,"d3":16}],423:[function(_dereq_,module,exports){ /** -* Copyright 2012-2019, Plotly, Inc. +* Copyright 2012-2020, Plotly, Inc. * All rights reserved. * * This source code is licensed under the MIT license found in the @@ -85600,11 +86772,11 @@ module.exports = function style(gd) { }); }; -},{"../../components/color":51,"../scatter/style":400,"d3":16}]},{},[11])(11) +},{"../../components/color":51,"../scatter/style":401,"d3":16}]},{},[11])(11) }); -Plotly.register({moduleType:"locale",name:"de",dictionary:{Autoscale:"Automatische Skalierung","Box Select":"Rechteckauswahl","Click to enter Colorscale title":"Klicken, um den Farbskalatitel einzugeben","Click to enter Component A title":"Klicken, um den Titel der Komponente A einzugeben","Click to enter Component B title":"Klicken, um den Titel der Komponente B einzugeben","Click to enter Component C title":"Klicken, um den Titel der Komponente C einzugeben","Click to enter Plot title":"Klicken, um den Titel des Graphen einzugeben","Click to enter X axis title":"Klicken, um den Titel der X-Achse einzugeben","Click to enter Y axis title":"Klicken, um den Titel der Y-Achse einzugeben","Compare data on hover":"\xdcber die Daten fahren, um sie zu vergleichen","Double-click on legend to isolate one trace":"Daten isolieren durch Doppelklick in der Legende","Double-click to zoom back out":"Herauszoomen durch Doppelklick","Download plot as a png":"Graphen als PNG herunterladen","Download plot":"Graphen herunterladen","Edit in Chart Studio":"Im Chart Studio bearbeiten","IE only supports svg. Changing format to svg.":"IE unterst\xfctzt nur SVG-Dateien. Format wird zu SVG gewechselt.","Lasso Select":"Lassoauswahl","Orbital rotation":"Orbitalrotation",Pan:"Verschieben","Produced with Plotly":"Erstellt mit Plotly",Reset:"Zur\xfccksetzen","Reset axes":"Achsen zur\xfccksetzen","Reset camera to default":"Kamera auf Standard zur\xfccksetzen","Reset camera to last save":"Kamera auf letzte Speicherung zur\xfccksetzen","Reset view":"Ansicht zur\xfccksetzen","Reset views":"Ansichten zur\xfccksetzen","Show closest data on hover":"Zeige n\xe4heste Daten beim \xdcberfahren","Snapshot succeeded":"Snapshot erfolgreich","Sorry, there was a problem downloading your snapshot!":"Es gab ein Problem beim Herunterladen des Snapshots","Taking snapshot - this may take a few seconds":"Erstelle einen Snapshot - dies kann einige Sekunden dauern",Zoom:"Zoom","Zoom in":"Hineinzoomen","Zoom out":"Herauszoomen","close:":"Schluss:",trace:"Datenspur","lat:":"Lat.:","lon:":"Lon.:","q1:":"q1:","q3:":"q3:","source:":"Quelle:","target:":"Ziel:","lower fence:":"Untere Schranke:","upper fence:":"Obere Schranke:","max:":"Max.:","mean \xb1 \u03c3:":"Mittelwert \xb1 \u03c3:","mean:":"Mittelwert:","median:":"Median:","min:":"Min.:","Turntable rotation":"Drehscheibenorbit","Toggle Spike Lines":"Bezugslinien an-/abschalten","open:":"Er\xf6ffnung:","high:":"H\xf6chstkurs:","low:":"Tiefstkurs:","Toggle show closest data on hover":"Anzeige der n\xe4hesten Daten an-/abschalten","incoming flow count:":"Anzahl eingehender Verbindungen:","outgoing flow count:":"Anzahl ausgehender Verbindungen:","kde:":"Dichte:"},format:{days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],shortDays:["So","Mo","Di","Mi","Do","Fr","Sa"],months:["Januar","Februar","M\xe4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],shortMonths:["Jan","Feb","M\xe4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],date:"%d.%m.%Y",decimal:",",thousands:"."}}); -Plotly.register({moduleType:"locale",name:"es",dictionary:{Autoscale:"Autoescalar","Box Select":"Seleccionar Caja","Click to enter Colorscale title":"Introducir el t\xedtulo de la Escala de Color","Click to enter Component A title":"Introducir el t\xedtulo del Componente A","Click to enter Component B title":"Introducir el t\xedtulo del Componente B","Click to enter Component C title":"Introducir el t\xedtulo del Componente C","Click to enter Plot title":"Introducir el t\xedtulo de la Gr\xe1fica","Click to enter X axis title":"Introducir el t\xedtulo del eje X","Click to enter Y axis title":"Introducir el t\xedtulo del eje Y","Click to enter radial axis title":"Introducir el t\xedtulo del eje radial","Compare data on hover":"Comparar datos al pasar por encima","Double-click on legend to isolate one trace":"Haga doble-clic en la leyenda para aislar una traza","Double-click to zoom back out":"Haga doble-clic para restaurar la escala","Download plot as a png":"Descargar gr\xe1fica como png","Download plot":"Descargar gr\xe1fica","Edit in Chart Studio":"Editar en Chart Studio","IE only supports svg. Changing format to svg.":"IE solo soporta svg. Cambiando formato a svg.","Lasso Select":"Seleccionar con lazo","Orbital rotation":"Rotaci\xf3n esf\xe9rica",Pan:"Modo Panor\xe1mica","Produced with Plotly":"Hecho con Plotly",Reset:"Reiniciar","Reset axes":"Reiniciar ejes","Reset camera to default":"Restaurar c\xe1mara predeterminada","Reset camera to last save":"Restaurar anterior c\xe1mara","Reset view":"Restaurar vista","Reset views":"Restaurar vistas","Show closest data on hover":"Mostrar el dato m\xe1s cercano al pasar por encima","Snapshot succeeded":"La captura de la instant\xe1nea finaliz\xf3 correctamente","Sorry, there was a problem downloading your snapshot!":"\xa1La descarga de la instant\xe1nea fall\xf3!","Taking snapshot - this may take a few seconds":"Capturando una instant\xe1nea - podr\xeda tardar unos segundos","Toggle Spike Lines":"Mostrar/Ocultar Gu\xedas","Toggle show closest data on hover":"Activar/Desactivar mostrar el dato m\xe1s cercano al pasar por encima","Turntable rotation":"Rotaci\xf3n plana",Zoom:"Modo Ampliar/Reducir","Zoom in":"Ampliar","Zoom out":"Reducir","close:":"cierre:","high:":"alza:","incoming flow count:":"flujo de entrada:","kde:":"edp:","lat:":"lat:","lon:":"lon:","low:":"baja:","lower fence:":"l\xedmite inferior:","max:":"m\xe1x:","mean \xb1 \u03c3:":"media \xb1 \u03c3:","mean:":"media:","median:":"mediana:","min:":"m\xedn:","new text":"nuevo texto","open:":"apertura:","outgoing flow count:":"flujo de salida:","q1:":"q1:","q3:":"q3:","source:":"fuente:","target:":"destino:",trace:"traza","upper fence:":"l\xedmite superior:"},format:{days:["Domingo","Lunes","Martes","Mi\xe9rcoles","Jueves","Viernes","S\xe1bado"],shortDays:["Dom","Lun","Mar","Mi\xe9","Jue","Vie","S\xe1b"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],shortMonths:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],date:"%d/%m/%Y",decimal:",",thousands:" "}}); -Plotly.register({moduleType:"locale",name:"fr",dictionary:{Autoscale:"\xc9chelle automatique","Box Select":"S\xe9lection rectangulaire","Click to enter Colorscale title":"Ajouter un titre \xe0 l'\xe9chelle de couleurs","Click to enter Component A title":"Ajouter un titre \xe0 la composante A","Click to enter Component B title":"Ajouter un titre \xe0 la composante B","Click to enter Component C title":"Ajouter un titre \xe0 la composante C","Click to enter Plot title":"Ajouter un titre au graphique","Click to enter X axis title":"Ajouter un titre \xe0 l'axe des x","Click to enter Y axis title":"Ajouter un titre \xe0 l'axe des y","Click to enter radial axis title":"Ajouter un titre \xe0 l'axe radial","Compare data on hover":"Comparaison entre donn\xe9es en survol","Double-click on legend to isolate one trace":"Double-cliquer sur la l\xe9gende pour isoler une s\xe9rie","Double-click to zoom back out":"Double-cliquer pour d\xe9zoomer","Download plot as a png":"T\xe9l\xe9charger le graphique en fichier PNG","Download plot":"T\xe9l\xe9charger le graphique","Edit in Chart Studio":"\xc9diter le graphique sur plot.ly","IE only supports svg. Changing format to svg.":"IE ne permet que les conversions en SVG. Conversion en SVG en cours.","Lasso Select":"S\xe9lection lasso","Orbital rotation":"Rotation orbitale",Pan:"Translation","Produced with Plotly":"G\xe9n\xe9r\xe9 avec Plotly",Reset:"R\xe9initialiser","Reset axes":"R\xe9initialiser les axes","Reset camera to default":"R\xe9gler la cam\xe9ra \xe0 sa valeur d\xe9faut","Reset camera to last save":"R\xe9gler la cam\xe9ra \xe0 sa valeur sauvegard\xe9e","Reset view":"R\xe9initialiser","Reset views":"R\xe9initialiser","Show closest data on hover":"Donn\xe9es les plus proches en survol","Snapshot succeeded":"Conversion r\xe9ussie","Sorry, there was a problem downloading your snapshot!":"D\xe9sol\xe9, un probl\xe8me est survenu lors du t\xe9l\xe9chargement de votre graphique","Taking snapshot - this may take a few seconds":"Conversion en cours, ceci peut prendre quelques secondes",Zoom:"Zoom","Zoom in":"Zoom int\xe9rieur","Zoom out":"Zoom ext\xe9rieur","close:":"fermeture :",trace:"s\xe9rie","lat:":"lat. :","lon:":"lon. :","q1:":"q1 :","q3:":"q3 :","source:":"source :","target:":"embouchure :","lower fence:":"cl\xf4ture sup\xe9rieure :","upper fence:":"cl\xf4ture inf\xe9rieure :","max:":"max. :","mean \xb1 \u03c3:":"moyenne \xb1 \u03c3 :","mean:":"moyenne :","median:":"m\xe9diane :","min:":"min. :","new text":"nouveau texte","Turntable rotation":"Rotation planaire","Toggle Spike Lines":"Activer/d\xe9sactiver les pics","open:":"ouverture :","high:":"haut :","low:":"bas :","Toggle show closest data on hover":"Activer/d\xe9sactiver le survol","incoming flow count:":"flux entrant :","outgoing flow count:":"flux sortant :","kde:":"est. par noyau :"},format:{days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],shortDays:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],months:["Janvier","F\xe9vrier","Mars","Avril","Mai","Juin","Juillet","Ao\xfbt","Septembre","Octobre","Novembre","D\xe9cembre"],shortMonths:["Jan","F\xe9v","Mar","Avr","Mai","Jun","Jul","Ao\xfb","Sep","Oct","Nov","D\xe9c"],date:"%d/%m/%Y",decimal:",",thousands:" ",year:"%Y",month:"%b %Y",dayMonth:"%-d %b",dayMonthYear:"%-d %b %Y"}}); -Plotly.register({moduleType:"locale",name:"sv",dictionary:{Autoscale:"Autoskala","Box Select":"V\xe4lj rektangel","Click to enter Colorscale title":"Klicka f\xf6r att ange titel p\xe5 f\xe4rgskala","Click to enter Component A title":"Klicka f\xf6r att ange titel p\xe5 komponent A","Click to enter Component B title":"Klicka f\xf6r att ange titel p\xe5 komponent B","Click to enter Component C title":"Klicka f\xf6r att ange titel p\xe5 komponent C","Click to enter Plot title":"Klicka f\xf6r att ange titel p\xe5 diagram","Click to enter X axis title":"Klicka f\xf6r att ange titel p\xe5 x-axel","Click to enter Y axis title":"Klicka f\xf6r att ange titel p\xe5 y-axel","Click to enter radial axis title":"Klicka f\xf6r att ange titel p\xe5 radiell axel","Compare data on hover":"J\xe4mf\xf6r data n\xe4r muspekaren h\xe5lls \xf6ver","Double-click on legend to isolate one trace":"Dubbelklicka p\xe5 f\xf6rklaringen f\xf6r att visa endast en serie","Double-click to zoom back out":"Dubbelklicka f\xf6r att zooma ut igen","Download plot":"Ladda ner diagram","Download plot as a png":"Ladda ner diagram som png","Edit in Chart Studio":"Editera i Chart Studio","IE only supports svg. Changing format to svg.":"IE st\xf6der enbart svg. Byter format till svg.","Lasso Select":"V\xe4lj lasso","Orbital rotation":"Orbital rotation",Pan:"Panorera","Produced with Plotly":"Skapad med Plotly",Reset:"\xc5terst\xe4ll","Reset axes":"\xc5terst\xe4ll axlar","Reset camera to default":"\xc5terst\xe4ll kamera till standard","Reset camera to last save":"\xc5terst\xe4ll kamera till senast sparad","Reset view":"\xc5terst\xe4ll vy","Reset views":"\xc5terst\xe4ll vyer","Show closest data on hover":"Visa n\xe4rmaste v\xe4rde n\xe4r muspekaren h\xe5lls \xf6ver","Snapshot succeeded":"Bild skapad","Sorry, there was a problem downloading your snapshot!":"Tyv\xe4rr gick n\xe5got fel vid nedladdning av bild","Taking snapshot - this may take a few seconds":"Skapar bild - detta kan ta n\xe5gra sekunder","Toggle Spike Lines":"Aktivera/Inaktivera topplinjer","Toggle show closest data on hover":"Aktivera/Inaktivera visa n\xe4rmaste v\xe4rde n\xe4r muspekaren h\xe5lls \xf6ver","Turntable rotation":"Platt rotation",Zoom:"Zooma","Zoom in":"Zooma in","Zoom out":"Zooma ut","close:":"st\xe4ngning:","concentration:":"koncentration:","high:":"h\xf6g:","incoming flow count:":"inkommande fl\xf6de summering:","kde:":"kde:","lat:":"lat:","lon:":"lon:","low:":"l\xe5g:","lower fence:":"undre gr\xe4ns:","max:":"max:","mean \xb1 \u03c3:":"medel \xb1 \u03c3:","mean:":"medel:","median:":"median:","min:":"min:","new text":"ny text","open:":"\xf6ppning:","outgoing flow count:":"utg\xe5ende fl\xf6de summering:","q1:":"q1:","q3:":"q3:","source:":"k\xe4lla:","target:":"m\xe5l:",trace:"serie","upper fence:":"\xf6vre gr\xe4ns:"},format:{days:["S\xf6ndag","M\xe5ndag","Tisdag","Onsdag","Torsdag","Fredag","L\xf6rdag"],shortDays:["S\xf6n","M\xe5n","Tis","Ons","Tor","Fre","L\xf6r"],months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],shortMonths:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],date:"%Y-%m-%d"}}); -Plotly.register({moduleType:"locale",name:"tr",dictionary:{},format:{days:["Pazar","Pazartesi","Sal\u0131","\xc7ar\u015famba","Per\u015fembe","Cuma","Cumartesi"],shortDays:["Pz","Pt","Sa","\xc7a","Pe","Cu","Ct"],months:["Ocak","\u015eubat","Mart","Nisan","May\u0131s","Haziran","Temmuz","A\u011fustos","Eyl\xfcl","Ekim","Kas\u0131m","Aral\u0131k"],shortMonths:["Oca","\u015eub","Mar","Nis","May","Haz","Tem","A\u011fu","Eyl","Eki","Kas","Ara"],date:"%d.%m.%Y"}}); \ No newline at end of file +var locale={moduleType:"locale",name:"de",dictionary:{Autoscale:"Automatische Skalierung","Box Select":"Rechteckauswahl","Click to enter Colorscale title":"Klicken, um den Farbskalatitel einzugeben","Click to enter Component A title":"Klicken, um den Titel der Komponente A einzugeben","Click to enter Component B title":"Klicken, um den Titel der Komponente B einzugeben","Click to enter Component C title":"Klicken, um den Titel der Komponente C einzugeben","Click to enter Plot title":"Klicken, um den Titel des Graphen einzugeben","Click to enter X axis title":"Klicken, um den Titel der X-Achse einzugeben","Click to enter Y axis title":"Klicken, um den Titel der Y-Achse einzugeben","Compare data on hover":"\xdcber die Daten fahren, um sie zu vergleichen","Double-click on legend to isolate one trace":"Daten isolieren durch Doppelklick in der Legende","Double-click to zoom back out":"Herauszoomen durch Doppelklick","Download plot as a png":"Graphen als PNG herunterladen","Download plot":"Graphen herunterladen","Edit in Chart Studio":"Im Chart Studio bearbeiten","IE only supports svg. Changing format to svg.":"IE unterst\xfctzt nur SVG-Dateien. Format wird zu SVG gewechselt.","Lasso Select":"Lassoauswahl","Orbital rotation":"Orbitalrotation",Pan:"Verschieben","Produced with Plotly":"Erstellt mit Plotly",Reset:"Zur\xfccksetzen","Reset axes":"Achsen zur\xfccksetzen","Reset camera to default":"Kamera auf Standard zur\xfccksetzen","Reset camera to last save":"Kamera auf letzte Speicherung zur\xfccksetzen","Reset view":"Ansicht zur\xfccksetzen","Reset views":"Ansichten zur\xfccksetzen","Show closest data on hover":"Zeige n\xe4heste Daten beim \xdcberfahren","Snapshot succeeded":"Snapshot erfolgreich","Sorry, there was a problem downloading your snapshot!":"Es gab ein Problem beim Herunterladen des Snapshots","Taking snapshot - this may take a few seconds":"Erstelle einen Snapshot - dies kann einige Sekunden dauern",Zoom:"Zoom","Zoom in":"Hineinzoomen","Zoom out":"Herauszoomen","close:":"Schluss:",trace:"Datenspur","lat:":"Lat.:","lon:":"Lon.:","q1:":"q1:","q3:":"q3:","source:":"Quelle:","target:":"Ziel:","lower fence:":"Untere Schranke:","upper fence:":"Obere Schranke:","max:":"Max.:","mean \xb1 \u03c3:":"Mittelwert \xb1 \u03c3:","mean:":"Mittelwert:","median:":"Median:","min:":"Min.:","Turntable rotation":"Drehscheibenorbit","Toggle Spike Lines":"Bezugslinien an-/abschalten","open:":"Er\xf6ffnung:","high:":"H\xf6chstkurs:","low:":"Tiefstkurs:","Toggle show closest data on hover":"Anzeige der n\xe4hesten Daten an-/abschalten","incoming flow count:":"Anzahl eingehender Verbindungen:","outgoing flow count:":"Anzahl ausgehender Verbindungen:","kde:":"Dichte:"},format:{days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],shortDays:["So","Mo","Di","Mi","Do","Fr","Sa"],months:["Januar","Februar","M\xe4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],shortMonths:["Jan","Feb","M\xe4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],date:"%d.%m.%Y",decimal:",",thousands:"."}};"undefined"==typeof Plotly?(window.PlotlyLocales=window.PlotlyLocales||[],window.PlotlyLocales.push(locale)):Plotly.register(locale); +var locale={moduleType:"locale",name:"es",dictionary:{Autoscale:"Autoescalar","Box Select":"Seleccionar Caja","Click to enter Colorscale title":"Introducir el t\xedtulo de la Escala de Color","Click to enter Component A title":"Introducir el t\xedtulo del Componente A","Click to enter Component B title":"Introducir el t\xedtulo del Componente B","Click to enter Component C title":"Introducir el t\xedtulo del Componente C","Click to enter Plot title":"Introducir el t\xedtulo de la Gr\xe1fica","Click to enter X axis title":"Introducir el t\xedtulo del eje X","Click to enter Y axis title":"Introducir el t\xedtulo del eje Y","Click to enter radial axis title":"Introducir el t\xedtulo del eje radial","Compare data on hover":"Comparar datos al pasar por encima","Double-click on legend to isolate one trace":"Haga doble-clic en la leyenda para aislar una traza","Double-click to zoom back out":"Haga doble-clic para restaurar la escala","Download plot as a png":"Descargar gr\xe1fica como png","Download plot":"Descargar gr\xe1fica","Edit in Chart Studio":"Editar en Chart Studio","IE only supports svg. Changing format to svg.":"IE solo soporta svg. Cambiando formato a svg.","Lasso Select":"Seleccionar con lazo","Orbital rotation":"Rotaci\xf3n esf\xe9rica",Pan:"Modo Panor\xe1mica","Produced with Plotly":"Hecho con Plotly",Reset:"Reiniciar","Reset axes":"Reiniciar ejes","Reset camera to default":"Restaurar c\xe1mara predeterminada","Reset camera to last save":"Restaurar anterior c\xe1mara","Reset view":"Restaurar vista","Reset views":"Restaurar vistas","Show closest data on hover":"Mostrar el dato m\xe1s cercano al pasar por encima","Snapshot succeeded":"La captura de la instant\xe1nea finaliz\xf3 correctamente","Sorry, there was a problem downloading your snapshot!":"\xa1La descarga de la instant\xe1nea fall\xf3!","Taking snapshot - this may take a few seconds":"Capturando una instant\xe1nea - podr\xeda tardar unos segundos","Toggle Spike Lines":"Mostrar/Ocultar Gu\xedas","Toggle show closest data on hover":"Activar/Desactivar mostrar el dato m\xe1s cercano al pasar por encima","Turntable rotation":"Rotaci\xf3n plana",Zoom:"Modo Ampliar/Reducir","Zoom in":"Ampliar","Zoom out":"Reducir","close:":"cierre:","high:":"alza:","incoming flow count:":"flujo de entrada:","kde:":"edp:","lat:":"lat:","lon:":"lon:","low:":"baja:","lower fence:":"l\xedmite inferior:","max:":"m\xe1x:","mean \xb1 \u03c3:":"media \xb1 \u03c3:","mean:":"media:","median:":"mediana:","min:":"m\xedn:","new text":"nuevo texto","open:":"apertura:","outgoing flow count:":"flujo de salida:","q1:":"q1:","q3:":"q3:","source:":"fuente:","target:":"destino:",trace:"traza","upper fence:":"l\xedmite superior:"},format:{days:["Domingo","Lunes","Martes","Mi\xe9rcoles","Jueves","Viernes","S\xe1bado"],shortDays:["Dom","Lun","Mar","Mi\xe9","Jue","Vie","S\xe1b"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],shortMonths:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],date:"%d/%m/%Y",decimal:",",thousands:" "}};"undefined"==typeof Plotly?(window.PlotlyLocales=window.PlotlyLocales||[],window.PlotlyLocales.push(locale)):Plotly.register(locale); +var locale={moduleType:"locale",name:"fr",dictionary:{Autoscale:"\xc9chelle automatique","Box Select":"S\xe9lection rectangulaire","Click to enter Colorscale title":"Ajouter un titre \xe0 l'\xe9chelle de couleurs","Click to enter Component A title":"Ajouter un titre \xe0 la composante A","Click to enter Component B title":"Ajouter un titre \xe0 la composante B","Click to enter Component C title":"Ajouter un titre \xe0 la composante C","Click to enter Plot title":"Ajouter un titre au graphique","Click to enter X axis title":"Ajouter un titre \xe0 l'axe des x","Click to enter Y axis title":"Ajouter un titre \xe0 l'axe des y","Click to enter radial axis title":"Ajouter un titre \xe0 l'axe radial","Compare data on hover":"Comparaison entre donn\xe9es en survol","Double-click on legend to isolate one trace":"Double-cliquer sur la l\xe9gende pour isoler une s\xe9rie","Double-click to zoom back out":"Double-cliquer pour d\xe9zoomer","Download plot as a png":"T\xe9l\xe9charger le graphique en fichier PNG","Download plot":"T\xe9l\xe9charger le graphique","Edit in Chart Studio":"\xc9diter le graphique sur plot.ly","IE only supports svg. Changing format to svg.":"IE ne permet que les conversions en SVG. Conversion en SVG en cours.","Lasso Select":"S\xe9lection lasso","Orbital rotation":"Rotation orbitale",Pan:"Translation","Produced with Plotly":"G\xe9n\xe9r\xe9 avec Plotly",Reset:"R\xe9initialiser","Reset axes":"R\xe9initialiser les axes","Reset camera to default":"R\xe9gler la cam\xe9ra \xe0 sa valeur d\xe9faut","Reset camera to last save":"R\xe9gler la cam\xe9ra \xe0 sa valeur sauvegard\xe9e","Reset view":"R\xe9initialiser","Reset views":"R\xe9initialiser","Show closest data on hover":"Donn\xe9es les plus proches en survol","Snapshot succeeded":"Conversion r\xe9ussie","Sorry, there was a problem downloading your snapshot!":"D\xe9sol\xe9, un probl\xe8me est survenu lors du t\xe9l\xe9chargement de votre graphique","Taking snapshot - this may take a few seconds":"Conversion en cours, ceci peut prendre quelques secondes",Zoom:"Zoom","Zoom in":"Zoom int\xe9rieur","Zoom out":"Zoom ext\xe9rieur","close:":"fermeture :",trace:"s\xe9rie","lat:":"lat. :","lon:":"lon. :","q1:":"q1 :","q3:":"q3 :","source:":"source :","target:":"embouchure :","lower fence:":"cl\xf4ture sup\xe9rieure :","upper fence:":"cl\xf4ture inf\xe9rieure :","max:":"max. :","mean \xb1 \u03c3:":"moyenne \xb1 \u03c3 :","mean:":"moyenne :","median:":"m\xe9diane :","min:":"min. :","new text":"nouveau texte","Turntable rotation":"Rotation planaire","Toggle Spike Lines":"Activer/d\xe9sactiver les pics","open:":"ouverture :","high:":"haut :","low:":"bas :","Toggle show closest data on hover":"Activer/d\xe9sactiver le survol","incoming flow count:":"flux entrant :","outgoing flow count:":"flux sortant :","kde:":"est. par noyau :"},format:{days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],shortDays:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],months:["Janvier","F\xe9vrier","Mars","Avril","Mai","Juin","Juillet","Ao\xfbt","Septembre","Octobre","Novembre","D\xe9cembre"],shortMonths:["Jan","F\xe9v","Mar","Avr","Mai","Jun","Jul","Ao\xfb","Sep","Oct","Nov","D\xe9c"],date:"%d/%m/%Y",decimal:",",thousands:" ",year:"%Y",month:"%b %Y",dayMonth:"%-d %b",dayMonthYear:"%-d %b %Y"}};"undefined"==typeof Plotly?(window.PlotlyLocales=window.PlotlyLocales||[],window.PlotlyLocales.push(locale)):Plotly.register(locale); +var locale={moduleType:"locale",name:"sv",dictionary:{Autoscale:"Autoskala","Box Select":"V\xe4lj rektangel","Click to enter Colorscale title":"Klicka f\xf6r att ange titel p\xe5 f\xe4rgskala","Click to enter Component A title":"Klicka f\xf6r att ange titel p\xe5 komponent A","Click to enter Component B title":"Klicka f\xf6r att ange titel p\xe5 komponent B","Click to enter Component C title":"Klicka f\xf6r att ange titel p\xe5 komponent C","Click to enter Plot title":"Klicka f\xf6r att ange titel p\xe5 diagram","Click to enter X axis title":"Klicka f\xf6r att ange titel p\xe5 x-axel","Click to enter Y axis title":"Klicka f\xf6r att ange titel p\xe5 y-axel","Click to enter radial axis title":"Klicka f\xf6r att ange titel p\xe5 radiell axel","Compare data on hover":"J\xe4mf\xf6r data n\xe4r muspekaren h\xe5lls \xf6ver","Double-click on legend to isolate one trace":"Dubbelklicka p\xe5 f\xf6rklaringen f\xf6r att visa endast en serie","Double-click to zoom back out":"Dubbelklicka f\xf6r att zooma ut igen","Download plot":"Ladda ner diagram","Download plot as a png":"Ladda ner diagram som png","Edit in Chart Studio":"Editera i Chart Studio","IE only supports svg. Changing format to svg.":"IE st\xf6der enbart svg. Byter format till svg.","Lasso Select":"V\xe4lj lasso","Orbital rotation":"Orbital rotation",Pan:"Panorera","Produced with Plotly":"Skapad med Plotly",Reset:"\xc5terst\xe4ll","Reset axes":"\xc5terst\xe4ll axlar","Reset camera to default":"\xc5terst\xe4ll kamera till standard","Reset camera to last save":"\xc5terst\xe4ll kamera till senast sparad","Reset view":"\xc5terst\xe4ll vy","Reset views":"\xc5terst\xe4ll vyer","Show closest data on hover":"Visa n\xe4rmaste v\xe4rde n\xe4r muspekaren h\xe5lls \xf6ver","Snapshot succeeded":"Bild skapad","Sorry, there was a problem downloading your snapshot!":"Tyv\xe4rr gick n\xe5got fel vid nedladdning av bild","Taking snapshot - this may take a few seconds":"Skapar bild - detta kan ta n\xe5gra sekunder","Toggle Spike Lines":"Aktivera/Inaktivera topplinjer","Toggle show closest data on hover":"Aktivera/Inaktivera visa n\xe4rmaste v\xe4rde n\xe4r muspekaren h\xe5lls \xf6ver","Turntable rotation":"Platt rotation",Zoom:"Zooma","Zoom in":"Zooma in","Zoom out":"Zooma ut","close:":"st\xe4ngning:","concentration:":"koncentration:","high:":"h\xf6g:","incoming flow count:":"inkommande fl\xf6de summering:","kde:":"kde:","lat:":"lat:","lon:":"lon:","low:":"l\xe5g:","lower fence:":"undre gr\xe4ns:","max:":"max:","mean \xb1 \u03c3:":"medel \xb1 \u03c3:","mean:":"medel:","median:":"median:","min:":"min:","new text":"ny text","open:":"\xf6ppning:","outgoing flow count:":"utg\xe5ende fl\xf6de summering:","q1:":"q1:","q3:":"q3:","source:":"k\xe4lla:","target:":"m\xe5l:",trace:"serie","upper fence:":"\xf6vre gr\xe4ns:"},format:{days:["S\xf6ndag","M\xe5ndag","Tisdag","Onsdag","Torsdag","Fredag","L\xf6rdag"],shortDays:["S\xf6n","M\xe5n","Tis","Ons","Tor","Fre","L\xf6r"],months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],shortMonths:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],date:"%Y-%m-%d"}};"undefined"==typeof Plotly?(window.PlotlyLocales=window.PlotlyLocales||[],window.PlotlyLocales.push(locale)):Plotly.register(locale); +var locale={moduleType:"locale",name:"tr",dictionary:{},format:{days:["Pazar","Pazartesi","Sal\u0131","\xc7ar\u015famba","Per\u015fembe","Cuma","Cumartesi"],shortDays:["Pz","Pt","Sa","\xc7a","Pe","Cu","Ct"],months:["Ocak","\u015eubat","Mart","Nisan","May\u0131s","Haziran","Temmuz","A\u011fustos","Eyl\xfcl","Ekim","Kas\u0131m","Aral\u0131k"],shortMonths:["Oca","\u015eub","Mar","Nis","May","Haz","Tem","A\u011fu","Eyl","Eki","Kas","Ara"],date:"%d.%m.%Y"}};"undefined"==typeof Plotly?(window.PlotlyLocales=window.PlotlyLocales||[],window.PlotlyLocales.push(locale)):Plotly.register(locale); \ No newline at end of file diff --git a/static/babybuddy/js/graph.js.gz b/static/babybuddy/js/graph.js.gz index c12d6bce..95f0e5d1 100644 Binary files a/static/babybuddy/js/graph.js.gz and b/static/babybuddy/js/graph.js.gz differ diff --git a/static/babybuddy/js/vendor.5eb3a183df96.js b/static/babybuddy/js/vendor.2e6cbbdc5f80.js similarity index 99% rename from static/babybuddy/js/vendor.5eb3a183df96.js rename to static/babybuddy/js/vendor.2e6cbbdc5f80.js index b56bbb8b..7779ff86 100644 --- a/static/babybuddy/js/vendor.5eb3a183df96.js +++ b/static/babybuddy/js/vendor.2e6cbbdc5f80.js @@ -10599,7 +10599,7 @@ return jQuery; /**! * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.16.0 + * @version 1.16.1 * @license * Copyright (c) 2016 Federico Zivolo and contributors * @@ -10951,7 +10951,7 @@ function getBordersSize(styles, axis) { var sideA = axis === 'x' ? 'Left' : 'Top'; var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; - return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10); + return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']); } function getSize(axis, body, html, computedStyle) { @@ -11106,8 +11106,8 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) { var scrollParent = getScrollParent(children); var styles = getStyleComputedProperty(parent); - var borderTopWidth = parseFloat(styles.borderTopWidth, 10); - var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); + var borderTopWidth = parseFloat(styles.borderTopWidth); + var borderLeftWidth = parseFloat(styles.borderLeftWidth); // In cases where the parent is fixed, we must ignore negative scroll in offset calc if (fixedPosition && isHTML) { @@ -11128,8 +11128,8 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) { // differently when margins are applied to it. The margins are included in // the box of the documentElement, in the other cases not. if (!isIE10 && isHTML) { - var marginTop = parseFloat(styles.marginTop, 10); - var marginLeft = parseFloat(styles.marginLeft, 10); + var marginTop = parseFloat(styles.marginTop); + var marginLeft = parseFloat(styles.marginLeft); offsets.top -= borderTopWidth - marginTop; offsets.bottom -= borderTopWidth - marginTop; @@ -12068,8 +12068,8 @@ function arrow(data, options) { // Compute the sideValue using the updated popper offsets // take popper margin in account because we don't have this info available var css = getStyleComputedProperty(data.instance.popper); - var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10); - var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10); + var popperMarginSide = parseFloat(css['margin' + sideCapitalized]); + var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']); var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; // prevent arrowElement from being placed not contiguously to its popper diff --git a/static/babybuddy/js/vendor.5eb3a183df96.js.gz b/static/babybuddy/js/vendor.2e6cbbdc5f80.js.gz similarity index 50% rename from static/babybuddy/js/vendor.5eb3a183df96.js.gz rename to static/babybuddy/js/vendor.2e6cbbdc5f80.js.gz index dba63db0..e4174eed 100644 Binary files a/static/babybuddy/js/vendor.5eb3a183df96.js.gz and b/static/babybuddy/js/vendor.2e6cbbdc5f80.js.gz differ diff --git a/static/babybuddy/js/vendor.js b/static/babybuddy/js/vendor.js index b56bbb8b..7779ff86 100644 --- a/static/babybuddy/js/vendor.js +++ b/static/babybuddy/js/vendor.js @@ -10599,7 +10599,7 @@ return jQuery; /**! * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.16.0 + * @version 1.16.1 * @license * Copyright (c) 2016 Federico Zivolo and contributors * @@ -10951,7 +10951,7 @@ function getBordersSize(styles, axis) { var sideA = axis === 'x' ? 'Left' : 'Top'; var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; - return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10); + return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']); } function getSize(axis, body, html, computedStyle) { @@ -11106,8 +11106,8 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) { var scrollParent = getScrollParent(children); var styles = getStyleComputedProperty(parent); - var borderTopWidth = parseFloat(styles.borderTopWidth, 10); - var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); + var borderTopWidth = parseFloat(styles.borderTopWidth); + var borderLeftWidth = parseFloat(styles.borderLeftWidth); // In cases where the parent is fixed, we must ignore negative scroll in offset calc if (fixedPosition && isHTML) { @@ -11128,8 +11128,8 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) { // differently when margins are applied to it. The margins are included in // the box of the documentElement, in the other cases not. if (!isIE10 && isHTML) { - var marginTop = parseFloat(styles.marginTop, 10); - var marginLeft = parseFloat(styles.marginLeft, 10); + var marginTop = parseFloat(styles.marginTop); + var marginLeft = parseFloat(styles.marginLeft); offsets.top -= borderTopWidth - marginTop; offsets.bottom -= borderTopWidth - marginTop; @@ -12068,8 +12068,8 @@ function arrow(data, options) { // Compute the sideValue using the updated popper offsets // take popper margin in account because we don't have this info available var css = getStyleComputedProperty(data.instance.popper); - var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10); - var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10); + var popperMarginSide = parseFloat(css['margin' + sideCapitalized]); + var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']); var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; // prevent arrowElement from being placed not contiguously to its popper diff --git a/static/babybuddy/js/vendor.js.gz b/static/babybuddy/js/vendor.js.gz index dba63db0..e4174eed 100644 Binary files a/static/babybuddy/js/vendor.js.gz and b/static/babybuddy/js/vendor.js.gz differ diff --git a/static/staticfiles.json b/static/staticfiles.json index df15d6e4..fa6ec34f 100644 --- a/static/staticfiles.json +++ b/static/staticfiles.json @@ -1 +1 @@ -{"paths": {"admin/js/vendor/select2/i18n/cs.js": "admin/js/vendor/select2/i18n/cs.edd7167cdcb6.js", "admin/js/vendor/select2/i18n/en.js": "admin/js/vendor/select2/i18n/en.aed9bad15375.js", "admin/js/vendor/select2/i18n/ko.js": "admin/js/vendor/select2/i18n/ko.82358a9b6840.js", "admin/js/vendor/select2/i18n/dsb.js": "admin/js/vendor/select2/i18n/dsb.9c2742bfc55a.js", "admin/js/vendor/select2/i18n/lv.js": "admin/js/vendor/select2/i18n/lv.30bfb7fc3b63.js", "admin/js/vendor/select2/i18n/hsb.js": "admin/js/vendor/select2/i18n/hsb.50caaee90a0d.js", "admin/js/vendor/select2/i18n/km.js": "admin/js/vendor/select2/i18n/km.8c337905305d.js", "admin/js/vendor/select2/i18n/pl.js": "admin/js/vendor/select2/i18n/pl.a10ee9248c07.js", "admin/js/vendor/select2/i18n/de.js": "admin/js/vendor/select2/i18n/de.630e81c65a7b.js", "admin/js/vendor/select2/i18n/sr.js": "admin/js/vendor/select2/i18n/sr.c9f16b9e0f93.js", "admin/js/vendor/select2/i18n/ru.js": "admin/js/vendor/select2/i18n/ru.962f048c22f2.js", "admin/js/vendor/select2/i18n/he.js": "admin/js/vendor/select2/i18n/he.4d933538516a.js", "admin/js/vendor/select2/i18n/el.js": "admin/js/vendor/select2/i18n/el.01c46bf8c8b3.js", "admin/js/vendor/select2/i18n/pt-BR.js": "admin/js/vendor/select2/i18n/pt-BR.455adefc2984.js", "admin/js/vendor/select2/i18n/uk.js": "admin/js/vendor/select2/i18n/uk.e05ad5df6258.js", "admin/js/vendor/select2/i18n/nl.js": "admin/js/vendor/select2/i18n/nl.674c0d3da68d.js", "admin/js/vendor/select2/i18n/sv.js": "admin/js/vendor/select2/i18n/sv.725800c5e8fc.js", "admin/js/vendor/select2/i18n/mk.js": "admin/js/vendor/select2/i18n/mk.92f1d29581b7.js", "admin/js/vendor/select2/i18n/bg.js": "admin/js/vendor/select2/i18n/bg.096f4410173b.js", "admin/js/vendor/select2/i18n/zh-CN.js": "admin/js/vendor/select2/i18n/zh-CN.bde34fa3f064.js", "admin/js/vendor/select2/i18n/vi.js": "admin/js/vendor/select2/i18n/vi.0a60056920fc.js", "admin/js/vendor/select2/i18n/tr.js": "admin/js/vendor/select2/i18n/tr.dc697d893beb.js", "admin/js/vendor/select2/i18n/tk.js": "admin/js/vendor/select2/i18n/tk.5042dc8eca8e.js", "admin/js/vendor/select2/i18n/fr.js": "admin/js/vendor/select2/i18n/fr.6129248732b9.js", "admin/js/vendor/select2/i18n/gl.js": "admin/js/vendor/select2/i18n/gl.e2766036e78a.js", "admin/js/vendor/select2/i18n/ps.js": "admin/js/vendor/select2/i18n/ps.de1a40c46c09.js", "admin/js/vendor/select2/i18n/hr.js": "admin/js/vendor/select2/i18n/hr.68583e607f1e.js", "admin/js/vendor/select2/i18n/eu.js": "admin/js/vendor/select2/i18n/eu.6c45eaf416fe.js", "admin/js/vendor/select2/i18n/ar.js": "admin/js/vendor/select2/i18n/ar.7dcfd5775174.js", "admin/js/vendor/select2/i18n/af.js": "admin/js/vendor/select2/i18n/af.c4a5cbd6a23f.js", "admin/js/vendor/select2/i18n/zh-TW.js": "admin/js/vendor/select2/i18n/zh-TW.e727260f7094.js", "admin/js/vendor/select2/i18n/ka.js": "admin/js/vendor/select2/i18n/ka.8ea0684cc301.js", "admin/js/vendor/select2/i18n/th.js": "admin/js/vendor/select2/i18n/th.b013804dae9c.js", "admin/js/vendor/select2/i18n/sr-Cyrl.js": "admin/js/vendor/select2/i18n/sr-Cyrl.116365a2de65.js", "admin/js/vendor/select2/i18n/lt.js": "admin/js/vendor/select2/i18n/lt.2c390a6bf650.js", "admin/js/vendor/select2/i18n/hy.js": "admin/js/vendor/select2/i18n/hy.4c655f53f4e1.js", "admin/js/vendor/select2/i18n/sq.js": "admin/js/vendor/select2/i18n/sq.abf2d34b255a.js", "admin/js/vendor/select2/i18n/et.js": "admin/js/vendor/select2/i18n/et.32b0b17ba1a9.js", "admin/js/vendor/select2/i18n/sl.js": "admin/js/vendor/select2/i18n/sl.a5e262c643f2.js", "admin/js/vendor/select2/i18n/bs.js": "admin/js/vendor/select2/i18n/bs.debce43cfca2.js", "admin/js/vendor/select2/i18n/fi.js": "admin/js/vendor/select2/i18n/fi.2858f3167855.js", "admin/js/vendor/select2/i18n/hi.js": "admin/js/vendor/select2/i18n/hi.f81e979ec25f.js", "admin/js/vendor/select2/i18n/ja.js": "admin/js/vendor/select2/i18n/ja.442146837f55.js", "admin/js/vendor/select2/i18n/ne.js": "admin/js/vendor/select2/i18n/ne.f61bf00bc3fe.js", "admin/js/vendor/select2/i18n/sk.js": "admin/js/vendor/select2/i18n/sk.34019208b835.js", "admin/js/vendor/select2/i18n/da.js": "admin/js/vendor/select2/i18n/da.6bbc262044b3.js", "admin/js/vendor/select2/i18n/id.js": "admin/js/vendor/select2/i18n/id.322604a430a5.js", "admin/js/vendor/select2/i18n/es.js": "admin/js/vendor/select2/i18n/es.8b21ebdb01ee.js", "admin/js/vendor/select2/i18n/it.js": "admin/js/vendor/select2/i18n/it.110a0fa84968.js", "admin/js/vendor/select2/i18n/hu.js": "admin/js/vendor/select2/i18n/hu.9edad4c24fd0.js", "admin/js/vendor/select2/i18n/bn.js": "admin/js/vendor/select2/i18n/bn.b33721dc9b8a.js", "admin/js/vendor/select2/i18n/ms.js": "admin/js/vendor/select2/i18n/ms.ade6aba46542.js", "admin/js/vendor/select2/i18n/fa.js": "admin/js/vendor/select2/i18n/fa.1738b003dd26.js", "admin/js/vendor/select2/i18n/nb.js": "admin/js/vendor/select2/i18n/nb.e535138ca26b.js", "admin/js/vendor/select2/i18n/az.js": "admin/js/vendor/select2/i18n/az.1804c238d269.js", "admin/js/vendor/select2/i18n/ca.js": "admin/js/vendor/select2/i18n/ca.60f20182ff18.js", "admin/js/vendor/select2/i18n/ro.js": "admin/js/vendor/select2/i18n/ro.ea7e3b822b06.js", "admin/js/vendor/select2/i18n/pt.js": "admin/js/vendor/select2/i18n/pt.5b4ec8cb5b23.js", "admin/js/vendor/select2/i18n/is.js": "admin/js/vendor/select2/i18n/is.a8a13c9122d7.js", "admin/js/vendor/xregexp/LICENSE.txt": "admin/js/vendor/xregexp/LICENSE.d64cecf4f157.txt", "admin/js/vendor/xregexp/xregexp.min.js": "admin/js/vendor/xregexp/xregexp.min.c95393b8ca4d.js", "admin/js/vendor/xregexp/xregexp.js": "admin/js/vendor/xregexp/xregexp.1865b1cf5085.js", "admin/js/vendor/select2/LICENSE.md": "admin/js/vendor/select2/LICENSE.f94142512c91.md", "admin/js/vendor/select2/select2.full.js": "admin/js/vendor/select2/select2.full.d379d5235584.js", "admin/js/vendor/select2/select2.full.min.js": "admin/js/vendor/select2/select2.full.min.68e8d8f673b7.js", "admin/js/vendor/jquery/jquery.js": "admin/js/vendor/jquery/jquery.11c05eb286ed.js", "admin/js/vendor/jquery/LICENSE.txt": "admin/js/vendor/jquery/LICENSE.75308107741f.txt", "admin/js/vendor/jquery/jquery.min.js": "admin/js/vendor/jquery/jquery.min.220afd743d9e.js", "admin/css/vendor/select2/select2.min.css": "admin/css/vendor/select2/select2.min.af22a7e2bfec.css", "admin/css/vendor/select2/select2.css": "admin/css/vendor/select2/select2.fd9fe49d3d91.css", "admin/css/vendor/select2/LICENSE-SELECT2.md": "admin/css/vendor/select2/LICENSE-SELECT2.f94142512c91.md", "babybuddy/img/core/child-placeholder.png": "babybuddy/img/core/child-placeholder.7c0a81f0d7f0.png", "rest_framework/docs/js/jquery.json-view.min.js": "rest_framework/docs/js/jquery.json-view.min.b7c2d6981377.js", "rest_framework/docs/js/highlight.pack.js": "rest_framework/docs/js/highlight.pack.479b5f21dcba.js", "rest_framework/docs/js/api.js": "rest_framework/docs/js/api.c9743eab7a4f.js", "rest_framework/docs/css/base.css": "rest_framework/docs/css/base.3208b6cc4466.css", "rest_framework/docs/css/jquery.json-view.min.css": "rest_framework/docs/css/jquery.json-view.min.a2e6beeb6710.css", "rest_framework/docs/css/highlight.css": "rest_framework/docs/css/highlight.e0e4d973c6d7.css", "rest_framework/docs/img/grid.png": "rest_framework/docs/img/grid.a4b938cf382b.png", "rest_framework/docs/img/favicon.ico": "rest_framework/docs/img/favicon.5195b4d0f3eb.ico", "admin/js/admin/DateTimeShortcuts.js": "admin/js/admin/DateTimeShortcuts.a9c6d180860b.js", "admin/js/admin/RelatedObjectLookups.js": "admin/js/admin/RelatedObjectLookups.ea0683bea064.js", "admin/img/gis/move_vertex_on.svg": "admin/img/gis/move_vertex_on.0047eba25b67.svg", "admin/img/gis/move_vertex_off.svg": "admin/img/gis/move_vertex_off.7a23bf31ef8a.svg", "babybuddy/logo/icon2.png": "babybuddy/logo/icon2.be48fd16c53f.png", "babybuddy/logo/icon-brand.png": "babybuddy/logo/icon-brand.96e4491f2209.png", "babybuddy/logo/logo.png": "babybuddy/logo/logo.62870041cc83.png", "babybuddy/logo/icon.png": "babybuddy/logo/icon.6377611bf399.png", "babybuddy/js/app.js": "babybuddy/js/app.f14bdf07def3.js", "babybuddy/js/graph.js": "babybuddy/js/graph.8129e325fb11.js", "babybuddy/js/vendor.js": "babybuddy/js/vendor.5eb3a183df96.js", "babybuddy/css/vendor.css": "babybuddy/css/vendor.be1a1448dd86.css", "babybuddy/css/app.css": "babybuddy/css/app.b562c9b5953b.css", "babybuddy/fonts/fontawesome-webfont.eot": "babybuddy/fonts/fontawesome-webfont.674f50d287a8.eot", "babybuddy/fonts/fontawesome-webfont.ttf": "babybuddy/fonts/fontawesome-webfont.b06871f281fe.ttf", "babybuddy/fonts/fontawesome-webfont.svg": "babybuddy/fonts/fontawesome-webfont.912ec66d7572.svg", "babybuddy/fonts/fontawesome-webfont.woff2": "babybuddy/fonts/fontawesome-webfont.af7ae505a9ee.woff2", "babybuddy/fonts/FontAwesome.otf": "babybuddy/fonts/FontAwesome.0d2717cd5d85.otf", "babybuddy/fonts/fontawesome-webfont.woff": "babybuddy/fonts/fontawesome-webfont.fee66e712a8a.woff", "babybuddy/root/site.webmanifest.json": "babybuddy/root/site.webmanifest.61dac00bb04b.json", "babybuddy/root/favicon-32x32.png": "babybuddy/root/favicon-32x32.076f1340f1cf.png", "babybuddy/root/favicon.ico": "babybuddy/root/favicon.1b19cfd81791.ico", "babybuddy/root/android-chrome-512x512.png": "babybuddy/root/android-chrome-512x512.89ee40b783cd.png", "babybuddy/root/favicon-16x16.png": "babybuddy/root/favicon-16x16.12c501486484.png", "babybuddy/root/mstile-150x150.png": "babybuddy/root/mstile-150x150.f231c8ff6157.png", "babybuddy/root/apple-touch-icon.png": "babybuddy/root/apple-touch-icon.33416748f239.png", "babybuddy/root/safari-pinned-tab.svg": "babybuddy/root/safari-pinned-tab.3de51db2baf2.svg", "babybuddy/root/android-chrome-192x192.png": "babybuddy/root/android-chrome-192x192.484bd0e8cb66.png", "babybuddy/root/browserconfig.xml": "babybuddy/root/browserconfig.5858221e0a38.xml", "babybuddy/root/android-chrome-384x384.png": "babybuddy/root/android-chrome-384x384.7849615a1e26.png", "rest_framework/js/jquery-3.4.1.min.js": "rest_framework/js/jquery-3.4.1.min.220afd743d9e.js", "rest_framework/js/prettify-min.js": "rest_framework/js/prettify-min.709bfcc456c6.js", "rest_framework/js/default.js": "rest_framework/js/default.5b08897dbdc3.js", "rest_framework/js/csrf.js": "rest_framework/js/csrf.969930007329.js", "rest_framework/js/bootstrap.min.js": "rest_framework/js/bootstrap.min.2f34b630ffe3.js", "rest_framework/js/ajax-form.js": "rest_framework/js/ajax-form.0ea6e6052ab5.js", "rest_framework/js/coreapi-0.1.1.js": "rest_framework/js/coreapi-0.1.1.8851fb9336c9.js", "rest_framework/css/prettify.css": "rest_framework/css/prettify.a987f72342ee.css", "rest_framework/css/font-awesome-4.0.3.css": "rest_framework/css/font-awesome-4.0.3.c1e1ea213abf.css", "rest_framework/css/bootstrap-tweaks.css": "rest_framework/css/bootstrap-tweaks.46ed116b0edd.css", "rest_framework/css/default.css": "rest_framework/css/default.8d5591a6aabc.css", "rest_framework/css/bootstrap-theme.min.css": "rest_framework/css/bootstrap-theme.min.66b84a04375e.css", "rest_framework/css/bootstrap.min.css": "rest_framework/css/bootstrap.min.77017a69879a.css", "rest_framework/fonts/fontawesome-webfont.eot": "rest_framework/fonts/fontawesome-webfont.8b27bc96115c.eot", "rest_framework/fonts/glyphicons-halflings-regular.svg": "rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg", "rest_framework/fonts/glyphicons-halflings-regular.woff2": "rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2", "rest_framework/fonts/glyphicons-halflings-regular.ttf": "rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf", "rest_framework/fonts/fontawesome-webfont.ttf": "rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf", "rest_framework/fonts/fontawesome-webfont.svg": "rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg", "rest_framework/fonts/glyphicons-halflings-regular.eot": "rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot", "rest_framework/fonts/glyphicons-halflings-regular.woff": "rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff", "rest_framework/fonts/fontawesome-webfont.woff": "rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff", "rest_framework/img/grid.png": "rest_framework/img/grid.a4b938cf382b.png", "rest_framework/img/glyphicons-halflings.png": "rest_framework/img/glyphicons-halflings.90233c9067e9.png", "rest_framework/img/glyphicons-halflings-white.png": "rest_framework/img/glyphicons-halflings-white.9bbc6e960299.png", "admin/js/prepopulate.min.js": "admin/js/prepopulate.min.85fd5e0fb706.js", "admin/js/calendar.js": "admin/js/calendar.aae57adab5f6.js", "admin/js/inlines.min.js": "admin/js/inlines.min.6d6c2416646e.js", "admin/js/SelectBox.js": "admin/js/SelectBox.99d0cfd2e80c.js", "admin/js/collapse.min.js": "admin/js/collapse.min.44dfdb427845.js", "admin/js/urlify.js": "admin/js/urlify.67bae52223e0.js", "admin/js/actions.min.js": "admin/js/actions.min.5fa8cb0403f1.js", "admin/js/popup_response.js": "admin/js/popup_response.6ce3197f8fc8.js", "admin/js/autocomplete.js": "admin/js/autocomplete.cfd2c4dc8981.js", "admin/js/collapse.js": "admin/js/collapse.c5b851e91226.js", "admin/js/change_form.js": "admin/js/change_form.9e85003a1a38.js", "admin/js/jquery.init.js": "admin/js/jquery.init.95b62fa19378.js", "admin/js/actions.js": "admin/js/actions.8d83e3af0fbd.js", "admin/js/prepopulate_init.js": "admin/js/prepopulate_init.0d3b53c37074.js", "admin/js/inlines.js": "admin/js/inlines.12d1af430335.js", "admin/js/prepopulate.js": "admin/js/prepopulate.2f90da7170ec.js", "admin/js/cancel.js": "admin/js/cancel.a2c3149a1c5e.js", "admin/js/SelectFilter2.js": "admin/js/SelectFilter2.c26733924aea.js", "admin/js/core.js": "admin/js/core.ea39b3bd34c3.js", "admin/css/changelists.css": "admin/css/changelists.cfe316f81936.css", "admin/css/login.css": "admin/css/login.252ffabd6548.css", "admin/css/fonts.css": "admin/css/fonts.168bab448fee.css", "admin/css/responsive.css": "admin/css/responsive.755ce0b07393.css", "admin/css/autocomplete.css": "admin/css/autocomplete.781713f30664.css", "admin/css/base.css": "admin/css/base.ae33e6383baa.css", "admin/css/widgets.css": "admin/css/widgets.8874c301e7bc.css", "admin/css/forms.css": "admin/css/forms.9f1ffc442e9a.css", "admin/css/dashboard.css": "admin/css/dashboard.7ac78187c567.css", "admin/css/rtl.css": "admin/css/rtl.30f903442dc5.css", "admin/css/responsive_rtl.css": "admin/css/responsive_rtl.51c7445ceeff.css", "admin/fonts/LICENSE.txt": "admin/fonts/LICENSE.d273d63619c9.txt", "admin/fonts/Roboto-Bold-webfont.woff": "admin/fonts/Roboto-Bold-webfont.50d75e48e0a3.woff", "admin/fonts/Roboto-Light-webfont.woff": "admin/fonts/Roboto-Light-webfont.c73eb1ceba33.woff", "admin/fonts/README.txt": "admin/fonts/README.ab99e6b541ea.txt", "admin/fonts/Roboto-Regular-webfont.woff": "admin/fonts/Roboto-Regular-webfont.35b07eb2f871.woff", "admin/img/icon-changelink.svg": "admin/img/icon-changelink.18d2fd706348.svg", "admin/img/icon-no.svg": "admin/img/icon-no.439e821418cd.svg", "admin/img/selector-icons.svg": "admin/img/selector-icons.b4555096cea2.svg", "admin/img/search.svg": "admin/img/search.7cf54ff789c6.svg", "admin/img/icon-yes.svg": "admin/img/icon-yes.d2f9f035226a.svg", "admin/img/icon-addlink.svg": "admin/img/icon-addlink.d519b3bab011.svg", "admin/img/icon-clock.svg": "admin/img/icon-clock.e1d4dfac3f2b.svg", "admin/img/LICENSE": "admin/img/LICENSE.2c54f4e1ca1c", "admin/img/icon-viewlink.svg": "admin/img/icon-viewlink.41eb31f7826e.svg", "admin/img/icon-unknown.svg": "admin/img/icon-unknown.a18cb4398978.svg", "admin/img/README.txt": "admin/img/README.a70711a38d87.txt", "admin/img/icon-calendar.svg": "admin/img/icon-calendar.ac7aea671bea.svg", "admin/img/sorting-icons.svg": "admin/img/sorting-icons.3a097b59f104.svg", "admin/img/tooltag-arrowright.svg": "admin/img/tooltag-arrowright.bbfb788a849e.svg", "admin/img/icon-deletelink.svg": "admin/img/icon-deletelink.564ef9dc3854.svg", "admin/img/tooltag-add.svg": "admin/img/tooltag-add.e59d620a9742.svg", "admin/img/inline-delete.svg": "admin/img/inline-delete.fec1b761f254.svg", "admin/img/icon-alert.svg": "admin/img/icon-alert.034cc7d8a67f.svg", "admin/img/icon-unknown-alt.svg": "admin/img/icon-unknown-alt.81536e128bb6.svg", "admin/img/calendar-icons.svg": "admin/img/calendar-icons.39b290681a8b.svg"}, "version": "1.0"} \ No newline at end of file +{"paths": {"admin/js/vendor/select2/i18n/cs.js": "admin/js/vendor/select2/i18n/cs.edd7167cdcb6.js", "admin/js/vendor/select2/i18n/en.js": "admin/js/vendor/select2/i18n/en.aed9bad15375.js", "admin/js/vendor/select2/i18n/ko.js": "admin/js/vendor/select2/i18n/ko.82358a9b6840.js", "admin/js/vendor/select2/i18n/dsb.js": "admin/js/vendor/select2/i18n/dsb.9c2742bfc55a.js", "admin/js/vendor/select2/i18n/lv.js": "admin/js/vendor/select2/i18n/lv.30bfb7fc3b63.js", "admin/js/vendor/select2/i18n/hsb.js": "admin/js/vendor/select2/i18n/hsb.50caaee90a0d.js", "admin/js/vendor/select2/i18n/km.js": "admin/js/vendor/select2/i18n/km.8c337905305d.js", "admin/js/vendor/select2/i18n/pl.js": "admin/js/vendor/select2/i18n/pl.a10ee9248c07.js", "admin/js/vendor/select2/i18n/de.js": "admin/js/vendor/select2/i18n/de.630e81c65a7b.js", "admin/js/vendor/select2/i18n/sr.js": "admin/js/vendor/select2/i18n/sr.c9f16b9e0f93.js", "admin/js/vendor/select2/i18n/ru.js": "admin/js/vendor/select2/i18n/ru.962f048c22f2.js", "admin/js/vendor/select2/i18n/he.js": "admin/js/vendor/select2/i18n/he.4d933538516a.js", "admin/js/vendor/select2/i18n/el.js": "admin/js/vendor/select2/i18n/el.01c46bf8c8b3.js", "admin/js/vendor/select2/i18n/pt-BR.js": "admin/js/vendor/select2/i18n/pt-BR.455adefc2984.js", "admin/js/vendor/select2/i18n/uk.js": "admin/js/vendor/select2/i18n/uk.e05ad5df6258.js", "admin/js/vendor/select2/i18n/nl.js": "admin/js/vendor/select2/i18n/nl.674c0d3da68d.js", "admin/js/vendor/select2/i18n/sv.js": "admin/js/vendor/select2/i18n/sv.725800c5e8fc.js", "admin/js/vendor/select2/i18n/mk.js": "admin/js/vendor/select2/i18n/mk.92f1d29581b7.js", "admin/js/vendor/select2/i18n/bg.js": "admin/js/vendor/select2/i18n/bg.096f4410173b.js", "admin/js/vendor/select2/i18n/zh-CN.js": "admin/js/vendor/select2/i18n/zh-CN.bde34fa3f064.js", "admin/js/vendor/select2/i18n/vi.js": "admin/js/vendor/select2/i18n/vi.0a60056920fc.js", "admin/js/vendor/select2/i18n/tr.js": "admin/js/vendor/select2/i18n/tr.dc697d893beb.js", "admin/js/vendor/select2/i18n/tk.js": "admin/js/vendor/select2/i18n/tk.5042dc8eca8e.js", "admin/js/vendor/select2/i18n/fr.js": "admin/js/vendor/select2/i18n/fr.6129248732b9.js", "admin/js/vendor/select2/i18n/gl.js": "admin/js/vendor/select2/i18n/gl.e2766036e78a.js", "admin/js/vendor/select2/i18n/ps.js": "admin/js/vendor/select2/i18n/ps.de1a40c46c09.js", "admin/js/vendor/select2/i18n/hr.js": "admin/js/vendor/select2/i18n/hr.68583e607f1e.js", "admin/js/vendor/select2/i18n/eu.js": "admin/js/vendor/select2/i18n/eu.6c45eaf416fe.js", "admin/js/vendor/select2/i18n/ar.js": "admin/js/vendor/select2/i18n/ar.7dcfd5775174.js", "admin/js/vendor/select2/i18n/af.js": "admin/js/vendor/select2/i18n/af.c4a5cbd6a23f.js", "admin/js/vendor/select2/i18n/zh-TW.js": "admin/js/vendor/select2/i18n/zh-TW.e727260f7094.js", "admin/js/vendor/select2/i18n/ka.js": "admin/js/vendor/select2/i18n/ka.8ea0684cc301.js", "admin/js/vendor/select2/i18n/th.js": "admin/js/vendor/select2/i18n/th.b013804dae9c.js", "admin/js/vendor/select2/i18n/sr-Cyrl.js": "admin/js/vendor/select2/i18n/sr-Cyrl.116365a2de65.js", "admin/js/vendor/select2/i18n/lt.js": "admin/js/vendor/select2/i18n/lt.2c390a6bf650.js", "admin/js/vendor/select2/i18n/hy.js": "admin/js/vendor/select2/i18n/hy.4c655f53f4e1.js", "admin/js/vendor/select2/i18n/sq.js": "admin/js/vendor/select2/i18n/sq.abf2d34b255a.js", "admin/js/vendor/select2/i18n/et.js": "admin/js/vendor/select2/i18n/et.32b0b17ba1a9.js", "admin/js/vendor/select2/i18n/sl.js": "admin/js/vendor/select2/i18n/sl.a5e262c643f2.js", "admin/js/vendor/select2/i18n/bs.js": "admin/js/vendor/select2/i18n/bs.debce43cfca2.js", "admin/js/vendor/select2/i18n/fi.js": "admin/js/vendor/select2/i18n/fi.2858f3167855.js", "admin/js/vendor/select2/i18n/hi.js": "admin/js/vendor/select2/i18n/hi.f81e979ec25f.js", "admin/js/vendor/select2/i18n/ja.js": "admin/js/vendor/select2/i18n/ja.442146837f55.js", "admin/js/vendor/select2/i18n/ne.js": "admin/js/vendor/select2/i18n/ne.f61bf00bc3fe.js", "admin/js/vendor/select2/i18n/sk.js": "admin/js/vendor/select2/i18n/sk.34019208b835.js", "admin/js/vendor/select2/i18n/da.js": "admin/js/vendor/select2/i18n/da.6bbc262044b3.js", "admin/js/vendor/select2/i18n/id.js": "admin/js/vendor/select2/i18n/id.322604a430a5.js", "admin/js/vendor/select2/i18n/es.js": "admin/js/vendor/select2/i18n/es.8b21ebdb01ee.js", "admin/js/vendor/select2/i18n/it.js": "admin/js/vendor/select2/i18n/it.110a0fa84968.js", "admin/js/vendor/select2/i18n/hu.js": "admin/js/vendor/select2/i18n/hu.9edad4c24fd0.js", "admin/js/vendor/select2/i18n/bn.js": "admin/js/vendor/select2/i18n/bn.b33721dc9b8a.js", "admin/js/vendor/select2/i18n/ms.js": "admin/js/vendor/select2/i18n/ms.ade6aba46542.js", "admin/js/vendor/select2/i18n/fa.js": "admin/js/vendor/select2/i18n/fa.1738b003dd26.js", "admin/js/vendor/select2/i18n/nb.js": "admin/js/vendor/select2/i18n/nb.e535138ca26b.js", "admin/js/vendor/select2/i18n/az.js": "admin/js/vendor/select2/i18n/az.1804c238d269.js", "admin/js/vendor/select2/i18n/ca.js": "admin/js/vendor/select2/i18n/ca.60f20182ff18.js", "admin/js/vendor/select2/i18n/ro.js": "admin/js/vendor/select2/i18n/ro.ea7e3b822b06.js", "admin/js/vendor/select2/i18n/pt.js": "admin/js/vendor/select2/i18n/pt.5b4ec8cb5b23.js", "admin/js/vendor/select2/i18n/is.js": "admin/js/vendor/select2/i18n/is.a8a13c9122d7.js", "admin/js/vendor/xregexp/LICENSE.txt": "admin/js/vendor/xregexp/LICENSE.d64cecf4f157.txt", "admin/js/vendor/xregexp/xregexp.min.js": "admin/js/vendor/xregexp/xregexp.min.c95393b8ca4d.js", "admin/js/vendor/xregexp/xregexp.js": "admin/js/vendor/xregexp/xregexp.1865b1cf5085.js", "admin/js/vendor/select2/LICENSE.md": "admin/js/vendor/select2/LICENSE.f94142512c91.md", "admin/js/vendor/select2/select2.full.js": "admin/js/vendor/select2/select2.full.d379d5235584.js", "admin/js/vendor/select2/select2.full.min.js": "admin/js/vendor/select2/select2.full.min.68e8d8f673b7.js", "admin/js/vendor/jquery/jquery.js": "admin/js/vendor/jquery/jquery.11c05eb286ed.js", "admin/js/vendor/jquery/LICENSE.txt": "admin/js/vendor/jquery/LICENSE.75308107741f.txt", "admin/js/vendor/jquery/jquery.min.js": "admin/js/vendor/jquery/jquery.min.220afd743d9e.js", "admin/css/vendor/select2/select2.min.css": "admin/css/vendor/select2/select2.min.af22a7e2bfec.css", "admin/css/vendor/select2/select2.css": "admin/css/vendor/select2/select2.fd9fe49d3d91.css", "admin/css/vendor/select2/LICENSE-SELECT2.md": "admin/css/vendor/select2/LICENSE-SELECT2.f94142512c91.md", "babybuddy/img/core/child-placeholder.png": "babybuddy/img/core/child-placeholder.7c0a81f0d7f0.png", "rest_framework/docs/js/jquery.json-view.min.js": "rest_framework/docs/js/jquery.json-view.min.b7c2d6981377.js", "rest_framework/docs/js/highlight.pack.js": "rest_framework/docs/js/highlight.pack.479b5f21dcba.js", "rest_framework/docs/js/api.js": "rest_framework/docs/js/api.c9743eab7a4f.js", "rest_framework/docs/css/base.css": "rest_framework/docs/css/base.3208b6cc4466.css", "rest_framework/docs/css/jquery.json-view.min.css": "rest_framework/docs/css/jquery.json-view.min.a2e6beeb6710.css", "rest_framework/docs/css/highlight.css": "rest_framework/docs/css/highlight.e0e4d973c6d7.css", "rest_framework/docs/img/grid.png": "rest_framework/docs/img/grid.a4b938cf382b.png", "rest_framework/docs/img/favicon.ico": "rest_framework/docs/img/favicon.5195b4d0f3eb.ico", "admin/js/admin/DateTimeShortcuts.js": "admin/js/admin/DateTimeShortcuts.a9c6d180860b.js", "admin/js/admin/RelatedObjectLookups.js": "admin/js/admin/RelatedObjectLookups.ea0683bea064.js", "admin/img/gis/move_vertex_on.svg": "admin/img/gis/move_vertex_on.0047eba25b67.svg", "admin/img/gis/move_vertex_off.svg": "admin/img/gis/move_vertex_off.7a23bf31ef8a.svg", "babybuddy/logo/icon2.png": "babybuddy/logo/icon2.be48fd16c53f.png", "babybuddy/logo/icon-brand.png": "babybuddy/logo/icon-brand.96e4491f2209.png", "babybuddy/logo/logo.png": "babybuddy/logo/logo.62870041cc83.png", "babybuddy/logo/icon.png": "babybuddy/logo/icon.6377611bf399.png", "babybuddy/js/app.js": "babybuddy/js/app.f14bdf07def3.js", "babybuddy/js/graph.js": "babybuddy/js/graph.8b669d614c06.js", "babybuddy/js/vendor.js": "babybuddy/js/vendor.2e6cbbdc5f80.js", "babybuddy/css/vendor.css": "babybuddy/css/vendor.be1a1448dd86.css", "babybuddy/css/app.css": "babybuddy/css/app.b562c9b5953b.css", "babybuddy/fonts/fontawesome-webfont.eot": "babybuddy/fonts/fontawesome-webfont.674f50d287a8.eot", "babybuddy/fonts/fontawesome-webfont.ttf": "babybuddy/fonts/fontawesome-webfont.b06871f281fe.ttf", "babybuddy/fonts/fontawesome-webfont.svg": "babybuddy/fonts/fontawesome-webfont.912ec66d7572.svg", "babybuddy/fonts/fontawesome-webfont.woff2": "babybuddy/fonts/fontawesome-webfont.af7ae505a9ee.woff2", "babybuddy/fonts/FontAwesome.otf": "babybuddy/fonts/FontAwesome.0d2717cd5d85.otf", "babybuddy/fonts/fontawesome-webfont.woff": "babybuddy/fonts/fontawesome-webfont.fee66e712a8a.woff", "babybuddy/root/site.webmanifest.json": "babybuddy/root/site.webmanifest.61dac00bb04b.json", "babybuddy/root/favicon-32x32.png": "babybuddy/root/favicon-32x32.076f1340f1cf.png", "babybuddy/root/favicon.ico": "babybuddy/root/favicon.1b19cfd81791.ico", "babybuddy/root/android-chrome-512x512.png": "babybuddy/root/android-chrome-512x512.89ee40b783cd.png", "babybuddy/root/favicon-16x16.png": "babybuddy/root/favicon-16x16.12c501486484.png", "babybuddy/root/mstile-150x150.png": "babybuddy/root/mstile-150x150.f231c8ff6157.png", "babybuddy/root/apple-touch-icon.png": "babybuddy/root/apple-touch-icon.33416748f239.png", "babybuddy/root/safari-pinned-tab.svg": "babybuddy/root/safari-pinned-tab.3de51db2baf2.svg", "babybuddy/root/android-chrome-192x192.png": "babybuddy/root/android-chrome-192x192.484bd0e8cb66.png", "babybuddy/root/browserconfig.xml": "babybuddy/root/browserconfig.5858221e0a38.xml", "babybuddy/root/android-chrome-384x384.png": "babybuddy/root/android-chrome-384x384.7849615a1e26.png", "rest_framework/js/jquery-3.4.1.min.js": "rest_framework/js/jquery-3.4.1.min.220afd743d9e.js", "rest_framework/js/prettify-min.js": "rest_framework/js/prettify-min.709bfcc456c6.js", "rest_framework/js/default.js": "rest_framework/js/default.5b08897dbdc3.js", "rest_framework/js/csrf.js": "rest_framework/js/csrf.969930007329.js", "rest_framework/js/bootstrap.min.js": "rest_framework/js/bootstrap.min.2f34b630ffe3.js", "rest_framework/js/ajax-form.js": "rest_framework/js/ajax-form.0ea6e6052ab5.js", "rest_framework/js/coreapi-0.1.1.js": "rest_framework/js/coreapi-0.1.1.8851fb9336c9.js", "rest_framework/css/prettify.css": "rest_framework/css/prettify.a987f72342ee.css", "rest_framework/css/font-awesome-4.0.3.css": "rest_framework/css/font-awesome-4.0.3.c1e1ea213abf.css", "rest_framework/css/bootstrap-tweaks.css": "rest_framework/css/bootstrap-tweaks.46ed116b0edd.css", "rest_framework/css/default.css": "rest_framework/css/default.8d5591a6aabc.css", "rest_framework/css/bootstrap-theme.min.css": "rest_framework/css/bootstrap-theme.min.66b84a04375e.css", "rest_framework/css/bootstrap.min.css": "rest_framework/css/bootstrap.min.77017a69879a.css", "rest_framework/fonts/fontawesome-webfont.eot": "rest_framework/fonts/fontawesome-webfont.8b27bc96115c.eot", "rest_framework/fonts/glyphicons-halflings-regular.svg": "rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg", "rest_framework/fonts/glyphicons-halflings-regular.woff2": "rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2", "rest_framework/fonts/glyphicons-halflings-regular.ttf": "rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf", "rest_framework/fonts/fontawesome-webfont.ttf": "rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf", "rest_framework/fonts/fontawesome-webfont.svg": "rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg", "rest_framework/fonts/glyphicons-halflings-regular.eot": "rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot", "rest_framework/fonts/glyphicons-halflings-regular.woff": "rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff", "rest_framework/fonts/fontawesome-webfont.woff": "rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff", "rest_framework/img/grid.png": "rest_framework/img/grid.a4b938cf382b.png", "rest_framework/img/glyphicons-halflings.png": "rest_framework/img/glyphicons-halflings.90233c9067e9.png", "rest_framework/img/glyphicons-halflings-white.png": "rest_framework/img/glyphicons-halflings-white.9bbc6e960299.png", "admin/js/prepopulate.min.js": "admin/js/prepopulate.min.85fd5e0fb706.js", "admin/js/calendar.js": "admin/js/calendar.aae57adab5f6.js", "admin/js/inlines.min.js": "admin/js/inlines.min.6d6c2416646e.js", "admin/js/SelectBox.js": "admin/js/SelectBox.99d0cfd2e80c.js", "admin/js/collapse.min.js": "admin/js/collapse.min.44dfdb427845.js", "admin/js/urlify.js": "admin/js/urlify.67bae52223e0.js", "admin/js/actions.min.js": "admin/js/actions.min.5fa8cb0403f1.js", "admin/js/popup_response.js": "admin/js/popup_response.6ce3197f8fc8.js", "admin/js/autocomplete.js": "admin/js/autocomplete.cfd2c4dc8981.js", "admin/js/collapse.js": "admin/js/collapse.c5b851e91226.js", "admin/js/change_form.js": "admin/js/change_form.9e85003a1a38.js", "admin/js/jquery.init.js": "admin/js/jquery.init.95b62fa19378.js", "admin/js/actions.js": "admin/js/actions.8d83e3af0fbd.js", "admin/js/prepopulate_init.js": "admin/js/prepopulate_init.0d3b53c37074.js", "admin/js/inlines.js": "admin/js/inlines.12d1af430335.js", "admin/js/prepopulate.js": "admin/js/prepopulate.2f90da7170ec.js", "admin/js/cancel.js": "admin/js/cancel.a2c3149a1c5e.js", "admin/js/SelectFilter2.js": "admin/js/SelectFilter2.c26733924aea.js", "admin/js/core.js": "admin/js/core.ea39b3bd34c3.js", "admin/css/changelists.css": "admin/css/changelists.cfe316f81936.css", "admin/css/login.css": "admin/css/login.252ffabd6548.css", "admin/css/fonts.css": "admin/css/fonts.168bab448fee.css", "admin/css/responsive.css": "admin/css/responsive.755ce0b07393.css", "admin/css/autocomplete.css": "admin/css/autocomplete.781713f30664.css", "admin/css/base.css": "admin/css/base.ae33e6383baa.css", "admin/css/widgets.css": "admin/css/widgets.8874c301e7bc.css", "admin/css/forms.css": "admin/css/forms.9f1ffc442e9a.css", "admin/css/dashboard.css": "admin/css/dashboard.7ac78187c567.css", "admin/css/rtl.css": "admin/css/rtl.30f903442dc5.css", "admin/css/responsive_rtl.css": "admin/css/responsive_rtl.51c7445ceeff.css", "admin/fonts/LICENSE.txt": "admin/fonts/LICENSE.d273d63619c9.txt", "admin/fonts/Roboto-Bold-webfont.woff": "admin/fonts/Roboto-Bold-webfont.50d75e48e0a3.woff", "admin/fonts/Roboto-Light-webfont.woff": "admin/fonts/Roboto-Light-webfont.c73eb1ceba33.woff", "admin/fonts/README.txt": "admin/fonts/README.ab99e6b541ea.txt", "admin/fonts/Roboto-Regular-webfont.woff": "admin/fonts/Roboto-Regular-webfont.35b07eb2f871.woff", "admin/img/icon-changelink.svg": "admin/img/icon-changelink.18d2fd706348.svg", "admin/img/icon-no.svg": "admin/img/icon-no.439e821418cd.svg", "admin/img/selector-icons.svg": "admin/img/selector-icons.b4555096cea2.svg", "admin/img/search.svg": "admin/img/search.7cf54ff789c6.svg", "admin/img/icon-yes.svg": "admin/img/icon-yes.d2f9f035226a.svg", "admin/img/icon-addlink.svg": "admin/img/icon-addlink.d519b3bab011.svg", "admin/img/icon-clock.svg": "admin/img/icon-clock.e1d4dfac3f2b.svg", "admin/img/LICENSE": "admin/img/LICENSE.2c54f4e1ca1c", "admin/img/icon-viewlink.svg": "admin/img/icon-viewlink.41eb31f7826e.svg", "admin/img/icon-unknown.svg": "admin/img/icon-unknown.a18cb4398978.svg", "admin/img/README.txt": "admin/img/README.a70711a38d87.txt", "admin/img/icon-calendar.svg": "admin/img/icon-calendar.ac7aea671bea.svg", "admin/img/sorting-icons.svg": "admin/img/sorting-icons.3a097b59f104.svg", "admin/img/tooltag-arrowright.svg": "admin/img/tooltag-arrowright.bbfb788a849e.svg", "admin/img/icon-deletelink.svg": "admin/img/icon-deletelink.564ef9dc3854.svg", "admin/img/tooltag-add.svg": "admin/img/tooltag-add.e59d620a9742.svg", "admin/img/inline-delete.svg": "admin/img/inline-delete.fec1b761f254.svg", "admin/img/icon-alert.svg": "admin/img/icon-alert.034cc7d8a67f.svg", "admin/img/icon-unknown-alt.svg": "admin/img/icon-unknown-alt.81536e128bb6.svg", "admin/img/calendar-icons.svg": "admin/img/calendar-icons.39b290681a8b.svg"}, "version": "1.0"} \ No newline at end of file